2023年7月6日发(作者:)
⽕车售票系统设计c语⾔,C语⾔⽕车售票系统#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("","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("","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("","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("","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 1show1();c1=getch();switch ( c1 ){//switchcase '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}//do1while(c1!='f'&&c1!='F');saver();savet();printf("/n/n ★ 谢谢您的使⽤!★");}
发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1688603411a154318.html
评论列表(0条)