火车订票管理系统主程序流程_火车订票系统流程图
火车订票管理系统主程序流程由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“火车订票系统流程图”。
程序简介
此程序是采用多文件模块化形式编写;其中自定义头文件中包括了程序中所有调用的函数的声明,以及需要的所有系统头文件。
#include #include #include #include #include #include extern void searchtrain(link l);extern void Modify(link l);extern void showtrain(link l);extern void SaveTrainInfo(link l);extern void printdata(Node *q);extern void printhead();等
编写时的分块包括订票块、查询块、输出块,及已订票修改部分等。
订票块则包含了定票流程的所有代码。查询块中是通过车次号码或是到达城市来查询的。输出部分包括了主界面的输出,已定车票信息的输出,所查车次信息输出的头部分。订票修改即是改定过程的编程。
即此程序包括了查询、订票、改定的流程。
编程过程
在编写该程序时,遇到了信息的保存问题。订票时与改定时的录入信息的保存不知如何处理;之后将保存的部分分为链表暂存和文件的保存,在录入信息时是暂存在链表中的,当离开此系统是会提示是否保存信息,若是则保存到文件中。此举方便了票的改定,将数据分割开了,也精简了程序,更便于阅读。
编程模块划分后,编写程序之后的编译时,总是连分文件编译时都无法通过。但是写入的代码经过检查又没有问题,一直困扰着我。直到想起老师教的课本以外的知识,并以一种玩玩试一试的心态用条件编译得以解决此问题。
同时在编程时多次用到“清屏”,保证了输出界面的简洁。
在分出模块后,未完成所有部分的编程时的试运行时出现刚一进入子程序时便会回到主界面,后发现时由于只有输出部分没有输入部分,每当运行完子程序后回到主程序时都会被“清屏”,结果造成编译时正常,到运行时却漏洞百出。
在编程时,由于对文件的处理不熟悉,以及计算机的设置问题没考虑,使用了‘w+’的调用方式,使得在保存数据到文件时出现无法写入文件的现象。在百度,问同学以及问老师后才用‘wb+’和别的方式调用,并写入成功。
这个程序时我学习计算机c以来编写的最大型涵盖面最广的一个程序,没有之一。但同时我也知道这在c语言编程中也只是很小的一个小程序而已,我在这编程中发现:我要学的还有很多,大型程序也不是一个人能写出来的,会一些编程技巧是很有必要的,与人合作是
– 1 – 必须的,当然了,我不是在写诗,而是真的这么觉得。一个人会的有限,专精方向也不同,若能好好的合作肯定可以超过一个人单干。
部分源代码
订票程序
#ifndef TRAINHEAD_H #define TRAINHEAD_H #include“trainhead.h” #endif/*条件编译,作用是防止头文件被重复引用*/ int saveflag = 0;void Bookticket(link l,booklink k){ Node *p[10],*q;char c[2],tnum[10],str[10],str1[10];Book *r,*s;int i = 0,t = 0,flag = 0,dnum;r = k;while(r->next!=NULL)
r = r->next;printf(“Input the city you want to go:”);scanf(“%s”,&str);q = l->next;while(q!=NULL)
{
if(strcmp(q->data.reachcity,str)==0)
{
p[i] = q;
i++;
}
q = q->next;
}
printf(“nthe number of record have %dn”,i);
printhead();
for(t=0;t
printdata(p[t]);
if(i==0)
printf(“nSorry!Can't find the train for you!n”);
else
{
printf(“ndo you want to book it?n”);– 2 –
scanf(“%s”,c);
if(strcmp(c,“Y”)==0||strcmp(c,“y”)==0)/*判断是否订票*/
{
s =(Book*)malloc(sizeof(Book));
printf(“nInput your name: ”);
scanf(“%s”,&s->data.name);
printf(“nInput your ID: ”);
scanf(“%s”,&str1);
相应减少*/
strcpy(s->data.num,str1);printf(“nplease input the number of the train:”);scanf(“%s”,tnum);for(t=0;tdata.num,tnum)==0){ if(p[t]->data.ticketnum
printf(“nsorry,no ticket!”);
Sleep(2);
return;} printf(“nremain %d ticketsn”,p[t]->data.ticketnum);flag = 1;break;} if(flag==0){ printf(“ninput error”);Sleep(2);return;} printf(“nInput your bookNum: ”);scanf(“%d”,&dnum);p[t]->data.ticketnum=p[t]->data.ticketnum-dnum;/*定票成功则可供订的票数s->data.bookNum = dnum;s->next = NULL;r->next = s;r = s;printf(“nLucky!you have booked a ticket!”);getch();
– 3 –
} } } saveflag = 1;使用说明
运行程序时,首先进入到菜单部分,菜单部分提供了菜单显示和输入功能部分。其运行效果如图19.1所示。在主界面上输入数字0——6,实现相应的功能。
图19.1 火车订票系统主界面
主界面输入“1”,进入添加火车信息界面,如图19.2所示。根据屏幕上给出的提示输入火车的车次,起点,终点,出发时间,到达时间,票价和可以订购的票数。
– 4 –
图19.2 输入效果图
主界面输入“2”,可以查询火车信息,可以选择查询的方法有两种,一种是按照车次查询,一种是按照你想要到达的地方查询,运行效果如图19.3所示。
– 5 –
图19.3 查询效果图
当在主界面输入“3”时,进入订票界面,按照提示输入你想要到达的城市,会自动显示出你终点站为你输入城市的信息,根据提示输入你是否决定订票以及你的个人信息,运行效果如图19.4所示。
图19.4 订票效果图
当在主界面输入“4”时,进入修改界面,根据提示输入你要修改的内容,修改模块的运行效果如图19.5所示。
– 6 –
图19.5 修改效果图
当在主界面输入“5”时,可以显示出所有的火车信息,显示模块效果如图19.6所示。
– 7 –
图19.6 显示效果图
当在主界面输入“6”时,进入到保存模块,将录入的火车信息进行保存,并且将订票人的信息也进行保存,存储在指定的磁盘文件中。运行效果如图19.7所示。
图19.7 保存效果图
– 8 –