资源描述
面向对象程序课程设计
(2015/2011学年第一学期第17周)
指导教师: 庄巧莉、杨东鹤
班级:14电信实验班
学号:2014339960002
姓名:李君艳
面向对象程序课程设计任务书
【题目】电影院自动售票机
【目的】
通过设计一个小型电影院的自动售票系统,训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念,使自己的程序设计与调试水平有一个明显的提高。
【要求】
1、每个学生必须独立完成;
2、课程设计时间为1周;
3、设计语言采用C++;
4、学生有事离校必须请假。课程设计期间,无故缺席按旷课处理;缺席时间达四分之一以上者,未按规定上交实验报告的学生,其成绩按不及格处理。
【内容简介】
有一个小型的电影院,这个电影院有2个放映厅,厅里有10排座位,每排10个座位。这个电影院从早上8:00开始营业,营业至次日凌晨2点结束。这个电影院现在打算使用自动售票机,来让观众自己购票。现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作。
【考核标准】
1、能够正确出售某一场次,某一座位的票,成绩≥60;
2、能够实现对每天放映的电影信息的管理(增加、删除、修改),成绩≥70;
3、能够根据当前购买时间自动排除已经放映过的场次,成绩≥80;
4、能够统计每一天每一场次的出票情况,界面设计友好,成绩≥90。
请仔细考虑这个题目中出现的各个实体,考虑如何保存数据,使得即使在程序窗口关闭后,再次运行程序时之前的售票信息仍然有效。
【工作内容及工作计划】
时间
地点
工作内容
指导教师
12月 28日
上午
10-306
任务布置,需求分析
庄巧莉、杨东鹤
下午
10-306
系统功能划分
庄巧莉、杨东鹤
12月
29日
上午
10-306
类的整体设计
庄巧莉、杨东鹤
下午
10-306
类的详细设计
庄巧莉、杨东鹤
12月
30日
上午
10-306
编写代码
庄巧莉、杨东鹤
下午
10-306
编写代码
庄巧莉、杨东鹤
12月
31日
上午
10-306
程序测试
庄巧莉、杨东鹤
下午
10-306
程序测试
庄巧莉、杨东鹤
1月
1日
上午
10-306
上机检查、答辩
庄巧莉、杨东鹤
下午
10-306
上机检查、答辩
庄巧莉、杨东鹤
面向对象程序课程设计
目 录
一、 题目
二、 需求分析
三、 系统结构图
四、 类的设计
五、 程序代码与说明
六、 运行结果与分析
七、 心得与体会
一. 题目
有一个小型的电影院,这个电影院有2个放映厅,厅里有10排座位,每排10个座位。这个电影院从早上8:00开始营业,营业至次日凌晨2点结束。这个电影院现在打算使用自动售票机,来让观众自己购票。现在请你为这个自动售票机编写一个程序,使得这个自动售票机能够正确工作
二. 需求分析
有一个电影院,有两个电影厅,每两小时播放一部电影。每个电影有不同的票价,观众可以根据自己的喜好选择观看哪部电影,也可选择购买普通票或情侣票,完成交易。并且可以查看当前出票情况等
三. 系统结构图
Movie类
重置函数
统计函数
信息函数
输出电影
函数读取文件
Sell函数
菜单
票房统计
系统重置
购票
四. 类的设计
建立一个Moive类,包括电影序号、名称、播放时间、普通票价、情侣票价、余票信息、座位表等。然后设计成员函数,把9个对象的信息从文件里传进来,用一个sell函数实现自动售票功能。
五.程序代码与说明
#include<iostream>
#include<iomanip>
#include<string>
#include<fstream>
#include<stdio.h>
#include<time.h>
using namespace std;
class Moive{
private:
int seat[10][10];
int n;
string moivename;
string moivetime;
int count;//每场电影的余票统计
static int total;//总售票的统计,每个对象共用
int price[2];//票价数组
public:
Moive(){
n=0;
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
seat[i][j]=0;
count=100;
price[0]=0; //
price[1]=0; //
}
void printseat(){//输出座位表信息
for(int i=0;i<10;i++){
for(int j=0;j<10;j++)
cout<<setw(3)<<seat[i][j];
cout<<endl;
}
}
void sell(){
if(count==0)//判断是否有余票
cout<<"\t\t\t-------对不起,该电影票已售完------"<<endl;
else{
cout<<"\t\t-------请输入您要购买的票数----"<<endl;
int n;int sum=0;
cin>>n;
cout<<"请选择您要的座位“如 X Y 表示第X排,第Y列”,0为未售出,1为已售出。普通座(1-9排)票价"<<price[0]<<",情侣座(第10排)票价"<<price[1]<<endl;
printseat();//调用函数,输出座位表
for(int t=1;t<=n;t++){
cout<<"请选择座位:"<<endl;
int i,j;
cin>>i>>j;
if(seat[i-1][j-1]==0){//顾客购票后,更改座位表信息
seat[i-1][j-1]=1;
if(i==10)//判断是否选择情侣座
sum=sum+price[1];
else sum=sum+price[0];
count--;total++; //余票减1,总票加1
cout<<"\t\t\t您选择了第"<<i<<"排,第"<<j<<"座。"<<endl;//输出选择的座位信息
}
else{
cout<<"\t\t\t该座位已有人,请重新选择座位"<<endl;
cin>>i>>j;
if(seat[i-1][j-1]==0){
seat[i-1][j-1]=1;
if(i==10)
sum=sum+price[1];
else sum=sum+price[0];
count--;total++;
cout<<"\t\t\t您选择了第"<<i<<"排,第"<<j<<"座。"<<endl;
}
}
}
cout<<"\t\t\t总价为"<<sum<<"元,请确认。"<<endl;//付款
int m;
cout<<"\t\t\t请投入所要支付的金额。"<<endl;
cin>>m;
if(m>=sum)
cout<<"\t\t\t购买成功,找零"<<m-sum<<"元。"<<endl;
else
cout<<"\t\t\t对不起,金额不足。"<<endl;
while(m<sum){
cout<<"\t\t\t请投入所要支付的金额。"<<endl;
cin>>m;
if(m>=sum)
cout<<"\t\t\t购买成功,找零"<<m-sum<<"元。谢谢使用!"<<endl;
else
cout<<"\t\t\t对不起,金额不足。"<<endl;
}
}
}
void getdate(int p,string name,string time ,int p1,int p2)
//传参,把文件中读入的数据存到对象
{
n=p;
moivename=name;
moivetime=time;
price[0]=p1;
price[1]=p2;
}
void pdate()//把对象的信息输出
{
cout<<"\t"<<setw(2)<<n<<setw(15)<<moivename<<setw(14)<<moivetime<<setw(5)<<price[0]<<setw(9)<<price[1]<<setw(7)<<count<<endl;
}
void pdate2()//把对象中的信息输出
{
cout<<"\t\t"<<setw(2)<<n<<setw(15)<<moivename<<setw(14)<<moivetime<<setw(7)<<count<<endl;
}
void static ptotal()//用静态成员函数统计总售票
{
cout<<"\t\t 已售票:"<<total<<"。谢谢使用!"<<endl;
}
void setcount()//重置每日票数
{
for(int i=0;i<10;i++)
for(int j=0;j<10;j++)
seat[i][j]=0;
count=100;
}
};
int Moive::total;//静态成员变量的声明
size_t strftime(char *strDest,size_t maxsize,const char *format,const struct tm *timeptr);//获取当前时间
struct tm *localtime(const time_t *timer);
int main()
{
system("cls");//页面变色
system("mode con cols=80 lines=30 &color B");
time_t t=time(0);//获取系统时间
char tmp[64];
Moive moives[10];//建立9个Moive对象
int p;
string name;
string time;
int p1,p2;
ifstream fin;//定义ifstream类(输入文件流类)对象fin
fin.open("moive.txt");//使文件流与movie.txt文件建立关联
fin>>p;
while(!fin.eof())
{
fin>>name>>time>>p1>>p2;
moives[p-1].getdate(p,name,time,p1,p2);//调用函数,传参
fin>>p;
}
fin.close();//关闭文件
int choice=0;
do
{
cout<<endl<<endl<<"\t 欢迎使用光影流年影院自动售票系统\n\n";//页面设计
strftime(tmp,sizeof(tmp), "---%Y/%m/%d %X %A 本年第%j天%z---",localtime(&t));
puts(tmp);
cout<<"\n\n\t\t1 购 票\n\n\t\t2 票 房 查 询\n\n\t\t3 系 统 重 置\n\n\t\t0 退 出"<<endl;
int a;
cin>>choice;//功能选择
if(choice==1)//购票
{
cout<<setw(2)<<"\t 序 号"<<setw(13)<<"电 影 名 称"<<setw(10)<<"时间"
<<setw(9)<<"普通票"<<setw(8)<<"情侣票"<<setw(6)<<"余票"<<endl;
for(int t=0;t<9;t++)
moives[t].pdate();//打印票务信息
cout<<"\t\t -----请输入您要观看的电影序号------"<<endl;
cin>>a;
moives[a-1].sell();//调用购票函数
}
else if(choice==2)//票房统计
{
cout<<endl<<setw(2)<<"\t\t 序号"<<setw(13)<<"电影名称"<<setw(10)<<"时间"<<setw(12)<<"余票"<<endl;
for(int t=0;t<9;t++)
moives[t].pdate2();
cout<<endl;
Moive::ptotal();//今日总售票
}
else if(choice==3)
{
for(int t=0;t<9;t++)
moives[t].setcount();
cout<<"重置成功"<<endl;
}
else if(choice==0)
return 0;
else
{
cout<<"输入有误,请重新输入"<<endl;
cin>>choice;
}
}while(choice!=0);//判断是否继续执行程序
return 0;
}
五. 运行结果与分析
考核成绩评定表
平时成绩
答辩成绩
总成绩
展开阅读全文