影碟出租管理系统Word文档格式.docx
《影碟出租管理系统Word文档格式.docx》由会员分享,可在线阅读,更多相关《影碟出租管理系统Word文档格式.docx(73页珍藏版)》请在冰豆网上搜索。
一个比较理想的系统,应该满足以下要求:
⑴简单性、实用性
系统应该尽可能设计的比较简单,各功能实现清晰明了,同时应考虑实用性避免不必要的复杂化。
结构简单尽可能使处理过程缩短,处理费用减少,系统收益增高。
同时也利于使用者掌握和维护。
⑵完整性
系统是作为一个统一的整体而存在的,因此系统的功能要保持完整,数据采用要统一,传递语言要一致。
⑶灵活性
系统对外界环境的变化应有较强的适应力,即便在条件变化之后,仍能提供详尽的具有现实意义的有关信息。
⑷可靠性
系统必须是可靠的,只有这样,才能保证系统的高质量,才能得到使用者的信任。
⑸经济性
系统应该给使用者带来相应的利益,提供更准确、更全面、更及时的信息,方便大大提高管理的效率。
系统要实现哪些功能,每个功能的具体描述
1)新片上架:
录入碟片片名、编号等各种信息。
并实现片子的增加、删除、修改的基本功能。
2)碟片查询:
对片子进行分类查询的功能。
3)碟片借阅:
对借出的片子进行管理,对租借的客户和所借出的片子的信息进行记录,对碟片的借阅进行普通客户和会员客户分类管理。
4)碟片归还:
对出租的片子进行金额结算,对普通客户和会员客户进行分类管理。
数据字典
E-R图(侯璠)
数据流图
思考题
1、需求分析在软件开发中真的有那么重要吗?
在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统时描写新系统的目的、范围、定义和功能时所要做的所有的工作。
需求分析是软件工程中的一个关键过程。
在这个过程中,系统分析员和软件工程师确定顾客的需要。
只有在确定了这些需要后他们才能够分析和寻求新系统的解决方法。
在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。
假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。
需求分析是一项重要的工作,也是最困难的工作。
该阶段工作有以下特点:
(1)用户与开发人员很难进行交流
在软件生存周期中,其它四个阶段都是面向软件技术问题,只有本阶段是面向用户的。
需求分析是对用户的业务活动进行分析,明确在用户的业务环境中软件系统应该"
做什么"
。
但是在开始时,开发人员和用户双方都不能准确地提出系统要"
做什么?
"
因为软件开发人员不是用户问题领域的专家,不熟悉用户的业务活动和业务环境,又不可能在短期内搞清楚;
而用户不熟悉计算机应用的有关问题。
由于双方互相不了解对方的工作,又缺乏共同语言,所以在交流时存在着隔阂。
(2)用户的需求是动态变化的
对于一个大型而复杂的软件系统,用户很难精确完整地提出它的功能和性能要求。
一开始只能提出一个大概、模糊的功能,只有经过长时间的反复认识才逐步明确。
有时进入到设计、编程阶段才能明确,更有甚者,到开发后期还在提新的要求。
这无疑给软件开发带来困难。
(3)系统变更的代价呈非线性增长
需求分析是软件开发的基础。
假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计、编程、测试和维护阶段解决,则要花2.5、5、25、100倍的时间。
因此,对于大型复杂系统而言,首先要进行可行性研究。
开发人员对用户的要求及现实环境进行调查、了解,从技术、经济和社会因素三个方面进行研究并论证该软件项目的可行性,根据可行性研究的结果,决定项目的取舍。
2、分析系统流程图,程序流程图和数据流图的区别和各自的特点。
系统流程图是概括的描绘物理系统的传统工具。
它的基本思想是用图形符号以黑盒子形式描绘组成系统的每个部件(程序、文档、数据库、人工过程等)。
系统流程图表达的是数据在系统各部件之间流动的情况,而不是对数据加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,但是他却是物理数据流图而不是程序流程图。
数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,所以它是一种功能模型。
在结构化开发方法中,数据流图是需求分析阶段产生的结果。
3、怎样写合乎规范的数据流图和数据词典
画数据流图原则:
(1)数据流图上所有图形符号只限于前述四种基本图形元素。
(2)顶层数据流图上的数据流必须封闭在外部实体之间。
(3)
每个处理框至少有一个输入数据流和一个输出数据流。
(4)在数据流图中,需按层给处理框编号。
表明该处理所处层次及上下层的亲子关系。
(5)
规定任何一个数据流子图必须与它上一层的一个处理对应,两者的输入数据流和输出数据流必须一致。
此即父图与子图的平衡。
(6)图上每个元素都必须有名字。
写数据字典:
数据字典由下列四类元素定义组成
(1)数据流
(2)数据流分量即数据元素
(3)数据存储
(4)处理
实验二:
系统设计
层次图
结构图
归还管理模块
程序流程图
盒图
Jackson图
租借管理模块
2.2盒图
2.3jackson图
1、如何分辨事务中心数据流和变换中心数据流?
2、设计软件结构图时,如何把握内聚和耦合的度?
(1)尽量使用数据耦合,少用控制耦合和特征耦合,限制公共耦合的范围,完全不用内容耦合
(2)功能内聚10分、顺序内聚9分、通信内聚7分、过程内聚5分、时间内聚3分、逻辑内聚1分、偶然内聚0分
3、设计程序流程图时,循环嵌套以几层为好?
4、怎么判断盒图的正确性?
实验三:
编码实现
2.2类
1.CD类:
该类拥有私有数据成员CDID(碟片编号)、CDname(碟片名称)、mainstar(主演明星)、country(国家)、style(碟片类型)、director(导演)、company(制作公司)、lend(借出数量)、inventory(库存量)。
成员函数包含有参构造函数、重载流插入提取运算符、拷贝复制构造函数以及获取私有成员函数和更改私有成员函数,具体类信息如下:
classCD{
private:
stringCDID;
//碟片编号
stringCDname;
//碟片名称
stringmainstar;
//主演明星
stringcountry;
//国家
stringstyle;
//碟片类型
stringdirector;
//导演
stringcompany;
//制作公司
intlend;
//借出数量
intinventory;
//库存量
public:
CD(stringci="
无"
stringcna="
stringmst="
stringcot="
stringsty="
stringdir="
stringcom="
intle=0,intinv=0);
friendistream&
operator>
>
(istream&
is,CD&
die);
//重载输入运算符
friendostream&
operator<
<
(ostream&
os,CD&
//重载输出运算符
friendofstream&
operator<
(ofstream&
ofs,CD&
//重载文件插入运算符
CD(constCD&
c);
//复制构造函数
CD(CD&
c,constCD&
d);
stringgetCDID(){returnCDID;
}
stringgetCDname(){returnCDname;
stringgetmainstar(){returnmainstar;
stringgetcountry(){returncountry;
stringgetstyle(){returnstyle;
stringgetdirector(){returndirector;
stringgetcompany(){returncompany;
intgetlend(){returnlend;
intgetinventory(){returninventory;
voidsetCDID(stringci){CDID=ci;
voidsetCDname(stringcna){CDname=cna;
voidsetmainstar(stringmst){mainstar=mst;
voidsetcountry(stringcot){country=cot;
voidsetstyle(stringsty){style=sty;
voidsetdirector(stringdir){director=dir;
voidsetcompany(stringcom){company=com;
voidsetlend(intle){lend=le;
voidsetinventory(intinv){inventory=inv;
};
2.member类:
该类拥有私有成员memberID(会员号)、membername(会员姓名)、sex(性别)、money(会费剩余)。
成员函数包含有参构造函数、流重载插入运算符、拷贝构造函数以及获取私有成员函数和更改私有成员函数,具体类信息如下:
classmember
{
(istream&
is,member&
me);
//重载插入运算符
(ostream&
os,member&
//重载提取运算符
friendofstream&
(ofstream&
ofs,member&
//重载文件插入运算符
stringmemberID;
//会员号
stringmembername;
//会员名字
stringsex;
//会员性别
floatmoney;
//会费剩余
member(stringmid="
stringmna="
stringse="
floatmon=0.0);
//带参默认构造函数
member(constmember&
m);
//拷贝构造函数
stringgetmemberID(){returnmemberID;
stringgetmembername(){returnmembername;
stringgetsex(){returnsex;
floatgetmoney(){returnmoney;
voidsetmemberID(stringmid){memberID=mid;
voidsetmembername(stringmna){membername=mna;
voidsetsex(stringse){sex=se;
voidsetmoney(floatmon){money=mon;
3.caozuo类:
该类私有成员分别为:
memberhy[100](能存100个会员信息)、CDzu_dip[100][10](每个会员租借的碟片信息,且规定每人最多只能租借10种影碟)、CDdip[100](定义能存100种碟片信息)、intcategory(用来做影碟的下标)、intkind(用来做会员的下标)、intlendnumber[100](记录每个会员租借的碟片种类)、stringtime[100][10][20](用来记录每个会员租借的每一种碟片对应的租借时间信息)。
成员函数主要有有参构造函数以及各种功能函数,详细信息如下所示:
classcaozuo
memberhy[100];
//定义能存100个会员信息
CDzu_dip[100][10];
//每个会员对应租借的碟片信息,且规定最多只能租10种影碟
CDdip[100];
//定义能存100种碟片信息
intcategory;
//用来做影碟的下标
intkind;
//用来做会员的下标
intlendnumber[100];
//记录每个会员租借的碟片种类
stringtime[100][10][20];
//用来记录每个会员租借的每张碟片的租借时间信息
caozuo(intc=0,intk=0)//初始化category和kind
{
category=c;
kind=k;
}
voidaiddp();
//增加影碟信息
voidgxdp();
//更新影碟信息
voidfind_dp();
//查询影碟信息
voiddelete_dp();
//删除碟片信息
voidput_all_dp();
//输出全部影碟信息
voidaidhy();
//注册新会员
voidgxhy();
//更新会员信息
voidfind_hy();
//查询会员信息
voidaid_money();
//会员费充值
voiddelete_hy();
//删除会员信息
voidput_all_hy();
//输出全部会员信息
voidrent_cd();
//租赁影碟
voidback_cd();
//归还影碟
voiddp_statistics();
//统计影碟种类清单
voidread_cd();
//读取影碟文件上的信息
voidread_hy();
//读取会员文件上的信息
voidread_lendcdcategory();
//读取借碟片种类数据
voidread_rent_cd();
//读取已租出碟片的信息
voidread_rent_time();
//读取已租碟片的时间信息
2.3类的分析
在CD类中,主要就是碟片的基本信息,包括碟片的编号、名称、导演等等。
在member类中就是会员的基本信息,主要就是会员的ID、姓名、性别和账户余额这些信息。
在caozuo类中就是把CD类和member类作为它的私语成员然后集中处理他们之间的关系,主菜单里的各种功能也全部在该类中定义实现。
在caozuo类中,定义了类数组memberhy[100],其功能作用是可以存储100个会员信息。
CD类数组CDdip[100],其功能作用是可以存储100种碟片信息。
另一个CD类二维数组CDzu_dip[100][10];
其是与会员类数组绑定在一起的。
例如hy[5]对应着zu_dip[5][i],i代表会员hy[5]借的第几种碟片,且其上线是10张。
Member类中的私有成员category是用来标记当前共入库的碟片的种类,用来做影碟CD类数组的下标。
私有成员函数kind是用来标记当前已注册的会员数量,即用来做会员类数组的下标。
类中定义的整形数组intlendnumber[100],是用来记录每个会员租借的碟片种类,例如lendnumber[5]=4,就是会员hy[5]租借了4种碟片。
并且lendnumber[10]也就是用来标记zu_dip[100][10]中的列数的,即做列的下标。
在caozuo类数组中还定义了一个string字符型二维数组stringtime[100][10][20],其中100是和会员hy[100]中的100是一一对应的,10是和zu_dip[100][10]中的10是一一对应的,20是字符长度。
该string字符型二维数组主要是用来记录每个会员租借的每种碟片的租借时间信息。
caozuo类组合了CD类和member类,使程序可以灵活地处理会员和碟片之间的关系。
而该类中的成员函数也主要都是在处理CD类和member之间的关系,最具有体现性的就是租赁函数和碟片归还函数。
3详细设计
1.类型统计功能:
进入该功能,程序使用者可以查看某种类型的碟片信息。
信息存储功能:
凡在执行程序中涉及到系统内存改变的地方都要把改变的信息写入文件保存起来,以达到存储功能。
例如碟片的写入文件操作
ofstreamofile;
ofile.open("
碟片信息.txt"
);
for(intj=0;
j<
category;
j++){
if(j==0){
ofile.setf(ios:
:
left);
ofile<
setw(10)<
碟片编号"
碟片名称"
主演明星"
国家"
碟片类型"
导演"
制作公司"
已借出"
库存量"
endl;
ofile.setf(ios:
ofile<
dip[j];
ofile.close();
cout<
添加成功!
2.界面设计
inlinevoidmenu()
********************************************************"
**----------------影碟出租管理系统-------------------**"
**----主菜单----**"
**
(1)租赁影碟**"
**
(2)归还影碟**"
**(3)影碟信息维护**"
**(4)会员信息维护**"
**(5)信息查询系统**"
**(6)影碟类型统计**"
**(7)退出系统**"
**----------------------------------------------------**"
inlinevoidmenu3()
**-------------------影碟信息维护系统-----------------**"
**
(1)添加新影碟**"
**
(2)删除影碟信息**"
**(3)更新影碟信息**"
**(4)返回主菜单**"
inlinevoidmenu4()
**------------------会员信息维护系统------------------**"
**
(1)注册新会员**"
**
(2)删除会员信息**"
**(3)更新会员信息**"
**(4)会员费充值**"
**(5)返回主菜单**"
**---