c图书信息管理系统附
源码
文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]
学号:
计算机实习报告
系 别:管理系
专 业:信息管理与信息系统专业 班 级:1043班 学生姓名:李 优 指导教师:徐 日
日 期:2012-09-03~2012-09-14
1需求分析
1.1 选题任务
图书借阅管理系统 (1) 编程工具
C++
(2) 要求
选题学生应具有端正的学习态度、正常的交流能力,应有积极主动、克服困难的学习意识
(3) 本题概述
以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作准确高效,提供图书借阅记录的添加、修改、删除、查询、浏览、汇总等,用图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。
(4) 功能描述
① 能度日外部提供的包含图书借阅信息的文本文件(TXT文件);
② 能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅信息的各个项
目),并将信息写入文本文件(TXT文件);
③ 能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日期、借阅人、
超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅记录的数量并浏览这些借阅信息,能将查询、浏览、汇总的结果输出结果文本文件(TXT文件)
(5) 辅助说明
基础要求:①+② 扩展要求:①+②+③
1.2 输入数据和输出数据形式:
程序中包含的图书信息包括:
char bnum[20]; xt);屏幕的打印;TXT文档的导出(书籍信息.txt)。
1.3 测试数据及测试目的
字母测试,错误数据测试,重复数据测试 目的:产看本程序的纠错能力和是否人性化。
2程序设计
关键数据类型定义 籍信息的录入: 添加输输输按7: 按退0: 3删4按开始5按6:8void set_bnum(char *no) 籍信息的添加: 按重1修2重重判断是否进入并输入:::::读写:退 int add(Book book) 入入入编书作日超出新改新除 新判断是否达到最大值,如果没有则进行添加。添length修删查查取 入返出书要要号名者期期系输输输3.书籍信息的查找: 加改除找看指指回图号修删 入无论是按照书号、书名、作者、借阅人、借出日期、超期天数来进行查找都是入入新已已已所定定系书进行挨个比较,如果遇到相同则返回书籍的i值,进行返回输出。 4.书籍信息的修改: 改。
5.书籍的屏幕打印输出:
分两部分输出,首先打印一个头信息,相当于列表的头;然后利用循环语句带输入想要修改的书籍编号,按照查找的方法,找到i,然后进行覆盖。完成修
参输出(i为参数,循环)。 6.保存信息到txt文件:
同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信
息。带参的意义就是,可以无限调用该语句,只要知道书的序号i。 7.从信息中读取txt文件: {
char numb[10]; 面颜色设定:
一直抛弃黑底白字这种默认形式,换一种颜色给人特殊的感觉,在网上找到相struct books
关的代码为system(\"color **\");语句。但是也是没有头绪不知道怎么调试,后来一不小心设置错误,系统就弹出了提示界面,我就明白了界面颜色的设置方法(图):
图
2.关于书籍的cout输出:
最开始设计输出模块时候,仅仅是想到了不带参的book信息输出,show_book()
函数中自带了一个for语句循环输出所有书籍信息,是为显示全部书籍设计的。但是后来发现如果要单显示筛选信息就要从新写一个带参show_book(int i),虽然函数重载允许这样做,但是却无意义的增加了代码长度。我选择删除了不带参的
show_book(),把for语句循环写在外面。这样就增加了show_book(int i)函数的利用率,精简了函数的和长度。 3.书籍信息的txt写入:
综合了屏幕打印的经验,鉴于fwrite和cout使用方法和显示效果类似,我决定将txt的写入语句也设置成带参形式saveFile(int i),原理与show_book(int i)基本一致。完成这些就能实现。后来发现文件总是覆盖,每次写入都会将上一次的覆盖,也就是只有最后一行,后来才想起了ios::app追加模式,才最终算完整实现。 4.读取数据函数:
这个函数是我编辑最久的,因为使用的不熟练,我先查找了很多资料,并且写
了一些单独的小程序去测试效果,但是感觉都不理想。后来选择了一个最笨的方法,利用fseek函数一格一格的挑开空格和无用信息。但是这样做最大的缺点就是,我的txt导入文档鼻息保持固定格式,一格空格都不能多,如果多了就会导致错位。后来与徐老师交流时,老师也说这种输入方法不可取,因为实现了功能但是意义不大。规格太死,不够人性化。于是我就退后开始,重新选择语句。最后决定定义结构体,把txt中信息读取之后直接存入结构体,随后就把结构体中的数据利用set_xxxx函数存入。 5.关于字母纠错及错误输入的处理:
字母输入原来都是用fflush(stdin);来清空缓存来防止程序进入死循环。但是
我这次编程想到了一个更加简单有效的方法:利用char 来存储选择,随后强转为int型,其实就是讲所有的字符转为了asc2码,因为acs2码的唯一性,我就可以用switch直接跳过了字母部分,比如我要判断i的输入是否唯1,我就将i-48写入switch判断就好了。
4使用说明
主要功能介绍及操作步骤:
1.主界面:
选择1登陆,密码为1043,按任意键进入系统。
2.系统操作界面:
直接输入数字选择功能。
2: 修改已有图书资料:
1: 添加新的图书资料: 3: 删除已有图书资料: 4: 查找已有图书资料: 根据序号选择功能: 按作者查找: 找:
按超期天数查找: 5: 查看所有图书资料: 7: 写入指定位置TXT:
按书名查找:
按借出日期查
6: 读取指定位置TXT:
5测试结果
测试数据
1.A 4 asdfasdf(多字母): 1000 改时候输入未知编号: 3.查找时
测试目的
1、测试学号重复
2、测试字母和特殊字符对输入的影响 3、测试筛选是否符合规格
测试结果
全部通过
6心得体会
经历了为期十天的编程实习,我觉得我变得更加成熟了,我从一开始的迷茫到后来的目标坚定,这都是一个改变的过程。因为是在暑假前就选好了题目,而且提前也知
道了题目的要求。所以我在暑假就做好的了充分的准备。其实最开始想自学用VC++来编写一个可视化的程序。但是实施起来却没有那么容易,因为我学习的VC不系统不全面只是一些皮毛,改改别的还可以,但是要是真正想实现自己的思想就有点捉襟见肘。后决定还是先用比较熟悉的C++语言来编一个完整的系统。虽然以前有做过C++的实验。但是像这种完成的系统确实没有经历过。其实这也是一个挑战,也是一个开始,是我们接触完整系统的开始。
等快开学时候我已经完成了大部分代码:
但是有一些问题还是没有解决,我开学后就开始全力去解决这些问题。偏偏事与愿违,关于文件读取问题始终没有找到好的解决办法。最后还是从c++教科书上找到的灵感来解决这些问题。收获很大。
本次学习中我有以下收获:
1、明确了c与c++的区别,运用了多种c++知识,包括一开始就没弄太明白的文件输入输出,这回事真正弄明白了。
2、复习了类和结构体的知识,但是继承类没有用到。以后还要多加复习。 3、第一次编写之后,运行之后有50多个错误,大多数都是因为马虎造成的。以后还要多加此类的练习熟能生巧。
4、多多利用网络资源,看网上的类似的代码能够开阔自己的思路,学习别人好的算法。
学习有很大帮助。
5、先写出流程图这样是非常好的一种习惯,可以为后面写程序打下好的基础。 6、养成好习惯,一个一个模块写,写好了立即执行看是否有错误,以防都写完了,错误却没法去改正。
10天的编程已经接近尾声,但是总觉得要完善我的选题仍有许多要做的工作。以后还要加强自己的学习。努力学习编程。感谢徐老师的指导。
7附录
#include opy(book); et_bnum(),bnu)==0) et_bname(),bna)==0) et_bauthor(),bau)==0)et_rname(),rn)==0)et_bdays(),bd)==0)et_bchao(),bc)==0)opy(book); } opy(books[i+1]);et_bnum(); (15); cout< fwrite<<\" **********************书****籍****信****息****列****表 cout<<\"文件保存失败!\\n\"; exit(1); (15); (15); cout< fwrite<<\"书名\"; (15); fwrite<<\"作者\"; (15); fwrite<<\"借阅人\"; (15); fwrite<<\"借出日期\"; (15); fwrite<<\"超期天数\\n\"; (); xt\ fwrite< (); xt\{ } fseek(fp,40,SEEK_SET); umb); fscanf(fp, \"%s\fscanf(fp, \"%s\fscanf(fp, \"%s\fscanf(fp, \"%s\fscanf(fp, \"%s\(form[i].numb); printf(\"file not open!\\n\"); exit(0); fwrite< break; break; case 2: BookManage(); case 3: BookManage(); case 4: xt的文件放置在程序所在目录下。\"< cout<<\"放置完成后,\"; system(\"pause\"); (); cout<<\"请稍后...系统正在处理中...\"< cout<<\"\\n\显示完毕!\"; system(\"pause\"); admin_menu(); break; } cout<<\"讲程序保存在当前目录下,名为:书籍信 息.txt\"< for(int j=0;j<;j++) { (j); } cout<<\"请稍后...系统正在处理中...\"< 菜单!\"< } void rn_search() //按姓名查找函数 case 0: } } exit(1); break; cout<<\"\\n\操作有误,请重新选择(0/1)\"; _sleep(2000); admin_menu(); } case 8: .\\n\"; _sleep(600); system(\"cls\"); log_menu(); break; default: int index=(rn); } else cout<<\"\\n\对不起,系统无您的借阅记录!\"; } { char bnu[10]; cout<<\"\\n\请输入您要查找的书号:\"; cin>>bnu; int index=(bnu); } else cout<<\"\\n\对不起,系统无该书籍记录!\"; } void bna_search() //按书名查找函数 { cout<<\"\\n\请输入您要查找的书名:\"< (); (index); cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); void bnu_search() //按书号查找函数 if(index>=0) { (); (index); cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); cin>>bna; int index=(bna); } else cout<<\"\\n\对不起,系统无该书籍记录!\"; } void bau_search() //按作者查找函数 { cout<<\"\\n\请输入您要查找的作者:\"< (); cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); if(index>=0) { (); (index); (index); cout<<\"\\n\对不起,系统无该书籍记录!\"; } { char bd[10]; cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); void bd_search() //按借阅日期查找函数 cout<<\"\\n\请输入您要查找的借出日期:\"; cin>>bd; int index=(bd); } else cout<<\"\\n\对不起,系统无该借阅记录!\"; } { char bc[10]; cout<<\"\\n\请输入您要查找超期多久的书籍:\"; cin>>bc; int index=(bc); { } (); (index); if(index>=0) void bc_search() //按超期天数查找函数 cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); if(index>=0) { (); (index); else cout<<\"\\n\对不起,系统无该书籍记录!\"; } cout<<\"\\n\\"; system(\"pause\"); absearch_menu(); void addBook() //添加新的书籍信息函数 { char numb[10]; //书号 char nameb[20]; //书名 char authorb[10]; //作者 char namer[10]; //借阅人 char daysb[10]; //借出日期 char chaob[10]; //超期天数 Book book; //书籍结构体对象book input1:cout<<\"\\n\请输入新的书号:\"; cin>>numb; int index=(numb); if(index==-1) { cout<<\"\\n\系统目前尚无该书记录,您可以继续操作 cout<<\"\\n\请输入新书书名:\"; cin>>nameb; cout<<\"\\n\请输入新书作者:\"; cin>>authorb; cout<<\"\\n\请输入借阅人:\"; cin>>namer; cout<<\"\\n\请输入借出日期:\"; cin>>daysb; cout<<\"\\n\请输入超期天数:\"; cin>>chaob; (numb); (nameb); (authorb); (namer); (daysb); (chaob); (book); cout<<\"\\n\恭喜您!新书资料录入成功!\"; !\\n\"; } else { char numb[10]; char nameb[20]; char authorb[10]; char namer[10]; //借阅人 char daysb[10]; //借出日期 char chaob[10]; //超期天数 { } cout<<\"\\n\对不起,该书号纪录已存在!请重新输入!\"; goto input1; system(\"pause\"); admin_menu(); } void reviseBook() //修改书籍函数 Book book; int index=-1; input2: cout<<\"\\n\请输入您要修改书籍的书号:\"; cin>>numb; index=(numb); if(index==-1) { cout<<\"\\n\对不起,您输入的书号不存在,请重新输入!\"< cout<<\"\\n\请输入更改后的作者:\"; cin>>authorb; goto input2; return; cout<<\"\\n\请输入更改后的借阅人:\"; cin>>namer; cout<<\"\\n\请输入更改后的借出日期:\"; cin>>chaob; cout<<\"\\n\请输入更改后的超期时间:\"; cin>>authorb; (numb); (nameb); (authorb); (namer); (daysb); (chaob); (book,index); cout<<\"\\n\恭喜您!书籍资料修改成功!\"; } { char numb[10]; cout<<\"\\n\请输入您要删除书籍的书号:\"; void delBook() //删除书籍函数 system(\"pause\"); admin_menu(); cin>>numb; int index=(numb); if(index>=0) { cout<<\"\\n\您确定要删除该书记录吗(y/n) \"; char y; cin>>y; if(y=='y'||y=='Y') { (index); cout<<\"\\n\删除成功!\"; } else cout<<\"\\n\删除取消!\"; } else cout<<\"\\n\对不起,系统没有该图书记录!\"; } }; //********主函数******** int main() { } system(\"color f0\"); Menu menu; //定义菜单结构体对象menu cout<<\"\\\ 当前日期:\";system(\"DATE [/T]\"); cout<<\"\\\ 当前时间: \";system(\"TIME [/T]\"); cout<<\"\\n\\\ ★ 欢 \"; _sleep(600); cout<<\"★ 迎 \"; _sleep(600); cout<<\"★ 进 \"; _sleep(600); cout<<\"★ 入 ★\\n\\n\"; (); return 0; system(\"pause\"); admin_menu(); 因篇幅问题不能全部显示,请点此查看更多更全内容