Файл: Курсовая работа. Матвиенко. Вариантk 018__.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.05.2024

Просмотров: 62

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

_getch();

}

else

{

gets(bufer);

while (1)

{

// Вывожу на экран форму для заполнения строчки в базе

i=i+1;

printf ("\n\n\t№%d",i);

VvodStrockiSEkrana();

// Записываю введенные данные из структуры "Строчка" в открытый файл (каждый пункт на отдельной строке)

fprintf (fp, "%s\n%s\n%d\n%.2f\n", Strochka.Rabotodatel, Strochka.Professiya, Strochka.KolRabMest, Strochka.Zarplata);

// Даю возможность закончить заполнения базы по нажатию ESC

printf("Для продолжения нажмите любую клавишу, для окончания нажмите Ecs");

konec = _getch();

if (konec == 27) break;

}

// Закрываю файл базы данных

fclose(fp);

}

// Отступаю место перед выводом меню

printf ("\n\n\n\n\n\n\n\n");

}

//*********************************************************************************

// 2. Добавление записи в существующую базу данных.

void Menu2()

{

printf ("\n\n\tДобавление записей в базу данных");

// Целые локальные переменные:

// NovNomer – номер вводимой записи, считая с начала добавления

// StarNomer – номер вводимой записи по сплошной нумерации (считая с начала файла базы данных)

// konec – код нажатой клавиши (чтобы закончить по нажатию ESC)

int NovNomer = 0, StarNomer = 0, konec, i;

// temp – используется для считывания данных из файла (чтобы посчитать их)

char temp[28], bufer[4];

// Открываю файл базы данных baza.dat для чтения

fp=fopen("baza.dat","r");

// Проверяю, открылся ли файл

if ( fp == NULL )

{

// Если файл не открылся, то сообщаю об этом и заканчиваю

printf("\n\nПроизошла ошибка. Редактирование базы данных невозможно. \nНажмите любую клавишу для возврата в меню");

_getch();

}

else

{

// Если файл открылся хорошо, то работаю с ним


// Читаю данные из файла, пока они не закончатся, одновременно считая их количество

// Делю на 4 (ФИО, профессия, кол. рабочих мест, зарплата), получаю количество записей в файле (чтобы выводить на экран общую нумерацию)

// Закрываю файл

while (1)

{

if (fgets (temp, 28, fp) != 0)

StarNomer = StarNomer + 1;

else break;

}

StarNomer=(StarNomer/4);

fclose (fp);

// Открываю файл базы данных для дописывания в конец

fp=fopen("baza.dat","a");

// Очистка буфера от мусора

gets(bufer);

// Произвожу дописывание

i=0;

while (1)

{

// Вывожу на экран форму для заполнения строчки в базе

i = i+1;

NovNomer = NovNomer+1;

StarNomer = StarNomer+1;

printf ("\n\n\t№%d (%d)", NovNomer, StarNomer);

VvodStrockiSEkrana();

// Записываю введенные данные из структуры "Строчка" в открытый файл (каждый пункт на отдельной строке)

fprintf (fp, "%s\n%s\n%d\n%.2f\n", Strochka.Rabotodatel, Strochka.Professiya, Strochka.KolRabMest, Strochka.Zarplata);

// Даю возможность закончить по нажатию ESC

printf("Для продолжения нажмите любую клавишу, для окончания нажмите Ecs");

konec = _getch();

if (konec == 27) break;

}

// Закрываю файл базы данных

fclose(fp);

}

// Отступаю место перед выводом меню

printf ("\n\n\n\n\n\n\n\n");

}

//*********************************************************************************

// Изменение записи в базе данных

void Menu3()

{

// Nomer – номер обрабатываемой структуры

// Kolichestvo – количество структур в базе данных

int Nomer, Kolichestvo;

// bufer – временная переменная для ввода данных в текстовом формате

// (очистка буфера от мусора, ввод числа в тексте для проверки на "чисельность"

// otvet – ответ на вопрос, нужно ли показывать таблицу, чтобы посмотреть, какую запись менять


// konec – признак конца изменения записей в базе

char bufer[4], otvet, konec;

// Базу данных из файла копирую в массив в памяти компьютера, узнаю количество структур

Kolichestvo=ChtenieMassivaIzFayla();

// Очистка буфера от мусора

gets(bufer);

// Вывод таблицы по желанию пользователя (посмотреть какие данные нужно изменить)

printf("Показать базу данных перед изменением? (д/н) – ");

scanf("%c",&otvet);

switch ( otvet )

{

case 'д':

case 'Д':Menu5();

case 'н':

case 'Н':break;

default: printf("Это не похоже на \'да\', значит, засчитываем как \'нет\'.\n"); break;

}

// Очистка буфера от мусора

gets(bufer);

// Цикл изменения записей в массиве

while (1)

{

while(1)

{

printf("\n\nКакую строку нужно изменить (введите номер от 1 до %d)? ", Kolichestvo);

gets(bufer);

// Проверка:

// 1) введеные символы должны быть цифрами

// 2) номер строки не должен выходить за границы базы

if ( (isdigit(bufer[0])!=0 && isdigit(bufer[1])!=0 ) || (isdigit(bufer[0])!=0 ) )

{

Nomer=atoi(bufer);

if (Nomer>Kolichestvo || Nomer==0)

printf("Данная строка не существует. Повторите ввод.");

else break;

}

else

{

printf("\nВведены неверные данные. Повторите ввод.");

}

}

printf("\nВведите данные для изменения:\n");

// Подпрограмма вводит новые данные в глобальную структуру Строчка (с проверкой ввода)

VvodStrockiSEkrana();

// Перекладываю из структуры в нужное место массива

Baza[Nomer]=Strochka;

// Даю возможность закончить заполнения базы по нажатию ESC

printf("Для продолжения нажмите любую клавишу, для окончания нажмите Ecs");

konec = _getch();

if (konec == 27) { printf("\n\n\n\n\n\n\n"); break; };


}

// Записываю обновлённый массив в файл

ZapisMassivaVFayl(Kolichestvo);

}

//*********************************************************************************

// Удаление записи из базы данных

void Menu4()

{

// Nomer – номер обрабатываемой структуры

// Kolichestvo – количество структур в базе данных

int i, Nomer, Kolichestvo;

// bufer – временная переменная для ввода данных в текстовом формате

// (очистка буфера от мусора, ввод числа в тексте для проверки на "чисельность"

// otvet – ответ на вопрос, нужно ли показывать таблицу, чтобы посмотреть, какую запись менять

// konec – признак конца изменения записей в базе

char bufer[4], otvet, konec;

// Базу данных из файла копирую в массив в памяти компьютера, узнаю количество структур

Kolichestvo=ChtenieMassivaIzFayla();

// Очистка буфера от мусора

gets(bufer);

// Вывод таблицы по желанию пользователя (посмотреть какие данные нужно удалить)

printf("Показать базу данных перед удалением? (д/н) – ");

scanf("%c",&otvet);

switch ( otvet )

{

case 'д':

case 'Д':Menu5();

case 'н':

case 'Н':break;

default: printf("Это не похоже на \'да\', значит, засчитываем как \'нет\'.\n"); break;

}

// Очистка буфера от мусора

gets(bufer);

// Цикл изменения записей в массиве

while (1)

{

// Проверка на пустоту базы (что-то же надо удалять...)

if (Kolichestvo==0)

{

printf("\nБаза полностью удалена. ");

system("pause");

break;

};

while(1)

{

printf("\n\nКакую строку нужно удалить (введите номер от 1 до %d)? ", Kolichestvo);

gets(bufer);

// Проверка:

// 1) введеные символы должны быть цифрами

// 2) номер строки не должен выходить за границы базы


if ( (isdigit(bufer[0])!=0 && isdigit(bufer[1])!=0 ) || (isdigit(bufer[0])!=0 ) )

{

Nomer=atoi(bufer);

if (Nomer>Kolichestvo || Nomer==0)

printf("Данная строка не существует. Повторите ввод.");

else break;

}

else

{

printf("\nВведены неверные данные. Повторите ввод.");

};

};

for (i=Nomer; i<Kolichestvo; i++)

{

Baza[i]=Baza[i+1];

};

// Последняя структура осталась, но мы на нее не будем смотреть при заполнении файла

Kolichestvo=Kolichestvo-1;

// Даю возможность закончить заполнения базы по нажатию ESC

printf("Для продолжения нажмите любую клавишу, для окончания нажмите Ecs");

konec = _getch();

if (konec == 27) { printf("\n\n\n\n\n\n\n"); break; };

}

// Записываю обновлённый массив в файл

ZapisMassivaVFayl(Kolichestvo);

}

//*********************************************************************************

// Вывод базы данных на экран

void Menu5()

{

printf ("\n\n\t\t\t\t\t\tБаза данных\n");

printf ("_______________________________________________________________________________________________________\n");

printf (" | | | | |");

printf ("\n № |\t ФИО работодателя\t |\t Профессия\t | Вакансий\t| Зарплата\t\t |\n");

printf ("____|________________________________|_____________________________|____________|_____________________|");

// K – количество структур в базе данных

// i – порядковый номер выводимой структуры

int K,i;

K=ChtenieMassivaIzFayla();

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

{

printf ("\n | | | | |");

printf ("\n%3d |\t %-28s|\t %-26s|\t %-7d|\t%4.2f\t |", i, Baza[i].Rabotodatel, Baza[i].Professiya, Baza[i].KolRabMest, Baza[i].Zarplata);

printf ("\n____|________________________________|_____________________________|____________|_____________________|");

}

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

_getch();