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

  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 }

 

你可能感兴趣的:(数据结构)