图书馆借书系统
第 1 章 概述
图书馆借书系统实现图书管理功能,用户分两类,一类是管理员,一类是普通借阅者,管理员只能有一个,借阅者需要注册,由管理员通过验证后,才能登陆到本系统进行书籍的查询和借阅。
1.1 开发图书馆借书系统的目的和意义
通过程序设计实训,达到以下目的:
(1) 熟练掌握 C 语言的各种数据类型、运算符、表达式,各种程序控制结构,各种数据组织方式,文件的读和写,结构化编程,以及各种程序设计基本思想;
(2) 能够根据具体问题选择使用合适的数据类型、存储结构、控制结构和基本算法;
(3) 初步了解软件开发中需求分析、系统设计、程序测试、项目管理、编码风格等基本流程和规范;
(4) 培养自觉运用程序化思维分析问题、解决问题的习惯。
1.2 管理员的功能设计
管理员的工作有:新书信息的录入,浏览,查询,修改和删除的功能,借阅用户通过验证;借阅者的功能:能够查询相关书籍当前的状态,并借阅,同时要根据借阅的免费时间(30 天)的规定进行超时借阅的费用缴纳。
图书信息保存在文件中,再保存在结构体数组中,做到持久化存储。对图书信息的增删改都是基于文件进行操作。图书信息查询做到字符串模糊匹配。用户账号信息保存在文件中,再保存到结构体数组中,做到持久化存储。
管理员的功能模块:
(1)图书信息录入;
(2)图书信息浏览;
(3)图书信息查询;
(4)图书信息删除;
(5)图书信息修改;
(6)用户账号管理。
1.3 普通用户的功能设计
借阅者需要注册,由管理员通过验证后,才能登陆到本系统进行书籍的查询和借阅。
在图书归还中有缴纳延期费用的设置,需要由借阅者将超期还书费用缴纳。用户登录创建 COOKIE。借阅信息保存文件和结构体数组,做到持久化存储。
普通用户的功能模块:
(1)查询图书;
(2)借阅图书;
(3)当前借阅状态;
(4)图书归还;
1.4 采用的数据结构和算法
程序可分为函数声明板块,全局变量声明板块,主函数板块,系统函数板块,功能函数板块。函数之间相互调用,结构严谨。
采用文件和结构体数组结合,保存数据。每次打开主菜单重新读取数据,确保经过文件修改后文件数据与结构体数组数据一致。使用数据直接从结构体数组中读取,保证了数据的持久化存储。
1.5 创新点和特色
用户体验佳:操作页面可供用户自由切换背景色,人性化处理,用户选择选项后直接跳转,不需要按 enter 键,大部分页面按 ESC 键能返回上级页面。
用户登录创建 COOKIE 信息,便于区别不同用户,加强安全验证。报错信息以 HTTP 状态码形式返回,方便用户了解当前操作由何种原因造成的。
文件以 MySQL 数据便形式存储数据,方便读写和查询,多个文件之间拥有相同字段。借阅图书信息文件包含借阅者用户名和借阅书的书号,再用书号查询图书信息文件,得到完整图书信息反馈给用户。
背景色函数 BackgroundColor()支持设置随机背景色,用户在任何页面按 Tab 键都可以切换背景色。
简易时间戳函数 long Timestamp(char time[])模拟生成时间戳。能返回一个时间字符串相对于 1800-01-01 经过的整型数据天数,用于根据时间段查询图书,图书借阅天数计算。
第 2 章 系统分析
基本的业务流程包括用户打开程序,选择管理员登录或用户登录,进入主菜单,主模块函数如图 2-1。
图 2- 1 主模块函数
管理员主菜单函数,如图 2-2,图书管理系统模块包括图书信息录入函数,图书信息浏览函数,图书信息查询函数,图书信息删除函数,图书信息修改函数。用户账号管理函数。
图 2- 2 图书管理系统模块子函数
普通用户主菜单函数,如图 2-3,图书借书系统模块包括查阅图书,借阅图书,图书借阅状态,图书归还。
图 2- 3 图书借书系统模块子函数
功能模块函数如图 2-4。
图 2- 4 功能模块函数
第 3 章 设计与实现
3.1 系统流程
系统流程如图 3-1。
图 3-1 程序流程图
3.2 数据库表结构
用户信息数据表如表 3-1(userinfo.txt):
# | Name | Type | Collation | Null | Default | Comments | Extra |
1 | username | varchar(55) | utf8_german2_ci | No | None | 用户名 | |
2 | password | varchar(55) | utf8_german2_ci | No | None | 密码 | |
3 | age | varchar(10) | utf8_german2_ci | Yes | NULL | 年龄 | |
4 | sex | varchar(10) | utf8_german2_ci | Yes | NULL | 性别 | |
5 | contact | varchar(55) | utf8_german2_ci | Yes | NULL | 联系方式 | |
6 | status | int(11) | Yes | NULL | 状态(0 代表未通过 1 代表已通过) |
表 3-1 用户信息数据表
图书数据表如表 3-2(bookinfo.txt):
# | Name | Type | Collation | Null | Default | Comments | Extra |
1 | bookNum | varchar(55) | utf8_german2_ci | No | None | 书号 | AUTO_INCREMENT |
2 | bookName | varchar(55) | utf8_german2_ci | No | None | 书名 | |
3 | author | varchar(55) | utf8_german2_ci | No | None | 作者 | |
4 | publishingHouse | varchar(55) | utf8_german2_ci | Yes | NULL | 出版社 | |
5 | publicshingTime | varchar(55) | utf8_german2_ci | Yes | NULL | 出版时间 | |
6 | bookPrice | varchar(55) | utf8_german2_ci | Yes | NULL | 价格 |
表 3-2 图书信息数据表
借阅图书数据表如表 3-3(booklend.txt):
# | Name | Type | Collation | Null | Default | Comments | Extra |
1 | userName | varchar(55) | utf8_german2_ci | No | None | 借阅者 | |
2 | bookNum | varchar(55) | utf8_german2_ci | No | None | 借阅书名 | |
3 | startTime | varchar(55) | utf8_german2_ci | No | None | 开始时间(YYYY-mm-dd) |
表 3-3 借阅图书信息数据表
3.3 关键数据结构
结构体userinfo // 保存所有用户完整信息 { 字符串 username, password,age, sex,contact; 整数 status; };结构体 bookinfo // 保存所有图书信息 { 字符串 bookNum, bookName, author; // 书号,书名,作者名 字符串publishingHouse, publicshingTime; // 出版社,出版时间 字符串 bookPrice; // 该书的价格 };结构体 booklend // 保存所有借书信息 { 字符串 userName, bookNum, startTime; };第 4 章 测试与运行
4.1 主页面测试
进入系统,如图 4-1,
图 4-1 进入系统
Tab 键切换背景色,背景色变成了黄色,如图 4-2,
图 4-2 切换背景色
按 1 进入管理员登录界面,提示输入管理员密码,如图 4-3,
图 4-3 管理员登录界面
按 ESC 键返回首页,测试,如图 4-4,成功返回首页。
按 Tab 键再次切换背景色,这次换成了灰白色,再按 2 进入借阅者登录页面,如图 4-5,
图 4-4 ESC 键返回首页测试结果 图 4-5 借阅者登录界面
4.2 新用户注册和尝试登陆
ESC 键返回首页功能仍然正常,进入借阅者登录界面,按 1 进入新用户注册,如图 4-6,依次输入用户名,密码,确认密码,年龄,性别,联系方式后,提示注册成功,如图 4-7。
图 4-6 新用户注册图 4-7 注册成功
ESC 键返回到借阅者登录页面,按 2 直接登录,依次输入用户名,错误的密码,正确的密码后,提示密码错误,请等待管理员同意用户注册,如图 4-8:
图 4-8 尝试登录
4.3 图书信息管理系统
ESC 键返回首页,按 1 进入管理员登录界面,输入密码 admin 进入图书管理系统主菜单,如图 4-9,
图 4-9 图书信息管理系统
按 1 进入图书信息录入,依次输入书号,书名,作者名,出版社,出版时间,价格后,提示《高等数学》录入成功,如图 4-10,
图 4-10 图书信息录入
按 0 退出,进入主菜单,按 2 进入图书信息浏览,能看到所有的图书信息,如图 4-11,
图 4-11 图书信息浏览 图 4-12 图书信息查询
返回主菜单,按 3 进入图书信息查询,可根据书号,书名,作者,出版社,出版时间查询图书。按 5 选择“根据出版时间查询图书”,输入开始时间和结束时间,可查询到该时间段的所有图书,,如图 4-12。
返回主菜单,按 4 进入图书信息删除,可根据书号,删除该图书,如图 4-13。
返回主菜单,按 5 进入图书信息修改,可根据书号,修改图书信息,这里修改书号为 08 的《高等数学》这本图书的价格为 $40.00,如图 4-14。
图 4-13 图书信息删除 图 4-14 图书信息修改
返回主菜单,按 6 进入用户账号管理,如图 4-15,可以看到刚刚注册的新用户状态显示未通过。按 1 进入账号管理,输入想要操作的“003”,按 1 修改状态为通过。
图 4-15 用户账号管理
返回主菜单再按 ESC,返回首页。
4.4 图书借书系统
按 2 选择借阅者登录,再按 2 选择直接登录,输入账号“newuser”和密码“md5zp0”后,成功登录,进入图书借书系统,如图 4-16。
图 4-16 图书借书系统
查阅图书和管理员图书信息查阅功能类似,可根据书号,书名,作者,出版社,出版时间查询图书。
借阅图书根据书号借阅图书,这里我们借阅书号为 08 的《高等数学》这本书如图 4-17 ,借阅完成后系统提示借阅时间,为当前开始借阅时间。
图 4-17 图书借阅
按 ESC 返回主菜单,按 3 进入图书借阅状态,可看到当前用户所有的图书借阅信息,图书信息下面有该图书借阅时间,如图 4-18,
图 4-18 图书借阅状态
按 ESC 返回主菜单,按 4 进入图书归还,可看到当前用户所有的图书借阅信息,图书信息下面有该图书借阅时间,根据书号归还图书。如果图书借阅天数超过 30 天,会提醒用户请先缴纳逾期费用。如图 4-19,
图 4-19 图书归还
4.5 退出系统
最后按 ESC 键返回主菜单,按 ESC 键返回主页,再次按 ESC 键即可安全退出系统。
第 5 章 总结与心得
5.1 系统改进设想
(1)用户登录信息的改进设想
用户登录系统自动创建 COOKIE 信息,用于区分不同用户。在每个功能执行前,都加上 COOKIE 信息验证,将使系统变得更加安全。让用户登录时选择记住密码,保存 COOKIE 到文件中,可以做到下次免登陆,直接进入系统。退出需要用户安全退出,清除 COOKIE,防止盗用。
(2)输入密码使用暗文
该图书借书系统完成的仓促,如果在用户输入密码时,让密码以暗文形式呈现,防止别人看到用户输入的密码,将变得更加安全。
(3)图书管理系统改进设想
添加功能:图书借阅信息管理。方便管理员查看所有图书借阅信息。
(4)图书借书系统改进设想
用户想要购买书籍,但又怕太贵或者买到的书籍不好看怎么办。添加功能:书籍推荐。可根据图书借阅量和图书价格综合排序,推荐给用户需要的书籍。
5.2 经验和体会
经过本次实训,我获取了很多经验和知识。
首先,一个系统不能用一个函数,一个模块,或者一个文件是实现的,它必定需要很多功能之间相互配合,紧密联系,把重复代码、相同功能部分提取出来,这样使得代码更加简洁明了,便于修改。
其次,代码编写过程中,一定要多加注释,规范的代码更容易让人理解,也便于代码的维护和功能的添加。
还有,对于这个系统而言,一定要站在实用的角度思考问题。先考虑要实现什么样的功能,再思考用什么样的界面去承载这些功能,最后是代码的实现。
最后,在代码编写过程中,我还学会了 c 语言文件的使用,随机数的使用,系统时间的获取等操作,明白了数据要做到持久化存储才让系统变得有意义。
5.3 对程序设计实训如何组织的建议
这种程序实训组织方法就很好,在学期末实训,同学们学习了一学期枯燥乏味的数据结构,有了使用的地方,能让同学们感到程序乐趣所在,真正的喜欢上编程。
但我想,如果有一些新奇的题目让大家做就更好了,这些题目在很多学校的实训题目中大量出现,网上相似代码不尽其数。进尽管要求上允许参考代码,但我观察到很多同学直接复制网上成品,整个实训就变得毫无意义。可以编一些简单点的,新奇的题目,让同学们真正身心投入到这次程序实训中去,我相信这将是一个让每个参与实训的同学有一次大的进步的机会,自己摸索着学习来提升自我。对于新奇的题目,不好解决的话,可以找咱们学院的学长学姐,广泛征集信息,筛选可用的题目,能极大地激发同学们的创新思维。
最后,感谢老师给予的这次机会,让我进步很大。
参考文献
[1] 张先伟等编著. 程序设计基础:C 语言[M]. 清华大学出版社. 2016
[2] 马新娟,张立红等编著. 程序设计基础习题与实验指导:C 语言[M]. 清华大学出版社. 2016
[3] 菜鸟教程. C 文件读写[J/OL]. https://www.runoob.com/cprogramming/c-file-io.html, 2017-08-22 / 2019-07-05
[4] 云端雪. C 语言中获取系统时间[J/OL]. https://www.cnblogs.com/phix/p/7063487.html, 2017-06-22 / 2019-07-05
♻️ 资源
大小:1.20MB
➡️资源下载:https://download.csdn.net/download/s1t16/87404185
注:更多内容可关注微信公众号【神仙别闹】,如当前文章或代码侵犯了您的权益,请私信作者删除!