c++-图书信息管理系统(附源码).doc
《c++-图书信息管理系统(附源码).doc》由会员分享,可在线阅读,更多相关《c++-图书信息管理系统(附源码).doc(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-datec+-图书信息管理系统(附源码)c+-图书信息管理系统(附源码)学号:20104303 计算机实习报告系 别:管理系专 业:信息管理与信息系统专业班 级:1043班学生姓名:李 优指导教师:徐 日日 期:2012-09-032012-09-14-1需求分析1.1 选题任务图书借阅管理系统(1) 编程工具C+(2) 要求选题学生应具有端正的学习态度、正常的交流能力,应有
2、积极主动、克服困难的学习意识(3) 本题概述以学院图书馆为例,图书借与管理是一项经常性工作,为使图书借阅管理工作准确高效,提供图书借阅记录的添加、修改、删除、查询、浏览、汇总等,用图书借阅关系软件,能有效提高工作效率,具有较强的实际意义。(4) 功能描述 能度日外部提供的包含图书借阅信息的文本文件(TXT文件); 能在程序中录入图书借阅信息(可参考我院图书馆网上图书借阅信息的各个项目),并将信息写入文本文件(TXT文件); 能对所有图书借阅信息,按条件(按图书名、图书编号、借阅日期、借阅人、超期与否、超期天数等)查询浏览,能汇总统计计算出符合某条件的图书借阅记录的数量并浏览这些借阅信息,能将查
3、询、浏览、汇总的结果输出结果文本文件(TXT文件)(5) 辅助说明基础要求:+扩展要求:+1.2 输入数据和输出数据形式:程序中包含的图书信息包括: char bnum20; /书号 char bname20; /书名char bauthor10; /作者char rname10; /借阅人char bdays10; /借出日期char bchao10; /超期天数为了方便,我全部设置成了char型。而程序中包含两种输入方式和两种输出方式,对应题目要求,分别是:单个图书信息的增删查改;TXT文档的导入(图书数据库.txt);屏幕的打印;TXT文档的导出(书籍信息.txt)。1.3 测试数据及测
4、试目的字母测试,错误数据测试,重复数据测试目的:产看本程序的纠错能力和是否人性化。2程序设计2.1 关键数据类型定义 /*书籍结构体,用于存放书籍基本信息*class Bookprivate: char bnum20; /书号 char bname20; /书名char bauthor10; /作者char rname10; /借阅人char bdays10; /借出日期char bchao10; /超期天数public:Book() /构造函数初始化信息void set_bnum(char *no) /设置书号char *get_bnum() /获得书号void set_bname(char
5、 *n) /设置书名char *get_bname() /获得书名void set_bauthor(char *a) /设置作者char *get_bauthor() /获得作者姓名void set_bdays(char *d) /设置借出日期char *get_bdays() /获得借出日期void set_bchao(char *c) /设置超出天数char *get_bchao() /获得超出天数void set_rname(char *rn) /设置借阅人char *get_rname() /获得借阅人姓名 void copy(Book m) /Book结构体copy函数 ;/clas
6、s book/*书籍管理结构体,实现管理书籍功能*class BookManageprivate: Book books100; /定义Book书籍结构体数组对象,最大容量100本public:int length; BookManage() /构造函数,读取磁盘文件int add(Book book) /添加图书资料int bnu_search(char *bnu) /按书号查找书籍int bna_search(char *bna) /按书名查找书籍int bau_search(char *bau) /按作者查找书籍int rn_search(char *rn) /按借阅人查找书籍int b
7、d_search(char *bd) /按借出日期查找书籍 int bc_search(char *bc) /按超期天数查找书籍void revise(Book book,int i) /修改书籍函数void deleteBook(int index) /删除书籍资料函数void show_bookhead() /显示输出列表,表头。void show_book(int i)/显示书籍函数void saveFileHead() /保存书籍文件的表头到txtvoid saveFile(int i)/带参的输出书籍到txtvoid readFile() /读取书籍文件;/ class BookMa
8、nage/*菜单结构体,实现界面引导*class MenuBookManage 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() /按书
9、名查找函数void bau_search() /按作者查找函数void bd_search() /按借阅日期查找函数void bc_search() /按超期天数查找函数void addBook() /添加新的书籍信息函数void reviseBook() /修改书籍函数void delBook() /删除书籍函数int main()2.2 主程序流程图开始判断是否进入并输入密码3:删除已有图书资料4:查找已有图书资料5:查看所有图书资料6:读取指定位置TXT7: 写入指定位置TXT8:返回系统登录界面0: 退出图书管理系统1:添加新的图书资料2:修改已有图书资料输入书号判断书号是否重复输入要
10、修改的书号判断存在输入要删除的书号判断存在退出系统按超期查找按作者查找按编号查找按日期查找按书名查找重新输入书号删除 书籍重新输入书号修改数据重新输入新书号添加书籍2.3 调用关系1.书籍信息的录入:void set_bnum(char *no) /设置书号strcpy(bnum,no); /把字符串no中的字符复制到字符串bnum中char *get_bnum() /获得书号 return bnum; /返回值为bnum void set_bname(char *n) /设置书名 strcpy(bname,n); char *get_bname() /获得书名 return bname; v
11、oid set_bauthor(char *a) /设置作者 strcpy(bauthor,a); char *get_bauthor() /获得作者姓名 return bauthor; void set_bdays(char *d) /设置借出日期 strcpy(bdays,d); char *get_bdays() /获得借出日期 return bdays; void set_bchao(char *c) /设置超出天数 strcpy(bchao,c); char *get_bchao() /获得超出天数 return bchao; void set_rname(char *rn) /设置
12、借阅人 strcpy(rname,rn); char *get_rname() /获得借阅人姓名 return rname;2.书籍信息的添加: int add(Book book) 判断length是否达到最大值,如果没有则进行添加。3书籍信息的查找:无论是按照书号、书名、作者、借阅人、借出日期、超期天数来进行查找都是进行挨个比较,如果遇到相同则返回书籍的i值,进行返回输出。4.书籍信息的修改:输入想要修改的书籍编号,按照查找的方法,找到i,然后进行覆盖。完成修改。5.书籍的屏幕打印输出:分两部分输出,首先打印一个头信息,相当于列表的头;然后利用循环语句带参输出(i为参数,循环)。6.保存信
13、息到txt文件:同分为两部分,类似屏幕打印的方法,先存入表头,然后带参循环存入书籍信息。带参的意义就是,可以无限调用该语句,只要知道书的序号i。7.从信息中读取txt文件:struct books char numb10; /书号 char nameb20; /书名 char authorb10; /作者 char namer10; /借阅人 char daysb10; /借出日期 char chaob10; /超期天数;定义结构体。利用fscanf()语句讲读取的数据按顺序存入结构体中。然后直接利用书籍添加函数直接写入系统。3调试分析3.1主要问题及解决方案:1.界面颜色设定:一直抛弃黑底白
14、字这种默认形式,换一种颜色给人特殊的感觉,在网上找到相关的代码为system(color *);语句。但是也是没有头绪不知道怎么调试,后来一不小心设置错误,系统就弹出了提示界面,我就明白了界面颜色的设置方法(图3.1):图3.12.关于书籍的cout输出:最开始设计输出模块时候,仅仅是想到了不带参的book信息输出,show_book()函数中自带了一个for语句循环输出所有书籍信息,是为显示全部书籍设计的。但是后来发现如果要单显示筛选信息就要从新写一个带参show_book(int i),虽然函数重载允许这样做,但是却无意义的增加了代码长度。我选择删除了不带参的show_book(),把fo
15、r语句循环写在外面。这样就增加了show_book(int i)函数的利用率,精简了函数的和长度。3.书籍信息的txt写入:综合了屏幕打印的经验,鉴于fwrite和cout使用方法和显示效果类似,我决定将txt的写入语句也设置成带参形式saveFile(int i),原理与show_book(int i)基本一致。完成这些就能实现。后来发现文件总是覆盖,每次写入都会将上一次的覆盖,也就是只有最后一行,后来才想起了ios:app追加模式,才最终算完整实现。4.读取数据函数:这个函数是我编辑最久的,因为使用的不熟练,我先查找了很多资料,并且写了一些单独的小程序去测试效果,但是感觉都不理想。后来选择
16、了一个最笨的方法,利用fseek函数一格一格的挑开空格和无用信息。但是这样做最大的缺点就是,我的txt导入文档鼻息保持固定格式,一格空格都不能多,如果多了就会导致错位。后来与徐老师交流时,老师也说这种输入方法不可取,因为实现了功能但是意义不大。规格太死,不够人性化。于是我就退后开始,重新选择语句。最后决定定义结构体,把txt中信息读取之后直接存入结构体,随后就把结构体中的数据利用set_xxxx函数存入。5.关于字母纠错及错误输入的处理:字母输入原来都是用fflush(stdin);来清空缓存来防止程序进入死循环。但是我这次编程想到了一个更加简单有效的方法:利用char 来存储选择,随后强转为
17、int型,其实就是讲所有的字符转为了asc2码,因为acs2码的唯一性,我就可以用switch直接跳过了字母部分,比如我要判断i的输入是否唯1,我就将i-48写入switch判断就好了。 4使用说明4.1 主要功能介绍及操作步骤:1.主界面: 选择1登陆,密码为1043,按任意键进入系统。2.系统操作界面:直接输入数字选择功能。1: 添加新的图书资料:2: 修改已有图书资料: 3: 删除已有图书资料:4: 查找已有图书资料:根据序号选择功能:按书名查找: 按作者查找:按借出日期查找: 按超期天数查找:5: 查看所有图书资料: 6: 读取指定位置TXT: 7: 写入指定位置TXT: 5测试结果5
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图书 信息管理 系统 源码
限制150内