train_graph.c
上传用户:janny_wxd
上传日期:2010-02-03
资源大小:261k
文件大小:6k
源码类别:

控制台编程

开发平台:

C/C++

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<stdlib.h>
  4. #define OK 1
  5. #define TRUE 1
  6. #define ERROR 0
  7. #define OVERFLOW -2
  8. #define PR printf
  9. #define SIZE 10
  10. typedef int status;
  11. typedef struct time{
  12. int day;
  13. int hour;
  14. int minute;
  15. }time;
  16. typedef struct town{
  17. char name[9];
  18. time arrive;
  19. time leave;
  20. struct town *next_town;
  21. }town;
  22. typedef struct train{
  23. char train_num[8];
  24. char start_place[9];
  25. char end_place[9];
  26. int fare;
  27. int hour;
  28. struct train *next_train;
  29. struct town *next_town;
  30. }train;
  31. train *init_train(){//初始化链表
  32. train *l;
  33. l=(train*)malloc(sizeof(train));
  34. if(l==NULL){
  35. exit(OVERFLOW);
  36. }
  37. l->next_town =NULL;
  38. l->next_train =NULL;
  39. return l;
  40. }
  41. status insert_train(train *l, char *train_num,char *start_place,char *end_place,int fare,int hour)
  42. {
  43. train *p;
  44. p=(train*)malloc(sizeof(train));
  45. strcpy(p->train_num ,train_num);
  46. strcpy(p->start_place ,start_place);
  47. strcpy(p->end_place ,end_place);
  48. p->fare =fare;
  49. p->hour =hour;
  50. p->next_town =NULL;
  51. p->next_train =l->next_train ;
  52. l->next_train =p;
  53. return OK;
  54. }
  55. status find_train_num(train *l,char *train_num)
  56. {
  57. train *p;
  58. p=l->next_train;
  59. for(;p!=NULL;p=p->next_train )
  60. {
  61. if(strcmp(train_num,p->train_num )==0)
  62. {
  63. PR("   列车号  始发站  终点站    车费        时间n");
  64. PR("%8s%8s%8s%8d元%8d小时n",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
  65. return OK;
  66. }
  67. }
  68. PR("对不起,无 %s 列车!n",train_num);
  69. return ERROR;
  70. }
  71. status find_place(train *l,char *start_place,char *end_place,char choice)
  72. {                            //choice 0:最快,1:最省钱,2:全部
  73. train *p;
  74. train *q[SIZE];
  75. train *r;
  76. int i=0,j=0;
  77. p=l->next_train;
  78. for(;p!=NULL;p=p->next_train  )
  79. {
  80. if(strcmp(start_place,p->start_place)==0&&strcmp(end_place,p->end_place)==0)
  81. {
  82. // PR("%s,%s,%s,%d,%dn",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
  83. q[i]=p;
  84. i++;
  85. }
  86. }
  87. if(i>0)
  88. {
  89. if(choice=='0')
  90. {
  91. r=q[0];
  92. for(j=1;j<i;j++)
  93. {
  94. if(q[j]->hour <r->hour )
  95. {
  96. r=q[j];
  97. }
  98. }
  99. PR("   列车号  始发站  终点站    车费        时间n");
  100. PR("%8s%8s%8s%8d元%8d小时n",r->train_num ,r->start_place ,r->end_place ,r->fare ,r->hour );
  101. return OK;
  102. }
  103. else if (choice=='1')
  104. {
  105. r=q[0];
  106. for(j=1;j<i;j++)
  107. {
  108. if(q[j]->fare < r->fare )
  109. {
  110. r=q[j];
  111. }
  112. }
  113. PR("   列车号  始发站  终点站    车费        时间n");
  114. PR("%8s%8s%8s%8d元%8d小时n",r->train_num ,r->start_place ,r->end_place ,r->fare ,r->hour );
  115. return OK;
  116. }
  117. else if (choice=='2')
  118. {
  119. for(j=0;j<i;j++)
  120. {
  121. PR("   列车号  始发站  终点站    车费        时间n");
  122. PR("%8s%8s%8s%8d元%8d小时n",q[j]->train_num ,q[j]->start_place ,q[j]->end_place ,q[j]->fare ,q[j]->hour );
  123. }
  124. }
  125. }
  126. else {//当没有一辆时.
  127. PR("无符合条件的列车!n");
  128. return ERROR;
  129. }
  130. return ERROR;
  131. }
  132. status creat_train(train *l)
  133. {
  134. int i=0;
  135. char *train_num[]={"T167","T168","1363","1364","37","38","K701","K702","T61","T62"};
  136. char *start_place[]={"北京","南昌","北京","成都","北京","武汉","北京","太原","北京","贵阳"};
  137. char *end_place[]={"南昌","北京","成都","北京","武汉","北京","太原","北京","贵阳","北京"};
  138. int fare[]={170,170,150,150,140,140,40,40,201,201};
  139. int hour[]={14,14,22,22,11,11,5,5,27,27};
  140. for(i=0;i<10;i++)
  141. {
  142. insert_train(l,train_num[i],start_place[i],end_place[i],fare[i],hour[i]);
  143. }
  144. return OK;
  145. }
  146. status print_train(train *l)
  147. {
  148. train *p=l;
  149. PR("   列车号  始发站  终点站    车费        时间n");     
  150. for(p=p->next_train ;p!=NULL;p=p->next_train )
  151. {
  152. PR("%8s%8s%8s%8d元%8d小时n",p->train_num ,p->start_place ,p->end_place ,p->fare ,p->hour );
  153. }
  154. return OK;
  155. }
  156. void main()
  157. {
  158. char ch,ch2,choice,start_place[9],end_place[9],train_num[8];
  159. int t=1,tt=1;
  160. train *tr=init_train();
  161. creat_train(tr);
  162. while(t==1)
  163. {
  164. PR("*---------------------------------------*n");
  165. PR("*--旅游交通查询系统选择菜单-------------*n");
  166. PR("*     火车信息查询---------0      *n");
  167. PR("*     城市路径查询---------1      *n");
  168. PR("*     查看所有信息---------2      *n");
  169. PR("*     退出-----------------3      *n");
  170. PR("*---------------------------------------*n");
  171. PR("请选择: ");
  172. ch = getch();
  173. PR("%cn",ch);
  174. if(ch=='0')
  175. {
  176. while(tt==1)
  177. {
  178. PR("*--火车信息查询选择菜单-----------------*n");
  179. PR("*  按车次查询--------------0      *n");
  180. PR("*  按出发地与目的地查询----1      *n");
  181. PR("*  退出--------------------2      *n");
  182. PR("*---------------------------------------*n");
  183. PR("请选择: ");
  184. ch2 = getch();
  185. PR("%cn",ch2);
  186. if(ch2=='0')
  187. {
  188. PR("请输入列车号: ");
  189. scanf("%s",train_num);
  190. find_train_num(tr,train_num);
  191. }
  192. else if(ch2=='1')
  193. {
  194. PR("请输入始发站: ");
  195. scanf("%s",start_place);
  196. PR("请输入终点站: ");
  197. scanf("%s",end_place);
  198. PR("*----------------------------*n");
  199. PR("*--按车次查询选择菜单------*n");
  200. PR("*  最快-------0        *n");
  201. PR("*  最省钱-----1        *n");
  202. PR("*  全部-------2        *n");
  203. PR("*  退出-------3        *n");
  204. PR("*----------------------------*n");
  205. PR("请选择: ");
  206. choice = getch();
  207. PR("%cn",choice);
  208. find_place(tr,start_place,end_place,choice);
  209. }
  210. else if(ch2=='2'){
  211. tt=0;
  212. }
  213. else {
  214. PR("你的输入有误n");
  215. }
  216. }//end while
  217. }//end ch=0:火车信息查询
  218. else if(ch=='1')
  219. {
  220. PR("有待完善!n");
  221. }
  222. else if(ch=='2')
  223. {
  224. print_train(tr);
  225. }
  226. else if(ch=='3')
  227. {
  228. t=0;
  229. }
  230. else {
  231. PR("你的输入有误n");
  232. }
  233. }//end while
  234. }