课程设计
学 号 2010041102031
班 级 04110201
姓 名 王帅
指导教师 郭建新
2012年 6 月 21 日
沈阳航空航天大学
课程设计任务书
系:材料科学与工程 专业:材料成型及控制工程 班级:04110201
学号:2010041102031 题目:火车站售票系统
一、课程设计时间
2011~2012第2学期第16周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
每天“沈阳→大连”有5次的火车(假设),具体的数据如下:
班次 发车时间 载客量 已售票数
D1 06:40 500 0
D2 09:30 600 0
A1 13:00 800 0
A2 16:00 800 0
L1 20:00 500 0
请你开发一个小程序,以完成每天的:“沈阳→大连”的售票业务。要求如下:
①能够售票和退票。
②某个火车已经过了开车时间,则该班次不再售票。
③可以随时显示售票现状,并以文件(myfile.test)的形式保存当天各个车次的售票情况。
三、课程设计要求
程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括、“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”等项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:
✧课程结束后,上交课程设计说明书和源程序。课程设计说明书的内容参见提供的模板。
✧
四、指导教师和学生签字
指导教师:________ 学生签名:________
五、成绩
六、教师评语
目 录
一、需求分析 4
二、程序流程图…………………………………...4
三、关键技术分析 7
四、个人总结 ………10
五、参考文献 ………11
六、源程序 ………11
一、需求分析
(1)售票系统要求存储当天各个车次售票情况,所以程序需要定义结构体变量存储售票情况。系统的整体功能通过记录当天各个车次了解售票情况。编程时采取模块化设计思想,设计主函数,通过主函数中的switch分支选择调用各子函数以实现该系统的各种功能。然后设计相应的子函数来执行系统的各种功能,程序还具有退出功能,可以在程序的一次运行当中循环执行所有的功能,并根据需要终止程序的执行。
1、经过对程序设计题目的分析可知,整个程序的设计实现大致分为五个模块,其中每一个模块对应一个函数,他们的功能分别是存储函数(save)、卖票函数、退票函数、定售总金额、退出。
2、增强了程序的实用性,使系统用户界面友好、功能明确、操作方便,应采取直接用printf函数的方式在界面上输出可供用户选择的菜单。据此应该能够很好的完成要求
二、程序流程图
1 程序总体结构图
输入c | ||||||
C=1? 真 假 | ||||||
c 查询当前 售票情况 | C=2? 真 假 | |||||
c 定票 | C=3? 真 假 | |||||
c 退票 | C=4? 真 假 | |||||
" 保存当前车次售票情况 | C=5? 真 假 | |||||
退出 |
图1 程序总体结构图
2 函数功能图
(1)退票函数tuipiao
(2)保存信息的函数save
(3)卖票函数sell
三、主要界面截图
四、关键技术分析
核心技术的实现方法和程序段:
本函数由六个自定义函数和一个主函数组成,其中 主函数以菜单形式调用其他函数来实现要求的所有功能。主函数分别调用保存函数(save)、读取函数、卖票函数、退票函数、订票总金额、退出。程序中较为核心的部分,具体分析如下:
1 保存函数
void save() /*存储函数*/
{
FILE *fp;
int i;
if((fp=fopen("myfile.txt
{printf("cannot open infile\\n");
exit(0);
}
for(i=0;i fclose(fp); printf("\\n"); printf("||||***存储成功!***||||\\n"); printf(" 请选择相应的数字进行下一步操作!\\n"); } 2 查询函数 void search() /*查询函数*/ {int i,j; printf("请输入要查询的班次\\n"); scanf("%s",&j); for(i=0;i {printf("\\n***-------查询售票结果--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); printf("%3s %10s %10s %8d %8d\\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);} } save();; } 3 售票系统: 定义数组存储从获得的数字,为了能够多次输入,我们可以构造像for(i=0;i { int i,c; char a[50]; { int i; { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } } printf("请输入您要购买的班次(格式如:D1):\\n"); scanf("%s",a); printf("请输入您要购买的票数(格式如:10):\\n"); scanf("%d",&c); for(i=0;i { ST[i].maipiao=ST[i].maipiao+c; ST[i].yupiao=ST[i].yupiao-c; printf("***---购买成功---***:\\n"); printf("**********欢迎使用********:\\n"); { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } save(); } } 4 退票系统 void tuipiao() /*退票*/ { int i,c; char a[50]; { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } printf("请输入您要退的班次(格式如:D1):\\n"); scanf("%s",a); printf("请输入您要退的张数(格式如:100):\\n"); scanf("%d",&c); for(i=0;i if(ST[i].maipiao-c>=0) { ST[i].maipiao=ST[i].maipiao-c; ST[i].yupiao=ST[i].yupiao+c; printf("退票成功!!"); printf("**********欢迎使用********:\\n"); printf("\\n\\n***---------退票结果-----------******\\n"); printf("班次 ||发车时间 ||载客量 ||已售票数 ||余票\\n"); for(i=0;i save(); } } 五、个人总结 在这五天的C程序课程设计中,我深刻的体会到细心的重要性。C程序设计是一个繁琐,需要投入很多的心思和精力的活。有时它会因为一个标点符号,让所有的心血白费。所以写程序时真得要仔仔细细的。因而我们需要的不仅仅是平日知识的积累,可以说这门课程还是有难度的,所以以后还要加强对这方面知识的学习,掌握好这门课程对我以后的专业也有很大的好处。 只有养成良好的习惯,才能保证我们的路可以越走越远! 六、参考文献 谭浩强.C程序设计.北京:清华大学出版社,2005 七、源程序 #include #include #include #include #include #define N 5 struct train /*定义结构体*/ { char banci[50]; char facheshijian[50]; char zaikeliang[50]; int maipiao; int yupiao; } ST[N]={ {"D1 {"D2 {"A1 {"A2 {"L1 }; /*声明各函数*/ void search(); void save(); void sell(); void tuipiao(); int menu(); int menu() /*定义菜单*/ { int k; printf("1.查询显示当前售票情况.\\n"); printf("2.买票.\\n"); printf("3.退票.\\n"); printf("4.储存数据.\\n"); printf("5.退出售票系统.\\n"); do{ printf("\\n 请选择(1-5)继续:"); scanf("%d",&k); }while(k<1||k>5); return (k); } void search() /*查询函数*/ {int i,j; printf("请输入要查询的班次\\n"); scanf("%s",&j); for(i=0;i {printf("\\n***-------查询售票结果--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); printf("%3s %10s %10s %8d %8d\\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);} } save();; } void sell() /*售票*/ { int i,c; char a[50]; { int i; { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } } printf("请输入您要购买的班次(格式如:D1):\\n"); scanf("%s",a); printf("请输入您要购买的票数(格式如:10):\\n"); scanf("%d",&c); for(i=0;i { ST[i].maipiao=ST[i].maipiao+c; ST[i].yupiao=ST[i].yupiao-c; printf("***---购买成功---***:\\n"); printf("**********欢迎使用********:\\n"); { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } save(); } } void tuipiao() /*退票*/ { int i,c; char a[50]; { printf("\\n\\n***-------沈阳→大连 火车售票系统--------******\\n"); printf("班次 发车时间 载客量 已售票数 余票 \\n"); for(i=0;i } printf("请输入您要退的班次(格式如:D1):\\n"); scanf("%s",a); printf("请输入您要退的张数(格式如:100):\\n"); scanf("%d",&c); for(i=0;i if(ST[i].maipiao-c>=0) { ST[i].maipiao=ST[i].maipiao-c; ST[i].yupiao=ST[i].yupiao+c; printf("退票成功!!"); printf("**********欢迎使用********:\\n"); printf("\\n\\n***---------退票结果-----------******\\n"); printf("班次 ||发车时间 ||载客量 ||已售票数 ||余票\\n"); for(i=0;i save(); } } void save() /*存储函数*/ { FILE *fp; int i; if((fp=fopen("d:\\\\myfile.txt {printf("cannot open infile\\n"); exit(0); } else{ for(i=0;i fclose(fp); printf("\\n"); printf("*******存储成功!*******\\n"); printf(" 请选择相应的数字进行下一步操作!\\n"); } } void main() {for(;;) { switch(menu()) { case 1:search();break; case 2:sell(); break; case 3:tuipiao();break; case 4:save();break; case 5:exit(0); } } }