1、影碟出租管理系统1112020年4月19日文档仅供参考,不当之处,请联系改正。实验一:需求分析系统的名称 影碟出租管理系统 可行性分析 经过对该影碟出租店的各个方面进行了具体的了解之后,现对该影碟出租店开发影碟出租管理系统的可行性进行分析。(1)技术上可行:该系统所需硬件设备,市场上销售且价格较低,软件上,操作系统采用Windows系列操作系统,数据库管理系统采用VisualBasic,这些软件在MIS开发中已被大量应用,技术上都比较成熟。因此在技术上是可行的。(2)经济上可行:由于学校该影碟出租店已经到了一定的规模需要采用计算机来对影碟出租店的业务进行管理,因此对开发影碟出租管理系统大力支持
2、,开发经费没有问题。(3)管理上可行:该影碟出租店原先主要就是以会员为主要服务对象,每位会员均收集信息 在对世面上的影碟出租店进行了初步的了解后,发现其业务主要是集中在影碟的管理和碟片的出租归还上。对影碟的管理工作量较大,采用手工的方式还容易出错,而且不能满足顾客对影碟的详细信息的查询功能。在现有的影碟出租中对会员的管理也很重要,传统的登记方式不但费时而且不能对其出租日志进行系统的管理,造成了不必要的经济损失。 影碟出租信息系统的建立,需要进行用户的需求调查与分析,以确定系统目标,提出解决问题的详细方案,这是系统建设的重要环节。 该影碟出租店规模相对较小,但要有着完善的影碟信息,对每一张影碟都
3、要有详细的记录信息,功能上对系统的需求是全面的。因此对用户的需求可分为四个方面:一方面是影碟出租店工作人员经过计算机来管理各类影碟,分类编号,调整影碟结构,增加影碟库存,适应顾客的需求;二方面是顾客们能经过计算机来查询浏览影碟出租店中的碟片,来确定自已需要的影碟,为租赁做好准备;三方面是工作人员对顾客们的会员的注册,注册能作好全面的掌握,及时得到每个会员证的当前状态和历史租赁记录;四方面也是碟出租店的核心工作,对影碟的租赁管理。 这四个方面形成了碟出租店一个工作整体,采用计算机自动化信息处理,可方便快捷地共享信息、交流信息,高效地协同工作。在软、硬件方面对系统的需求,软件要求易学,界面友好,容
4、易掌握,能够很简单方便的管理各种影碟信息。硬件的配置要求不能太高,这样能够很好的适应当前的影碟出租店。在开发方式上对系统的需求,由于影碟出租店的商业利益较小,因此系统设计开发的周期要短,在短时间内完成,减少开发成本,提高开发效率,方便、简单、实用作为系统开发的指导思想。功能需求影碟租赁主要由影碟管理员、影碟、借阅信息顾客四大部分组成。影碟管理员主要是负责对影碟尽心组织整理,对出租的影碟的信息进行记录。影碟要进行多个备份,以满足多个顾客的需求。借阅信息是对用户的借阅情况进行记录。顾客是租借影碟,并在借后进行归还,缴纳租金。影碟管理员与影碟的关系是调配关系,顾客与影碟的关系是使用关系,影碟管理员与
5、顾客的关系是服务关系。借阅信息与影碟的关系是包含关系,借阅信息与顾客的关系是记录关系。一个比较理想的系统,应该满足以下要求:简单性、实用性系统应该尽可能设计的比较简单,各功能实现清晰明了,同时应考虑实用性避免不必要的复杂化。结构简单尽可能使处理过程缩短,处理费用减少,系统收益增高。同时也利于使用者掌握和维护。完整性系统是作为一个统一的整体而存在的,因此系统的功能要保持完整,数据采用要统一,传递语言要一致。灵活性系统对外界环境的变化应有较强的适应力,即便在条件变化之后,仍能提供详尽的具有现实意义的有关信息。可靠性系统必须是可靠的,只有这样,才能保证系统的高质量,才能得到使用者的信任。经济性系统应
6、该给使用者带来相应的利益,提供更准确、更全面、更及时的信息,方便大大提高管理的效率。系统要实现哪些功能,每个功能的具体描述1) 新片上架:录入碟片片名、编号等各种信息。并实现片子的增加、删除、修改的基本功能。2) 碟片查询:对片子进行分类查询的功能。3) 碟片借阅:对借出的片子进行管理,对租借的客户和所借出的片子的信息进行记录,对碟片的借阅进行普通客户和会员客户分类管理。4) 碟片归还:对出租的片子进行金额结算,对普通客户和会员客户进行分类管理。数据字典 E-R图(侯璠)数据流图思考题1、需求分析在软件开发中真的有那么重要吗? 在软件工程中,需求分析指的是在建立一个新的或改变一个现存的电脑系统
7、时描写新系统的目的、范围、定义和功能时所要做的所有的工作。需求分析是软件工程中的一个关键过程。在这个过程中,系统分析员和软件工程师确定顾客的需要。只有在确定了这些需要后她们才能够分析和寻求新系统的解决方法。在软件工程的历史中,很长时间里人们一直认为需求分析是整个软件工程中最简单的一个步骤,但在过去十年中越来越多的人认识到它是整个过程中最关键的一个过程。假如在需求分析时分析者们未能正确地认识到顾客的需要的话,那么最后的软件实际上不可能达到顾客的需要,或者软件无法在规定的时间里完工。需求分析是一项重要的工作,也是最困难的工作。该阶段工作有以下特点:(1)用户与开发人员很难进行交流在软件生存周期中,
8、其它四个阶段都是面向软件技术问题,只有本阶段是面向用户的。需求分析是对用户的业务活动进行分析,明确在用户的业务环境中软件系统应该做什么。可是在开始时,开发人员和用户双方都不能准确地提出系统要做什么?。因为软件开发人员不是用户问题领域的专家,不熟悉用户的业务活动和业务环境,又不可能在短期内搞清楚;而用户不熟悉计算机应用的有关问题。由于双方互相不了解对方的工作,又缺乏共同语言,因此在交流时存在着隔阂。(2)用户的需求是动态变化的对于一个大型而复杂的软件系统,用户很难精确完整地提出它的功能和性能要求。一开始只能提出一个大概、模糊的功能,只有经过长时间的重复认识才逐步明确。有时进入到设计、编程阶段才能
9、明确,更有甚者,到开发后期还在提新的要求。这无疑给软件开发带来困难。(3)系统变更的代价呈非线性增长需求分析是软件开发的基础。假定在该阶段发现一个错误,解决它需要用一小时的时间,到设计、编程、测试和维护阶段解决,则要花2.5、5、25、100倍的时间。因此,对于大型复杂系统而言,首先要进行可行性研究。开发人员对用户的要求及现实环境进行调查、了解,从技术、经济和社会因素三个方面进行研究并论证该软件项目的可行性,根据可行性研究的结果,决定项目的取舍。 2、分析系统流程图,程序流程图和数据流图的区别和各自的特点。系统流程图是概括的描绘物理系统的传统工具。它的基本思想是用图形符号以黑盒子形式描绘组成系
10、统的每个部件(程序、文档、数据库、人工过程等)。系统流程图表示的是数据在系统各部件之间流动的情况,而不是对数据加工处理的控制过程,因此尽管系统流程图的某些符号和程序流程图的符号形式相同,可是她却是物理数据流图而不是程序流程图。数据流图是结构化分析方法中使用的工具,它以图形的方式描绘数据在系统中流动和处理的过程,由于它只反映系统必须完成的逻辑功能,因此它是一种功能模型。在结构化开发方法中,数据流图是需求分析阶段产生的结果。3、 怎样写合乎规范的数据流图和数据词典画数据流图原则:(1)数据流图上所有图形符号只限于前述四种基本图形元素。(2) 顶层数据流图上的数据流必须封闭在外部实体之间。(3) 每
11、个处理框至少有一个输入数据流和一个输出数据流。(4) 在数据流图中,需按层给处理框编号。表明该处理所处层次及上下层的亲子关系。(5) 规定任何一个数据流子图必须与它上一层的一个处理对应,两者的输入数据流和输出数据流必须一致。此即父图与子图的平衡。(6) 图上每个元素都必须有名字。写数据字典:数据字典由下列四类元素定义组成(1) 数据流(2) 数据流分量即数据元素(3) 数据存储(4) 处理实验二:系统设计层次图结构图归还管理模块程序流程图 盒图 Jackson图租借管理模块程序流程图2.2盒图 2.3 jackson图 思考题 1、如何分辨事务中心数据流和变换中心数据流? 2、设计软件结构图时
12、,如何把握内聚和耦合的度?(1) 尽量使用数据耦合,少用控制耦合和特征耦合,限制公共耦合的范围,完全不用内容耦合(2) 功能内聚10分、顺序内聚9分、通信内聚7分、过程内聚5分、时间内聚3分、逻辑内聚1分、偶然内聚0分 3、设计程序流程图时,循环嵌套以几层为好?4、 怎么判断盒图的正确性?实验三: 编码实现2.2类 1.CD类:该类拥有私有数据成员CDID(碟片编号)、CDname(碟片名称)、mainstar(主演明星)、country(国家)、style(碟片类型)、director(导演)、company(制作公司)、lend(借出数量)、inventory(库存量)。成员函数包含有参构
13、造函数、重载流插入提取运算符、拷贝复制构造函数以及获取私有成员函数和更改私有成员函数,具体类信息如下: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=无,string mst=无,string cot=无
14、,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);/重载提取运算符friend ofstream
15、& 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;string getmembername(
16、)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个会员信息)、CD zu_dip10010(每个会员租借的碟片信息,且规定每
17、人最多只能租借10种影碟)、CD dip100(定义能存100种碟片信息)、int category(用来做影碟的下标)、int kind(用来做会员的下标)、int lendnumber100(记录每个会员租借的碟片种类)、string time1001020(用来记录每个会员租借的每一种碟片对应的租借时间信息)。成员函数主要有有参构造函数以及各种功能函数,详细信息如下所示:class caozuoprivate:member hy100; /定义能存100个会员信息CD zu_dip10010; /每个会员对应租借的碟片信息,且规定最多只能租10种影碟CD dip100; /定义能存100
18、种碟片信息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 put_all_dp();/输出全部影碟信
19、息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();/读取借碟片种类数据void r
20、ead_rent_cd();/读取已租出碟片的信息void read_rent_time();/读取已租碟片的时间信息;2.3类的分析在CD类中,主要就是碟片的基本信息,包括碟片的编号、名称、导演等等。在member类中就是会员的基本信息,主要就是会员的ID、姓名、性别和账户余额这些信息。在caozuo类中就是把CD类和member类作为它的私语成员然后集中处理她们之间的关系,主菜单里的各种功能也全部在该类中定义实现。在caozuo类中,定义了类数组member hy100,其功能作用是能够存储100个会员信息。CD类数组 CD dip100,其功能作用是能够存储100种碟片信息。另一个CD类
21、二维数组CD zu_dip10010;其是与会员类数组绑定在一起的。例如hy5对应着zu_dip5i,i代表会员hy5借的第几种碟片,且其上线是10张。Member类中的私有成员category是用来标记当前共入库的碟片的种类,用来做影碟CD类数组的下标。私有成员函数kind是用来标记当前已注册的会员数量,即用来做会员类数组的下标。类中定义的整形数组int lendnumber100,是用来记录每个会员租借的碟片种类,例如lendnumber5=4,就是会员hy5租借了4种碟片。而且lendnumber10也就是用来标记zu_dip10010中的列数的,即做列的下标。在caozuo类数组中还定
22、义了一个string字符型二维数组string time1001020,其中100是和会员hy100中的100是一一对应的,10是和zu_dip10010中的10是一一对应的,20是字符长度。该string字符型二维数组主要是用来记录每个会员租借的每种碟片的租借时间信息。caozuo类组合了CD类和member类,使程序能够灵活地处理会员和碟片之间的关系。而该类中的成员函数也主要都是在处理CD类和member之间的关系,最具有体现性的就 是租赁函数和碟片归还函数。3详细设计 1.类型统计功能:进入该功能,程序使用者能够查看某种类型的碟片信息。信息存储功能:凡在执行程序中涉及到系统内存改变的地方
23、都要把改变的信息写入文件保存起来,以达到存储功能。例如碟片的写入文件操作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
24、.界面设计 inline void 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;cou
25、t* (1)添加新影碟 *endl;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 menu
26、5()cout*endl;cout*-信息查询系统-*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(); /系统自动读取文件中每个会
27、员借的碟片种类信息,并放到系统内存中a.read_rent_cd(); /系统自动读取文件中的已租出碟片信息,并放到系统内存中a.read_rent_time(); /系统自动读取文件中的已租出的每张碟片对应租借的时间信息,并放到系统内存中模块设计/-碟片查询模块-int check(void)/碟片查询 FILE *a;/文件指针 char cd_name10; system(cls);/清屏a=fopen(cd.txt,r); /只读方式打开文件for(int i = 0; i cd_number; i+) fread(&CDi, sizeof(struct cd),1, a);/把a中一
28、个cd结构体赋给CDi printf(请输入碟片名:n); scanf(%s,cd_name); getchar();/取回车符for(i = 0; i cd_number; i+) if(strcmp(CDi.film_name, cd_name)=0) /若影片名相同 if(CDi.n=1) /借阅标记为1 printf(可借阅n); fclose(a);return 1; if(CDi.n=0)/借阅标记为0 printf(已借出n); fclose(a); return 1; for(i = 0; i cd_number; i+) if(strcmp(CDi.film_name, cd
29、_name)!=0) /若影片名不同 printf(无此片n); fclose(a); return 1; fclose(a);/关闭a文件return 0; /返回菜单/-会员添加模块-void useradd(void)/添加会员 system(cls);/清屏FILE *a; /文件指针printf(请输入姓名:n); scanf(%s,RENTuser_number.username); getchar();a = fopen(rent.txt,ab);/追加方式打开fwrite(&RENTuser_number, sizeof(struct rent), 1, a);/把a中一个re
30、nt结构体赋给RENTuser_numberprintf( 添加成功 n); user_number+; fclose(a); /-碟片借阅模块-int rent(void) /碟片借阅 system(cls);/清屏char user_name10; char cd_name10; FILE *a;/文件指针 FILE *b;/文件指针 int k=0; char choice; a = fopen(rent.txt,r);/只读方式打开 b = fopen(cd.txt,r);/只读方式打开 for (int i = 0; i cd_number; i+) fread(&CDi, size
31、of(struct cd),1,b);/把b中一个cd结构体赋给CDifor (i = 0; i user_number; i+) fread(&RENTi,sizeof(struct rent),1,a);/把a中一个rent结构体赋给RENTi printf(请输入借阅人:n); scanf(%s,user_name);getchar();a: printf(请输入碟片名:n); scanf(%s,cd_name); getchar(); printf(请再次输入碟片名:n); scanf(%s, RENTi.film_namek); k+; getchar(); printf(此人已借%
32、d张n,k); for (int j = 0; j cd_number; j+) if(strcmp(CDj.film_name, cd_name)=0)/如果两个名相同 CDj.n=0; /修改借阅标记 printf(请输入借出日期:n); scanf(%d,&RENTi.rent_time); getchar(); printf(A: 再接一张n); printf(B: 退出n); scanf(%c,&choice); getchar();switch(choice)/多条件选择判断 case A: goto a; break; case B: return 0; fclose(a); f
33、close(b); return 0; /-碟片归还模块-void returnn (void) /碟片归还 system(cls);/清屏char user_name10; char cd_name10; FILE *a; FILE *b; int i; int j; int k = 0; char choice; a = fopen(rent.txt,r);/只读方式打开b = fopen(cd.txt,r);/只读方式打开 for (i = 0; i cd_number; i+) fread(&CDi, sizeof(struct cd), 1, b);/把b中一个cd结构体赋给CDi for (i = 0; i user_number; i+)