这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧。

主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#include<conio.h>
#define MAXNUM 10000
#define Num 100
typedef struct train
{int Train_num;//火车编号char Train_end[10];//终点站int Train_price;//票价int leftnum;//余票数量
}Train_Ticket;
typedef struct person{int  mark;//标记int  snum;//身份号码char sex[10];//买票人性别//char Train_start[8];char name[10];//买票人姓名
}Person;
typedef struct node
{Train_Ticket data[MAXNUM];int len;
}SeqList;
Person pa1[Num],pa2[Num];
void init_Seqlist(SeqList*);
void Sale(SeqList*,FILE*);
void Withdraw(FILE*);
void Inquiry(SeqList*);
void Select(SeqList*,FILE*);
void Delete(SeqList*);
void Init(SeqList*,struct train t);
void Input(SeqList*);
void Exchange(SeqList*,FILE *fp);
int main()
{SeqList*q;FILE *fp;fp=fopen("train.dat","wb");q=(SeqList*)malloc(sizeof(SeqList));int sel;Input(q);system("cls");system("color  3f");//改变颜色system("cls");while(1){printf("-------------------------------------\n");printf("-----Welcome to YaiTai trainstation--\n");printf("1--    Set Tickets                 --");//初始化printf("\n2--    Book Ticket                 --");//买票printf("\n3--    Exchange Ticket             --");//改签printf("\n4--    Withdraw Ticket             --");//退票printf("\n5--    Delete Ticket               --");//删除车次printf("\n6--    Select Ticket               --");//查询printf("\n7--    Inquiry                     --");//printf("\n8--    Exit                        --");//退出printf("\n-------------------------------------");printf("\nPlease input your choice:");scanf("%d",&sel);getchar();switch(sel){case 1:init_Seqlist(q); break;case 2:if(q->len==0){printf("------------------\n");printf("    No tickets!\n");printf("------------------\n");break;}else{Sale(q,fp); break;}case 3:Exchange(q,fp); break;case 4:Withdraw(fp);break;case 5:Delete(q); break;case 6:Select(q,fp);   break;case 7:Inquiry(q);break;case 8:printf("------------------------------\n");printf("---Thank you for your use!---\n");printf("------------------------------\n");exit(1);default : printf("Enter error!!\n");}printf("请按ENTER返回主菜单\n");getchar();}return 0;
}
void Input(SeqList*L)
{int i;struct train tra[5]={{206,"beijing",200,20},{301,"chengdu",350,20},{432,"shangha",400,20},{783,"qingdao",175,20},{312,"hangzho",480,20}};for(i=0;i<5;i++)Init(L,tra[i]);
}
void Init(SeqList*L,struct train t)
{int i=L->len;L->data[i].Train_num=t.Train_num;strcpy(L->data[i].Train_end,t.Train_end);L->data[i].Train_price=t.Train_price;L->data[i].leftnum=t.leftnum;L->len++;
}
void init_Seqlist(SeqList*L)
{int i,d,n;d=L->len;printf("-------------车次设置-------------\n");printf("请输入你想设置的车次数量: ");scanf("%d",&n);for(i=d;i<d+n;i++){printf("请输入车次编号:");scanf("%d",&L->data[i].Train_num);printf("请输入车次终点站:");scanf("%s",&L->data[i].Train_end);printf("请输入设置的票价:");scanf("%d",&L->data[i].Train_price);printf("请输入余票的数量:");scanf("%d",&L->data[i].leftnum);L->len++;if((L->len)>1&&i<(L->len-1)){printf("请输入下班车次信息\n");}}printf("Initiation finish!\n");
}
void Sale(SeqList*L,FILE *fp)
{int i=0,k,a,j;if((fp=fopen("train.dat","ab+"))==NULL){printf("Cannot open file!\n");exit(1);}printf("------------买票服务------------\n");printf("请输入你想购置车票数:\n");scanf("%d",&a);if(a>1){printf("请分别输入%d名乘客信息\n",a);}else if(a<=1){printf("请输入该名乘客信息\n");}for(i=0;i<a;i++){printf("请先输入你的姓名:");scanf("%s",&pa1[i].name);printf("请选择性别<男>F<女>M:");scanf("%s",&pa1[i].sex);do{if(strcmp(pa1[i].sex,"F")!=0 && strcmp(pa1[i].sex,"M")!=0){printf("性别输入错误!请重新输入!\n");scanf("%s",&pa1[i].sex);}}while(strcmp(pa1[i].sex,"F")!=0 && strcmp(pa1[i].sex,"M")!=0);printf("请先输入你的身份证号码:");scanf("%d",&pa1[i].snum);}Inquiry(L);for(j=0;j<a;j++){printf("\nPlease input the Train_number you want to book(1~%d):");scanf("%d",&k);char answer[10];for(i=0;i<L->len;i++){if(k==L->data[i].Train_num){pa1[j].mark=i;//标记点位printf("确定选择购买 %d 车次的列车吗(yes or no)\n",L->data[i].Train_num);scanf("%s",&answer);do{if(strcmp(answer,"yes")!=0){printf("你的输入有误,请重新输入!\n");scanf("%s",&answer);}}while(strcmp(answer,"yes")!=0);if(strcmp(answer,"yes")==0){printf("你已支付该车票的价格%d元\n",L->data[i].Train_price);L->data[i].leftnum--;}else if(strcmp(answer,"no")==0){printf("请重新选择你要购买的车次编号\n");}}}printf("Tickets purchased success!\n");}for(i=0;i<a;i++)//printf("%d\n",pa1[i].mark);fwrite((void*)pa1,sizeof(Person),a,fp);fclose(fp);
}
void Delete(SeqList*L)
{int n,i,true=0;SeqList*q;q=(SeqList*)malloc(sizeof(SeqList));printf("\n--------------按照车次编号删除车次-------------\n");printf("请输入要删除的车次编号\n");scanf("%d",&n);for(i=0;i<L->len;i++){if(L->data[i].Train_num==n){true=1;if(i<L->len-1){L->data[i].Train_num=L->data[i+1].Train_num;L->data[i].Train_price=L->data[i+1].Train_price;L->data[i].leftnum=L->data[i+1].leftnum;strcpy(L->data[i].Train_end,L->data[i+1].Train_end);L->len--;printf("--------------------\n");printf("--已删除该车次信息--\n");printf("--------------------\n");}if(i==L->len-1){L->len--;printf("--------------------\n");printf("--已删除该车次信息--\n");printf("--------------------\n");}}}if(true==0){printf("No this ticket numbers!\n");}
}
void Select(SeqList*L,FILE *fp)
{SeqList*q;q=(SeqList*)malloc(sizeof(SeqList));int i,a,b,true=0;printf("-------------------查询服务-------------\n");printf("----------------------------------------\n");printf("1.按乘客的名称查询     2.按乘客证件号查询\n");printf("---------------------------------------\n");if((fp=fopen("train.dat","rb+"))==NULL){printf("Canot open file !\n");}fseek(fp,0L,SEEK_END);int d=ftell(fp)/sizeof(Person);rewind(fp);fread((void*)&pa2,sizeof(Person),d,fp);scanf("%d",&a);switch(a){case 1:{char na[20];printf("请输入该乘客的姓名:\n");scanf("%s",&na);for(i=0;i<d;i++){if(strcmp(pa2[i].name,na)==0){b=pa2[i].mark;true=1;printf("-------------%s的车次信息-------\n",pa2[i].name);printf("始发站:Yantai      终点站:%s\n",L->data[b].Train_end);printf("第%d号列车          票价: %d\n",L->data[b].Train_num,L->data[b].Train_price);printf("乘客姓名:%s\n",pa2[i].name);printf("乘客证件信息:%d\n",pa2[i].snum);printf("---------------------------------\n");}}}break;case 2:{int w;printf("请输入你的证件号:\n");scanf("%d",&w);for(i=0;i<Num;i++){if(pa1[i].snum==w){b=pa2[i].mark;printf("-------------%s的车次信息-------\n",pa2[i].name);printf("始发站:Yantai      终点站:%s\n",L->data[b].Train_end);printf("第%d号列车          票价: %d\n",L->data[b].Train_num,L->data[b].Train_price);printf("乘客姓名:%s\n",pa2[i].name);printf("乘客证件信息:%d\n",pa2[i].snum);printf("---------------------------------\n");}}}break;default:printf("------------------------------\n");printf("--你的输入有误,请重新输入!--\n");printf("------------------------------\n");Select(q,fp);break;}if(true==0){printf("没有该乘客的信息!\n");}
fclose(fp);//getchar();
}
void Exchange(SeqList*L,FILE *fp)
{printf("------------改签服务-----------\n");printf("请输入你的姓名:\n");char ta[10];if((fp=fopen("train.dat","rb+"))==NULL){printf("Canot open file !\n");}Person p[Num];fseek(fp,0L,SEEK_END);int r=ftell(fp)/sizeof(Person);rewind(fp);fread((void*)&p,sizeof(Person),r,fp);int m,i,d,j,y,h;scanf("%s",&ta);for(i=0;i<r;i++){if(strcmp(p[i].name,ta)==0){d=p[i].mark;printf("你目前的目的地是%s站\n",L->data[d].Train_end);L->data[d].leftnum++;}}Inquiry(L);printf("请重新输入你想去的目的地的车次编号:");scanf("%d",&m);for(j=0;j<L->len;j++){if(m == L->data[j].Train_num){L->data[j].leftnum--;printf("-------------------------\n");printf("---你的改签服务已完成!--\n");printf("-------------------------\n");d=j;}}for(i=0;i<r;i++){if(strcmp(p[i].name,ta)==0){p[i].mark=d;h=i;}}fseek(fp,h*sizeof(Person),SEEK_SET);fwrite((void*)&p,sizeof(Person),1,fp);fclose(fp);
}
void Withdraw(FILE *fp)
{printf("----------退票服务-------\n");char na[10];printf("请输入你的姓名:\n");scanf("%s",&na);Person *pe;int i,j;if((fp=fopen("train.dat","rb"))==NULL){printf("The file cannot be opened!\n");}fseek(fp,0L,SEEK_END);int n=ftell(fp)/sizeof(Person);if(n==1){fclose(fp);fp=fopen("train.dat","wb");}pe=(Person*)malloc(sizeof(Person)*(n-1));rewind(fp);for(j=i=0;i<n;i++){fread((void*)(pe+j),sizeof(Person),1,fp);if((strcmp((pe+j)->name,na))==0)continue;j++;}fclose(fp);fp=fopen("train.dat","wb");fwrite((void*)pe,sizeof(Person),n-1,fp);printf("-------------------------\n");printf("---你的退票服务已完成!--\n");printf("-------------------------\n");}
void Inquiry(SeqList*L)
{int i;if(L->len==0){printf("No ticket left!\n");}else{printf("----------------------------Tickets information----------------------\n");printf("火车车次编号           车 次 路 线            车票售价         剩余票数 ");for(i=0;i<L->len;i++){printf("\n  %d                  Yantai--%s               %d                 %d\n",L->data[i].Train_num,L->data[i].Train_end,L->data[i].Train_price,L->data[i].leftnum);printf("---------------------------------------------------------------------\n");}}
}

火车售票系统(纯C语言)相关推荐

  1. c语言 feof_C语言 实现简单功能的12306火车售票系统【附源码】

    本文福利在文末! 学习迷茫遇到问题了吗?现在关注微信公众号:C程序编程 免费获取进阶指导,资料工具以及源码 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 ...

  2. 火车票售票系统C语言大作业,基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...

  3. pthread售票多窗口共同C语言,基于C语言实现简单的12306火车售票系统

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 录入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票数量排序保存 售票 退票 更新班次信息 退出系统 所有的班次信息保存在n ...

  4. 火车售票系统c语言编程,基于C语言实现简单的12306火车售票系统.pdf

    基基于于C语语言言实实现现简简单单的的12306火火车车售售票票系系统统 程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: 入班次信息 浏览班次信息 按班次号查询 按终点站查询 按余票 ...

  5. 火车售票排队系统 c语言,【C语言】实现12306火车售票系统!【附源码】

    程序设计要求用C语言写一个简单的火车售票系统,主要实现的功能为: ● 录入班次信息 ● 浏览班次信息 ● 按班次号查询 ● 按终点站查询 ● 按余票数量排序保存 ● 售票 ● 退票 ● 更新班次信息 ...

  6. JAVA_SSM火车售票系统订票(含论文)毕业设计【演示视频】

    演示视频 JAVA 源码下载地址 JAVA_SSM火车售票系统订票(含论文)毕业设计,行业软件|毕业设计,Asp.net源码|- 51Aspx.com一.源码描述本系统基于SSM(Spring+Spr ...

  7. 火车售票系统 java_基于jsp的火车售票系统-JavaEE实现火车售票系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的火车售票系统, 该项目可用各类java课程设计大作业中, 火车售票系统的系统架构分为前后台两部分, 最终实现在线上 ...

  8. PHP火车购票系统,PHPC6051 火车售票系统

    文件名大小更新时间 PHPC6051 火车售票系统02017-11-02 PHPC6051 火车售票系统\.DS_Store61482017-11-02 __MACOSX02018-03-15 __M ...

  9. 火车售票系统(基于UML的软件分析与设计模型建模实验)

    火车售票系统(基于UML的软件分析与设计模型建模试验) 文章目录 火车售票系统(基于UML的软件分析与设计模型建模试验) 一.需求 二.UML用例图 三.UML类图 四.UML时序图 一.需求 实现一 ...

最新文章

  1. 我的hadoop学习之路
  2. 轻量级流程图控件GoJS示例连载(一):最小化
  3. Interface 的本质用处
  4. linux无效家目录,Linux 家目录下文件夹消失?
  5. ping 问题网络翻滚问题小结
  6. 夜貓子”必需的!——融合夜視技術
  7. 面试问题:Spring中Bean 的生命周期
  8. 优先级(HTML、CSS)
  9. php环境用什么服务器好些_PHP环境部署,Linux真的比Windows好吗?
  10. 在mudbuilder上的胡扯1
  11. SAP ABAP开发视频学习(视频教程)
  12. CMake 编译时出现错误 coffe转换到 COFF 期间失败: 文件无效或损坏
  13. 看小伙如何跟反爬抗争到底
  14. Hexo+Icarus3+live2d给博客添加看板娘
  15. 微信小程序发布版本之后自动更新功能
  16. 捍卫者usb管理控制系统_捍卫效用优先CSS
  17. 《七哥说道》第十章:今天我,寒夜里看雪飘过
  18. TTS离线语音合成应用方案【一】
  19. 分布式锁的简介与作用
  20. Panoply安装步骤(for Mac)

热门文章

  1. 自己制作一个回收站图标吧~(超详细)
  2. 《UNIX环境高级编程》六系统数据文件和信息读书笔记
  3. IT专业大学生就业压力很大吗?IT行业是吃青春饭的吗?
  4. MySql中的IFNULL、NULLIF和ISNULL用法
  5. STL(标准模板库)--容器(一)
  6. JSP上传图片限制大小像素
  7. MATLAB数字信号处理基础
  8. PMP考试与PMI-ACP考试的区别有哪些?
  9. php数字转汉字,php数字转汉字算法代码
  10. 网页视频加速-使用扩展程序方式-Global Speed