#include < iostream>
#include < fstream>
#include < string.h>
#include < conio.h>
|
|
#include < windows.h>
| // бібліотека для роботи з вікнами
|
using namespace std;
|
|
// опис наступної процедури необхідний для роботи її у вікні консолі, якщо ви працюїте в ВС то оголошувати її не потрібно
|
void gotoxy(int xpos, int ypos)
{
COORD scrn;
HANDLE hOuput = GetStdHandle(STD_OUTPUT_HANDLE);
scrn.X = xpos; scrn.Y = ypos;
SetConsoleCursorPosition(hOuput, scrn);
}
| //процедура забезпечує переведення курсору в задану позицію
|
const int d=20;
char sf[40];
struct STUDENT
{
char Name[d];
int Year;
};
STUDENT stud;
| //оголошуємо глобальні константи та змінні
|
fstream f;
| //файловий потік пов'язаний зі змінною для запису та зчитування
|
// процедура додавання нових записів
|
void new_zap()
{
|
|
int i, z, pp, j, t;
| //оголошуємо локальні змінні
|
system(" cls");
| // очищуємо екран
|
f.clear();
| // очищуємо прапорці помилок
|
f.seekg(0, ios:: end);
| //переводимо курсор на кінець файлу
|
i = f.tellg();
| //визначаємо розташування курсору у файлі
|
i= (int)i/sizeof(struct STUDENT);
| //визначаємо кількість записів
|
i++;
s11:
strcpy(stud.Name, " ");
stud.Year=0;
pp=1;
cout< < " Введіте запісь № " < < i< < ": \n";
cout< < " ПІБ -> ";
do
{
gets(stud.Name);
t=strlen(stud.Name);
}
while (t==0);
for (j = t; j < d-2; j++)
strcat(stud.Name, " ");
cout< < " Рік народження -> ";
cin > > stud.Year;
|
|
f.write((char *)& stud, sizeof(struct STUDENT));
| // записуємо структуру до файлу
|
s12:
cout< < " Push -> Enter, or -> Esc \n";
while (! kbhit());
if ((pp=getch())! =27)
if (pp==13)
goto s11;
else
goto s12;
}
|
|
// процедура редагування запису
|
void edit_zap()
{
int i, z, j, t, d;
|
|
system(" cls");
| // очищуємо екран
|
cout< < " Редагування запису \n";
cout< < " Введіть номер запису = ";
|
|
cin> > z;
| //вводимо нор запису для редагування
|
f.clear();
| // очищуємо прапорці помилок
|
i= (int)((z-1)*sizeof(struct STUDENT));
| // визначення позиції
|
f.seekp(i, ios:: beg);
| //переведення курсору на заданий запис
|
strcpy(stud.Name, " ");
stud.Year=0;
cout< < " Введіть нові значення полів для запису № " < < z< < ": \n";
cout< < " ПІБ -> ";
do
{
gets(stud.Name);
t=strlen(stud.Name);
}
while (t==0);
for (j = t; j < d-2; j++)
strcat(stud.Name, " ");
cout< < " Рік народження -> ";
cin > > stud.Year;
f.write((char *)& stud, sizeof(struct STUDENT));
cout< < " Зміни внесено \n";
while (! kbhit());
}
|
|
// процедура виводить усі записи з файлу
|
void print_all()
{
system(" cls");
cout< < " Усі записи \n";
int i=0, d=0;
f.clear();
f.seekg(0, ios:: beg);
while(! f.eof())
{
i++;
f.read((char *)& stud, sizeof(struct STUDENT));
if (f.eof()) break;
cout< < i < < ": | " < < stud.Name< < " | " < < stud.Year < < " |\n";
}
while (! kbhit());
}
|
|
//головна функція
|
int main()
{
int p;
|
|
f.open(" c: \\stud.dat", ios_base:: in|ios_base:: out|ios:: binary);
| //відкриваємо існуючий файл в бінарному режимі для запису та считування
|
if(! f)
{
cout< < " Виникла помилка при відкритті файлу " < < endl;
return 0;
}
|
|
Do
{
system(" cls");
|
|
setlocale(LC_ALL, " Ukrainian");
| // встановлюємо украінску мову для відображення у консолі
|
gotoxy(20, 5);
cout < < " ГОЛОВНЕ МЕНЮ";
gotoxy(20, 7); cout < < " 1. Новий запис";
gotoxy(20, 8); cout < < " 2. Усі записи";
gotoxy(20, 9); cout < < " 3. Редагування запису";
gotoxy(20, 10); cout < < " 6. Exit";
gotoxy(20, 11); cout < < " Введіть номер пункту: ";
cin > > p;
| //переводимо курсор у задані координати
|
switch (p)
{
case 1:
{
new_zap();
break;
}
case 2:
{
print_all();
break;
}
case 3:
{
edit_zap();
break;
}
}
}
while (p! = 6);
|
// якщо було введено 1 то буде здійсненно виклик функції new_zap();
|
f.close();
return 0;
}
|
|