Создать меню для однонаправленного линейного динамического списка - 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', то выполняется соответствующий блок кода (пока не указан, что делать при выборе пункта меню).
- Аналогично для остальных пунктов меню.
- Если пользователь ввел что-то другое, то программа продолжает работу (пока не указаны действия при неправильном выборе пункта меню).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д