欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

純C語言實(shí)現(xiàn)火車售票系統(tǒng)

 更新時(shí)間:2019年12月27日 11:29:07   作者:【Chase  
這篇文章主要為大家詳細(xì)介紹了純C語言實(shí)現(xiàn)火車售票系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

這是好久之前寫的一個(gè)火車售票系統(tǒng), 寫的非常粗糙, 后來也沒改了, 希望遇見有緣人繼續(xù)優(yōu)化吧。

主要的功能是:設(shè)置車次,刪除車次, 買票, 改簽, 退票, 查詢等。

#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];//終點(diǎn)站
 int Train_price;//票價(jià)
 int leftnum;//余票數(shù)量
}Train_Ticket;
typedef struct person{
 int mark;//標(biāo)記
 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("-------------車次設(shè)置-------------\n");
 printf("請輸入你想設(shè)置的車次數(shù)量: ");
 scanf("%d",&n);
 for(i=d;i<d+n;i++){
  printf("請輸入車次編號:");
  scanf("%d",&L->data[i].Train_num);
  printf("請輸入車次終點(diǎn)站:");
  scanf("%s",&L->data[i].Train_end);
  printf("請輸入設(shè)置的票價(jià):");
  scanf("%d",&L->data[i].Train_price);
  printf("請輸入余票的數(shù)量:");
  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("------------買票服務(wù)------------\n");
 printf("請輸入你想購置車票數(shù):\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;//標(biāo)記點(diǎn)位
   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("你已支付該車票的價(jià)格%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("-------------------查詢服務(wù)-------------\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("始發(fā)站:Yantai  終點(diǎn)站:%s\n",L->data[b].Train_end);
  printf("第%d號列車   票價(jià): %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("始發(fā)站:Yantai  終點(diǎn)站:%s\n",L->data[b].Train_end);
    printf("第%d號列車   票價(jià): %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("------------改簽服務(wù)-----------\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("---你的改簽服務(wù)已完成!--\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("----------退票服務(wù)-------\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("---你的退票服務(wù)已完成!--\n");
  printf("-------------------------\n");
 
}
void Inquiry(SeqList*L)
{
 int i;
 if(L->len==0)
 {
  printf("No ticket left!\n");
 }
 else
 {
  printf("----------------------------Tickets information----------------------\n");
  printf("火車車次編號   車 次 路 線   車票售價(jià)   剩余票數(shù) ");
  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");
  }
 }
}

更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 深入學(xué)習(xí)C語言中的函數(shù)指針和左右法則

    深入學(xué)習(xí)C語言中的函數(shù)指針和左右法則

    這篇文章主要介紹了深入學(xué)習(xí)C語言中的函數(shù)指針和左右法則,左右法則是一種常用的C指針聲明,需要的朋友可以參考下
    2015-08-08
  • C/C++中的static關(guān)鍵字詳解

    C/C++中的static關(guān)鍵字詳解

    這篇文章主要為大家詳細(xì)介紹了 C/C++中的static關(guān)鍵字,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 使用VS Code進(jìn)行Qt開發(fā)的實(shí)現(xiàn)

    使用VS Code進(jìn)行Qt開發(fā)的實(shí)現(xiàn)

    這篇文章主要介紹了使用VS Code進(jìn)行Qt開發(fā)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • C++ vector的用法小結(jié)

    C++ vector的用法小結(jié)

    這篇文章主要介紹了c++中,vector是一個(gè)十分有用的容器,下面對這個(gè)容器做一下總結(jié)
    2013-12-12
  • C++編譯器和鏈接器工作原理及使用方法完全指南

    C++編譯器和鏈接器工作原理及使用方法完全指南

    本文將詳細(xì)介紹C++中的編譯器和鏈接器以及它們的工作原理及使用方法全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C++類中的六大默認(rèn)成員函數(shù)詳解

    C++類中的六大默認(rèn)成員函數(shù)詳解

    這篇文章主要介紹了C++類中的六大默認(rèn)成員函數(shù),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • C語言實(shí)現(xiàn)單鏈表的基本功能詳解

    C語言實(shí)現(xiàn)單鏈表的基本功能詳解

    鏈表是一個(gè)結(jié)構(gòu)體實(shí)現(xiàn)的一種線性表,它只能從前往后,不可以從后往前,在實(shí)現(xiàn)單鏈表的操作時(shí),需要用指針來操作。本文主要介紹了實(shí)現(xiàn)單鏈表的基本功能的代碼示例,具有一定價(jià)值,感興趣的同學(xué)可以學(xué)習(xí)一下
    2021-11-11
  • C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11新特性之右值引用與完美轉(zhuǎn)發(fā)詳解

    C++11標(biāo)準(zhǔn)為C++引入右值引用語法的同時(shí),還解決了一個(gè)短板,即使用簡單的方式即可在函數(shù)模板中實(shí)現(xiàn)參數(shù)的完美轉(zhuǎn)發(fā)。本文就來講講二者的應(yīng)用,需要的可以參考一下
    2022-09-09
  • C語言實(shí)現(xiàn)紙牌計(jì)算24點(diǎn)小游戲

    C語言實(shí)現(xiàn)紙牌計(jì)算24點(diǎn)小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)紙牌計(jì)算24點(diǎn)小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實(shí)現(xiàn)循環(huán)隊(duì)列和鏈?zhǔn)疥?duì)列的示例

    C++實(shí)現(xiàn)循環(huán)隊(duì)列和鏈?zhǔn)疥?duì)列的示例

    下面小編就為大家分享一篇C++實(shí)現(xiàn)循環(huán)隊(duì)列和鏈?zhǔn)疥?duì)列的示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12

最新評論