1、成绩课程设计汇报 题 目 影碟出租管理系统 课 程 名 称 面向对象程序设计课程设计 院 部 名 称 计算机工程学院 专 业 计算机科学和技术 班 级 学 生 姓 名 学 号 课程设计地点 A101 课程设计课时 20课时 指 导 教 师 李尤丰 金陵科技学院教务处制1需求分析1.1设计要求1. 影碟信息:碟片名称、国家、类型、导演、主演影星、库存量等 2. 出租信息:用户账号、碟片名称、借阅日期、归还日期、租金等3用户信息:账号、姓名、资金余额、所租影碟列表4影碟维护:添加、删除、修改5用户维护:添加、删除、修改6碟片查询:按片名查询某片是否可借阅,结果有三种(可借阅、已借出、无此片)。7碟
2、片借阅:输入用户账号、碟片名称、借阅日期,修改资金余额(每片押金20元,以预防不归还)8碟片归还:输入用户账号、碟片名称、归还日期,修改碟资金余额,先返该片还押金,计算每片租金(每三天租金为1元,不满三天按三天计算)。因为每个用户一次可借阅多片,所以也可能一次归还多片。在该操作结束前,应输出该会员此次归还所需支付总租金。9统计:某类型影碟清单1.2需达成功效1. 影碟信息维护:在该功效中能够实现对影碟信息增加、删除、更新。2. 会员信息维护:在该功效中能够实现对会员信息增加、删除、修改,同时另外新增一会员费充值功效。3. 信息查询系统:碟片信息查询:当用户查询某碟片时,能够被通知该碟片库存及租
3、借信息、是否可借。会员信息查询:查询某会员信息,关键用来查看会员余额。查看全部碟片信息:查看库存中全部碟片情况。查看全部会员信息:查看已注册全部会员信息情况。4. 碟片租赁系统:实现会员碟片租赁功效。5. 碟片归还系统:实现会员归还碟片功效。6. 类型统计:统计某类型碟片清单。7. 存放功效:实现对程序内数据存放功效。2概要设计2.1功效图该影碟出租管理系统共有七大功效,分别为信息存放、影碟租借、影碟归还、影碟维护、会员维护、信息查询、类型统计。信息存放功效关键就是在系统中,只要包含到系统内数据改变,就会自动把新数据保留到文件中,而且在下次打开程序时自动把文件上数据读入系统内存中。影碟租借和归
4、还是该程序关键功效,影碟和会员维护系统关键实现对影碟和会员增删改。信息查询功效关键实现对指定信息查找。统计功效关键实现对影碟类型统计。打开程序读取文件信息主菜单类型统计信息查询会员维护影碟维护碟片归还碟片借阅全部会员信息全部碟片信息会员信息会员费充值会员删除会员注册会员更新碟片信息更新影碟删除影碟增加影碟信息存放到文件中主菜单否是否退出?是退出程序2.2类 1.CD类:该类拥有私有数据组员CDID(碟片编号)、CDname(碟片名称)、mainstar(主演明星)、country(国家)、style(碟片类型)、director(导演)、company(制作企业)、lend(借出数量)、inv
5、entory(库存量)。组员函数包含有参结构函数、重载流插入提取运算符、拷贝复制结构函数和获取私有组员函数和更改私有组员函数,具体类信息以下:class CDprivate:string CDID; /碟片编号string CDname; /碟片名称string mainstar; /主演明星string country; /国家string style; /碟片类型string director; /导演string company; /制作企业int lend; /借出数量int inventory; /库存量public:CD(string ci=无,string cna=无,strin
6、g mst=无,string cot=无,string sty=无,string dir=无,string com=无,int le=0,int inv=0);friend istream& operator(istream &is,CD &die); /重载输入运算符friend ostream& operator(ostream &os,CD &die); /重载输出运算符friend ofstream &operator(istream& is,member &me);/重载插入运算符friend ostream& operator(ostream& os,member &me);/重载
7、提取运算符friend ofstream& operator(ofstream& ofs,member &me);/重载文件插入运算符private:string memberID; /会员号string membername; /会员名字string sex; /会员性别float money; /会费剩下public:member(string mid=无,string mna=无,string se=无,float mon=0.0);/带参默认结构函数member(const member &m); /拷贝结构函数string getmemberID()return memberID;获
8、取私有组员string getmembername()return membername;string getsex()return sex;float getmoney()return money;void setmemberID(string mid)memberID=mid;更改私有组员void setmembername(string mna)membername=mna;void setsex(string se)sex=se;void setmoney(float mon)money=mon;3.caozuo类:该类私有组员分别为:member hy100(能存100个会员信息)、
9、CD zu_dip10010(每个会员租借碟片信息,且要求每人最多只能租借10种影碟)、CD dip100(定义能存100种碟片信息)、int category(用来做影碟下标)、int kind(用来做会员下标)、int lendnumber100(统计每个会员租借碟片种类)、string time1001020(用来统计每个会员租借每一个碟片对应租借时间信息)。组员函数关键有有参结构函数和多种功效函数,具体信息以下所表示:class caozuoprivate:member hy100; /定义能存100个会员信息CD zu_dip10010; /每个会员对应租借碟片信息,且要求最多只能租
10、10种影碟CD dip100; /定义能存100种碟片信息int category; /用来做影碟下标int kind; /用来做会员下标int lendnumber100; /统计每个会员租借碟片种类string time1001020; /用来统计每个会员租借每张碟片租借时间信息public:caozuo(int c=0,int k=0) /初始化category和kindcategory=c;kind=k;void aiddp();/增加影碟信息void gxdp();/更新影碟信息void find_dp();/查询影碟信息void delete_dp();/删除碟片信息void pu
11、t_all_dp();/输出全部影碟信息void aidhy();/注册新会员void gxhy();/更新会员信息void find_hy();/查询会员信息void aid_money();/会员费充值void delete_hy();/删除会员信息void put_all_hy();/输出全部会员信息void rent_cd();/租赁影碟void back_cd();/归还影碟void dp_statistics();/统计影碟种类清单void read_cd();/读取影碟文件上信息void read_hy();/读取会员文件上信息void read_lendcdcategory()
12、;/读取借碟片种类数据void read_rent_cd();/读取已租出碟片信息void read_rent_time();/读取已租碟片时间信息;2.3类图在CD类中,关键就是碟片基础信息,包含碟片编号、名称、导演等等。在member类中就是会员基础信息,关键就是会员ID、姓名、性别和账户余额这些信息。在caozuo类中就是把CD类和member类作为它私语组员然后集中处理她们之间关系,主菜单里多种功效也全部在该类中定义实现。在caozuo类中,定义了类数组member hy100,其功效作用是能够存放100个会员信息。CD类数组 CD dip100,其功效作用是能够存放100种碟片信息。
13、另一个CD类二维数组CD zu_dip10010;其是和会员类数组绑定在一起。比如hy5对应着zu_dip5i,i代表会员hy5借第多个碟片,且其上线是10张。Member类中私有组员category是用来标识目前共入库碟片种类,用来做影碟CD类数组下标。私有组员函数kind是用来标识目前已注册会员数量,即用来做会员类数组下标。类中定义整形数组int lendnumber100,是用来统计每个会员租借碟片种类,比如lendnumber5=4,就是会员hy5租借了4种碟片。而且lendnumber10也就是用来标识zu_dip10010中列数,即做列下标。在caozuo类数组中还定义了一个str
14、ing字符型二维数组string time1001020,其中100是和会员hy100中100是一一对应,10是和zu_dip10010中10是一一对应,20是字符长度。该string字符型二维数组关键是用来统计每个会员租借每种碟片租借时间信息。caozuo类组合了CD类和member类,使程序能够灵活地处理会员和碟片之间关系。而该类中组员函数也关键全部是在处理CD类和member之间关系,最含有表现性就 是租赁函数和碟片归还函数。3具体设计 1.类型统计功效:进入该功效,程序使用者能够查看某种类型碟片信息。信息存放功效:凡在实施程序中包含到系统内存改变地方全部要把改变信息写入文件保留起来,以
15、达成存放功效。比如碟片写入文件操作ofstream ofile; ofile.open(碟片信息.txt);for(int j=0;jcategory;j+)if(j=0)ofile.setf(ios:left);ofilesetw(10)碟片编号setw(10)碟片名称setw(10)主演明星setw(10)国家setw(10)碟片类型setw(10)导演setw(10)制作企业setw(10)已借出setw(10)库存量endl;ofile.setf(ios:left);ofiledipj; ofile.close();cout添加成功!endl; 2.主函数和菜单 inline void
16、 menu() cout*endl;cout*-影碟出租管理系统 -*endl;cout* - 主菜单 - *endl;cout* (1)租赁影碟 *endl;cout* (2)归还影碟 *endl;cout* (3)影碟信息维护 *endl;cout* (4)会员信息维护 *endl;cout* (5)信息查询系统 *endl;cout* (6)影碟类型统计 *endl;cout* (7)退出系统 *endl;cout*-*endl;cout*endl;inline void menu3()cout*endl;cout*-影碟信息维护系统-*endl;cout* (1)添加新影碟 *endl
17、;cout* (2)删除影碟信息 *endl;cout* (3)更新影碟信息 *endl;cout* (4)返回主菜单 *endl;cout*-*endl;cout*endl;inline void menu4()cout*endl;cout*-会员信息维护系统-*endl;cout* (1)注册新会员 *endl;cout* (2)删除会员信息 *endl;cout* (3)更新会员信息 *endl;cout* (4)会员费充值 *endl;cout* (5)返回主菜单 *endl;cout*-*endl;cout*endl;inline void menu5()cout*endl;cout
18、*-信息查询系统-*endl;cout* (1)查询影碟信息 *endl;cout* (2)查询会员信息 *endl;cout* (3)查看全部影碟信息 *endl;cout* (4)查看全部会员信息 *endl;cout* (5)返回主菜单 *endl;cout*-*endl;cout*endl;void main()caozuo a; a.read_cd(); /系统自动读取文件中碟片信息,并放到系统内存中a.read_hy(); /系统自动读取文件中会员信息,并放到系统内存中a.read_lendcdcategory(); /系统自动读取文件中每个会员借碟片种类信息,并放到系统内存中a.
19、read_rent_cd(); /系统自动读取文件中已租出碟片信息,并放到系统内存中a.read_rent_time(); /系统自动读取文件中已租出每张碟片对应租借时间信息,并放到系统内存中menu();cout请选择主菜单功效:ch;if(ch=1)a.rent_cd();coutnul);system(cls);menu();cout请选择主菜单功效:endl;else if(ch=2)a.back_cd();coutnul);system(cls);menu();cout请选择主菜单功效:endl;else if(ch=3)system(cls);menu3();cout请选择菜单功效
20、:ch1;if(ch1=1)a.aiddp();coutnul);system(cls);menu3();cout请选择菜单功效:endl;else if(ch1=2)a.delete_dp();coutnul);system(cls);menu3();cout请选择菜单功效:endl;else if(ch1=3)a.gxdp();coutnul);system(cls);menu3();cout请选择菜单功效:endl;else if(ch1=4)system(cls);menu();cout请选择主菜单功效:endl;goto start;elsecout 输入错误,请重新输入!endl;
21、coutendl;cout请选择菜单功效:endl;else if(ch=4)system(cls);menu4();cout请选择菜单功效:ch2;if(ch2=1)a.aidhy();coutnul);system(cls);menu4();cout请选择菜单功效:endl;else if(ch2=2)a.delete_hy();coutnul);system(cls);menu4();cout请选择菜单功效:endl;else if(ch2=3)a.gxhy();coutnul);system(cls);menu4();cout请选择菜单功效:endl;else if(ch2=4)a.a
22、id_money();coutnul);system(cls);menu4();cout请选择菜单功效:endl;else if(ch2=5)system(cls);menu();cout请选择主菜单功效:endl;goto start;elsecout 输入错误,请重新输入!endl;coutendl;cout请选择菜单功效:endl;else if(ch=5)system(cls);menu5();cout请选择菜单功效:ch3;if(ch3=1)a.find_dp();coutnul);system(cls);menu5();cout请选择菜单功效:endl;else if(ch3=2)
23、a.find_hy();coutnul);system(cls);menu5();cout请选择菜单功效:endl;else if(ch3=3)a.put_all_dp();coutnul);system(cls);menu5();cout请选择菜单功效:endl;else if(ch3=4)a.put_all_hy();coutnul);system(cls);menu5();cout请选择菜单功效:endl;else if(ch3=5)system(cls);menu();cout请选择主菜单功效:endl;goto start;elsecout 输入错误,请重新输入!endl;coute
24、ndl;cout请选择菜单功效:endl;else if(ch=6)a.dp_statistics();coutnul);system(cls);menu();cout请选择主菜单功效:endl;else if(ch=7)cout *Thankyou* endl;cout *GoodBye* endl;break;elsecout error,请重新输入!endl;coutendl;cout请选择主菜单功效:endl;4.调试分析4.1调试中碰到问题及处理方案问题1:租赁碟片时,假如没有在库存中查找到要租碟片,虽提醒该碟片不存在,却在结束时把押金扣掉了,其显示窗口以下问题分析处理:该漏洞关键是
25、因为收取押金代码放到了最终,所以无乱是否租赁成功,全部会收取押金20元,处理措施就是找到要租赁碟片而且确定要租赁时,这时再写收取押金代码,问题就得到了处理。问题2:注册一个新会员时,该会员没有租借碟片,归还碟片功效中输入该会员ID,程序中应该提醒“该会员无租借统计”,但在该处却要输出归还碟片信息。其显示窗口以下问题分析处理:该漏洞关键是无法判定会员是否有租借统计造成,问题处理方法就是在caozuo类中添加私有组员int型lendnumber100并初始化为0来统计每个组员是否有租借统计。当会员hui归还碟片时,首先判定lendnumberi是否为0,若为0,则显示“该会员无租借统计”,不然就能
26、够进行归还碟片功效。问题3:当库存数量只有20张时,会员输入租借数量180,却成功了!而在随即输出全部碟片信息时,库存数量也由原来20变成了-160,其显示窗口以下问题分析处理:该漏洞关键是在会员租借碟片时缺乏对会员租借数量判定,然后继续进行租借,改变系统内存,继而造成了输犯错误。问题处理方法就是在会员输入租借数量时进行判定,假如该数量不在碟片库存范围之内,则输出“租借数量错误”,不然再继续进行租借操作。问题4:当输出全部会员信息时,每输出一个会员,就会输出一行标题,标题行太多,其显示窗口以下问题分析处理:该漏洞关键是因为把输出标题行放在了输出会员循环了,所以每输出一个会员就会输出一行标题,处
27、理该问题方法就是把输出标题行代码放到循环外面,只输出一次,这么标题行太多问题就得到了处理。问题5:当会员去归还碟片时,只能一次性全部归还,无法实现部分归还功效。其显示窗口以下问题分析处理:该漏洞关键是没有从用户角度考虑问题,没能是功效完善。问题处理方法就是在会员归还碟片时,提醒会员是全部归还还是部分归还,然后分两种情况进行归还碟片功效。问题6:此处日期输入格式犯错,没有提醒用户正确日期输入格式,在日期输入过后,提醒是否继续租赁,此处无法接收命令,一直提醒输入有误!其显示窗口以下问题分析处理:该漏洞关键是界面不友好和输入菜单选项接收数字犯错所致。处理该漏洞方法就是在请输入租赁日期后面友好提醒用户
28、“日期格式为:4月12日”,这么就不会出现这么错误了。4.2经验和体会在调试分析和测试结果这个过程中,首先就是要使用程序里每一个功效,在包含到输入时,要想到多种可能去输入,继而找出程序中漏洞,找到漏洞以后,能够截屏保留下来留作更改代码依据。在更改代码时,要能够依据漏洞找到犯错函数和函数里具体位置。找到后依据截屏上漏洞来修改代码。若是在函数里找不到漏洞地方,则能够经过调语句调过程,在监视窗口中一步一步查找漏洞,继而慢慢修改代码,完善程序功效。5用户使用说明进入主菜单:用户能够选择租赁影碟、归还影碟、影碟维护、用户维护、信息查询和类型统计这多个功效。碟片借阅:用户输入会员ID,输入需租碟片,输入数
29、量及租借日期碟片归还:输入会员ID,选择是全部归还还是部分归还,然后输入租借天数。影碟维护:用户能够选择增加、删除、更新三个功效碟片增加:输入碟片编号、名称等碟片删除:输入要删除碟片名称,然后删除该碟片碟片更新:输入要更新碟片名称,然后进行输入更新用户维护:用户能够选择增加、删除、更新、会员费冲值四个功效增加会员:输入注册会员ID、性别等删除会员:输入要删除会员ID,然后删除该会员会员更新:输入要更新会员ID,然后进行输入更新会员费充值:输入会员ID,输入充值金额信息查询:用户能够选择查询碟片、会员、全部碟片和会员信息四个功效查询碟片:输入碟片名称,显示该碟片信息 查询会员:输入会员ID,查询会员信息查看全部碟片:显示全部碟片信息查看全部会员:显示全部会员信息类型统计:输入你想查看碟片类型,输出该类型全部碟片6.测试验证1 运行程序,显示主菜单,显示窗口以下图,菜单中共有7个选项,键入3,进入影碟信息维护子菜单,显示窗口以下此时共有