Файл: Курсовая работа Web, Матвиенко. Вариант 0033.doc

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

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

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

Добавлен: 10.05.2024

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

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

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

COORD crd = {250, 500};

SMALL_RECT src = {0, 0, crd.X, crd.Y};

SetConsoleScreenBufferSize (GetStdHandle (STD_OUTPUT_HANDLE), crd);

SetConsoleWindowInfo (GetStdHandle (STD_OUTPUT_HANDLE), TRUE, &src);

// Объявляю переменную для номера выбранного пункта меню

char NomerMenu[2];

Nachalo(); // Вызов подпрограммы графической заставки

while(1)

{

// Вывожу на экран меню

printf ("\n\t\tЦентр занятости\n\n");

printf (" 1. Создание и заполнение новой базы данных.\n");

printf (" 2. Добавление записи в существующую базу данных.\n");

printf (" 3. Изменение записи в базе данных.\n");

printf (" 4. Удаление записи из базы данных.\n");

printf (" 5. Вывод базы данных на экран.\n");

printf (" 6. Вывод списка работодателей и средней зарплаты по профессии.\n");

printf (" 7. Вывод списка профессий в порядке возрастания рабочих мест.\n");

printf (" 8. Вывод списка работодателей и количества рабочих мест по специальностям.\n");

printf (" 9. Вывод предложений о трудоустройстве по заработной плате.\n");

printf (" 0. Конец работы с программой.\n\n");

// Ввожу номер выбранного пункта с проверкой

do

{

printf ("Выберите номер пункта меню: ", NomerMenu);

scanf ("%s", &NomerMenu);

}

while (strlen(NomerMenu) >1 || isdigit(NomerMenu[0]) == 0);

// Запускаю подпрограмму выполнения выбранного пункта

switch ( NomerMenu[0] )

{

case '1': Menu1(); break;

case '2': Menu2(); break;

case '3': Menu3(); break;

case '4': Menu4(); break;

case '5': Menu5(); break;

case '6': Menu6(); break;

case '7': Menu7(); break;

case '8': Menu8(); break;

case '9': Menu9(); break;

case '0': Vihod(); return 0;

default: break;

}

}

}

// Конец основной программы

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

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

// Основные подпрограммы (9 пунктов меню + графические начало и конец)

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

// 1. Создание и заполнение новой базы данных.


void Menu1()

{

printf ("\n\n\tСоздание новой базы данных");

// i – нумерация вводимых записей

// konec – признак конца создания базы (конец по нажатию ESC)

int i = 0, konec;

// Для очистки буфера от оставшегося лишнего символа

char bufer[4];

// Создаю файл базы данных baza.dat

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

// Проверка создания файла

if ( fp == NULL )

{

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

_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)

{

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