• 火车售票系统(数据结构课设)


      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 #define MAXSIZE  2000
      5 /*车票信息*/
      6 typedef struct
      7 {
      8     char chezhan[20];/*车站*/
      9     char checi[20];/*车次*/
     10     char zuowei[40];/*座位*/
     11 }Data;
     12 
     13 /*顺序表类型定义*/
     14 typedef struct
     15 {
     16     Data data[MAXSIZE];
     17     int len;/*表长*/
     18 }SqList;
     19 
     20 /*统计所需的票的数量*/
     21 int searchnum(SqList  *p,char m[])
     22 {
     23     int i,j=0;
     24     for(i=1;i<=p->len;i++)
     25     {
     26         if(strcmp(p->data[i].checi,m)==0)
     27         {
     28             j++;
     29         }
     30     }
     31     return j;
     32 }
     33 
     34 /*查找*/
     35 int search(SqList *p,char m[])
     36 {
     37     int i=1;
     38     if(p->len==0)
     39     {
     40         return 0;
     41     }
     42     else
     43     {
     44         while(i<=p->len&&strcmp(p->data[i].checi,m)!=0)
     45         {
     46             i++;
     47         }
     48         if(i>p->len)
     49         {
     50             return 0;
     51         }
     52 
     53     }
     54     return i;
     55 }
     56 
     57 /*售票*/
     58 void del(SqList *p,int n,char m[])
     59 {
     60     int i,j,k;
     61     printf("
    你已成功购买以下车票
    ");
     62     printf("
        车站    车次    座位号
    ");
     63     for(i=1;i<=n;i++)
     64     {
     65         k=search(p,m);
     66         if(k!=0)
     67         {
     68             printf("%8s%8s%8s
    ",p->data[k].chezhan,p->data[k].checi,p->data[k].zuowei);
     69             for(j=k+1;j<=p->len;j++)
     70             {
     71                 p->data[j-1]=p->data[j];
     72             }
     73             p->len--;
     74         }
     75     }
     76     printf("
    ");
     77 }
     78 
     79 /*退票*/
     80 void add(SqList *p,Data x)
     81 {
     82     int i=1,j;
     83     while(i<=p->len&&strcmp(p->data[i].checi,x.checi)<0)
     84     {
     85         i++;
     86     }
     87     if(p->len==MAXSIZE-1)
     88     {
     89         printf("
    退票失败!
    ");
     90     }
     91     else
     92     {
     93         for(j=p->len;j>=i;j--)
     94         {
     95             p->data[j+1]=p->data[j];
     96         }
     97         p->data[i]=x;
     98         p->len++;
     99     }
    100 }
    101 /*菜单*/
    102 void menu()
    103 {
    104     printf("*******************************************
    ");
    105     printf("*             晋江火车站售票系统          *
    ");
    106     printf("* 1----------------------------------查询 *
    ");
    107     printf("* 2----------------------------------购票 *
    ");
    108     printf("* 3----------------------------------退票 *
    ");
    109     printf("* 0----------------------------------退出 *
    ");
    110     printf("*******************************************
    ");
    111 }
    112 
    113 /*主函数*/
    114 int main()
    115 {
    116     FILE *fp;
    117     int i,sel,n,l,a;
    118     SqList *p;
    119     p=(SqList *)malloc(sizeof(SqList));
    120     p->len=1;
    121     Data x;
    122     char m[20];
    123     do
    124     {
    125         menu();
    126         printf("
    请输入你的选择:");
    127         scanf("%d",&sel);
    128         switch(sel)
    129         {
    130             case 1:fp=fopen("F:\Cprogram\kesheyouhua\tickets.txt","rb");
    131                     if(fp==NULL)
    132                     {
    133                         printf("
    open error!
    ");
    134                         return 0;
    135                     }
    136                     else
    137                     {
    138                         if(p->len==0)
    139                         {
    140                             printf("
    车票均已售空!
    
    ");
    141                         }
    142                         else
    143                         {
    144                             printf("
        车站    车次    座位号
    ");
    145                             for(i=1;!feof(fp);i++)
    146                             {
    147                                 fscanf(fp,"%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    148                                 printf("%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    149                             }
    150                             p->len=i-1;
    151                             fclose(fp);
    152                         }
    153                     }
    154                     printf("
    ");
    155                 break;
    156             case 2:fp=fopen("F:\Cprogram\kesheyouhua\tickets.txt","rb");
    157                     if(fp==NULL)
    158                     {
    159                         printf("
    open error!
    ");
    160                         return 0;
    161                     }
    162                     else
    163                     {
    164                         if(p->len==0)
    165                         {
    166                             printf("
    车票均已售空,无法购票!
    
    ");
    167                         }
    168                         else
    169                         {
    170                             for(i=1;!feof(fp);i++)
    171                             {
    172                                 fscanf(fp,"%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    173                             }
    174                             p->len=i-1;
    175                             if(p->len==0)
    176                             {
    177                                 printf("
    车票均已售空!
    
    ");
    178                             }
    179                             else
    180                             {
    181                                 printf("
    请输入要购买的车次和车票数量:");
    182                                 scanf("%s%d",m,&n);
    183                                 l=searchnum(p,m);
    184                                 if(l==0)
    185                                 {
    186                                     printf("
    此车次的车票已经售空!
    ");
    187                                 }
    188                                 else
    189                                 {
    190                                     if(l<n)
    191                                     {
    192                                         printf("
    此车次的车票仅剩下%d张,是否购买?(购买请按1,取消请按0)
    ",l);
    193                                         printf("你的选择是:");
    194                                         scanf("%d",&a);
    195                                         if(a==1)
    196                                         {
    197                                             del(p,n,m);
    198                                             fp=fopen("F:\Cprogram\kesheyouhua\tickets.txt","wb");
    199                                             if(fp==NULL)
    200                                             {
    201                                                 printf("open error!");
    202                                                 return 0;
    203                                             }
    204                                             else
    205                                             {
    206                                                 for(i=1;i<=p->len;i++)
    207                                                 {
    208                                                     fprintf(fp,"%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    209                                                 }
    210                                                 fclose(fp);
    211                                             }
    212                                         }
    213                                     }
    214                                     if(l>=n)
    215                                     {
    216                                         del(p,n,m);
    217                                         fp=fopen("F:\Cprogram\kesheyouhua\tickets.txt","wb");
    218                                         if(fp==NULL)
    219                                         {
    220                                             printf("open error!");
    221                                             return 0;
    222                                         }
    223                                         else
    224                                         {
    225                                             for(i=1;i<=p->len;i++)
    226                                             {
    227                                                 fprintf(fp,"%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    228                                             }
    229                                             fclose(fp);
    230                                         }
    231                                     }
    232                                 }
    233                             }
    234                         }
    235                         fclose(fp);
    236                     }
    237                 break;
    238             case 3:printf("
    请输入要退的票的购买地点(如:晋江火车站,西安火车站):");
    239                     scanf("%s",x.chezhan);
    240                     if(strcmp("晋江",x.chezhan)==0)
    241                     {
    242                         printf("
    请输入你要退的票的车次和座位:");
    243                         scanf("%s%s",x.checi,x.zuowei);
    244                         add(p,x);
    245                         fp=fopen("F:\Cprogram\kesheyouhua\tickets.txt","wb");
    246                         if(fp==NULL)
    247                         {
    248                             printf("open error!");
    249                             return 0;
    250                         }
    251                         else
    252                         {
    253                             for(i=1;i<=p->len;i++)
    254                             {
    255                                 fprintf(fp,"%8s%8s%8s
    ",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
    256                             }
    257                             p->len=i-1;
    258                             fclose(fp);
    259                         }
    260                         printf("
    退票成功!
    
    ");
    261                     }
    262                     else
    263                     {
    264                         printf("
    由于此车票不是本站出售的,无法让您退票,给您造成的不便敬请谅解!
    
    ");
    265                     }
    266                 break;
    267         }
    268     }while(sel!=0);
    269 return 0;
    270 }
  • 相关阅读:
    K
    士兵队列训练问题
    分析A + B Problem II
    C++中sort()的用法
    swing初级应用创建一个窗体
    java生成随机数
    JAVA数字格式化
    CodeForces
    POJ
    51Nod
  • 原文地址:https://www.cnblogs.com/xautlmx/p/3441355.html
Copyright © 2020-2023  润新知