c++课程设计报告电影院自动售票机Word文档下载推荐.docx
- 文档编号:22087680
- 上传时间:2023-02-02
- 格式:DOCX
- 页数:56
- 大小:568.94KB
c++课程设计报告电影院自动售票机Word文档下载推荐.docx
《c++课程设计报告电影院自动售票机Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告电影院自动售票机Word文档下载推荐.docx(56页珍藏版)》请在冰豆网上搜索。
庄巧莉、杨东鹤
下午
系统功能划分
1月
22日
类的整体设计
类的详细设计
23日
编写代码
24日
程序测试
25日
上机检查、答辩
一、题目
二、需求分析
三、系统结构图
四、类的设计
五、程序代码与说明
六、运行结果与分析
七、心得与体会
【题目】
电影院自动售票机
电影院自动售票机用户使用时,必须先登录或者注册,不同的用户登录后进入不同功能界面,管理员账户系统默认“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];
intn;
intSeat[10][10];
User类中包含了用户订票的信息,方便在Custom类中建立相应的数据容器。
管理员Manager类:
classManager:
publicTicket
vector<
Ticket>
P;
:
iteratorpos;
staticstringUserName;
staticstringPassword;
public:
voidinput();
voidshow();
voidsearch();
voidchange();
voiddel();
voidread();
voidsave();
stringgetUserName(){returnUserName;
}
stringgetPassword(){returnPassword;
boolcmp(Ticketa,Ticketb);
管理员Manager类由Ticket类派生,主要包含一个Ticket容器和对基类Ticket数据处理的功能函数。
顾客Custom类:
classCustomer:
User>
Q;
iteratorpos1;
voidbook(charIDName[]);
voidrefund(charIDName[]);
顾客Custom类同样继承于Ticket,类中主要包含一个Ticket的vector容器P及其迭代器pos和User的vector容器Q已经迭代器pos1;
和两个带参功能函数book(char[])和defund(char[]);
界面Interface类:
classInterface
voiddisplay();
voidIntroduceFace();
voidManagerFace();
voidCustomerFace();
界面Interface类中的四个函数分别显示不同的界面,display()为登录界面,IntroduceFace();
为欢迎界面,ManagerFace();
为管理员功能界面,CustomerFace();
顾客功能界面。
菜单Menu类:
classMenu
voidmanager(Interfacecfy);
voidcustomer(Interfacecfy,charIDName[]);
此类设计,是为了主函数显示简单明了,类中两成员函数manager(Interfacecfy);
customer(Interfacecfy,charIDName[]);
分别显示管理与售票的功能,接收功能选择。
账户操作UserInfo类:
classUserInfo
charIDName[30];
charpassword[7];
UserInfo();
voidLogin();
voidRegister();
此类实现对账户的注册与登录。
其实管理员只能登录,无法注册!
一、功能函数:
1、注册
//——————————————注册——————————————
voidUserInfo:
Register()
charid[30];
while
(1)
{
cout<
<
"
请输入您要注册的用户名:
\n"
;
gets(IDName);
请输入您要注册的密码(6位):
gets(password);
if(strcmp(IDName,"
CFY"
)==0)//保证不能注册管理员账户
{
cout<
CFY为管理员账户,您不能注册!
请重新注册"
endl;
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();
id<
注册成功,系统即将为您转入购票系统"
endl<
for(inti=1;
i<
=3;
i++)
{
cout<
秒……"
Sleep(1000);
}
system("
cls"
Menucom;
Interfacecfy;
com.customer(cfy,IDName);
break;
else{
对不起,您注册的账户名已存在,请重新输入一个新的账户名"
iFile.close();
}
2、登录
//——————————————登录——————————————
Login()
charpw[7];
Menucom;
Interfacecfy;
cout<
请输入用户名:
gets(IDName);
请输入密码:
gets(password);
strcpy(id,IDName);
strcat(IDName,"
ifstreamiFile(IDName,ios:
if(!
iFile)
if(strcmp(IDName,"
CFY.txt"
)==0&
&
strcmp(password,"
1101"
)==0)
欢迎管理员CFY,正在为您转入管理员系统,请稍后……"
com.manager(cfy);
else
用户不存在!
endl
<
请重输入正确用户信息或进行注册"
\n\n\n摁回车键继续……"
getchar();
cfy.display();
}
else
iFile.read((char*)&
pw,sizeof(pw));
if(strcmp(pw,password)==0)
欢迎顾客"
正在为您转入订票系统,请稍后……"
用户名或密码错误,请重新登录!
请重新登录或退出注册"
3、管理员功能选择:
//——————————————选择———————————————
voidMenu:
manager(Interfacecfy)
system("
Managerboss;
boss.read();
intchoice2;
cfy.ManagerFace();
cin>
>
choice2;
do
switch(choice2)
case1:
boss.input();
case2:
boss.show();
case3:
boss.search();
case4:
boss.change();
case5:
boss.del();
case6:
default:
boss.save();
pause"
return;
getchar();
system("
cfy.ManagerFace();
cin>
while
(1);
4、管理员——从文件中读取
//——————————————读取———————————————
voidManager:
read()
ifstreamiFile("
MovieInfo.txt"
ios:
/*if(!
原库中不存在电影,请管理员添加"
*/
Tickets;
iFile.read((char*)&
s,sizeof(Ticket));
while(!
iFile.eof())
P.push_back(s);
iFile.read((char*)&
iFile.close();
5、管理员——录入
//——————————————录入——————————————
input()
\n\n\n\t\t\t\t《录入模块》\n\n\n"
TicketMovie;
charch;
intdate[5],n;
charna[20];
doubley1,y2;
\n请输入日期(2013-01-21):
date[0]>
ch>
date[1]>
date[2];
Movie.setYear(date[0]);
Movie.setMonth(date[1]);
Movie.setDay(date[2]);
\n请输入放映时间(12:
30):
date[3]>
date[4];
Movie.setHour(date[3]);
Movie.setMinute(date[4]);
\n请输入场次:
n;
Movie.setNum(n);
\n请输入电影名称:
na;
Movie.setMovieName(na);
\n请输入电影票价:
y1;
Movie.setPrice(y1);
\n请输入会员折扣:
y2;
Movie.setDiscount(y2);
//Movie.setMap();
//Movie.setRest(100);
P.push_back(Movie);
\n是否继续添加(y/n):
ch;
if(ch=='
y'
)
n'
6、管理员——显示
//——————————————显示——————————————
intTicket:
timecmp(inta[],intb[],intn)
inti;
for(i=0;
if(a[i]>
b[i])
return1;
if(a[i]<
return-1;
if(i==n)
return0;
show()
\n\n\n\t\t\t\t《显示模块》\n\n\n"
所有电影信息如下:
_______________________________________________________________________________"
日----期\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);
pos->
getYear()<
-"
getMonth()<
getDay()<
\t"
getHour()<
getMinute()<
getNum()<
getMovieName()<
\t\t"
getPrice()<
getDiscount()<
getRest();
if(r<
=0)
\a(已播放!
)"
<
7、管理员——查找
//——————————————查找——————————————
search()
\n\n\n\t\t\t\t《查找板块》\n\n\n"
intchoice;
intok=0;
\t\t\t\t1.按影片名查找"
\t\t\t\t2.按日期查找"
\t\t\t\t请输入查找模式:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+ 课程设计 报告 电影院 自动 售票