实验一管理软件系统的开发一、实验题目:设计一个简单实用图书管理系统。二、实验要求1.该实验的课内学时是4个课时。2.程序完成后应该完成如下基本功能:1)用自定义结构体typedefstruct设计该软件的数据结构;2)用链表将所有的图书按照图书编号顺序链接起来。3)程序能够输入图书名称、图书编号、ISBN号、单价、作者、出版社。4)程序能够显示已经输入的指定图书编号的图书的信息。5)程序能够统计某一类图书(ISBN号相同)的数量。6)能够判断输入的ISBN号以及图书编号的有效性。3.1)程序能够按要求显示指定作者或者指定出版社的图书的数量。2)允许添加、修改、删除图书信息。3)设计一个通用模块,能够根据图书的任何一项信息进行排序,并且根据图书编号进程排序(升序或者降序)。4)能够输入的数据长期存储在文件中,再次运行程序时从文件中读取数据,无须重复输入。5)在程序的提示语言清晰明确,界面美观并且适用。三、层次及模块分析三、主要模块设计Book,*BookList;//图书(列表)数据类型typedefstructnode4{charReaderName[10];//读者姓名intReaderNo,Rented;//读者编号、借书数量借书还书上架新书信息录入部分图书信息修改下架图书信息删除除操作选择菜单图书信息查询所有图书信息以文件形式输出保存与从外界文件加载图书管理系统1、图书编号输入2、图书ISBN输入3、图书编号生成4、图书名称输入5、图书作者输入6、图书出版社输入7、图书价格输入8、图书总册数及借出册数输入9、图书信息地址查询10、图书信息输出11、图书排序12、图书借阅信息输入13、读者编号输入14、读者信息地址查询1、9、12、13、141、9、12、13、143、2、4、5、6、7、8、1、9、151、9、2、4、5、6、7、8、121、9、11、1015、图书信息删除ReadInfoListreadinfo;//借书信息structnode4*Next;//下一读者}Reader,*ReaderList;//读者(列表)数据类型//全局变量BookListL;ReaderListR;//函数声明voidmainmenu();voidExit();voidRentBook();voidReaderNoInput();Book*BookNoSearch(intBookNo);Reader*ReaderNoSearch(intReaderNo);voidDateInput(Date*d);voidBackBook();voidInfoWriteMenu();voidBookNoInput(Book*writebook);voidISBNInput(Book*writebook);voidPriceInput(Book*writebook);voidBookNameInput(Book*writebook);voidAuthorInput(Book*writebook);voidPublisherInput(Book*writebook);voidRentInfoWrite(Book*writebook);voidBookInfoResearch();voidBookNoResearch();voidBookInfoPrn(Book*B);voidISBNResearch();Book*ISBNSearch(intisbn);voidBookNameResearch();voidBookResort(BookListL);voidResortbyBookNo(BookListL);voidResortbyISBN(BookListL);voidResortbyBookName(BookListL);voidResortbyAuthor(BookListL);voidResortbyPublisher(BookListL);voidResortbyPrice(BookListL);voidAuthorResearch();voidPublisherResearch();voidPriceResearch();voidAddBook();voidDeleteBook();voidBookInfoLoad();voidReaderInfoLoad();//主菜单设计voidmainmenu(){intOpratNo;printf(********欢迎使用图书管理系统--揽月制作********\n\t请输入所选操作的序号加回车结束!\n\t1--借书!\n\t2--还书!\n\t3--图书信息修改!\n\t4--图书信息查询!\n\t5--新书上架信息录入!\n\t6--下架图书信息删除!\n\t7--退出图书管理系统!\n);scanf(%d,&OpratNo);switch(OpratNo){case1:RentBook();break;case2:BackBook();break;case3:InfoWriteMenu();break;case4:BookInfoResearch();break;case5:AddBook();break;case6:DeleteBook();break;case7:Exit();}}//退出系统voidExit(){printf(退出系统成功!下次再见!\n);return;}//借书模块voidRentBook(){Book*book;Reader*reader;book=(Book*)malloc(sizeof(Book));reader=(Reader*)malloc(sizeof(Reader));Book*rentbook;Reader*bookreader;RentInfo*R1,*R2;ReadInfo*r1,*r2;intOprNo;printf(您将进行借书操作请按提示操作!\n);printf(请输入所借图书的编号!\n);BookNoInput(book);//图书编号输入rentbook=BookNoSearch(book-BookNo);//按编号查询图书信息存储地址if(rentbook){rentbook-Rented++;//借出册数加1R2=(RentInfo*)malloc(sizeof(RentInfo));R1=rentbook-rentinfo-Next;while(R1-Next){R1=R1-Next;}R1-Next=R2;R2-Next=NULL;printf(请输入借书读者编号!);ReaderNoInput(reader);//读者编号输入bookreader=(Reader*)ReaderNoSearch(reader-ReaderNo);//按读者编号搜索读者信息存储地址if(bookreader){bookreader-Rented++;//借书册数加1r2=(ReadInfo*)malloc(sizeof(ReadInfo));r1=bookreader-readinfo-Next;while(r1-Next){r1=r1-Next;}r1-Next=r2;r2-Next=NULL;R2-BookReader=bookreader;r2-RentedBook=rentbook;printf(请输入借书年、月、日!);DateInput(&R2-RentDate);//日期输入printf(请再次输入借书年、月、日!);DateInput(&r2-RentDate);//日期输入free(book);free(reader);printf(借书操作完成!);}elseprintf(借书操作失败!\n);}elseprintf(借书操作失败!\n);printf(继续借书请按1加回车,返回主菜单请按2加回车,退出管理系统请按3加回车!);scanf(%d,&OprNo);switch(OprNo){case1:RentBook();break;case2:mainmenu();break;case3:Exit();}}//读者编号输入模块voidReaderNoInput(Reader*writereader){scanf(%d,writereader-ReaderNo);}//按编号查询图书信息存储地址模块Book*BookNoSearch(intBookNo){Book*B;while(B-BookNo!=BookNo&&B-Next){B=B-Next;}if(B-BookNo=BookNo)returnB;else{printf(该编号图书不存在!\n);returnNULL;}}//按编号查询读者信息存储地址模块Reader*ReaderNoSearch(intReaderNo){Reader*r=R;if(r-Next!=NULL){r=r-Next;while(r-ReaderNo!=ReaderNo&&r-Next)r=r-Next;if(r-ReaderNo=ReaderNo)returnr;else{printf(该编号读者不存在!\n);returnNULL;}}}//日期输入模块voidDateInput(Date*d){printf(请输入年、月、日以空格间隔回车结束!\n);scanf(%d%d%d,d-year,d-month,d-day);}//还书模块设计voidBackBook(){//intbookno,rederno;Book*backbook;Book*booksign;Reader*bookreader;Reader*readersign;RentInfo*R1,*R2;ReadInfo*r1,*r2;intOprNo;booksign=(Book*)malloc(sizeof(Book));readersign=(Reader*)malloc(sizeof(Reader));printf(您将进行还书操作请按提示操作!\n);printf(请输入所还图书的编号!\n);BookNoInput(booksign);//图书编号输入backbook=BookNoSearch(booksign-BookNo);//按编号查询图书信息存储地址printf(请输入借书读者编号!);ReaderNoInput(readersign);//读者编号输入bookreader=(Reader*)ReaderNoSearch(readersign-ReaderNo);//按读者编号搜索读者信息存储地址if(backbook&&bookreader){R2=backbook-rentinfo;R1=R2-Next;r2=bookreader-readinfo;r1=r2-Next;while(R1-BookReader!=bookreader&&R1-Next){R2=R1;R1=R1-Next;}while(r1-RentedBook!=backbook&&r1-Next){r2=r1;r1=r1-Next;}if(r1-RentedBook==backbook&&R1-BookReader==bookreader){backbook-Rented--;bookreader-Rented--;R2-Next=R1-Next;free(R1);r2-Next=r1-Next;free(r1);printf(还书操作完成!\n);}elseprintf(输入错误还书操作失败!\n);}printf(继续还书请按1加回车,返回主菜单请按2加回车,退出管理系统请按3加回车!);scanf(%d,&OprNo);switch(OprNo){case1:BackBook();break;case2:mainmenu();break;case3:Exit();}}//图书信息修改菜