Word版可编辑-c电影院管理系统的设计精心整理.doc_第1页
Word版可编辑-c电影院管理系统的设计精心整理.doc_第2页
Word版可编辑-c电影院管理系统的设计精心整理.doc_第3页
Word版可编辑-c电影院管理系统的设计精心整理.doc_第4页
Word版可编辑-c电影院管理系统的设计精心整理.doc_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

内蒙古科技大学 课程设计论文题 目:C+课程设计电影院售票管理系统学生姓名:张雪婉学 号:1167119224专 业:通信工程 班 级:2011-2指导教师:郝斌【摘要】1第一章 问题描述1.1 电影院售票管理系统的设计第二章 问题分析2.1 阐述你对问题的理解、解决问题的方案说明2.2 系统功能模块的划分第三章 数据模型3.1 相关数据结构的说明类的设计3.2 程序结构说明,即程序各个部分之间如何协调来完成任务第四章 算法描述4.1 解题算法的设计思路介绍4.2 主要程序代码,加上详细的注释第五章 设计总结第六章 附录【摘要】电影院售票管理系统实现的功能:1、录入信息:且可不定时增加数据。并根据放映时间排序。2、浏览信息:可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。3、查询电影:可按日期或电影名查询。并显示目标的详细信息。 4、售票:售票即为影片预定。可根据输出的可预订信息选择订票,如果该影片已放映,则提示不能订票,如果售票成功,自动跟新座位数。5、退票:影片退订即退票。根据放映时间和系统时间来判断是否能进行退票,并自动更新座位数。其他参数:程序中定义了一个moive结构和一个ticket类,在结构体和类外还定义了seat()和putout()两个函数。moive结构用来存放电影的数据(属性)信息;ticket类实现管理moive结构体里面的数据和系统功能模块;seat()和putout()函数用来辅助结构体和类,简化程序。第一章: 问题描述1.1、设计资料及参数用C+设计一个系统,能提供下列服务:(1)录入放映信息,格式为:放映日期放映时间场次电影名称票价会员折扣剩余座位2011-11-210:301桃姐308782011-11-214:002桃姐30886可不定时地增加放映数据。(2)浏览放映信息,可显示出某日期所有放映信息,如果当前系统时间超过了某电影的放映时间,则显示“此电影放映结束”的提示信息。(3)查询电影:可按日期或电影名查询。 (4)售票和退票功能A:查询电影名。当剩余座位数大于0,并且当前系统时间小于放映时间时才能售票,计算会员折扣,售票后自动更新剩余座位数。 B:退票时,输入退票的电影名和场次,当电影未放映时才能退票,如果以会员折扣购买的电影票,退票按照折扣价退款,退票后自动更新剩余座位数。1.2、设计要求及成果根据系统功能要求,可以将问题解决分为以下步骤:(1)分析系统中的各个实体之间的关系及其属性和行为;(2)根据问题描述,设计系统的类层次;(3)完成类层次中各个类的描述(包括属性和方法);(4)完成类中各个成员函数的定义;(5)完成系统的应用模块;(6)功能调试;(7)提交课程设计报告:完成系统总结报告以及系统使用说明书第二章:问题分析2.1、对问题理解的阐述、解决方案的说明由设计题目知电影院售票管理系统主要由1、录入(input)2、显示(show)3、查询(search)4、售票(sell)5、退票(refund)五个模块组成。对整个系统进行功能分析不难发现,电影院管理系统可以对所有数据的信息进行操作,比如:录入(input)、显示(show)、查询(search)、售票(sell)和退票(refund)。所以需要设计一个moive结构体和ticket类来实现对基本数据的储存和模块功能的实现。考虑到程序实现程序的尽量简洁明了,又增加了时间比较函数(timecmp)、座位判断函数(seat)和信息输出函数(putout)三个函数,对程序实现一定程度的简化。2.2、系统的模块功能流程图如下:运行程序时,需要先输入数据。并定义了时间的输入格式。如(2013-6-21 22:00)。显示数据时,会先跟系统时间比较,如果小于系统当前时间,则输出提示“已播放”。查找时满足要求的按名字查找和按日期查找。找到之后与系统时间比较输出提示,如果没找到,输出提示。查询时分为按电影名和日期两种查询功能。查询时将会出现界面来供操作者选择。订票函数中会先给出可预订的提示,这样可以更有效订票。输入之后会先检查是否播放,若播放则给出提示,退出。若未找到,则同样给出提示。如果票卖光了,仍然有提示,如果电影达到预定要求,则先给出现有座位的预订情况,方便用户高效率订票。当客户输入一座位时程序会判断这个作为是否被预订,如果是,则给出提示;如果no就输出用户需要支付的金额,并记录在座位号对应的数组中。方便退票时退款。订票成功后还会输出现有座位的信息方便核实。退票时,操作者要先输入电影名,若电影名不存在或时间以过,会提示“输入错误”或“电影已播放,无法退票”。若在预定的电影中,还会要求输入退订的座位号,以便进一步确认是否真正该电影。若两道确认都成功通过,就会输出要腿还的金额。其中订票和退票函数都是用大篇幅(一两百行)来构建起强大而有完善的提示功能,已完成快捷而又便利操作。第三章:数据模型3.1相关数据结构和类的说明struct moive /定义moive结构体,存放数据int year;/年int month;/月int day;/日int hour;/时int minute;/分int datetime5;/装电影放映时间,方便比较与系统时间比较 int num;/场次string name;/电影名float price;/票价float discount;/折扣int rest;/余票float seat1010;/初始值都为0,只在预定后改变其值;class ticket/定义ticket类private:moive ticN;/存电影数据的数组int len;/现有电影数量public:ticket();/构造函数ticket();/析构函数friend void seat(int i);/把seat函数定义为类ticket的友元函数friend void putout(int i);/把putout函数定义为类ticket的友元函数void input();/录入void show();/显示void search();/查找void sell();/订票void refund();/退票;tick;在类中把seat()和putout()函数定义为类的友元函数,实现类外的函数访问类内的成员,这样可以源代码的篇章幅度,实现在一定程度上简化程序。私有数据成员moive ticN,便于操作数据。数据组织结构图:3.2 程序结构说明,即程序各个部分之间如何协调来完成任务程序的主要实现过程是在ticket类 中定义的成员函数和友元函数来实现完成,并且在类外实现。这样方便了对数据进行操作。并且定义了一个全局的比较函数timecmp,可以比较两个时间数组的大小;函数seat实现判断某一座位是否被预定;函数putout实现对电影信息的输出。这三个函数在程序中用途很广泛,在整个程序中多次有时间的比较,座位的检索,电影的信息的输出,当用到某一函数时,直接在模块调用即可,不必多次编写,实现程序的简化。其中程序总很多代码是重复用到的,但是没有写成函数来调用有两点原因。首先如果写成函数调用的话会降低程序的可读性,其次写成函数的话,代码就固定下来了,使得程序不够灵活。所以在程序不必要的地方,就用代码来代替函数调用。举个例子说,在修改,删除,订票,退票中都会用到按电影名查找。可是没有单独把按电影名查找单独写成函数来调用,是因为在按电影名查找会输出很多详细的电影信息和提示信息。这样也不便于调用函数。第四章:算法的描述4.1 解题算法的设计思路介绍timecmp函数是用来比较日期时间函数,它需要先把两个时间装入数组再传进来地址,然后从年月日时分进行比较。如果有大小区分,直接返回。int timecmp(int a,int b,int n)int i; for(i=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;Seat函数作为检索某一座位是否已被预订,因为seatmn=0,即初始化都为0。二当该座位被预订后就会赋予座位号,所以用两层for循环,把所有的座位都检索了一遍。在输出,就一下子看出那些座位被预定,那些没有。因为seat函数是类外函数,不能直接操作类ticket的成员,所以要在类中写入“friend voidseat(int i);”即定义为类的友元函数。若不加,编译将会出错。void seat(int i) for(int m=0;m10;m+) coutendlt;for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; putout函数是便于把电影的属性(数据信息)输出,因为tic是类中的数据成员且又是结构体moive类型的变量,故要用两层引用。但putout函数也是全局的类外函数,要想访问类ticket中的成员,也需把其定义为类的友元函数。不然编译阶段会出错。void putout(int i) couttick.tici.year-tick.tici.month-tick.tici.dayt; couttick.tici.hour:tick.tici.minutet; tt; couttick.tici.pricettick.tici.discountttick.tici.restendl;4.2 主要程序代码和运行结果图主函数,即选择菜单:char as; while(1) coutntttt欢迎进入管理系统nn; coutntttt1.录入影片; coutntttt2.显示影片; coutntttt3.查找影片; coutntttt4.售票; coutntttt5.退票endl; coutas; switch(as) case 1:tick.input();break; case 2:tick.show();break; case 3:tick.search();break; case 4:tick.sell();break;case 5:tick.refund();break;default :system(pause); return;/任意键继续 录入电影信息:void ticket:input() system(cls);/清屏 char ch;/接受日期中的字符-或: coutnnntttt录入模块nnnendl; for(int i=tick.len;iN;i+) couttick.tici.yearchtick.tici.monthchtick.tici.day; couttick.tici.hour;cinch;cintick.tici.minute; tick.tici.datetime0=tick.tici.year; tick.tici.datetime1=tick.tici.month; tick.tici.datetime2=tick.tici.day;tick.tici.datetime3=tick.tici.hour;tick.tici.datetime4=tick.tici.minute; couttick.tici.num; ; couttick.tici.price; couttick.tici.discount; tick.tici.rest=100; for(int m=0;m10;m+) for(int n=0;n10;n+)tick.tici.seatmn=0; tick.len+;/个数加1 coutendl; coutch; if(ch=y | ch=Y | ch=n | ch=N) break; else cout输入错误请重新输入:; if(ch=n | ch=N) break; 显示电影信息:void ticket:show()system(cls);/清屏coutnnntttt显示模块nnnendl;cout 所有电影信息如下:endl;cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; for(int i=0;itick.len;i+) r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 ,返回值给r putout( i);/调用putout函数 if(r=0) couta(已播放!) endl; else coutendl; 查询电影:void ticket:search()char flag;int i;int k=0;/标记找到的记录 system(cls);/清屏 coutnnntttt查找模块nnnendl; while(flag!=1&flag!=2) coutendltttt1.按影片名查找; coutendltttt2.按日期查找; coutendlflag; if(flag!=1&flag!=2) coutnatttt选择有误!请选择正确的查找模式。endl; 【按电影名查询】if(flag=1) string na;int j=1;coutna;for(i=0;itick.len;i+)if(=na)/找到 k+;/找到的记录数 if(j=1) cout n 查找结果如下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; seat(i);/调用seat函数if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;system(pause);/任意键继续 return;【按日期查询】elsechar ch;int temp3; couttemp0chtemp1chtemp2;int j=1;for(i=0;itick.len;i+)/遍历 if(timecmp(tick.tici.datetime,temp,3)=0)/找到 k+;/找到的记录数 if(j=1) coutn 查找结果如下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s=0) couta(已播放!) endl; else coutendl; coutendltttt当前预订情况; seat(i);/调用seat函数 coutendl;if(j!=1)coutendl;system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatttt未找到结果!endl;system(pause);/任意键继续 return;售票:void ticket:sell()system(cls);/清屏 coutnnntttt售票模块nnnendl; cout 可预订的电影信息如下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r,i; int k=0;/标记可供预定的影片数量 for(i=0;i0) k+; putout( i);/调用putout函数 if(i=tick.len&k=0) coutnatttt暂无可供预定的影片!endl;system(pause);/任意键继续 return;string na;coutendlna; k=0;/再次做标记for(i=0;itick.len;i+) if(=na)/找到 k+;/找到的记录数 int j=1; if(j=1) coutn 查找结果如下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int s; s=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(s=0) coutanttt此电影已播放,无法订票! endl;system(pause);/任意键继续 return; coutendltttt当前预订情况; int m,n; seat(i);/调用seat函数 coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn=0&tick.tici.rest!=0) coutendla; if(a!=N&a!=n) tick.tici.seatmn=tick.tici.price*tick.tici.discount/10; else tick.tici.seatmn=tick.tici.price; tick.tici.rest-; coutendltttt您需要支付:tick.tici.seatmn元。endl; coutendltttt您的座位号是:seatnumendl; coutendltttt预订成功!; seat(i);/调用seat函数coutendl;system(pause);/任意键继续 return; else if(tick.tici.rest=0) coutendlatttt对不起,没有票了!; system(pause);/任意键继续 return; else if(tick.tici.seatmn!=0) coutendlatt对不起,无此座位或此座位已被预订!; system(pause);/任意键继续 return; if(i=tick.len&k=0)coutnatttt没有找到您要预定的电影!endl;system(pause);/任意键继续 return;退票:void ticket:refund()system(cls);/清屏 coutnnntttt退票模块nnnendl; string na; int i;int k=0;/标记修改数量 coutna;for(i=0;itick.len;i+) if(=na)/找到 k+;/找到的记录数 int j=1;if(j=1) coutn 查找结果如下:endl; cout日-期t时-间t场次t电影名称t票价t折扣t余票endltm_year+1900,tim-tm_mon+1,tim-tm_mday,tim-tm_hour,tim-tm_min; int r; r=timecmp(tick.tici.datetime,array,5);/与系统时间比较 if(r=0) coutan此电影已播放,不能申请退票! endl;system(pause);/任意键继续 return; elsecoutendltttt当前预订情况;int m,n; seat(i);/调用seat函数 coutendlseatnum; if(seatnum100|seatnum1) coutendlatt对不起,无此座位!; system(pause);/任意键继续 return; m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tici.seatmn!=0) tick.tici.rest+; coutendltttt您要退订座位号是:seatnumendl; coutendltttt退给您:tick.tici.seatmn元。endl; coutendltttt退订成功!;tick.tici.seatmn=0; else coutendlattn对不起,此座位未预订,无法退票!n; system(pause);/任意键继续 return; seat(i);/调用seat函数 coutendl; system(pause);/任意键继续 return;if(i=tick.len&k=0)coutnatt没有找到您要退定的电影!endl;system(pause);/任意键继续 return;第五章:设计总结这次的设计,让我体会深刻,总结如下:开始拿到题目,感觉好难,因为在课堂上学到的都是关于c+的理论知识,只是对类、构造函数、析构函数、继承和派生、重载、虚函数等的讲解。都没涉及过实例的解析。写起程序根本不知道从何入手。自己就去图书馆找资料,看了一个上午,慢慢有点眉目,就开始写程序。首先,是数据的储存问题。本来打算只定义一个结构体来装载数据就行,其他的都可以变成全局函数,在主函数里调用即可。但慢慢发现这样以来,就对数据的访问带来诸多不变,还有定义大量的变量。不过网上有大量实例参考,最后还是有定义了一个类,在类里间接地引用结构体里的数据,避免了大量的参数之间的数值传递,增加程序的可读性。在一点就是要大量实践,平常的理论学习,并不代表你会编、会运用。在这次的编写中,特别在构造函数和数据的初始化上没少出错,没法还得回归课本,看了好几遍,才知道怎样修改。最后设计了一个结构体,一个类,在类中定义5个函数,3个全局函数,实现了基本功能。同时增加了一些修改排序功能。第六章:附录#include#include#include#include#define N 50/可存电影总数 using namespace std;/标准命名空间struct moive /定义moive结构体,存放数据int year;/年int month;/月int day;/日int hour;/时int minute;/分int datetime5;/装时间 ,方便比较 int num;/场次string name;/电影名float price;/票价float discount;/折扣int rest;/余票float seat1010;/初始值都为0,只在预定后改变其值;/class ticket/定义ticket类private:moive ticN;/存电影的数组int len;/现有电影数量public:ticket();/构造函数ticket();/析构函数friend void seat(int i);/把seat函数定义为类ticket的友元函数friend void putout(int i);/把putout函数定义为类ticket的友元函数void input();/录入void show();/显示void search();/查找void sell();/订票void refund();/退票;tick;/构造函数和析构函数的实现ticket:ticket();ticket:ticket();/timecmp函数是用来比较日期时间函数,它需要先把两/个时间装入数组再传进来地址,然后从年月日时分进行比较。int timecmp(int a,int b,int n)int i; for(i=0;ibi)return 1;if(aibi)return -1;if(i=n)return 0;/seat函数的功能:查看某一座位是否有人void seat(int i) for(int m=0;m10;m+) coutendlt;for(int n=0;n10;n+) cout; if(tick.tici.seatmn!=0) cout有人; else cout无人; cout; /putout函数实现的功能:输出对象tici的数据void putout(int i) couttick.tici.year-tick.tic

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论