Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1,2,3,6 ,курсач (Жека) / курсавая.docx
Скачиваний:
25
Добавлен:
09.02.2015
Размер:
210.25 Кб
Скачать

Описание функции «Del»

Назначение: функция удаляет элемент из списка.

Прототип: SP*Del(SP*), где тип возвращаемого значенияSP*- указатель на “голову” списка, первый тип параметраSP*- указатель на “голову” списка.

Пример вызова: h1=Del(h1), гдеh1 - указатель на “голову”голову списка.

Описание переменных: описание локальных переменных функцииDelприведено в таблице 10.

Таблица 10. Описание переменных функции Del

Имя переменной

Тип переменной

Назначение

d,k

int

Вспомогательные переменные

p1, p

SP *

Переменные указатели

Описание функции «Output_2»

Назначение: функция выводит информационные поля элементов, расположенных справа и слева от заданного.

Прототип: voidOutput_2(SP*), где первый тип параметраSP* - указатель на “голову” списка.

Пример вызова: Output_2 (h1), гдеh1 - указатель на “голову” списка.

Описание переменных: описание локальных переменных функцииOutput_2 приведено в таблице 11.

Таблица 11. Описание локальных переменных функции Output_2

Имя переменной

Тип переменной

Назначение

k,z

int

Вспомогательные переменные

p, p1, h2, p2

SP *

Вспомогательные переменные

Описание функции «save»

Назначение: функция сохраняет данные картотеки в файле

Прототип: int*save(SP*), где тип возвращаемого значенияint,первый тип параметраSP*- указатель на “голову” списка.

Пример вызова: check=save(h1), гдеh1 - указатель на “голову” списка.

Описание переменных: описание локальных переменных функции приведено в таблице 12.

Таблица 13. Описание переменных функции save

Имя переменной

Тип переменной

Назначение

name

char

Вспомогательные переменные

Описание функции «Load»

Назначение: функция загружает данные из файла

Прототип: SP*Load(SP*), где тип возвращаемого значенияSP,указатель ” голову” списка, первый тип параметраSP*- указатель на “голову” списка.

Пример вызова: h1=Load(h1), гдеh1 - указатель на “голову” списка.

Описание переменных: описание локальных переменных функции приведено в таблице 13.

Таблица 14. Описание переменных функции save

Имя переменной

Тип переменной

Назначение

*name

char

Указатель на первую букву имени файла

с

char

Вспомогательная переменная

Описание функции «Seach»

Назначение: функция ищет продукты по определенному сочетанию букв,году и рейтингу.

Прототип: voidSeach_1(SP*), где первый тип параметраSP*- указатель на “голову” списка.

Пример вызова: Seach_1(h1), гдеh1 - указатель на “голову” списка.

Описание переменных: описание локальных переменных функции приведено в таблице 14.

Таблица 15. Описание переменных функции Seach_1

Имя переменной

Тип переменной

Назначение

i,l

int

Вспомогательные переменные

s[15]

char

Сочетание вводимое пользователем

ch

char

Вспомогательные переменные

10. Иерархическая структура программы

Free ()

Confirming()

fname()

enter()

menu()

men()

NewSort()

main()

Load()

Add()

Del()

Sort()

Output()

Seach_1

The_end()

save()

Output_2

Seach_2()

Рис.2. Иерархическая структура программы

11.Код программы на языке С/С++

// ConsoleApplication16.cpp : Defines the entry point for the console application.

#include "stdafx.h"

#include "stdio.h"

#include <conio.h>

#include <stdlib.h>

#include <tchar.h>

#include <string.h>

#include <locale>

#include <time.h>

#include <Windows.h>

#include <iostream>

using namespace std;

typedef struct games

{

char name[12]; //Название продукта

int year; //Дата выхода

int rating;//Рейтинг

}MS;

typedef struct list

{

MS info;

struct list* pred;

struct list* next;

}SP;

void menu_seach_1(void); //Подменю поиска

void menu_sort_1(void); //Подменю сортировки

void User_GUIDE(void); //Меню “Пользователю”

void Save_And_Load(void); //Сохранить и загрузить

void menu_seach(void); //Меню поиска

void menu_confiming(void); //Меню обработки

void Notice(void); //Функция подсказки

void menu_enter(void); //Подменю ввода

void output_menu(void); //Подменю вывода

void help(void); //Помощь

void recomend(void); //Рекомендации

void menu(void); //Главное меню

void Screen(void); //Элементы интерфейса

SP* enter(SP*); //ввод данных

void Output(SP*,char*); //вывод данных

SP *confirming(SP*); //создание нового списка

SP *Sort(SP*); //Сортировка

SP *NewSort(SP*,int,int); //Подсортировка

SP *Add(SP*); //добавление элементов

SP *Del(SP*); //удаление элементов

void Output_2(SP*); //вывод справа и слева

SP *Free(SP*); //Освобождение памяти

void save(SP *); //Сохранение данных

SP *Load(); //Загрузка из файла

SP* SortALF(SP*); //Сортировка по алфавиту

SP *Add_End(SP *, SP *); //Добавление в конец

void menupoisk(SP *, SP *); //Подменю поиска

SP *Seach(SP *,int); //Функция поиска

int Modulus(int,int); //Супервозможности программы

char GetChar(int,char,int); //Реализация матрицы

int _tmain(int argc, _TCHAR* argv[])

{

setlocale(LC_CTYPE, "russian");

SP*h1=NULL,*rez=NULL; //Указатели делаем нулевыми

int pm,pm2,pm3,pm4=0,pm5,pm6,pm7,pm8,check1=0,check=0; //Вспомогательные пер.

char c=NULL,ch=NULL,Base1=NULL,Base2=NULL,matrixch=NULL,lol=1; //Вспомгат.пер

HANDLE hConsole;

hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hConsole, 2); //цвет консольки

char caRow[80];

int j = 7;

int k = 2;

int l = 5;

int m = 1;

puts("Нажмите любую кнопку,для загрузки программы");

Screen();

do

{

menu();

fflush(stdin);

puts("");

puts("");

printf("Ввод пункта меню: ");

scanf("%d",&pm);

switch(pm)

{

case 1:

do

{

system("cls");

if (lol==1)

MessageBoxA(0, "Название может содержать латинские буквы и цифры ,и иметь длину не более 15 символов.\nГод выхода имеет форма XXXX.Пример:2010.Должен быть больше 1990 и меньше 2100.\nРейтинг должен быть больше 0.\nДля продолжения нажмите ОК\n", "Дорогой пользователь", 0);

menu_enter();

lol=0;

printf("Ввод пункта меню: ");

scanf("%d",&pm6);

switch(pm6)

{

case 1:

if (check!=1)

{

system("cls");

while(h1!=NULL)

h1=Free(h1);

while(ch!='y')

{

h1=enter(h1);

system("cls");

puts("\n Закончить ввод данных? (y/n)?\n");

ch=getch();

}

do

{

fflush(stdin);

puts("\n\n\Записать в файл (да-y/нет-n)?");

scanf ("%c", &Base2);

}

while (Base2!='n' && Base2!='y'&& Base2!='Y'&& Base2!='N');

if (Base2=='Y'|| Base2=='y')

{

save(h1);

puts("\n\n\n\n\n\t\t Запись данных закончена! Нажмите любую клавишу.");

getch();

}

}

else

{

puts("Последовательный ввод невозможен,используйте добавление элементов.");

puts("");

puts("Нажмите любую клавишу");

getch();

}

check=1;

break;

case 2:

system("cls");

if (h1!=NULL)

h1=Add(h1);

else

{

puts("Т.к. элемент первый в списке я добавлю его в начало,для продолжения нажмите любую кнопку");

getch();

h1=enter(h1);

}

check=1;

break;

case 3:

system("cls");

pm6=3;

break;

default:

system("cls");

puts("Неправильно введен пункт меню");

puts("");

puts("Нажмите любую клавишу");

getch();

break;

}

}

while(pm6!=3);

break;

case 2:

do

{

system("cls");

output_menu();

printf("Ввод пункта меню: ");

scanf("%d",&pm4);

switch(pm4)

{

case 1:

if(h1!=NULL)

Output(h1," Список:");

else

Notice();

getch();

break;

case 2:

if (h1!=NULL)

Output_2(h1);

else

Notice();

getch();

break;

case 3:

pm4=3;

break;

default:

puts("Неправильно введен пункт меню");;

puts("");

puts("Нажмите любую клавишу");

getch();

break;

}

}

while(pm4!=3);

break;

case 3:

system("cls");

if(h1!=NULL)

{

while(rez!=NULL)

rez=Free(rez);

rez=confirming(h1);

if(rez!=NULL)

Output(rez," Результат обработки:");

else

puts("\n В картотеке нет элементов с заданным условием \n");

getch();

}

else

Notice();

puts("\nНажмите любую клавишу\n");

getch();

break;

case 4:

do

{

system("cls");

menu_confiming();

puts("");

printf("Ввод пункта меню: ");

scanf("%d",&pm3);

switch(pm3)

{

case 1:

if (h1!=NULL)

h1=Del(h1);

else

Notice();

getch();

break;

case 2:

if (h1!=NULL)

h1=Sort(h1);

else

Notice();

getch();

break;

case 3:

pm3=4;

break;

default:

puts("Неправильно введен пункт меню");

break;

}

}

while(pm3!=4);

break;

case 5:

do

{

system("cls");

puts("");

menu_seach_1();

printf("Ввод пункта меню:");

scanf("%d",&pm5);

switch(pm5)

{

case 1:

if(h1!=NULL)

menupoisk(h1,rez);

else

Notice();

getch();

break;

case 2:

if (h1!=NULL)

Output(rez,"список:");

else

Notice();

getch();

break;

case 3:

pm5=3;

break;

default:

puts("Неправильно введен пункт меню");

puts("");

puts("Нажмите любую клавишу");

getch();

break;

}

}

while(pm5!=3);

break;

case 6:

do

{

system("cls");

Save_And_Load();

puts("");

printf("Ввод пункта меню:");

scanf("%d",&pm8);

switch(pm8)

{

case 1:

system("cls");

save(h1);

if(h1==NULL)

Notice();

else

puts("\nОперация сохранения завершена");

puts("Нажмите любую кнопку");

getch();

break;

case 2:

system("cls");

h1=Load();

break;

case 3:

system("cls");

pm8=3;

}

}

while(pm8!=3);

break;

case 7:

do

{

system("cls");

User_GUIDE();

puts("");

printf("Ввод пункта меню: ");

scanf("%d",&pm7);

switch(pm7)

{

case 1:

recomend();

break;

case 2:

help();

puts("Нажмите любую клавишу");

getch();

break;

case 3:

pm7=3;

break;

default:

puts("Неправильно введен пункт меню");

puts("");

puts("Нажмите любую клавишу");

getch();

break;

}

}

while(pm7!=3);

break;

case 8:

system("cls");

puts("Вы готовы увидеть истинный мир?(y/n)");

matrixch=getch();

if(matrixch='y')

{

system("cls");

printf("L O G I N: ");

Sleep(500);

system("cls");

printf("L O G I N: П");

Sleep(700);

system("cls");

printf("L O G I N: П О");

Sleep(700);

system("cls");

printf("L O G I N: П О С");

Sleep(700);

system("cls");

printf("L O G I N: П О С Т");

Sleep(700);

system("cls");

printf("L O G I N: П О С Т А");

Sleep(400);

system("cls");

printf("L O G I N: П О С Т А В Ь");

Sleep(600);

system("cls");

printf("L O G I N: П О С Т А В Ь Т ");

Sleep(700);

system("cls");

printf("L O G I N: П О С Т А В Ь Т Е");

Sleep(500);

system("cls");

printf("L O G I N: П О С Т А В Ь Т Е");

puts("");

printf("\nP A S S W O R D: \n");

Sleep(900);

system("cls");

printf("L O G I N: П О С Т А В Ь Т Е");

puts("");

printf("\nP A S S W O R D: 5\n");

Sleep(1200);

getch();

puts("Проверка доступа");

Sleep(1000);

puts("");

puts("Вход в массивы данных");

Sleep(1000);

puts("");

puts("Аутетификация кода");

Sleep(1000);

puts("");

puts("Асимиляция завершена");

Sleep(1000);

system("cls");

puts("Loading… [][][][][] 0%");

system("cls");

puts("Loading… [][][][][ 10%");

system("cls");

puts("Loading… ██[][][][] 20%");

system("cls");

puts("Loading… ███[][][][ 30%");

Sleep(100);

system("cls");

puts("Loading… ████[][][] 40%");

Sleep(100);

system("cls");

puts("Loading… █████[][][ 50%");

Sleep(1000);

system("cls");

puts("Loading… ██████[][] 60%");

Sleep(100);

system("cls");

puts("Loading… ███████[][ 70%");

Sleep(10);

system("cls");

puts("Loading… ████████[] 80%");

Sleep(100);

system("cls");

puts("Loading… █████████[ 90%");

Sleep(100);

system("cls");

puts("Loading… ██████████ 100%");

Sleep(100);

while (true)

{

int i = 0;

while (i < 80)

{

if (caRow[i] != ' ')

{

caRow[i] = GetChar(j + i*i, 33, 30);

if (((i*i + k) % 71) == 0)

{

SetConsoleTextAttribute(hConsole, 7);

}

else

{

SetConsoleTextAttribute(hConsole, 2);

}

}

std::cout << caRow[i];

++i;

SetConsoleTextAttribute(hConsole, 2);

}

j = (j + 31);

k = (k + 17);

l = (l + 47);

m = (m + 67);

caRow[Modulus(j, 80)] = '-';

caRow[Modulus(k, 80)] = ' ';

caRow[Modulus(l, 80)] = '-';

caRow[Modulus(m, 80)] = ' ';

Sleep(10);

}

}

else

break;

case 0:

puts(" Выполнение программы завершено");

c='y';

break;

default:

puts(" Ошибка ввода пункта меню");

puts("");

puts("Нажмите любую клавишу");

getch();

break;

}

}

while(c!='y');

return 0;

}

void menu_seach_1(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************SEACH MENU 1*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Поиск |\n");

puts(" | 2) - Вывод найденных элементов |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void menu_sort_1(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************SORT MENU 2*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Сортировка по убыванию |\n");

puts(" | 2) - Сортировка по возрастанию |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void menu_sort(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************SORT MENU 1*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Сортировка по году |\n");

puts(" | 2) - Сортировка по рейтингу |\n");

puts(" | 3) - Сортировка по алфавиту |\n");

puts(" | 4) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void User_GUIDE(void)

{

puts("");

puts(" ------------------------------------------------------");

puts(" ******************USER GUIDE MENU********************* ");

puts(" ------------------------------------------------------");

puts("");

puts(" | 1) - Рекомендации по использованию программы |\n");

puts(" | 2) - Инструкции пользователю |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void Save_And_Load(void)

{

puts("");

puts(" ----------------------------------------------------");

puts(" ******************SAVE AND LOAD*********************");

puts(" ----------------------------------------------------");

puts("");

puts(" | 1) - Сохранить |\n");

puts(" | 2) - Загрузить |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ----------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void menu_seach(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************SEACH MENU 2*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Поиск по имени |\n");

puts(" | 2) - Поиск по году |\n");

puts(" | 3) - Поиск по рейтингу |\n");

puts(" | 4) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void menu_confiming(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************CONFIRMING MENU*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Удаление элемента из картотеки |\n");

puts(" | 2) - Сортировка |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void Notice(void)

{

puts("------------------------------------------------------------------------");

puts("\n Операция невозможна!Картотека пуста!Нажмите любую клавишу. \n");

puts("------------------------------------------------------------------------");

}

void menu_enter(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************ENTER MENU*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Последовательный ввод |\n");

puts(" | 2) - Уточнить место добавления информации |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void output_menu(void)

{

puts("");

puts(" ------------------------------------------------");

puts(" ******************ENTER MENU*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Вывод всей картотеки |\n");

puts(" | 2) - Вывод справа и слева от элемента |\n");

puts(" | 3) - Выход в надменю |\n");

puts(" ------------------------------------------------");

puts("");

puts("");

puts("");

puts("");

puts(" -------------------------NOTICE------------------------------");

puts("| Ориентация по меню осуществляется путем ввода пункта меню |");

puts(" --------------------------------------------------------------");

}

void help(void)

{ system("cls");

puts("\n1 - Ввод данных с возможность выбора варианта ввода");

puts("\n2 - Вывод картотеки с возможность выбора варианта вывода");

puts("\n3 - Формирование данных картотеки согласно условию см. пояснительную записку");

puts("\n4 - Возможные варианта обработки:сортировка,удаление");

puts("\n5 - Поиск нужных элементов через ввод искомой комбинации букв или диапозона чисел");

puts("\n6 - Сохранение данных в файле");

puts("\n7 - Выход из программы,завершение всех действий");

}

void recomend(void)

{

system("cls");

MessageBoxA(0, "\t\t\t Рекомендации пользователю :"

"\nЭта программа- подобие электронной базы данных.Программа работает,"

"\используя массивы в памяти ЭВМ для хранения информации, введенной пользователем."

"\Данные могут вводиться с клавиатуры или загружаться из файла.\n"

"\ \n"

"\Также можно вывести на экран всю картотеку или же просматривать картотеку по карточкам,"

"\с возможностью добавления или удаления некоторых карточек по выбору.\n"

"\Программа имеет хороший интерфейс и показывает устойчивую работу.\n"

"\ \n"

"\В программе имеется поиск элементов по заданным условиям, а также сортировка всех полей."

"\В программе есть главное меню и подменю для удобной работы с информацией."

"\Желательно, чтобы данные были точные, корректно записанные и касающиеся"

"\непосредственно темы данной лабораторной работы.", "Дорогой пользователь", 0);

printf("");

puts("\n\n\n\n\n\t\tДля перехода в главное меню нажмите любую клавишу...");

getch();

}

void menu(void)

{

system("cls");

puts("");

puts(" ------------------------------------------------");

puts(" ******************MAIN MENU*********************");

puts(" ------------------------------------------------");

puts("");

puts(" | 1) - Ввод данных картотеки |\n");

puts(" | 2) - Вывод данных |\n");

puts(" | 3) - Формирование новой картотеки |\n");

puts(" | 4) - Обработка |\n");

puts(" | 5) - Поиск элементов |\n");

puts(" | 6) - Cохрание или загрузка |\n");

puts(" | 7) - Пользователю |\n ");

puts(" | 8) - Измените свою судьбу,change your destiny..|\n");

puts(" | 0) - Выход из программы |\n");

puts("\n\n Ориентация по меню осуществляется путем ввода пункта меню");

}

void Screen(void)

{

system("cls");

puts("");

puts("");

puts("");

puts("");

puts("");

printf("\n ╓────────────────────────────────────────────────────────────╖");

printf("\n ║ ║");

printf("\n ║ К А Р Т О Т Е К А П Р О Г Р А М М Н Ы Х ║");

printf("\n ║ П Р О Д У К Т О В ║");

printf("\n ╙────────────────────────────────────────────────────────────╜");

puts("");

puts(" Нажмите любую клавишу для загрузки!");

getch();

system("cls");

puts("Loading… [][][][][] 0%");

system("cls");

puts("Loading… [][][][][ 10%");

system("cls");

puts("Loading… ██[][][][] 20%");

system("cls");

puts("Loading… ███[][][][ 30%");

Sleep(100);

system("cls");

puts("Loading… ████[][][] 40%");

Sleep(100);

system("cls");

puts("Loading… █████[][][ 50%");

Sleep(1000);

system("cls");

puts("Loading… ██████[][] 60%");

Sleep(100);

system("cls");

puts("Loading… ███████[][ 70%");

Sleep(10);

system("cls");

puts("Loading… ████████[] 80%");

Sleep(100);

system("cls");

puts("Loading… █████████[ 90%");

Sleep(100);

system("cls");

puts("Loading… ██████████ 100%");

Sleep(100);

}

SP *enter(SP* head)

{

SP *p=NULL;

fflush(stdin);

p=(SP*)malloc(sizeof(SP));

int rezult;

puts("");

puts(" --------------------------------------------------");

printf("\n ******************ENTERING...*********************\n");

puts(" --------------------------------------------------");

puts("");

do

{

printf("Введите название продукта: ");

gets(p->info.name);

rezult=strlen(p->info.name);

if (rezult>15)

{

MessageBoxA(0, "Название может содержать латинские буквы и цифры ,и иметь длину не более 15 символов.Для повтора ввода нажмите ОК", "Дорогой пользователь", 0);

}

}

while(rezult>15);

puts("");

do

{

printf("Введите год выхода продукта: ");

scanf("%d",&(p->info.year));

if((p->info.year<1990)||(p->info.year>2100))

{

MessageBoxA(0, "Год выхода имеет форма XXXX.Пример:2010.Должен быть больше 1990 и меньше 2100.Для повтора ввода нажмите ОК", "Дорогой пользователь", 0);

puts("");

}

}

while((p->info.year<1990)||(p->info.year>2100));

do

{

printf("Введите рейтинг продукта: ");

scanf("%d",&(p->info.rating));

if((p->info.rating<0)||(p->info.rating>23000))

{

MessageBoxA(0, "Рейтинг должен быть больше 0(И не слишком большой <23000).Для повтора ввода нажмите ОК", "Дорогой пользователь", 0);

puts("");

}

}

while((p->info.rating<0)||(p->info.rating>23000));

p->next=head;

if(head!=NULL)

head->pred=p;

head=p;

return head;

}

void Output(SP *h1,char *s)

{

int i=1;

system("cls");

puts("");

puts(" \n В С Я К А Р Т О Т Е К А\n");

printf(" ┌──────┬─────────────────┬────────────┬───────────────┬\n");

printf(" │ Номер│ Название │ Дата │ Рейтинг │\n");

printf(" │ стр. | продукта │ Выхода │ продукта │\n");

printf(" └──────┴─────────────────┴────────────┴───────────────┴\n");

printf(" ┌──────┬─────────────────┬────────────┬───────────────┬\n");

while (h1!=NULL)

{

printf("\n │ %2d │ %9s │ %7d │ %7d │\n ",i,h1->info.name,h1->info.year,h1->info.rating);

fflush(stdin);

h1=h1->next;

i++;

}

printf("\n └──────┴─────────────────┴────────────┴───────────────┴\n");

puts("\n Вывод закончен, нажмите любую клавишу.\n");

getch();

}

SP* confirming(SP *h1)

{

int d;

SP*h2=NULL, *p=NULL;

puts("\nВведите рейтинг продукта");

scanf("%d",&d);

h2=h1;

scanf("%d", &d);

h2=h1;

while(h2!=NULL)

{

if((h2->info.rating)<d)

{

p=h2->next;

if(h2->next!=NULL || h2->pred!=NULL)

{

if(h2->next!=NULL)

{

if(h2->pred!=NULL)

{

h2->next->pred=h2->pred;

h2->pred->next=h2->next;

}

else

{

h2->next->pred=NULL;

h1=h2->next;

}

}

else

h2->pred->next=NULL;

free(h2);

h2=p;

}

else

{

free(h1);

h2=h1=NULL;

}

}

else

h2=h2->next;

}

puts("Обработка завершена\n");

return h1;

}

SP *Sort(SP*h1)

{

int pm_2,pm_3,pm_4;

int z=0;

do

{

fflush(stdin);

system("cls");

menu_sort();

printf("Ввод пункта меню: ");

scanf("%d",&pm_2);

switch(pm_2)

{

case 1:

do

{

system("cls");

menu_sort_1();

printf("Введите пункт меню: ");

scanf("%d",&pm_3);

switch(pm_3)

{

case 1:

h1=NewSort(h1,1,1);

break;

case 2:

h1=NewSort(h1,1,2);

break;

case 3:

pm_3=3;

break;

default:

puts("\nВы ошиблись с выбором пункта меню,введите еще раз!Нажмите любую кнопку");

getch();

break;

}

}

while(pm_3!=3);

break;

case 2:

do

{

system("cls");

menu_sort_1();

printf("Введите пункт меню: ");

scanf("%d",&pm_4);

switch(pm_4)

{

case 1:

h1=NewSort(h1,2,1);

break;

case 2:

h1=NewSort(h1,2,2);

break;

case 3:

pm_4=3;

break;

default:

puts("\nВы ошиблись с выбором пункта меню,введите еще раз!.Нажмите любую кнопку");

getch();

break;

}

}

while(pm_4!=3);

break;

case 3:

h1=SortALF(h1);

puts("Сортировка завершена.Нажмите любую клавишу");

getch();

break;

case 4:

z=1;

break;

default:

puts("Неправильно введен пункт меню.Нажмите любую клавишу для повтора");

break;

}

}

while(z==0);

return(h1);

}

SP* NewSort(SP*h1,int place,int s)

{

SP *p=NULL,*p1=NULL,*p2=NULL,*p3=NULL;

int z=0;

p=h1;

if(p->next!=NULL)

{

while(p!=NULL)

{

p1=p->next;

p2=p1;

if(p1!=NULL)

p3=p1->next;

while(p1!=NULL)

{

if((((p1->info.year>p->info.year && s==1) || (p1->info.year<p->info.year && s==2))&&place==1) || (((p1->info.rating>p->info.rating && s==1) || ((p1->info.rating<p->info.rating && s==2)))&&place==2) || ((((strcmp(p1->info.name, p->info.name)>0) && s==1) || ((strcmp(p1->info.name, p->info.name)<0)&&s==2)) && place==3))

{

if(p->next!=p)

{

p1->pred->next=p;

p->next->pred=p1;

p1->next=p->next;

}

else

p1->next=p;

if(p->pred!=NULL)

p->pred->next=p;

p1->pred=p->pred;

p->pred=p2;

p->next=p2;

if(p3!=NULL)

p3->pred=p;

p=p1;

}

p=p3;

if(p1!=NULL)

{

p2=p1->pred;

p3=p1->next;

}

}

if(p->pred==NULL)

h1=p;

p=p->next;

}

}

else

puts("В списке всего один элемент\n");

puts("Операция сортировки завершена\n");

getch();

return h1;

}

SP *Add(SP *h1)

{

SP *p1=NULL,*p=NULL;

int pm2=0;

int d=0,k=1;

p=h1;

p1=enter(p1);

puts("\nКуда необходимо добавить элемент?");

puts("\n1 - В начало");

puts("\n2 - В конец");

puts("\n3 - После заданного");

scanf("%d",&pm2);

switch(pm2)

{

case 1:

p1->next=h1;

h1->pred=p1;

h1=p1;

h1->pred=NULL;

break;

case 2:

while((p->next)!=NULL)

p=p->next;

p->next=p1;

p1->next=NULL;

p1->pred=p;

break;

case 3:

puts("Задайте элемент,после которого нужно добавить информацию");

scanf("%d",&d);

while(p!=NULL && k!=d)

{

p=p->next;

k++;

}

if(k==d)

{

if(p->next!=NULL)

{

p1->next=p->next;

p->next->pred=p1;

p->next=p1;

}

else

{

p->next=p1;

p1->pred=p;

p1->next=NULL;

}

}

else

printf("Элемента номер %d не существует!", d);

break;

default:

puts("Ошибка ввода пункта меню");

getch();

break;

}

puts("Операция добавление успешно завершена");

puts("\nНажмите любую клавишу");

getch();

return h1;

}

SP *Del(SP *h1)

{

SP *r=NULL; // вспомогательная переменная

int d=0, k=1;

r=h1;

puts("Введите номер элемента,который нужно удалить\n");

scanf("%d", &d);

while(r->next!=NULL && k!=d)//установление указателя на нужный элемент

{

r=r->next;

k++;

}

if(k==d)

{

if(d!=1) // если заданный элемент не первый

{

if(r->next!=NULL)

{

r->pred->next=r->next;

r->next->pred=r->pred;

}

else

r->pred->next=NULL;

}

else // заданный элемент первый

{

if(r->next!=NULL)

{

h1=r->next;

h1->pred=NULL;

}

else

h1=NULL;

}

}

else

printf("Элемент %d отсутствует!", d);

free(r);

puts("Удаление завершено.Нажмите любую клавишу.\n");

return h1;

}

void Output_2(SP *h1)

{

SP *p=NULL,*p1=NULL,*p2=NULL;

int k=0,z=1;

p=h1;

puts("Слева и справа от какого элемента вывести?\n");

scanf("%d", &k);

while(p->next!=NULL && z!=k)

{

p=p->next;

z++;

}

if(k==z) // заданный элемент существует

{

if(k==1) // выбран первый элемент

{

puts("Элемент слева отсуствует\n");

if(p->next!=NULL)

{

p1=p->next;

p2=p->next->next;

p1->next=NULL;

Output(p1, "");

p1->next=p2;

}

else

puts("Элемент справа отсуствует\n");

}

else // выбран не первый элемент

{

if(p->next!=NULL)

{

p1=p->pred;

p2=p->next->next;

p1->next=p->next;

p1->next->next=NULL;

Output(p1, "");

p1->next->next=p2;

p1->next=p;

}

else

{

puts("Элементы справа отсуствуют\n");

p1=p->pred;

p1->next=NULL;

Output(p1, "");

p1->next=p;

}

}

}

else

printf("Элемента %d не сушесвует!",k);

puts("");

puts("Нажмите любую клавишу");

}

SP *Free(SP *h1)

{

SP *temp=NULL;

temp=h1;

while(temp!=NULL)

{

temp=h1->next;

free(h1);

h1=temp;

}

return NULL;

}

void save(SP *h1) /*h1 - указатель на голову списка*/

{

SP *r=NULL;

FILE *f1;

int n=1;

char namefile[20];

fflush(stdin);

if(h1!=NULL)

{

r=h1;

do

{

printf("Введите имя файла на латинице: ");

gets(namefile);

if (strlen(namefile)>15)

puts ("Повторите ввод.(name < 15 символов)");

}

while(strlen(namefile)>15);

if((f1=fopen(namefile, "w"))!=NULL)

{

while(r->next!=NULL)

{

r=r->next;

n++;

}

r=h1;

fprintf(f1, "%d", n); // записи в файл кол-ва структур, которые будут записаны в файл

putc(' ', f1); // запись в файл пробела

while(r!=NULL)

{

fwrite(&(r->info), sizeof(r->info), 1, f1);

r=r->next;

}

fclose(f1);

puts("Запись в файл завершена");

}

else

puts("Невозможно записать в файл\n");

}

else

puts("Картотека пуста");

}

SP *Load(void) /* возращает сформированный список*/

{

SP *r=NULL, *h1=NULL;

FILE *f1;

int n, i;

char namefile[20];

fflush(stdin);

puts("Введите имя файла:");

gets(namefile);

if((f1=fopen(namefile, "r"))!=NULL)

{

fscanf(f1, "%d", &n); // всего структур

getc(f1); // чтение пробела

printf("Кол-вo: %d", n);

for(i=1; i<=n; i++)

{

r=(SP*)malloc(sizeof(SP)); // выдиление дин. памяти

fread(&(r->info), sizeof(r->info), 1, f1);

h1=Add_End(h1, r); // формирование нового списка

}

fclose(f1);

puts("\nЧтение из файла завершено");

}

else

puts("Не могу открыть файл\n");

return h1;

}

SP *SortALF(SP *h1)

{

SP *point,*tmp=NULL,*f,*s;

int i,j,srav;

//Указатель на начало

f=h1;

point=h1;

while(f!=NULL)

{

s=f->next;

while(s!=NULL)

{

if((strcmp(f->info.name,s->info.name)>0))

{

tmp=(SP*)malloc(sizeof(SP));

strcpy(tmp->info.name,f->info.name);

tmp->info.year=f->info.year;

tmp->info.rating=f->info.rating;

strcpy(f->info.name,s->info.name);

f->info.year=s->info.year;

f->info.rating=s->info.rating;

strcpy(s->info.name,tmp->info.name);

s->info.year=tmp->info.year;

s->info.rating=tmp->info.rating;

free(tmp);

}

s=s->next;

}

strcpy(point->info.name,f->info.name);

point->info.year=f->info.year;

point->info.rating=f->info.rating;

point=point->next;

f=f->next;

}

point=h1;

return(point);

}

SP *Add_End(SP *r, SP *q)/*возвращает указатель на голову получившегося списка

r - указатель на голову списка, к которму добавлять

q - указатель на элемент, который добавляется*/

{

SP *d;

if(r==NULL)

{

r=q;

r->next=NULL;

r->pred=NULL;

}

else

{

d=r;

while((d->next)!=NULL)

d=d->next;

d->next=q;

q->next=NULL;

q->pred=d;

}

return r;

}

void menupoisk(SP *h1, SP *rez)

{

int pm, z; // z - флаг, показываюций выбран ли несуществующий пункт меню

do

{

z=1;

system("cls");

menu_seach();

fflush(stdin);

printf("Введите пункт меню:");

scanf("%d", &pm);

switch(pm)

{

case 1:

rez=Seach(h1, pm); // вызов функции poisk

break;

case 2:

rez=Seach(h1, pm);

break;

case 3:

rez=Seach(h1, pm);

break;

case 4:

break;

default: // обработка ошибки

puts("Ошибка ввода пункта меню");

z=0;

break;

}

}

while(z==0);

}

SP *Seach(SP *h1, int pm) /*h1 - указатель на голову исходного списка

pm - пукт меню, который был выбран пользователем*/

{

SP *r, *q, *d=NULL; // вспомогательные переменные

char name[20]; // масив символов для ввода имени

int year, rating; // переменные для ввода кол-ва голов и возраста

switch(pm)

{

case 1:

printf("Введите название продукта: \n");

fflush(stdin);

gets(name);

break;

case 2:

printf("Введите год выхода продукта: \n");

scanf("%d", &year);

break;

case 3:

printf("Введите рейтинг продукта: ");

scanf("%d", &rating);

break;

}

r=h1;

while(r!=NULL)

{

if(((strcmp(r->info.name, name)==0)&&pm==1)||(r->info.year==year && pm==2) || (r->info.rating==rating && pm==3))

{

q=(SP *)malloc(sizeof(SP)); // выделение дин. памяти

q->info=r->info; // копирование списка

d=Add_End(d, q); // формирование списка-результата

}

r=r->next;

}

if(d==NULL)

puts("Элементы с заданным критерием не найдены");

else

puts("Поиск завершен");

return d;

}

int Modulus(int iN, int iMod) {

int iQ = (iN/iMod);

return iN - (iQ*iMod);

}

char GetChar(int iGenerator, char cBase, int iRange)

{

return (cBase + Modulus(iGenerator, iRange));

}

Соседние файлы в папке 1,2,3,6 ,курсач (Жека)