Вывести информацию о заявках по номеру рейса, дате или сразу обо всех заявках - C (СИ)
Формулировка задачи:
Программа должна хранить информацию о заявках в виде списка, позволять добавлять новые заявки, а также выводить информацию о заявках по номеру рейса, дате или сразу обо всех заявках.
После всех попыток разобраться получилось вот что (ситуация осложняется тем, что похожие программы в интернете есть в основном на C++, а не на C):
Подскажите где исправлять.
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> #include <locale.h> typedef struct zayv { int num; char dest[20]; int number; char name[20]; char date[10]; struct zayv *next; } request; void menu(); void add(request **ppHead); void shownum(request *ppHead); void showdate(request *ppHead); void showall(request *ppHead); int entcontrol(int a, int b); void entdate(char *array); int main() { setlocale (LC_ALL, "Russian"); request *ppHead=NULL; int k; do { menu(); printf("\n"); k = entcontrol(1, 5); switch(k) { case 1:shownum(ppHead); break; case 2:showdate(ppHead); break; case 3:showall(ppHead); break; case 4:add(*ppHead); break; } } while(k!=5); getch(); return 0; } void menu() { system("cls"); printf("\t\t\tВыберите действие:\n\n"); printf("\t\t\t1. Вывод заявок по номеру рейса.\n\ 2. Вывод заявок по дате вылета.\n\ 3. Вывод всех заявок. \n\ 4. Добавление новой заявки.\n\ 5. Выход\n"); } void add(request **ppHead) { request *pOldHead = *ppHead; request *pNewHead; pNewHead = malloc( sizeof(request)); entcontrol2(pNewHead->dest); pNewHead->number = entcontrol(0, 10000); entcontrol2(pNewHead->name); entdate(pNewHead->date); pNewHead->next = pOldHead; *ppHead = pNewHead; return (void *) ppHead; } void out( const request * list, int num ){ printf("\n\nЗаявка № %d", num); printf("\nПункт назначения > %s", list->dest); printf("\nНомер рейса > %d", list->number); printf("\nФамилия пассажира %s> ", list->name); printf("\nЖелаемая датa вылета %s> ", list->date); } void showall( const request *list ){ int n = 1; for(; list ; list = list->next ){ out( list, n ); n++; } } void shownum( const request *list){ int num, n = 1; num = entcontrol; for(; list ; list = list->next ){ if( list->number == num ) out( list, n++ ); } } void showdate( const request *list){ int n = 1; char dt[10]; entdate(dt); for(; list ; list = list->next ){ if( list->date == dt ) out( list, n++ ); } } void entdate(char *array) { int bl; int i; char str[10]; do { fgets(str, 11, stdin); bl = 1; if(!isdigit(str[0]) || !isdigit(str[1]) || !isdigit(str[3]) || !isdigit(str[4]) || !isdigit(str[6]) || !isdigit(str[7]) || !isdigit(str[8]) || !isdigit(str[9]) || !isspace(str[2]) || !isspace(str[5])) {printf("Error: wrong date! Date format \"dd mm yyyy\" .\n"); bl=0;} } while (!bl); strcpy(array, str); } int main() { char temp[10]; entdate(temp); printf("%s", temp); getch(); return 0; } int entcontrol(int a, int b) { int bl; int i,N; char str[20]; do { scanf("%s",str); bl = 1; for(i=0;i<strlen(str);i++) if(!isdigit(str[i])) { printf("Error: wrong value\n"); bl=0; break; } N = atoi(str); if(N<a || N>b) { printf("Error: wrong value\n"); bl = 0; } } while (!bl); fflush(stdin); return N; }
Решение задачи: «Вывести информацию о заявках по номеру рейса, дате или сразу обо всех заявках»
textual
Листинг программы
request *ppHead=NULL;
Объяснение кода листинга программы
В данном коде создается указатель на голову (первый элемент) списка заявок. Переменная ppHead типа указатель на указатель на запрос (request) и инициализируется значением NULL, что означает, что в начале списка нет ни одной заявки.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д