C语言火车售票系统
2010-10-30 00:55
288 查看
#include<stdio.h>
#include<string.h>
#include<conio.h>//getch
#include<stdlib.h>//动态分配
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<n;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<n;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 ★ 谢谢您的使用!★");
}
#include<string.h>
#include<conio.h>//getch
#include<stdlib.h>//动态分配
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<n;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<n;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语言实现简单的12306火车售票系统
- 火车站点售票系统
- 火车售票系统(数据结构课设)
- java多线程之火车售票系统模拟
- C语言使用链表实现火车票售票系统未完成
- 使用java多线程模拟火车售票系统(1)
- java多线程实现火车售票系统 以及java中的同步的实现 同步块 和同步方法同时 同步
- 使用java多线程模拟火车售票系统(2)
- java多线程实现火车售票系统 以及java中的同步的实现 同步块 和同步方法同时 同步
- 【C语言】火车订票系统
- 火车售票系统--JDBC
- java多线程之火车售票系统模拟实例
- 火车售票系统(数据结构课设)
- 多线程编程1(互斥对象、简单火车售票系统)
- C++多线程操作(火车售票系统线程同步)
- C语言项目--教师信息/学生成绩管理系统
- Windows系统下文件的概念及c语言对其的基本操作(乙)
- C语言 日历查询系统 成品
- C语言获取系统当前时间