中国农业大学C++课程设计报告(2010~2011学年春季学期)题目:音像出租店管理系统学生姓名:学号:专业班级:指导教师:康丽设计时间:2011-06-30目录系统设计目标及意义、功能介绍-------------------------3系统的详细设计思路-----------------------------------3系统流程图、类关系UML图、主要运行界面图、运行结果图-3系统设计、开发过程中遇到的问题----------------------11课程设计心得体会------------------------------------11源程序----------------------------------------------11一、系统设计目标及意义、功能介绍本题目要实现一个音像出租店管理系统,音像出租店一般要管理大量音像资料,传统的手工记录方式在查询和统计时烦琐、单调、工作量大;本系统可以提高音像出租店的管理工作效率。功能:(1)租借音像光盘。(2)归还音像光盘。(3)音像光盘管理、维护:引进新光盘、删除光盘、按编号查询光盘的详细信息、修改光盘信息、输出被租借光盘信息、输出所有光盘列表等。(4)顾客管理、维护:新增顾客、更改顾客信息、按编号检索顾客信息、查询顾客租借光盘数量、删除顾客信息、输出顾客列表等。(5)系统界面采用菜单形式。二、系统的详细设计思路1、音像光盘类类属性包括光盘的编号、名称、是否借出、发行公司等,实现对光盘的信息描述。类成员函数包括提取光盘名称、提取光盘编号、设置光盘名称、增加新光盘、删除光盘、修改光盘信息、租借光盘、归还光盘、显示光盘信息等。2、音像光盘库类采用链表和文件保存所有光盘信息,以实现对光盘的入库、租借、修改、查找、删除等操作。类属性包括指向光盘类对象的指针、光盘类对象数组。类成员函数包括构造函数(从文件中读出所有光盘信息)、析构函数(把所有光盘信息写入文件)、光盘库中引进新光盘、删除指定光盘、删除全部光盘、按编号查询光盘的详细信息、输出所有光盘列表。3、顾客类类属性包括顾客的编号、姓名、所借光盘编号、手机号、租借日期、归还日期、租费、过期罚款(过期1天,罚款1角)等,实现对顾客的信息描述。类成员函数包括提取顾客姓名、提取顾客编号、设置顾客姓名、添加新顾客、删除顾客信息、修改顾客信息、顾客租借光盘、顾客归还光盘、显示顾客信息等。4、顾客库类采用链表和文件保存所有顾客信息,以实现对顾客的增加、检索、删除、输出等操作。类属性包括指向顾客类对象的指针、顾客类对象数组。类成员函数包括构造函数(从文件中读出所有顾客信息)、析构函数(把顾客信息写入文件)、顾客库中增加新顾客、按编号检索顾客信息、删除指定顾客、输出所有顾客清单等。三、系统流程图、类关系UML图、主要运行界面图、运行结果图主函数流程图:其它函数流程图:从文件中加载顾客信息RDatabase::RDatabaseYN开始创建管理对象显示操作菜单根据输入执行不同操作租借归还光盘维护顾客维护离开开始打开顾客数据文件文件读取失败或文件结束插入顾客记录指针关闭文件结束将顾客信息写入文件RDatabase::~RDatabase()NY从文件中加载光盘信息BDatabase::BDatabaseYN开始打开一个输出文件是否有此顾客?顾客记录加1写入顾客信息关闭文件结束开始打开CD数据文件文件读取失败或文件结束插入CD记录指针关闭文件结束将CD信息写入文件BDatabase::~BDatabase()NYUML图Customer-tag:int-no:int-day1:int-day2:int-x:int-fee:int-money:int-name[10]:char-number[11]:char-btime[20]:char-rtime[20]:char-borcd[Maxbor]:int开始打开一个输出文件是否有此CD?CD记录加1写入CD信息关闭文件结束+Customer()+*getname():char+*getbtime():char+*getrtime():char+getx():int+gettag():int+getday1():int+getday2():int+*getnumber():char+getfee():int+getmoney():int+getno():int+setname(na[]:char):void+setbtime(bt[]:char):void+setrtime(rt[]:char):void+setnumber(num[]:char):void+delcd():void+addcustomer(n:int,*na:char,*num:char,*bt:char,*rt:char,x:int,day1:int,day2:int):void+borrowcd(cdid:int):void+retcd(cdid:int):int+disp():voidRDatabase-top:int-Customerread[Maxr]+RDatabase()+clear():void+addcustomer(n:int,*na:char,*num:char,*bt:char,*rt:char,x:int,day1:int,day2:int):int+Customer*query(customerid:int)+disp():void+~RDatabase()+customerdata():void+RDatabase::customerdata():voidCD-tag:int-no:int-name[20]:char-company[50]:char-onshelf:int+CD()+*getname():char+*getcompany():char+getno():int+gettag():int+setname(na[]:char):void+setcompany(com[]:char)void+delcd():void+addcd(n:int,*na:char,*com:char):void+borrowcd():int+retcd():void+disp():voidBDatabase-top:int-CDcd[Maxb]+BDatabase()+clear():void+addcd(n:int,*na:char,*com:char):int+CD*query(cdid:int)+~BDatabase()+cddata():void+disp():void+BDatabase::cddata():void主要运行界面图:运行结果图:四、系统设计、开发过程中遇到的问题由于接触C++只有一个学期,学的并不扎实,设计过程中有对教材案例某些语句不理解、基础知识不能熟练应用等问题。1、顾客类中的租费问题:由于前面定义时依据课本案例将租借日期和归还日期设为字符型数组,计算租费时没办法加减,只能再设置一个变量由外界输入,再进行计算。2、对链表的应用问题:对链表不熟悉,经过对课本、实验教程等资源的临时研究勉强编好使用。五、课程设计心得体会通过这次课程设计,清楚的认识到自己的不足之处,也意识到C++是需要付出很大努力才能学好的。C++课程设计是教学实践环节的一个重要阶段,是将课程内容与实际问题相联接的关键步骤。通过课程设计,可以深入领会教材的抽象内容,巩固已学习的C++语法知识,拓宽知识面,能够提高独立分析问题、解决问题的能力,提高综合编程水平。在课程设计的过程中,除了对教材的学习以外,还与同学进行了讨论,并上网搜了很多资料,经过许多次补充修改终于完成,对C++有了系统而全新的认识。六、源程序:#includeiostream#includeiomanip#includestring#includefstream//输入/输出文件流类#definePRICE1usingnamespacestd;constintMaxc=100;//顾客最大数量constintMaxg=100;//光盘最大数量constintMaxbor=5;//每人最多租五个classCustomer//顾客类{private:inttag;//删除标记:1已删,0未删intno;//编号intday1;//租借天数intday2;//过期天数intx;//租借光盘数intfee;//租借费用floatmoney;//过期罚款charname[10];//姓名charnumber[11];//手机号charbtime[20];//租借时间charrtime[20];//归还时间intborcd[Maxbor];//最大租借量public:Customer(){}char*getname(){returnname;}char*getbtime(){returnbtime;}char*getrtime(){returnrtime;}intgetx(){returnx;}intgettag(){returntag;}intgetday1(){returnday1;}intgetday2(){returnday2;}char*getnumber(){returnnumber;}intgetfee(){returnPRICE*x*day1;}floatgetmoney(){return0.1*x*day2;}intgetno(){returnno;}//获取顾客信息:姓名、租借日期、归还日期、手机号等voidsetname(charna[]){strcpy(name,na);}voidsetbtime(charbt[]){strcpy(btime,bt);}voidsetrtime(charrt[]){strcpy(rtime,rt);}voidsetnumber(charnum[]){strcpy(number,num);}voiddelcd(){tag=1;}voidaddcustomer(intn,char*na,char*num,char*bt,char*rt,intx,intday1,intday2)//增加顾客信息{tag=0;no=n;fee=PRICE*x*day1;money=0.1*x*day2;strcpy(name,na);strcpy(number,num);strcpy(btime,bt);strcpy(rtime,rt);for(inti=0;iMaxbor;i++)borcd[i]=0;}voidborrowcd(intcdid)//租借操作{for(inti=0;iMaxbor;i++){if(borcd[i]==0){borcd[i]=cdid;return;}}}intretcd(intcdid)//归还操作{for(inti=0;iMaxbor;i++){if(borcd[i]==cdid){borcd[i]=0;return1;}}return0;}voiddisp()//输出顾客信息{cout顾客编号:noendl;cout姓名:nameendl;cout手机号:numberendl;cout租借日期:btimeendl;cout归还日期:rtimeendl;cout租费:feeendl;cout过期罚款:moneyendl;}};classRDatabase//顾客库类{private:inttop;//顾客记录指针Customerread[Maxc];//顾客记录public:RDatabase()//构造函数,将customer.txt读到customer[]中{Customers;top=-1;fstreamfile(customer.txt,ios::in);//打开一个输入文件while(1){file.read((char*)&s,sizeof(s));if(!fi