【VC++开源代码栏目提醒】:网学会员VC++开源代码为您提供c++ 图书信息管理系统(附源码) - 大学课件参考,解决您在c++ 图书信息管理系统(附源码) - 大学课件学习中工作中的难题,参考学习。
学号:20104303 计算机实习报告 系 别:管理系 专 业:信息管理与信息系统专业 班 级:1043 班 学生:徐 日 日 期:2012-09-03~2012-09-14 1 需求分析1.1 选题任务 图书借阅管理系统(1) 编程工具 C(2) 要求 选题学生应具有端正的学习态度、正常的交流能力,应有积极主动、克服困难 的学习意识(3) 本题概述 以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作 准确高效,提供图书借阅记录的添加、修改、删除、查询、浏览、汇总等,用 图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。
(4) 功能描述 ① 能度日外部提供的包含图书借阅信息的文本文件(TXT 文件); ② 能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅信息的各个项 目),并将信息写入文本文件(TXT 文件); ③ 能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日期、借阅人、 超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅 记录的数量并浏览这些借阅信息,能将查询、浏览、汇总的结果输出结果文本 文件(TXT 文件)(5) 辅助说明 基础要求:①② 扩展要求:①②③1.2 输入数据和输出数据形式: 程序中包含的图书信息包括: char bnum20 //书号 char bname20 //书名 char bauthor10 //作者 char rname10 //借阅人 1 char bdays10 //借出日期 char bchao10 //超期天数 为了方便,我全部设置成了 char 型。
而程序中包含两种输入方式和两种输出方式,对应题目要求,分别是:单个图书信息的增删查改;TXT 文档的导入(图书数据库.txt);屏幕的打印;TXT 文档的导出(书籍信息.txt)。
1.3 测试数据及测试目的 字母测试,错误数据测试,重复数据测试 目的:产看本程序的纠错能力和是否人性化。
2 程序设计2.1 关键数据类型定义 //书籍结构体,用于存放书籍基本信息class Bookprivate: char bnum20 //书号 char bname20 //书名 char bauthor10 //作者 char rname10 //借阅人 char bdays10 //借出日期 char bchao10 //超期天数public: Book //构造函数初始化信息 void set_bnumchar no //设置书号 char get_bnum //获得书号 void set_bnamechar n //设置书名 char get_bname //获得书名 void set_bauthorchar a //设置作者 2 char get_bauthor //获得作者姓名 void set_bdayschar d //设置借出日期 char get_bdays //获得借出日期 void set_bchaochar c //设置超出天数 char get_bchao //获得超出天数 void set_rnamechar rn //设置借阅人 char get_rname //获得借阅人姓名 void copyBook m //Book 结构体 copy 函数 //class book//书籍管理结构体实现管理书籍功能class BookManageprivate: Book books100 //定义 Book 书籍结构体数组对象,最大容量 100 本public: int length BookManage //构造函数,读取磁盘文件 int addBook book //添加图书资料 int bnu_searchchar bnu //按书号查找书籍 int bna_searchchar bna //按书名查找书籍 int bau_searchchar bau //按作者查找书籍 int rn_searchchar rn //按借阅人查找书籍 int bd_searchchar bd //按借出日期查找书籍 int bc_searchchar bc //按超期天数查找书籍 void reviseBook bookint i //修改书籍函数 void deleteBookint index //删除书籍资料函数 void show_bookhead //显示输出列表表头。
void show_bookint i//显示书籍函数 void saveFileHead ///保存书籍文件的表头到 txt void saveFileint i //带参的输出书籍到 txt 3 void readFile //读取书籍文件// class BookManage//菜单结构体实现界面引导class Menu BookManage bm //定义书籍管理结构体对象 bmprivate: int choice //菜单序号选择 int key //管理员密码public: void header //首页欢迎界面 void log_menu //主界面登录菜单 void admin_menu //管理菜单 void absearch_menu //查找书籍菜单 void log_admin //密码登陆 void rn_search //按借阅人姓名查找函数 void bnu_search //按书号查找函数 void bna_search //按书名查找函数 void bau_search //按作者查找函数 void bd_search //按借阅日期查找函数 void bc_search //按超期天数查找函数 void addBook //添加新的书籍信息函数 void reviseBook //修改书籍函数 void delBook //删除书籍函数 int main 4 2.2 主程序流程图 开始 判断是否进入并输入密码 1: 2: 3: 4: 5: 6: 7: 8: 0: 添 修 删 查 查 读 写 返 退 加 改 除 找 看 取 入 回 出 新 已 已 已 所 指 指 系 图 的 有 有 有 有 定 定 统 书 图 图 图 图 图 位 位 登 管 书 书 书 书 书 置 置 录 理 资 资 资 资 资 TX TX 界 系 料 料 料 料 料 T T 面 统 输入 输入 输入 按 按 按 按 按 退 书号 要修 要删 编 书 作 日 超 出 判断 改的 除的 号 名 者 期 期 系 书号 书号 书号 查 查 查 查 查 统 是否 判断 判断 找 找 找 找 找 重复 存在 存在添 重 修 重 删 重加 新 改 新 除 新书 输 数 输 书 输籍 入 据 入 籍 入 新 书 书 书 号 号 号 52.3 调用关系1.书籍信息的录入: void set_bnumchar no //设置书号 strcpybnumno //把字符串 no 中的字符复制到字符串 bnum 中 char get_bnum //获得书号 return bnum //返回值为 bnum void set_bnamechar n //设置书名 strcpybnamen char get_bname //获得书名 return bname void set_bauthorchar a //设置作者 strcpybauthora char get_bauthor //获得作者姓名 return bauthor void set_bdayschar d //设置借出日期 strcpybdaysd char get_bdays //获得借出日期 return bdays void set_bchaochar c //设置超出天数 strcpybchaoc char get_bchao //获得超出天数 return bchao void set_rnamechar rn //设置借阅人 strcpyrnamern char get_rname //获得借阅人姓名 return rname2.书籍信息的添加: int addBook book 判断 length 是否达到最大值,如果没有则进行添加。
3.书籍信息的查找: 6 无论是按照书号、书名、作者、借阅人、借出日期、超期天数来进行查找都是进行挨个比较,如果遇到相同则返回书籍的 i 值,进行返回输出。
4.书籍信息的修改: 输入想要修改的书籍编号,按照查找的方法,找到 i,然后进行覆盖。
完成修改。
5.书籍的屏幕打印输出: 分两部分输出,首先打印一个头信息,相当于列表的头;然后利用循环语句带参输出(i 为参数,循环)。
6.保存信息到 txt 文件: 同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信息。
带参的意义就是,可以无限调用该语句,只要知道书的序号 i。
7.从信息中读取 txt 文件: struct books char numb10 //书号 char nameb20 //书名 char authorb10 //作者 char namer10 //借阅人 char daysb10 //借出日期 char chaob10 //超期天数 定义结构体。
利用 fscanf()语句讲读取的数据按顺序存入结构体中。
然后直接利用书籍添加函数直接写入系统。
3 调试分析3.1 主要问题及解决方案:1.界面颜色设定: 一直抛弃黑底白字这种默认形式,换一种颜色给人特殊的感觉,在网上找到相关的
代码为 systemquotcolor quot语句。
但是也是没有头绪不知道怎么调试,后来一不小心设置错误,系统就弹出了提示界面,我就明白了界面颜色的设置方法(图 3.1): 7 图 3.12.关于书籍的 cout 输出: 最开始设计输出模块时候,仅仅是想到了不带参的 book 信息输出,show_book函数中自带了一个 for 语句循环输出所有书籍信息,是为显示全部书籍设计的。
但是后来发现如果要单显示筛选信息就要从新写一个带参 show_bookint i,虽然函数重载允许这样做,但是却无意义的增加了
代码长度。
把 我选择删除了不带参的 show_book, for语句循环写在外面。
这样就增加了 show_bookint i函数的利用率,精简了函数的和长度。
3.书籍信息的 txt 写入: 综合了屏幕打印的经验,鉴于 fwrite 和 cout 使用方法和显示效果类似,我决定将 txt 的写入语句也设置成带参形式 saveFileint i,原理与 show_bookint i基本一致。
完成这些就能实现。
后来发现文件总是覆盖,每次写入都会将上一次的覆盖,也就是只有最后一行,后来才想起了 ios::app 追加模式,才最终算完整实现。
4.读取数据函数: 这个函数是我编辑最久的,因为使用的不熟练,我先查找了很多资料,并且写了一些单独的小程序去测试效果,但是感觉都不理想。
后来选择了一个最笨的方法,利用fseek 函数一格一格的挑开空格和无用信息。
但是这样做最大的缺点就是,我的 txt 导 8入文档鼻息保持固定格式,一格空格都不能多,如果多了就会导致错位。
后来与徐老师交流时,老师也说这种输入方法不可取,因为实现了功能但是意义不大。
规格太死,不够人性化。
于是我就退后开始,重新选择语句。
最后决定定义结构体,把 txt 中信息读取之后直接存入结构体,随后就把结构体中的数据利用 set_xxxx 函数存入。
5.关于字母纠错及错误输入的处理: 字母输入原来都是用 fflushstdin来清空缓存来防止程序进入死循环。
但是我这次编程想到了一个更加简单有效的方法:利用 char 来存储选择,随后强转为 int 型,其实就是讲所有的字符转为了 asc2 码,因为 acs2 码的唯一性,我就可以用 switch 直接跳过了字母部分,比如我要判断 i 的输入是否唯 1,我就将 i-48 写入 switch 判断就好了。
4 使用说明4.1 主要功能介绍及操作步骤:1.主界面: 选择 1 登陆,密码为 1043,按任意键进入系统。
2.系统操作界面: 9 直接输入数字选择功能。
1: 添加新的图书资料: 2: 修改已有图书资料:3: 删除已有图书资料:4: 查找已有图书资料: 10根据序号选择功能: 按书名查找:按作者查找: 按借出日期查找:按超期天数查找: 115: 查看所有图书资料: 6: 读取指定位置 TXT:7: 写入指定位置 TXT: 5 测试结果5.1 测试数据 1.A 4 asdfasdf(多字母): 121000 //目的为测试重复编号的问题2.修改时候输入未知编号:3.查找时 135.2 测试目的 1、测试学号重复 2、测试字母和特殊字符对输入的影响 3、测试筛选是否符合规格5.3 测试结果 全部通过 6 心得体会 经历了为期十天的编程实习,我觉得我变得更加成熟了,我从一开始的迷茫到后来的目标坚定,这都是一个改变的过程。
因为是在暑假前就选好了题目,而且提前也知道了题目的要求。
所以我在暑假就做好的了充分的准备。
其实最开始想自学用
VC来编写一个可视化的程序。
但是实施起来却没有那么容易,因为我学习的
VC 不系统不全面只是一些皮毛,改改别的还可以,但是要是真正想实现自己的思想就有点捉襟见肘。
后决定还是先用比较熟悉的 C语言来编一个完整的系统。
虽然以前有做过 C的实验。
但是像这种完成的系统确实没有经历过。
其实这也是一个挑战,也是一个开始,是我们接触完整系统的开始。
等快开学时候我已经完成了大部分
代码: 但是有一些问题还是没有解决,我开学后就开始全力去解决这些问题。
偏偏事与愿违,关于文件读取问题始终没有找到好的解决办法。
最后还是从 c教科书上找到的灵 14感来解决这些问题。
收获很大。
本次学习中我有以下收获:1、明确了 c 与 c的区别,运用了多种 c知识,包括一开始就没弄太明白的文件输入输出,这回事真正弄明白了。
2、复习了类和结构体的知识,但是继承类没有用到。
以后还要多加复习。
3、第一次编写之后,运行之后有 50 多个错误,大多数都是因为马虎造成的。
以后还要多加此类的练习熟能生巧。
4、多多利用网络资源,看网上的类似的
代码能够开阔自己的思路,学习别人好的算法。
学习有很大帮助。
5、先写出流程图这样是非常好的一种习惯,可以为后面写程序打下好的基础。
6、养成好习惯,一个一个模块写,写好了立即执行看是否有错误,以防都写完了,错误却没法去改正。
10 天的编程已经接近尾声,但是总觉得要完善我的选题仍有许多要做的工作。
以后还要加强自己的学习。
努力学习编程。
感谢徐老师的指导。
15 7 附录include ltiostreamgtinclude ltiomanipgtinclude ltstringgtinclude ltfstreamgtinclude ltconio.hgtusing namespace std//书籍结构体,用于存放书籍基本信息class Bookprivate: char bnum20 //书号 char bname20 //书名 char bauthor10 //作者 char rname10 //借阅人 char bdays10 //借出日期 char bchao10 //超期天数public: Book //构造函数初始化信息 strcpybnumquotquot strcpybnamequotquot strcpybauthorquotquot strcpyrnamequotquot strcpybdaysquotquot strcpybchaoquotquot void set_bnumchar no //设置书号 strcpybnumno //把字符串 no 中的字符复制到字符串 bnum 中 char get_bnum //获得书号 return bnum //返回值为 bnum 16void set_bnamechar n //设置书名strcpybnamenchar get_bname //获得书名return bnamevoid set_bauthorchar a //设置作者strcpybauthorachar get_bauthor //获得作者姓名return bauthorvoid set_bdayschar d //设置借出日期strcpybdaysdchar get_bdays //获得借出日期return bdaysvoid set_bchaochar c //设置超出天数strcpybchaocchar get_bchao //获得超出天数return bchaovoid set_rnamechar rn //设置借阅人strcpyrnamernchar get_rname //获得借阅人姓名return rnamevoid copyBook m //Book 结构体 copy 函数 strcpybnumm.get_bnum //将获得书号函数里的返回值里的字符复制到 bnum strcpybnamem.get_bname strcpybauthorm.get_bauthor strcpyrnamem.get_rname strcpybdaysm.get_bdays 17 strcpybchaom.get_bchao //书籍管理结构体实现管理书籍功能class BookManageprivate: Book books100 //定义 Book 书籍结构体数组对象,最大容量 100 本public: int length BookManage //构造函数,读取磁盘文件 length0 //从头读起计数,最大 100 BookManage //析构函数,保存磁盘文件 int addBook book //添加图书资料///////////// iflengthgt100 coutltltquot对不起,储存已满,您无法继续添加!nquot return -1 else bookslength.copybook //调用书籍结构体 copy 函数 18 length return length-1 int bnu_searchchar bnu //按书号查找书籍 forint i0iltlengthi ifstrcmpbooksi.get_bnumbnu0 //字符.
上一篇:
商品库存管理系统源码+数据库+论文
下一篇:
首页轮播3.jpg