收藏 分销(赏)

c电影院标准管理系统的设计.doc

上传人:天**** 文档编号:2882058 上传时间:2024-06-08 格式:DOC 页数:51 大小:566.54KB 下载积分:14 金币
下载 相关 举报
c电影院标准管理系统的设计.doc_第1页
第1页 / 共51页
c电影院标准管理系统的设计.doc_第2页
第2页 / 共51页


点击查看更多>>
资源描述
内蒙古科技大学 课程设计论文 题 目:C++课程设计 ——电影院售票管理系统 学生姓名:张雪婉 学 号: 专 业:通信工程 班 级:-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)录入放映信息,格式为: 放映日期 放映时间 场次 电影名称 票价 会员折扣 剩下座位 -11-2 10:30 1 桃姐 30 8 78 -11-2 14:00 2 桃姐 30 8 86 可不定时地增加放映数据。 (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、系统模块功效步骤图以下: 运行程序时,需要先输入数据。并定义了时间输入格式。如(-6-21 22:00)。 显示数据时,会先跟系统时间比较,假如小于系统目前时间,则输出提醒“已播放”。 查找时满足要求按名字查找和按日期查找。找到以后和系统时间比较输出提醒,假如没找到,输出提醒。 查询时分为按电影名和日期两种查询功效。查询时将会出现界面来供操作者选择。 订票函数中会先给出可预订提醒,这么能够更有效订票。输入以后会先检验是否播放,若播放则给出提醒,退出。若未找到,则一样给出提醒。假如票卖光了,仍然有提醒,假如电影达成预定要求,则先给出现有座位预订情况,方便用户高效率订票。当用户输入一座位时程序会判定这个作为是否被预订,假如是,则给出提醒;假如no就输出用户需要支付金额,并统计在座位号对应数组中。方便退票时退款。订票成功后还会输出现有座位信息方便核实。 退票时,操作者要先输入电影名,若电影名不存在或时间以过,会提醒“输入错误”或“电影已播放,无法退票”。若在预定电影中,还会要求输入退订座位号,方便深入确定是否真正该电影。若两道确定全部成功经过,就会输出要腿还金额。 其中订票和退票函数全部是用大篇幅(一两百行)来构建起强大而有完善提醒功效,已完成快捷而又便利操作。 第三章:数据模型 3.1相关数据结构和类说明 struct moive //定义moive结构体,存放数据 { int year;//年 int month;//月 int day;//日 int hour;//时 int minute;//分 int datetime[5];//装电影放映时间,方便比较和系统时间比较 int num;//场次 string name;//电影名 float price;//票价 float discount;//折扣 int rest;//余票 float seat[10][10];//初始值全部为0,只在预定后改变其值 }; class ticket//定义ticket类 { private: moive tic[N];//存电影数据数组 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 tic[N],便于操作数据。 数据组织结构图: 3.2 程序结构说明,即程序各个部分之间怎样协调来完成任务 程序关键实现过程是在ticket类 中定义组员函数和友元函数来实现完成,而且在类外实现。这么方便了对数据进行操作。而且定义了一个全局比较函数timecmp,能够比较两个时间数组大小;函数seat实现判定某一座位是否被预定;函数putout实现对电影信息输出。这三个函数在程序中用途很广泛,在整个程序中数次有时间比较,座位检索,电影信息输出,当用到某一函数时,直接在模块调用即可,无须数次编写,实现程序简化。 其中程序总很多代码是反复用到,不过没有写成函数来调用有两点原因。首先假如写成函数调用话会降低程序可读性,其次写成函数话,代码就固定下来了,使得程序不够灵活。所以在程序无须要地方,就用代码来替换函数调用。举个例子说,在修改,删除,订票,退票中全部会用到按电影名查找。可是没有单独把按电影名查找单独写成函数来调用,是因为在按电影名查找会输出很多具体电影信息和提醒信息。这么也不便于调用函数。 第四章:算法描述 4.1 解题算法设计思绪介绍 timecmp函数是用来比较日期时间函数,它需要先把两个时间装入数组再传进来地址,然后从年月日时分进行比较。假如有大小区分,直接返回。 int timecmp(int a[],int b[],int n) { int i; for(i=0;i<n;i++) { if(a[i]>b[i]) { return 1; } if(a[i]<b[i]) { return -1; } } if(i==n) { return 0; } } Seat函数作为检索某一座位是否已被预订,因为seat[m][n]=0,即初始化全部为0。二当该座位被预订后就会给予座位号,所以用两层for循环,把全部座位全部检索了一遍。在输出,就一下子看出那些座位被预定,那些没有。 因为seat函数是类外函数,不能直接操作类ticket组员,所以要在类中写入“friend voidseat(int i);”即定义为类友元函数。若不加,编译将会犯错。 void seat(int i) { for(int m=0;m<10;m++) { cout<<endl<<"\t"; for(int n=0;n<10;n++) { cout<<"["; if(tick.tic[i].seat[m][n]!=0) { cout<<"有些人"; } else { cout<<"无人"; } cout<<"]"; } } } putout函数是便于把电影属性(数据信息)输出,因为tic[]是类中数据组员且又是结构体moive类型变量,故要用两层引用。但putout函数也是全局类外函数,要想访问类ticket中组员,也需把其定义为类友元函数。不然编译阶段会犯错。 void putout(int i) { cout<<tick.tic[i].year<<"-"<<tick.tic[i].month<<"-"<<tick.tic[i].day<<"\t"; cout<<tick.tic[i].hour<<":"<<tick.tic[i].minute<<"\t"; cout<<tick.tic[i].num<<"\t"<<tick.tic[i].name<<"\t\t"; cout<<tick.tic[i].price<<"\t"<<tick.tic[i].discount<<"\t"<<tick.tic[i].rest<<endl; } 4.2 关键程序代码和运行结果图 主函数,即选择菜单: char as; while(1) { cout<<"\n\t\t\t\t欢迎进入管理系统\n\n"; cout<<"\n\t\t\t\t1.录入影片"; cout<<"\n\t\t\t\t2.显示影片"; cout<<"\n\t\t\t\t3.查找影片"; cout<<"\n\t\t\t\t4.售票"; cout<<"\n\t\t\t\t5.退票"<<endl; cout<<"输入数字 实施对应功效:"; cin>>as; 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;//接收日期中字符-或: cout<<"\n\n\n\t\t\t\t《录入模块》\n\n\n"<<endl; for(int i=tick.len;i<N;i++) { cout<<"\n请输入日期如(-11-11):"; cin>>tick.tic[i].year>>ch>>tick.tic[i].month>>ch>>tick.tic[i].day; cout<<"\n请输入放映时间如(12:30):"; cin>>tick.tic[i].hour; cin>>ch; cin>>tick.tic[i].minute; tick.tic[i].datetime[0]=tick.tic[i].year; tick.tic[i].datetime[1]=tick.tic[i].month; tick.tic[i].datetime[2]=tick.tic[i].day; tick.tic[i].datetime[3]=tick.tic[i].hour; tick.tic[i].datetime[4]=tick.tic[i].minute; cout<<"\n请输入场次:"; cin>>tick.tic[i].num; cout<<"\n请输入电影名称:"; cin>>tick.tic[i].name; cout<<"\n请输入电影票价:"; cin>>tick.tic[i].price; cout<<"\n请输入会员折扣:"; cin>>tick.tic[i].discount; tick.tic[i].rest=100; for(int m=0;m<10;m++) { for(int n=0;n<10;n++) tick.tic[i].seat[m][n]=0; } tick.len++;//个数加1 cout<<endl; cout<<"是否继续录入?(y/n):"; while(1) { cin>>ch; if(ch=='y' || ch=='Y' || ch=='n' || ch=='N') break; else cout<<"输入错误请重新输入:"; } if(ch=='n' || ch=='N') break; } } 显示电影信息: void ticket::show() { system("cls");//清屏 cout<<"\n\n\n\t\t\t\t《显示模块》\n\n\n"<<endl; cout<<" 全部电影信息以下:"<<endl; cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; time_t t; struct tm *tim;//时间变量,已包含在头文件库函数ctime中 t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int r; for(int i=0;i<tick.len;i++) { r=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 ,返回值给r putout( i);//调用putout函数 if(r<=0) { cout<<"\a(已播放!)" <<endl; } else { cout<<endl; } } } 查询电影: void ticket::search() { char flag; int i; int k=0;//标识找到统计 system("cls");//清屏 cout<<"\n\n\n\t\t\t\t《查找模块》\n\n\n"<<endl; while(flag!='1'&&flag!='2') { cout<<endl<<"\t\t\t\t1.按影片名查找"; cout<<endl<<"\t\t\t\t2.按日期查找"; cout<<endl<<"\t\t\t\t请输入查找模式:"; cin>>flag; if(flag!='1'&&flag!='2') { cout<<"\n\a\t\t\t\t选择有误!请选择正确查找模式。"<<endl; } } 【按电影名查询】 if(flag=='1') { string na; int j=1; cout<<"\n请输入影片名:"; cin>>na; for(i=0;i<tick.len;i++) { if(tick.tic[i].name==na)//找到 { k++;//找到统计数 if(j=1) { cout<<"\ n 查找结果以下:"<<endl; cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; } j++; putout( i);//调用putout函数 time_t t; struct tm *tim; t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int r; r=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 if(r<=0) { cout<<"\a(已播放!)" <<endl; } else { cout<<endl; } cout<<endl<<"\t\t\t\t目前预订情况"; seat(i);//调用seat函数 } } if(j!=1) { cout<<endl; system("pause");//任意键继续 return; } if(i==tick.len&&k==0) { cout<<"\n\a\t\t\t\t未找到结果!"<<endl; system("pause");//任意键继续 return; } } 【按日期查询】 else { char ch; int temp[3]; cout<<"\n请输入放映日期:"; cin>>temp[0]>>ch>>temp[1]>>ch>>temp[2]; int j=1; for(i=0;i<tick.len;i++)//遍历 { if(timecmp(tick.tic[i].datetime,temp,3)==0)//找到 { k++;//找到统计数 if(j==1) { cout<<"\n 查找结果以下:"<<endl; cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; } j++; putout( i);//调用putout函数 time_t t; struct tm *tim;//时间类型结构体 t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int s; s=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 if(s<=0) { cout<<"\a(已播放!)" <<endl; } else { cout<<endl; } cout<<endl<<"\t\t\t\t目前预订情况"; seat(i);//调用seat函数 cout<<endl; } } if(j!=1) { cout<<endl; system("pause");//任意键继续 return; } if(i==tick.len&&k==0) { cout<<"\n\a\t\t\t\t未找到结果!"<<endl; system("pause");//任意键继续 return; } } } 售票: void ticket::sell() { system("cls");//清屏 cout<<"\n\n\n\t\t\t\t《售票模块》\n\n\n"<<endl; cout<<" 可预订电影信息以下:"<<endl; cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; time_t t; struct tm *tim; t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int r,i; int k=0;//标识可供预定影片数量 for(i=0;i<tick.len;i++) { r=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 if(r>0) { k++; putout( i);//调用putout函数 } } if(i==tick.len&&k==0) { cout<<"\n\a\t\t\t\t暂无可供预定影片!"<<endl; system("pause");//任意键继续 return; } string na; cout<<endl<<"请输入要预订影片名:"; cin>>na; k=0;//再次做标识 for(i=0;i<tick.len;i++) { if(tick.tic[i].name==na)//找到 { k++;//找到统计数 int j=1; if(j=1) { cout<<"\n 查找结果以下:"<<endl; cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; } j++; putout( i);//调用putout函数 time_t t; struct tm *tim; t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int s; s=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 if(s<=0) { cout<<"\a\n\t\t\t此电影已播放,无法订票!" <<endl; system("pause");//任意键继续 return; } cout<<endl<<"\t\t\t\t目前预订情况"; int m,n; seat(i);//调用seat函数 cout<<endl<<"\n请输入预订座位号(1~100):"; int seatnum; cin>>seatnum; if(seatnum>100||seatnum<1) { cout<<endl<<"\a\t\t对不起,无此座位!"; system("pause");//任意键继续 return; } m=(seatnum-1)/10; n=(seatnum-1)%10; if(tick.tic[i].seat[m][n]==0&&tick.tic[i].rest!=0) { cout<<endl<<"\n是否以会员权限购置(Y/N):"; char a; cin>>a; if(a!='N'&&a!='n') { tick.tic[i].seat[m][n]=tick.tic[i].price*tick.tic[i].discount/10; } else { tick.tic[i].seat[m][n]=tick.tic[i].price; } tick.tic[i].rest--; cout<<endl<<"\t\t\t\t您需要支付:"<<tick.tic[i].seat[m][n]<<"元。"<<endl; cout<<endl<<"\t\t\t\t您座位号是:"<<seatnum<<endl; cout<<endl<<"\t\t\t\t预订成功!"; seat(i);//调用seat函数 cout<<endl; system("pause");//任意键继续 return; } else { if(tick.tic[i].rest==0) { cout<<endl<<"\a\t\t\t\t对不起,没有票了!"; system("pause");//任意键继续 return; } else if(tick.tic[i].seat[m][n]!=0) { cout<<endl<<"\a\t\t对不起,无此座位或此座位已被预订!"; system("pause");//任意键继续 return; } } } } if(i==tick.len&&k==0) { cout<<"\n\a\t\t\t\t没有找到您要预定电影!"<<endl; system("pause");//任意键继续 return; } } 退票: void ticket::refund() { system("cls");//清屏 cout<<"\n\n\n\t\t\t\t《退票模块》\n\n\n"<<endl; string na; int i; int k=0;//标识修改数量 cout<<"\n请输入影片名:"; cin>>na; for(i=0;i<tick.len;i++) { if(tick.tic[i].name==na)//找到 { k++;//找到统计数 int j=1; if(j=1) { cout<<"\n 查找结果以下:"<<endl; cout<<"日-----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"<<endl<<endl; } j++; putout( i);//调用putout函数 time_t t; struct tm *tim; t=time(NULL);//获取目前系统时间 tim=localtime(&t); int array[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; int r; r=timecmp(tick.tic[i].datetime,array,5);//和系统时间比较 if(r<=0) { cout<<"\a\n此电影已播放,不能申请退票!" <<endl; system("pause");//任意键继续 return; } else { cout<<endl<<"\t\t\t\t目前预订情况"; int m,n; seat(i);//调用seat函数 cout<<endl<<"\n请输入退订座位号(1~100):"; int seatnum; cin>>seatnum; if(seatnum>100||seatnum<1) { cout<<endl<<"\a\t\t对不起,无此座位!"; system("pause");//任意键继续 return; } m=(seatnum-1)/10; n=(seatnum-1)%10;
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服