资源描述
沈 阳 航 空 航 天 大学
课程设计
学 号 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=2?
真 假
定票
C=3?
真 假
退票
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","w+"))==NULL)
{printf("cannot open infile\n");
exit(0);
}
for(i=0;i<N;i++)
fwrite(&ST[i],sizeof(ST),1,fp);
fclose(fp);
printf("\n");
printf("||||***存储成功!***||||\n");
printf(" 请选择相应的数字进行下一步操作!\n");
}
2 查询函数
void search() /*查询函数*/
{int i,j;
printf("请输入要查询的班次\n");
scanf("%s",&j);
for(i=0;i<N;i++)
{if(int(ST[i].banci)==j)
{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<N;i++)来实现我们的要求;如果输入和班次相符可进行 if(strcmp(ST[i].banci,b)==0) 来继续获得不同的一组数字,直到买票成功,如果买票后,将会显示相关信息来提示买票成功。本函数结束,退出。
void sell() /*售票*/
{
int i,c;
char a[50];
{
int i;
{
printf("\n\n***-------沈阳→大连 火车售票系统--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
}
printf("请输入您要购买的班次(格式如:D1):\n");
scanf("%s",a);
printf("请输入您要购买的票数(格式如:10):\n");
scanf("%d",&c);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,a)==0) /*判断班次是否符合*/
{
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<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
save();
}
}
4 退票系统
void tuipiao() /*退票*/
{
int i,c;
char a[50];
{
printf("\n\n***-------沈阳→大连 火车售票系统--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
printf("请输入您要退的班次(格式如:D1):\n");
scanf("%s",a);
printf("请输入您要退的张数(格式如:100):\n");
scanf("%d",&c);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,a)==0)
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<N;i++)
printf("%4s %10s %7s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
save();
}
}
五、个人总结
在这五天的C程序课程设计中,我深刻的体会到细心的重要性。C程序设计是一个繁琐,需要投入很多的心思和精力的活。有时它会因为一个标点符号,让所有的心血白费。所以写程序时真得要仔仔细细的。因而我们需要的不仅仅是平日知识的积累,可以说这门课程还是有难度的,所以以后还要加强对这方面知识的学习,掌握好这门课程对我以后的专业也有很大的好处。
只有养成良好的习惯,才能保证我们的路可以越走越远!
六、参考文献
谭浩强.C程序设计.北京:清华大学出版社,2005
七、源程序
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
struct train /*定义结构体*/
{
char banci[50];
char facheshijian[50];
char zaikeliang[50];
int maipiao;
int yupiao;
}
ST[N]={
{"D1","06:40","500",0,500},
{"D2","09:30","600",0,600},
{"A1","13:00","800",0,800},
{"A2","16:00","800",0,800},
{"L1","20:00","500",0,500}
};
/*声明各函数*/
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<N;i++)
{if(int(ST[i].banci)==j)
{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<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
}
printf("请输入您要购买的班次(格式如:D1):\n");
scanf("%s",a);
printf("请输入您要购买的票数(格式如:10):\n");
scanf("%d",&c);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,a)==0) /*判断班次是否符合*/
{
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<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
save();
}
}
void tuipiao() /*退票*/
{
int i,c;
char a[50];
{
printf("\n\n***-------沈阳→大连 火车售票系统--------******\n");
printf("班次 发车时间 载客量 已售票数 余票 \n");
for(i=0;i<N;i++)
printf("%3s %10s %10s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
}
printf("请输入您要退的班次(格式如:D1):\n");
scanf("%s",a);
printf("请输入您要退的张数(格式如:100):\n");
scanf("%d",&c);
for(i=0;i<N;i++)
if(strcmp(ST[i].banci,a)==0)
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<N;i++)
printf("%4s %10s %7s %8d %8d\n",ST[i].banci,ST[i].facheshijian,ST[i].zaikeliang,ST[i].maipiao,ST[i].yupiao);
save();
}
}
void save() /*存储函数*/
{
FILE *fp;
int i;
if((fp=fopen("d:\\myfile.txt","w+"))==NULL)
{printf("cannot open infile\n");
exit(0);
}
else{
for(i=0;i<N;i++)
fwrite(&ST[i],sizeof(ST),1,fp);
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);
}
}
}
展开阅读全文