火车票管理系统——C语言程序设计实训报告Word文档格式.docx
《火车票管理系统——C语言程序设计实训报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《火车票管理系统——C语言程序设计实训报告Word文档格式.docx(21页珍藏版)》请在冰点文库上搜索。
该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。
所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
本火车票管理系统应该具备如下功能:
1)录入班次:
车次信息包括:
班次、发车时间、起点站、终点站、行车时间、额定载量、已售票)
2)显示所有班次
3)查询班次
4)增加班次
5)售票
6)退票
7)修改班次
8)(退票)删除班次
9)退出
2、系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
1
调用
录入班次
6调用
退票
5调用
售票
4调用
增加班次
2调用
显示所有班次
3调用
查询班次
9调用
退出
8调用
删除班次
7调用
修改班次
火车票信息管理系统
调用主菜单选项
完成功能后返回主菜单
车票管理系统软件的功能模块有:
(1)提供菜单界面,方便用户对程序个功能进行选择,选择要实现的功能按enter键进入该功能。
(2)接受用户输入的功能项,按enter键结束输入并将进入该系统,其需要的结果显示出来,方便用户查看。
(3)完成每次功能,可保存用户的修改的信息,及时更新文件信息。
下次查询时内容为最新信息。
实时的信息更新对比等。
一个名TICKET的结构体进行定义,包括num[10]hour[3];
min[3]from[10];
to[10];
hoursmax;
now;
等结构体成员。
然后对调用函数进行定义。
intsystem_time()系统时间
voidNewMessage()新纪录录入函数
voidShowTable1()voidShowTable2(inti)线框调用1和2不用每次输
voidDisplay()显示所有函数
voidadd()增加记录
voidsave()保存函数
voidload()按班次查询函数
voidsearch()查询函数
voidchange()修改函数
voidquit()退出函数
voidTicketorder()售票函数
voidTicketdelete()删除函数
intmenu_select()菜单函数
intwhether(int)判断时间是否超出函数
voidfind(chars1[],chars2[])查询函数//s1为班次//s2为终点站
voiddeletemessage()删除函数
intfindnum(chars1[])班次查询函数
voidget(int,int)修改及增加班次
char*menu[]菜单函数。
该系统将这些信息均放在文件d:
”车票管理系统0”中。
最后定义main()函数,利用函数调用,实现程序的各种功能。
将其放在系统文件d:
”车票管理系统0”中。
程序分为多个小模块,通过调用实现各种功能,增强了程序的可建设性。
程序把每种功能分开实现,更简单,实用程序更易理解。
2.2详细设计
主控main()函数执行流程
判断键值,调用相应函数,
完成相应功能
开始
登录,确定访问权限
输入[0~9]中的一个数值,选择相应操作,并选择判断输入值
结束
否
是
登录框
主界面
选择窗口
图2.2主控函数执行流程图
3、程序测试
3.0 菜单界面
图3-0菜单界面
如上图所示,该程序为用户提供菜单界面,用户可以对程序的各种功能进行选择,方便用户使用。
选择1-9并按enter键进行操作。
如选择出错,系统将提出警告,并提醒用户重新进行选择。
3.1录入班次功能
图3-1输入时的界面
如上图所示,该功能实现录入班次信息。
选择1按enter键进入该功能,程序提醒用户输入车次.发车时间.起始站.终点站.行车时间.额定载量.已售票数,输入完毕后按enter键将完成录入班次结果,同时程序将再次提醒用户进行新的选择。
3.2显示所有班次
图3-2查询班次界面
可以显示所有录入的信息。
3.3查询所有班次功能
图3-3选择查询方式的界面
该功能将实现程序运行班次的查询。
选择3并按enter键将实现该功能。
分班次和终点站两种方式查询。
3.4增加班次功能
图3-4增加班次界面
该功能将增加班次信息,帮助用户更新班次信息。
选择4并按enter键将实现该功能,再按提示输入就行。
按任意键返回主菜单。
3.5售票功能
图3-5-1选择售票功能界面
图3-3-2订票的界面
选择5按enter键实现该功能,按任意键关闭程序。
买票程序可提示买票成功否,且自动判断是否可卖。
3.6退票功能
图3-6退票界面
选择6按enter键实现该功能,按任意键关闭程序。
退票程序可提示退票成功否,且自动判断是否可退。
3.7修改班次功能
图3-7修改界面
选择7按enter键实现该功能,按任意键关闭程序。
按提示操作修改班次。
3.8删除班次功能
图3-8删除界面
3.9退出功能
图3-9退出界面
该功能可退出系统,选择9按enter键实现该功能
4、详细程序
#include<
stdio.h>
//宏定义函数
string.h>
//字符串操作及内存操作函数
stdlib.h>
//调用系统函数
time.h>
///时间库函数
conio.h>
///输入输出函数
#defineN1000//宏定义多条记录
typedefstructTICKET////定义新结构体TICKET
{
charnum[10];
//车次编号
charhour[3];
//时间:
小时
charmin[3];
分钟
charfrom[10];
//起始站
charto[10];
//终点站
floathours;
//车程实际时间
intmax;
//最大车载容量
intnow;
//已售票数
}CLASS;
intclass_num=0;
//初始班次总数为0
CLASSrecords[N];
//多条记录
intsystem_time();
//系统时间
voidNewMessage();
//新纪录*录入函数******
voidShowTable1();
//线框调用1,不用每次输
voidShowTable2(inti);
//线框调用2,不用每次输
voidDisplay();
//显示所有函数
voidadd();
//增加记录
voidsave();
//保存函数
voidload();
//按班次查询函数
voidsearch();
//查询函数
voidchange();
//修改函数**
voidquit();
//退出函数**
voidTicketorder();
//售票函数**
voidTicketdelete();
//删除函数**
intmenu_select();
//菜单函数**
intwhether(int);
//判断时间是否超出函数***
voidfind(chars1[],chars2[]);
//查询函数//s1为班次//s2为终点站
voiddeletemessage();
//删除函数
intfindnum(chars1[]);
//班次查询函数
voidget(int,int);
//修改及增加班次*
char*menu[]={"
*****************欢迎使用火车票查询系统*****************"
"
\n*****************1751200204何荣荣*********************"
\n*******************MENU功能菜单*********************"
\n1.录入班次"
\n2.显示所有班次"
\n3.查询班次"
\n4.增加班次"
\n5.售票"
\n6.退票"
\n7.修改班次"
\n8.删除班次"
\n9.退出"
};
/**************************主函数*************************/
voidmain()
{
while
(1)//菜单函数循环
{
switch(menu_select())//菜单函数*
{
case1:
NewMessage();
break;
//新纪录*录入函数******
case2:
Display();
//显示函数****
case3:
search();
//查找函数**
case4:
add();
//增加记录**
case5:
Ticketorder();
//*售票函数***
case6:
Ticketdelete();
//(退票)删除函数*
case7:
change();
//修改函数**
case8:
deletemessage();
//选择调用删除函数
case9:
quit();
//退出函数******
}
}
}
/***********************菜单函数**************************/
intmenu_select()//菜单函数*
chars[5];
//定义要输入的数字功能
intc,i;
for(i=0;
i<
11;
i++)
printf("
%s"
menu[i]);
//输出菜单各项)
i=0;
while(c<
0||c>
9)//判断是否是1到9的命令
{
\n"
);
//输出换行
printf("
******************************************************"
\n请选择(1-9):
scanf("
s);
c=atoi(s);
//atoi将字符串转换成一个整数值
}///输出菜单面
returnc;
////返回请求
/*******************************录入函数************************************/
voidNewMessage()//*录入函数*
{
inti=0,j=5,h;
FILE*fp;
//定义文件型指针变量
if((fp=fopen("
d:
车票管理系统0.dat"
"
rb"
))!
=NULL)//fopen打开文件
车票信息已经存在请选择4增加功能!
任意输入则返回菜单\n"
i=1;
//通过是1
}
if(i==0)
{
请输入要录入班次总数:
%d"
&
class_num);
//指向班次指针
for(i=0;
class_num;
i++)
{
printf("
请输入第%d个班次信息:
i+1);
h=-1;
for(;
h!
=i;
)//循环输出
{
printf("
请输入班次:
scanf("
records[i].num);
for(h=0;
h<
i;
h++)
if(strcmp(records[h].num,records[i].num)==0)
//判断字符串比较是否相等,待比较的字符串
{
printf("
输入错误!
该班次已存在!
break;
//返回
}
}
get(i,j);
//修改及增加班次*
j=5;
save();
//调用保存函数
/*******************************显示所有函数********************************/
voidDisplay()//显示所有函数
inti,j;
load();
//调用按班次查询函数
ShowTable1();
//线框调用1,不用每次输
for(i=0,j=0;
i++,j+=2)/////按班次顺序输出
\n|----------|----------|----------|----------|--------|--------|--------|\n"
if(whether(i))//判断时间是否超出函数***
|%10s|%5s:
%-4s|%10s|%10s|%8.1f|%8d|%8d|"
records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
|%10s|已发车|%10s|%10s|%8.1f|%8d|%8d|"
records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
ShowTable2(j);
//线框调用2
printf("
\n按任意键继续....\n"
getch();
/////从控制台读取一个字符,但不显示在屏幕上
/**********************************打印表头***********************************************/
voidShowTable1()//线框调用1,不用每次输
inti=2;
**************************MESSAGE车程信息**********************************\n"
\n|班次|发车时间|起点站|终点站|行车时间|额定载量|已售票|\n"
/***************************************打印表尾************************************************/
voidShowTable2(inti)//线框调用2,不用每次输。
{
/**************************查找函数11**************************/
voidsearch()////查询调用
inti;
chars1[10]={'
\0'
},s2[10]={'
1.按班次查询\n"
2.按终点站查询\n"
3.退出\n"
请选择(1-3):
scanf("
i);
switch(i)//多分枝选择语句
case1:
printf("
请输入要查询的班次:
//////s1为班次
s1);
find(s1,s2);
/////调用查找函数2