资源描述
沈 阳 航 空 航 天 大 学
课程设计
学 号 _153407020324
班 级 _1534070203
姓 名 _ 李蕴琪__
指导教师 孙玉霞
2015年 9 月 21 日
沈阳航空航天大学
课程设计任务书
学院:自动化学院 专业:自动化 班级:1534070203
学号:153407020324 题目:电影院售票系统
一、课程设计时间
二、课程设计内容
用C语言编写软件完成以下任务:
某电影院共有A、B、C、D四个场次在放映,具体的数据如下:
场次 电影名称 放映时间 座位数量 已售票数
A 钢铁侠3 18:30 150 0
B 致青春 19:30 150 0
C 姜戈 20:00 150 0
D 生化危机4 20:20 100 0
请写程序模拟这个售票过程(电影开场10分钟内允许退票,时间函数见参考资料),将所有的信息保存到文件中。
三、课程设计要求
程序质量:
² 贯彻结构化的程序设计思想。
² 用户界面友好,功能明确,操作方便。
² 用户界面中的菜单至少应包括“售票”、“退票”、“统计满座率”、“退出”4项。
² 代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
² 课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、成绩
六、教师评语
沈阳航空航天大学设计用纸
目录
一、需求分析 2
二、设计分析 3
三、主要界面截图 8
四、技术要点 10
五、个人总结 11
六、参考文献 12
七、源程序 12
21
一、需求分析
根据任务书给定的“课程设计内容”和“课程设计要求”作如下的需求分析。
该系统是一个较典型的售票操作系统,其使用者为工作人员和广大消费者,系统应该具有安全、稳定、功能齐全的特点。
1. 安全性分析
该系统管理的数据直接对电影院的收入产生影响,数据量较大且是一种基础性数据,能够为电影院管理提供重要参考,该程序简洁明了,无赘余语句,增加了程序运行的安全性。
2. 稳定性分析
指系统比较健壮,只要是用户的合理操作,系统都应给出合理正确的回应,而不是出现令用户感到意外的系统错误或系统崩溃。
3. 主要功能分析
(1)显示售票系统:这个程序可以模拟电影院售票系统,可以供顾客参考,另外这个系统简单明了,可以让顾客在选择看电影时更容易。
(2)显示满座率:这个系统可以统计电影院的满座率,给管理人员提供了方便,可以更快的计算利润。
(3)显示退票系统:这个程序可以模拟电影院退票系统,可以供顾客参考,另外这个系统方便快捷,可以让顾客在退票时更加容易方便。
二、设计分析
主要有四个功能模块,每个模块对应一个C语言自定义函数。这些函数原型及其功能简述如下:
(1) 添加票据信息函数:
将各个场次的电影名称、放映时间、总票数以及剩余票数添加到函数中,用户在进行买票时对当前数据进行参考,最后决定自己购买哪场电影,为顾客带来方便。
(2) 售票函数:
在该功能模块中,顾客可根据提示信息,选择自己想要购买的电影票,选择适合自己的时间段,自己喜欢的电影以及购买的数量,同时,系统会根据当前票据信息对所买的票数进行判断,如不符合实际情况,会给出提示。
(3) 退票函数:
在该功能模块中,顾客可根据提示信息,选择自己想要
退掉的电影票,选择退票的电影以及退票的数量,同时,
系统会根据当前票据信息及时间信息对所退的票据进行
判断,如不符合实际情况,会给出提示不予退票。
(4)计满座率函数:
该部分里,每场电影售出票时都会进行累加,得出总票数,用售出的票数除上总座位数,即可得出该场的满场率。
1. 程序总体结构图(N-S框图)
打开文件movie_information.txt
if(fp==NULL)
图1文件读取程序图
关闭文件
读取至文件末尾
读取文件内容
“打开文件失败”
返回exit(0)
否
是
图2 买票系统程序图
剩余座位数减一
卖票数加一
输入票数
输出此电影已播放
是
否
电影未播放
输出电影信息
输出无此电影
否
是
if(strcmp(inf[i].name,s)==0)
输入要观看的电影名称
输入想要退票的电影
if(strcmp(inf[i].name,s)==0)
是 否
输 输出电影信息
出
无
此 电影未播出
电 是 否
影 输出
无法 输入票数
退票
座数加一
卖票数减一
图3 退票系统程序图
图3 主程序程序图
Stime( )
Menu( )
Read( )
输入选项choice
Choice=1?
是 否
buy_ choice=2?
ticket() 是 否
quit_ choice=3?
ticket() 是 否
manzuo() choice=4?
是 否
exit(0)
三、 主要界面截图
图1 菜单界面
图2 买票界面
图3 退票界面
图4 满座率界面
四、技术要点
(对本程序贡献较大的C语言知识点;重要算法的设计与实现)
1.结构体的应用:
定义了结构体用来描述电影票的放映时间、座位数量、已售票数、满场率、票价,具体定义如下:
struct inf
{
char rate[20];
char name[20];
int time_hour;
int time_min;
int seat;
int sell;
所定义的结构体主要用于定义数组
2.部分函数的说明:
售票函数buy( ):
在该函数部分,加了一个判断语句,判断顾客所输入的
购买票数是否符合当前情况,若不符合,将给出相应的
提示具体程序如下:
printf("请输入你要观看的电影名称:");
scanf("%s",s);
for(i=0;i<p;i++)
if(strcmp(inf[i].name,s)==0)
五、个人总结
通过一周课设,我的课程设计基本达到要求。
在这为期一星期的C程序课程设计中,让我学到了很多,了解到了自身的不足。我深刻的体会到细心的重要性。C语言程序设计是一个繁琐,需要投入很多的心思和精力的活。有时它会因为一个标点符号,让所有的心血白费。因而我们需要的不仅仅是平日知识的积累,还要养成良好的习惯,才能保证我们的路可以越走越远!同时我也明白,当我们面临困难时,我们应该正面迎击!
让我增加了对c语言的兴趣和对程序的了解,同时增加了我的自信。让我更熟练的编写程序和理解程序。C语言程序也算是对我们耐心的考验,只有不懈的追求,才能迎向胜利的曙光!
六、参考文献
1 谭浩强.C程序设计.北京:清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:中国铁道出版社,2006
七、 源程序
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#include<time.h>
struct inf
{
char rate[20];
char name[20];
int time_hour;
int time_min;
int seat;
int sell;
}inf[10];
char n[20];
int p;
struct tm *ptr;
void menu()
{
printf("*******************menu******************\n");
printf("* 1 买票\n\r");
printf("* 2 退票\n\r");
printf("* 3 满座率\n\r");
printf("* 4 退出\n\r");
printf("*****************************************\n");
}
void read()
{
int i,re;
FILE *fp;
fp=fopen("movie_information.txt","r");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;;i++)
{
re=fscanf(fp,"%s %s %d %d %d %d\n",inf[i].rate,inf[i].name,&inf[i].time_hour,&inf[i].time_min,&inf[i].seat,&inf[i].sell);
if(re==EOF) break;
}
p=i;
for(i=0;i<10;i++)
{
if(inf[i].rate=='\0')
break;
}
printf("读取成功!\n");
fclose(fp);
}
void baocun()
{
int i;
FILE *fp;
fp=fopen("file08.txt","w");
if(fp==NULL)
{
printf("文件打开失败!");
exit(0);
}
for(i=0;i<p;i++)
{
fprintf(fp,"%s %s %d %d %d %d\n",inf[i].rate,inf[i].name,&inf[i].time_hour,&inf[i].time_min,&inf[i].seat,&inf[i].sell);
}
printf("数据保存完毕!\n");
fclose(fp);
}
void stime()
{
time_t it;
it=time(NULL);
ptr=localtime(&it);
printf("现在的时间是%4d年%02d月%02d日 %d:%d:%d\n",ptr->tm_year+1900,ptr->tm_mon+1,ptr->tm_mday,ptr->tm_hour,ptr->tm_min,ptr->tm_sec);
}
int minate(int q,int p)//将时间全部转换为分钟
{
int time_sum;
time_sum=60*q+p;
return time_sum;
}
void buy_ticket()
{
int i,a;
char s[20];
printf("请输入你要观看的电影名称:");
scanf("%s",s);
for(i=0;i<p;i++)
if(strcmp(inf[i].name,s)==0)
{
printf("您想要观看的电影信息如下:\n");
printf("%s %s %d:%d %d %d\n",inf[i].rate,inf[i].name,inf[i].time_hour,inf[i].time_min,inf[i].seat,inf[i].sell);
if(minate(inf[i].time_hour,inf[i].time_min) > minate(ptr->tm_hour,ptr->tm_min))
{
printf("请输入你要购买的票数:");
scanf("%d",&a);
inf[i].seat-=a;
inf[i].sell+=a;
}
else
printf("此电影在今日%d:%d已经开始播放,已经无票\n",inf[i].time_hour,inf[i].time_min);
}
baocun();
}
void quit_ticket()
{
int i,m;
char s[20];
printf("请输入你退票电影名称:");
scanf("%s",s);
printf("请输入你要退票的数目:");
scanf("%d",&m);
for(i=0;i<p;i++)
if(strcmp(inf[i].name,s)==0)
{
printf("退票成功!\n退票后的电影信息如下:\n");
printf("%s %s %d:%d %d %d\n",inf[i].rate,inf[i].name,inf[i].time_hour,inf[i].time_min,inf[i].seat+m,inf[i].sell-m);
}
baocun();
}
void manzuo()
{
int i;
double m;
for(i=0;i<p;i++)
{
m=inf[i].sell*1.0/(inf[i].seat+inf[i].sell)*1.0;
printf("电影%s的满座率为%f:",inf[i].name,m);
}
}
void main ()
{
int choice;
stime();
menu();
read();
system("color f5");
while(1)
{
printf("\n输入你要选择的选项:");
scanf("%d",&choice);
switch (choice)
{
case 1: buy_ticket();break;
case 2: quit_ticket();break;
case 3:manzuo();break;
case 4:exit(0);break;
}
}
}
展开阅读全文