C++大作业 图书管理系统 实验报告
c图书管理系统实验报告

c图书管理系统实验报告C图书管理系统实验报告摘要:本实验报告通过对C图书管理系统的设计、实现和测试,展示了该系统的功能和性能。
实验结果表明,C图书管理系统具有良好的稳定性和高效性,能够满足图书管理的需求。
1. 引言图书管理系统是一个用于管理图书信息、借阅记录和读者信息的软件系统。
随着图书馆规模的扩大和信息化的发展,图书管理系统的重要性日益凸显。
C图书管理系统是一个基于C语言开发的图书管理软件,具有良好的稳定性和高效性。
2. 设计与实现C图书管理系统的设计和实现主要包括以下几个方面:(1)数据库设计:设计图书信息、读者信息和借阅记录等数据库表结构,确保数据存储的有效性和完整性。
(2)功能实现:实现图书信息的录入、查询和修改功能,实现读者信息的管理和借阅记录的管理功能。
(3)界面设计:设计用户友好的界面,方便用户进行操作和查询。
3. 功能测试在实验中,我们对C图书管理系统进行了功能测试,主要包括以下几个方面:(1)图书信息管理:测试图书信息的录入、查询和修改功能,确保信息的准确性和完整性。
(2)读者信息管理:测试读者信息的录入、查询和修改功能,确保信息的准确性和完整性。
(3)借阅记录管理:测试借阅记录的录入、查询和修改功能,确保记录的准确性和完整性。
4. 性能测试在实验中,我们对C图书管理系统进行了性能测试,主要包括以下几个方面:(1)系统稳定性:测试系统在长时间运行中是否会出现崩溃或卡顿现象,确保系统的稳定性。
(2)响应速度:测试系统在查询和操作时的响应速度,确保系统的高效性。
5. 实验结果经过功能测试和性能测试,我们得出了以下实验结果:(1)C图书管理系统具有良好的稳定性,长时间运行中未出现崩溃或卡顿现象。
(2)C图书管理系统具有较快的响应速度,在查询和操作时能够快速响应用户的需求。
6. 结论C图书管理系统在设计、实现和测试中表现出良好的功能和性能,能够满足图书管理的需求。
通过本实验报告的展示,我们相信C图书管理系统将会成为图书馆管理的重要工具,为图书馆的信息化建设提供有力支持。
C实习报告--图书信息管理系统设计

C 语言课程实习报告所在院系:__数学与物理学院__班级学号:__121091 __姓名:程序已存档:指导老师:____评分:____________二零一零年七月十五日图书信息管理系统设计图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:1. 系统以菜单方式工作2. 图书信息录入功能〔图书信息用文件保存〕3. 图书信息浏览功能4. 图书信息查询功能5. 图书信息的删除与修改〔可选项〕根据题目要求,需建立图书信息构造体,构造体中应包括图书登录号、书名、作者名、分类号、出版单位、出版时间、价格。
图书信息应存放在文件中,所以提供文件的输入输出等操作;并且程序需具有实现图书信息浏览、查询、删除等功能,并可对图书信息进展选择性修改;另外还应提供键盘是选择菜单来实现功能选择。
三.总体设计.结合上述分析该系统应包括以下模块:信息录入、信息查询、信息浏览、信息删除、1、 主函数主函数要求设计比拟简洁,只提供设输入,处理和输出局部的函数调用。
其中[流程图][程序]Void main(){int a;/*变量保存选择菜单数字,判断输入的数字是否在功能人能够菜单所对应的数字范围内*/ menu: page_title("操作菜单"); /*调用页眉打印函数*/printf("\t\t请用数字键选择操作\n\n");printf("\t\t1 图书信息录入\n\n\t\t2 图书信息查询\n\n");printf("\t\t3 图书信息浏览\n\n\t\t4 图书信息修改\n\n");printf("\t\t5 图书信息删除\n\n\t\t0 退出\n");/*对功能选项的显示*/printf("\n\t选择使用功能种类(0--5)[ ]\b\b");scanf("%d",&a);if(a<0||a>5) /*对选择的数字作判断*/{printf〔"\t无该项功能,请重新选择:"〕; scanf("%d",&a);}/*实现选择功能*/switch(a){case 1 : book_luru();break;case 2 : book_search();break;case 3 : book_scan();break;case 4 : book_modify();break;case 5 : book_del();break;case 0 : exit(0); break; }} /*以上完成了主函数计主菜单的构成*/2数据构造根据题目中对数据构造的要求每一本图书包含的信息利用一个构造体来存放。
c语言图书管理系统实践报告

北京师大学分校C程序设计实践报告题目:图书管理系统学院信息技术学院专业计算机科学与技术学生姓名龙海恩,少彬,鑫,麦淑玲指导教师姓名肖红玉指导教师单位信息技术学院2013 年 4 月11 日1、题目与要求编写一个图书管理系统,除了书上的功能之外,还要能做到读者借书还书,查看书籍排行榜,看到书籍的借阅记录和分类状况。
2、系统总体设计(要给出必要的文字说明及图示)本报告中蓝色字体为我们小组新增的图书信息。
2.1功能需求分析(明确系统的功能需求)(1)用户登录(2)系统主控平台(3)新增图书信息处理(4)浏览图书信息处理(5)查询图书信息处理(6)删除图书信息(7)保存图书信息处理(8)普通用户借书信息处理(9)普通用户还书信息处理(10)普通用户可查看已借书籍(11)查看排行榜(12)新增用户信息(13)查找用户(14)查看所有用户(15)保存用户信息(16)退出2.2系统功能模块划分(要给出系统功能模块图)(1)登录系统(2)增加图书信息(3)浏览图书信息(4)查找图书信息((1))按书名查找((2))按作者查找((3))按出版社查找((4))按出版日期查找((5))按ISBN查找((6))按图书类型查找(5)删除图书信息保存图书信息(6)图书排行榜(7)新增用户信息(8)查找用户信息(9)更新用户信息(10)删除用户信息(11)保存用户信息(12)退出系统((1))管理员退出系统((2))普通用户退出系统3、详细设计本系统包括图书信息管理和用户管理两大面,程序有三大模块,有三个源程序文件(management.c、book.c、user.c)和三个头文件(management.h、book.h、user.h)。
其中book.c完成的是图书信息的管理,包括新增图书、浏览图书、查询图书、删除图书、保存图书功能。
user.c完成的是用户信息的管理,包括新增用户、用户查询、保存用户等功能。
management.c完成的是用户登录,用户退出等功能。
C语言程序设计--图书管理系统--实训报告

目录1 前言 (2)2 系统需求分析 (3)2.1 问题定义 (3)2.2 需求分析 (3)3 系统设计 (3)3.1 系统总体设计 (3)3.2 功能模块设计 (4)4 系统实现 (10)4.1 系统硬件环境 (10)4.2 系统软件环境 (10)4.3 开发工具 (10)4.4 系统详细设计与实现 (10)4.4.1 系统菜单设计 (10)4.4.2 数据结构设计 (13)4.4.3 系统功能模块 (14)5 主要技术 (27)6 系统测试 (27)6.1 测试用例设计 (27)6.2 测试结果分析 (27)实训体会 (28)1 前言近年来,随着图书馆规模的不断扩大,图书数量也相应的增加,有关图书的各种信息量也成倍增加,面对庞大的信息量,传统的人工管理方式会导致图书管理上的混乱,人力与物力过多浪费,图书管理费用的增加,从而使图书馆的负担过重,影响整个图书馆的运作和控制管理,因此,必须制定一套合理、有效、规范和实用的图书管理系统,对图书资料进行集中统一管理。
另一方面IT产业和Internet获得了飞速发展,计算机应用已渗透到了各个领域,引起信息管理革命,实现信息的自动化处理,提高了处理的及时性和正确性。
图书馆里工作面对大量的可模块化处理的信息,是当今信息革命的一个重要阵地。
图书管理系统采用现代化的信息管理方式代替手工管理方式,提高图书管理工作效率,做到信息的规范管理,科学统计和快速查询,让图书馆更好的为学校,社会服务。
2 系统需求分析2.1 问题定义此图书管理系统用于增加、删除图书,管理借阅者信息,方便检索书籍,及查找借阅者信息,适用于图书管理员使用。
2.2 需求分析本图书管理系统的主要功能包括如下:一图书管理:新书入库、删除图书;二借阅管理:借阅图书、归还图书;三查找管理:按书号查找、按书名查找、按作者查找;四信息管理:查看借阅者借阅的全部图书、查看全部超期未还的图书。
3 系统设计3.1 系统总体设计3.2 功能模块设计一 新书入库模块新书入库模块由函数Buy(ook &boo, char BuyNum[])来实现,形参为:初始化的包括书号、书名、作者、总库存量、现库存量的结构体和一个书号。
C语言图书管理系统程序设计实习报告

1.题目要求图书管理信息包括:图书名称、图书编号、单价、作者、存在状态、借书人姓名、性别、学号等,试设计一图书管理系统,使之能提供以下功能:(1)新图书基本信息的输入。
(2)图书基本信息的查询。
(3)对撤销图书信息的删除。
(4)办理借书的手续。
(5)办理还书的手续。
2.需求分析这是一个能简单管理图书的小型图书管理系统,其中图书信息包括:书名,作者名,书编号,分类,出版社,价格等。
通过这些信息使之提供以下功能:(1)图书信息的创建功能。
其中图书信息包括:书名,作者名,书编号,分类,出版社,价格等。
(图书信息用文件保存)(2)图书信息查看功能。
用来查看各项图书信息。
(3)图书信息查找功能。
通过已知信息来查找想要的图书。
(4)图书信息的删除。
可以删除指定图书。
(5)图书信息的修改。
可以修改图书的各项信息。
(6)菜单选择功能,次功能也是图书信息管理系统的入口,用户所要进行的各种操作均需要在此模块中进行选择并进行调用其他模块实现相应的功能。
3.总体设计(1)数据结构图书管理系统中主要的数据结构包含书名、图书书号、作者名、分类、出版社、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。
struct Book /*定义结构体数组*/{char ISBN[14]; //编号char Name[20]; //名称char Author[20]; //作者char Type[10]; //类型char Pub[20]; //出版社char Date[10]; //出版日期float Price; //价格};(2)模块分化本系统主要有添加图书、查找图书、搜索图书、删除图书、修改图书几个基本功能。
函数声明:int Choose(); //选择int Add(); //添加图书int View(); //查找图书int Search(); //搜索图书int Delete(); //删除图书int Modify(); //修改图书int menu(); //返回系统4.详细设计流程图:4.1主函数函数的原型:void main()函数的功能:调用菜单,使用各项功能。
C图书管理系统实验报告

面向对象程序设计(C++语言)课程设计设计说明书图书管理系统的设计与实现起止日期:年月日至年月日学生姓名班级学号成绩指导教师(签字)计算机与通信学院年月日图书管理系统一.需求分析图书馆是目前生活中除了网络外的另一个获取知识的重要场所。
利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。
同时是学习完《面向对象程序设计》课程后进行的一次全面的综合练习。
有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。
二.设计要求:1.图书信息包括:登录号、书名、作者名、分类号、出版单位、出版时间、价格等。
试设计一图书信息管理系统,使之能提供以下功能:2.系统以菜单方式工作3.图书信息录入功能(图书信息用文件保存)--输入4.图书信息浏览功能--输出5.查询和排序功能:(至少一种查询方式)--算法6.按书名查询7.按作者名查询8.图书信息的删除与修改(可选项)三.概要设计1、类的设计①、Book类的设计(内部函数流程图):②、BDatabase类的设计:③、主函数流程图:4多态的实现class People{public:virtual void card(){cout<<"card people"<<endl;}};class Student:public People{public:virtual void card(){cout<<"card student"<<endl;} };四、详细设计:#define StrNum 20#define Type 20#include <iostream>#include <iomanip>#include <string>#include <fstream> ddbook(n,na,kin);return 1;}return 0;}Book *query(int bookid) etnum()==bookid &&book[i].getlab()==0) {return &book[i];}return NULL;}void disp() etlab()==0)book[i].disp();}~BDatabase() etlab()==0)((char *)&book[i],sizeof(book[i]));();}};void main(){BDatabase BookDB;char choice;char bname[40];char bkind[40];char newType[20];int bookid;Book *b;while (choice!='0'){cout<<"\t***************************************************************** *\n";cout<<" \n\n";cout<<"\t\t\t图书管理系统\n\n";cout<<"\t\t\t1 新增图书记录\n";cout<<"\t\t\t2 更改图书记录\n";cout<<"\t\t\t3 删除图书记录\n";cout<<"\t\t\t4 查找图书记录\n";cout<<"\t\t\t5 显示图书记录\n";cout<<"\t\t\t6 清空全部记录(慎用)\n";cout<<"\t\t\t0 退出系统\n";cout<<"\t\t\t7 人员\n";cout<<" \n\n";cout<<"\t************************************************************** ****\n";cout<<"请选择(1,2,3,4,5,6,0):";cin>>choice;switch (choice){case '1':cout<<"输入图书编号:"<<endl;cin>>bookid;cout<<"输入图书类型:"<<endl;cin>>newType;cout<<"输入图书书名:"<<endl;cin>>bname;(bookid,bname,newType);break;case '2':cout<<"输入图书编号:"<<endl;cin>>bookid;b=(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"输入新的书名:"<<endl;cin>>bname;b->setname(bname);cout<<"输入新的类型:"<<endl;cin>>bkind;b->setkind(bkind);break;case '3':cout<<"读入图书编号:"<<endl;cin>>bookid;b=(bookid);if(b==NULL){cout<<"该图书不存在"<<endl;break;}char tg1;cout<<"确定要删除此记录吗(Y/N)"<<endl;cin>>tg1;if(tg1!='n'&&tg1!='N'){b->delbook();cout<<"已成功删除该书记录!"<<endl;break;}case '4':cout<<"读入图书编号:"<<endl;cin>>bookid;b=(bookid);if (b==NULL){cout<<"该图书不存在"<<endl;break;}cout<<"图书编号图书名称图书类型\n";b->disp();break;case '5':cout<<"图书编号图书名称图书类型\n";b=(bookid);b->disp();break;case '6':char tg2;cout<<"确定要清空所有记录吗(Y/N)"<<endl;cin>>tg2;if(tg2!='n'&&tg2!='N'){();cout<<"已成功清空记录!"<<endl;break;}case '0':break;default:cout<<"输入错误,请从新输入(数字为0~6):";case'7':Student student;People *ppeople=&student;People &ref=student;ppeople->card();();break;}}}五.用户使用说明本系统实现了图书管理系统的典型功能,包括查询所有记录的信息,添加查找等功能,基本符合设计要求,利用类的封装实现了一定的安全性,函数的实现与调用在主函数中实现。
图书管理系统 程序实验报告

课程设计报告书图书管理系统程序实践报告1.概述1)程序实践题目:图书管理系统1、具有新进图书基本信息的录入、已有信息的修改、撤销图书信息的删除功能。
2、图书信息的查询(按作者名、专业领域检索,找出某读者的借阅信息、某本书的流通情况等)3、为借书人办理注册。
4、办理借、还书手续5、有关信息保存在文件中。
6、要有信息描述,如图书名称、专业领域、图书编号、单价、作者、出版社、存在状态、借书人姓名、性别、学号等7、借书数量不超过10本。
2)程序实践目的:更深入地理解和掌握课程大一上学期c语言教学中的有关基本概念,运用学过的知识进行实际编程,应用基本技术解决实际问题从而进一步提高分析问题和解决问题的能力。
3)程序实践具体要就:本程序使用codeblocks 软件进行编译;需要灵活运用C语言的链表知识和文件知识;在编程前,我对文件方面的知识尚不了解,同时对如atoi(),Sleep(),等函数不了解。
2.软件需求分析1)软件功能:1.初始化图书链表,学生链表(即清空当前内存中图书信息,学生信息)2.创建新的图书链表,学生链表3.查找图书信息,学生信息4.查看当前图书链表上所有图书的信息,当前学生链表上所有学生的信息5.添加修改删除图书信息6.查看图书借阅信息7.被删除的书先被放在回收站,管理员可以查看回收站,并决定彻底删除图书信息或是恢复已删图书8.学生借书还书9.读取文件上的链表保存链表到文件2)性能需求3)约束条件:本程序代码使用codeblocks编译没有错误出现,并且程序运行良好若使用vc6.0编译,部分函数会报错,具体原因未知其他编程软件没有尝试对内存和硬件要求不高,现有电脑一般都可运行3.总体设计1)设计思路:为方便数据的插入和删除,使用链表俩实现上述基本操作。
为此构建3个数据链表,分别是图书信息链表,学生信息链表,回收站信息链表。
每个链表中的数据部分即为需要表达的基本数据信息。
在功能模块的信息的录入,浏览,查询,删除和修改等操作均由相应的函数来实现,另外提供选择菜单实现功能,以执行相应的功能。
图书管理系统C语言程序设计实验报告

books[i].price=f;
i++;
flushall();
printf("is Continue(y/n)?:");
scanf("%c",&isCon);
}
printf("\n --%d种图书信息输入完毕!--\n",i);
printf("\n按任意键返回主菜单!");
{
FILE*fp;
int i;
char filename[40];
//clrscr();
printf("\n input SAVE filename=");
scanf("%s",filename);
if ( (fp=fopen(filename, "w")) == NULL)
{
printf("\n %s file NOT open! press any key exit system.");
printf("\n input READ filename=");
scanf("%s",filename);
if ( (fp=fopen(filename, "r")) == NULL)
{
printf("\n %s file NOT open! press any key exit system.");
〔2〕执行编译操作,并根据提示调试此程序,排除所有的错误和警告。直到编译成功为止。
〔3〕执行运行操作,逐一对每个模块进行调试,直到全部程序运行成功为止。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附件1:学号:0121213640126《面向对象程序设计》大作业题目学生成绩管理系统学院文法学院专业教育学班级教育学1201姓名杨欣指导教师鄢红国2013 年12 月20 日目录一设计目的 (1)二大作业的内容 (2)三大作业的要求与数据 (3)四大作业应完成的工作 (4)五总体设计(包含几大功能模块) (5)六详细设计(各功能模块的具体实现算法——流程图) (6)七调试分析(包含各模块的测试用例,及测试结果) (7)八总结 (8)十参考资料 (9)一大作业的目的《面向对象程序设计》是一门实践性很强的课程,通过大作业不仅可以全方位检验学生知识掌握程度和综合能力,而且还可以进一步加深、巩固所学课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。
更好地掌握运用C++语言独立地编写、调试应用程序和进行其它相关设计的技能。
二大作业的内容对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数等)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.将图书的信息进行记录,信息内容包含:(1)图书的编号(2)图书的书名(3)图书的库存量。
假设,现收集到了一个图书馆的所有图书信息,要求用C语言编写一个简单的图书管理系统,可进行录入、查询、修改和浏览等功能。
学习相关开发工具和应用软件,熟悉系统建设过程。
三大作业的要求与数据1、用C语言实现系统;2、对图书信息(包括编号、书名、总入库数量、当前库存量、已借出本数)进行管理,包括图书信息的输入、输出、查询、删除、排序、统计、退出.3、图书信息包括:其内容较多,为了简化讨论,要求设计的管理系统能够完成以下功能:(1) 每一条记录包括一本图书的编号、书名、库存量(2) 图书信息录入功能:(图书信息用文件保存,可以一次完成若干条记录的输入。
)(3) 图书信息显示浏览功能:完成全部图书记录的显示。
(4) 查询功能:完成按书名查找图书记录,并显示。
(5) 图书信息的删除:按编号进行图书某图书的库存量.(6) 借书登记系统:可以输入读者编号和所借书号来借书。
(7) 还书管理系统:可以输入读者编号和所借书号来还书。
(8)、应提供一个界面来调用各个功能,调用界面和各个功能的操作界面应尽可能清晰美观!四大作业应完成的工作(1)编写算法;(2)算法测试,并有具体的测试结果和结果分析;(3)撰写大作业报告。
内容包括:1)封面扉页2)设计任务书3)目录4)总体设计方案(包括流程图)5)使用说明及运行实例(包括界面)6)成员设计内容简介7)项目源程序代码(注意注释的使用)8)指导教师评语五总体设计(包含几大功能模块)1、新书入库模块;2、查询模块;3、借阅管理模块;4、借书登记模块;5、还书管理模块;6、输出信息模块;7、退出系统模块;六详细设计(各功能模块的具体实现算法——流程图)6.1各函数的功能和实现1、新书入库模块:形参分别为:书名, 书号,以及有多少本书要入库,再根据要求将信息写入文件boot.dat中。
又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系统第一次运行的时候执行,此时可以根据判断是否存在boot.dat这个文件来决定是否执行初始化函数。
2、查询模块:可用一个函数void find_book(char book_num[])来实现。
找到就输出此书全部信息,找不到就输出查找失败信息。
3、成绩查询功能3、借阅管理模块:用初始化函数init_reader()来实现对读者的初始化。
因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在reader.dat文件来确定是否执行此函数。
(到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了)4、借书登记模块:可用一个函数borrow_book(char reader_num[],char book_num[])来实现。
在函数中要分别判断A 该读者的编号是否已经存在,如果不存在,则提示错误。
B 该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该用户先去还书C 输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此书。
借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。
5、还书管理模块:可用一个函数return_book(char reader_num[],char book_num[])来实现。
在实现此函数时要判断:A 该读者的姓名是否已经存在,如果不存在,则提示错误。
B 该读者是否已经借阅此书。
如果没有,则提示错误。
C 还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。
6、输出信息模块:可分别用模块print_book()和print_reader()来实现直接从book.dat 文件和reader.dat 文件中读取信息并输出。
7、退出系统模块:可用一个函数exit()来实现。
首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。
如图6.1七调试分析(包含各模块的测试用例,及测试结果)7.1源程序#include <stdio.h>#include <math.h>#include <string.h>typedef struct bk {char book_num[11];char book_name[41];int book_kc;int book_xc;struct bk * next;}book; /* 图书信息*/typedef struct rd {char reader_num[11];char reader_name[11];char reader_book_num[11];struct rd * next ;}reader;/*读者信息*/struct bk * h_book,* h_reader; /*全局变量,分别为指向图书信息链表和读者信息链表的头指针*/void Form_Insert_New_Book(); /*新书入库菜单*/void Form_Find_Book(); /*查询图书菜单 */void Form_Borrow_Book(); /*借书菜单*/void Form_Return_Book(); /*还书菜单*/void Find_Book(char *); /*查询图书*/void Insert_New_Book(char *,char * ,int ); /*新书入库,即在链表中插入一个新节点*/void Borrow_Book(char *,char *);/*借书,修改读者借阅信息和图书的现存信息*/void Return_Book(char *,char *);/*还书,修改读者借阅信息和图书的现存信息*/void print_book(struct bk *);/*输出全部图书信息*/void print_reader(struct rd *);/*输出全部读者信息*/void load_data();/*从文件中读取数据,链表头指针指向第一个节点*/void init_reader();/*第一次运行程序时对三个读者的初始化*/void init_book();/*第一次运行程序时对三本图书的初始化*/void save();/*将链表中的信息保存到文件中*/void M_Form()/*主菜单*/{ char ch;printf("\n 图书管理系统主窗口");printf("\n 0:退出系统");printf("\n 1:新书入库");printf("\n 2:图书查询");printf("\n 3:借书登记");printf("\n 4:还书管理");printf("\n 5:输出全部信息");do{ /*此循环用来保证选择正确的数字键执行相应的功能*/printf("\n\n 请选择相应的功能代码:");scanf("%c",&ch);fflush(stdin); /*用于清除键盘缓冲区中的多余字符*/}while(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5'); switch(ch) /*根据输入的字符进行选择执行相应的模块*/{ case '0':exit(0);case '1':Form_Insert_New_Book();break;case '2':Form_Find_Book();break;case '3':Form_Borrow_Book();break;case '4':Form_Return_Book();break;case'5':load_data();print_book(h_book);print_reader(h_reader);M_Form(); default:printf("error\n");exit(0);}}void Form_Find_Book(){ char ch;char book_num[11];printf("\n 图书查询功能模块,请选择相应的功能代码:\n");printf(" 0:返回到主菜单\n");printf(" 1:图书查询");do{printf("\n\n 请选择相应的功能代码:");scanf("%c",&ch);fflush(stdin);}while(ch!='0'&&ch!='1');switch(ch){ case '0':M_Form();break; /*选择0,则返回到上一级目录,即主菜单*/case '1':{ printf(" \n请输入需要需要查询的书的编号:");scanf("%s",book_num);fflush(stdin);Find_Book(book_num); /*执行查询*/Form_Find_Book();/*查询完毕后继续返回到查询窗口,执行下一个查询*/}default:printf("error\n");exit(0);}}void Find_Book(char book_num[]) /*查询图书模块,根据图书编号查询*/{ struct bk *p;p=h_book;while(p!=NULL&&strcmp(p->book_num,book_num)!=0)p=p->next;/*此循环用于查找,如果在中间找到,则p就不可能到末尾指向空*/if(p==NULL) printf("\n\t此编号对应的图书不存在!\n");else { printf("\n\t图书编号\t图书名\t库存量\t现存量 \n");printf(" %10s\t %10s\t %d\t %d\t\n",p->book_num,p->book_name,p->book_kc,p->book_xc);}getch();}void init_book() /*初始化图书模块*/{ book ba[3];FILE *fp;int i;printf("\n 系统即将进行初始化,图书初始化模块:\n");printf("\n 请分别输入三本书的书号,书名,数量(以空格隔开):\n ");for(i=0;i<3;i++) /*输入3本图书进行初始化*/scanf("%s%s%d",ba[i].book_num,ba[i].book_name,&ba[i].book_kc);for(i=0;i<3;i++) {ba[i].book_xc=ba[i].book_kc;} /*开始时库存=现存*/if((fp=fopen("book.dat","wb"))==NULL)/*建立新文件book.dat准备写入数据*/{ printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; }for(i=0;i<3;i++)/*将初始化的3本图书写入文件book.dat中*/{ if(fwrite(&ba[i],sizeof(struct bk),1,fp)!=1){ printf("\写数据错误!\n"); exit(0); }}fclose(fp);}void init(){ int drive=DETECT,mode=0;initgraph(&drive,&mode,"");init_book();init_reader();}void Insert_New_Book(char book_num[],char book_name[],int number)/*增加1本新书,读入新书的名称、编号和数量*/{ struct bk *book_fp;struct bk *p,*q,*t;q=p=h_book;while(p!=NULL&&strcmp(p->book_num,book_num)!=0) { q=p;p=p->next; } if(strcmp(p->book_num,book_num)==0){ printf("\n\t\t此编号已经存在,请重新输入!\n");return;}t=(struct bk *)malloc(sizeof(struct bk));strcpy(t->book_num,book_num);strcpy(t->book_name,book_name);t->book_kc=t->book_xc=number;q->next=t;t->next=NULL;if((book_fp=fopen("book.dat","ab"))==NULL){ printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; }/*将新书信息添加到文件中*/fwrite(t,sizeof(struct bk),1,book_fp);fclose(book_fp);}void print_book(struct bk *h)/*输出图书信息*/{ struct bk *p;p=h;printf("\n\t图书编号 \t图书名 \t库存量 \t现存量\n");while(p!=NULL){ printf(" %10s\t %10s %10d\t%10d\n",p->book_num,p->book_name,p ->book_kc,p->book_xc);p=p->next;}}void print_reader(struct rd *h)/*输出读者信息*/{ struct rd *p;p=h;printf("\n\t读者编号 \t读者姓名 \t所借书号 \n");while(p!=NULL){ printf(" %10s\t %10s %10s\n",p->reader_num,p->reader_name,p ->reader_book_num);p=p->next;}getch();}void Form_Borrow_Book()/*借书菜单界面*/{ char ch;char book_num[11],reader_num[11];printf("\n 图书借阅功能模块,请选择相应的功能代码:\n");printf(" 0:返回到主菜单\n");printf(" 1:图书借阅\n");do{printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch);fflush(stdin);}while(ch!='0'&&ch!='1');switch(ch){ case '0':M_Form();break;case '1':{ printf(" \n请输入读者编号与所借书编号:(以空格分隔)"); scanf("%s%s",reader_num,book_num);fflush(stdin);Borrow_Book(reader_num,book_num);/*调用借书函数,执行借书功能*/ Form_Borrow_Book();/*借书完成后,程序返回到借书菜单*/}default:printf("error\n");exit(0);}}void Borrow_Book(char reader_num[],char book_num[])/*输入读者编号,和需要借阅的书的编号,执行借书功能*/{ struct bk *book_p;struct rd *reader_p;book_p=h_book;while(book_p!=NULL&&strcmp(book_p->book_num,book_num)!=0)book_p=book_p->next;if(book_p==NULL){ printf("\n\t此编号对应的图书不存在!\n");Form_Borrow_Book();}reader_p=h_reader;while(reader_p!=NULL&&(strcmp(reader_p->reader_num,reader_num)!=0)) reader_p=reader_p->next;if(reader_p==NULL){ printf("\n\t此编号对应的读者不存在!\n");Form_Borrow_Book();}else if(strcmp(reader_p->reader_book_num,"0")!=0){ printf("\n\t已达到最大借阅数,不能再借书!\n");Form_Borrow_Book();}else {book_p->book_xc=book_p->book_xc-1;/*借书完成后,修改现存量*/strcpy(reader_p->reader_book_num,book_p->book_num);/*修改读者的借阅信息*/save();/*将修改后的信息保存到文件中*/load_data(); /*读入新文件中的数据*/}Form_Borrow_Book();/*程序执行完毕后,返回到借书菜单界面*/}void Form_Return_Book()/*还书菜单*/{ char ch;char book_num[11],reader_num[11];printf("\n 归还图书功能模块,请选择相应的功能代码:\n");printf(" 0:返回到主菜单\n");printf(" 1:归还图书\n");do{printf("\n\n 请选择相应的功能代码:"); scanf("%c",&ch);fflush(stdin);}while(ch!='0'&&ch!='1');switch(ch){ case '0':M_Form();break;case '1':{ printf(" \n请输入读者编号与所还书编号:(以空格分隔)"); scanf("%s%s",reader_num,book_num);fflush(stdin);Return_Book(reader_num,book_num);/*调用还书函数*/Form_Return_Book();}default:printf("error\n");exit(0);}}void Return_Book(char reader_num[],char book_num[])/*输入读者编号和所还书编号执行还书*/{ struct bk *book_p;struct rd *reader_p;book_p=h_book;while(book_p!=NULL&&strcmp(book_p->book_num,book_num)!=0)book_p=book_p->next;if(book_p==NULL){ printf("\n\t此编号对应的图书不存在!\n");Form_Return_Book();}reader_p=h_reader;while(reader_p!=NULL&&(strcmp(reader_p->reader_num,reader_num)!=0)) reader_p=reader_p->next;if(reader_p==NULL){ printf("\n\t此编号对应的读者不存在!\n");Form_Return_Book();}else if(strcmp(reader_p->reader_book_num,book_num)!=0){ printf("\n\t读者没有借阅此书\n");Form_Return_Book();}else {book_p->book_xc=book_p->book_xc+1;/*还书后,修改图书库存量*/strcpy(reader_p->reader_book_num,"0");/*还书后,修改读者借阅信息*/ save();/*保存到文件*/load_data(); /*读入文件中的数据*/}Form_Return_Book();}void init_reader()/*系统第一次运行时,初始化3位读者信息,从键盘读入*/{ FILE *fp;reader ra[3];int i;printf("\n 系统即将进行读者初始化:\n");printf("\n 请分别输入三位读者的编号和姓名(以空格隔开):\n ");for(i=0;i<3;i++)scanf("%s%s",ra[i].reader_num,ra[i].reader_name);for(i=0;i<3;i++)strcpy(ra[i].reader_book_num,"0");if((fp=fopen("reader.dat","wb"))==NULL){ printf("不能建立读者文件,初始化失败!请重新启动系统!\n"); return; }for(i=0;i<3;i++)/*将3位读者信息写入文件*/{ if(fwrite(&ra[i],sizeof(struct rd),1,fp)!=1){ printf("\写数据错误!\n"); exit(0); }}}void Form_Insert_New_Book()/*添加新书菜单*/{ char ch;struct bk t;printf("\n 新书入库功能模块,请选择相应的功能代码:\n");printf(" 0:返回到主菜单\n");printf(" 1:新书入库");do{printf("\n\n 请选择相应的功能代码:");scanf("%c",&ch);fflush(stdin);}while(ch!='0'&&ch!='1'&&ch!='2'&&ch!='3'&&ch!='4'&&ch!='5');switch(ch){ case '0':M_Form();break;case '1':{ printf(" \n请按顺序输入新书的编号、名称、数量(以空格隔开):");scanf("%s%s%d",t.book_num,t.book_name,&t.book_kc);fflush(stdin);Insert_New_Book(t.book_num,t.book_name,t.book_kc);Form_Insert_New_Book();}default:printf("error\n");exit(0);}}void load_data()/*从文件book.dat和文件reader.dat中读取数据到内存*//*将读取的数据存放到2个链表中*/{ struct bk *book_p1,*book_p2,*book_p3;struct rd *reader_p1,*reader_p2,*reader_p3;FILE *fp_book,*fp_reader;fp_book=fopen("book.dat","rb");book_p1=(struct bk *)malloc(sizeof(struct bk));fread(book_p1,sizeof(struct bk),1,fp_book);h_book=book_p3=book_p2=book_p1;while(! feof(fp_book)){ book_p1=(struct bk *)malloc(sizeof(struct bk));fread(book_p1,sizeof(struct bk),1,fp_book);book_p2->next=book_p1;book_p3=book_p2;book_p2=book_p1;}book_p3->next=NULL;free(book_p1);fclose(fp_book);fp_reader=fopen("reader.dat","rb");reader_p1=(struct rd *)malloc(sizeof(struct rd));fread(reader_p1,sizeof(struct rd),1,fp_reader);h_reader=reader_p3=reader_p2=reader_p1;while(! feof(fp_reader)){ reader_p1=(struct rd *)malloc(sizeof(struct rd));fread(reader_p1,sizeof(struct rd),1,fp_reader);reader_p2->next=reader_p1;reader_p3=reader_p2;reader_p2=reader_p1;}reader_p3->next=NULL;free(reader_p1);fclose(fp_reader);}void save()/*将链表中的数据保存到内存中*/{ FILE *book_fp,*reader_fp;struct bk *book_p;struct rd *reader_p;book_p=h_book; reader_p=h_reader;if((book_fp=fopen("book.dat","wb"))==NULL){ printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; }while(book_p!=NULL){ if(fwrite(book_p,sizeof(struct bk),1,book_fp)!=1){ printf("\写数据错误!\n"); exit(0); }book_p=book_p->next;}fclose(book_fp);if((reader_fp=fopen("reader.dat","wb"))==NULL){ printf("不能建立图书文件,初始化失败!请重新启动系统!\n"); return; }while(reader_p!=NULL){ if(fwrite(reader_p,sizeof(struct rd),1,reader_fp)!=1){ printf("\写数据错误!\n"); exit(0); }reader_p=reader_p->next;}fclose(reader_fp);}main(){ FILE * fp;struct bk temp;clrscr();h_book=NULL;h_reader=NULL;if((fp=fopen("book.dat","r"))==NULL)init();/*第1次运行系统时的初始化*/fclose(fp);load_data();/*从文件中读入数据*/M_Form();/*显示主菜单*/save();/*保存内存中的数据(即链表中的数据)到文件*/getch();}7.2.1算法调试、测试过程中出现的问题及解决方法本系统调试过程中遇到问题、原因和解决方法如下:(1)程序在储存图书信息时只能一次存入,并且读取。