ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 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();