Суть проблемы- Нужно объяснить преподавателю программу языком, максимально приближенным к его пониманию С++
Особое внимание меня просили уделить к ссылкам на указатели, редактированию "БД" и потом уж всему остальному.
Драть вопросами будут жестоко, так что прошу отнестись с пониманием.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L_NAME 64
#define IN 0
#define OUT 1
/* ---------------------------- STRUCT NODE ------------------------------ */
struct node {
int number, /* (0 <-> 13) */
route, /* (0 <-> 3]) */
is_in_park; /* (IN, OUT) */
char driver[ L_NAME ],
conductor[ L_NAME ];
struct node*
next;
};
/* ------------------------------ LIST ADD ------------------------------- */
struct node* list_add(
struct node **p,
const int number,
const int route,
const char* driver )
{
struct node *n = (struct node *)malloc( sizeof(struct node) );
if (n == NULL)
{
puts( "Can't add new item. Something with memory." );
return NULL;
}
n->next = *p; /* The previous elm (*p) becomes the "next" element. */
*p = n; /* Add new empty element to the head of the list. */
n->number = number;
n->route = route;
n->is_in_park = 0;
strcpy( n->driver, driver );
return *p;
}
/* ---------------------------- LIST REMOVE ------------------------------ */
/* Remove head. */
void list_remove(struct node **p) {
if (*p != NULL) {
struct node *n = *p;
*p = (*p)->next;
free(n);
}
}
/* ------------------------- LIST SEARCH NUMBER -------------------------- */
struct node* list_search_number(struct node *n, const int number) {
while (n != NULL) {
if ( n->number == number )
return n;
n = n->next;
}
return NULL;
}
/* ----------------------------- LIST PRINT ------------------------------ */
void list_print(struct node *n, const int inout) {
puts("");
if (n == NULL)
printf("List is empty.\n");
while (n != NULL) {
if ( inout == IN && n->is_in_park == OUT );
else if ( inout == OUT && n->is_in_park == IN );
else
printf( "> n: %i, \tr: %i, \tdr: %s, \ti/o:%i\n",
n->number,
n->route,
n->driver,
n->is_in_park );
n = n->next;
}
}
/* ------------------------- LIST CHANGE INOUT --------------------------- */
void list_inout(struct node *n, const int inout) {
int number;
struct node *p = n;
printf("enter number: "); scanf("%i", &number);
if ( list_search_number(n, number) == NULL )
puts("No such bus.");
//return;
p = list_search_number(n, number);
p->is_in_park = inout;
}
/* -------------------------------- MENU --------------------------------- */
void help() {
puts("1 : Show list the Bus in the park");
puts("2 : Show list the Bus in route");
puts("4 : To send the Bus on the path");
puts("5 : To send the Bus in park");
puts("6 : Exit");
}
/* -------------------------------- MAIN --------------------------------- */
int main(void) {
char buffer[ L_NAME ];
struct node *n = NULL;
int number;
int error = 999; /* forsomefirecase. (c)promt*/
puts("__________________");
list_add( &n, 1, 1, "V. Pupkin" );
list_add( &n, 2, 3, "G. Zopin" );
list_add( &n, 3, 3, "Mad Max" );
list_add( &n, 4, 2, "<BB>" );
puts( "Print 'h' for help." );
/* Main Loop. */
/* while (1) { */
while (error--) { /* forsomefirecase. (c)promt*/
scanf( "%s", &buffer );
if ( !strcmp(buffer, "1" ) ) list_print( n, 2 );
else if ( !strcmp(buffer, "2" ) ) list_print( n, OUT );
else if ( !strcmp(buffer, "3" ) ) list_print( n, IN );
else if ( !strcmp(buffer, "4" ) ) list_inout( n, IN );
else if ( !strcmp(buffer, "5" ) ) list_inout( n, OUT );
else if ( !strcmp(buffer, "6" ) ) exit (0);
else if ( !strcmp(buffer, "h" ) ) help();
else
puts( "No such command. See 'h'." );
}
return 0;
}