ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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)
{
// Проверка на пустоту базы (что-то же надо удалять...)