C图管理 .docx
精品名师归纳总结课 程 设 计 报 告课程名称面对对象程序设计课题名称图书治理系统专业运算机科学与技术班级运算机 0981学号202113310608姓名谭俐莎指导老师李珍辉 邓作杰2021 年 12 月 05 日湖南工程学院湖南工程学院 课 程 设 计 任 务 书课程名称 面对对象程序设计课 题 图书治理系统专业班级运算机 0981 同学姓名 谭俐莎学号202113310608指导老师李珍辉 邓作杰审批李珍辉任务书下达日期 2021 年 12 月 05 日任务完成日期2021 年 01 月 15 日可编辑资料 - - - 欢迎下载精品名师归纳总结一、设计内容与设计要求1. 课程设计目的:面对对象程序设计课程设计是集中实践性环节之一,是学习完面对对象程序设计课程后进行的一次全面的综合练习。要求同学达到娴熟把握C+语言的基本学问和技能。基本把握面对对象程序设计的思想和方法。能够利用所学的基本学问和技能,解决简洁的面对对象程序设计问题,从而提高动手编程解决实际问题的才能。2. 课题题目1) 公司库存治理系统2) 高校学籍治理系统3) 高校工资治理系统4) 高校人事治理系统5) 通讯录程序设计6) 同学成果治理系统7图书治理系统 8)文本编辑器的设计与实现9)同学考勤治理系统 10)公司人员治理系统3. 设计要求:设计课题题目: 每位同学依据自己学号除以 9 所得的余数加一选择相应题号的课题。 换题者不记成果。(课题10 只做为参考课题)依据自己对应的课题完成以下主要工作:完成系统需求分析:包括系统设计目的与意义。系统功能需求(系统流程图)。输入输出的要求。 完成系统总体设计:包括系统功能分析。系统功能模块划分与设计(系统功能模块图)。完成系统详细设计:包括数据库需求分析。数据库概念结构设计( ER 图)。数据库规律结构设计。类层次图。界面设计与各功能模块实现。系统调试:调试显现的主要问题,编译语法错误及修改,重点是运行规律问题修改和调整。使用说明书及编程体会:说明如何使用你编写的程序,详细列出每一步的操作步骤。关键源程序(带注释)可编辑资料 - - - 欢迎下载精品名师归纳总结 按规定格式完成课程设计报告,将其打印稿A4 纸 上交给老师存档。 不得抄袭他人程序、课程设计报告,每个人应表达自己的个性设计。二 、 进 度 安 排第 18 周 星期一 8 :00 12: 00 星期二 8 :00 12:00 星期四 8 :00 12:00第 19 周 星期一 8 :00 12:00星期二 14 : 00 18:00星期三 8 :00 12:00三、参考书籍1. C程序设计课程设计刘振安编著 TP312C5632. C+ Builder和 Delphi 课程设计与系统开发案例伍俊良清华高校出版社 7- 302-06072-X3. Visual C+课程设计案例精编严华峰中国水利水电出版社7-5084-2007-120044. Visual C+课程设计与系统开发案例伍俊良清华高校出版社 7-302-05968-320025. Visual C+语言课程设计 :案例精选与编程指导陈清华 朱红东南高校出版社 7-81089-275-4 20036. VisualC+ 课程设计案例精编中国水利水电出版社 7-5084-1004-1 20027. 数据结构课程设计案例精编:用 C/C+描述 李建学 李光元 吴春芳清华高校出版社 7-302-14536-9 2007(编程平台不限, vc+, c+ Builder等等。) 课题 8:图书治理系统(一)、课程设计题目:图书治理系统(二)、目的与要求:1、目的:(1) 要求同学达到娴熟把握 C+语言的基本学问和技能。(2) 基本把握面对对象程序设计的基本思路和方法。可编辑资料 - - - 欢迎下载精品名师归纳总结(3) 能够利用所学的基本学问和技能,解决简洁的面对对象程序设计问题。2、基本要求:(1) 要求利用面对对象的方法以及C+的编程思想来完成系统的设计。(2) 要求在设计的过程中,建立清楚的类层次。(3) 在系统中至少要定义四个类,每个类中要有各自的属性和方法。(4) 在系统的设计中,至少要用到面对对象的一种机制。3、创新要求:在基本要求达到后,可进行创新设计,如依据查找结果进行修改的功能。4、写出设计说明书(三)、设计方法和基本原理:1、问题描述(功能要求):在图书治理系统中,要为每个借阅者建立一个账户,并给借阅者发放借阅卡(借阅卡可以供应借阅卡号、借阅者名),账户中储备借阅者的个人信息、借阅信息 以及预定信息。持有借阅卡的借阅者可以借阅书刊、返仍书刊、查询书刊信息、预定 书刊并取消预定,但这些操作都是通过图书治理员进行的,也即借阅者不直接与系统 交互,而是图书治理员充当借阅者的代理与系统交互。在借阅书刊时,需要输入所借 阅的书刊名,书刊的ISBN/ISSN 号,然后输入借阅者的图书卡号和借阅者名,完成后提交所填表格,系统验证借阅者是否有效(在系统中存在账户),如有效,借阅请求 被接受,系统查询数据库系统,看借阅者所借阅的书刊是否存在,如存在,就借阅者 可借出书刊,建立并在系统中储备借阅记录。借阅者仍书后,删除关于所仍书刊的借 阅记录。假如借阅者所借的书刊已被借出,借阅者仍可预定该书刊,一旦借阅者预定 的书刊可以获得,就将书刊直接寄给预定人(为了简化系统,预定书刊可获得时就不 通知借阅者了)。另外,为了简化系统,也不考虑书刊的最长借阅期限,假设借阅者 可以无限期的储存所借阅的书刊。2、问题的解决方案:依据系统功能要求,可以将问题解决分为以下步骤:(1) 应用系统分析,建立该系统的功能模块框图以及界面的组织和设计。(2) 分析系统中的各个实体及它们之间的关系包括属性和行为。(3) 依据问题描述,设计系统的类层次。(4) 完成类层次中各个类的描述(包括属性和方法)。(5) 完成类中各个成员函数的定义。(6) 完成系统的应用模块。可编辑资料 - - - 欢迎下载精品名师归纳总结(7) 功能调试。( 8) 完 成 系 统 总 结 报 告 以 及 系 统 使 用 说 明 书可编辑资料 - - - 欢迎下载精品名师归纳总结目 录1.系统需求分析 .81.1 系统设计的目的与意义.81.2 系统功能需求 . 8.2.总体设计 . .82.1 系统功能分析 . 8.2.2 系统功能模块划分与设计. . . 82.3 系统功能模块图 . .9 .3.详细设计 .9.3.1 读者类的设计 .9.3.2 读者库类的设计 103.3 图书类的设计 1. 03.4 图书库类的设计 . 114.系统调试 .115.结果分析 .1.3 6.总结 416.1 感想与体会 .1. 47.附录 .1.47.1 源程序清单 . . 14 .可编辑资料 - - - 欢迎下载精品名师归纳总结1. 系统需求分析1.1 系统设计的目的与意义:图书系统在生活中运用相当广泛,因此需要很多程序对他进行治理。1.2 系统功能需求:本系统有四个类, Book 类, BDatebase类、Reader类、RDatebase类,储备借阅者图书治理系统的个人信息、借阅信息以及预定信息。持有借阅卡的借阅者可以借阅书刊、返仍书刊、查询书刊信息、预定书刊并取消预定等功能。2. 总体设计2.1 系统功能分析:四个类程序实现功能系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。delbook 函数用于删除图书信息。addbook 函数用于增加图书信息。borrowbook 函数用于实现借书操作。可编辑资料 - - - 欢迎下载精品名师归纳总结returnbook 函数用于实现仍书操作等等。主函数用于掉用这些函数。2.2 系统功能模块划分与设计本系图统定义图了 Boo读k 类、BD读atebase类、Reader类、 文输 类这查四个类,删定义了退可编辑资料 - - - 欢迎下载精品名师归纳总结书书者者R件Datebase询除出可编辑资料 - - - 欢迎下载精品名师归纳总结addboo类k ad库dreader类 borrow库book 出setname 录信信程可编辑资料 - - - 欢迎下载精品名师归纳总结、类类等函入数来实显现系统所需功能。序可编辑资料 - - - 欢迎下载精品名师归纳总结2.3 系统功能模块图:3. 详细设计3.1 读者类的设计图 2.3示息息可编辑资料 - - - 欢迎下载精品名师归纳总结该类定义了借书操作,仍书操作,设置读者姓名等功能。Reader+name20:char+no:int+tag:int+borbook:int+getname:char+gettag:int+getno:int+setnamechar na:void可编辑资料 - - - 欢迎下载精品名师归纳总结+delbook:void+addreaderint n,char *na:void+borrowbookint bookid:void+ retbookint bookid:int+disp:void图 3.13.2 读者库类类的设计该类实现了建立读者的个人资料,删除读者信息,输出读者信息等功能。RDatebase+ top:int+ rname20:char+readerid:int+readerdata:void+choice:char+addreaderint n,char *na:int+clear:void+disp:void可编辑资料 - - - 欢迎下载精品名师归纳总结3.3 图书类的设计图 3.2可编辑资料 - - - 欢迎下载精品名师归纳总结图书类,可以实现对图书的描述,图书的编号,书名,借出,仍入等操作。Book+no:int+name20:char+onshelf:int+getname:char+getno:int+gettag:int+setnamechar na:void+delbook:void+addbook:void可编辑资料 - - - 欢迎下载精品名师归纳总结+borrowbook:int+retbook:void+disp:void可编辑资料 - - - 欢迎下载精品名师归纳总结3.4 图书库类的设计图 3.3可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载精品名师归纳总结图 3.44. 系统调试Xingzhengrenyuan+top:int+clear:void+addbookint n,char *na:int+bookdata:void+bookdata:void+ disp:void可编辑资料 - - - 欢迎下载精品名师归纳总结在调试过程中,显现了一些错误。1、输入数据时,输错了数据的类型会造成死循环,因此输入时需要留意。2、一开头主界面输入非正确数字时,没有提示错误。简洁造成用户误会图 4.1在主函数的 switch语句终止处加上 default:cout<<"输入错误,请从新输入: " 。就可以了,修改后:图 4.2详细调试过程。主界面图 4.3图书爱护图 4.4读者爱护图 4.15. 结果分析可编辑资料 - - - 欢迎下载精品名师归纳总结本程序总共设计了四个类,中意了课题对类的要求,在设计的过程中,建立了较为清楚的类层次,也利用了面对对象的方法以及C+的编程思想来完成系统的设计, 做到了每个借阅者建立一个账户,账户中储备借阅者的个人信息、借阅信息等要求。而且界面美观,简洁操作。但是程序太长,不够简练,导致显现错误很难发觉和修改。6. 总结6.1 感想和体会:通过这次的课程设计,让我充分的感觉到了要自己设计一个程序是多么的难,以及学习好 c+是多么的重要。在这个程序的设计过程中,我清楚的意识到自己的水平有多么的薄弱,课程的知识学得有多么的不扎实。看网上的例子好像觉得也没那么难,自己一上机实际操作就显现了很多问题,调试的时候系统总是在报错,仍有很多警告,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但我意识到了自己有太多的不足。以后仍会有很多的课程设计,确定要吸取这次的教训,把学问学懂学透学精,真正的为我所用,这样走上社会我才能真正的发挥所长。7、附录7.1 源程序清单:#include <iostream> #include <iomanip> #include <string> #include <fstream> using namespace std。const int Maxr=100 。const int Maxb=100 。const int Maxbor=5 。class Readerprivate: int tag。int no 。可编辑资料 - - - 欢迎下载精品名师归纳总结char name10 。int borbookMaxbor。public:Reader char *getname return name 。 int gettag return tag 。int getno return no 。 void setnamechar nastrcpyname,na。void delbook tag=1 。 void addreaderint n,char *natag=0。no=n。strcpyname,na。forint i=0 。i<Maxbor 。i+ borbooki=0 。void borrowbookint bookidforint i=0 。i<Maxbor 。i+if borbooki=0borbooki=bookid 。return。int retbookint bookid可编辑资料 - - - 欢迎下载精品名师归纳总结forint i=0 。i<Maxbor 。i+ifborbooki=bookidborbooki=0 。return 1。return 0。void dispcout << setw5 << no <<setw10 << name<<"借书编号: " 。forint i=0 。i<Maxbor 。i+ifborbooki.=0cout << borbooki << "|"。cout << ""<<endl 。 。class RDatabaseprivate:int top 。Reader readMaxr 。public:RDatabaseReader s。top=-1 。fstream file"reader.txt",ios:in。while 1可编辑资料 - - - 欢迎下载精品名师归纳总结file.readchar *&s,sizeofs。if .filebreak 。top+ 。readtop=s 。file.close 。void cleartop=-1 。int addreaderint n,char *naReader *p=queryn 。if p=NULLtop+ 。readtop.addreadern,na 。return 1。return 0。Reader *queryint readeridfor int i=0 。i<=top 。 i+if readi.getno=readerid && readi.gettag=0return &readi 。return NULL 。可编辑资料 - - - 欢迎下载精品名师归纳总结void dispfor int i=0 。i<=top 。 i+ readi.disp 。void readerdata 。RDatabasefstream file"reader.txt",ios:out 。for int i=0 。i<=top 。 i+ if readi.gettag=0file.writechar *&readi,sizeofreadi。file.close 。 。void RDatabase:readerdatachar choice。char rname20 。int readerid 。Reader *r 。while choice.='0'cout <<"nnttt读 者 维 护nnntt 1 新 增nntt 2 更 改nntt 3 删 除nntt 4 查 找nntt 5 显 示nntt 6 全 删nntt 0 退 出"<<endl 。cin >> choice 。switch choicecase '1':cout << " 输入读者编号 :"。cin >> readerid 。可编辑资料 - - - 欢迎下载精品名师归纳总结cout << " 输入读者姓名 :"。cin >> rname 。addreader readerid,rname。break。case '2':cout << " 输入读者编号 :"。cin >> readerid 。r=queryreaderid 。if r=NULLcout << " 该读者不存在 "<<endl 。break。cout << " 输入新的姓名 :"。cin >> rname 。r->setnamername。break。case '3':cout << " 输入读者编号 :"。cin >> readerid 。r=queryreaderid 。if r=NULLcout <<" 该读者不存在 " << endl 。break。r->delbook 。break。case '4':cout << " 读入读者编号 :"。cin >> readerid 。r=queryreaderid 。可编辑资料 - - - 欢迎下载精品名师归纳总结if r=NULLcout <<" 该读者不存在 "<< endl 。break。r->disp 。break。case '5':disp 。break。case '6':clear。break。default:cout<<" 输入错误,请从新输入:"。 break。class Bookprivate:int tag。int no 。char name20 。int onshelf 。public:Bookchar *getname return name 。 int getno return no 。 int gettag return tag 。 void setnamechar nastrcpyname,na。可编辑资料 - - - 欢迎下载精品名师归纳总结void delbook tag=1 。 void addbookint n,char *natag=0。no=n。strcpyname,na。onshelf=1 。int borrowbookif onshelf=1onshelf=0 。return 1。return 0。void retbookonshelf=1 。void dispcout << setw6 << no << setw18 << name << setw10<<onshelf=1. " 在架 ":" 已借 " <<endl 。 。class BDatabaseprivate: int top 。可编辑资料 - - - 欢迎下载精品名师归纳总结Book bookMaxb 。public:BDatabaseBook b 。top=-1 。fstream file"book.txt",ios:in。while 1file.readchar *&b,sizeofb。if .file break 。top+ 。booktop=b 。file.close 。void cleartop=-1 。int addbookint n,char *naBook *p=queryn 。if NULL=ptop+ 。booktop.addbookn,na 。return 1。return 0。Book *queryint bookid可编辑资料 - - - 欢迎下载精品名师归纳总结for int i=0 。i<=top 。 i+if booki.getno=bookid &&booki.gettag=0return &booki 。return NULL 。void bookdata 。void dispfor int i=0 。i<=top 。 i+ if booki.gettag=0booki.disp 。BDatabasefstream file"book.txt",ios:out。for int i=0 。i<=top 。 i+ if booki.gettag=0file.writechar *&booki,sizeofbooki。file.close 。 。void BDatabase:bookdatachar choice。char bname40 。int bookid 。 Book *b 。while choice.='0'可编辑资料 - - - 欢迎下载精品名师归纳总结cout <<"nnnttt图 书 维 护 "<<endl<<endl 。cout<<"tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出"<<endl 。cin >> choice 。switch choicecase '1':cout << " 输入图书编号 :"<<endl 。cin >> bookid 。cout << " 输入图书书名 :"<<endl 。cin >> bname 。addbookbookid,bname 。break。case '2':cout << " 输入图书编号 :"<<endl 。cin >> bookid 。b=querybookid 。if b=NULLcout << " 该图书不存在 "<<endl 。break。cout << " 输入新的书名 :"<<endl 。cin >> bname 。b->setnamebname。break。case '3':cout <<" 读入图书编号 :"<<endl 。cin >> bookid 。b=querybookid 。if b=NULLcout <<" 该图书不存在 " << endl 。可编辑资料 - - - 欢迎下载精品名师归纳总结break。b->delbook 。break。case '4':cout << " 读入图书编号 :"<<endl 。cin >> bookid 。b=querybookid 。if b=NULLcout <<" 该图书不存在 "<< endl 。break。b->disp 。break。case '5':disp 。break。case '6':clear。break。default:cout<<" 输入错误,请从新输入:" 。void mainchar choice。int bookid,readerid 。RDatabase ReaderDB。Reader *r 。BDatabase BookDB 。可编辑资料 - - - 欢迎下载精品名师归纳总结Book *b 。whilechoice.='0'cout <<endl<<endl<<"ttt图 书 管 理 系 统nnn" 。cout <<"ttt1借 书nnttt2 仍 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开"<<endl 。cin >> choice 。switch choicecase '1':cout <<" 借书 读者编号 :"。cin >>readerid 。cout <<" 图书编号: "。cin >>bookid 。r=ReaderDB.queryreaderid 。if NULL=rcout <<" 不存在该读者,不能借书"<< endl 。break。b=BookDB.querybookid。if b=NULLcout <<" 不存在该图书,不能借书"<< endl 。break。if b->borrowbook=0cout << " 该图书已借出,不能借书"<< endl 。break。r->borrowbookb->getno 。break。可编辑资料 - - - 欢迎下载精品名师归纳总结case '2':cout<<" 仍书 n 读者编号 :" 。cin >>readerid 。cout << " 图书编号 :" 。cin >>bookid 。r=ReaderDB.queryreaderid 。if r=NULLcout <<" 不存在该读者,不能仍书" << endl 。break。b=BookDB.querybookid。if b=NULLcout <<" 不存在该图书,不能仍书" <<endl 。break。b->retbook 。r->retbookb->getno 。break。case '3':BookDB.bookdata 。break。case '4':ReaderDB.readerdata。break。default:cout<<" 输入错误,请从新输入:"。可编辑资料 - - - 欢迎下载精品名师归纳总结可编辑资料 - - - 欢迎下载