已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
长 沙 学 院课程设计说明书题目图书预订系统系(部)机算计科学与技术系专业(班级)软件工程b班姓名学号指导教师起止日期课程设计任务书课程名称:c+程序设计基础设计题目:1、图书预定系统设计要求:问题的描述:张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗?系统的大致要求如下:1. 系统记录图书的主要信息:书名、作者、书号(isbn)、出版社、版次、出版时间、馆藏编号。2. 系统应该记录读者的信息:姓名、借书证号、所在系部、分类(学生?老师?)、已借书籍、超期书籍、预定书籍。每本书都应记录其借出日期和应归还日期。3. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。4. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新入库,则通知第三个预定者,先到的人先借。5. 如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:1),则将本书加入到下一次的采购清单。技术要求:1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):#欢迎来到长沙学院图书馆请按键选择功能#1、登陆 2注销2、借书3、还书4、图书预定5、图书检索7、退出系统#2、设计合理的检索功能,要求实现l 按名称检索图书l 按书号检索图书 l 按出版社检索图书l 按馆藏编号检索图书3、设计合理的排序功能,要求实现所借书籍:l 按还期排序l 按书号排序l 按馆藏编号排序4、巧妙灵活的运用文件知识,将多个信息写入文件,如读者信息、图书信息等5、馆藏书目和读者信息事先已经存放在各自的文件中,程序只需读取和处理即可6、无需设计全面的图书的管理功能和读者的管理功能,这样可以控制程序规模和复杂度技术提示:1、分析和设计很重要,设计清楚再动手2、使用面向对象的方法可以减轻复杂问题的分析难度3、使用模板可以减少函数的数量4、文件不要用太多,要注意文件之间(文件中信息之间)的关系设计题目:2、课程设计的安排设计要求:问题的描述:计算机系的课程设计通常是由系教务的段卉老师负责安排的。但随着服务外包专业方向的招生,班级和学生人数越来越多。实验室的安排就成了问题。于是,段老师将课程设计的安排交给了各门课程的主讲教师。但是主讲教师不熟悉课程安排,安排的课程设计时间非常不合理。老师和学生都有些意见。这里要求你编写一个程序,帮助安排本学期的课程设计。系统的大致要求如下:1. 课程设计在15、16两周举行。2. 每位老师带一个班的课程设计,总学时数为40学时,每个班要在两周内上机若干个(这个数字没有规定,可根据题目的难度安排1030学时,比如说26学时)学时,其他时间为老师答疑和任务布置。3. 服务外包一共有14个班(只有3班和7班的人数超过了40人),上机的教室一共有7个分别是1401、1402、1403、1404、1408、1409、1413。4. 一般而言,任何一个没课的教室都可以容纳任何一个班,但是由于3班和7班的人数超过40人,因此只能安排到1409和1413。5. 教室里面已经安排了课,负责安排实验室的黄娟老师给了你一张有课的课表(文本文件),格式如下:1401 15nyyyynnyyy(该文件表示:1401实验室第15周星期一和星期二的占用情况,第二行开始,每行为一天,字母n表示不能排课,而字母y表示可以安排)6. 另外的一些条件也会影响课程的安排,我们必须把它考虑进去:a) 2010级的同学在两个周五的上午安排有考试、不能安排上机。b) 15周星期一是端午节假期,不能安排任何教学活动。c) 任何班不允许在同一天上机超过6个学时(3大节课)d) 一些老师会在某各时段不能上课,这个时段在安排时是未知的,当某位老师输入了需要回避的时间段后,系统应该立即调整课表的安排,并重新生成新的课表。(例如:某位老师输入6.16 5 6表示该老师在6月16日56小节有其他安排,那么这个时间点不能排课)7. 编排好的实验安排必须在屏幕上输出,当用户确认(无需调整后)以文件的形式保存技术要求:1、该系统应该设计菜单和用户交互,菜单应该包含输入老师要求回避的时间段,屏幕输出每个老师/班级的上机时间等功能。2、要求4中的实验室的课表已经以硬盘文件的形式存在,可以预先编写好,程序读取即可3、最后生成的课表应该以文件方式保存,格式可以自定技术提示:1、分析和设计很重要,设计清楚再动手2、使用面向对象的方法可以减轻复杂问题的分析难度3、使用模板可以减少函数的数量4、文件不要用太多,要注意文件之间(文件中信息之间)的关系2. 报告要求: 1) 课程设计报告要求严格按照长沙大学实验报告的相关规定执行2) 清晰描述开发设计过程与思路3) 清晰的绘出uml类图描述类的关系4) 代码要求有清晰的注释(包括类的功能注释,函数的功能注释,循环和结构的功能注释)5) 包含运行时主要界面的截图3. 技术要求:要求利用c+课程上学习的基础编程技巧来完成程序的设计;在设计的过程中,要建立清晰的类的结构并正确使用相应的数据类型; 在系统设计中要分析类与类之间的关系,将查找和排序的算法独立出来形成为单独的函数。并正确使用函数和类的模板。正确使用继承、重载和多态等编程技巧。设计工作量:40课时工作计划:(1) 2010软件工程(服务外包)114班2课时:课程设计相关知识介绍。多媒体教室。26课时:上机、调试。计算机系机房。10课时:答疑。办公室。2课时:答辩。计算机系机房。指导教师签名:日期:教研室主任签名: 日期:系主任签名: 日期:长沙学院课程设计鉴定表姓名学号专业班级设计题目指导教师指导教师意见:评定等级: 教师签名: 日期: 答辩小组意见:评定等级:答辩小组长签名:日期:教研室意见:教研室主任签名: 日期: 系(部)意见:系主任签名:日期:说明课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;摘要图书管理系统是典型的信息管理系统(mis),其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。采用c+作为开发工具,通过对c+进行深入的学习和应用,主要完成利用图书管理系统对图书记录进行统一管理,包括新增图书记录,更改图书记录,删除图书记录等功能,实现图书管理工作的系统化,规范化和自动化,为图书管理提供便利。同时是学习完c+面向对象程序设计课程后进行的一次全面的综合练习。有助于加深对面向对象程序设计中基础理论和基本知识的理解,培养了实践能力,促进理论与实践的结合。关键字:图书管理系统 c+ 信息管理系统目录1设计内容与要求92.设计说明102.1 系统功能分析:102.2系统功能模块划分与设计112.3 系统功能模块图:113.详细设计123.1 读者类的设计123.2 读者库类类的设计133.3 图书类的设计133.4 图书库类的设计144、函数定义144.1数据成员144.2函数成员144.3函数的设计:155.结果分析156.总结156测试167、附录237.1 源程序清单:23参考文献401设计内容与要求张晨是一位很爱学习的同学,但是他总是为在图书馆借阅不到自己想看的书而烦恼。终于有一天他在图书馆做勤工俭学时突发奇想:“要是有一个包含图书预定的图书借阅系统就好了”。你能够帮助他完成这个系统的编写吗?系统的大致要求如下:6. 系统记录图书的主要信息:书名、作者、书号(isbn)、出版社、版次、出版时间、馆藏编号。7. 系统应该记录读者的信息:姓名、借书证号、所在系部、分类(学生?老师?)、已借书籍、超期书籍、预定书籍。每本书都应记录其借出日期和应归还日期。8. 借书的规则如下,学生读者可以借5本图书,教师可以借6本,借期都是一个月。一旦超期,就不可以再借书或预定(原预定的图书取消)。为了简化系统,本题不考虑续借的问题。9. 预定规则如下:每个学生可以以预定两本,老师可以预定三本图书。被预定的书本一旦重新入库,则通知第三个预定者,先到的人先借。10. 如果被预定的图书超过一定人数图书比(比如说某本书被5个人预定,这本书的预定比为5:1),则将本书加入到下一次的采购清单。技术要求:1、菜单:用户需要通过菜单来选择功能。例如,菜单可以设计为下面的样子(菜单和功能可以自己设计,以下界面仅供参考):#欢迎来到长沙学院图书馆请按键选择功能#1、登陆 2注销2、借书3、还书4、图书预定5、图书检索7、退出系统#2、设计合理的检索功能,要求实现l 按名称检索图书l 按书号检索图书 l 按出版社检索图书l 按馆藏编号检索图书3、设计合理的排序功能,要求实现所借书籍:l 按还期排序l 按书号排序l 按馆藏编号排序4、巧妙灵活的运用文件知识,将多个信息写入文件,如读者信息、图书信息等5、馆藏书目和读者信息事先已经存放在各自的文件中,程序只需读取和处理即可6、无需设计全面的图书的管理功能和读者的管理功能,这样可以控制程序规模和复杂度技术提示:1、分析和设计很重要,设计清楚再动手2、使用面向对象的方法可以减轻复杂问题的分析难度3、使用模板可以减少函数的数量4、文件不要用太多,要注意文件之间(文件中信息之间)的关系2.设计说明2.1 系统功能分析:本系统有四个类,book类,bdatebase类、reader类、rdatebase类,存储借阅者的个人信息、借阅信息以及预定信息。持有借阅卡的借阅者可以借阅书刊、返还书刊、查询书刊信息、预定书刊并取消预定等功能。系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。delbook( )函数用于删除图书信息;addbook( )函数用于增加图书信息;borrowbook( )函数用于实现借书操作;returnbook( )函数用于实现还书操作等等;主函数用于掉用这些函数。2.2系统功能模块划分与设计本系统定义了book类、bdatebase类、reader类、rdatebase类这四个类,定义了addbook ( )、addreader( )、borrowbook ( )、setname( )等函数来实现系统所需功能。2.3 系统功能模块图:图 2.3图书管理系统四个类程序实现功能输出显示图书类图书库类实验员读者类行政人员读者库类文件录入查询信息删除信息退出程序预订图书3.详细设计3.1 读者类的设计该类定义了借书操作,还书操作,设置读者姓名等功能。 reader+name20:char+no:int+tag:int+borbook:int+ getname():char+gettag():int+ getno():int+setname(char na):void+ delbook():void+ addreader(int n,char *na):void+ borrowbook(int bookid):void+ retbook(int bookid):int+ disp():void 图 3.13.2 读者库类类的设计该类实现了建立读者的个人资料,删除读者信息,输出读者信息等功能。 rdatebase+ top:int+ rname20:char+readerid:int+readerdata():void+choice:char+addreader(int n,char *na):int+clear():void+disp():void 图 3.23.3 图书类的设计图书类,可以实现对图书的描述,图书的编号,书名,借出,还入等操作。 book+no:int+name20:char+onshelf:int+getname():char+getno():int+gettag():int+setname(char na):void+delbook():void+addbook():void+borrowbook():int+retbook():void+disp ():void 图 3.33.4 图书库类的设计 bdatabase+top:int+clear():void+addbook(int n,char *na):int+bookdata():void+bookdata():void+ disp():void4、函数定义4.1数据成员char namestrnum; 用来存放书名。char numberstrnum; 用来存放图书的编号。char kindtype; 用来存放图书的类型。int tag; 定义删除标记。int num; 定义图书编号为整形。int add; 增加标记。4.2函数成员book() 无参构造函数,用于为书名和作者姓名设置默认值。char getkind() 用于获取图书类型。 char getname() 用于获取书名。int getnum() 用于获取图书编号。 int gettag() 用于获取删除标记。void setname(char na) 用于设置书名。void setkind(char kin) 用于设置类型。void delbook() 用于删除图书。void addbook(int n,char *na,char *kin) 用于增加图书。void disp() 用于输出图书。 4.3函数的设计:class bdatabase 图书管理类的设置,实现对图书的添加,查找,删除等。int top; 设置图书记录指针。book bookmaxb; 设置图书记录(maxb定义为最多可存储的图书数,定义为整形)。void clear() 清空图书记录。int addbook(int n,char *na,char *kin) 增加图书记录。book *query(int bookid) 查找图书记录。void bookdata(); 定义图书库。void disp() 输出。bdatabase() 设置析构函数,将book写到book.txt文件中void bdatabase:bookdata() 由此函数开始对图书管理系统的主菜单进行调用与功能的实现。(界面参看执行界面部分)最后用main() 函数的实现,程序的主界面的引导5.结果分析本程序总共设计了四个类,满足了课题对类的要求,在设计的过程中,建立了较为清晰的类层次,也利用了面向对象的方法以及c+的编程思想来完成系统的设计,做到了每个借阅者建立一个账户,账户中存储借阅者的个人信息、借阅信息等要求。而且界面美观,容易操作。但是程序太长,不够简练,导致出现错误很难发现和修改。6.总结6.1 感想和体会:通过这次的课程设计,让我充分的感觉到了要自己设计一个程序是多么的难,以及学习好c+是多么的重要。在这个程序的设计过程中,我清楚的意识到自己的水平有多么的薄弱,课程的知识学得有多么的不扎实。看网上的例子好像觉得也没那么难,自己一上机实际操作就出现了很多问题,调试的时候系统总是在报错,还有很多警告,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但我意识到了自己有太多的不足。以后还会有很多的课程设计,一定要吸取这次的教训,把知识学懂学透学精,真正的为我所用,这样走上社会我才能真正的发挥所长。6测试管理员登陆界面读者登陆界面显示全部读者信息更改图书信息删除读者信息查看采购清单(书2的预订人数超过了5个)删除读者并显示全部读者信息增加读者密码错误时无法登陆借书并记录借书的时间还书并且提示是否过期预订图书有人还书时显示已经预订该书的读者7、附录7.1 源程序清单:#include #include #include #include using namespace std; const int maxr=100;const int maxb=100;class time1 private: int year; int month; int day; public: time1() void settime() coutyearmonthday; void show() coutyear年month月day日; int operator-(time1 &t) return (year*365+month*30+day-t.year*365-t.month*30-t.day); ;/ 读者类*class reader private: int tag; int no; char name10;int *borbook; int yijie; int kind;char xi13;int maxbor;int mima;int manager;int ryuding;int yudinged;public: reader() int getmima() return mima;int getmanager()return manager;int getryuding()return ryuding;int getyudinged()return yudinged;void del()tag=1;void jia()yudinged+;char *getname() return name; int gettag() return tag; int getno() return no; int getyijie()return yijie;void show() if(tag=0&kind!=2) / cout姓名t读者证号t单位t已借t可借数目t类型t coutsetw(11)namesetw(11)nosetw(11)xisetw(11)yijiesetw(11)maxborsetw(11)yudingedsetw(11)(kind=1?老师:学生)endl; if(tag=0&kind=2) coutsetw(11)namesetw(11)nosetw(11)xisetw(44)管理员endl; int addreader(int n) v: coutkind;if(kind=2) manager=1; if(kind=0) borbook=new int5;maxbor=5;ryuding=2; if(kind=1)borbook=new int6;maxbor=6;ryuding=3;if(kind!=1&kind!=0&kind!=2)cout输入错误,请重新输入n; goto v; tag=0;no=n;yudinged=0;coutname;coutmima;coutxi; yijie=0;return 1; void borrowbook(int bookid) if(yijie=maxbor);borbookyijie=bookid;yijie+; int retbook(int bookid) for(int i=0;imaxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0;/读者库类*class rdatabase private: int top; reader readermaxr; public: rdatabase()reader s; top=-1; fstream file(reader.txt,ios:in); /读取读者数据while (1) file.read(char *)&s,sizeof(s); if (!file)break; top+; readertop=s; file.close(); void clear() top=-1; void show() coutsetw(11)姓名setw(11)读者证号setw(11)系部setw(11)已借setw(11)可借数目setw(11)已预订setw(11)类型n; for(int n=0;n=top;n+) readern.show();reader *found(int readerid)/查找读者 for (int i=0;i=top;i+) if (readeri.getno()=readerid&readeri.gettag()=0) return &readeri; return null; int addreader() int n; t: coutn; reader *p=found(n); if(p!=null)cout读者已存在,请重新输入n;goto t;top+;readertop.addreader(n);return 1;int delreader() end:int n;coutn;reader *t=found(n); if(t=null)coutdel();void rmanage()/读者管理 int n=1; reader *b; while(!n=0) cout ¥读者管理¥n; coutn; switch(n) case 1: addreader(); cout增加成功n; break; case 2: delreader(); break; case 3: couta; b=found(a); coutshow(); cout请输入修改后的信息n; couta; b-addreader(a); cout修改成功n; break; case 4: show(); break; case 0: break; default: cout输入错误,请从新输入:n; break; rdatabase() fstream file(reader.txt,ios:out); for (int i=0;i=top;i+) if (readeri.gettag()=0) file.write(char *)&readeri,sizeof(readeri); file.close(); ; /图书类*class bookprivate:char bookname10;/书名 char author10;/ 作者 int bookno;/书编号 char chubanshe10;/出版社 char time10;/出版时间 reader yuding10;int shumu;/库存数目 int yudingno;/预订次数 int tag;/删除标记 time1 bortime;public:book()int getshumu()return shumu;void settime() bortime.settime(); time1 returntime() return bortime;void jia()/增加库存数目shumu+;int getno() return bookno; int gettag() return tag; int getyudingno()return yudingno;void setname(char *na) strcpy(bookname,na); void delbook() tag=1; void addbook(int n)tag=0;bookno=n;coutbookname; coutauthor;coutchubanshe;couttime; coutshumu; yudingno=0;int borrow() if(shumu0)shumu-;cout借书成功n;return 1;elsecout书已经借走n;return 0; int retbook(int d)shumu+;if(shumu=1&yudingno!=0)cout预定该书的读者如下n;coutsetw(11)姓名setw(11)读者证号setw(11)系部setw(11)已借setw(11)可借数目setw(11)已预订setw(11)类型n;for(int i=0;i3;i+)if(yudingi.getno()!=d) yudingi.show(); int yud(reader &a) for(int e=0;eyudingno;e+) if(yudinge.getno()=a.getno() couta.getyudinged() yudingyudingno=a; yudingno+; a.jia();return 1;void show() if(shumu0) / cout书名t作者t编号t库存t预订数t;coutsetw(11)booknamesetw(11)authorsetw(11)booknosetw(11)shumusetw(11)yudingnon;class bdatabase/图书库类* private:int top;book bookmaxb;public:bdatabase()/图书库类构造函数 book b;top=-1;ifstream file(book.txt,ios:in);/ 读取文件中的内容 while(1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close(); void clear()/把图书全部删除 top=-1;int addbook()/增加图书 int n;coutn; book *p=found(n); if(null=p) top+; booktop.addbook(n); return 1; p-jia(); cout该书已经存在于图书库中,库存数量已经增加n; return 0;book *found(int bookid)/查找函数 for (int i=0;i=top;i+) /booki.show(); if (booki.getno()=bookid&booki.gettag()=0) return &booki; return null; void show() coutsetw(11)书名setw(11)作者setw(11)编号setw(11)库存setw(11)预订数n;for(int j=0;j=top;j+)if(bookj.gettag()=0)bookj.show();void bmanage()/ 图书管理函数 char choice; char bname40; int bookid;book *b; while (choice!=0) cout *图 书 管 理 *endlendl; cout 1、新 增 2、更 改 3、删 除 4、查 找 5、显 示 6、全 删
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 城市广场排水沟铺设工程合同模板
- 综合管理部工作制度与指南
- 风力发电解决方案
- 土地复垦解除书
- 婚庆公司婚礼策划档案维护策略
- 供热工程项目备案申请
- 加油站标识标牌招投标函范本
- 保险行业子公司管理模板
- 施工合同无效索赔
- 工业园区道路改造合同
- 煤炭检验培训课件
- 2024年金融行业发展趋势
- 印刷设计行业档案管理制度完善
- 地热资源勘查与开发利用规划编制规程
- 三年级上海市沪版英语第一学期上学期期中考试试卷
- 临床见习教案支气管哮喘地诊疗教案
- 2023年云南昆明市西山区碧鸡街道社区青年人才招考笔试历年高频考点(难、易错点荟萃)附带答案详解
- 社会学职业生涯规划书
- 人教部编版三年级上册语文【选择题】专项复习训练练习100题
- 学做小小按摩师(课件)全国通用三年级上册综合实践活动
- 100个细思极恐海龟汤及答案
评论
0/150
提交评论