找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3040|回复: 1
打印 上一主题 下一主题
收起左侧

编写的飞机订票系统C源码

[复制链接]
跳转到指定楼层
楼主
运行效果如下:


单片机源程序如下:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. //#include <conio.h>
  5. #define MAXSIZE 10
  6. typedef struct wat_ros
  7. {
  8.         char name[10];
  9.         int req_amt;
  10.         struct wat_ros *next;
  11. }qnode,*qptr;
  12. typedef struct pqueue
  13. {
  14.         qptr front;
  15.         qptr rear;
  16. }linkqueue;
  17. typedef struct ord_ros
  18. {
  19.         char name[10];
  20.         int ord_amt;
  21.         int grade;
  22.         struct ord_ros *next;
  23. }linklist;
  24. struct airline
  25. {      
  26.         char ter_name[10]; /* 站点名 */
  27.         char air_num[10]; /* 航班号 */
  28.         char plane_num[10]; /* 飞机号 */
  29.         char date[7]; /* 飞行日期 */
  30.         int tkt_amt; /* 乘员定额 */
  31.         int tkt_sur; /* 余票量 */
  32.         linklist *order;
  33.         linkqueue wait;
  34. }lineinfo;
  35. struct airline *start;
  36. struct airline air[MAXSIZE]={
  37.                                 {"北京", "1", "S1001", "星期一", 130, 10},
  38.                                    {"上海","2","S1002","星期二",120,5},
  39.                                 {"厦门","3","S1003","星期三",157,15},
  40.                                 {"广州","4","S1004","星期四",146,5},
  41.                                 {"海口","5","S1005","星期四",173,15},
  42.                                 {"深圳","6","S1006","星期五",120,35},
  43.                                 {"长沙","7","S1007","星期四",145,65},
  44.                                 {"成都","8","S1008","星期六",125,53},
  45.                                 {"杭州","9","S1009","星期四",146,24},
  46.                             {"重庆","10","S1010","星期五",100,30}
  47. };;
  48. void display(struct airline *info)
  49. {      
  50.         printf("%8s\t%3s\t%s\t%4s\t\%d\t\%d\t\n",info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur);
  51. }
  52. /* 浏览航线信息函数 */
  53. void list()
  54. {
  55.         struct airline *info;
  56.         int i = 0;
  57.         info = start;
  58.         printf("终点站名\t航班号\t飞机号\t飞行日期" "乘员定额" "余票量\n");
  59.         while(i < MAXSIZE){
  60.                 display(info);
  61.                 info++;
  62.                 i++;
  63.         }
  64.         printf("\n\n");
  65. }
  66. void search()
  67. {
  68.         struct airline *info,*find();
  69.         char name[10];
  70.         int i=0;
  71.         info=start;
  72.         printf("请输入终点站名:");
  73.         scanf("%s",name);
  74.         while(i<MAXSIZE)
  75. {
  76. if(!strcmp(name,info->ter_name)) break;
  77. info++;
  78. i++;
  79. }
  80. if(i>=MAXSIZE)
  81. printf("对不起,该航线未找到!\n");
  82. else
  83. {
  84. printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
  85. display(info);
  86. }
  87. }
  88. struct airline *find()
  89. {
  90.         struct airline *info;
  91.         char number[10];
  92.         int i=0;
  93.         info=start;
  94.         printf("请输入航班号:");
  95.         scanf("%s",number);
  96.         while(i<MAXSIZE)
  97.         {
  98.                 if(!strcmp(number,info->air_num)) return info;
  99.                 info++;
  100.                 i++;
  101.         }
  102.         printf("对不起,该航线末找到!\n");
  103.         return NULL;
  104. }
  105. /* 浏览已订票客户信息 */
  106. void prtlink()
  107. {
  108.         linklist *p;
  109.         struct airline *info;
  110.         info=find();
  111.         p=info->order;
  112.         if(p!=NULL){
  113.         printf("客户姓名 订票数额 舱位等级\n");
  114.                 while(p){
  115.                 printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);
  116.                 p=p->next;
  117.                 }
  118.         }
  119.         else
  120.         printf("该航线没有客户信息!!\n");
  121. }
  122. linklist *insertlink(linklist *head,int amount,char name[],int grade)
  123. { linklist *p1,*new1;
  124. p1=head;
  125. new1=(linklist *)malloc(sizeof(linklist));
  126. if(!new1) {printf("\nOut of memory!!\n");return NULL;}
  127. strcpy(new1->name,name);
  128. new1->ord_amt=amount;
  129. new1->grade=grade;
  130. new1->next=NULL;
  131. if(head==NULL)
  132. {head=new1;new1->next=NULL;}
  133. else
  134. head=new1;
  135. new1->next=p1;
  136. return head;
  137. }
  138. linkqueue appendqueue(linkqueue q,char name[],int amount)
  139. { qptr new1;
  140. new1=(qptr)malloc(sizeof(qnode));
  141. strcpy(new1->name,name);
  142. new1->req_amt=amount;
  143. new1->next=NULL;
  144. if(q.front==NULL)
  145. q.front=new1;
  146. else
  147. q.rear->next=new1;
  148. q.rear=new1;
  149. return q;
  150. }
  151. void order()
  152. { struct airline *info;
  153. int amount,grade;
  154. char name[10];
  155. info=start;
  156. if(!(info=find())) return;
  157. printf("请输入订飞机票的数量:");
  158. scanf("%d",&amount);
  159. if(amount>info->tkt_amt)
  160. { printf("\n对不起,您输入的数量已经超额!");
  161. return;
  162. }
  163. if(amount<=info->tkt_sur)
  164. {
  165. int i;
  166. printf("请输入您的姓名(订票客户):");
  167. scanf("%s",name);
  168. printf("请输入%s票的舱位等级:",name);
  169. scanf("%d",&grade);
  170. info->order=insertlink(info->order,amount,name,grade);
  171. for(i=0;i<amount;i++)
  172. printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);
  173. info->tkt_sur-=amount;
  174. printf("\n祝您旅途愉快!\n");
  175. }
  176. else
  177. { char r;
  178.         printf("\n已经没有更多的票,您需要登记吗?(Y/N)");
  179. //r=getch();
  180. //printf("%c",r);
  181.         scanf ( "回车继续等待%c", &r );
  182. if(r=='Y'||r=='y')
  183. { printf("\n请输入您的姓名(排队订票客户):");
  184. scanf("%s",name);
  185. info->wait=appendqueue(info->wait,name,amount);
  186. printf("\n注册成功!\n");
  187. }
  188. else printf("\n欢迎您再次乘坐!\n");
  189. }
  190. }
  191. void return_tkt()
  192. { struct airline *info;
  193. qnode *t,*back,*f,*r;
  194. int grade;
  195. linklist *p1,*p2,*head;
  196. char cusname[10];
  197. if(!(info=find())) return;
  198. head=info->order;
  199. p1=head;
  200. printf("请输入你的姓名(退票客户):");
  201. scanf("%s",cusname);
  202. while(p1!=NULL) {
  203. if(!strcmp(cusname,p1->name)) break;
  204. p2=p1;p1=p1->next;
  205. }
  206. if(p1==NULL){ printf("对不起,您没有订过票!\n");return;}
  207. else
  208. {
  209. if(p1==head) head=p1->next;
  210. else p2->next=p1->next;
  211. info->tkt_sur+=p1->ord_amt;
  212. grade=p1->grade;
  213. printf("%s退票成功!\n",p1->name);
  214. free(p1);
  215. }
  216. info->order=head;
  217. f=(info->wait).front;
  218. r=(info->wait).rear;
  219. t=f;
  220. while(t)
  221. {
  222.         if((info->tkt_sur = info->wait.front->req_amt))
  223. {
  224. int i;
  225. info->wait.front=t->next;
  226. printf("%s订票成功!\n",t->name);
  227. for(i=0;i<t->req_amt;i++)
  228. printf("%s的座位号是:%d\n",t->name,(info->tkt_sur)-i);
  229. info->tkt_sur-=t->req_amt;
  230. info->order=insertlink(info->order,t->req_amt,t->name,grade);
  231. free(t);
  232. break;
  233. }
  234. back=t;t=t->next;
  235. if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)
  236. { int i;
  237. back->next=t->next;
  238. printf("%s订票成功!\n",t->name);
  239. for(i=0;i<t->req_amt;i++)
  240. printf("<%s>'s seat number is:%d\n",t->name,(info->tkt_sur)-i);
  241. info->tkt_sur-=t->req_amt;
  242. info->order=insertlink(info->order,t->req_amt,t->name,grade);
  243. free(t);break;
  244. }
  245. if(f==r) break;
  246. }
  247. }
  248. void sort_tkt()
  249. {
  250. int j;
  251. struct airline t,*info,*p,*q;
  252. p=info=air;
  253. for(p=info;(p+1)->tkt_sur;p++)
  254. for(q=p+1;q->tkt_sur;q++)
  255. {
  256. if(p->tkt_sur<q->tkt_sur)
  257. {
  258. t=*p;
  259. *p=*q;
  260. *q=t;
  261. }
  262. }
  263. printf("终点站名\t航班号\t飞机号\t飞行日期\t乘员定额\t余票量\n");
  264. for(j=0;j<MAXSIZE;j++)
  265. {
  266. display(info);
  267. info++;
  268. }
  269. }
  270. int menu_select()
  271. {
  272.         int c;
  273.         char s[20];
  274.         printf("\n\t\t 飞订票系统(信息来自 12306官网)\n");
  275.         printf(" ******************************************\n");
  276.         printf(" ** 1.浏览航线信息 **\n");
  277.         printf(" ** 2.查询航班 **\n");
  278.         printf(" ** 3.浏览已订票客户信息 **\n");
  279.         printf(" ** 4.办理订票业务 **\n");
  280.         printf(" ** 5.办理退票业务 **\n");
  281.         printf(" ** 6.查看剩余票数 **\n");
  282.         printf(" ** 0.退出系统 **\n");
  283.         printf(" *******************************************\n");
  284.         do
  285.         {
  286.                 printf("请选择:");
  287.                 scanf("%s",s);
  288.                 c = atoi(s);        /* atoi将字符串转换为整型 */
  289.         }while(c < 0||c > 7);
  290.         return c;
  291. }
  292. int  main()
  293. {
  294.         start = air;
  295.         for(;;)
  296.         {
  297.                 switch(menu_select())
  298.                 {
  299.                         case 1:list();break;
  300.                         case 2:prtlink();break;
  301.                         case 3:search();break;
  302.                         case 4:order();break;
  303.                         case 5:return_tkt();break;
  304.                         case 6:sort_tkt();break;
  305.                         case 0:printf("\n欢迎使用12306订票系统,再会!\n");exit(0);
  306.                 }
  307.         printf("\nPress any key to continue!\n");
  308.         getchar();
  309.         }
  310.         return 0;
  311. }
复制代码




评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:362692 发表于 2020-3-23 15:01 来自手机 | 只看该作者
这是用的什么编译软件啊??
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表