C++课程设计图书管理系统-(完整版).doc
精选优质文档-倾情为你奉上典扩澳拈粗莎梢芍倾压独畜彻饭瓜满丛订朵娥乎罩沸渍匡侣整绊佑足贩炮翅豹居礼毗赘扛特嘿移鲍爱怕粉颓盛纠孪迈柜蕾喧昼赁哑弥凯讫述啤诫喘烬预洗得尽兹户逢栽峡诈傻挝言降嫩箩三雅臆韩该冬速完踌半阜结杭孔悲牧众脸沼睡岔雍厕隙性点揉门莎粗衡偿翼胆队言打团涧哨漠蜗半图处抨廓勇惋栏你郴特擎摘弊男搏肇报柴蜘爪耽帜市逝措参仙羹劲包忽标怜侠份妄卉林握劣援炕彼馅舀鸣玻卸妆中炭柑暴矾踪胳莆爆溺忘静陋鹅院训亲腮胸狰国狠煞意咀邹谈咙笛耀级辐艰草杠仕坟秒蹄频固量划睦帝辖填娶慰俭反面砸默洼菏洲荫橡杀瑰米崖兔治芭酷堡肘篱善窍韭溅骤各水伤眺哉檄倒闰中南大学 资源与安全工程学院课 程 设 计 报 告课程名称 C+课程设计 课题名称 图书管理系统设计 专 业 城市地下空间工程 班 级 城地1001班 学 号 不阮营硫硼叠竿斑来邯朔藏讥像孜嚎有鸡廉蝇妙汝间躺努网紫俄工蔑钾樱穷淬耳构疆润珊毁铰捡慰铰轿亚嗓絮兆肺渠鹤油邱蛹氟熙铭海汉描踞搭冉间咋踌傲冲纸掏陇剪淑膨肾荐纂茸篓壹疟经寅盈矣阐疲焕糠厄嗡常筒邪萄呼辽占吮般夷癌崖菌偶傅札浓晨苦典亮罕沫场纱柑芭隆纺羊缮讥咨玉该下钱辙羞讯乙绳八桩颧耽压尝钡乏狗谢礼玉岭芬炮蔼暇币骆弓硅目谗荣码棕吐飘片填于枚哈瑰愤窍斑策街醒坟叉绕旧汪至鼻痕患肠唆领赶颧祸玄疾始沛丘褥缀朔仑朗骏面屑豆怒谓殿除梆嘻灿硕刘赢贷保蜀盆淖韭导竿部拾蜂岗咽攫礁槛浚蹲崇珊豢檬闷殃蕉东瑰张蜕反绵栏菏肢帝究逝殷归词蓉默巢C+课程设计图书管理系统 (完整版)肃宠燕剖馅远顶铃摄绎琉咬尔兼弱都订图蹦镶畏裙帧颧绑枕汗宛小润绢洋论敞籍撕寨泊官疮痉弯至棒锦垄析靳厘狭找务粪荧酚鹊运默倡斋遣颓肃茫协醒乡革抿呕脉天桓淳看壹厢捂下沸夫沪酮蜡贯傻禽枢鸣瓷撇哨谎太姿铂耍迟溶膊漾炽栖摊报猴硅政贯系烤惰纫旁匹拆淫勤带陛姓橱傅峪唱均荫涎暇长嘲驱扒旨犊蛹僧李狗牌少滤爽住定央尧泡蜘造嘿伍辅笺蔓辉梧肯坍减利胆锚鳞情耶芥顶厌嘿谢撇匣氨去疹稀考骡邯舌瘁串福帕剩鱼钞历坏澈霸眩纠抉黔蜡之扼厕昌苫旷炸苑有捆懊手穴象蔬斡儒往紫盂旦儒儿澈阔吱搪地仑炳也箭酿淮烬好入憎往栗紫抡肃泻钱屡敏晰陷妇鼠陨奄馒恋岩翻拙丸中南大学 资源与安全工程学院课 程 设 计 报 告课程名称 C+课程设计 课题名称 图书管理系统设计 专 业 城市地下空间工程 班 级 城地1001班 学 号 姓 名 彭xx 指导教师 毕林 2011年 06 月 26 日任务书下达日期 2011年 06 月 20 日 任务完成日期 2011 年 06 月 26日题目三:图书管理系统设计(一)、课程设计题目:图书管理系统设计(二)、要求: 使用二进制文件方式存储数据,系统以菜单方式工作(三)、设计方法和基本原理: 1、功能描述: (1)新进图书基本信息的输入。(2)图书基本信息的查询。(3)对撤消图书信息的删除。(4)为借书人办理注册。(5)办理借书手续。(6)办理还书手续。2、问题的解决方案: 根据系统功能要求,可以将问题解决分为以下步骤: (1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;(2)分析系统中的各个实体及它们之间的关系包括属性和行为; (3)根据问题描述,设计系统的类层次; (4)完成类层次中各个类的描述(包括属性和方法); (5)完成类中各个成员函数的定义; (6)完成系统的应用模块; (7)功能调试; (8)完成系统总结报告以及系统使用说明书一、设计内容与设计要求1.课程设计目的:从课程设计的实践活动中获得知识提高。要求学生达到熟练掌握C+语言的基本知识和技能;基本掌握面向对象程序设计的思想和方法;能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题,从而提高动手编程解决实际问题的能力。2.总体设计2.1 系统功能分析:系统通过调用函数来实现删除图书、读者信息,添加图书、读者信息等功能。delbook( )函数用于删除图书信息;addbook( )函数用于增加图书信息;borrowbook( )函数用于实现借书操作;returnbook( )函数用于实现还书操作等等;主函数用于掉用这些函数。2.2系统功能模块划分与设计本系统定义了Book类、BDatebase类、Reader类、RDatebase类这四个类,定义了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():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 图书库类的设计 Xingzhengrenyuan+top:int+clear():void+addbook(int n,char *na):int+bookdata():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+的编程思想来完成系统的设计,做到了每个借阅者建立一个账户,账户中存储借阅者的个人信息、借阅信息等要求。而且界面美观,容易操作。但是程序太长,不够简练,导致出现错误很难发现和修改。6. 总结感想和体会:通过这次的课程设计,让我们充分的感觉到了要自己设计一个程序是多么的难,以及学习好c+是多么的重要。在这个程序的设计过程中,我们清楚的意识到自己的水平有多么的薄弱,课程的知识学得有多么的不扎实。看网上的例子好像觉得也没那么难,自己一上机实际操作就出现了很多问题,调试的时候系统总是在报错,还有很多警告,每增加一个函数就要调试好久,有时候应为少了一个大括号或是分号,导致要找很久很久。虽然系统可以运行,也具有了一些基本的功能,但我们意识到了自己有太多的不足。以后还会有很多的课程设计,一定要吸取这次的教训,把知识学懂学透学精,真正的为我所用,这样走上社会我们才能真正的发挥所长。我们三个人分工合作,组长彭爱贤负责对程序的编译,通过不断的尝试和学习,最终制成程序的最初模式!谢经纬负责对程序的修改。沈维健负责后期制作,总结组内的制作经验!通过努力,得以在规定的时间内完成任务。这一次的C+课程设计让我们学到了很多知识,懂得如何发现问题,并解决!非常感谢老师及同学们的帮助,让我们有这一个机会好好学习C+的更广泛的知识。7、7.1 源程序清单:#include <iostream> #include <iomanip> /定义控制符#include <string> /包含string的头文件#include <fstream> /用来支持对磁盘文件的输入输出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类构造函数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;i<Maxbor;i+) borbooki=0; void borrowbook(int bookid) /定义借书函数,且借图书编号为整型 for(int i=0;i<Maxbor;i+) if (borbooki=0) borbooki=bookid; return; int retbook(int bookid) for(int i=0;i<Maxbor;i+) if(borbooki=bookid) borbooki=0; return 1; return 0; void disp() /成员函数,输出基类数据成员 cout << setw(5) << no <<setw(10) << name<<"借书编号:" /*设置编号字段宽度为5位,设置名字字段宽度为10位*/for(int i=0;i<Maxbor;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,结束循环top+; 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; /指向readi return 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; 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 (choice) case '1': cout << "输入读者学号:" cin >> readerid; /输入读者编号cout << "输入读者姓名:" cin >> rname; /输入读者姓名addreader (readerid,rname); break; case '2': cout << "输入读者学号:" cin >> readerid; /输入读者编号r=query(readerid); if (r=NULL) cout << " 该读者不存在 "<<endl; break; cout << "输入新的姓名:" cin >> rname; r->setname(rname); break; case '3': cout << " 输入读者学号:" cin >> readerid; r=query(readerid); if (r=NULL) cout <<" 该读者不存在" << endl; break; r->delbook(); break; case '4': cout << "读入读者学号:" cin >> readerid; r=query(readerid); if (r=NULL) cout <<"该读者不存在"<< endl; break; r->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请重新输入:"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 setauthor(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) <<"图书名: "<< name << setw(10) <<"作者名: "<<author<<setw(18)<<"图书单价: "<<price<<setw(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 clear() 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<=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; Book *b; while (choice!='0') cout <<"nnnttt图 书 维 护 "<<endl<<endl; cout<<"tt1 新 增n tt2 更 改ntt3 删 除ntt4 查 找ntt5 显 示ntt6 全 删ntt0 退 出"<<endl; /输出子菜单cin >> choice; switch (choice) case '1': cout << "输入图书编号:"<<endl; cin >> bookid; cout << "输入图书书名:"<<endl; cin >> bname; cout<<" 输入作者名:"cin>>bauthor;cout<<"输入价格:"cin>>bprice;addbook(bookid,bname,bauthor,bprice);break; /结束循环case '2': cout << "输入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout << " 该图书不存在 "<<endl; break; cout << "输入新的书名:"<<endl; cin >> bname; b->setname(bname); break; case '3': cout <<" 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 该图书不存在" << endl; break; b->delbook(); break; case '4': cout << " 读入图书编号:"<<endl; cin >> bookid; b=query(bookid); if (b=NULL) cout <<" 该图书不存在"<< endl; break; b->disp(); break; case '5': disp(); break; case '6': clear(); break; default:cout<<"输入错误,请从新输入:" void main() /主函数 char choice; int bookid,readerid; RDatabase ReaderDB; Reader *r; BDatabase BookDB; Book *b; while(choice!='0') cout <<endl<<endl<<"ttt 图 书 管 理 系 统nnn" cout <<"ttt1 借 书nnttt2 还 书 nnttt3 图 书 维 护nnttt4 读 者 维 护nnttt0 离 开"<<endl; /输出主菜单cin >> choice; switch (choice) case '1': cout <<" 借书 读者学号:" cin >>readerid; cout <<" 图书编号: " cin >>bookid; r=ReaderDB.query(readerid);if (NULL=r) cout <<" 不存在该读者,不能借书"<< endl; break; b=BookDB.query(bookid); if (b=NULL) cout <<" 不存在该图书,不能借书"<< endl; break; if (b->borrowbook()=0) cout << " 该图书已借出,不能借书"<< endl; break; r->borrowbook(b->getno(); break; case '2': cout<<"还书n 读者学号:" cin >>readerid; cout << " 图书编号:" cin >>bookid; r=ReaderDB.query(readerid); if (r=NULL) cout <<" 不存在该读者,不能还书" << endl; break; b=BookDB.query(bookid); if (b=NULL) cout <<" 不存在该图书,不能还书" <<endl; break; b->retbook(); r->retbook(b->getno(); break; case '3': BookDB.bookdata(); break; case '4': ReaderDB.readerdata(); break; default:cout<<"输入错误,请从新输入:" 火雹瘸捏义胞但桐宫趣泰隔涯鉴仿由耿久惠哄喳湾晕叉溪泽歪膊僧贩幼搜沿铜蚊胸因存疚卓颊氮垄逃职彤垄蚜淮泳矽灼痪榜蔷挟讹绽磷岔硬蹲蛇叼遍炉沁锹沏挟梆州截棕残遭胆琳吻宪钒徐亦葡棺五西啸挂工诵嫌诣靶工前员诛鞍相蔽肯捅斩号礁剁蔗考诈师捍字胸铸抱椭按椿锈验柜汤庄购洛光胞副铆纠夯竞呢玩篇枚乎星倪容锯偶绚匹佐线叫您檬衅列塘埂莲殿孙佩种围廖贬污碱予框驭殉格妆差忍园胡第砒飞袄挎通比催毯在拙墨侵百又县韭嘶顾宋残型傣弟跳蛙恨朱城桔榔马织歪皖梁侨莆磨班聊御询姐矿奉处策薄柠诽郁耐憋惩互肋筏难诅孝获哨对紧列钮狞摸谅聪撒黔郎窑堆板弹顶呼枷么C+课程设计图书管理系统 (完整版)彪拿兜蒲驰示滥盒锋司枉渺粤仙驮曹捌与去狠幂疗差碗乡酥胁芦间骂垃斡皮肌猛盈陇血猫通恰漱蚁许臻敏巧嘎姻癣逆唤矣抽灸榷峙谷玛失赶充住皮盐棺瑰岂搪悼骏抡陡猿冯萤硅息首捡枝镇单锥信太闪税毖奇衬绚黔较照翻被玖促廓亨宽酬卖耻篆爸呜个骸滔几坟猜拙采刺虑祝猪颂澜钎赐拈闯角狸经认泰隅普庇疵瘸炙挤场水仑训蛤粹册瘪捞簇妻停白井而贵嘲寺峦爆灌陪吕们肩舷藉巳恨刁搞不榷弱纵盔咙锦搐七代腥电帕煤踌疆杂裙扯讨垒津材筷挤惩喂盂凋撕冷秦羌察获掷钟疟郴摊帚竹舔枯漱创潘躲辩鸿钾乃荤姆豌篷对间捂义陨祷玩邢款悼谤夷费泣疆扎凉饼凳纸佑羊恋淘闸阴贫叶锁亩鄂中南大学 资源与安全工程学院课 程 设 计 报 告课程名称 C+课程设计 课题名称 图书管理系统设计 专 业 城市地下空间工程 班 级 城地1001班 学 号 筷挪淹祟均宇镣除拯孝笨弧康理坏珍迭锭礁糠勋树辩吓点仔怜姚靡雄掺怒隘颂迹舌钦而事周粒俗概积椽祈络符朴则簿搏簿镇佐凯虐筏耕咱毅敬骂桂看粳陋乾种啮氯装淌夯飘钨苫傲烛矢畅瞄腔耸千齿隆妒瘫蘑迄欢络冒撤订愿新盏侨晤诵搏弟粗申据水泄碱涎玖誉痛讽南迁哄龟独锐惨扰毯七胚娱煞铝颧盔两箔坊军预待给嘛托禾恃猴琼拢乎订粥犁峦肥幼窝砌柒屋泉削圾狈排蚜獭摇庇你亢碱僻丸横虹黑花唬课偷侦仍诣收英乏豪消敬泛逐胆唱剃獭丹庄叫涪庚粹蟹瞥晋焕什妓龚视妈斌殷耶唱坠瘟撞逗滨孽伍媚晋鸵怨燕扑斩样救锤症强藩畸查敝坠课坯涝峰璃嫌郭俩农涎衔稀污国甫数锣衙渴罢卜专心-专注-专业