Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая_СИ.docx
Скачиваний:
1
Добавлен:
09.11.2019
Размер:
865.09 Кб
Скачать

СОДЕРЖАНИЕ

  1. Постановка задачи…………………………………………………………………2

  2. Описание структуры данных………………………………………..………….…..2

  3. Блок схемы функций…………………………………………….……..……….…..3

  4. Текст программы………………………………………………………...……….....11

  5. Контрольный пример…………………………………………………………….....23

  6. Список используемой литературы…………………..………….……………….25

Постановка задачи:

1. Создать приложение для хранения информации.

2. В приложении должны быть реализованы следующие функции:

  1. возможности редактирования, добавления и удаления данных;

  2. Поиск всех рейсов по заданной дате вылета и печать их списка;

  3. построить таблицу числа рейсов по городу прибытия (столбцы – города);

  4. сохранение данных в файл и извлечение из файла.

Описание структуры данных:

struct Air_Schedule{

char city[20]; Город прибытия

char date[11]; Дата ближайшего вылета

char time[7]; Время вылета

unsigned int number; Номер рейса

unsigned int stopovers; Есть ли промежуточные посадки

struct Air_Schedule *Next; Указатель на следующий узел

}

С помощью typedef определены обозначения AS, PAS соответственно для узла и указателя на нeго.

struct list_AS{

PAS start_data; Указатель на первый элемент списка

unsigned int Count_AS; Количество элементов в списке

}

Опредены синонимы LAS, PLAS для типов список и указатель на список.

Блок схемы функций:

Текст программы:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#ifdef WIN32

#define FILENAME "as.bin"

#elif __BORLANDC__

#define FILENAME "as_dos.bin"

#endif

typedef struct Air_Schedule{

char city[20];

char date[11];

char time[7];

unsigned int number;

unsigned int stopovers;

struct Air_Schedule *Next;

} AS, *PAS; // Air_Schedule

typedef struct list_AS{

PAS start_data;

unsigned int Count_AS;

} LAS,*PLAS;

int Save_LAS(const char *filename,PLAS plas);

int Load_LAS(const char *filename,PLAS plas);

void PrintAS(PLAS plas,PAS pd);

void PrintFullAS(PAS pas);

void PrintS(int count);

int ChangeAS(PLAS plas,int ID);

int AddAS(PLAS plas);

int DeleteAS(PLAS plas,int ID);

PAS Find_id_AS(PLAS plas,int ID);

PAS FindAS(PLAS plas, char *date, PAS start);

PAS CreateAS();

PLAS CreateLAS();

int ClearLAS(PLAS plas);

int DeleteLAS(PLAS plas);

int isEmpty(PLAS plas);

int main()

{

char s[]="\n1. Load\n2. Save\n3. Print\n4. Search\n5. Add\n6. Delete\n7. Change\n8. Clear\n9. PrintAllInfo\n\nELSE ID -> EXIT\n";

int ID,id_as;

int out = 1;

PAS pas;

char date[11];

char yn;

PLAS plist_as;

plist_as = CreateLAS();

while(out)

{

system("pause");

system("cls");

printf("%s%s",s,"\nInput ID to Function: ");

scanf("%d",&ID);

switch(ID)

{

case 1:

if(Load_LAS(FILENAME,plist_as))

printf("Air Schedule is Loaded\n");

else

printf("Air Schedule is Not Loaded! Error!\n");

break;

case 2:

if(Save_LAS(FILENAME,plist_as))

printf("Air Schedule is Saved\n");

else

printf("Air Schedule is Not Saved! Error!\n");

break;

case 3:

PrintAS(plist_as,NULL);

break;

case 4:

if(isEmpty(plist_as))

{

printf("Air Schedule is Empty\n");

break;

}

printf("Input date to search(DD.MM.YYYY): ");

scanf("%s",&date);

pas = NULL;

pas = FindAS(plist_as,date, NULL);

while(pas)

{

PrintAS(plist_as, pas);

pas = FindAS(plist_as,date, pas->Next);

}

break;

case 5:

AddAS(plist_as);

break;

case 6:

if(isEmpty(plist_as))

{

printf("Air Schedule is Empty\n");

break;

}

PrintAS(plist_as,NULL);

printf("%s","Input ID to Delete: ");

scanf("%d",&ID);

if(DeleteAS(plist_as,ID))

printf("Deleting Complited!\n");

else

printf("Deleting is not Complited!!! Error!!!\n");

break;

case 7:

if(isEmpty(plist_as))

{

printf("Air Schedule is Empty\n");

break;

}

PrintAS(plist_as,NULL);

printf("%s","Input ID to Change: ");

scanf("%d",&ID);

if(ChangeAS(plist_as,ID))

printf("Air Schedule is Changed!!!\n");

else

printf("Air Schedule is not Changed!!! Error!!!\n");

break;

case 8:

ClearLAS(plist_as);

break;

case 9:

if(isEmpty(plist_as))

{

printf("Air Schedule is Empty\n");

break;

}

PrintAS(plist_as,NULL);

printf("%s","Input ID to Show Full Data: ");

scanf("%d",&ID);

pas = Find_id_AS(plist_as,ID);

PrintFullAS(pas);

break;

default:

out = 0;

break;

}

}

DeleteLAS(plist_as);

system("pause");

return 0;

}

PLAS CreateLAS()

{

PLAS plas;

PAS pas;

plas = (PLAS) malloc(sizeof(LAS) );

pas = CreateAS();

plas->Count_AS = 0;

plas->start_data = pas;

return plas;

}

PAS CreateAS()

{

PAS pas;

pas = (PAS)malloc(sizeof(AS));

pas->number = pas->stopovers = 0;

pas->date[0] = pas->city[0] = pas->time[0] = 0;

pas->Next = NULL;

return pas;

}

int ClearLAS(PLAS plas)

{

PAS pNext,pas;

pas = plas->start_data;

if(!pas->Next)

return 0;

while(pas)

{

pNext = pas->Next;

free(pas);

pas = pNext;

}

plas->start_data = CreateAS();

plas->Count_AS = 0;

return 1;

}

int DeleteLAS(PLAS plas)

{

if(!plas)

return 0;

ClearLAS(plas);

free(plas->start_data);

free(plas);

return 1;

}

int isEmpty(PLAS plas)

{

if((!plas) || (!plas->start_data) || (!plas->Count_AS))

return 1;

else return 0;

}

int AddAS(PLAS plas)

{

PAS pas;

if(!plas)

return 0;

plas->Count_AS++;

pas = CreateAS();

pas->Next = plas->start_data;

plas->start_data = pas;

printf("Input city: ");

scanf("%s",pas->city);

printf("Input new date (DD.MM.YYYY): ");

scanf("%s",pas->date);

printf("\nAre there any stopovers?\n0 is No\n1 is Yes\nInput ID: ");

scanf("%u",&pas->stopovers);

printf("Input time of departure (XX:XX): ");

scanf("%s",&pas->time);

printf("Input flight number: ");

scanf("%u",&pas->number);

return 1;

}

void PrintAS(PLAS plas,PAS as)

{

PAS pas;

int len, i;

if(isEmpty(plas))

{

printf("Database is empty!\n");

return ;

}

pas = plas->start_data;

if(as)

{

printf("%s",as->city);

len=strlen(as->city);

PrintS(len);

printf("%s\n",as->date);

}

else

{

printf("\n");

i = plas->Count_AS;

while(pas->Next)

{

printf("%d. %s",i,pas->city);

len=strlen(pas->city);

PrintS(len);

printf("%s\n",pas->date);

pas = pas->Next;

i--;

}

}

}

Void PrintFullAs(pas pas)

{

if(!pas)

{

printf("Database is empty!");

return ;

}

printf("\ncity %s\n", pas->city);

printf("date %s\n", pas->date);

printf("time %s\n", pas->time);

if(pas->stopovers)

printf("stopovers is yes");

else

printf("stopovers is no");

printf("\nflight number %d\n",pas->number);

}

Int ChangeAs(plas plas,int id)

{

char pole[]="\n\n1. city\n2. date\n3. time\n4. stopovers\n5. number\nELSE ID -> CONTINUE\n";

unsigned int id,out=1;

PAS pas;

pas = Find_id_AS(plas,ID);

while(out)

{

PrintFullAS(pas);

printf("%s%s",pole,"Input id: ");

scanf("%u",&id);

switch(id)

{

case 1:

printf("Input new city: ");

scanf("%s",pas->city);

break;

case 2:

printf("Input new date (XX.XX.XXXX): ");

scanf("%s",pas->date);

break;

case 3:

printf("Input new time (XX:XX): ");

scanf("%s",&pas->time);

break;

case 4:

printf("\nAre there any stopovers?\n0 is No\n1 is Yes\nInput new ID: ");

scanf("%u",&pas->stopovers);

break;

case 5:

printf("Input new flight number: ");

scanf("%u",&pas->number);

break;

default:

out=0;

break;

}

}

return 1;

}

PAS FindAS(PLAS plas, char *date, PAS start)

{

PAS pas;

if(isEmpty(plas))

return NULL;

if(start)

{

pas = start;

while(pas)

{

if(!strcmp(pas->date,date))

return pas;

pas = pas->Next;

}

}

else

{

pas = plas->start_data;

while(pas)

{

if(!strcmp(pas->date,date))

return pas;

pas = pas->Next;

}

}

return NULL;

}

PAS Find_id_AS(PLAS plas,int ID)

{

PAS pas;

int id = plas->Count_AS;

if((ID>id)||(isEmpty(plas)))

return NULL;

pas = plas->start_data;

while(id!=ID)

{

id--;

pas=pas->Next;

}

return pas;

}

Int DeleteAs(plas plas,int id)

{

PAS p,pNext,pas;

if((ID>plas->Count_AS)||(isEmpty(plas)))

{

printf("Error\n");

return 0;

}

pas = Find_id_AS(plas,ID);

if(pas == plas->start_data)

{

plas->start_data = pas->Next;

free(pas);

}

else

{

pNext = plas->start_data;

while(pas)

{

if(pas==pNext)

{

p->Next = pas->Next;

free(pas);

break;

}

else

{

p = pNext;

pNext = pNext->Next;

}

}

}

plas->Count_AS--;

return 1;

}

Void PrintS(int count)

{

#define MAX_LEX 25

int i;

int sp;

sp = MAX_LEX-count;

for(i = 0;i<sp;i++)

printf(" ");

}

Int Save_las(const char *filename,plas plas)

{

FILE* pfile;

PAS pas;

if(!plas->Count_AS)

{

printf("No data to save in the file!");

return 0;

}

pfile = fopen(filename,"wb");

pas = plas->start_data;

fwrite(&plas->Count_AS,sizeof(int),1,pfile);

while(pas->Next)

{

fwrite(pas,sizeof(AS),1,pfile);

pas = pas->Next;

}

fclose(pfile);

return 1;

}

Int Load_las(const char *filename,plas plas)

{

FILE* pfile;

int count, i;

PAS pas;

pfile = fopen(filename,"rb");

if(!pfile)

{

printf("Not find file! Error!");

return 0;

}

fread(&count,sizeof(int),1,pfile);

if(!count)

{

printf("No data to load in the file!");

fclose(pfile);

return 0;

}

ClearLAS(plas);

plas->Count_AS = count;

pas = plas->start_data ;

i = 0;

while(i < plas->Count_AS)

{

fread(pas, sizeof(AS), 1, pfile);

pas->Next = NULL;

pas->Next = CreateAS();

pas = pas->Next;

i++;

}

fclose(pfile);

return 1;

}

Контрольный пример:

Список используемой литературы:

  1. Язык программирования C. Брайан Керниган, Деннис Ритчи

  2. Язык С. Самюел П. Харбисон, Гай Л. Стил

  3. Язык Си и особенности работы с ним. Н. И. Костюкова, Н. А. Калинина

25