春运火车票如何安心购票?用C语言实现火车售票系统(源码分享)

今年春运首日火车票12月30日正式开售。每年春运,不少乘客为购得一张回家车票,“八仙过海、各显神通”,然而,总有部分乘客“神通失灵”。今年春运火车票如何安心购票?不如自己写一个火车订票系统吧。

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

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

#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语言C++编程!弯道超车,快人一步!
C语言C++学习企鹅圈子】,分享(源码、项目实战视频、项目笔记,基础入门教程)
欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习书籍:

 

编程学习视频:

 

文章来源:https://blog.csdn.net/chaseqrr/article/details/93521777

(0)

相关推荐

  • 初学C语言-循环

    for(;;;) 一切能用while循环的语句都可以使用for循环实现 while() 循环   不满足括号内容时结束循环; 先简单写一个while循环 吃小笼包子,吃到第三个包子吃出一条虫 #inc ...

  • 为什么指针被誉为 C 语言灵魂?

    来自公众号:编程指北 是的,这一篇的文章主题是「指针与内存模型」 说到指针,就不可能脱离开内存,学会指针的人分为两种,一种是不了解内存模型,另外一种则是了解. 不了解的对指针的理解就停留在" ...

  • 经常遇到的10大C语言基础算法(珍藏版源码)

    算法是一个程序和软件的灵魂,作为一名优秀的程序员,只有对一些基础的算法有着全面的掌握,才会在设计程序和编写代码的过程中显得得心应手.本文是近百个C语言算法系列的第二篇,包括了经典的Fibonacci数 ...

  • 在线直播系统源码的开发难度体现在选择开发语言上

    懂开发技术的朋友都知道,在线直播系统源码的开发语言有很多种,每种不同的开发语言会提供不同的开发方式,所以在开发前选对开发语言很重要,这往往决定了之后在线直播系统源码会往那个方向发展. 一.在线直播系统 ...

  • 2020年春运火车票购票指南

    等啊等,盼啊盼,还有43天就要过春节啦. 我们离春节饕餮的距离还有多远? 一张火车票! 今天,2020年春运火车票将于12月12日正式开售.铁路春运的起止时间为1月10日-2月18日,节前15天,节后 ...

  • 春运火车票今日预售,20张图盘点往昔春运,今年回家路还拥挤吗?

    春节回家,是每一个在外工作和学习游子的梦.2019年12月12日,2020年春运火车票开始发售.2020年的大年除夕是2020年1月24日,只剩下41天.伴随着春运火车票的预售,我们的回家的路也越来越 ...

  • 20210101——2021年铁路春运火车票开始发售

    集团公司预计发送旅客1900万人次 武铁讯(孟立 张琦 报道)2021年铁路春运自1月28日开始至3月8日结束,共40天,集团公司预计发送旅客1900万人次,日均发送旅客47万人次.按照火车票提前30 ...

  • 【评测】春运火车票哪家OTA值得买?飞猪等获“放心下单”评级

    导读:新年临近,新年临近,被称作"最大规模周期性人口迁徙"的春运也进入倒计时.对此,电子商务研究中心(微信ID:i100ec.cn)对包括12306和携程.飞猪.途牛.去哪儿.同程 ...

  • 官宣!2021年春运火车票明日起售

    2021年铁路春运自1月28日开始,3月8日结束,共40天,全国铁路预计发送旅客4.07亿人次,日均发送旅客1018万人次.按照火车票提前30天发售的安排,2020年12月30日,铁路部门开始发售20 ...

  • 春运火车票30日开售,12306售票时间提前到每日5时

    据央视新闻消息,记者从中国国家铁路集团有限公司(下称"国铁集团")获悉,2021年铁路春运自1月28日开始,3月8日结束,共40天,全国铁路预计发送旅客4.07亿人次,日均发送旅客 ...

  • 2021年春运火车票明起开抢 这个新服务已上线!

    2020年12月30日 00:08 来源:中国新闻网 参与互动中新网客户端北京12月30日电 今天,2021年春运火车正式开抢.据预计,2021年春运全国铁路将发送旅客4.07亿人次.疫情之下的春运, ...