Posted By

ozkriff on 05/18/09


Tagged


Versions (?)

bus


 / Published in: C
 

  1. /* ------------------------------------------------------------------------- +
  2.  ! !
  3.  ! Составить программу, которая содержит динамическую информацию о наличии !
  4.  ! автобусов в автобусном парке. !
  5.  ! !
  6.  ! Сведения о каждом автобусе включают: !
  7.  ! - номер автобуса; !
  8.  ! - ФИО водителя; !
  9.  ! - номер маршрута; !
  10.  ! - признак того, где находится автобус - на маршруте или в парке. !
  11.  ! !
  12.  ! Программа должна обеспечивать: !
  13.  ! - начальное формирование данных обо всех автобусах в виде списка: !
  14.  ! - при выезде каждого автобуса из парка вводится номер автобуса, !
  15.  ! и программа устанавливает значение признака "автобус в парке"; !
  16.  ! - при въезде каждого автобуса из парка вводится номер автобуса, !
  17.  ! и программа устанавливает значение признака "автобус на маршруте"; !
  18.  ! - по запросу выдаютс сведения об автобусах, находящихся в парке, !
  19.  ! или об автобусах, находящихся на маршрутах. !
  20.  ! !
  21.  + ------------------------------------------------------------------------- */
  22.  
  23. #include <stdio.h>
  24. #include <stdlib.h>
  25. #include <string.h>
  26.  
  27. #define L_NAME 64
  28. #define IN 0
  29. #define OUT 1
  30.  
  31.  
  32. /* ---------------------------- STRUCT NODE ------------------------------ */
  33.  
  34. struct node {
  35. int number, /* (0 <-> 13) */
  36. route, /* (0 <-> 3]) */
  37. is_in_park; /* (IN, OUT) */
  38. char driver[ L_NAME ],
  39. conductor[ L_NAME ];
  40. struct node*
  41. next;
  42. };
  43.  
  44.  
  45. /* ------------------------------ LIST ADD ------------------------------- */
  46.  
  47. struct node* list_add(
  48. struct node **p,
  49. const int number,
  50. const int route,
  51. const char* driver ){
  52.  
  53. struct node *n = malloc( sizeof(struct node) );
  54. if (n == NULL) {
  55. puts( "Can't add new item. Something with memory." );
  56. return NULL;
  57. }
  58.  
  59. n->next = *p; /* The previous elm (*p) becomes the "next" element. */
  60. *p = n; /* Add new empty element to the head of the list. */
  61.  
  62. n->number = number;
  63. n->route = route;
  64. n->is_in_park = 0;
  65. strcpy( n->driver, driver );
  66.  
  67. return *p;
  68. }
  69.  
  70.  
  71. /* ---------------------------- LIST REMOVE ------------------------------ */
  72. /* Remove head. */
  73.  
  74. void list_remove(struct node **p) {
  75. if (*p != NULL) {
  76. struct node *n = *p;
  77. *p = (*p)->next;
  78. free(n);
  79. }
  80. }
  81.  
  82.  
  83. /* ------------------------- LIST SEARCH NUMBER -------------------------- */
  84.  
  85. struct node** list_search_number(struct node **n, const int number) {
  86. while (*n != NULL) {
  87. if ( (*n)->number == number )
  88. return n;
  89. n = &(*n)->next;
  90. }
  91. return NULL;
  92. }
  93.  
  94.  
  95. /* ----------------------------- LIST PRINT ------------------------------ */
  96.  
  97. void list_print(struct node *n, const int inout) {
  98. puts("");
  99. if (n == NULL)
  100. printf("List is empty.\n");
  101. while (n != NULL) {
  102. if ( inout == IN && n->is_in_park == OUT );
  103. else if ( inout == OUT && n->is_in_park == IN );
  104. else
  105. printf( "> n: %i, \tr: %i, \tdr: %s, \ti/o:%i\n",
  106. n->number,
  107. n->route,
  108. n->driver,
  109. n->is_in_park );
  110. n = n->next;
  111. }
  112. }
  113.  
  114.  
  115. /* ------------------------- LIST CHANGE INOUT --------------------------- */
  116.  
  117. void list_inout(struct node *n, const int inout) {
  118. int number;
  119. struct node *p = n;
  120.  
  121. printf("enter number: "); scanf("%i", &number);
  122. if ( list_search_number(&n, number) == NULL )
  123. puts("No such bus.");
  124. return;
  125.  
  126. p = *(list_search_number(&n, number));
  127. p->is_in_park = inout;
  128. }
  129.  
  130.  
  131. /* -------------------------------- MENU --------------------------------- */
  132.  
  133. void help() {
  134. puts( " +------------------------+" );
  135. puts( " ! pa: print list !" );
  136. puts( " ! co: bus getting out >> !" );
  137. puts( " ! ci: bus getting in << !" );
  138. puts( " ! li: list_inside << !" );
  139. puts( " ! lo: list_outside >> !" );
  140. puts( " ! q : quit !" );
  141. puts( " +------------------------+" );
  142. }
  143.  
  144.  
  145. /* -------------------------------- MAIN --------------------------------- */
  146.  
  147. int main(void) {
  148. char buffer[ L_NAME ];
  149. struct node *n = NULL;
  150. int number;
  151. int error = 999; /* forsomefirecase. (c)promt*/
  152.  
  153. list_add( &n, 1, 1, "V. Pupkin" );
  154. list_add( &n, 2, 3, "G. Zopin" );
  155. list_add( &n, 3, 3, "Mad Max" );
  156. list_add( &n, 4, 2, "<BB>" );
  157.  
  158. puts( "Print 'h' for help." );
  159.  
  160. /* Main Loop. */
  161. /* while (1) { */
  162. while (error--) { /* forsomefirecase. (c)promt*/
  163. printf( "$ " );
  164. scanf( "%s", &buffer );
  165.  
  166. if ( !strcmp(buffer, "pa" ) ) list_print( n, 2 );
  167. else if ( !strcmp(buffer, "co" ) ) list_print( n, OUT );
  168. else if ( !strcmp(buffer, "ci" ) ) list_print( n, IN );
  169. else if ( !strcmp(buffer, "li" ) ) list_inout( n, IN );
  170. else if ( !strcmp(buffer, "lo" ) ) list_inout( n, OUT );
  171. else if ( !strcmp(buffer, "q" ) ) exit (0);
  172. else if ( !strcmp(buffer, "h" ) ) help();
  173. else
  174. puts( "No such command. See 'h'." );
  175. }
  176.  
  177. return 0;
  178. }

Report this snippet  

You need to login to post a comment.