图书馆管理系统.doc_第1页
图书馆管理系统.doc_第2页
图书馆管理系统.doc_第3页
图书馆管理系统.doc_第4页
图书馆管理系统.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

长 沙 学 院课程设计说明书题目系(部)专业(班级)姓名学号指导教师起止日期程序设计基础课程设计任务书系 专业 班级 设计人 课程名称:C+高级编程一、题目:图书预定系统二、目的与要求1 目的:(1)培养学生综合利用C+语言进行程序设计的能力,掌握排序算法,使学生能够解决信息管理系统中的一些问题。(2)提高学生建立程序文档、归纳总结的能力。2 基本要求:(1)要求用C+面向对象编程思想来完成程序的设计;(2)要求各个功能分别使用函数来完成。(3)源代码程序要求必要的注释。3 创新要求在基本要求达到后,请修改代码,在功能不变的情况下尽可能修改代码使代码短小。4 书写设计报告的要求设计报告中包含以下几个方面:1、 设计题目2、 总体设计1) 首先设计类,建立类的成员2) 用自顶而下或自底而上的方法,划分功能模块,设计每个类的成员函数3) 确定各模块的算法3、 根据算法画出流程图4、 列出程序清单,并加以必要的注释5、 写出调试程序的方法6、 指出所设计问题的不足和改进方案7、 画出程序流程图5 课程设计材料的装订顺序为:1) 设计说明书封面2) 课程设计任务书3) 课程设计鉴定表4) 目录5) 设计报告书正文三、设计方法和基本原理1 问题描述:张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗?系统的大致要求如下:1. 系统记录图书的主要信息:书号、书名、作者、出版社、版次、出版时间、馆藏编号、剩余本数、馆藏总数、预定人数。2. 系统应该记录读者的信息:借书证号、姓名、所在系部、分类(学生?老师?)、已借书籍的本数、超期书籍的本数、预定书籍的本数、已借书籍、超期书籍、预定书籍。每本书都应记录其借出日期。3. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。4. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新入库,则通知第三个预定者,先到的人先借。如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:1),则将本书加入到下一次的采购清单。2. 问题的解决方案:根据问题的描述,可以按照要求的功能采用面向对象的设计思想。1) 要求使用面向对象的方法实现,类的成员中必须包含题干描述的内容。2) 使用排序函数实现排序功能。四、主要技术问题的描述1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):#欢迎来到长沙学院图书馆请按键选择功能#1、登陆 2注销2、借书3、还书4、图书预定5、图书检索7、退出系统#2、设计合理的检索功能,要求实现l 按名称检索图书l 按书号检索图书 l 按出版社检索图书l 按馆藏编号检索图书3、设计合理的排序功能,要求实现所借书籍:l 按还期排序l 按书号排序l 按馆藏编号排序4、巧妙灵活的运用文件知识,将多个信息写入文件,如读者信息、图书信息等5、馆藏书目和读者信息事先已经存放在各自的文件中,程序只需读取和处理即可6、无需设计全面的图书的管理功能和读者的管理功能,这样可以控制程序规模和复杂度五、课程设计时间:第15-16周(共两周)六、课程设计的考核方式及评分方法1考核方式课程设计结束时,在机房当场验收。1) 教师提供测试数据,检查运行结果是否正确。2) 回答教师提出的问题。3) 学生提交课程设计文档(A4纸打印)2评分方法上机检查:书面报告 5:5,没有通过上机检查的其成绩直接记录不及格指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名学号专业班级设计题目图书预定系统指导教师付细楚指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要此次课程序设计是图书预定管理系统设计,所用的是C+模块化和面向对象的设计思想。在图书预定管理系统功能中,有用户的登陆、借书、还书、预定、检索等功能。我定义了tushu(图书类)和reader(读者类)这两个类,在tushu中它们的全是公有成员,而reader有私有的和公有的。各种功能可以独立分成各个模块。我设计的必须先登陆才能进入主界面(若没有注册就必须先注册才能进入)。进入后用户可以选择功能来满足自己的要求。关键字:函数调用;C+面向对象;类;文件的运用 目录1. 需求分析 082. 系统分析 092.1 功能模板设计 092.1.1登陆设计 092.1.2 按书号书设计 092.1.3 按书号还书设计 102.1.4 按书号预订设计 102.1.5 图书检索设计 112.2 UML类图 122.3 文件 133. 运行效果图 144. 总结 18参考文献 19附录A源程代码 20 1. 需求分析11设计要求5. 系统记录图书的主要信息:书名、作者、书号(ISBN)、出版社、版次、出版时间、馆藏编号。6. 系统应该记录读者的信息:姓名、借书证号、所在系部、分类(学生?老师?)、已借书籍、超期书籍、预定书籍。每本书都应记录其借出日期和应归还日期。7. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。8. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新入库,则通知第三个预定者,先到的人先借。如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:1),则将本书加入到下一次的采购清单。12 技术要求1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):#欢迎来到长沙学院图书馆请按键选择功能#1、登陆 2注销2、借书3、还书4、图书预定5、图书检索7、退出系统#2、设计合理的检索功能,要求实现1按名称检索图书2按书号检索图书 3按出版社检索图书4按馆藏编号检索图书3、设计合理的排序功能,要求实现所借书籍:1 按还期排序2 按书号排序3 按馆藏编号排序4技术提示:1、分析和设计很重要,设计清楚再动手2、使用面向对象的方法可以减轻复杂问题的分析难度3、使用模板可以减少函数的数量4、文件不要用太多,要注意文件之间(文件中信息之间)的关系2系统设计21 功能模块设计211 登陆设计 文字说明:输入登陆时间及一个月后相应的这一天,输入帐号和密码后会在text文档中查找,若找到帐号但密码不对时输出错误,都对了就输出登陆成功,否则就注册。登陆登陆成功输入的帐号或密码有错注册并登陆212 按书号借书设计 文字说明:输入要借的书的书号,自动在outfile文档查找并判断本书是否还有剩余,若有,就判断用户借书数是否超过最大借书数,若没有就借书成功,否则借书失败。开始输入书本书号outfile中此书0?借书数最大借书数?借书成功借书失败yesyesno 213 按书号还书设计 文字说明:输入要还得书的书号,自动在read文档查找并判断本书书目是否大于0;若是就还书成功并更新text和outfile文档,否则还书失败。开始输入数本书好判断是否存在,并且数目大于0?还书成功并更新text和outfile文档 2.1.4 桉书号预定设计 文字说明:判断outfile文档中本书是否为0;若是就判断用户预订数是否超过最大预订数,若没有就预订成功,否则预订失败。开始输入书本书号outfile中此书=0?预订数最大预订数?预订成功预定失败 2.1.4 图书检索设计 文字说明: 图书检索里有四种方法, 1按名称检索图书2按书号检索图书 3按出版社检索图书4按馆藏编号检索图书选择你要的方法后,输入相应的信息,输出信息。例如:按名称检索图书输入名称Outfile中查找到此书输出此书信息4022 UML类图书类 tushuchar bookname30; /书名char author20; /作者char bookset10; /书号char time20; /出版时间char publish30; /出版社int bianhao; /管藏编号int book_num; /预定本数int book_sum; /剩余本数tushu()tushu()void show()/图书馆书显示读者类readerprivate:char name20;/读者姓名char password16; /密码char lend_num11;/借书证号(学生学号)char xibu30;/所在系部int lendbook; /已借书籍本数int beyondbook; /超期书籍本数int fobook;/预定书籍本数int kind;/老师或学生(0/1)public:char lends11;/记录账号int otime,Otime;/记录时间int denglu();/登陆void set();/修改void borrow(); /借书void limited();/判断是否超期void returns();/还书void books();/预定图书void look();/检索图书2.3 文件图书馆信息:从左至右:书名 作者 书号 剩余本数 出版社 出版时间 管藏编号 预定本数读者信息:从左至右:姓名 账号 密码 系部 借书本数 超期本数 预订本数 老师/学生(0/1)读者借书信息:从左至右:账号 书号 本数 时间 3 .运行效果图3-1 输出图书信息3-2 登陆(没有注册)3-3 登陆(注册)3-4 借书 3-5 还书 3-6 预订书籍 3-7 图书检索3-8 注销到登陆面3总结这次课程设计让我了解了世上没有白吃的午饭,如果没有努力,认真,坚持不懈的话是不能做成任何事的。虽然我这次不是独立完成的,但大部分都是我自己做的。这种感觉真好,自己不用抄袭别人的,用自己的汗水做出的成果可让自己有成就感,虽然看到别人的比自己的好很多时会有些沮丧,但我还是很高兴很高兴。这次也让我学到了很多C+面向对象的知识,让我知道了在C+中哪些是我没有学到的,不过我好象没有学到什么,别人只要一天两天就做出来了,而我用了别人的好几倍。不过笨鸟也会有展翅高飞的时候。参考文献1 王挺,周会平,贾丽丽,徐锡山C+程序设计M 北京:清华大学 出版社,2005:223-225附录A源程代码#include#include#include#define ki 6 /定义图书馆书的种类#define ren 5char *WO10;class tushu /定义图书馆书类public:char bookname30;/书名char author20;/作者char bookset10;/书号char time20;/出版时间char publish30;/出版社int bianhao;/管藏编号int book_num;/预定本数int book_sum;/剩余本数public:tushu()tushu()void show()/图书馆书显示ifstream nfile(outfile.txt,ios:in|ios:out);if(! nfile)coutfile open errorn;elsecout书名 作者 ; cout书号 剩余本数 出版社 ; cout出版时间 管藏编号 预定本数nnendl;for(int i=1;ibooknameauthorbooksetbook_sumpublishtimebianhaobook_num;coutbookname author bookset book_sum publish time bianhao book_numendl; coutendl;nfile.close();class reader/定义读者类private:char name20;/读者姓名char password16; /密码char lend_num11;/借书证号(学生学号)char xibu30;/所在系部 int lendbook; /已借书籍本数int beyondbook; /超期书籍本数 int fobook;/预定书籍本数int kind;/老师或学生(0/1)public:reader()reader()char lends11;/记录账号 int otime,Otime;/记录时间int denglu() /登陆reader R;char lend_num11,mima16;/借书证号(学生学号) 密码int otime1,otime2;/时间ifstream Da(text.txt,ios:in|ios:out);ofstream DA(text.txt,ios:out|ios:ate);coutsetw(40)登陆nnendl;coutotime1;otime=otime1; coutotime2;Otime=otime2;coutlend_num;strcpy(lends,lend_num);coutmima; if(! Da) & (! DA)coutfile open error!R.nameR.lend_numR.passwordR.xibuR.lendbookR.beyondbookR.fobookR.kind;if(strcmp(lend_num,R.lend_num)=NULL & strcmp(mima,R.password)=NULL)cout登陆成功!endlendl; cout姓名:tR.nameendl借书证号:tR.lend_numendl 所在系部:tR.xibuendl 已借书籍本数:tR.lendbookendl 超期书籍本数:tR.beyondbookendl 预定书籍本数:tR.fobookendl 老师或学生(0/1):tR.kindendl;return 1;if(strcmp(lend_num,R.lend_num)=NULL & strcmp(mima,R.password)!=NULL)cout输入的密码或帐号有错!nn;reader b;b.denglu(); if(Da.eof() coutn你没有注册,请注册!nendl; coutR.name;coutendlR.password;coutendl R.xibu;coutendl R.kind;coutendl; DAR.nametlend_numtR.passwordtR.xibut0t0t0tR.kindendl;R.denglu(); Da.close();return 1;void borrow() /借书char bookset110;int n;/1表示借书成功,0失败tushu b;reader c;ifstream outfile(outfile.txt,ios:in);ofstream infile(file.txt,ios:out);if(! outfile & ! infile)coutfile open errorn;elsecoutbookset1;for(int i=1;ib.booknameb.authorb.booksetb.book_sum b.publishb.timeb.bianhaob.book_num; if(strcmp(bookset1,b.bookset)=NULL)if(b.book_sum0)n=1;b.book_sum-=1; elsen=0; cout这本书已经借完了!n;infileb.bookname b.author b.bookset b.book_sum b.publish b.time b.bianhao b.book_numendl;/coutb.book_sum ;/输出剩余数outfile.close();infile.close(); coutendl;if(n!=1)cout借书失败咯!n;if(n=1) ifstream infi(text.txt,ios:in|ios:out); ofstream outfi(outtext.txt,ios:out); ofstream read(read.txt,ios:out|ios:ate); if(!infi & !outfi) coutopen file or create file errorn; else for(int i=0;c.lend_numc.passwordc.xibuc.lendbook c.beyondbookc.fobookc.kind; if(strcmp(lends,c.lend_num)=NULL) if(c.kind=1)/学生 if(c.lendbook=5) n=0; cout借书数目已满,不能再借endl; cout借书失败咯!n; else readlends bookset1 1 Otime=6)/老师 n=0; cout借书数目已满,不能再借endl; cout借书失败咯!n; else readlends bookset1 1 Otimeendl;/保存借书相关信息 c.lendbook+=1; c.lend_num c.password c.xibu c.lendbook c.beyondbook c.fobook c.kindendl; coutc.lendbook ; outfi.close(); infi.close(); if(n=1) coutendl; coutsetw(17)借书成功!n; /更新图书馆和读者库 ofstream out(outfile.txt,ios:out|ios:trunc);out.close(); ifstream in(file.txt,ios:in); ofstream outt(outfile.txt,ios:out); if(! in & ! outt) couterrorn; elsefor(int j=1;j=ki;j+) char butff1000; in.getline(butff,1000); outtbutffendl; in.close(); outt.close(); ifstream ini(outtext.txt,ios:in); ofstream ou(text.txt,ios:out); if(! ini & ! ou) couterrorn; elsefor(int i=1;i=ren;i+) char line1000; ini.getline(line,1000); oulineendl; ini.close(); ou.close(); void limited()/判断是否超期 reader c; int otime1,n; char book_set10; char lendnums11; ifstream W1(read.txt,ios:in); if(! W1) coutlendnumsbook_setnotime1; if(strcmp(lendnums,lends)=NULL) if(otimeotime1) coutlends,你有超期书籍,请尽快还书n; ifstream w(text.txt,ios:in); ofstream w1(outtext,ios:out); if(! w) coutopen file errorn; else for(int j1=1;c.lend_numc.passwordc.xibuc.lendbook c.beyondbookc.fobookc.kind; if(strcmp(c.lend_num,lends)=NULL) c.beyondbook+=1; c.lend_num c.password c.xibu c.lendbook c.beyondbook c.fobook c.kindendl; w.close(); w1.close(); W1.close(); ifstream ini(outtext.txt,ios:in); ofstream ou(text.txt,ios:out); if(! ini & ! ou) couterrorn; elsefor(int i=1;i=ren;i+) char line1000; ini.getline(line,1000); oulineendl; ini.close(); ou.close(); /还书void returns()char bookset10;tushu b;reader c;char nameset11,book_set10;int n,num;int a;/1表示还书成功,0失败ifstream outfile(read.txt,ios:in);ofstream outfil(reader.txt,ios:out);if(! outfile & ! outfil)coutfile open errorn;elsecoutbookset;while(! outfile.eof()outfilenamesetbook_setnumn;if(strcmp(nameset,lends)=NULL)& (strcmp(book_set,bookset)=NULL) & num0)a=1;num-=1;ifstream Ab(outfile.txt,ios:in);ofstream AB(file.txt,ios:out|ios:trunc);if(! Ab)coutfile open errorn;elsefor(int i=0;ib.booknameb.authorb.booksetb.book_sum b.publishb.timeb.bianhaob.book_num; if(strcmp(b.bookset ,bookset)=NULL) b.book_sum+=1; ABb.bookname b.author b.bookset b.book_sum b.publish b.time b.bianhao b.book_numendl; cout* ;Ab.close();AB.close(); coutendl;ifstream Ac(text.txt,ios:in);ofstream AC(outtext.txt,ios:out|ios:trunc);if(! Ab)coutfile open errorn;elsefor(int i=0;c.lend_numc.passwordc.xibuc.lendbook c.beyondbookc.fobookc.kind; if(strcmp(c.lend_num,lends)=NULL) c.lendbook-=1; AC c.lend_num c.password c.xibu c.lendbook c.beyondbook c.fobook c.kindendl; /coutc.lendbook ;Ac.close();AC.close();outfilnameset book_set num nendl;outfil.close();outfile.close();/更新图书馆和读者库、借书库if(a=1)cout还书成功n;ofstream out(outfile.txt,ios:out|ios:trunc);out.close();ifstream in(file.txt,ios:in);ofstream outt(outfile.txt,ios:out);if(! in & ! outt)couterrorn;elsefor(int j=1;j=ki;j+)char butff1000;in.getline(butff,1000);outtbutffendl;in.close();outt.close();ifstream ini(outtext.txt,ios:in);ofstream ou(text.txt,ios:out);if(! ini & ! ou)couterrorn;elsefor(int i=1;i=ren;i+)char line1000;ini.getline(line,1000);oulineendl;ini.close();ou.close();ifstream outfile1(reader.txt,ios:in);ofstream ou1(read.txt,ios:out);if(! outfile1 & ! ou1)couterrorn;elsewhile(! outfile1.eof()char lin1000;outfile1.getline(lin,1000);ou1linendl;outfile1.close();ou1.close(); /修改图书馆void set()tushu v;ifstream nfile(outfile.tx

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论