5. Структура программы.
Данная программа состоит из следующих блоков:
А) Подпрограмма main, где осуществляется ввод имен файлов с клавиатуры, вызов подпрограмм ввода, сортировки и вывода информации, ввод новых магазинов и продуктов к ним, а также вывод сопутствующих сообщений для пользователя.
B) Подпрограмма input(имя входного файла, имя выходного файла), где осуществляется проверка на наличие файла данных, есть ли в нем данные. При наличии данных информация записывается в список.
С) Подпрограмма sort(список magaz), где осуществляется сортировка данных методом пузырька по городу, улице, номеру дома.
D) Подпрограмма output(ссылка на последний элемент списка ,имя выходного файла), где вывод информации в файл, вывод итоговых данных на экран, а также вывод сопутствующих сообщений для пользователя
6. Описание алгоритма программы.
Функция чтения данных из файла.
Формальные параметры: имя входного файла – namevh, имя выходного файла – namevih
Переменные типа файл *f,*f1;
Целые temp
Переменные структуры Магазин *magaz,*last=NULL; // magazini, nachalo steka
Переменные структура Продукты *prd,*lastprd; // producti, nachalo steak
Открыть файл f
Создать файл f1
Если входной файл не найден то
Вывод «Входной файл не найден»
Возврат last
Все
Если входной файл не пуст то
Вывод «Исх.данные:»
Цикл пока не конец файла
Выделение памяти магазин
Считать номер магазина, город, улица, номер дома
temp=1;
lastprd=NULL;
Цикл пока temp=1
Выделение памяти продукты
Считать Наименование продукта, цена, срок хранения
Если считанная строка = разделитель то
temp=0;
Иначе
prd->next=lastprd;
lastprd=prd;
Всё
Конец цикла
magaz->prod=lastprd;
magaz->next=last;
last=magaz;
Конец цикла
Иначе
Вывод «Файл пуст»
Всё
Закрыть файл f;
Закрыть файл f1;
Возврат last
Функция сортировки данных.
Формальные параметры: ссылка на список – magaz
Переменные структуры магазин *last=NULL,*next; // nachalo steka, sled. element
Переменные структуры продукты *prd; // vrem. producti
Переменные структуры адрес addr; // vrem. address
Целые tempn; // vrem. nomer magazina
Целые check=1; // proverka na izmenenie
last=magaz;
Цикл пока check=1
check=0;
Цикл пока (magaz!=NULL и magaz->next!=NULL)
next=magaz->next;
/*sortirovka pusirkom*/
Если города не совпадают то // proverka po gorodu
check=1;
prd=magaz->prod;
addr= magaz->adr;
tempn= magaz->nomer;
magaz->nomer = next->nomer;
magaz->adr = next->adr ;
magaz->prod= next->prod;
next->nomer = tempn;
next->adr = addr;
next->prod= prd;
Всё
Если города совпадают и улицы не совпадают то
check=1;
prd=magaz->prod;
addr= magaz->adr;
tempn= magaz->nomer;
magaz->nomer = next->nomer;
magaz->adr = next->adr ;
magaz->prod= next->prod;
next->nomer = tempn;
next->adr = addr;
next->prod= prd;
Всё
Если города совпадают и улицы совпадают и номера домов не совпадаютто
prd=magaz->prod;
addr= magaz->adr;
tempn= magaz->nomer;
magaz->nomer = next->nomer;
magaz->adr = next->adr ;
magaz->prod= next->prod;
next->nomer = tempn;
next->adr = addr;
next->prod= prd;
Всё
magaz=magaz->next;
Конец цикла
/*sortirovka pusirkom*/
magaz=last;
Конец цикла
Вывод «Отсортированные данные»
Цикл пока (magaz!=NULL)
Вывод «-»
Вывод номер магазина, город, улица, номер дома
magaz=magaz->next;
Конец цикла
Возврат last;
Функция вывода данных в файл.
Формальные параметры: ссылка на список – last, имя выходного файла – namevih
Переменные файла *f;
Переменные структуры магазин *magaz;
Переменные структуры продукты *prd,*tp;
Если выходной файл не найден то
Вывод «Выходной файл не найден»
Возврат 0
Все
Вывод «Итог:»
Цикл пока(last!=NULL)
Записать в файл номер магазина, город, улица, номер дома
prd=last->prod;
Цикл пока (prd!=NULL)
Записать в файл наименование продукта, цена, срок хранения
tp=prd;
prd=prd->next;
Освобождение памяти продукты tp
Конец цикла
magaz=last;
last=last->next;
Освобождение памяти магазин magaz
Запись в файл «* 0 0»
Конец цикла
Вывод «Информация записана»
Закрыть файл f;
Возврат 0;
Основная программа:
Начало
Переменные структуры магазин *magaz,*temp,*last,*prev; // magazini, dobavlenie, nachalo steka, dlya dobaleniya (predidushi element)
Переменные структуры продукты *prd,*lastprd; // producti, nachalo steka
Строковые переменные namevh[20];
Строковые переменные namevih[20];
Вывод «Введите имя файла с данными»
Ввод namevh
Вывод «Введите имя файла для данных»
Ввод namevh
magaz= Функция чтения данных из файла (namevh,namevih);
Если (magaz!=NULL) то
magaz= Функция сортировки данных (magaz); // sortirovka dannih
char ch=NULL; // soglasie na prodolzhenie vvoda, proverka dobavili ili net zapis'
last=magaz;
Вывод «Вводим новый магазин (Д)?»
Цикл пока (ch=='\0' или ch=='\n')
ch=getchar();
Конец цикла
Цикл пока (ch=='d' или ch=='D')
Выделение памяти магазин temp
Вывод «Ввод магазина»
Вывод «Введите адрес:»
Вывод «Номер магазина:»
Ввод temp->nomer
Вывод «Город:»
Ввод temp-> adr.gorod
Вывод «Улица:»
Ввод temp-> adr.ulica
Вывод «Номер дома:»
Ввод temp-> adr.nomd
ch=NULL;
Вывод «Вводим продукты (ДА)?»
Цикл пока (ch=='\0' или ch=='\n')
ch=getchar();
Конец цикла
Цикл пока (ch=='d' или ch=='D')
Выделение памяти продукты prd
Вывод «Наименование:»
Ввод prd->name
Вывод «Цена:»
Ввод prd->price
Вывод «Срок хранения:»
Ввод prd->srok
lastprd=prd;
Вывод «Продолжить вводить продукты (ДА)?»
ch=NULL;
Цикл пока (ch=='\0' или ch=='\n')
ch=getchar();
Конец цикла
Конец цикла
temp->prod=lastprd;
/*Vvod Novogo magazina*/
//--------------------------------
prev=NULL;
ch='8';
Цикл пока (magaz!=NULL и ch!=NULL)
Если города и улицы совпадают то
Если (prev!=NULL) то
prev->next = temp;
Всё
temp->next=magaz;
ch=NULL;
Всё
prev=magaz;
magaz=magaz->next;
Конец цикла
Если (ch!=NULL) то
prev->next=temp;
temp->next=NULL;
Всё
magaz=last;
Вывод «Продолжить вводить магазины? (ДА)»
ch=NULL;
Цикл пока (ch=='\0' или ch=='\n')
ch=getchar();
Конец цикла
Конец цикла
Функция вывода данных в файл (magaz,namevih); // vivod dannih v fail
Всё
Конец алгоритма
