Вывести информацию о заявках по номеру рейса, дате или сразу обо всех заявках - 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, что означает, что в начале списка нет ни одной заявки.