《C++课程设计图书管理系统-(完整版)(17页).doc》由会员分享,可在线阅读,更多相关《C++课程设计图书管理系统-(完整版)(17页).doc(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、-C+课程设计图书管理系统-(完整版)-第 16 页中南大学 资源与安全工程学院课 程 设 计 报 告课程名称 C+课程设计 课题名称 图书管理系统设计 专 业 城市地下空间工程 班 级 城地1001班 学 号 0202100117 姓 名 彭xx 指导教师 毕林 2011年 06 月 26 日任务书下达日期 2011年 06 月 20 日 任务完成日期 2011 年 06 月 26日题目三:图书管理系统设计(一)、课程设计题目:图书管理系统设计(二)、要求: 使用二进制文件方式存储数据,系统以菜单方式工作(三)、设计方法和基本原理: 1、功能描述: (1)新进图书基本信息的输入。(2)图书基
2、本信息的查询。(3)对撤消图书信息的删除。(4)为借书人办理注册。(5)办理借书手续。(6)办理还书手续。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告以及系统使用说明书一、设计内容与设计要求1.课程设计目的:从课程设计的实践活动中获得知识提高。要求学生
3、达到熟练掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.总体设计2.1 系统功能分析:系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。delbook( )函数用于删除图书信息;addbook( )函数用于增加图书信息;borrowbook( )函数用于实现借书操作;returnbook( )函数用于实现还书操作等等;主函数用于掉用这些函数。2.2系统功能模块划分与设计本系统定义了Book类、BDatebase类、Reader类、RDatebase类这四个
4、类,定义了addbook ( )、addreader( )、borrowbook ( )、setname( )等函数来实现系统所需功能。2.3 系统功能模块图:图书管理系统四个类程序实现功能输出显示图书类图书库类实验员读者类行政人员读者库类文件录入查询信息删除信息退出程序33.详细设计3.1 读者类的设计该类定义了借书操作,还书操作,设置读者姓名等功能。 Reader+name20:char+no:int+tag:int+borbook:int+ getname():char+gettag():int+ getno():int+setname(char na):void+ delbook():
5、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 图书类的设计
6、图书类,可以实现对图书的描述,图书的编号,书名,借出,还入等操作。 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 图书库类的设计 Xingzhengrenyuan+top:int+clear():void+addbook(int n,char *na):int+bookdata()
7、:void+bookdata():void+ disp():void 图 3.44.调试与测试:4.1系统调试在调试过程中,出现了一些错误。1、输入数据时,输错了数据的类型会造成死循环,因此输入时需要注意。 2、一开始主界面输入非正确数字时,没有提示错误。容易造成用户误解 图4.1在主函数的switch语句结束处加上default:cout输入错误,请从新输入:;就可以了,修改后: 图4.2 具体调试过程。主界面 图4.3图书维护 图4.4读者维护图4.15.结果分析本程序总共设计了四个类,满足了课题对类的要求,在设计的过程中,建立了较为清晰的类层次,也利用了面向对象的方法以及C+的编程思想来
8、完成系统的设计,做到了每个借阅者建立一个账户,账户中存储借阅者的个人信息、借阅信息等要求。而且界面美观,容易操作。但是程序太长,不够简练,导致出现错误很难发现和修改。6. 总结感想和体会:通过这次的课程设计,让我们充分的感觉到了要自己设计一个程序是多么的难,以及学习好c+是多么的重要。在这个程序的设计过程中,我们清楚的意识到自己的水平有多么的薄弱,课程的知识学得有多么的不扎实。看网上的例子好像觉得也没那么难,自己一上机实际操作就出现了很多问题,调试的时候系统总是在报错,还有很多警告,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基
9、本的功能,但我们意识到了自己有太多的不足。以后还会有很多的课程设计,一定要吸取这次的教训,把知识学懂学透学精,真正的为我所用,这样走上社会我们才能真正的发挥所长。我们三个人分工合作,组长彭爱贤负责对程序的编译,通过不断的尝试和学习,最终制成程序的最初模式!谢经纬负责对程序的修改。沈维健负责后期制作,总结组内的制作经验!通过努力,得以在规定的时间内完成任务。这一次的C+课程设计让我们学到了很多知识,懂得如何发现问题,并解决!非常感谢老师及同学们的帮助,让我们有这一个机会好好学习C+的更广泛的知识。7、7.1 源程序清单:#include #include /定义控制符#include /包含st
10、ring的头文件#include /用来支持对磁盘文件的输入输出using namespace std; const int Maxr=100;const int Maxb=100;const int Maxbor=5; /以上三行声明Maxr、Maxb、Maxbor为常数据成员class Reader /声明类类型为读者private: /声明以下部分为私有的int tag; /int no; /定义编号为整型char name10; /定义长度为10的名字数组字符串int borbookMaxbor; /定义整型借书数组public: /声明以下部分为公用的Reader() /Reader
11、类构造函数char *getname() return name; /虚函数,返回nameint gettag() return tag; /虚函数,返回tagint getno() return no; /虚函数,返回No.void setname(char na) /设置读者姓名函数strcpy(name,na); /复制字符串void delbook() tag=1; /删去图书信息void addreader(int n,char *na) /增加读者信息tag=0; no=n; strcpy(name,na); for(int i=0;iMaxbor;i+) borbooki=0;
12、void borrowbook(int bookid) /定义借书函数,且借图书编号为整型for(int i=0;iMaxbor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid)for(int i=0;iMaxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void disp() /成员函数,输出基类数据成员cout setw(5) no setw(10) name借书编号:; /*设置编号字段宽度为5位,设置名字字段宽度为10位*/f
13、or(int i=0;iMaxbor;i+) if(borbooki!=0) cout borbooki |; cout endl; class RDatabase /定义RDatabase类private: int top; Reader readMaxr;public: RDatabase() /构造函数Reader s; top=-1; fstream file(reader.txt,ios:in); /在reader.txt以输入方式打开文件while (1) file.read(char *)&s,sizeof(s); if (!file)break; /如果非file,结束循环to
14、p+; readtop=s; file.close(); void clear()top=-1; int addreader(int n,char *na)Reader *p=query(n); if (p=NULL) top+; readtop.addreader(n,na); return 1; return 0; Reader *query(int readerid) /定义query指针,且读者编号为整型for (int i=0;i=top;i+) if (readi.getno()=readerid & readi.gettag()=0) return &readi; /指向read
15、ireturn NULL; void disp() for (int i=0;i=top;i+) readi.disp(); void readerdata();RDatabase()fstream file(reader.txt,ios:out); /使用文件与reader.txt文件建立关联for (int i=0;i=top;i+) if (readi.gettag()=0) file.write(char *)&readi,sizeof(readi); file.close(); void RDatabase:readerdata() char choice; char rname20
16、; int readerid; Reader *r; while (choice!=0) cout nnttt读 者 维 护nnntt 1 新 增nntt 2 更 改nntt 3 删 除nntt 4 查 找nntt 5 显 示nntt 6 全 删nntt 0 退 出 choice; switch (choice) case 1: cout readerid; /输入读者编号cout rname; /输入读者姓名addreader (readerid,rname); break; case 2: cout readerid; /输入读者编号r=query(readerid); if (r=NUL
17、L) cout 该读者不存在 endl; break; cout rname; r-setname(rname); break; case 3: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在 delbook(); break; case 4: cout readerid; r=query(readerid); if (r=NULL) cout 该读者不存在disp(); break; case 5: disp(); break; case 6: clear(); break; default:cout输入错误,请重新输入:;
18、break; class Book /定义Book类private: int price;char author10;int tag;int no;char name20;int onshelf; public: Book() char *getname() return name; int getno() return no; int gettag() return tag; char*getauthor()return author;char getprice()return price;void setname(char na) strcpy(name,na); void setauth
19、or(char au)strcpy(author,au);void delbook() tag=1; void addbook(int n,char *na,char*au,int pr)tag=0; no=n; price=pr;strcpy(author,au); strcpy(name,na); onshelf=1; int borrowbook()if (onshelf=1) onshelf=0; return 1; return 0; void retbook()onshelf=1; void disp()cout setw(6) 图书编号: no setw(18) 图书名: nam
20、e setw(10) 作者名: authorsetw(18)图书单价: pricesetw(10)(onshelf=1? 在架:已借) endl; class BDatabase /定义BDatabase类private: int top; Book bookMaxb; public: BDatabase()Book b; top=-1; fstream file(book.txt,ios:in); while (1) file.read(char *)&b,sizeof(b); if (!file) break; top+; booktop=b; file.close(); void cle
21、ar()top=-1; int addbook(int n,char *na,char*au,int pr)Book *p=query(n); if (NULL=p) top+; booktop.addbook(n,na,au,pr); return 1; return 0; Book *query(int bookid)for (int i=0;i=top;i+) if (booki.getno()=bookid &booki.gettag()=0) return &booki; return NULL; void bookdata();void disp() for (int i=0;i=
22、top;i+) if (booki.gettag()=0) booki.disp(); BDatabase()fstream file(book.txt,ios:out); /使文件流与book.txt文件建立关联for (int i=0;i=top;i+) if (booki.gettag()=0) file.write(char *)&booki,sizeof(booki); file.close(); void BDatabase:bookdata() char choice; char bauthor10;int bprice;char bname40; int bookid; Boo
23、k *b; while (choice!=0) cout nnnttt图 书 维 护 endlendl; couttt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出 choice; switch (choice) case 1: cout 输入图书编号: bookid; cout 输入图书书名: bname; coutbauthor;coutbprice;addbook(bookid,bname,bauthor,bprice);break; /结束循环case 2: cout 输入图书编号: bookid; b=query(book
24、id); if (b=NULL) cout 该图书不存在 endl; break; cout 输入新的书名: bname; b-setname(bname); break; case 3: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在 delbook(); break; case 4: cout 读入图书编号: bookid; b=query(bookid); if (b=NULL) cout 该图书不存在disp(); break; case 5: disp(); break; case 6: clear(); b
25、reak; default:cout输入错误,请从新输入:; void main() /主函数char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!=0) cout endlendlttt 图 书 管 理 系 统nnn; cout ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开 choice; switch (choice) case 1: cout readerid; c
26、out bookid; r=ReaderDB.query(readerid);if (NULL=r) cout 不存在该读者,不能借书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该图书,不能借书borrowbook()=0) cout 该图书已借出,不能借书borrowbook(b-getno(); break; case 2: coutreaderid; cout bookid; r=ReaderDB.query(readerid); if (r=NULL) cout 不存在该读者,不能还书 endl; break; b=BookDB.query(bookid); if (b=NULL) cout 不存在该图书,不能还书 retbook(); r-retbook(b-getno(); break; case 3: BookDB.bookdata(); break; case 4: ReaderDB.readerdata(); break; default:cout输入错误,请从新输入:;