已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华科学院计算机科学与技术系信息管理与信息系统专业程序设计综合课程设计报告 (2010/2011学年 第一学期)学生姓名: 马 澜 学生班级: 信息管理与信息系统092201h学生学号: 200922040114指导教师: 荀亚玲2010年 月 日目 录课程设计的目的. 3课程设计实任务内容.3课程设计要求.3 系统功能模块图.3 详细设计说明.4部分函数流程图 .6程序调试.7 课程设计心得与体会.11附录:源程序代码.12一、 课程设计的目的 加深对c语言课程所学知识的理解,进一步巩固c语言算法规则.学会编制结构清晰.风格良好.数据结构适当的c程序,从而具备解决综合性问题的能力.二、 课程设计实任务内容:图书馆图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。三、 课程设计要求(1)每种书的登记内容至少包括书号、书名、著者、现存量和总库量等五项(2)作为演示系统,不必使用文件,全部数据可以都内存存放。但是由于上述四项基本业务活动都是通过书号(关键码)进行的,所以要用b树(2-3阶数)对书号建立索引,以获得高效率。(3)系统应实现的操作及定义如下:a、采编入库:新购入一种书,经分类和确定书号之后登记到图书帐目中去。如果这种书在帐中已有,则只将总库存量增加。b、清除库存:某种书已无保留价值,将它从图书帐目中注销。c、借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。d、归还:注销对借阅者的登记,改变该书的现存量。e、显示:用凹入表的形式显示b树。四、 系统功能模块图五、 详细设计说明书籍结构体(book)私有数据 char bnum10; /书号 char bname20; /书名 char bauthor10; /作者 char rname10; /借阅人公有数据及公有函数 int tag; /状态标记判断指标(已借/在架) book() /构造函数初始化信息 void set_bnum(char *no) /设置书号 char *get_bnum() /获得书号 void set_bname(char *n) /设置书名 char *get_bname() /获得书名 void set_bauthor(char *a) /设置作者 char * get_bauthor() /获得作者姓名 void set_tag(int t) /状态设置 void set_rname(char *rn) /设置借阅人 char *get_rname() /获得借阅人姓名 void show_tag() /显示图书状态 void copy(book m) /book结构体copy函数 书籍管理结构体(bookmanage)私有数据及函数 book books100; /定义book书籍结构体数组对象,最大容量100本int length; /计数void savefile() /保存书籍文件void readfile() /读取书籍文件 公有数据及函数 bookmanage() /构造函数,读取磁盘文件 bookmanage() /析构函数,保存磁盘文件 bool add(book book) /添加图书资料int bnu_search(char *bnu) /按书号查找书籍 int bna_search(char *bna) /按书名查找书籍 int bau_search(char *bau) /按作者查找书籍 int rn_search(char *rn) /按借阅人查找书籍 void revise(book book,int i)/带参的修改书籍函数 void deletebook(int index)/带参的删除书籍资料函数void show_book()/不带参的显示书籍函数 void show_book(int i)/带参的显示书籍函数 void br_book()/读者借、还书功能函数 bool in(int i) /判断图书是否在架函数 读者结构体(reader)私有数据及函数 char rname10; /读者姓名 char rclass10; /班级 char rtel10; /电话公有数据及函数 reader() /构造函数,实现数据初始化 void set_rname(char *rn) /设置读者姓名 char * get_rname() /获得读者姓名 void set_rclass(char *rc) /设置班级 char *get_rclass() /获得班级 void set_rtel(char *rt) /设置电话 char *get_rtel() /获得电话 void copy(reader m) /读者reader结构体copy函数读者管理结构体(readermanage)私有数据及函数reader readers50; /定义读者结构体数组对象,最多50位int length; /计数 void readfile() /读取读者文件函数void savefile() /保存读者文件公有数据及函数 readermanage() /构造函数,读取读者文件readermanage() /析构函数,保存读者文件 void add_reader(reader r) /添加读者用户函数int search(char *rn) /按姓名查找读者函数bool revise(reader reader,int i) /修改读者资料函数 void delete_reader(int index) /删除读者函数 bool log_reader(reader r) /登录时判断读者用户是否存在函数 void reg_reader() /注册用户函数void show_reader() /不带参的显示读者信息函数 void show_reader(int i) /带参的显示读者信息函数菜单结构体(menu)私有数据及函数bookmanage bm; /定义书籍管理结构体对象bmreadermanage rm; /定义读者管理结构体对象rmreader r; /定义读者结构体对象rint choice; /菜单序号选择 int key; /管理员密码公有数据及函数void header() /页眉void log_menu() /主界面登录菜单void admin_menu() /管理员管理菜单void reader_menu() /读者服务菜单void bsearch_menu() /读者查找书籍菜单 void absearch_menu() /管理员查找书籍菜单 void reader_lr() /读者登录或注册菜单void log_admin() /管理员登录void rn_search() /按书号查找函数 void bnu_search() /按书号查找函数 void bna_search() /按书名查找函数 void bau_search() /按作者查找函数 void addbook() /新增书籍函数void revisebook() /修改书籍函数 void delbook() /删除书籍函数 void revisereader()/修改读者用户函数 void delreader() /删除读者用户函数 主函数(main) int main()六、 部分函数流程图 管理员登录 读者登录 读者借阅图书 管理员或读者按书名查找图书 七、 程序调试各界面菜单显示主登录界面 系统管理界面读者登录界面读者服务界面书籍查找界面 登录验证管理员登录a. 输入错误密码 b.输入正确密码 读者登录a. 输入已注册姓名 b.输入未注册姓名 注册新读者用户 添加新的图书资料输入已存在图书书号 输入未存在图书书号 修改已有图书资料输入不存在图书书号 输入已存在图书书号删除已有图书资料输入不存在图书书号 输入已存在图书书号 查找已有图书资料(以按书号查找为例)输入不存在图书书号 输入已存在图书书号 2.4.8显示所有图书资料八、 课程设计心得与体会经过近三个星期的努力,前后修修改改,调试又调试,我的c+图书管理系统终于得以诞生!在这个过程中,我发现自己还有很多很多知识都没有学好,看别人的例子的时候好像很简单,自己一上机操作就有问题。调试的时候系统总是报错,还有很多警告,每添加一个函数,往往都要要调试很久,有时候仅仅只是少了一个大括号,却花上近半个小时才找到问题的瓶颈所在。系统虽然完成了,也可以运行,一些基本的功能也能够实现,但我知道,还有很多的不足。另外,我发现帮助文件真的很有用,每当我看别人例子看不懂的时候,都是去帮助文件搜索,如果里面的信息不够完整,再利用各大网站的搜索引擎来寻找答案,比如更改背景颜色的问题,之前试了很多次都不行,后来偶然发现一个ms-dos命令大全,然后再去网上搜索color命令的使用语法,原来以为很复杂的代码,只需一句system(color fd),问题就迎刃而解了。以后还会有很多课程设计,一定要吸取这次的教训,知识不是看过就可以了,而是要把知识学透、学精,才能够真正做到为我所用。九、 附录#include #include #include #include #include #define bookfile book.txt /将字符串bookfile替换原文件中的宏名称book#define readerfile reader.txtusing namespace std;/*读者结构体,用于存放读者基本信息*class reader private: char rname10; char rclass10; char rtel10;public: reader() /构造函数,实现数据初始化 strcpy(rname,);strcpy(rclass,);strcpy(rtel,); void set_rname(char *rn) /设置读者姓名 strcpy(rname,rn); /将rn的字符复制给rname char * get_rname() /获得读者姓名 return rname; /返回rname的值 void set_rclass(char *rc) /设置班级strcpy(rclass,rc); char *get_rclass() /获得班级return rclass; void set_rtel(char *rt) /设置电话strcpy(rtel,rt); char *get_rtel() /获得电话 return rtel; void copy(reader m) /读者reader结构体copy函数 strcpy(rname,m.get_rname();strcpy(rclass,m.get_rclass();strcpy(rtel,m.get_rtel();/*读者管理结构体,实现对读者用户的管理*class readermanage reader readers50; /定义读者结构体数组对象,最多50位int length; void readfile() /读取读者文件函数ifstream fread; /定义输入文件流对象fread length=0; /计数 if(!fread)cout读取磁盘文件失败!endl;exit(1); fread.open(readerfile,ios:binary);/使文件流与文件关联,以二进制方式打开int i=0;while(fread.read(char *)&readersi,sizeof(reader)/计算并返回所占字节数i+; length=i; fread.close();/关闭磁盘文件void savefile() /保存读者文件ofstream fwrite; /定义输出文件流对象fwrite if(!fwrite)cout=50) cout对不起,注册人数已满!n;return ; readerslength.copy(r); /调用读者结构体copy函数 length+;int search(char *rn) /按姓名查找读者函数for(int i=0;ilength;i+)if(strcmp(readersi.get_rname(),rn)=0)/判断是否相等return i; return -1; bool revise(reader reader,int i) /修改读者资料函数 readersi.copy(reader); /调用读者结构体cpoy函数return true;void delete_reader(int index) /删除读者函数 for(int i=index;ilength-1;i+)readersi.copy(readersi+1); /用后面的地址覆盖前面的地址 length-;bool log_reader(reader r) /登录时判断读者用户是否存在函数 for(int i=0;ilength;i+) if(strcmp(readersi.get_rname(),r.get_rname()=0)return true;return false; void reg_reader() /注册用户函数char n10; /姓名namechar c10; /班级classchar t10; /电话tel reader reader; coutn; coutc; coutt; reader.set_rname(n); /调用读者结构体设置读者姓名函数 reader.set_rclass(c); /调用读者结构体设置读者班级函数 reader.set_rtel(t); /调用读者结构体设置联系电话函数 add_reader(reader); /调用读者结构体添加读者函数coutnt注册成功!;void show_reader() /不带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; for(int i=0;ilength;i+) coutreadersi.get_rname();couttttreadersi.get_rclass();couttttreadersi.get_rtel()n; void show_reader(int i) /带参的显示读者信息函数 coutn *读*者*信*息*列*表*nn; cout姓名ttt班级ttt电话n; coutreadersi.get_rname(); couttttreadersi.get_rclass(); couttttreadersi.get_rtel()n; ; /*书籍结构体,用于存放书籍基本信息*class bookprivate: char bnum10; /书号 char bname20; /书名char bauthor10; /作者char rname10; /借阅人public:int tag; /状态标记判断指标(已借/在架)book() /构造函数初始化信息 strcpy(bnum,);strcpy(bname,);strcpy(bauthor,);strcpy(rname,);tag=0; 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; void set_bauthor(char *a) /设置作者 strcpy(bauthor,a); char * get_bauthor() /获得作者姓名 return bauthor; void set_tag(int t) /状态设置 tag=t; void set_rname(char *rn) /设置借阅人 strcpy(rname,rn); char *get_rname() /获得借阅人姓名 return rname; void show_tag() /显示图书状态 if(tag=1) cout已借; else cout在架; void copy(book m) /book结构体copy函数 strcpy(bnum,m.get_bnum(); /将获得书号函数里的返回值里的字符复制到bnum strcpy(bname,m.get_bname(); strcpy(bauthor,m.get_bauthor(); tag=0; ;/*书籍管理结构体,实现管理书籍功能*class bookmanageprivate: book books100; /定义book书籍结构体数组对象,最大容量100本int length; void savefile() /保存书籍文件ofstream fwrite; /定义输出文件流ofstream结构体对象fwriteif(!fwrite)cout文件保存失败!n; exit(1); fwrite.open(bookfile,ios:binary);/使文件流与文件建立关联,以二进制方式打开fwrite.write(char *)books,length*sizeof(book); /计算并返回所占字节数 fwrite.close(); /关闭磁盘文件void readfile() /读取书籍文件 ifstream fread; /定义输入文件流对象fread length=0; if(!fread)cout文件读取失败!=100) cout对不起,储存已满,您无法继续添加!n; return -1; else bookslength.copy(book); /调用书籍结构体copy函数 length+; return (length-1);int bnu_search(char *bnu) /按书号查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bnum(),bnu)=0) /字符串比较,判断是否相等 return i; return -1; int bna_search(char *bna) /按书名查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bname(),bna)=0) /判断 return i; return -1; int bau_search(char *bau) /按作者查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_bauthor(),bau)=0)/判断 return i; return -1; int rn_search(char *rn) /按借阅人查找书籍 for(int i=0;ilength;i+) if(strcmp(booksi.get_rname(),rn)=0)/判断 return i; return -1; void revise(book book,int i)/带参的修改书籍函数 booksi.copy(book); /调用book结构体copy函数void deletebook(int index)/带参的删除书籍资料函数 for(int i=index;ilength-1;i+) booksi.copy(booksi+1);/用后面的地址将当前的地址覆盖 length-; void show_book()/不带参的显示书籍函数 cout *书*籍*信*息*列*表*nn; cout书号; cout.width(10); cout书名; cout.width(20); cout作者; cout.width(10); cout状态; cout.width(10); cout借阅人n; for(int i=0;ilength;i+) coutbooksi.get_bnum(); cout.width(10); coutbooksi.get_bname(); cout.width(20); coutbooksi.get_bauthor(); cout.width(10); booksi.show_tag(); cout.width(10); coutbooksi.get_rname()n; void show_book(int i)/带参的显示书籍函数 cout *书*籍*信*息*列*表*nn; cout书号; cout.width(10); cout书名; cout.width(20); cout作者; cout.width(10); cout状态; cout.width(10); cout借阅人n; coutbooksi.get_bnum(); cout.width(10); coutbooksi.get_bname(); cout.width(20); coutbooksi.get_bauthor(); cout.width(10); booksi.show_tag(); cout.width(10); coutbooksi.get_rname()sh; int index=bnu_search(sh); /定义一个变量等于查找到的书号 if(index=0) if(booksindex.tag=1) /已借 a=1; if(booksindex.tag=0) /在架 a=2; switch(a) case 1: coutnt该书目前状态为n; coutchoi; cin.ignore(); /清除以回车结束的输入缓冲区的内容,消除上一次输入对下一次输入的影响 if(choi!=1&choi!=0) coutnt操作有误,请重新选择(0/1)!n; return; else if(choi=1) coutdz; cin.ignore(); int index1=reader.search(dz); if(index1=-1) coutnt对不起,系统无该读者记录,新用户请先注册!; return; else strcpy(dz,);/将读者姓名已空白代替 booksindex.set_rname(dz);/借阅人一项变为空白 booksindex.set_tag(0);/图书状态变为在架 coutnt还书成功!endl; break; case 2: coutnt该书目前状态为n; coutchoi; cin.ignore(); if(choi!=1&choi!=0) coutnt操作有误,请重新选择(0/1)!n; return; else if(choi=1) coutdz; int index1=reader.search(dz); if(index1=-1) coutnt对不起,系统无改读者记录,新用户请先注册!; return; else booksindex.set_rname(dz); booksindex.set_tag(1); coutnt借书成功!endl; break; else coutnt对不起,系统无该书记录!; bool in(int i) /判断图书是否在架函数 if(booksi.tag=1) return false; return true; ;/*菜单结构体,实现界面引导*class menubookmanage bm; /定义书籍管理结构体对象bmreadermanage rm; /定义读者管理结构体对象rmreader r; /定义读者结构体对象rprivate:int choice; /菜单序号选择 int key; /管理员密码public:void header() /页眉system(color fd);coutt n;coutt n;coutt n;coutt 图 书 借 阅 管 理 系 统 n;coutt n;coutt n;coutt n;void log_menu() /主界面
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初中三年级生物细胞结构测试卷
- 2025年初中七年级化学同步练习试卷
- 2025年人工智能医疗辅助系统可行性研究报告及总结分析
- 基于单片机土壤温湿度智能补光浇花设计系统
- 2025年智能家电产品市场分析与规划可行性研究报告及总结分析
- 2025年新型锂电池生产技术应用可行性研究报告及总结分析
- 2025年数字货币创新发展可行性研究报告及总结分析
- 2025年智能农业行业智能农业与农业智能化研究报告及未来发展趋势
- 2025年面向老年人的智能产品设计项目可行性研究报告及总结分析
- 2025年木雕手作体验活动策划合同
- 2025年资金管理专员岗位招聘面试参考试题及参考答案
- 2025年镇残联年度工作总结(6篇)
- 医院消防知识题库及答案
- 房地产公司工程质量管控实施细则
- 2026年怀化师范高等专科学校单招职业技能测试题库汇编
- 旅行社安全应急预案范本
- (2025)纪检监察综合业务知识考试题(含答案)
- (2025年)篮球裁判员考试题(附答案)
- 2026公考省考国考试题及答案
- 全国大学生职业规划大赛《冰雪运动与管理》专业生涯发展展示【高职(专科)】
- 钻井工程班报表
评论
0/150
提交评论