Создать меню для однонаправленного линейного динамического списка - C (СИ)
Формулировка задачи:
Всем привет. Написал программу для однонаправленного линейного динамического списка. Она читает данные из файла. Но нужно сделать меню для редактирования, поиска, удаления, а также возможность чтения из файла и сохранение в файл. Помогите пожалуйста очень буду вам благодарен. Хранятся следующие данные: Номер рейса; Город прибытия; Дата ближайшего вылета; Время вылета;
// kursovai.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string>
using namespace std;
typedef struct date
{
int d,m,g;
} DATA;
typedef struct Info
{
char gorod[30];
char nom[10];
DATA dat;
char vrem[6];
} INFO;
int CmpDate(DATA d1,DATA d2){
if (d1.d==d2.d&&d1.m==d2.m&&d1.g==d2.g) return 1;
return 0;
}
INFO scan(FILE *f){
INFO x;
fscanf(f,"%s%s%d%d%d%s",x.nom,x.gorod,&x.dat.d,&x.dat.m,&x.dat.g,x.vrem);
return x;
}
typedef struct Node
{
INFO value;
struct Node*next;
} NODE,*pNODE;
typedef struct List
{
pNODE begin;
int len;
} LIST, *pLIST;
pLIST createLIST(void)
{
pLIST pL;
pL=(pLIST) malloc (sizeof (LIST));
pL->begin=NULL;
pL->len=0;
return pL;
}
int isEmpty(pLIST pL)
{
if (pL->begin) return 0;
return 1;
}
pNODE getPointer(pLIST pL, INFO date){
pNODE p=pL->begin;
if (isEmpty(pL)) return NULL;
if(CmpDate(date.dat,p->value.dat)) return p;
while (p->next&&!CmpDate(date.dat,p->next->value.dat))
p=p->next;
return p;
}
pNODE get(pLIST pL, INFO date){
pNODE p=pL->begin;
if (isEmpty(pL)) return NULL;
if(!strcmp(date.gorod,p->value.gorod)) return p;
while (p->next&&strcmp(date.gorod,p->value.gorod))
p=p->next;
return p;
}
int add(pLIST pL,INFO date){
pNODE q=pL->begin;
pNODE p=(pNODE) malloc (sizeof (NODE));
if(!p) return 0;
p->value=date;
p->next=pL->begin;
pL->begin=p;
return 1;
}
int delNODE (pLIST pL, INFO date){
pNODE pN,p=pL->begin;
if (isEmpty (pL)){
cout<<"LIST CLEAR\n";
return 0;
}
if (!strcmp(date.nom,p->value.nom)){
pN=pL->begin;
pL->begin=pN->next;
free (pN);
return 1;
}
pN=get(pL, date);
if (!(pN->next)||strcmp(pN->next->value.nom,date.nom)){
cout<<"Node not Find\n";
return 0;
}
p=pN->next;
pN->next=p->next;
free (p);
return 1;
}
void print(pLIST pL)
{
pNODE p=pL->begin;
if (isEmpty(pL)) cout<<"LIST CLEAR\n";
while (p)
{
cout<<p->value.nom<<" "<<p->value.gorod<<" "<<p->value.dat.d<<"/"<<p->value.dat.m<<"/"<<p->value.dat.g<<" "<<p->value.vrem<<"\n";
p=p->next;
}
}
void clearLIST(pLIST pL)
{
while (pL->begin)
{
delNODE(pL,pL->begin->value);
}
free(pL);
}
int _tmain(int argc, _TCHAR* argv[])
{ pNODE pN;
pLIST pL=createLIST();
int i;
INFO x;
FILE *f;
if (!(f=fopen("e:\\kurs.txt","r"))) cout<<"ERROR OPEN FILE !!!!";
for(i=0;i<5;i++){
x=scan(f);
add(pL,x);
}
print(pL);
_getch();
clearLIST(pL);
fclose(f);
return 0;
}Решение задачи: «Создать меню для однонаправленного линейного динамического списка»
textual
Листинг программы
printf("1. Первый пункт меню");
printf("2. Второй пункт меню");
...
int key = getch();
switch(key)
{
case '1':
{
} break;
case '2':
{
} break;
...
}
Объяснение кода листинга программы
- В начале кода выводятся пункты меню с помощью функции printf().
- Далее вводится переменная key с помощью функции getch(), которая будет использоваться для проверки выбора пользователя.
- Затем происходит проверка значения переменной key с помощью оператора switch.
- Для каждого пункта меню (в данном случае от 1 до N) происходит проверка, соответствует ли введенная пользователем клавиша этому пункту меню.
- Если пользователь ввел '1', то выполняется соответствующий блок кода (пока не указан, что делать при выборе пункта меню).
- Аналогично для остальных пунктов меню.
- Если пользователь ввел что-то другое, то программа продолжает работу (пока не указаны действия при неправильном выборе пункта меню).