c课程设计报告电影院自动售票机.docx
- 文档编号:18379390
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:56
- 大小:569.26KB
c课程设计报告电影院自动售票机.docx
《c课程设计报告电影院自动售票机.docx》由会员分享,可在线阅读,更多相关《c课程设计报告电影院自动售票机.docx(56页珍藏版)》请在冰豆网上搜索。
c课程设计报告电影院自动售票机
c++课程设计报告--电影院自动售票机
面向对象程序课程设计
(2012/2013学年第一学期第20周)
指导教师:
******
浙江理工大学
班级:
计算机科学与技术
(1)班
学号:
2011329620***
姓名:
***
面向对象程序课程设计任务书
【题目】电影院自动售票机
【目的】
通过设计一个小型电影院的自动售票系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。
【要求】
1、每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言采用C++;
4、学生有事离校必须请假。
课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。
【内容简介】
有一个小型的电影院,这个电影院只有一个放映厅,厅里有10排座位,每排10个座位。
这个电影院从早上8:
00开始营业,每2小时放映一部电影,营业至次日凌晨2点结束。
这个电影院现在打算使用自动售票机,来让观众自己购票。
现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作。
【考核标准】
1、能够正确出售某一场次,某一座位的票,成绩≥60;
2、能够统计每一场次的出票情况,成绩≥70;
3、能够统计每一天每一场次的出票情况,成绩≥80;
4、能够考虑不同场次的票价,不同座位的票价,界面设计友好,成绩≥90。
请仔细考虑这个题目中出现的各个实体,考虑如何保存数据。
【工作内容及工作计划】
时间
地点
工作内容
指导教师
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
上机检查、答辩
庄巧莉、杨东鹤
面向对象程序课程设计
一、题目
二、需求分析
三、系统结构图
四、类的设计
五、程序代码与说明
六、运行结果与分析
七、心得与体会
一、题目
【题目】
电影院自动售票机
【目的】
通过设计一个小型电影院的自动售票系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。
【要求】
1、每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言采用C++;
4、学生有事离校必须请假。
课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。
【内容简介】
有一个小型的电影院,这个电影院只有一个放映厅,厅里有10排座位,每排10个座位。
这个电影院从早上8:
00开始营业,每2小时放映一部电影,营业至次日凌晨2点结束。
这个电影院现在打算使用自动售票机,来让观众自己购票。
现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作。
二、需求分析
电影院自动售票机用户使用时,必须先登录或者注册,不同的用户登录后进入不同功能界面,管理员账户系统默认“CFY”,密码:
“1101”,顾客账户,由顾客自己注册,然后每个顾客会有一个以账户名为文件名的txt文本,文本中第一行存账户密码,接下来,存的是用户的订票信息。
管理员账户则不用建立相应的文本,只有有一个MovieInfo.txt用来存储影片信息即可。
电影院自动售票机主要功能可分为两个板块:
1、管理员板块2、售票板块。
管理员板块拥有最高权限,可对电影的信息进行修改,比如:
录入(input)、显示(show)、查找(search)、修改(change)、删除(del);而售票系统则只进行售票(book)和退票(refund)。
顾客板块拥有最小权限,只能对影片的预定(book)和退订(refund)两项功能。
三、系统结构图
系统的结构图如下:
管理员账户无法注册,系统默认账户名:
CFY,密码:
1101。
顾客无论是注册还是登录成功,都会自动转入售票模块,然后由用户进行相应的选择。
管理员登录成功后,系统会自动进入管理板块,在进入管理板块时,先通过read()把MovieInfo.txt中的数据读入管理员类中自定义的vector中,然后管理员可实现对影片的诸多操作,
录入功能:
根据影讯录入新的电影信息。
显示功能:
将电影的播放时间与系统时间比较,以判断电影是否已经播放或正在播放。
查找功能:
有按电影名称查询和按播放时间查询两种查询方式。
修改功能:
可对影片的每个属性进行修改。
删除功能:
通入输入要删除的影片名,通过vector自身的删除函数erase()。
管理员退出后,系统调用save()函数,把vector中的数据写入文件MovieInfo.txt,MovieInfo.txt的打开方式为清空。
顾客登录或注册成功后,系统自动进入售票板块,顾客可进行订票与退票两项操作。
订票功能:
系统先分别冲MovieInfo.txt中和用户文本中读入相应的数据到customer的vector容器P中和User的vector容器Q中,然后通过预定,得到相应的订票信息。
结束订票时,把两个容器中的数据更新到两个文本中,并清空容器中的数据。
退票功能:
同样需要先从文本中读入信息,然后通过PQ两容器中的数据,先将Q容器中的信息输出到屏幕,可直观得到已定的票的情况,然后根据PQ两容器中的数据信息,对所要退的票进行判断,判断能否退票。
最后同样更新文件中的数据,清空PQ容器中的数据。
四、类的设计
首先设计一个电影信息Ticket类作为基类:
classTicket
{
protected:
charMovieName[20];
doubleprice;
doublediscount;
intnum;
intyear;
intmonth;
intday;
inthour;
intminute;
intrest;
boolmap[10][10];
};
基类Ticket包含了影片的所有基本信息,以便被管理员Manager类和顾客Custom类继承。
用户信息User类:
classUser
{
charname[20];
intyear;
intmonth;
intday;
inthour;
intminute;
intn;
intSeat[10][10];
};
User类中包含了用户订票的信息,方便在Custom类中建立相应的数据容器。
管理员Manager类:
classManager:
publicTicket
{
vector
vector
:
iteratorpos;
staticstringUserName;
staticstringPassword;
public:
voidinput();
voidshow();
voidsearch();
voidchange();
voiddel();
voidread();
voidsave();
stringgetUserName(){returnUserName;}
stringgetPassword(){returnPassword;}
boolcmp(Ticketa,Ticketb);
};
管理员Manager类由Ticket类派生,主要包含一个Ticket容器和对基类Ticket数据处理的功能函数。
顾客Custom类:
classCustomer:
publicTicket
{
vector
vector
vector
:
iteratorpos;
vector
:
iteratorpos1;
public:
voidbook(charIDName[]);
voidrefund(charIDName[]);
};
顾客Custom类同样继承于Ticket,类中主要包含一个Ticket的vector容器P及其迭代器pos和User的vector容器Q已经迭代器pos1;和两个带参功能函数book(char[])和defund(char[]);
界面Interface类:
classInterface
{
public:
voiddisplay();
voidIntroduceFace();
voidManagerFace();
voidCustomerFace();
};
界面Interface类中的四个函数分别显示不同的界面,display()为登录界面,IntroduceFace();为欢迎界面,ManagerFace();为管理员功能界面,CustomerFace();顾客功能界面。
菜单Menu类:
classMenu
{
public:
voidmanager(Interfacecfy);
voidcustomer(Interfacecfy,charIDName[]);
};
此类设计,是为了主函数显示简单明了,类中两成员函数manager(Interfacecfy);customer(Interfacecfy,charIDName[]);分别显示管理与售票的功能,接收功能选择。
账户操作UserInfo类:
classUserInfo
{
charIDName[30];
charpassword[7];
public:
UserInfo();
voidLogin();
voidRegister();
};
此类实现对账户的注册与登录。
其实管理员只能登录,无法注册!
五、程序代码与说明
一、功能函数:
1、注册
//——————————————注册——————————————
voidUserInfo:
:
Register()
{
charid[30];
while
(1)
{
cout<<"请输入您要注册的用户名:
\n";
gets(IDName);
cout<<"请输入您要注册的密码(6位):
\n";
gets(password);
if(strcmp(IDName,"CFY")==0)//保证不能注册管理员账户
{
cout<<"CFY为管理员账户,您不能注册!
请重新注册"< continue; } strcpy(id,IDName); strcat(IDName,".txt"); ifstreamiFile(IDName,ios: : in); if(! iFile){ ofstreamoFile(IDName,ios: : out|ios: : app); oFile.write((char*)&password,sizeof(password)); oFile.close(); cout< for(inti=1;i<=3;i++) { cout< Sleep(1000); } system("cls"); Menucom; Interfacecfy; com.customer(cfy,IDName); break; } else{ cout<<"对不起,您注册的账户名已存在,请重新输入一个新的账户名"< iFile.close(); } } } 2、登录 //——————————————登录—————————————— voidUserInfo: : Login() { charpw[7]; charid[30]; Menucom; Interfacecfy; cout<<"请输入用户名: \n"; gets(IDName); cout<<"请输入密码: \n"; gets(password); strcpy(id,IDName); strcat(IDName,".txt"); ifstreamiFile(IDName,ios: : in); if(! iFile) { if(strcmp(IDName,"CFY.txt")==0&&strcmp(password,"1101")==0) { cout<<"欢迎管理员CFY,正在为您转入管理员系统,请稍后……"< for(inti=1;i<=3;i++) { cout< Sleep(1000); } com.manager(cfy); } else { cout< "< <<"请重输入正确用户信息或进行注册"<<"\n\n\n摁回车键继续……"< getchar(); system("cls"); cfy.display(); } } else { iFile.read((char*)&pw,sizeof(pw)); if(strcmp(pw,password)==0) { cout<<"欢迎顾客"< for(inti=1;i<=3;i++) { cout< Sleep(1000); } com.customer(cfy,IDName); } else { cout<<"用户名或密码错误,请重新登录! "< <<"请重新登录或退出注册"<<"\n\n\n摁回车键继续……"< getchar(); system("cls"); cfy.display(); } } } 3、管理员功能选择: //——————————————选择——————————————— voidMenu: : manager(Interfacecfy) { system("cls"); Managerboss; boss.read(); intchoice2; cfy.ManagerFace(); cin>>choice2; do { switch(choice2) { case1: boss.input(); break; case2: boss.show(); break; case3: boss.search(); break; case4: boss.change(); break; case5: boss.del(); break; case6: default: boss.save(); system("pause"); system("cls"); cfy.display(); return; } getchar(); getchar(); system("cls"); cfy.ManagerFace(); cin>>choice2; } while (1); } 4、管理员——从文件中读取 //——————————————读取——————————————— voidManager: : read() { ifstreamiFile("MovieInfo.txt",ios: : in); /*if(! iFile) cout<<"原库中不存在电影,请管理员添加"< Tickets; iFile.read((char*)&s,sizeof(Ticket)); while(! iFile.eof()) { P.push_back(s); iFile.read((char*)&s,sizeof(Ticket)); } iFile.close(); } 5、管理员——录入 //——————————————录入—————————————— voidManager: : input() { system("cls"); cout<<"\n\n\n\t\t\t\t《录入模块》\n\n\n"< TicketMovie; charch; while (1) { intdate[5],n; charna[20]; doubley1,y2; cout<<"\n请输入日期(2013-01-21): "; cin>>date[0]>>ch>>date[1]>>ch>>date[2]; Movie.setYear(date[0]); Movie.setMonth(date[1]); Movie.setDay(date[2]); cout<<"\n请输入放映时间(12: 30): "; cin>>date[3]>>ch>>date[4]; Movie.setHour(date[3]); Movie.setMinute(date[4]); cout<<"\n请输入场次: "; cin>>n; Movie.setNum(n); cout<<"\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=='y') continue; if(ch=='n') break; } } 6、管理员——显示 //——————————————显示—————————————— intTicket: : timecmp(inta[],intb[],intn) { inti; for(i=0;i { if(a[i]>b[i]) return1; if(a[i] return-1; } if(i==n) return0; } voidManager: : show() { system("cls"); cout<<"\n\n\n\t\t\t\t《显示模块》\n\n\n"< cout<<"所有电影信息如下: "< cout<<"_______________________________________________________________________________"< cout<<"日----期\t时-间\t场次\t电影名称\t票价\t折扣\t余票"< time_tt; structtm*tim; t=time(NULL);//获取当前系统时间 tim=localtime(&t); intarray[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; pos=P.begin(); for(pos=P.begin();pos! =P.end();pos++) { intdatatime[5]; datatime[0]=pos->getYear(); datatime[1]=pos->getMonth(); datatime[2]=pos->getDay(); datatime[3]=pos->getHour(); datatime[4]=pos->getMinute(); intr=timecmp(datatime,array,5); cout< cout< "< cout< cout< if(r<=0) cout<<"\a(已播放! )"< else cout< } } 7、管理员——查找 //——————————————查找—————————————— voidManager: : search() { system("cls"); cout<<"\n\n\n\t\t\t\t《查找板块》\n\n\n"< time_tt; structtm*tim; t=time(NULL);//获取当前系统时间 tim=localtime(&t); intarray[5]={tim->tm_year+1900,tim->tm_mon+1,tim->tm_mday,tim->tm_hour,tim->tm_min}; intchoice; intok=0; do { cout< cout< cout<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 电影院 自动 售票