纯C语言实现火车售票系统-创新互联

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

创新互联建站专注于邢台企业网站建设,响应式网站设计,购物商城网站建设。邢台网站建设公司,为邢台等地区提供建站服务。全流程定制网站制作,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务

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

#include
#include
#include
#include
#include
#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;idata[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;iF<女>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;jlen;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;ilen;i++){
  if(L->data[i].Train_num==n)
  {
   true=1;
   if(ilen-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;idata[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;idata[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;idata[d].Train_end);
   L->data[d].leftnum++;
  }
 }
 Inquiry(L);
 printf("请重新输入你想去的目的地的车次编号:");
 scanf("%d",&m);
 for(j=0;jlen;j++)
 {
  if(m == L->data[j].Train_num)
  {
   L->data[j].leftnum--;
   printf("-------------------------\n");
   printf("---你的改签服务已完成!--\n");
   printf("-------------------------\n");
   d=j;
  }
 }
  for(i=0;iname,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;ilen;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");
  }
 }
}

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:纯C语言实现火车售票系统-创新互联
本文网址:http://azwzsj.com/article/jgooh.html