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 }