#include

#include

#include//getch

#include//动态分配

typedef  struct  route//路线

{

char  num[30];//车次

char  start[40];//起点

char  end[40];//终点

char  time[10];//时间

struct  route   *next;

}r;

typedef  struct  ticket//车票

{

char  num[30];//车次

int   n;//总数量

int   n1;//剩余数

float  price;//票价

struct  ticket  *next;

}t;

r  *  rhead=NULL,*ri=NULL;//全局指针

t  *  thead=NULL,*ti=NULL;//全局指针

void initialr()

{

FILE   *fp;

fp=fopen("route.txt","r");

if(!fp){ printf("/n/n火车路线文件不存在!/n/n");    return ;    }

fseek(fp,0,SEEK_END);

int n=ftell(fp)/sizeof(r);

rewind(fp);

int i=0;

for(;i

{

r  *p;

p=(r*)malloc(sizeof(r));

p->next=NULL;

fread(p,sizeof(r),1,fp);

if(rhead==NULL)rhead=ri=p;

else{  ri->next=p;ri=p; }

}

fclose(fp);

printf("/n/n初始化%d个火车路线信息成功!/n/n",n);

}

void initialt()

{

FILE   *fp;

fp=fopen("ticket.txt","r");

if(!fp){ printf("/n/n车票文件不存在!/n/n");    return;    }

fseek(fp,0,SEEK_END);

int n=ftell(fp)/sizeof(t);

rewind(fp);

int i=0;

for(;i

{

t *p;

p=(t*)malloc(sizeof(t));

p->next=NULL;

fread(p,sizeof(t),1,fp);

if(thead==NULL)thead=ti=p;

else{  ti->next=p;ti=p; }

}

fclose(fp);

printf("/n/n初始化%d个车票信息成功!/n/n",n);

}

void newr()

{

printf("/n/n/n█新建火车路线█/n/n");

loop:

r *p;

p=(r *)malloc(sizeof(r));

p->next=NULL;

loop1:

printf("/n请输入火车号/n/n");

scanf("%s",p->num);

//检验

r  *pj=rhead;

while(pj)

{

if(strcmp(pj->num,p->num)==0){  printf("/n/n错误,该火车号已经存在,请重新输入!/n");   goto  loop1;    }

pj=pj->next;

}

//检验

printf("/n请输入起始站/n/n");

scanf("%s",p->start);

printf("/n请输入终点站/n/n");

scanf("%s",&p->end);

printf("/n请输入发车时间(时:分)/n/n");

scanf("%s",&p->time);

if(rhead==NULL)rhead=ri=p;

else{  ri->next=p;  ri=p;   }

printf("/n/n创建新火车路线成功!/n/n");

char c;

printf("/n/n您想---继续新建(A)--退出新建(E)---/n");

c=getch();

if(c=='A'||c=='a')goto loop;  else  return;

}

void newt()

{

printf("/n/n/n█新建车票█/n/n");

loop:

t *p;

p=(t *)malloc(sizeof(t));

p->next=NULL;

printf("/n请输入要新建车票的火车号/n/n");

scanf("%s",p->num);

//检验是否已经售票

int y=0;

t  *pt=thead;

while(pt)

{

if(strcmp(pt->num,p->num)==0){y=1;break;}

pt=pt->next;

}

if(y) { printf("/n错误,该火车号已经开始售票!/n/n");goto loop;}

//检验是否存在

y=1;

r  *pj=rhead;

while(pj)

{

if(strcmp(pj->num,p->num)==0){y=0;break;}

pj=pj->next;

}

if(y) { printf("/n错误,无该火车号!/n/n");goto loop;}

//-----------------------------------------------------------

printf("/n请输入总票数:/n/n");

scanf("%d",&p->n);

p->n1=p->n;

printf("/n请输入票价:(元)/n/n");

scanf("%f",&p->price);

if(thead==NULL)thead=ti=p;

else{  ti->next=p;  ti=p;   }

printf("/n/n创建火车票成功!/n/n");

char c;

printf("/n/n您想---继续新建(A)--退出新建(E)---/n");

c=getch();

if(c=='A'||c=='a')goto loop;  else  return;

}

void showr()

{

r *p;

p=rhead;

printf("/n/n/n                        █火车信息数据库█          ");

printf("/n|--------------------------------------------------------------------------|");

int i=0;

while(p)

{

i++;

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

//-----------------------

int jy=1;

t*p1=thead;

while(p1)

{          if(strcmp(p1->num,p->num)==0) {printf("/t[已售票]");  jy=0; }     p1=p1->next; }

if(jy) printf("/t[未售票]");

//-----------------------

printf("/n|--------------------------------------------------------------------------|");

p=p->next;

}

printf("/n█火车总数:   %d    ",i);

printf("/n|--------------------------------------------------------------------------|/n/n/n/n/n/n");

}

void showt()

{

printf("/n/n/n                        █火车票信息数据库█          ");

printf("/n|--------------------------------------------------------------------------|");

int i=0;

t*p=thead;

while(p)

{  i++;

printf("/n|车号:%s    票价:%f    剩余:%d   总数:%d   已卖:%d",p->num ,p->price ,p->n1 ,p->n,p->n-p->n1);

printf("/n|--------------------------------------------------------------------------|");

p=p->next;

}

}

void modifyr()

{

printf("/n/n/n       █修改路线█          ");

loop:

printf("/n/n/n请输入要修改的火车号:");

char n[20];

scanf("%s",n);

r *p=rhead;

int y=1;

while(p)

{

if(strcmp(n,p->num)==0)

{y=0;

printf("/n请输入新起始点/n/n");

scanf("%s",p->start);

printf("/n请输入新终点站/n/n");

scanf("%s",p->end);

printf("/n请输入新发车时间/n/n");

scanf("%s",p->time); }

p=p->next;

}

if(y)printf("/n/n错误,要修改的车号不存在!/n/n");

else   printf("/n/n修改成功!/n/n");

char c;

printf("/n/n您想---继续修改(A)--退出修改(E)---/n");

c=getch();

if(c=='A'||c=='a')goto loop;else  return;

}

void delr()

{

printf("/n/n/n       █删除路线█          ");

loop:

printf("/n/n/n请输入要删除的火车号:");

char n[20];

scanf("%s",n);

r *p=rhead,*p1=rhead;

int y=0;

int  jy=1;

while(p)

{

if(strcmp(n,p->num)==0)

{

//检验-----------------------------------------------------------

t *p2=thead;

while(p2)

{

if(strcmp(p->num,p2->num)==0&&p2->n!=p2->n1)

printf("/n/n错误,已售票,无法删除!!/n/n");

p2=p2->next;

}

//检验---------------------------------------------------------

jy=0;

if(p==rhead)rhead=rhead->next;

else  p1->next=p->next;

break;

}

y++;

if(y>1)p1=p1->next;

p=p->next;

}

if(jy)printf("/n/n错误,要删除的车号不存在!/n/n");

else   printf("/n/n删除成功!/n/n");

char c;

printf("/n/n您想---继续删除(A)--退出删除(E)---/n");

c=getch();

if(c=='A'||c=='a')goto loop;else  return;

}

void lookr()

{

char  c,m[20];

do

{//do的开始。

printf("/n/n/n              [火车查询菜单]");

printf("/n|----------------------------------|");

printf("/n|           请选择查询方式:        |");

printf("/n|----------------------------------|");

printf("/n|           A[ 火车号查询  ]       |");

printf("/n|----------------------------------|");

printf("/n|           B[ 起始地查询  ]       |");

printf("/n|----------------------------------|");

printf("/n|           C[ 目的地查询  ]       |");

printf("/n|----------------------------------|");

printf("/n|           D[ 退      出  ]       |");

printf("/n|----------------------------------|");

r *p=rhead;

c=getch();

int y;

switch (c)

{

//switch的开始

case 'A':

case'a':

y=1;

printf("/n/n请输入要查找的火车号/n/n");

scanf("%s",m);

while(p)

{

if(strcmp(p->num,m)==0)

{y=0;

printf("/n|--------------------------------------------------------------------------|");

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

//检验

int jy=1;

t*p1=thead;

while(p1)

{

if(strcmp(p1->num,p->num)==0) { printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p1->n ,p1->n1 ,p1->n-p1->n1 ); jy=0; }

p1=p1->next;        }

if(jy) printf("/t[未售票]");

//检验

printf("/n|--------------------------------------------------------------------------|");

}

p=p->next;

}

if(y)  printf("失败,您查询的火车不存在!/n/n");

break;

case'B':

case'b':

y=0;

printf("/n/n请输入要查找的起始地/n/n");

scanf("%s",m);

while(p)

{

if(strcmp(p->start,m)==0)

{y=0;

printf("/n|--------------------------------------------------------------------------|");

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

//检验

int jy=1;

t*p1=thead;

while(p1)

{

if(strcmp(p1->num,p->num)==0) { printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p1->n ,p1->n1 ,p1->n-p1->n1 ); jy=0; }

p1=p1->next;        }

if(jy) printf("/t[未售票]");

//检验

printf("/n|--------------------------------------------------------------------------|");

}

p=p->next;

}

if(y)  printf("失败,您查询的火车不存在!/n/n");

break;

case'C':

case'c':

y=0;

printf("/n/n请输入要查找的终点站/n/n");

scanf("%s",m);

while(p)

{

if(strcmp(p->end,m)==0)

{y=0;

printf("/n|--------------------------------------------------------------------------|");

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

//检验

int jy=1;

t*p1=thead;

while(p1)

{

if(strcmp(p1->num,p->num)==0) { printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p1->n ,p1->n1 ,p1->n-p1->n1 ); jy=0; }

p1=p1->next;        }

if(jy) printf("/t[未售票]");

//检验

printf("/n|--------------------------------------------------------------------------|");

}

p=p->next;

}

if(y)  printf("失败,您查询的火车不存在!/n/n");

break;

}//switch的结束

}while(c!='D'&&c!='d');

}

void sell()

{

printf("/n/n/n              [火车售票]");

char m[20];

int y=1;

printf("/n/n请输入要购买的火车号/n/n");

scanf("%s",m);

r *p=rhead;

while(p)

{

if(strcmp(p->num,m)==0)

{y=0;

printf("/n|--------------------------------------------------------------------------|");

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

int jy=1;

t*p1=thead;

while(p1)

{

if(strcmp(p1->num,p->num)==0)

{

printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p1->n ,p1->n1 ,p1->n-p1->n1 ); jy=0;

if(p1->n1==0){printf("/n/n错误,您要购买的火车号已经售完!/n/n");goto  loop;}

loop1:

printf("/n/n请输入要购买的数量:/n/n");

int nn;

scanf("%d",&nn);

if(nn>p1->n1){printf("/n/n错误,您要购买的数量不足!/n/n");goto  loop1;}

else{p1->n1-=nn;printf("/n/n请付%f元!",p1->price*nn);printf("/n/n买票操作成功!/n/n");goto  loop;}

}

p1=p1->next;        }

if(jy) printf("/t[未售票]");

//检验

printf("/n|--------------------------------------------------------------------------|");

}

p=p->next;

}

if(y)  printf("失败,您查询的火车不存在!/n/n");

loop:;

}

void back()

{

printf("/n/n/n              [火车退票]");

char m[20];

int y=1;

printf("/n/n请输入要退票的火车号/n/n");

scanf("%s",m);

r *p=rhead;

while(p)

{

if(strcmp(p->num,m)==0)

{y=0;

printf("/n|--------------------------------------------------------------------------|");

printf("/n|车号:%s  路线:  %s---------->%s  发车时间:%s",p->num ,p->start ,p->end ,p->time);

int jy=1;

t*p1=thead;

while(p1)

{

if(strcmp(p1->num,p->num)==0)

{

printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p1->n ,p1->n1 ,p1->n-p1->n1 ); jy=0;

if(p1->n1==p1->n){printf("/n/n错误,您要退的火车号未起售!/n/n");goto  loop;}

loop1:

printf("/n/n请输入要退票的数量:/n/n");

int nn;

scanf("%d",&nn);

if(nn+p1->n1>p1->n){printf("/n/n错误,您要退的数量有误!/n/n");goto  loop1;}

else{p1->n1+=nn;printf("/n/n请收%f元!",p1->price*nn);printf("/n/n退票操作成功!/n/n");goto  loop;}

}

p1=p1->next;        }

if(jy) printf("/t[未售票]");

//检验

printf("/n|--------------------------------------------------------------------------|");

}

p=p->next;

}

if(y)  printf("失败,您查询的火车不存在!/n/n");

loop:;

}

void  add()

{

printf("/n/n/n                  [添加车票]          ");

char m[20];

printf("/n/n请输入要增加的火车号/n/n");

scanf("%s",m);

int y=1;

t*p=thead;

while(p)

{

if(strcmp(m,p->num)==0)

{ y=0;

printf("/n  总票数:  %d      剩余票数   %d      已卖票数:%d  ",p->n ,p->n1 ,p->n-p->n1 );

loop1:

printf("/n/n请输入要增加的数量:/n/n");

int nn;

scanf("%d",&nn);

if(nn<0){printf("/n/n错误,您的输入为负!/n/n");goto  loop1;}

else{p->n1+=nn;p->n+=nn;printf("/n/n增加后总票数为%d,剩余票数为%d!/n/n",p->n,p->n1);printf("/n/n增加车票操作成功!/n/n");break;}

}

p=p->next;

}

}

void  stop()

{

printf("/n/n/n                  [停止售票]          ");

char m[20];

printf("/n/n请输入要停止售票的火车号/n/n");

scanf("%s",m);

int y=1;

t*p=thead,*q;

if(p==NULL) {printf("/n/n无该文件!/n/n");goto loop;}

if(strcmp(m,p->num)==0){thead=thead->next;free(p);goto loop;}//为首结点时

while(p)

{

if(strcmp(m,p->next->num)==0)

{ q=p->next;break;}

p=p->next;

}

p->next=q->next;

free(q);

loop:;

printf("/n/n%s停止售票成功/n/n",m);

}

void saver()

{

FILE  * fp;

fp=fopen("route.txt","w");

r *p=rhead;

int i=0;

while(p)

{

i++;

fwrite(p,sizeof(r),1,fp);

p=p->next;

}

fclose(fp);

printf("/n/n保存%d个火车信息成功!/n",i);

}

void savet()

{

FILE  * fp;

fp=fopen("ticket.txt","w");

t *p=thead;

int i=0;

while(p)

{

i++;

fwrite(p,sizeof(t),1,fp);

p=p->next;

}

fclose(fp);

printf("/n/n保存%d个火车票信息成功!/n",i);

}

void  clear()

{

r *p=rhead;

while(p)

{

r *temp=p->next;

free(p);

p=temp;

}

rhead=NULL;

printf("/n/n清空火车票路线信息成功!/n");

r *p1=rhead;

while(p1)

{

r *temp=p1->next;

free(p1);

p1=temp;

}

rhead=NULL;

printf("/n/n清空火车票信息成功!/n");

}

void show1()

{

printf("/n |----------------------------------------|");

printf("/n |          █主      菜      单 █       |");

printf("/n |----------------------------------------|");

printf("/n |          A  火   车   查   询          |");

printf("/n |----------------------------------------|");

printf("/n |          B  购   买   车   票          |");

printf("/n |----------------------------------------|");

printf("/n |          C  退   回   车   票          |");

printf("/n |----------------------------------------|");

printf("/n |          D  系   统   管   理          |");

printf("/n |----------------------------------------|");

printf("/n |          E  清   空   数   据          |");

printf("/n |----------------------------------------|");

printf("/n |          F  退   出   程   序          |");

printf("/n |----------------------------------------|");

printf("/n |             请您选择一个任务           |");

printf("/n |----------------------------------------|/n/n/n");

}

void show2()

{

printf("/n |--------------------------- -|");

printf("/n |    █管  理  菜   单█      |");

printf("/n |-----------------------------|");

printf("/n |  A   增  加  路  线         |");

printf("/n |-----------------------------|");

printf("/n |  B   修  改  路  线         |");

printf("/n |-----------------------------|");

printf("/n |  C   新  建  车  票         |");

printf("/n |-----------------------------|");

printf("/n |  D   增  加  车  票         |");

printf("/n |-----------------------------|");

printf("/n |  E   取  消  路  线         |");

printf("/n |--------------------------- -|");

printf("/n |  F   退  出  程  序         |");

printf("/n |----------------------------|");

printf("/n |     请您选择一个任务        |");

printf("/n |----------------------------|/n/n/n");

}

void show()

{

printf("/n |--------------------------- -|");

printf("/n |    █查  询  菜   单█      |");

printf("/n |-----------------------------|");

printf("/n |  A   查  询  火  车         |");

printf("/n |-----------------------------|");

printf("/n |  B   查  询  车  票         |");

printf("/n |-----------------------------|");

printf("/n |  C   具  体  查  询         |");

printf("/n |-----------------------------|");

printf("/n |  D   退  出  程  序         |");

printf("/n |-----------------------------|/n/n");

}

void  main()

{

initialr();

initialt();

char c1;

do {//do 1

show1();

c1=getch();

switch ( c1 )

{//switch

case 'a':

case 'A':

char c;

do{

show();

c=getch();

switch(c)

{

case 'a':

case 'A':showr();break;

case 'b':

case 'B':showt();break;

case 'c':

case 'C':lookr();break;

case 'd':

case 'D':break;

}

}while(c!='D'&&c!='d');

break;

case 'b':

case 'B':sell();break;

case 'c':

case 'C':back();break;

case 'd':

case 'D':

char c2;

do{

show2();

c2=getch();

switch ( c2)

{

case 'a':

case 'A':newr();break;

case 'b':

case 'B':modifyr();break;

case 'c':

case 'C':newt();break;

case 'd':

case 'D':add();break;

case 'e':

case 'E': stop();break;

case 'f':

case 'F': break;

}

}while(c2!='f'&&c2!='F');

break;

case 'e':

case 'E':clear();break;

case 'f':

case 'F': break;

}//switch

}//do1

while(c1!='f'&&c1!='F');

saver();

savet();

printf("/n/n  ★ 谢谢您的使用!★");

}

火车售票系统设计 c语言,C语言火车售票系统相关推荐

  1. 河南理工大学c语言报告封面,河南理工大学图书信息管理系统设计_纯c语言课程设计.doc...

    河南理工大学图书信息管理系统设计_纯c语言课程设计 C语言课程设计报告 题 目:图书信息管理系统设计 河南理工大学计算机学院 目 录 第一章 题目与要求 1.1 问题提出1 1.2 本系统涉及的知识点 ...

  2. c语言售票系统主要函数,c语言课设电影院售票系统.docx

    struct inf { char rate[20]; char name[20]; int time_hour; int time_min; int seat; int sell; }inf[10] ...

  3. C语言课程设计 - 火车票预订系统

    C语言课程设计 - 火车票预订系统 文件介绍 代码 main.c(全) mymac.h(全) database.c(不全) mainWindow.c (全) user.c (不全) manager.c ...

  4. java毕业设计C语言程序设计》在线自学习系统Mybatis+系统+数据库+调试部署

    java毕业设计C语言程序设计>在线自学习系统Mybatis+系统+数据库+调试部署 java毕业设计C语言程序设计>在线自学习系统Mybatis+系统+数据库+调试部署 本源码技术栈: ...

  5. 考试自动评分系统C语言改错,基于XML结构的C语言考试的自动评分系统.doc

    基于XML结构的C语言考试的自动评分系统 摘 要:在C程序设计语言考试中为了解决定位难.一题多解和对于主观题没有统一的评价标准的情况,对考试系统中客观题和程序题的评分方法进行了研究.在比较结果的评分基 ...

  6. c语言主界面设计菜单系统,c语言界面设计代码的操作步骤,你学会了吗

    学计算机的人都知道C语言,而这也是非常常用的一种计算机编程语言.其实c语言运用得当,完全可以编程很多设计代码,帮助你进行界面设计.今天就让小编为大家介绍c语言界面设计. c语言界面设计代码的操作步骤 ...

  7. 航班系统C语言程序流程图,飞机订票系统(C语言代码及流程图)

    飞机订票系统(C语言代码及流程图) 目录 第一部分 源程序---------------------------------------------------3 第二部分 函数流程图-------- ...

  8. c语言点餐系统毕业设计任务书,毕业设计(论文)-基于c语言的智能点餐系统的设计与实现.doc...

    综合实践(论文) 题 目 基于C语言的智能点餐系统的设计与实现 学 院 通信与电子工程学院 专业班级 学生姓名 指导教师 成 绩 2013年 月 日 continually developing an ...

  9. 机票退订c语言程序,c语言程序设计告飞机票预订系统.doc

    c语言程序设计告飞机票预订系统 目录 目录i 1课程设计的目的1 2需求分析1 2.1设计一个飞机订票系统,完成以下功能1 2.2该系统中用到的数据结构1 3概要设计2 3.1总体功能模块2 3.1. ...

  10. 为什么我们需要一门新语言——Go语言

    编程语言已经非常多,偏性能敏感的编译型语言有 C.C++.Java.C#.Delphi和Objective-C等,偏快速业务开发的动态解析型语言有 PHP.Python.Perl.Ruby.JavaS ...

最新文章

  1. 生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?...
  2. Overlay 网络 — Overview
  3. Maven-Dependency Mechanism
  4. PostgreSQL数据库修改sql表的方法汇总
  5. python编程入门单例_python实现单例模式怎么写啊?
  6. 密码与确认密码自动验证html,HTML确认密码
  7. verify code
  8. java 接口 白名单,SpringBoot HTTP接口跨域调用及白名单实现
  9. Java程序员需要了解的几个开源协议介绍
  10. Mac苹果Time Machine 备份速度太慢的解决方法!
  11. 翻译:iOS上的MVVM + RxSwift架构对比 MVC,MVVM,MVP和VIPER
  12. 利用octave求矩阵的转置
  13. 主键和外键(MySQL)
  14. Win10环境下VMware安装Mac OS虚拟机并在虚拟机中安装xcode
  15. 四川托普计算机职业学校教务管理系统,四川托普信息技术职业学院教务处
  16. 【NLP】Representation Learning for Natural Language Processing
  17. ASP.NET MVC+Bootstrap 实现短信验证
  18. 长尾理论,长尾示意图,读书笔记
  19. 汉诺塔(Hanoi) ——递归思想
  20. 计算机歌曲谱凡人歌,歌曲《凡人歌 - (电视剧《碧海情天》主题曲)》歌词及歌词的寓意?...

热门文章

  1. IDEA git上传码云、GitHub、华为云
  2. WSUS连接错误需要重置服务器
  3. 小故事:如果你真的能保持一份真爱
  4. Oracle数据库中的临时表
  5. java从入门到精通二十三(Servlet)
  6. 重磅分享:微软面试100题2010年版全部答案完整亮相
  7. 洛谷P1775 石子合并(弱化版)
  8. java实现微信小程序客服功能开发,后台接受用户发送消息实现关键词自动回复
  9. 【软件测试】白盒测试用例设计——基本路径法
  10. 安徽IP地址段(续)