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("\n你已成功购买以下车票\n");
 62     printf("\n    车站    车次    座位号\n");
 63     for(i=1;i<=n;i++)
 64     {
 65         k=search(p,m);
 66         if(k!=0)
 67         {
 68             printf("%8s%8s%8s\n",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("\n");
 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("\n退票失败!\n");
 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("*******************************************\n");
105     printf("*             晋江火车站售票系统          *\n");
106     printf("* 1----------------------------------查询 *\n");
107     printf("* 2----------------------------------购票 *\n");
108     printf("* 3----------------------------------退票 *\n");
109     printf("* 0----------------------------------退出 *\n");
110     printf("*******************************************\n");
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("\n请输入你的选择:");
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("\nopen error!\n");
134                         return 0;
135                     }
136                     else
137                     {
138                         if(p->len==0)
139                         {
140                             printf("\n车票均已售空!\n\n");
141                         }
142                         else
143                         {
144                             printf("\n    车站    车次    座位号\n");
145                             for(i=1;!feof(fp);i++)
146                             {
147                                 fscanf(fp,"%8s%8s%8s\n",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
148                                 printf("%8s%8s%8s\n",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("\n");
155                 break;
156             case 2:fp=fopen("F:\\Cprogram\\kesheyouhua\\tickets.txt","rb");
157                     if(fp==NULL)
158                     {
159                         printf("\nopen error!\n");
160                         return 0;
161                     }
162                     else
163                     {
164                         if(p->len==0)
165                         {
166                             printf("\n车票均已售空,无法购票!\n\n");
167                         }
168                         else
169                         {
170                             for(i=1;!feof(fp);i++)
171                             {
172                                 fscanf(fp,"%8s%8s%8s\n",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("\n车票均已售空!\n\n");
178                             }
179                             else
180                             {
181                                 printf("\n请输入要购买的车次和车票数量:");
182                                 scanf("%s%d",m,&n);
183                                 l=searchnum(p,m);
184                                 if(l==0)
185                                 {
186                                     printf("\n此车次的车票已经售空!\n");
187                                 }
188                                 else
189                                 {
190                                     if(l<n)
191                                     {
192                                         printf("\n此车次的车票仅剩下%d张,是否购买?(购买请按1,取消请按0)\n",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\n",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\n",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("\n请输入要退的票的购买地点(如:晋江火车站,西安火车站):");
239                     scanf("%s",x.chezhan);
240                     if(strcmp("晋江",x.chezhan)==0)
241                     {
242                         printf("\n请输入你要退的票的车次和座位:");
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\n",p->data[i].chezhan,p->data[i].checi,p->data[i].zuowei);
256                             }
257                             p->len=i-1;
258                             fclose(fp);
259                         }
260                         printf("\n退票成功!\n\n");
261                     }
262                     else
263                     {
264                         printf("\n由于此车票不是本站出售的,无法让您退票,给您造成的不便敬请谅解!\n\n");
265                     }
266                 break;
267         }
268     }while(sel!=0);
269 return 0;
270 }

 

posted on 2013-11-25 13:35  ↗℡.Koen↘  阅读(1853)  评论(1编辑  收藏  举报