铁路客运售票模拟系统_铁路客运售票
铁路客运售票模拟系统由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“铁路客运售票”。
学生实习报告
课程名称_ 数据结构与数据处理应用训练 题目名称 学生学院 专业班级
学 号
学生姓名
指导教师
2014 年 2 月
日
[单击此处添加课程设计题目]
XXX
计算分院 计算1103
【摘要】
模拟铁路客运售票系统,采用链表结构储存数据,有订票、退票、查询、修改、读取文件等功能模块,整体系统运行为一个无限循环,根据输入指令进行不同操作,主要知识有结构的定义,链表的操作,循环的应用。
【关键词】
铁路客运售票模拟系统,查询车次,车票预订,办理退票 内容与要求
铁路客运售票模拟系统 【问题描述】
铁路客运售票系统的业务活动包括:查询车次、车票预订和办理退票。试设计一个铁路客运售票模拟系统,使上述业务可以借助计算机来完成。【具体要求】
铁路客运售票处的计算机系统可以为客户提供下列各项服务:
1. 查询车次:根据旅客提供的出发站、到达站、出发日输出下列信息:
车次号、出发站、到达站、出发时间、到达时间、各类车票的余票额(包括软卧、硬卧、软座、硬座、无座)等。还可根据客户要求,输出某车次从起点站到终点站的各站点的名称及出发时间和到达时间。
2.承办订票业务:根据客户提出的要求(日期、车次号、座位类别、订票数额)查询该车次该座位类别票额情况,若尚有余额,则为客户办理订票手续,并输出座位号(座位号信息的输出可作为选做部分);若无票或余票额少于订票额,则需要重新询问客户要求。若客户需要,可预约登记排队等候。
3.承办退票业务:根据客户提供的情况(日期、车次号、座位类别、退票数额),为客户办理退票手续,然后查询该车次该座位类别是否有人预约登记,首先询问排在第一的客户,若退票数能满足他的要求,则为他办理订票手续,否则依次询问其他排队预约的客户。为简化问题,可以规定同一个座位只能售出一次票,即不考虑同一个座位分不同路段出售多次。还可规定只能查询或预订未来3天之内的车票,即每个车次只需分别保存3个班次的售票情况。【实现提示】
每个车次应包含的信息有:车次号、出发日、起点站名、各中途站名、终点站名、各站点的到达时间与出发时间、各类座位车票定额、各类座位余票额、各座位是否已售出信息(选做内容,可用一张表记录每个座位是否已售出)、各类座位已订票的客户名单(包括姓名、出发站、到达站、订票额、座位号(选做))和各类座位预约登记的客户名单(包括姓名、出发站、到达站、所需票额)。这最后两项显然可以分别用线性表和队列实现(每一类别的座位需有各自的线性表和队列)。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构;由于预约人数无法预料,队列也应以链表作存储结构。整个系统需汇总各车次的情况记录在一张线性表上,由于车次基本不变,可采用顺序存储结构,并按车次有序,因为每个车次需保存未来3天的售票情况,可考虑每个车次的每一班次是这张表上的一个记录,也可以每个车次是一个记录,里面分别包含3趟班次的售票情况。每个记录需定义成一个结构类型。【测试数据】
自己设计,报告上要求写出多批数据测试结果。【实现说明】
每个同学可以根据自己的实际情况对该铁路客运售票模拟系统的功能进行增减。有能力的同学在完成上述功能的基础上,可以充分发挥自己的想象力,增加该系统的功能和其它服务项目,如可以按照实用性来完善上述模拟系统,考虑输出座位号信息、同一个座位允许分不同路段出售多次等;能力较弱的同学则可以简化上述系统,如不考虑预约登记排队等候车票、不考虑各种座位类别(即每个车次只有一种座位)、还可以不考虑中途站点(即每个车次只设置起点站与终点站,中间不停)等。总体设计
开始判断操作指令继续下一轮指令1.订票先根据出发站和到达站查询列车班次,然后订票2.退票根据姓名,时间,车次,座位类别进行退票3.查询输出所有路线信息与乘客信息5.读取文件读取存档文件中的路线信息和乘客信息1.增加路线输入增加路线信息4.修改路线判断操作指令2.删除路线输入删除路线日期与车次6.退出退出程序3.修改密码3 详细设计
路线信息
typedef struct trainline //路线 { char date[9];//日期
char train_num[8];//车次号 struct station *sta;//途经站
char begin_time[6];//出发时间
char end_time[6];//到达时间
int RW;//软卧余量
int YW;//硬卧余量
int RZ;//软座余量
int YZ;//硬座余量
int WZ;//无座余量 struct trainline *next;//下一个节点 }trainline;
停靠站点信息
typedef struct station//停靠站 { char stop[9];//停靠站名
char stop_time;//停靠时间
struct station *next;//下一个节点 }station;
乘客订票信息
typedef struct customer //乘客 { char name[9];//顾客名
char date[9];//日期
char train_num[9];//车次号 int seat_level;//座位类别
int seat_num;//座位数量
struct customer *next;//下一个节点 }customer;
找到路线链表中的末尾节点
status increase_train(trainline *l,char *date,char *train_num, station *stat,char *begin_time,char *end_time, int RW,int YW,int RZ,int YZ,int WZ)//增加路线 将需要插入的路线信息插入到链表中指定节点之后
status insert_trainline(trainline **p,char *date,char *train_num,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//trainline链表插入操作
将需要插入的乘客订票信息插入到链表中
status insert_customer(customer **p,char *name,char *date,char *train_num,int seat,int seat_num)//customer链表插入操作
删除某条路线,首先搜索到该路线,然后在链表中跳过该节点
status delete_trainline(trainline *h,char *date,char *train_num)//删除路线
删除某条乘客订票记录,首先搜索到该记录,然后在链表中跳过该节点
status delete_customer(customer *h,char *date,char *train_num)//删除顾客 修改路线座位余量,首先搜索到该路线,然后删除对应的座位类别的余量
trainline *modefy_trainline(trainline *l,char *date,char *train_num,int seat_level,int num)//修改trainline链表中的数据 退票,首先搜索到该订票记录,然后确定退票数量,如果大于订票数量,则减去退票数量;如果等于退票数量,则删除此订票记录;如果小于,则输出数量不足,退票失败。如果退票成功,则路线中相应座位余量增加。
status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票
以下两个函数是为了方便操作所赋予的初始化数据
status creat_trainline(trainline **l)//创建trainline单链表 status creat_customer(customer **l)////创建customer单链表
订票查询,根据提供站点,查找路线,判断同意路线中是否有这两个站点,并且顺序正确 void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数 订票,首先找到该车次,然后判断余量是否够,如果够,则订票;反之,订票失败。订票成功,则增加乘客订票记录,兵减少相应车次的座位余量。
status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数
根据路线链表和乘客链表逐个输出信息
status print_trainline(trainline *l)//打印路线信息 status print_customer(customer *l)//打印乘客信息
根据路线链表和乘客链表,逐个在 C盘 trainline.dat 和 customer.dat 文件中输出信息 status save_trainline(trainline *l)//保存trainline.dat status save_customer(customer *l)//保存乘客信息 customer.dat
从 C盘 trainline.dat 和 customer.dat 文件中读取记录,并用订票和增加路线函数逐条添加到系统中
status load_trainline(trainline *l)//导入路线信息,必须为5个站 status load_customer(customer *l)//导入乘客信息程序测试查询路线、乘客信息
status print_trainline(trainline *l)//打印路线信息 status print_customer(customer *l)//打印顾客信息订票 首先查询 出发站-终点站
void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数
然后根据查询结果购买自己需要车次 status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数
订票后的查询结果退票(可以全部退完,也可以退一部分)status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票
退票后查询结果修改路线 默认密码12345678 代码:pa[9]=“12345678”增加路线 status increase_train(trainline *l,char *date,char *train_num, station *stat,char *begin_time,char *end_time, int RW,int YW,int RZ,int YZ,int WZ)//增加路线
注意时间“:”为英文字符,输入中文字符会报错
增加路线后查询结果删除路线
删除路线后查询结果读入文件
status load_trainline(trainline *l)//导入路线信息,必须为5个站 status load_customer(customer *l)//导入乘客信息
隐藏密码函数
status inputpaword(char cc[9])//隐藏密码为*号的函数
系统存档 status save_trainline(trainline *l)//保存trainline.dat status save_customer(customer *l)//保存顾客信息 customer.dat
每完成一轮操作 系统自动存档一次,如果需要继续上一回的存档,请打开后直接选5读入存档总结
[单击此处添加正文]
参考文献
1.徐孝凯.数据结构实用教程.清华大学出版社.2006.9
附录
Slove.h #define OK 1 #define TRUE 1 #define FALSE 0 #define ERROR 0 #define OVERFLOW-2 #define PR printf #define RUANW 1 #define YINGW 2 #define RUANZ 3 #define YINGZ 4 #define WUZ 5
typedef int status;typedef struct trainline //路线 { char date[9];//日期
char train_num[8];//车次号 //char begin_place[9];//出发地
//char end_place[9];//目的地
struct station *sta;//途经站
char begin_time[6];//出发时间
char end_time[6];//到达时间 // int total;//座位总数 // int left;int RW;//软卧余量 int YW;//硬卧余量
int RZ;//软座余量
int YZ;//硬座余量
int WZ;//无座余量
struct trainline *next;//下一个节点 }trainline;
typedef struct station//停靠站 { char stop[9];//停靠站名
char stop_time;//停靠时间
struct station *next;//下一个节点 }station;
typedef struct customer //乘客 { char name[9];//顾客名
char date[9];//日期
char train_num[9];//车次号
int seat_level;//座位类别
int seat_num;//座位数量
struct customer *next;//下一个节点 }customer;
station *init_station()//初始化途经站 { station *l;l=(station*)malloc(sizeof(station));
if(l==NULL)exit(0);
l->next=NULL;return l;}
trainline *init_trainline()//初始化路线链表 { trainline *l;
l=(trainline*)malloc(sizeof(trainline));
if(l==NULL)exit(0);
l->next=NULL;return l;}
customer * init_customer()//初始化乘客链表 { customer *l;l=(customer*)malloc(sizeof(customer));
if(l==NULL)exit(0);
l->next=NULL;return l;}
status insert_trainline(trainline **p,char *date,char *train_num,//char *begin_place,char *end_place,station *stat,char *begin_time,char *end_time,int RW,int YW,int RZ,int YZ,int WZ)//trainline链表插入操作 { trainline *q;q=(trainline*)malloc(sizeof(trainline));
strcpy(q->date , date);strcpy(q->train_num , train_num);//strcpy(q->begin_place , begin_place);//strcpy(q->end_place , end_place);q->sta=stat;strcpy(q->begin_time , begin_time);strcpy(q->end_time , end_time);q->RW =RW;q->YW =YW;q->RZ =RZ;q->YZ =YZ;q->WZ =WZ;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;//PR(“insert %d ,%dis succed!n”,e,bl);return OK;}
status insert_customer(customer **p,char *name,char *date,char *train_num,int seat,int seat_num)//customer链表插入操作 { customer *q;q=(customer*)malloc(sizeof(customer));
/* { PR(“内存分配失败n”);return OVERFLOW;}*/ strcpy(q->name , name);strcpy(q->date , date);strcpy(q->train_num , train_num);q->seat_level =seat;q->seat_num =seat_num;q->next=NULL;(*p)->next=q;(*p)=(*p)->next;//PR(“insert %d ,%dis succed!n”,e,bl);return OK;}
status delete_trainline(trainline *h,char *date,char *train_num)//删除路线 { trainline *p,*pr;pr=h;p=pr->next;while(p!=NULL){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
pr->next =p->next;
PR(“删除 %s 车次n”,p->date);
return OK;
}
pr=pr->next;
p=pr->next;} PR(“无此车次,无法删除!n”);return ERROR;}
status delete_customer(customer *h,char *date,char *train_num)//删除顾客 { customer *p,*pr;pr=h;p=pr->next;while(p!=NULL){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
pr->next =p->next;
}
pr=pr->next;
p=pr->next;} return OK;}
trainline *modefy_trainline(trainline *l,char *date,char *train_num,int seat_level,int num)//修改trainline链表中的数据 { trainline *p;p=l->next;for(;p!=NULL;p=p->next){
if(strcmp(date,p->date)==0 && strcmp(train_num,p->train_num)==0)
{
if(seat_level == RUANW)p->RW += num;
else if(seat_level == YINGW)p->YW += num;
else if(seat_level == RUANZ)p->RZ += num;
else if(seat_level == YINGZ)p->YZ += num;
else if(seat_level == WUZ)p->WZ += num;
// PR(“modefy %sn”,p->line_num);
return l;
} } PR(“没有这个路线,无法完成修改任务!n”);return 0;}
status delete_cus(customer *h,trainline *l,char *name,char *date,char *train_num,int level,int num)//乘客退票 { customer *p,*pr;int seat_num;// qr=h;pr=h;p=pr->next;// PR(“开始删除n”);while(p!=NULL){
if(strcmp(name,p->name)==0 && strcmp(date,p->date strcmp(train_num,p->train_num)==0 && level==p->seat_level)
{
seat_num=p->seat_num;
l=modefy_trainline(l,date,train_num,level,num);
if(num == seat_num){
pr->next =p->next;
PR(“乘客 %s 退票成功!n”,p->name);
}
else if(num
p->seat_num-= num;
PR(“乘客 %s 退票成功!n”,p->name);
}
else
PR(“数量不足,退票失败!n”,p->name);
return OK;
}
pr=pr->next;
p=pr->next;} PR(“无此顾客,无法退票!n”);return ERROR;}
status creat_trainline(trainline **l)//创建trainline单链表 { trainline *p=*l;int i=0;char *date[3]={“20140224”,“20140226”,“20140225”};char *train_num[3]={“T01”,“D02”,“G03”};char place[3][5][9]={“北京”,“杭州”,“上海”,“南昌”,“广州”,“广州”,“上海”,“金山”,“北京”,“敦煌”,“嘉兴”,“北京”,“上海”,“山西”,“深圳”};station *stat[3];for(i=0;i
stat[i]=init_station();
for(int j=0;j
station *st;
st=(station*)malloc(sizeof(station));
strcpy(st->stop,place[i][j]);
//可以在这里加停靠时间
st->next=stat[i];
stat[i]=st;)==0 &&
}
//stat[i]->next=NULL;} char *begin_time[3]={“12:02”,“22:42”,“05:09”};char *end_time[3]={“17:15”,“06:07”,“10:54”};int RW[3]={100,100,100};int YW[3]={100,100,100};int RZ[3]={100,100,100};int YZ[3]={100,100,100};int WZ[3]={100,100,100};for(i=0;i
insert_trainline(&p,date[i],train_num[i],stat[i],//begin_place[i],end_place[i],begin_time[i],end_time[i],RW[i],YW[i],RZ[i],YZ[i],WZ[i]);
return OK;}
status creat_customer(customer **l)////创建customer单链表 { customer *p=*l;int i=0;char *name[3]={“yangj”,“yunhl”,“fangs”};char *date[3]={“20140224”,“20140225”,“20140226”};char *train_num[3]={“T01”,“G03”,“D02”};int seat_level[3]={RUANW,YINGZ,WUZ};int seat_num[3]={2,3,4};for(i=0;i
insert_customer(&p,name[i],date[i],train_num[i],seat_level[i],seat_num[i]);
return OK;}
status increase_train(trainline *l,char *date,char *train_num, station *stat,char *begin_time,char *end_time, int RW,int YW,int RZ,int YZ,int WZ)//增加路线 { trainline *p=l->next;for(;p->next!=NULL;p=p->next){} insert_trainline(&p,date,train_num,stat,//begin_place,end_place,begin_time,end_time,RW,YW,RZ,YZ,WZ);PR(“增加车次 %s %s 成功!n”,date,train_num);return OK;}
status book(trainline *l,char *date,char *train_num,customer *c,char *name,int seat_level,int num)//订票函数 { trainline *p=l;customer *q=c->next;p=l->next;for(;q->next!=NULL;q=q->next){} // PR(“%sn”,q->name);for(;p!=NULL;p=p->next){
if(strcmp(date,p->date)==0)
{
if(seat_level == RUANW && p->RW >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->RW-=num;
return OK;
}
else if(seat_level == YINGW && p->YW >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->YW-=num;
return OK;
}
else if(seat_level == RUANZ && p->RZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->RZ-=num;
return OK;
}
else if(seat_level == YINGZ && p->YZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->YZ-=num;
return OK;
}
else if(seat_level == WUZ && p->WZ >0)
{
PR(“恭喜您!订票成功!n”);
insert_customer(&q,name,date,train_num,seat_level,num);
p->WZ-=num;
return OK;
}
else PR(“对不起,余量不足!n”);
return 0;
} } PR(“对不起,没有这个路线号!n”);return ERROR;}
void book_search(trainline *l,char *begin_place,char *end_place)//订票查询函数 { trainline *p=l;//customer *q=c->next;p=l->next;//for(;q->next!=NULL;q=q->next){} // PR(“%sn”,q->name);for(;p!=NULL;p=p->next){
station *st=p->sta;
int stop_begin=0,stop_end=0,flag=1;
for(;st->next!=NULL;st=st->next){
if(strcmp(begin_place,st->stop)==0)
stop_begin=flag++;
if(strcmp(end_place,st->stop)==0)
stop_end=flag++;
if(stop_begin==1 && stop_end==2){
PR(“%15s%5s%12s%c%5s%10d%5d%5d%5d%5dn”,p->date ,p->train_num , //p->begin_place ,'-',p->end_place ,p->begin_time ,'-',p->end_time , p->RW ,p->YW,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
PR(“途经: ”);
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);
break;
}
} } }
status print_trainline(trainline *l)//打印路线信息 { trainline *p=l->next;for(;p!=NULL;p=p->next){
PR(“%15s%5s%12s%c%5s%10d%5d%5d%5d%5dn”,p->date ,p->train_num ,//p->begin_place ,'-',p->end_place ,p->begin_time ,'-',p->end_time ,p->RW ,p->YW,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
PR(“途经: ”);
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);}
return OK;}
status print_customer(customer *l)//打印顾客信息 { customer *p=l->next;for(;p!=NULL;p=p->next)
PR(“%5s %9s %5s %6d %6dn”,p->name ,p->date ,p->train_num ,p->seat_level ,p->seat_num);
return OK;}
status save_trainline(trainline *l)//保存trainline.dat { FILE *fp_trainline;trainline *p=l->next;char filename[]=“c: rainline.dat”;if((fp_trainline=fopen(filename,“wb”))==NULL){
printf(“can not open file to write:%sn”,filename);
return ERROR;} for(;p!=NULL;p=p->next){
fprintf(fp_trainline,“%s,%s,%s,%s,%d,%d,%d,%d,%d,”,p->date ,p->train_num , //p->begin_place ,p->end_place ,p->begin_time ,p->end_time ,p->RW ,p->YW ,p->RZ ,p->YZ ,p->WZ);
station *st=p->sta;
for(;st->next!=NULL;st=st->next){
fprintf(fp_trainline,“%s,”,st->stop);
}
fprintf(fp_trainline,“#”);} fclose(fp_trainline);return OK;}
status save_customer(customer *l)//保存顾客信息 customer.dat { FILE *fp_customer;customer *p=l->next;char filename[]=“c:customer.dat”;if((fp_customer=fopen(filename,“wb”))==NULL){
printf(“can not open file to write:%sn”,filename);
return ERROR;} for(;p!=NULL;p=p->next){
// PR(“%s,%s,%dn”,p->name ,p->line_num ,p->seat_num);
fprintf(fp_customer,“%s,%s,%s,%d,%d,#”,p->name ,p->date ,p->train_num ,p->seat_level ,p->seat_num);} fclose(fp_customer);return OK;}
int changStrInt(char *ch)//把字符串转化为整型 { int a=1,b=0,c=0,i;for(i=strlen(ch)-1;i>=0;i--){
if(ch[i]47)
{
b=a*(ch[i]-48);
a=a*10;
c=c+b;
}
else
{
PR(“%c 不合法,无法将此字符串转化为整形!n”,ch[i]);
return 0;
}
// printf(“the c is %dn”,c);} return c;}
status load_trainline(trainline *l)//导入路线信息,必须为5个站 { FILE *fp_trainline;int flag=0,i=0;char ch;char date[9];//日期
char train_num[9];//车次号
char begin_time[6],end_time[6];//时间
char RW_str[5],YW_str[5],RZ_str[5],YZ_str[5],WZ_str[5];//座位余量字符串
int RW,YW,RZ,YZ,WZ;//座位余量 char place[9];//站名
station *sta=init_station();//途经站
// trainline *p=l;char filename[]=“c: rainline.dat”;if((fp_trainline=fopen(filename,“rb”))==NULL){
printf(“can not open file to load:%sn”,filename);
return ERROR;} while(!feof(fp_trainline)){
ch=fgetc(fp_trainline);
if(ch!='#')
{
if(flag==0&&ch!=','){ date[i]=ch;i++;} else if(flag==1&&ch!=','){ train_num[i]=ch;i++;} else if(flag==2&&ch!=','){ begin_time[i]=ch;i++;} else if(flag==3&&ch!=','){ end_time[i]=ch;i++;} else if(flag==4&&ch!=','){ RW_str[i]=ch;i++;} else if(flag==5&&ch!=','){ YW_str[i]=ch;i++;} else if(flag==6&&ch!=','){ RZ_str[i]=ch;i++;} else if(flag==7&&ch!=','){ YZ_str[i]=ch;i++;} else if(flag==8&&ch!=','){ WZ_str[i]=ch;i++;
} else if(flag>=9&&flag
place[i]=ch;
i++;} else if(ch==','){
if(flag==0)date[i]=0;
else if(flag==1)train_num[i]=0;
else if(flag==2)begin_time[i]=0;
else if(flag==3)end_time[i]=0;
else if(flag==4)RW_str[i]=0;
else if(flag==5)YW_str[i]=0;
else if(flag==6)RZ_str[i]=0;
else if(flag==7)YZ_str[i]=0;
else if(flag==8)WZ_str[i]=0;
else if(flag>=9&&flag
place[i]=0;
station *st;
st=(station*)malloc(sizeof(station));
strcpy(st->stop,place);
//可以在这里加停靠时间
st->next=sta;
sta=st;
}
flag++;
i=0;} else {
PR(“错误n”);
return ERROR;} } else { flag=0;i=0;RW=changStrInt(RW_str);YW=changStrInt(YW_str);RZ=changStrInt(RZ_str);YZ=changStrInt(YZ_str);WZ=changStrInt(WZ_str);
PR(“%15s%5s%6s%c%5s%5d%5d%5d%5d%5dn”,date ,train_num ,begin_time ,'-',end_time ,RW ,YW,RZ ,YZ ,WZ);
PR(“途经: ”);
station *st=sta;
for(;st->next!=NULL;st=st->next){
PR(“%s ”,st->stop);
}
PR(“n”);
//increase_train(l,date,train_num,sta,//
begin_time,end_time,RW,YW,RZ,YZ,WZ);
insert_trainline(&l,date,train_num,sta,begin_time,end_time,RW,YW,RZ,YZ,WZ);
station *=init_station();
sta=;
} } fclose(fp_trainline);return OK;}
status load_customer(customer *l)//导入乘客信息 { FILE *fp_customer;int flag=0,i=0;char ch;char name[9];char date[9];//日期
char train_num[9];//车次号
char seat_level_str[5],num_str[5];int seat_level,num;//座位类别,数量 // customer *p=*l;char filename[50]=“c:customer.dat”;if((fp_customer=fopen(filename,“rb”))==NULL){
printf(“can not open file to load:%sn”,filename);
return ERROR;}
while(!feof(fp_customer)){ ch=fgetc(fp_customer);//printf(“%cn”,ch);if(ch!='#'){
if(flag==0&&ch!=',')
{
name[i]=ch;
i++;
}
else if(flag==1&&ch!=',')
{
date[i]=ch;
i++;
}
else if(flag==2&&ch!=',')
{
train_num[i]=ch;
i++;
}
else if(flag==3&&ch!=',')
{
seat_level_str[i]=ch;
i++;
}
else if(flag==4&&ch!=',')
{
num_str[i]=ch;
i++;
}
else if(ch==',')
{
if(flag==0)name[i]=0;
else if(flag==1)date[i]=0;
else if(flag==2)train_num[i]=0;
else if(flag==3)seat_level_str[i]=0;
else if(flag==4)num_str[i]=0;
flag++;
i=0;
}
else
{
PR(“错误n”);
return ERROR;
}
}
else
{
flag=0;
seat_level=changStrInt(seat_level_str);
num=changStrInt(num_str);
PR(“%10s %10s %5d %5dn”,name ,date ,train_num ,seat_level ,num);
insert_customer(&l,name,date,train_num,seat_level,num);
// p=p->next;
} } fclose(fp_customer);return OK;}
status inputpaword(char cc[9])//隐藏密码为*号的函数 { char c;int i;for(i=0;c=getch();i++){
if(c==13)break;/*13='n'*/
else
{
cc[i]=c;
printf(“*”);
} } cc[i]=' ';//printf(“n”);//printf(“%s”,cc);//getchar();return strlen(cc);}
railway.cpp #include #include #include #include #include #include “Slove.h”
void main(){
char choice,choice2,name[9],date[9],paword[9],train_num[9], place[9],begin_place[9],end_place[9],begin_time[6],end_time[6];
char pa[9]=“12345678”,re_pa_1[9],re_pa_2[9];//系统初始密码 int t=1,tt=1,RW,YW,RZ,YZ,WZ,seat_level,num;trainline *train=init_trainline();customer *cus=init_customer();
station *stat=init_station();creat_trainline(&train);creat_customer(&cus);while(t==1){
PR(“n”);
PR(“*----------------------------*n”);PR(“*--铁路客运售票模拟系统------*n”);PR(“* 订票-------1 *n”);PR(“* 退票-------2 *n”);PR(“* 查询-------3 *n”);PR(“* 修改路线---4 *n”);PR(“* 读入文件---5 *n”);PR(“* 退出-------6 *n”);PR(“*----------------------------*n”);PR(“请选择: ”);choice = getch();PR(“%cn”,choice);
if(choice=='1'){ PR(“请输入你的出发站: ”);scanf(“%s”,begin_place);
PR(“请输入你的到达站: ”);scanf(“%s”,end_place);
PR(“------------------n”);book_search(train,begin_place,end_place);
PR(“------------------n”);
} PR(“请输入出发日期: ”);scanf(“%s”,date);PR(“请输入车次号: ”);scanf(“%s”,train_num);PR(“请输入你的姓名: ”);scanf(“%s”,name);PR(“请输入座位类别: ”);scanf(“%d”,&seat_level);PR(“请输入购买数量: ”);scanf(“%d”,&num);book(train,date,train_num,cus,name,seat_level,num);
else if(choice=='2'){
PR(“n请输入你的姓名: ”);scanf(“%s”,name);PR(“n请输入车票日期: ”);scanf(“%s”,date);PR(“n请输入车次号: ”);scanf(“%s”,train_num);PR(“n请输入座位类别(1-5): ”);scanf(“%d”,&seat_level);PR(“n请输入退票数量: ”);scanf(“%d”,&num);
} delete_cus(cus,train,name,date,train_num,seat_level,num);
else if(choice=='3'){ PR(“n
日期
车次
出发时间-到达时间
软卧 硬卧 软座
硬座 无座n”);//输出路线信息
choice2=getch();PR(“%cn”,choice2);if(choice2=='1'){
PR(“请输入你要增加的日期: ”);scanf(“%s”,date);PR(“请输入车次号: ”);
if(strcmp(paword,pa)==0){
PR(“n*------------------------------*n”);PR(“*-------路线信息修改:----------*n”);PR(“* 增加路线号-----'1' *n”);PR(“* 删除路线号-----'2' *n”);PR(“* 修改密码-------'3' *n”);PR(“*------------------------------*n”);PR(“请选择: ”);
}
else if(choice=='4'){
tt=1;
PR(“请输入密码: ”);//scanf(“%s”,paword);inputpaword(paword);PR(“n”);
print_trainline(train);
PR(“------------------n”);PR(“ 姓名
日期
车次
座位
数量n”);PR(“n”);
print_customer(cus);
PR(“------------------n”);
} scanf(“%s”,train_num);
PR(“请输入所有途经站(逆序,5个站点,并以#结束):n ”);while(scanf(“%s”,place)&& strcmp(place,“#”)!=0){
} //scanf(“%s”,begin_place);//PR(“请输入目的地: ”);//scanf(“%s”,end_place);PR(“请输入出发时间: ”);scanf(“%s”,begin_time);PR(“请输入到达时间: ”);scanf(“%s”,end_time);PR(“请输入软卧总数: ”);scanf(“%d”,&RW);PR(“请输入硬卧总数: ”);scanf(“%d”,&YW);PR(“请输入软座总数: ”);scanf(“%d”,&RZ);PR(“请输入硬座总数: ”);scanf(“%d”,&YZ);PR(“请输入无座总数: ”);scanf(“%d”,&WZ);
increase_train(train,date,train_num,stat,//begin_place,end_place,begin_time,end_time,RW,YW,RZ,YZ,WZ);
station *st;
st=(station*)malloc(sizeof(station));strcpy(st->stop,place);//可以在这里加停靠时间 st->next=stat;stat=st;else if(choice2=='2'){ PR(“请输入你要删除的车次日期: ”);
} scanf(“%s”,date);
PR(“请输入你要删除的车次号: ”);scanf(“%s”,train_num);
delete_trainline(train,date,train_num);delete_customer(cus,date,train_num);
else if(choice2=='3'){
} else {
} PR(“你的输入有误n”);PR(“注意:密码不能超过8位!n”);PR(“请输入新密码:”);scanf(“%s”,re_pa_1);PR(“请再输入一次: ”);scanf(“%s”,re_pa_2);
if(strcmp(re_pa_1,re_pa_2)==0){
} else { }
PR(“你两次输入的密码不一致!n”);strcpy(pa,re_pa_1);PR(“密码修改成功!请记住.n”);
}//end if else {
} PR(“对不起!你输入的密码不正确!n”);
}//end else if 修改
else if(choice=='5'){
}
}
} load_trainline(train);//导入路线信息,必须为5个站 load_customer(cus);//导入乘客信息
else if(choice=='6'){
} else { } PR(“你的输入有误n”);PR(“再见!”);t=0;exit(0);save_trainline(train);//保存票务文件 save_customer(cus);//保存乘客文件
getch();
铁路售票系统应用软件需求分析报告前言:(1)需求分析报告的编写目的本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与......
铁路售票系统数据分析一、背景目前火车站售票的状况是仅靠手工操作,以现有的工作人员很难应付车票订购高峰时刻的大量数据处理问题。同时还会出现由此带来的大量记录存放和管......
1.1 窗口售保1.1.1 售票售保 1) 申请车票如果选择的车次中有不能购买保险的车次,整批车票不能购买保险,如果除该车次车票外,其他车票都要购买保险,请分开取票。一批购买乘意险的......
目 录《数据库课程设计》论文 ...............................................................................................................................铁路......
毕业实习数据分析报告1.调查实际环境背景信息时代已经来临,信息处理的利器——计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站......
