自助电影售票机——c++课程设计报告_第1页
自助电影售票机——c++课程设计报告_第2页
自助电影售票机——c++课程设计报告_第3页
自助电影售票机——c++课程设计报告_第4页
自助电影售票机——c++课程设计报告_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、面向对象程序课程设计(2012/2013学年第一学期第20周)指导教师:* *浙江理工大学 班级:计算机科学与技术(1)班 学号:2011329620* 姓名:* 面向对象程序课程设计任务书【题目】电影院自动售票机【目的】通过设计一个小型电影院的自动售票系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。【要求】1、每个学生必须独立完成;2、课程设计时间为1周;3、设计语言采用C+;4、学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。【内容简介】

2、有一个小型的电影院,这个电影院只有一个放映厅,厅里有10排座位,每排10个座位。这个电影院从早上8:00开始营业,每2小时放映一部电影,营业至次日凌晨2点结束。这个电影院现在打算使用自动售票机,来让观众自己购票。现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作。【考核标准】1、能够正确出售某一场次,某一座位的票,成绩60;2、能够统计每一场次的出票情况,成绩70;3、能够统计每一天每一场次的出票情况,成绩80;4、能够考虑不同场次的票价,不同座位的票价,界面设计友好,成绩90。请仔细考虑这个题目中出现的各个实体,考虑如何保存数据。【工作内容及工作计划】时间地点工作内容指导教

3、师1月 21日上午10-306任务布置,需求分析 庄巧莉、杨东鹤下午10-306系统功能划分庄巧莉、杨东鹤1月22日上午10-306类的整体设计庄巧莉、杨东鹤下午10-306类的详细设计庄巧莉、杨东鹤1月23日上午10-306编写代码庄巧莉、杨东鹤下午10-306编写代码庄巧莉、杨东鹤1月24日上午10-306程序测试庄巧莉、杨东鹤下午10-306程序测试庄巧莉、杨东鹤1月25日上午10-306上机检查、答辩庄巧莉、杨东鹤下午10-306上机检查、答辩庄巧莉、杨东鹤面向对象程序课程设计目 录一、 题目二、 需求分析三、 系统结构图四、 类的设计五、 程序代码与说明六、 运行结果与分析七、 心得

4、与体会一、题目【题目】电影院自动售票机【目的】通过设计一个小型电影院的自动售票系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。【要求】1、每个学生必须独立完成;2、课程设计时间为1周;3、设计语言采用C+;4、学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。【内容简介】 有一个小型的电影院,这个电影院只有一个放映厅,厅里有10排座位,每排10个座位。这个电影院从早上8:00开始营业,每2小时放映一部电影,营业至次日凌晨2点结束。这个电影院现在打

5、算使用自动售票机,来让观众自己购票。现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作。2、 需求分析电影院自动售票机用户使用时,必须先登录或者注册,不同的用户登录后进入不同功能界面,管理员账户系统默认“CFY”,密码:“1101”,顾客账户,由顾客自己注册,然后每个顾客会有一个以账户名为文件名的txt文本,文本中第一行存账户密码,接下来,存的是用户的订票信息。管理员账户则不用建立相应的文本,只有有一个MovieInfo.txt用来存储影片信息即可。电影院自动售票机主要功能可分为两个板块:1、管理员板块 2、售票板块。管理员板块拥有最高权限,可对电影的信息进行修改,比如:录入

6、(input)、显示(show)、查找(search)、修改(change)、删除(del);而售票系统则只进行售票(book)和退票(refund)。顾客板块拥有最小权限,只能对影片的预定(book)和退订(refund)两项功能。三、系统结构图系统的结构图如下: 欢迎界面 登 录此账户为管理员还是顾客? 管理 manager 录入显示查询修改删除 注 册 售票 customer订票退票管理员账户无法注册,系统默认账户名:CFY,密码:1101。顾客无论是注册还是登录成功,都会自动转入售票模块,然后由用户进行相应的选择。管理员登录成功后,系统会自动进入管理板块,在进入管理板块时,先通过rea

7、d()把MovieInfo.txt中的数据读入管理员类中自定义的vector中,然后管理员可实现对影片的诸多操作,录入功能:根据影讯录入新的电影信息。显示功能:将电影的播放时间与系统时间比较,以判断电影是否已经播放或正在播放。查找功能:有按电影名称查询和按播放时间查询两种查询方式。修改功能:可对影片的每个属性进行修改。删除功能:通入输入要删除的影片名,通过vector自身的删除函数erase()。管理员退出后,系统调用save()函数,把vector中的数据写入文件MovieInfo.txt,MovieInfo.txt的打开方式为清空。顾客登录或注册成功后,系统自动进入售票板块,顾客可进行订票

8、与退票两项操作。订票功能:系统先分别冲MovieInfo.txt中和用户文本中读入相应的数据到customer的vector容器P中和User的vector容器Q中,然后通过预定,得到相应的订票信息。结束订票时,把两个容器中的数据更新到两个文本中,并清空容器中的数据。退票功能:同样需要先从文本中读入信息,然后通过P Q两容器中的数据,先将Q容器中的信息输出到屏幕,可直观得到已定的票的情况,然后根据P Q两容器中的数据信息,对所要退的票进行判断,判断能否退票。最后同样更新文件中的数据,清空P Q容器中的数据。4、 类的设计首先设计一个电影信息Ticket类作为基类:class Ticketpro

9、tected:char MovieName20;double price;double discount;int num;int year;int month;int day;int hour;int minute;int rest;bool map1010;基类Ticket包含了影片的所有基本信息,以便被管理员Manager类和顾客Custom类继承。用户信息User类:class Userchar name20;int year;int month;int day;int hour;int minute;int n;int Seat1010;User类中包含了用户订票的信息,方便在Cust

10、om类中建立相应的数据容器。管理员Manager类:class Manager :public Ticketvector<Ticket> P;vector<Ticket>: iterator pos;static string UserName;static string Password;public:void input();void show();void search();void change();void del();void read();void save();string getUserName()return UserName;string getP

11、assword()return Password;bool cmp(Ticket a,Ticket b);管理员Manager类由Ticket类派生,主要包含一个Ticket容器和对基类Ticket数据处理的功能函数。顾客Custom类:class Customer :public Ticketvector<Ticket> P;vector<User> Q;vector<Ticket>: iterator pos;vector<User>: iterator pos1;public:void book(char IDName);void refu

12、nd(char IDName);顾客Custom类 同样继承于Ticket,类中主要包含一个Ticket的vector容器P及其迭代器pos和User的vector容器Q已经迭代器pos1;和两个带参功能函数book(char )和defund(char );界面Interface类:class Interfacepublic:void display();void IntroduceFace();void ManagerFace();void CustomerFace();界面Interface类中的四个函数分别显示不同的界面,display()为登录界面,IntroduceFace();为

13、欢迎界面,ManagerFace();为管理员功能界面,CustomerFace();顾客功能界面。菜单Menu类:class Menupublic:void manager(Interface cfy);void customer(Interface cfy,char IDName );此类设计,是为了主函数显示简单明了,类中两成员函数 manager(Interface cfy);customer(Interface cfy,char IDName );分别显示管理与售票的功能,接收功能选择。账户操作UserInfo类:class UserInfochar IDName30;char pa

14、ssword7;public:UserInfo();void Login();void Register();此类实现对账户的注册与登录。其实管理员只能登录,无法注册!5、 程序代码与说明一、功能函数:1、注册/注册void UserInfo:Register()char id30;while(1)cout<<"请输入您要注册的用户名:n"gets(IDName);cout<<"请输入您要注册的密码(6位):n"gets(password); if(strcmp(IDName,"CFY")=0) /保证不能注册

15、管理员账户cout<<"CFY为管理员账户,您不能注册!请重新注册"<<endl;continue;strcpy(id,IDName);strcat(IDName,".txt");ifstream iFile(IDName,ios:in);if(!iFile)ofstream oFile(IDName,ios:out|ios:app);oFile.write(char *) &password,sizeof(password);oFile.close();cout<<id<<"注册成功,系

16、统即将为您转入购票系统"<<endl<<endl;for(int i=1;i<=3;i+)cout<<i<<"秒"<<endl;Sleep(1000);system("cls");Menu com;Interface cfy;com.customer(cfy,IDName);break;elsecout<<"对不起,您注册的账户名已存在,请重新输入一个新的账户名"<<endl;iFile.close();2、登录/登录void User

17、Info:Login()char pw7;char id30;Menu com;Interface cfy;cout<<"请输入用户名:n"gets(IDName);cout<<"请输入密码:n"gets(password);strcpy(id,IDName);strcat(IDName,".txt");ifstream iFile(IDName,ios:in);if(!iFile)if(strcmp(IDName,"CFY.txt")=0&&strcmp(password,

18、"1101")=0)cout<<"欢迎管理员CFY,正在为您转入管理员系统,请稍后"<<endl;for(int i=1;i<=3;i+)cout<<i<<"秒"<<endl;Sleep(1000);com.manager(cfy);elsecout<<id<<" 用户不存在!"<<endl<<"请重输入正确用户信息或进行注册"<<"nnn摁回车键继续"

19、;<<endl;getchar();system("cls");cfy.display();elseiFile.read(char *) &pw,sizeof(pw);if(strcmp(pw,password)=0)cout<<"欢迎顾客"<<id<<",正在为您转入订票系统,请稍后"<<endl;for(int i=1;i<=3;i+)cout<<i<<"秒"<<endl;Sleep(1000);com

20、.customer(cfy,IDName);elsecout<<"用户名或密码错误,请重新登录!"<<endl<<"请重新登录或退出注册"<<"nnn摁回车键继续"<<endl;getchar();system("cls");cfy.display();3、 管理员功能选择:/选择void Menu:manager(Interface cfy)system("cls");Manager boss;boss.read();int choi

21、ce2;cfy.ManagerFace();cin>>choice2;doswitch(choice2)case 1:boss.input();break;case 2:boss.show();break;case 3:boss.search();break;case 4:boss.change();break;case 5:boss.del();break;case 6:default:boss.save();system("pause");system("cls");cfy.display();return;getchar();getch

22、ar();system("cls");cfy.ManagerFace();cin>>choice2;while(1); 4、管理员从文件中读取/读取void Manager:read()ifstream iFile("MovieInfo.txt",ios:in);/*if(!iFile)cout<<"原库中不存在电影,请管理员添加"<<endl;*/Ticket s;iFile.read(char *)&s,sizeof(Ticket);while(!iFile.eof()P.push_ba

23、ck(s);iFile.read(char *)&s,sizeof(Ticket);iFile.close();5、管理员录入/录入void Manager:input()system("cls");cout<<"nnntttt录入模块nnn"<<endl;Ticket Movie;char ch;while(1)int date5,n;char na20;double y1,y2;cout<<"n请输入日期(2013-01-21):"cin>>date0>>ch&g

24、t;>date1>>ch>>date2;Movie.setYear(date0);Movie.setMonth(date1);Movie.setDay(date2);cout<<"n请输入放映时间(12:30):"cin>>date3>>ch>>date4;Movie.setHour(date3);Movie.setMinute(date4);cout<<"n请输入场次:"cin>>n;Movie.setNum(n);cout<<"

25、n请输入电影名称:"cin>>na;Movie.setMovieName(na);cout<<"n请输入电影票价:"cin>>y1;Movie.setPrice(y1);cout<<"n请输入会员折扣:"cin>>y2;Movie.setDiscount(y2);/Movie.setMap();/Movie.setRest(100);P.push_back(Movie);cout<<"n是否继续添加(y/n):"cin>>ch;if(ch=&

26、#39;y')continue;if(ch='n')break; 6、管理员显示/显示int Ticket:timecmp(int a,int b,int n)int i; for(i=0;i<n;i+)if(ai>bi)return 1;if(ai<bi)return -1;if(i=n)return 0;void Manager:show()system("cls");cout<<"nnntttt显示模块nnn"<<endl;cout<<" 所有电影信息如下:&q

27、uot;<<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 array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min;pos=P.be

28、gin();for(pos=P.begin();pos!=P.end();pos+)int datatime5;datatime0=pos->getYear();datatime1=pos->getMonth();datatime2=pos->getDay();datatime3=pos->getHour();datatime4=pos->getMinute();int r=timecmp(datatime,array,5);cout<<pos->getYear()<<"-"<<pos->getM

29、onth()<<"-"<<pos->getDay()<<"t"cout<<pos->getHour()<<":"<<pos->getMinute()<<"t"cout<<pos->getNum()<<"t"<<pos->getMovieName()<<"tt"cout<<pos->getPrice(

30、)<<"t"<<pos->getDiscount()<<"t"<<pos->getRest();if(r<=0)cout<<"a(已播放!)" <<endl; elsecout<<endl; 7、管理员查找/查找void Manager:search()system("cls");cout<<"nnntttt查找板块nnn"<<endl;time_t t;struct t

31、m *tim;t=time(NULL);/获取当前系统时间tim=localtime(&t);int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min;int choice;int ok=0;docout<<endl<<"tttt1.按影片名查找"cout<<endl<<"tttt2.按日期查找"cout<<endl<<"tttt请输

32、入查找模式:"cin>>choice;if(choice!=1&&choice!=2)cout<<"natttt选择有误!请选择正确的查找模式。"<<endl;while(choice!=1&&choice!=2);if(choice=1)char na20;cout<<"请输入要查找的影片名n"cin>>na;for(pos=P.begin();pos!=P.end();pos+)if(strcmp(pos->getMovieName(),na)

33、=0)int datatime5;datatime0=pos->getYear();datatime1=pos->getMonth();datatime2=pos->getDay();datatime3=pos->getHour();datatime4=pos->getMinute();int r=timecmp(datatime,array,5);cout<<"n 查找结果如下:"<<endl;cout<<"_"<<endl;cout<<"日-期t时-间

34、t场次t电影名称t票价t折扣t余票"<<endl<<endl;cout<<pos->getYear()<<"-"<<pos->getMonth()<<"-"<<pos->getDay()<<"t"cout<<pos->getHour()<<":"<<pos->getMinute()<<"t"cout<<

35、pos->getNum()<<"t"<<pos->getMovieName()<<"tt"cout<<pos->getPrice()<<"t"<<pos->getDiscount()<<"t"<<pos->getRest();if(r<=0)cout<<"a(已播放!)" <<endl; elsecout<<endl; cout&

36、lt;<"tttt该影片当前预订情况n"for(int i=0;i<10;i+)for(int j=0;j<10;j+)if(pos->getMap(i,j)=0)cout<<"空位 "elsecout<<"有人 "cout<<endl;ok=1;if(!ok)cout<<"对不起,您查找的电影还未上映或者已经下映"<<endl;else if(choice=2)int date3;int temp3;char ch;cout<

37、;<"请输入要查找的日期(年-月-日)"<<endl;cin>>date0>>ch>>date1>>ch>>date2;for(pos=P.begin();pos!=P.end();pos+)temp0=pos->getYear();temp1=pos->getMonth();temp2=pos->getDay();if(timecmp(temp,date,3)=0)int datatime5;datatime0=pos->getYear();datatime1=pos-&

38、gt;getMonth();datatime2=pos->getDay();datatime3=pos->getHour();datatime4=pos->getMinute();int r=timecmp(datatime,array,5);cout<<"n 查找结果如下:"<<endl;cout<<"_"<<endl;cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl;cout<<

39、pos->getYear()<<"-"<<pos->getMonth()<<"-"<<pos->getDay()<<"t"cout<<pos->getHour()<<":"<<pos->getMinute()<<"t"cout<<pos->getNum()<<"t"<<pos->getMovi

40、eName()<<"tt"cout<<pos->getPrice()<<"t"<<pos->getDiscount()<<"t"<<pos->getRest();if(r<=0)cout<<"a(已播放!)" <<endl; elsecout<<endl; cout<<"tttt该影片当前预订情况n"for(int i=0;i<10;i+)for(

41、int j=0;j<10;j+)if(pos->getMap(i,j)=0)cout<<"空位 "elsecout<<"有人 "cout<<endl;ok=1;if(!ok)cout<<"对不起,您所查找的当天没有影讯"<<endl; 8、管理员删除/删除void Manager:del()system("cls");cout<<"nnntttt删除模块nnn"<<endl;char na20;cou

42、t<<"n请输入需要删除的影片名:"cin>>na;pos=P.begin();int ok=0;for(pos=P.begin();pos!=P.end();pos+)if(strcmp(pos->getMovieName(),na)=0) P.erase(pos); cout<<endl<<"tttt删除成功!n" ok=1;if(!ok)cout<<"natttt未找到结果,删除失败!n"<<endl;system("pause")

43、;/任意键继续 return; 9、管理员数据存入文本/存储void Manager:save()ofstream oFile("MovieInfo.txt",ios:out|ios:app);if(!oFile)cout<<"Can not open the file!"<<endl;return ;for(int i=0;i<P.size();i+)oFile.write(char *) &Pi,sizeof(Ticket);oFile.close();P.clear();10、顾客功能选择/选择void Men

44、u:customer(Interface cfy,char IDName)system("cls");cfy.CustomerFace();Customer ct;int choice2;docin>>choice2;switch (choice2)case 1:ct.book(IDName);break;case 2:ct.refund(IDName);break;case 3:default:system("pause");system("cls");cfy.display();return ;getchar();ge

45、tchar();system("cls");cfy.CustomerFace();while(1);11、顾客订票/订票void Customer:book(char IDName)system("cls");cout<<"nnntttt订票模块nnn"<<endl;ifstream iFile1(IDName,ios:in);if(!iFile1)cout<<"账户不存在"<<endl;return ;char s17;iFile1.read(char *) &am

46、p;s1,sizeof(s1);User a;iFile1.read(char *)&a,sizeof(User);while(!iFile1.eof()Q.push_back(a);iFile1.read(char *)&a,sizeof(User);iFile1.close();ifstream iFile("MovieInfo.txt",ios:in);if(!iFile)cout<<"电影还未录入,您不能订票,请等管理员录入电影后再来"<<endl;return ;Ticket s;iFile.read(c

47、har *)&s,sizeof(Ticket);while(!iFile.eof()P.push_back(s);iFile.read(char *)&s,sizeof(Ticket);iFile.close();cout<<" 可预订的电影信息如下:"<<endl;cout<<"_"<<endl;cout<<"日-期t时-间t场次t电影名称t票价t折扣t余票"<<endl<<endl;time_t t;struct tm *tim;t

48、=time(NULL);/获取当前系统时间tim=localtime(&t);int array5=tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min;pos=P.begin();int ok=0;int flag=0;for(pos=P.begin();pos!=P.end();pos+)int datatime5;datatime0=pos->getYear();datatime1=pos->getMonth();datatime2=pos->ge

49、tDay();datatime3=pos->getHour();datatime4=pos->getMinute();int r=timecmp(datatime,array,5);if(r>0)cout<<pos->getYear()<<"-"<<pos->getMonth()<<"-"<<pos->getDay()<<"t"cout<<pos->getHour()<<":"&

50、lt;<pos->getMinute()<<"t"cout<<pos->getNum()<<"t"<<pos->getMovieName()<<"tt"cout<<pos->getPrice()<<"t"<<pos->getDiscount()<<"t"<<pos->getRest()<<endl;ok=1;if(!ok)c

51、out<<"对不起,当前无影片可预定!"<<endl;return ;char na20;char tt;int mm,dd,hh,ff;int n;User info;cout<<"n请输入您要预定的影片名以及时间(01-21 15:30):"cin>>na;cin>>mm>>tt>>dd>>hh>>tt>>ff;while(1)for(pos=P.begin();pos!=P.end();pos+)if(strcmp(pos->

52、;getMovieName(),na)=0)if(pos->getDay()=dd&&pos->getMonth()=mm&&pos->getHour()=hh&&pos->getMinute()=ff)cout<<"当前情况:"<<endl;for(int i=0;i<10;i+)for(int j=0;j<10;j+)if(pos->getMap(i,j)=0)cout<<"空位 "elsecout<<"

53、有人 "cout<<endl;flag=1;break;if(flag)info.setName(pos->getMovieName();info.setYear(pos->getYear();info.setMonth(pos->getMonth();info.setDay(pos->getDay();info.setHour(pos->getHour();info.setMinute(pos->getMinute();break;if(!flag)cout<<"对不起,您要预定的影片还未上映在或者已经下映&qu

54、ot;<<endl;cout<<"您是否要选择其他电影?(y/n)"char cc;cin>>cc;if(cc='y')cout<<"n请输入您要预定的影片名以及时间(01-21 15:30):"cin>>na;cin>>mm>>tt>>dd>>hh>>tt>>ff;else if(cc='n')break;cout<<"n请输入您要预定票的数目:"cin>

55、;>n;info.setN(n);cout<<"n请问您是否是会员?(y/n)"char th;cin>>th;double MaxMoney=0;int seat201;int k=1;while(1)for(int i=1;i<=n;i+)cout<<"n请输入您要遇到的位置(i排j列):"int x,y;cin>>x>>y;if(pos->getMap(x-1,y-1)cout<<"抱歉!该位置已经被预定,您不能预定,请选择预定其它位置"<<endl;i-;continue;pos->setMap1(x-1,y-1);info.setSeat(x-1,y-1);pos->setRest(1);seatk+=x;seatk+=y;if(th='y')MaxMoney+=pos->getPrice()*pos->getDiscount();else MaxMoney+=pos->getPrice();cout<<"n您是否还要预定其他电影?

温馨提示

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

评论

0/150

提交评论