C程序设计项目图书管理系统n
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C程序设计项目图书管
理系统n
Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】
基于文件的图书管理系统
项目需求
一、新书入库
图书信息包括书名, 书号, 库存量, 现存量共4项. 首先输入3本书的信息, 并将其存入文件””中. 当有新书入库时, 先判断文件中是否有此书( 即比较书名 ), 若有则修改库存量, 现存量的信息; 若无此书, 则将该书的信息添加到文件中。
二、图书查询
输入一个书号, 在文件中查找此书, 若找到则输出此书的全部信息; 若找不到则输出查找失败的信息。
三、借阅管理
1.每个读者的信息包括姓名, 编号,1张借书卡( 限借一本书 ), 输入3个读者的信息存入文件“”中.
2.借书登记:输入读者的编号,所借图书的书号, 先判断姓名是否在文件“”中, 若有则将书号存入一张借书卡上( 注: 初始时借书卡的信息都为零, 借书后借书卡的信息改为所借书的书号), 并修改文件“”的相应内容, 同时修改文件“”中此书的现存量. 若“”无此姓名, 则应提示错误。
3.还书管理: 输入读者的编号, 所还图书的书号, 将借书卡的信息置为零, 并修改文件“”的相应内容, 同时修改文件“”中此书的现存量。
四、输出全部图书信息和全部读者信息
五、退出系统
六、附加说明
系统将来完善的功能有:添加读者;一位读者可同时借阅和归还多本图书
等等。
总体设计
一、系统主功能模块
1.新书入库模块:可用一个函数insert_new_book(char book_num[],char book_name[],int number)来实现。形参分别为:书名, 书号,以及有多少本书要入库,再根据要求将信息写入文件中。又由于最开始要输入三本新书,故可以加一个初始化函数init_book(),但是初始化函数只执行一次,也就是在系
统第一次运行的时候执行,此时可以根据判断是否存在这个文件来决定是否执行初始化函数。
2.查询模块:可用一个函数void find_book(char book_num[])来实现。找到就输出此书全部信息,找不到就输出查找失败信息。
3.借阅管理模块:
(1)三个读者的信息可以在系统初始化时完成.即可用初始化函数
init_reader()来实现对读者的初始化。因为读者初始化函数也只是在系统第一次运行的时候执行一次,故也可以根据是否存在文件来确定是否执行此函数。(到现在可以发现在系统初始化函数里,至少已经需要调用两个初始化函数了)
(2)借书登记模块:可用一个函数borrow_book(char reader_num[],char book_num[])来实现。在函数中要分别判断:
a.该读者的编号是否已经存在,如果不存在,则提示错误。
b.该读者的借阅书是否已满(即最多只能借1本书)如果是,则提醒该
用户先去还书。
c.输出的书号对应的书是否存在,如果不存在,则提醒读者不存在此
书。
借书过程完成后,则对读者信息里的借书信息写上所借书号,并修改库存量。
(3)还书管理模块:可用一个函数return_book(char reader_num[],char book_num[])来实现。在实现此函数时要判断:
a.该读者的姓名是否已经存在,如果不存在,则提示错误。
b.该读者是否已经借阅此书。如果没有,则提示错误。
c.还书过程完成后,则对读者信息里的借书信息清零,并修改库存量。
3.输出图书和读者信息:可分别用模块print_book()和print_reader()来实现,直接从文件和文件中读取信息并输出。
4.退出系统:可用一个函数exit()来实现。首先将信息保存到文件,释放动态创建的内存空间,再退出此程序。
二、系统主功能模块结构图:
详细设计
一、界面设计
此系统界面采用图形和数字化菜单设计。
主界面设计如下:
图书管理系统图书管理系统主菜单
请选择相应的数字执行相应的功能:
0:退出此系统
1:新书入库
2:图书查询
3:借书登记
4:还书管理
5:输出全部图书信息和读者信息
各子界面如下:
1.新书入库界面:
请选择相应的数字执行相应的功能:
10:返回主菜单
11:新书入库
请输入新书名:
请输入新书号:
请输入新书数量:
(注:新书入库成功后,程序返回到子界面1)
2.图书查询界面界面:
请选择相应的数字执行相应的功能:
20:返回主菜单
21:图书查询
请输入需要查询的书号:
(注:图书查询完成后,返回到子界面2)` 3.借书登记界面:
请选择相应的数字执行相应的功能:
30:返回主菜单
31:借书登记
请输入读者编号:
请输入所借书号:
(注:借书过程完成后,返回到子界面3)
` ` 4.还书管理:
请选择相应的数字执行相应的功能:
40:返回主菜单
41:还书登记
请输入读者编号:
请输入所借书号:
(注:还书过程完成后,返回到子界面4)
5.输出全部图书和读者信息:
请选择相应的数字执行相应的功能:
50:返回主菜单
51:输出全部图书信息:
书号书名:库存量现存
量
52:输出全部读者信息:
读者编号读者姓名所借书号
(注:输出图书和读者信息后,返回到子界面5)
二、数据结构设计
考虑到图书信息和读者信息中都包含有不同类型的数据,故分别建立图书
和读者两种类型的结构体;由于图书和读者的数量非固定,所以采用动态链式
存储来实现。
图书类型:
typedef struct bk{
char book_num[11]; /* 书号采用10位编码最后1位为字符串结束
标志(下同)* /
char book_name[41]; /* 书名规定不超过40个字母(20 个汉字)
*/
unsigned book_kc,book_xc; /* book_kc 代表库存梁,book_xc代
表现存量 */
struct bk *next;
}book;
读者类型:
typedef struct rd{
char reader_num[11]; /* 读者编号采用10位编码 */
char reader_name[11]; /* 读者姓名 */ char reader_book_num[11]; /*表示所借书号,初始值为“0”*/
struct bk *next;
}reader;
三、主要功能流程图