1一、设计题目与要求【问题描述】设计一个计算机管理系统完成图书管理基本业务。【基本要求】(1)每种书的登记内容包括书号、书名、著作者、现存量和库存量;(2)对书号建立索引表(线性表)以提高查找效率;(3)系统主要功能如下:①采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;②借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号和归还期限,改变现存量;③归还:注销对借阅者的登记,改变该书的现存量。二、小组分工小组成员:小组分工:图书初始化、新书入库、登记读者信息、文件保存借书系统、还书系统图书信息查询、读者信息查询三、需求分析图书管理系统共需要八个模块,分别是1图书初始化、2新书入库、3添加读者信息、4借书模块、5还书模块、6查询图书信息、7查询读者信息、8退出。我负责其中的四个模块,如下所示:1)图书初始化输入图书的一些信息,编号、作者、书名、数量,使有一定的库存。2)新书入库新书采编入库,输入编号后如果有次数只需输入数量,没有则继续输入书名、作者、数量。3)添加读者信息读者信息初始化,输入读书证号和姓名,只有输入书证号和姓名才能进行借书还书4)退出和文件保存退出读书管理系统并保存读者和图书信息。2四、概要设计图书信息和读者信息都采用结构体类型保存。图书信息里面包括:图书编号、图书名称、作者、现有量、库存量、指向下一节点的指针。读者信息里面包括:读者编号、读者姓名、借书数量、可借图书数量、指向下一节点的指针。所有图书和读者都分别以链表的形式存储,并以编号为唯一主键。采用链表形式便于数据的添加与删改。主要的操作为:系统初始化,图书入库,读者信息登记,图书信息和读者信息文件的保存。五、详细设计数据结构的定义:图书信息:typedefstructbook{图书管理系统图书管理模块理读者管理模块借阅操作模块查询操作模块初始化图书信息采编入库输入读者信息借书系统还书系统读者信息查询图书信息查询3charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;intbook_kc;structbook*next;}BK;读者信息:typedefstructreader{charreader_num[10];charreader_name[10];intright;BOborrow[Max];structreader*next;}RD;算法描述:进入系统后首先进行图书初始化,输入图书的信息。1)初始化初始化之后,进入系统,显示功能列表,可选择任意系统,但在借书之前先要输入读者信息。开始输入图书编号、名称、作者和图书数量进入系统42)采编入库否录入图书信息判断是否有此图书在原有的纪录上加上现有的图书数量向系统中加入新纪录开始输入功能所对应的数字错误!请重新输入执行所选功能输入的数字小于0大于6采编入库是53)输入读者信息是5)退出和文件保存登记读者输入读者信息:读者书证号向系统中添加新记录结束判断是否存在此读者重新输入读者信息否退出系统保存文件判断是否保存成功退出系统是错误!请重新登陆系统6六、程序源代码#includestdio.h#includestring.h#includestdlib.h#includeconio.h#defineMax4typedefstructbook{charbook_num[10];charbook_name[20];charbook_writer[10];intbook_xy;//现有intbook_kc;//库存structbook*next;}BK;typedefstructborrow{charborrow_book_num[10];charlimit_date[10];}BO;typedefstructreader{charreader_num[10];charreader_name[10];intright;BOborrow[Max];structreader*next;}RD;BK*h_book;RD*h_reader;voidLogin();intMenu();voidInit();voidInit_book();voidMenu_select();voidInsert_New_Book();voidFind_Book();voidadd_reader();7voidSave();voidSave_Book();voidSave_Reader();voidLoad();voidLoad_Reader();voidLoad_Book();voidLogin(){system(cls);printf(\n\n\n\t\t***************************************\n);printf(\n\n\n\t\t\t欢迎使用图书管理系统\n);printf(\n\n\n\t\t***************************************\n);printf(\n\n\n\t\t按任意键进入系统);getch();system(cls);}intMenu()/*主菜单*/{intdm;printf(\n\t\t图书管理系统主菜单\n);printf(=================================================\n);printf(*\t0----退出系统\n);printf(*\t1----采编入库\n);printf(*\t2----登记读者\n);printf(=================================================\n);printf(请选择相应的代码:);for(;;){scanf(%d,&dm);//dm输入的数字if(dm0||dm6)printf(\n错误!请重新输入:);elsebreak;}returndm;}voidMenu_select()/*主菜单选择函数*/{for(;;){switch(Menu())/*功能选择*/{case0:system(cls);Save();printf(\n\n\t文件保存成功!\n);printf(\n\n\t欢迎下次使用本系统!\n);getch();exit(0);8case1:Insert_New_Book();break;case2:add_reader();break;default:printf(\n错误!);exit(0);}}}voidInit()/*初始化*/{BK*p0;printf(\n图书初始化开始,请输入图书信息\n包括编号.书名.数量\n);p0=(BK*)malloc(sizeof(BK));h_book=p0;printf(\n请输入图书信息:\n);printf(图书编号:);/*输入图书编号(唯一)*/scanf(%s,p0-book_num);printf(图书名称:);/*输入图书名称*/scanf(%s,p0-book_name);printf(图书作者:);/*输入图书作者*/scanf(%s,p0-book_writer);printf(图书数量:);/*输入图书数量*/scanf(%d,&p0-book_kc);p0-book_xy=p0-book_kc;/*开始时图书现有量和库存量相等*/p0-next=NULL;printf(\n图书信息初始化完毕!按任意键继续下一步操作\n);getch();system(cls);}voidInsert_New_Book()/*新书入库*/{BK*p,*p0,*p1;p=p1=h_book;printf(\n新书入库模块\n);printf(\n请输入新书信息\n包括书号.书名.数量\n);p0=(BK*)malloc(sizeof(BK));printf(图书编号:);scanf(%s,p0-book_num);while(strcmp(p0-book_num,p1-book_num)!=0&&p1-next!=NULL)p1=p1-next;if(strcmp(p0-book_num,p1-book_num)==0)/*此处分两种情况,若图书编号存在,则直接进库,只须输入书的数量*/9{printf(\n此编号图书已存在!!直接入库!\n);printf(图书数量:);scanf(%d,&p0-book_kc);p1-book_kc+=p0-book_kc;p1-book_xy+=p0-book_kc;}else/*若不存在,则需要输入其他的信息,然后在进行插入操作*/{printf(图书名称:);scanf(%s,p0-book_name);printf(图书作者:);scanf(%s,p0-book_writer);printf(图书数量:);scanf(%d,&p0-book_kc);//库存数量while(p-next){p=p-next;}if(h_book==NULL)h_book=p0;/*此处分两种情况,链表中没有数据,head直接指向p0处*/elsep-next=p0;/*此处分两种情况,链表中有数据,链表中最后元素的next指向p0处*/p0-next=NULL;p0-book_xy=p0-book_kc;}printf(\n新书入库完毕!按任意键继续下一步操作\n);getch();system(cls);}voidadd_reader()/*添加读者*/{RD*p0,*p,*p1;inti;p=h_reader;printf(\n读者初始化开始,请输入读者信息.\n包括书证号.姓名..\n);if(p==NULL){p0=(RD*)malloc(sizeof(RD));/*申请新结点存储空间*/h_reader=p0;p=h_reader;printf(读者书证号:);scanf(%s,p0-reader_num);printf(读者姓名:);scanf(%s,p0-reader_name);p0-right=0;10for(i=0;iMax;i++){strcpy(p0-borrow[i].borrow_book_num,0);/*所借图书直接置为(即没有借书)*/strcpy(p0-borrow[i].limit_date,0);}p0-next=NULL;}else{p0=(RD*)malloc(sizeof(RD));p1=h_reader;printf(\n请输入读者的信息:\n);printf(读者书证号:);scanf(%s,p0-reader_num);for(;;){while(strcmp(p0-reader_num,p1-reader_num)!=0&&p1-next!=NULL)p1=p1-next;if(strcmp(p0-reader_num,p1-reader_num)==0){printf(\n此读者编号已存在,请重新输入!\n);printf(读者书证号:);scanf(%s,p0-reader_num);p1=h_reader;}else{printf(读者姓名:);scanf(%s,p0-reader_name);break;}}p0-right=0;for(i=0;iMax;i++){strcpy(p0-borrow[i].borrow_book_num,0);/*所借图书直接置为(即没有借书)*/strcpy(p0-borrow[i].limit_date,0);}p1-next=p0;p1=p1-next;p1-next=NULL;}printf(\n读者信息初始化完毕!按任意键继续下一步操作..\n);getch();11system(cls);}voidSave()/*保存信息*/{Save_Reader(