c课程设计报告电影院自动售票机.docx

上传人:b****2 文档编号:556992 上传时间:2023-04-29 格式:DOCX 页数:56 大小:569.26KB
下载 相关 举报
c课程设计报告电影院自动售票机.docx_第1页
第1页 / 共56页
c课程设计报告电影院自动售票机.docx_第2页
第2页 / 共56页
c课程设计报告电影院自动售票机.docx_第3页
第3页 / 共56页
c课程设计报告电影院自动售票机.docx_第4页
第4页 / 共56页
c课程设计报告电影院自动售票机.docx_第5页
第5页 / 共56页
c课程设计报告电影院自动售票机.docx_第6页
第6页 / 共56页
c课程设计报告电影院自动售票机.docx_第7页
第7页 / 共56页
c课程设计报告电影院自动售票机.docx_第8页
第8页 / 共56页
c课程设计报告电影院自动售票机.docx_第9页
第9页 / 共56页
c课程设计报告电影院自动售票机.docx_第10页
第10页 / 共56页
c课程设计报告电影院自动售票机.docx_第11页
第11页 / 共56页
c课程设计报告电影院自动售票机.docx_第12页
第12页 / 共56页
c课程设计报告电影院自动售票机.docx_第13页
第13页 / 共56页
c课程设计报告电影院自动售票机.docx_第14页
第14页 / 共56页
c课程设计报告电影院自动售票机.docx_第15页
第15页 / 共56页
c课程设计报告电影院自动售票机.docx_第16页
第16页 / 共56页
c课程设计报告电影院自动售票机.docx_第17页
第17页 / 共56页
c课程设计报告电影院自动售票机.docx_第18页
第18页 / 共56页
c课程设计报告电影院自动售票机.docx_第19页
第19页 / 共56页
c课程设计报告电影院自动售票机.docx_第20页
第20页 / 共56页
亲,该文档总共56页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c课程设计报告电影院自动售票机.docx

《c课程设计报告电影院自动售票机.docx》由会员分享,可在线阅读,更多相关《c课程设计报告电影院自动售票机.docx(56页珍藏版)》请在冰点文库上搜索。

c课程设计报告电影院自动售票机.docx

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

{

vectorP;

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

{

vectorP;

vectorQ;

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<getYear()<<"-"<getMonth()<<"-"<getDay()<<"\t";

cout<getHour()<<":

"<getMinute()<<"\t";

cout<getNum()<<"\t"<getMovieName()<<"\t\t";

cout<getPrice()<<"\t"<getDiscount()<<"\t"<getRest();

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<

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2