课程设计报告影碟租赁系统.doc

上传人:仙人指路1688 文档编号:2884340 上传时间:2023-03-01 格式:DOC 页数:26 大小:1.06MB
返回 下载 相关 举报
课程设计报告影碟租赁系统.doc_第1页
第1页 / 共26页
课程设计报告影碟租赁系统.doc_第2页
第2页 / 共26页
课程设计报告影碟租赁系统.doc_第3页
第3页 / 共26页
课程设计报告影碟租赁系统.doc_第4页
第4页 / 共26页
课程设计报告影碟租赁系统.doc_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《课程设计报告影碟租赁系统.doc》由会员分享,可在线阅读,更多相关《课程设计报告影碟租赁系统.doc(26页珍藏版)》请在三一办公上搜索。

1、 成绩 课程设计报告题 目 影碟租赁系统 课 程 名 称 面向对象程序设计课程设计院 部 名 称 信息技术学院 专 业 计算机科学与技术(本) 班 级 09计算机科学与技术(2) 学 生 姓 名 袁爽 学 号 0905101070 课程设计地点 A203 课程设计学时 20 指 导 教 师 李慧 金陵科技学院教务处制目 录前言1一、题目描述1二、系统运行环境12.1 硬件环境12.2 软件环境2三、功能分析23.1 影碟入库管理模块23.2 影碟信息查询模块23.3 影碟出租模块23.4 影碟归还模块23.5 库存查询模块33.6 系统功能分层图3四、系统可视化建模34.1 用例建模34.2

2、活动建模44.3 类建模5五、系统设计65.1 程序总体结构65.2 主功能模块设计65.3 程序设计105.4 类与函数的设计与实现17六、运行与测试结果196.1 菜单模块的测试过程196.2 影碟入库模块的测试过程206.3 影碟信息查询模块的测试过程206.4 影碟出租模块的测试过程216.5 影碟归还模块的测试过程226.6 影碟库存信息查询模块的测试过程23七、小结23八、参考资料24影碟租赁系统前言本课程设计的目的采用面向对象的程序设计语言,开发实现一个应用程序,主要目的是为了更好的掌握面向对象程序设计语言及其开发工具,掌握如何使用面向对象的程序设计语言设计一个小的软件系统。通过

3、该课程设计培养分析和解决实际问题的能力,以及综合应用基本概念、基本原理和技术方法的能力,真正做到学以致用,使课本上抽象的理论,方法与具体的实践应用相结合。一、题目描述影碟租赁系统:(1)设计一个的菜单将在实现的功能显示出来,并有选择提示;(2)影碟分为三类:CD、DVD、VCD,能够这三类影碟实现增加、删除、修改功能;(3)影碟出租后动态的修改库存信息,并根据租用影碟的数目和天数计算打印出相关信息;(4)要求有错误提示功能,例如输入日期,输入错误提示重新输入。创新要求: 影碟的信息可以通过文件保存,根据出租的情况动态更新。二、系统运行环境2.1 硬件环境仪器:华硕系列PC机硬件配备处理器:In

4、tel(R) Core(TM)i5 CPU M480 2.67GHz 内存:3.00GB硬盘:320GB网卡2.2 软件环境操作系统:Microsoft Windows 7 Ultimate Service Pack 1(32位)应用程序:Microsoft Visual C+ 6.0Microsoft Word 2010 SP1Microsoft Visio 2010 SP1三、功能分析经分析题目需求后将本系统划分为两大功能模块:管理模块和查询模块管理模块分为影碟入库管理,影碟出租,影碟归还查询模块分为影碟信息查询,库存查询3.1 影碟入库管理模块功能定义:该模块主要实现影碟的增加,输入信息

5、修改,删除功能。功能描述:此模块主要是对入库影碟的信息进行详细记录,并可以记录后进行检查,若检查出错误,删除后重新输入,检查无误后,保存到库存中,以确保库存中的数据都是正确的;3.2 影碟信息查询模块 功能定义:该模块主要实现对库存中信息的查询。功能描述:此模块要根据输入的查询条件,将库存中所要查询的影碟的详细信息反馈给用户。详细信息包括:影碟编号,影碟名称,影碟类型,影碟的租价,库存的数量等。3.3 影碟出租模块功能定义:该模块要实现影碟的出租功能,并能计算出租出去的影碟的价格,动态的修改已出租的影碟的库存信息。功能描述:此模块可以选择条件进行影碟的出租,例如选择编号,首先要进行库存的查找,

6、若存在,则可以出租,对于要出租的影碟要输入出租的天数,然后进行统计计算出总租金,再将影碟出库后库存中影碟的数量进行动态的修改并保存。3.4 影碟归还模块功能定义:该模块要实现影碟的归还入库功能,并将归还的影碟的信息写到库中。功能描述:此模块首先查看所要归还的影碟的信息,若库存中存在该影碟的信息,则进行归还,将库存动态更改后保存。若不存在,则提示错误信息。3.5 库存查询模块功能定义:该模块负责打印库存信息和出租信息。功能描述:此模块中要将库存中所有的影碟信息显示给用户,便于用户了解库存中的状况,还可以将出租的信息反馈给用户。3.6 系统功能分层图系统功能分层图如图1所示图 1 系统功能分层图四

7、、系统可视化建模本系统采用面向对象的方法开发,使用UML进行建模,具体建模过程如下。4.1 用例建模据题目需求描述识别参与者为系统管理员。系统参与者及用例名称列表如表1所示表 1 系统参与者及用例列表名称说明名称说明AddStore入库管理SentStore影碟出租ReturnStore归还管理Search影碟信息查询RestoreStore库存查询User系统管理员经分析建立本系统用例图如图2所示图 2 系统用例图4.2 活动建模据题目描述分析活动名称列表如表2所示表 2 系统活动名称列表名称说明名称说明Add Video 增加影碟信息Check Video 检查已输入信息Delete删除输

8、入信息Sent Video影碟出租Save信息保存入库Create Store建立库存文件Search查找库存中影碟信息Input No输入出租编号Change Store更改库存信息根据表2建立如图3所示的入库模块活动图。图 3 入库模块活动图根据表2建立如图4所示的出租模块活动图。图 4 出租模块活动图4.3 类建模需求简介:影碟分为三类:CD、DVD、VCD,影碟的信息可以通过文件保存,根据出租的情况动态更新。1. 识别类通过阅读需求描述得到本系统可能的备选类有:Video、CD、DVD、VCD和Store。2. 类之间的关系CD、DVD、VCD都有很多共同的属性,也有属于自己的属性,例

9、如类别。所以这三个类由Video派生而来,Video是父类,CD、DVD、VCD继承Video,即Video是CD、DVD、VCD类的泛化。Store类是用来对CD、DVD、VCD进行操作的,是Video的友元类。3. 类的属性和操作类的属性和操作如表3所示。表 3 类的属性和操作表类名属性操作Videoname ,type ,price ,allprice amount ,year ,month ,day ,*next numCheck() Input() video() Input(ifstream&f) Output() Output(ofstream& f)CD继承Video,type

10、属性值为1CD() Output() Output(ofstream& f)DVD继承Video,type属性值为2DCD() Output() Output(ofstream& f)VCD继承Video,type属性值为3VCD() Output() Output(ofstream& f)Storevideo * GLStore() add() search() sent() returnvideo() restor() numCheck()4. 类图系统类图如图5所示。图 5 系统类图五、系统设计5.1 程序总体结构由于系统比较小,所以并未设置登录操作,可直接进入系统,系统菜单将系统所实现

11、的功能显示出来。系统管理员可按菜单提示进行相应的操作。菜单内容包括:增加影碟相关信息、查找影碟相关信息、影碟出租、影碟归还、查看库存状况、查看已出租状况和退出。设置好菜单开始定义类Video、CD、DVD、VCD、Store,在基类Video中定义影碟的属性,输入操作和写入文件操作。在CD、DVD、VCD类中初始化各自的类别,定义输出操作,及读出文件操作。在Store类中定义对影碟的操作,包括添加、修改、查找、出租、归还和库存查询操作。系统总体结构流程图如图6所示。5.2 主功能模块设计本系统总共分为6个子模块,各模块的详细设计如下。5.2.1 影碟入库模块本模块用来进行影碟信息的入库管理,首

12、次登陆时要创建库存文件,创建后提示用户进行影碟类别的选择,根据用户所选类别的不同,申请空间,调用输入方法,初始化入库影碟信息,对输入的信息进行输入限制,只有符合输入要求时才继续下一步输入,初始化结束后对所输入信息进行检查,若无错,则保存进库存文件,否则删除重新输入。当再次进行入库时,系统会自动跳过创建文件的环节,直接读取库存中已编号的货物,提示下一编号,进行影碟入库。当影碟数量图 6 系统总体结构流程图超过库存上限,系统提示错误。入库模块结构流程图如图7所示。5.2.2 影碟出租模块本模块实现影碟出租功能,并动态的更改库存。在主菜单中选择出租操作后,根据提示输入待出租影碟的编号,系统会从库存文

13、件中查找待出租影碟的信息,若库存中存在,则打印给管理员以了解影碟的库存信息,然后按要求输入出租数目和出租天数,天数限制最多三个月,并要求出租库存范围内的数目,超过提示库存不足,最后计算出总价并打印出租信息,更改库存数量,并将出租信息保存至出租文件中。出租模块结构流程图如图8所示。图 7 入库模块结构流程图5.2.3 影碟归还模块本模块用于实现影碟的归还入库操作,在主菜单中选择归还操作后,按提示输入待归还影碟的编号,查询库存,库存中存在该影碟时打印影碟的信息,并输入归还数目,更改库存,若不存在则直接退出。该模块流程同出租模块,不再敖述。5.2.4 影碟信息查询该模块用于实现库存中影碟信息查询操作

14、,在主菜单中选择信息查询操作,图 8 出租模块结构流程图输入待查询影碟的编号,从库存文件中查询相关信息,找到后打印出来,否则库存中不存在,退出。查询模块结构流程图如图9所示。5.2.5 影碟库存查询该模块用于实现库存文件的读取,将文件中所有信息打印到给管理员。5.2.6 影碟出租信息查询该模块用于出租文件信息的读取,将文件中出租的信息打印到屏幕上。图 9 查询模块结构流程图5.3 程序设计各模块的程序设计将分六节进行具体描述。5.3.1 影碟入库模块(增加影碟信息模块)(1)数据结构设计用文件的读指针ReadFile读取文件中每行的信息,读出后放到数组中暂存,将记录文件行数变量加1,知道读到文

15、件结尾,开始入库信息初始化。定义基类的对象指针p,p2,p指向当前队列的最后,p2指向p的后继指针,将刚初始化的空间连接到当前队列最后,实现影碟信息的增加。检查输入信息错误,若要删除,则将p2的后继指针,指向p的后继指针,delete p2。(2)关键代码设计及相关注释ifstream ReadFile;/输入流文件int n=-1;char line512;/用于读取文件内容ReadFile.open(video.txt,ios:in);/ios:in 表示以只读的方式读取文件if (!ReadFile)/如果数据文件不存在,创建文件 else/文件存在while(!ReadFile.eof

16、()/控制读到文件结束就停止 ReadFile.getline(line,512,n);/一次读取一行n+;/每读取一行记录行数变量加1cout添加时请从n号开始编号入库!endl;ReadFile.close();/关闭文件coutnext) /将p指向当前队列的最后一个,在其后面实现插入。p = p-next;char ch;video *p2;for(int i = 0; i 10; i+)int s=0;/用于记录是否修改了输入内容coutch;switch(ch)case 1: p2=new CD;/用new来申请新的空间break;case 2: p-next = p2;/将新申请

17、的空间插入到当前队列的最后p2-Input(); /对此空间进行初始化coutch;if(ch = Y | ch = y)/省略p2-Output();/输出刚刚输入的信息用来检查输入coutch;if(ch = Y | ch = y) p2-next=p-next;/将当前队列中最后一个对象指针的后继指针指向自己delete p2;/删除刚刚添加进来的需要修改的对象的内容cout成功删除!next;/p指向当前队列的最后,用来连接继续入队的队列printf(是否继续输入:(Y/N)?);5.3.2 影碟出租模块(1)数据结构设计定义文件输出流指针read,将从文件中读出的影碟编号放到stri

18、ng类型的变量中,将待出租的影碟编号同样放到string类型的变量中,若匹配相同,则读取该行信息分别放入不同的string类型变量中,并打印此行信息,否则read指针后移,直到遇到换行符后换行读取下一行的编号,继续匹配.将待出租的影碟的库存,租价,出租数目用atoi()转化为整形,进而进行计算。再将read指针回退到库存地址空间,ios:cur覆盖写入出租后的库存。(2)关键代码设计及注释void Store:sent() /出租string sno,sname,stype,sdate,sentNum,sstore,sprice,choice; /出租的编号,名字,类别,日期,数目,库存,租价

19、,将出租的编号char Day3;double allprice;/租金int day;/租出去的天数fstream read(video.txt);if(!read)cout文件打开失败!;exit(1);coutchoice;while(!read.eof() /读取文件编号进行匹配readsno;if(choice=sno)break;elsefor(int i=0;isno;if(choice=sno)/若库存中存在将要出租的影碟信息,则打印以确定cout所要出租的影碟信息如下:endl;coutsetw(6)编号setw(11)影碟名称setw(11)影碟类别setw(10)租价se

20、tw(14)入库日期setw(9)sname;readstype;readsprice;readsdate;readsstore;coutsetw(6)snosetw(11)snamesetw(11)stypesetw(10)spricesetw(14)sdatesetw(9)sstoreendl;coutsentNum;while(sentNumsstore)/若要出租的数目大于库存,则提示错误,从新输入coutsentNum;coutDay;while(numCheck(Day) 3 | atoi(Day) 90)/如果输入错误,提示重新输入coutDay;day = numCheck(D

21、ay);/将检验后的合法输入转换为整形 int i=atoi(sentNum.c_str();/将string类型转换为整形进行计算int j=atoi(sprice.c_str();int s=atoi(sstore.c_str();allprice=i*j*day;/计算出租的总价cout总租价为:allpriceendl;coutsetw(6)编号setw(11)影碟名称setw(11)影碟类别setw(9)租价setw(12)数目setw(10)天数setw(10)总租金n;coutsetw(6)snosetw(11)snamesetw(11)stypesetw(9)spriceset

22、w(12)sentNumsetw(10)daysetw(10)allpriceendl;ifstream ReadFile;ReadFile.open(出租.txt,ios:in);/ios:in 表示以只读的方式读取文件if (!ReadFile)/如果数据文件不存在char ch;/定义一个char型变量用于接收用户选择coutch;/接收用户选择if (ch = y)/如果用户按Y键/创建数据文件 ofstream creat(出租.txt, ios:out);creatsetw(6)编号setw(11)影碟名称setw(11)影碟类别setw(9)租价setw(12)数目setw(10

23、)天数setw(10)总租金n;coutendl已经成功创建“出租.txt”文件!endl;ofstream sent(出租.txt, ios:app); sentsetw(6)snosetw(11)snamesetw(11)stypesetw(9)sprice setw(12)sentNumsetw(10)daysetw(10)allpriceendl; s=s-i;/计算现在库存read.seekg(-9,ios:cur); readsetw(9)s;/对库存进行修改,将read指针退回至库存存储位置,进行覆盖写cout出租信息已经保存到“出租.txt”且库存已修改; sent.close

24、();/文件关闭read.close();elsecout库存中不存在该货物,请按任意键退出!;5.3.3 影碟归还模块(1)数据结构设计本模块同影碟出租模块,用read指针从文件中读取影碟信息进行匹配,匹配成功的,将read指针退回到库存地址处,从新覆盖写入归还后的库存数量。(2)关键代码设计及相关注释void Store:returnvideo()/影碟归还string choice,sno,sname,stype,sprice,sdate;int sstore,sentN; /库存,归还数目fstream read(video.txt);if(!read) cout文件打开失败!;exi

25、t(1); coutchoice;while(!read.eof()readsno;if(choice=sno)break;else for(int i = 0; isno;if(choice = sno)cout所要归还的影碟现在库存信息如下:endl;coutsetw(6)编号setw(11)影碟名称setw(11)影碟类别setw(10)租价setw(14)入库日期setw(9)sname;readstype;readsprice;readsdate;readsstore;coutsetw(6)snosetw(11)snamesetw(11)stypesetw(10)spricesetw

26、(14)sdatesetw(9)sstoreendl;elsecout库存中不存在该编号的影碟!;return;coutsentN;sstore=sstore+sentN; /计算现在库存read.seekg(-9,ios:cur); readsetw(9)sstore;/更改库存,覆盖的写cout归还成功,归还信息已经保存到库存中!endl; 5.3.4 影碟信息查询(1)数据结构设计本模块定义输出流中的read指针,将读取的编号进行匹配,成功则读取此行影碟所有信息,关闭文件,否则退出。(2)代码设计类似于出租模块的查找影碟信息部分,不在敖述,具体见源程序代码。5.3.5 影碟库存查询及影碟

27、出租信息查询(1)数据结构设计调用getline方法,将库存文件或出租信息文件中内容一行行读入缓冲区,然后输出缓冲区中内容,直到读到文件结尾。(2)关键代码设计及相关注释void Store:restor(int i)/库存查看 char buffer100;/用来缓存if(i=1)/对库存进行读取ifstream read(video.txt, ios:in);if(!read.is_open()/不能正常打开,报错 coutError opening file!; exit(-1); while(!read.eof()/将文件读入缓冲区,并将缓冲区内容输出read.getline(buff

28、er,100); /读取一行coutbufferendl;/输出一行else/对出租信息进行读取(此处省略掉相关代码)5.3.6 主界面模块设计(1)数据结构设计定义了操作类Store的对象S,通过该对象调用Store类的操作。(2)关键代码设计void main() couttttt影碟租赁管理系统n;coutttt* 1增加影碟相关信息*tn;coutttt* 2影碟信息查询*tn;coutttt* 3影碟出租*tn;coutttt* 4影碟归还*tn;coutttt* 5库存信息查询*tn;coutttt* 6出租信息查询*tn;coutttt* 7退出*tn;cout请选择(1-7):

29、;switch(ch)case 1:s.add();break;case 2:s.search();break;5.4 类与函数的设计与实现5.4.1 Video类Video类是基类,定义CD、DVD、VCD公有的属性及输入操作。属性:name, type, price, allprice, amount, year, month, day, *next分别为影碟的名称、类别、租价、总租金、库存、年、月、日和控制块后继指针。方法:video(),video(),numCheck() ,Input(), Input(ifstream &f),Output(void),Output(ofstrea

30、m& f)。Video()构造函数:用来申请控制块。video()析构函数:用来收回控制块。numCheck()函数:该函数形参是字符串,返回值为整型。此函数将输入时传过来的字符串进行检查,当该字符串中有字符不是0-9的字符,或字符串长度不符合要求的时候(即数值越出所指定范围),该函数返回负数值,提示重新输入。如果传递过来的参数符合要求,则调用atoi()方法将其转换为整型并将此整数返回给原调用函数。 Input()函数:该函数是用virtual声明的虚函数,避免了后面派生类中该函数的调用的二义性,无返回值。该函数对控制块信息进行初始化,初始化过程中调用numCheck()函数,对输入进行检查

31、,输入符合要求,numCheck函数返回整型值,继续输入,时间初始化调用了GetLocalTime()方法,使用本地时间。Input(ifstream &f)函数: 该函数将在多个派生类中被使用,声明为虚函数,避免使用时的二义性。此函数用于将初始化的内容写入指定文件中。Output(),Output(ofstream& f)函数:同样声明为虚函数,具体定义在派生类中实现。 5.4.2 CD类该类是Video的派生类,公有继承Video类。CD()构造函数:将其特有属性值设置为type=1。其余属性继承基类。Output()函数:该函数是继承自Video基类中的虚函数,在基类中声明虚函数Outp

32、ut(),在此函数中定义具体实现,打印输入的控制块信息。Output(ofstream& f)函数:该函数的功能类似于Output()函数,不同在于使将输入信息写入指定文件中。5.4.3 DVD类该类是Video的派生类,公有继承Video类。DVD()构造函数:将其特有属性值设置为type=2。其余属性继承基类。Output()函数,Output(ofstream& f)函数:同CD类中定义的此函数,用于输出。5.4.4 VCD类该类是Video的派生类,公有继承Video类。VCD()构造函数:将其特有属性值设置为type=3。其余属性继承基类。Output()函数,Output(ofst

33、ream& f)函数:同CD类中定义的此函数,用于输出。5.4.5 Store类该类是实现增加,修改,出租,归还,查询等操作的类,定义了个操作函数,是Video的友元类。属性:video * GL 基类的对象指针。Store(void)构造函数:用于申请空间。Store(void)析构函数:定义video * p,用p指针指向队列的头,GL指针指向p的后继指针,删除p指向的控制块,然后p和GL依次后移,知道p为空,移到队列末尾,释放掉所有的空间。add()函数:该函数用于添加影碟信息。首次登陆时会要求创建库存文件,创建成功后开始添加影碟信息,首先以只读的方式读取文件中已编号的影碟,按行读取,每

34、读取一行,记录行数变量加1,然后提示管理员所要入库的影碟的编号,然后将p指针指向当前队列的最后,将新控制块插入到当前队列后面,调用Input()函数,进行输入,输入完成后可以调用Output()函数进行检查,若有错,将p2所指向的当前队列的最后控制块的后即指针指向它前面的控制块,delete P2,若无错,则以追加ios:app的方式写入库存文件中。继续循环,是否继续添加。search()函数:无返回值。定义文件输出流中的read指针,从指定文件中读出影碟的编号,与输入的编号进行比对,若相同,则将此行信息全部读取出来放入string类型变量中,打印出来,若不同,将read指针后移,遇到回车换行,继续下一个影碟信息的匹配,直到读到文件结束为止。numCheck(char numCheck)函数:同Video中的定义。sent()函数:返回值为空,该函数用于出租影碟,动态修改库存,首先对输入的待出租的影碟的编号进行库存查找,查找过程类似于search()函数功能,若库存中存在,打印出该影碟的信息,输入待出租数目,数目限制在库存范围内,若大于库存,则提示错误,输入待出租天数Day,天数限定为最多3个月,调用numCheck(char numCheck),输入正确,计算总租金,并将此出租信息以追加的方式写入出租库存中。并

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号