当前位置:   article > 正文

期末课程设计_p=info->order

p=info->order
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #include<conio.h>
  5. #include<iostream>
  6. #define MAXSIZE 5/*定义航线数量,可修改*/
  7. typedef struct wat_ros /*单链队列存储等候替补的客户信息*/
  8. {a
  9. char name[10];/*姓名*/
  10. int req_amt;/*订票量*/
  11. struct wat_ros*next;
  12. }qnode,*qptr;
  13. typedef struct pqueue /*等候替补的客户名单*/
  14. {
  15. qptr front;/*等候替补客户名单域的队头指针*/
  16. qptr rear;/*等候替补客户名单域的队尾指针*/
  17. }linkqueue;
  18. typedef struct ord_ros /*乘员名单*/
  19. {
  20. char name[10];/*客户姓名*/
  21. int ord_amt;/*订票量*/
  22. int grade;/*舱位等级*/
  23. struct ord_ros *next;
  24. }linklist;
  25. struct airline
  26. {
  27. char ter_name[10]; /*抵达城市*/
  28. char air_num[10];/*航班号*/
  29. char time[10];/*飞机时间*/
  30. char pri[7];/*票价*/
  31. int tkt_amt;/*乘员定额*/
  32. int tkt_sur;/*余票量*/
  33. linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/
  34. linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/
  35. }lineinfo;
  36. struct airline *start;
  37. void display(struct airline *info)/*打印每条航线的基本信息*/
  38. {
  39. printf("%8s\t%3s\t%s\t\t%4s\t%3d\t%10d\n",info->ter_name,info->air_num,info->time,info->pri,info->tkt_amt,info->tkt_sur);
  40. }
  41. void list()/*打印全部航线信息*/
  42. {
  43. struct airline *info;
  44. int i=0;
  45. info=start;
  46. printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n");
  47. while(i<MAXSIZE)
  48. {
  49. display(info);/*调用display函数来输出*/
  50. info++;
  51. i++;
  52. }
  53. printf("\n\n");
  54. }
  55. void search()/*根据客户提出的终点站名输出航线信息*/
  56. {
  57. struct airline *info,*find();
  58. char name[10];/*要抵达的城市名称*/
  59. int i=0;
  60. info=start;
  61. printf("请输入要抵达城市的名称:");
  62. scanf("%s",name);
  63. while(i<MAXSIZE)
  64. {
  65. if(!strcmp(name,info->ter_name))/*有该站名strcmp则返回,if(!0)即break*/
  66. {
  67. break;
  68. }
  69. info++;
  70. i++;
  71. }
  72. if(i>=MAXSIZE)/*没有匹配的航线*/
  73. {
  74. printf("对不起,没有这条航线!\n");
  75. }
  76. else
  77. {
  78. printf("终点站名\t航班号\t飞行时间\t票价\t乘员定额\t余票量\n");
  79. display(info);/*调用display函数输出航线信息*/
  80. }
  81. }
  82. struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/
  83. {
  84. struct airline *info;
  85. char number[10]; /*查询的航班号*/
  86. int i=0;
  87. info=start;
  88. printf("请输入航班号:");
  89. scanf("%s",number);
  90. while(i<MAXSIZE)
  91. {
  92. if(!strcmp(number,info->air_num))/*有匹配航班*/
  93. {
  94. return info;
  95. }
  96. info++;
  97. i++;
  98. }/*无匹配航班*/
  99. printf("对不起,没有这条航线!\n");
  100. return NULL;
  101. }
  102. void prtlink() /*打印订票乘员名单域的客户名单信息*/
  103. {
  104. linklist *p;
  105. struct airline *info;
  106. info=find();
  107. p=info->order;
  108. if(p!=NULL) /*按顺序输出客户信息链表*/
  109. {
  110. printf("客户姓名 订票数额 舱位等级\n");
  111. while(p)
  112. {
  113. printf("%s\t\t%d\t%d\n",p->name,p->ord_amt,p->grade);
  114. p=p->next;
  115. }
  116. }
  117. else/*没有人订这个航班*/
  118. printf("该航线没有客户信息!\n");
  119. }
  120. linklist *insertlink(linklist *head,int amount,char name[],int grade) /*增加订票乘员名单域的客户信息*/
  121. {
  122. linklist *p1,*new1;
  123. p1=head;
  124. new1=(linklist*)malloc(sizeof(linklist));
  125. if(!new1)/*存储空间不足*/
  126. {
  127. printf("\nOut of memory!!\n");
  128. return NULL;
  129. }
  130. strcpy(new1->name,name);
  131. new1->ord_amt=amount;
  132. new1->grade=grade;
  133. new1->next=NULL;
  134. if(head==NULL)/*若原订票客户信息为空*/
  135. {
  136. head=new1;
  137. new1->next=NULL;
  138. }
  139. else
  140. {
  141. head=new1;
  142. }
  143. new1->next=p1;
  144. return head;
  145. }
  146. linkqueue appendqueue(linkqueue q,char name[],int amount) /*增加排队等候的客户名单域*/
  147. {
  148. qptr new1;
  149. new1=(qptr)malloc(sizeof(qnode));
  150. strcpy(new1->name,name);
  151. new1->req_amt=amount;
  152. new1->next=NULL;
  153. if(q.front==NULL)/*若原排队等候客户名单域为空*/
  154. {
  155. q.front=new1;
  156. }
  157. else
  158. {
  159. q.rear->next=new1;
  160. }
  161. q.rear=new1;
  162. return q;
  163. }
  164. void order()/*办理订票业务*/
  165. {
  166. struct airline *info;
  167. int amount,grade; /*订票数量,舱位等级*/
  168. char name[10]; /*要订的航班号*/
  169. info=start;
  170. if(!(info=find())) /*根据客户提供的航班号进行查询,如为空,退出该模块*/
  171. {
  172. return;
  173. }
  174. printf("请输入您需要的票数:");
  175. scanf("%d",&amount);
  176. if(amount>info->tkt_amt) /*若客户订票额超过乘员定票总额,退出*/
  177. {
  178. printf("\n对不起,您输入票数已经超过乘员定额!");
  179. return;
  180. }
  181. if(amount<=info->tkt_sur) /*若客户订票额末超过余票量,订票成功并等记信息*/
  182. {
  183. int i;
  184. printf("请输入您的姓名:");
  185. scanf("%s",name);
  186. printf("请输入您需要的舱位等级(1,2或):");
  187. scanf("%d",&grade);
  188. info->order=insertlink(info->order,amount,name,grade); /*在订票乘员名单域中添加客户信息*/
  189. for(i=0;i<amount;i++) /*依次输出该订票客户的座位号*/
  190. {
  191. printf("%s的座位号是:%d\n",name,info->tkt_amt-info->tkt_sur+i+1);
  192. }
  193. info->tkt_sur-=amount; /*该航线的余票量应减掉该客户的订票量*/
  194. printf("\n祝您乘坐愉快!\n");
  195. }
  196. else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/
  197. {
  198. char r;
  199. printf("\n没有这么多票了,您需要排队等候吗?(Y/N)");
  200. r=getch();
  201. printf("%c",r);
  202. if(r=='Y'||r=='y')
  203. {
  204. printf("\n请输入您的姓名:");
  205. scanf("%s",name);
  206. info->wait=appendqueue(info->wait,name,amount); /*在排队等候乘员名单域中添加客户信息*/
  207. printf("\n注册排队成功!\n");
  208. }
  209. else
  210. {
  211. printf("\n欢迎您再次订购!\n");
  212. }
  213. }
  214. }
  215. void return_tkt() /*退票模块*/
  216. {
  217. struct airline *info;
  218. qnode *t,*back,*f,*r;
  219. int grade;
  220. linklist *p1,*p2,*head;
  221. char cusname[10];
  222. if(!(info=find())) /*调用查询函数,根据客户提供的航线进行搜索*/
  223. {
  224. return;
  225. }
  226. head=info->order;
  227. p1=head;
  228. printf("请输入你的姓名:");
  229. scanf("%s",cusname);
  230. while(p1!=NULL) /*根据客户提供的姓名到订票客户名单域进行查询*/
  231. {
  232. if(!strcmp(cusname,p1->name))
  233. {
  234. break;
  235. }
  236. p2=p1;
  237. p1=p1->next;
  238. }
  239. if(p1==NULL)/*若未找到,退出本模块*/
  240. {
  241. printf("对不起,您没有订过票!\n");
  242. return;
  243. }
  244. else /*若信息查询成功,删除订票客户名单域中的信息*/
  245. {
  246. if(p1==head)
  247. {
  248. head=p1->next;
  249. }
  250. else
  251. {
  252. p2->next=p1->next;
  253. }
  254. info->tkt_sur+=p1->ord_amt;
  255. grade=p1->grade;
  256. printf("%s退票成功!\n",p1->name);
  257. free(p1);
  258. }
  259. info->order=head;
  260. f=(info->wait).front;/*f指向排队等候名单队列的头结点*/
  261. r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/
  262. t=f;/*t为当前满点条件的排队候补名单域*/
  263. while(t)
  264. {
  265. if(info->tkt_sur>=info->wait.front->req_amt)/*若满足条件者为头结点*/
  266. {
  267. int i;
  268. info->wait.front=t->next;
  269. printf("%s订票成功!\n",t->name);
  270. for(i=0;i<t->req_amt;i++)/*输出座位号*/
  271. {
  272. printf("%s的座位号是:%d\n",t->name,(info->tkt_sur)-i);
  273. }
  274. info->tkt_sur-=t->req_amt;
  275. info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/
  276. free(t);
  277. break;
  278. }
  279. back=t;
  280. t=t->next;
  281. if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/
  282. {
  283. int i;
  284. back->next=t->next;
  285. printf("%s订票成功!\n",t->name);
  286. for(i=0;i<t->req_amt;i++)/*输出座位号*/
  287. {
  288. printf("<%s>'s seat?number is:%d\n",t->name,(info->tkt_sur)-i);
  289. }
  290. info->tkt_sur-=t->req_amt;
  291. info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/
  292. free(t);break;/*重新将航线名单域指向订票单链表的头指针*/
  293. }
  294. if(f==r)
  295. {
  296. break;
  297. }
  298. }
  299. }
  300. int menu_select() /*菜单界面*/
  301. {
  302. int c;
  303. char s[20];
  304. printf("\ 航空订票系统 \n");
  305. printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  306. printf(" 程梦莹\n");
  307. printf(" 1.查看航线信息\n");
  308. printf(" 2.查看已订票客户信息\n");
  309. printf(" 3.查询航线\n");
  310. printf(" 4.办理订票业务\n");
  311. printf(" 5.办理退票业务\n");
  312. printf(" 6.退出系统\n");
  313. printf(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
  314. do
  315. {
  316. printf("请选择(1-6):");
  317. scanf("%s",s);
  318. c=atoi(s);
  319. }
  320. while(c<1||c>6);
  321. return c;
  322. }
  323. void main()
  324. {
  325. struct airline air[MAXSIZE]=/*初始化航线信息*/
  326. {
  327. {"beijing","1","1200","860",30,30},
  328. {"shanghai","2","1000","770",20,20},
  329. {"linyi","3","1330","960",10,10},
  330. {"guangzhou","4","1700","760",50,50},
  331. {"dalian","5","1400","550",40,40},
  332. };
  333. start=air;
  334. for(;;)/*无限循环(除非用户选择.退出)*/
  335. {
  336. system("cls");/*清空屏幕*/
  337. switch(menu_select())
  338. {
  339. case 1:list(); /*打印全部航线信息*/
  340. break;
  341. case 2:prtlink();/*浏览已订票客户信息*/
  342. break;
  343. case 3:search();/*查询航线*/
  344. break;
  345. case 4:order();/*订票*/
  346. break;
  347. case 5:return_tkt();/*退票*/
  348. break;
  349. case 6:printf("\n感谢您的使用,再见!\n"); /*退出系统*/
  350. exit(0); /*正常退出程序*/
  351. }
  352. printf("\n任意键继续...\n");
  353. getch();/*任意键继续*/
  354. }
  355. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/662913
推荐阅读
相关标签
  

闽ICP备14008679号