#include

#include

#include

#include

#include

#include

#define max 60

typedef struct customer

{//乘客信息

char name[10];//姓名

int amount;//订票数

char rank;//火车票种类:硬座、软座、硬卧、软卧

int  idcard;//×××号码

struct customer *next;//指向下一乘客结点

}customer;

typedef struct railway

{//列车信息

char des_name[10];//乘车区间

char railway_no[6];//列车次

char time[10];//时间

int customer_a;//乘员定额

int free_a;//剩余票数

int price[4];//各种车票的价格

customer *custname;//以订票乘客名单

customer *replname;//候补乘客名单

struct railway *next;//指向下列车结点

}railway,*prailway;

int customer_c=0;//所有列车的订票乘客总数

railway *head;//列车头结点

railway *p2;//列车结点指针

customer *custp1[max];//各列车乘客结点指针

customer *replp1[max];//各列车候补结点指针

int Isempty=1;//是否有订票乘客

int Isreplace=1;//是否有候补乘客

customer *prior;//满足要求的订票乘客的前节点,以作删除操作

int shouldsave=0;

char Continue()//询问是否继续函数

{char answer;

while(1)

{printf("\n\t 您是否想继续(Y/N)?"); scanf("%s",&answer);

system("cls");

if(answer=='y'||answer=='Y') return 'y';

else if(answer=='n'||answer=='N') return 'n';

else printf("\n\t输入有误,请重新输入!");}

}

void errormess()//操作出错函数

{printf("\n\t对不起,您的操作有误!"); getch();}

int find_railway(prailway l,char *key)//核对列车号是否唯一

{int flag=0;railway *p1;p1=l;

if(p1==p2) return flag;

while(p1!=p2&&p1!=NULL)

{if(strcmp(p1->railway_no,key)==0)

{flag=1; break;}

p1=p1->next;}

return flag;

}

int find_railway(prailway l,char *key,prailway &p2,int &railway_no)//列车号查找函数

{int flag=0;railway *p1;p1=l;

while(p1!=NULL)

{if(strcmp(p1->railway_no,key)==0)

{flag=1; p2=p1; break;}

p1=p1->next;

if(p1!=NULL) railway_no++;}

return flag;

}

void des_name_search()//乘车区间查找

{railway *p1=head;char desname[50];

if(head==NULL)

{printf("\n\t没有您要查找的乘车区间!"); getch();

return;}

printf("\n\t请输入乘车区间:"); scanf("%s",&desname);

printf("\n\t您所查询的乘车区间信息:");

printf("\n__________________________________________________________________________________\n");

while(p1!=NULL)

{if(strcmp(p1->des_name,desname)==0)

{printf("车 次   乘车区间  时 间 总票额   剩余票数 硬座票价 软座票价 硬卧票价 软卧票价\n");

printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1],p1->price[2],p1->price[3]);}

p1=p1->next;

}printf("\n__________________________________________________________________________________\n");

Continue();

}

void railway_add()//列车增加函数

{railway *p1;

while(1)

{if(head==NULL)

{p1=p2=new railway;head=p2;

}

else

{p1=new railway;p2->next=p1;p2=p1;

}

printf("\n\t添加新的列车号!\n");

printf("\n\t请输入乘车区间:");

scanf("%s",&p2->des_name);

while(1)

{printf("\n\t请输入--列车号:"); scanf("%s",&p2->railway_no);

if(find_railway(head,p2->railway_no)) printf("\n\t列车号已存在!\n");

else break;

}

printf("\n\t请输入----时间:");scanf("%s",&p2->time);

printf("\n\t请输入座位数量:"); scanf("%d",&p2->customer_a);

printf("\n\t请输入硬座价格:"); scanf("%d",&p2->price[0]);

printf("\n\t请输入软座价格:"); scanf("%d",&p2->price[1]);

printf("\n\t请输入硬卧价格:"); scanf("%d",&p2->price[2]);

printf("\n\t请输入软卧价格:"); scanf("%d",&p2->price[3]);

p2->free_a=p2->customer_a;p2->custname=NULL;

p2->replname=NULL;shouldsave=1;

if(Continue() =='n')

{p2->next=NULL; return;}

}

}

int empty_railway()//判断列车是否存在

{if(head==NULL)

{system("cls");

printf("\n\t对不起,此列车不存在,按任意键返回!"); getch();

return 1;

}

else return 0;

}

void railway_see()//查看列车信息函数

{

system("cls");

railway *p1;

p1=head;

if(empty_railway() ) return;

printf("\n\n\t\t\t\t  列车信息:\n");

printf("\n__________________________________________________________________________________\n");

printf("车 次   乘车区间  时 间  总票额  剩余票数 硬座票价 软座票价 硬卧票价 软卧票价\n ");

while(p1!=NULL)

{

printf("\n%-9s%-9s%-9s%-9d%-9d%-9d%-9d%-9d%-9d",p1->railway_no,p1->des_name,p1->time,p1->customer_a,p1->free_a,p1->price[0],p1->price[1],

p1->price[2],p1->price[3]);

p1=p1->next;

}

printf("\n__________________________________________________________________________________\n");

printf("\n\t按任意键返回!\n"); getch();

}

void railwaymanage()//列车管理

{char c;system("cls");

while(1)

{printf("\n\t\t\t\t  列车管理菜单");

printf("\n__________________________________________________________________________________\n\n");

printf("\t\t\t\t1.添加新的列车号\n");

printf("\t\t\t\t2.查 看 列 车 号\n");

printf("\t\t\t\t3.查 看 乘车区间\n");

printf("\t\t\t\t4.返 回 主 菜 单\n");

printf("\n__________________________________________________________________________________\n");

printf("\t请选择您要的服务:");scanf("%s",&c);

switch(c)

{case '1': railway_add(); break;

case '2': railway_see(); break;

case '3': des_name_search(); break;

case '4': return;}

}

}

void booking()//订票乘客信息

{int ticket_c,idcard,i,flag=0;int railway_no=0;railway *p1;customer *p2;

customer *p3;char answer[7];char temp,c;int tag=0;int Isrepl=0;

if(empty_railway() ) return;

while(1)

{printf("\n\t现在您可以订票了!");

flag=0;railway_no=0;  tag=0;

printf("\n\t请输入列车号:");scanf("%s",&answer);

if(find_railway(head,answer,p1,railway_no) )

{while(1)

{printf("\n\t请输入您想要订购的票的数量:");

scanf("%d",&ticket_c);

if(ticket_c==0)

{printf("\n\t请在此输入列车号:"); getch();}

else break;

}if(p1->free_a>=ticket_c)

{customer_c++;flag=1;Isrepl=1;

if(p1->custname==NULL)

{custp1[railway_no]=p2=new customer;

p1->custname=custp1[railway_no];}

else

{p2=new customer;custp1[railway_no]->next=p2;

custp1[railway_no]=p2;}

Isempty=0;custp1[railway_no]->amount=ticket_c;

idcard=p1->customer_a-p1->free_a+1;

custp1[railway_no]->idcard=idcard;

p1->free_a-=ticket_c;printf("\n\t请输入您的姓名:");

scanf("%s",&custp1[railway_no]->name);

while(1)

{printf("\n\t请输入票种:"); scanf("%s",&custp1[railway_no]->rank);

if(!(custp1[railway_no]->rank>='1'&&custp1[railway_no]->rank<='3'))

{printf("\n\t输入有误,请重新输入"); getch();}

else break;

}

printf("\n\t输入您的id信息:"); scanf("%d",&custp1[railway_no]->idcard);

if(ticket_c<10) printf("\n\t");else printf("\n\t");

printf("\n\t恭喜您订票成功!\n");

for(i=0;i

{printf("\n\t您所预定的座位号是%d",idcard++);

if(i%10==0) printf("\n\t");}

printf("\n");

}

else if(p1->free_a==0)

{printf("\n\t对不起,票已售完!\n"); Isrepl=0;}

else

{printf("\n\t对不起,当前没有多余的票!\n"); Isrepl=0;}

if(!Isrepl)

{

printf("\n\t您是否想成为后部乘客(Y/N)?"); scanf("%s",&temp);

if(temp=='y'||temp=='Y')

{if(p1->replname==NULL)

{replp1[railway_no]=p3=new customer;

p1->replname=replp1[railway_no];}

else

{p3=new customer;replp1[railway_no]->next=p3;

replp1[railway_no]=p3;}

Isreplace=0;tag=1;

replp1[railway_no]->amount=ticket_c;

printf("\n\t请输入您的姓名:"); scanf("%s",&replp1[railway_no]->name);

replp1[railway_no]->idcard=idcard;

replp1[railway_no]->amount=ticket_c;

while(1)

{

printf("\n\t请输入车票种类:"); scanf("%s",&replp1[railway_no]->rank);

printf("\n\t请输入您的ID信息:"); scanf("%d",&replp1[railway_no]->idcard);

if(!(replp1[railway_no]->rank>='1'&&replp1[railway_no]->rank<='3'))

{printf("\n\t输入有误,请重新输入:"); getch();}

else break;

}

printf("\n\t没有剩余座位!\n");shouldsave=1;

}

}

}

else printf("\n\t对不起,没有此列车!\n");

if(flag)

custp1[railway_no]->next=NULL;

if(tag)

{replp1[railway_no]->next=NULL;

printf("\n\t您已经成功排入后部订票队列中!\n");}

printf("\n\t是否退出菜单?:(Y/N)"); scanf("%s",&c);

if(c=='y') return;

}

}

void display_reserve()//显示订票乘客信息

{system("cls");railway *p1;customer *p2;p1=head;

if(empty_railway() ) return;

printf("\n\t\t\t订票信息");

if(Isempty)

{printf("\n\t对不起,没有订票乘客信息!\n");  getch();

return;}

printf("\n__________________________________________________________________________________\n");

printf("姓  名 车  次   订票数   乘车区间  票类  ×××号码\n");

while(p1!=NULL)

{if(p1->custname!=NULL)

{p2=p1->custname;

while(p2!=NULL)

{

printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);

if(p1->free_a>=1) printf("\n\n\t还有多余的票!\n");

else printf("\n\n\t票已售完!\n");p2=p2->next;

}

}

p1=p1->next;

printf("\n\n__________________________________________________________________________________\n");}

printf("\n\t按任意键返回!"); getch();return;

}

void display_replace()//候补乘客信息

{system("cls");railway *p1;customer *p2;p1=head;

if(empty_railway() ) return;printf("\n\t候补乘客信息!");

if(Isreplace)

{printf("\n\t对不起,没有候补乘客信息!\n"); getch();

return;}

printf("\n__________________________________________________________________________________\n");

printf("姓  名 车  次   订票数   乘车区间  票类  ×××号码\n");

while(p1!=NULL)

{if(p1->replname!=NULL)

{p2=p1->replname;

while(p2!=NULL)

{

printf("\n%-8s%-10s%-9d%-9s%-6c%-9d",p2->name,p1->railway_no,p2->amount,p1->des_name,p2->rank,p2->idcard);

if(p1->free_a>=1) printf("\n\t还有多余的票!\n");

else printf("\n\t票已售完!\n");p2=p2->next;}

}

p1=p1->next;}

printf("\n\n__________________________________________________________________________________\n");

printf("\n\t按任意键返回!"); getch();return;

}

void customermagmenu()//乘客管理菜单

{char c;system("cls");

while(1)

{printf("\n\t\t   乘客管理菜单\n");

printf("\n________________________________________________________\n");

printf("\t\t1.乘   客   信   息\n");

printf("\t\t2.候 补 乘 客 信 息\n");

printf("\t\t3. 返 回 主 菜 单\n");

printf("\n________________________________________________________\n");

printf("\t请选择您要的服务:"); scanf("%s",&c);

switch(c)

{case '1':display_reserve(); break;

case '2':display_replace(); break;

case '3':return;

default:errormess();}

}

}

void refundticketmenu()//退票函数

{int railway_no=0,flag=0;railway *p1;customer *p2,*p4;customer *p3,*p5;

char answer[7],name[7];int tag=0;int idcard;

if(empty_railway() ) return;

printf("\n\t现在开始退票手续");

if(Isempty)

{printf("\n\t对不起,乘客不存在!"); getch();return;}

while(1)

{flag=0; tag=0; railway_no=0;

printf("\n\t请输入车次:"); scanf("%s",&answer);

if(find_railway(head,answer,p1,railway_no))

{p2=p1->custname;

printf("\n\t请输入您的姓名:"); scanf("%s",&name);

if(p2==NULL)

{printf("\n\t对不起,乘客不存在!");if(Continue()=='n') return;

}

else

while(p2!=NULL)

{if(strcmp(p2->name,name)==0)

{if(p2==p1->custname)

{prior=p1->custname;idcard=p2->idcard;

flag=1; break;}

}

else if(p2->next!=NULL)

{if(strcmp(p2->next->name,name)==0)

{tag=1;prior=p2;

idcard=p2->next->idcard;flag=1; break;

}

}

p2=p2->next;shouldsave=1;

}

if(!flag) printf("\n\t对不起,乘客不存在!\n");

}

else printf("\n\t对不起,该车次列车不存在!\n");

if(flag)

{if(prior==p1->custname&&!tag)

{if(prior->next==NULL)

{p1->free_a+=prior->amount;p1->custname=NULL;}

else

{p1->free_a+=prior->next->amount;p1->custname=prior->next;

}

}

else{

p1->free_a+=prior->next->amount;prior->next=prior->next->next;

}

customer_c--;if(customer_c==0) Isempty=1;shouldsave=1;}

if(flag)

{p3=p1->replname;

while(p3!=NULL)

{if(p3->amount<=p1->free_a)

{printf("\n\t后部乘客已经存在!\n");

p4=custp1[railway_no]->next=new customer;

p4->next=NULL;Isempty=0;

if(p1->custname==NULL) p1->custname=p4;

strcpy(p4->name,p3->name);p4->rank=p3->rank;

p4->amount=p3->amount;p4->idcard=idcard;

p1->free_a=p3->amount;customer_c++;

if(p3->next==NULL) Isreplace=1;

if(p1->replname==p3)

{if(p1->replname->next==NULL) p1->replname=NULL;

else p1->replname=p3->next;}

else p5->next=p3->next->next;break;

}

if(p3->next!=NULL)

if(p3->next->amount<=p1->free_a)

p5=p3;p3=p3->next;shouldsave=1;}

printf("\n\t退票成功!\n"); getch();return;

}

shouldsave=1;if(Continue()=='n') return;

}

}

int main()//主函数

{system("cls");system("mode con: cols=90 lines=35");//窗口设计

railway *p1;p1=head;char c;

do{system("cls");

printf("\n\t\t\t\t     火车票订票系统\n");

printf("\n           ****************************************************************\n");

printf("\t\t\t            (1)列车----管理\n");

printf("\t\t\t            (2)订票----菜单\n");

printf("\t\t\t            (3)退票办理菜单\n");

printf("\t\t\t            (4)乘客管理菜单\n");

printf("\t\t\t            (5)退出----系统\n");

printf("\n           ****************************************************************\n");

printf("请选择您要的服务:");

scanf("%s",&c);

switch(c)

{case '1': railwaymanage(); break;

case '2': booking(); break;

case '3': refundticketmenu(); break;

case '4': customermagmenu(); break;

case '5': exit(0);

default: break;}

}while(c!=5);

return 0;

}

windows编译运行C:\Users\chunli>g++ main.c

C:\Users\chunli>a

火车票订票系统

****************************************************************

(1)列车----管理

(2)订票----菜单

(3)退票办理菜单

(4)乘客管理菜单

(5)退出----系统

****************************************************************

c语言实验报告 订票系统,【C语言】火车订票系统相关推荐

  1. c语言实验报告上理答案,C语言实验报告江西理工大学实验5

    <C语言实验报告江西理工大学实验5>由会员分享,可在线阅读,更多相关<C语言实验报告江西理工大学实验5(6页珍藏版)>请在读根文库上搜索. 1.C语言程序设计实验报告教学班级: ...

  2. 大一上期c语言实验报告2,大一上期C语言实验报告1熟悉实验环境

    <大一上期C语言实验报告1熟悉实验环境>由会员分享,可在线阅读,更多相关<大一上期C语言实验报告1熟悉实验环境(3页珍藏版)>请在人人文库网上搜索. 1.成都工业学院计算机工程 ...

  3. 湖北理工学院c语言实验报告答案,湖北理工学院c语言实验报告七答案.doc

    湖北理工学院c语言实验报告七答案.doc 实验七 结构体和共用体实验课程名高级语言程序设计(C)专业班级 学号 姓名 实验时间 实验地点 指导教师 一.实验目的和要求1. 掌握结构体类型变量的定义和使 ...

  4. 大一c语言实验报告运行结果,大一c语言实验报告

    篇一:大一上期C语言实验报告3 基本输入输出 成都工业学院·计算机工程学院 <程序设计基础>实验报告 1. 实验目的 (1) 熟练掌握scanf()/printf()库函数的调用格式,正确 ...

  5. 天津理工大学c语言实验报告8,天津理工大学-c语言上机报告4.doc

    天津理工大学-c语言上机报告4.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  6. 大学c语言实验报告,上海工程技术大学C语言实验报告.doc

    上海工程技术大学C语言实验报告.doc 实 验 报 告高级语言程序设计20122013学年第 一 学期学院(部)管理学院指导教师李旭芳班级代号姓名/学号同组人无实验一一实验项目名称程序流程控制分别求1 ...

  7. c语言实验报告大作业答案,C语言实验报告摘要(共6篇)

    C语言实验报告摘要(共6篇) 第一部分: C语言实验经验 C语言实验经验 随着科学技术的飞速发展,计算机在人们中的作用越来越突出. C语言作为一种计算机语言,对其进行学习将有助于我们更好地理解计算机并 ...

  8. 厦门理工C语言实验报告8,厦门理工c语言数据结构实验

    <厦门理工c语言数据结构实验>由会员分享,可在线阅读,更多相关<厦门理工c语言数据结构实验(15页珍藏版)>请在人人文库网上搜索. 1.数据结构实验报告 实验序号:6 实验项目 ...

  9. 南工程c语言实验报告,Linux环境下-C语言编程实验报告(1)(总4页).doc

    Linux环境下-C语言编程实验报告(1)(总4页).doc 西 安 邮 电 大 学 (计算机学院)课内实验报告实验名称 Linux环境下 C语言编程 专业名称 网络工程班 级 1203班 学生姓名 ...

  10. 厦门理工学院c语言实验报告5,厦门理工学院 C语言报告实验8 - 结构体

    <C语言程序设计>实验报告 实验序号:8 实验项目名称:结构体 学 号 实验地点 315 姓 名 指导教师 林仙丽 专业.班级 实验时间 网络工程 2012年12月26日 一.实验目的及要 ...

最新文章

  1. STP生成树协议原理及配置
  2. Win10系列:UWP界面布局进阶1
  3. 抽象方法和接口的区别
  4. python小游戏代码大全-【程序源代码】python贪吃蛇小游戏
  5. 电脑硬盘是干什么用的_电脑存储空间不够用?让金士顿固态硬盘拯救你
  6. php和web服务器,php与web服务器关系
  7. 主成分分析(PCA)和基于核函数的主成分分析(KPCA)入门
  8. PyTorch【torchvision】
  9. Practical Machine Learning实用机器学习 章1
  10. 解决办法:KeyError: ‘ExpandBackward’及老版本pytorch/torchvision的安装办法。
  11. 可以测试流放之路伤害的软件,流放之路:游戏难点!你知道平均每秒伤害(DPS)怎么计算吗!...
  12. 数据源、元数据、数据元
  13. jade 编译 html,学习前端模板引擎 jade (一)_html/css_WEB-ITnose
  14. sas table将缺失值计入百分比_逻辑回归的评分卡的SAS实现
  15. 学中医的女生写出的保养大法
  16. 京东2020年Q2财报数据亮眼:超2000亿净收入背后供应链物流价值释放
  17. IP地址的规划和设计方法(三)
  18. 表单验证设计的用户体验基本原则
  19. windows录屏_电脑是怎么录屏的呢?推荐三个录屏实用方法
  20. i7台式电脑配置推荐_专业设计师电脑配置推荐 i7-7700配K2200组装台式电脑配置及报价...

热门文章

  1. java 加密 压缩_如何用java 将文件加密压缩为zip文件.
  2. mysql建库图解_数据库 MySQL安装图解
  3. 如何使用 方天擎 实现从微信浏览器跳转到手机浏览器下载app
  4. 如果光猫+hadoop,有化学反应吗?
  5. 结构化、半结构化、非结构化数据
  6. 2022韦莱韬悦人力资源管理季刊
  7. Aspack壳手动脱壳
  8. 投资理财之基金篇(一) - 认识基金
  9. 无人汽车无法避开陌生物体?这里有最新解决方案
  10. 思科C9500交换机介绍及光模块解决方案