Работа со структурами на C++. Задание на создание базыданных работников фирмы с заданными полями.
Это маленькая программка является примером того, как начинать программировать базы данных в среде c++. С возможностью чтения и записи в файл, а также редактирование данных.
Функционал:
1 — Ввод информации о рабочих.
2 — Просмотр информации о рабочих.
3 — Редактирование базы.
4 — Сохранение базы в файл.
5 — Загрузка базы из файла.
6 — Поиск рабочих.
7 — Удаление файла базы.
8 — Выход из системы.
Составим все переменные нашей структуры:
struct WORKER
{
char fam[15];
char prof[15];
int date;
};
Теперь WORKER — это новый тип данных.
Вся программа реализована на функциях. Так что и как пособие по работе с функциями она тоже может быть полезна.
#pragma hdrstop
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>struct WORKER
{
char fam[15];
char prof[15];
int date;
};void Input(WORKER *x);
void Read(WORKER *x);
void Find(WORKER *x);
void Edit(WORKER *x);
void Save(WORKER *x);
void Load(WORKER *x);
void Remove();int main(int argc, char* argv[])
{
clrscr();
textcolor(RED);
textbackground(WHITE);
clrscr();int n;
char ex;
WORKER work[5], *ptr;
do
{
clrscr();cout<<«Добро пожаловать, в базу данных рабочих, выберите (< 1 — 7 >) : \n»<<endl;
cout<<«\t 1 — Ввод информации о рабочих.»<<endl;
cout<<«\t 2 — Просмотр информации о рабочих.»<<endl;
cout<<«\t 3 — Редактирование базы.»<<endl;
cout<<«\t 4 — Сохранение базы в файл.»<<endl;
cout<<«\t 5 — Загрузка базы из файла.»<<endl;
cout<<«\t 6 — Поиск рабчих.»<<endl;
cout<<«\t 7 — Удаление файла базы.»<<endl;
cout<<«\t 8 — Выход из системы.»<<endl;cin>>n;
switch (n)
{
case 1 :
Input(work);
break;
case 2 :
Read(work);
break;
case 3 :
Edit(work);
break;
case 4 :
Save(work);
break;
case 5 :
Load(work);
break;
case 6 :
Find(work);
break;
case 7 :
Remove();
break;
case 8 :
cout<<«\n\n\n\t\t Выйти?[Y/N] : «;
cin>>ex;
if (ex==’n’) ex=’n’;
break;
default:
cout<<«\a\t Не умничай , повтори ввод! :)»;
cout<<«\n\a Нажми любую кнопку «;
getch();
exit(1);
}
} while (n!=8);}
//////////////Input information////
void Input(WORKER *x)
{
int i;
for(i=0;i<5;i++)
{
clrscr();
cout<<» [ Ввод данных о рабочем ] «<<i+1<<«»;
cout<<«\t Введите имя рабочего : «;
cin>>x[i].fam;
cout<<«\n\t Введите должность рабочего : «;
cin>>x[i].prof;
cout<<«\n\t Введите год поступления не работу (xxxx.г) : «;
cin>>x[i].date;
}
}void Read(WORKER *x)
{
int var;
clrscr();
cout<<«\t Просмотр информации о рабочих»<<endl<<endl;cout<<«Фамилия. Должность. Год поступления.»<<endl;
for(int i=0;i<5;i++)
{
cout<<x[i].fam;
var=15-(strlen(x[i].fam));
for(int j=1;j<var;j++)cout<<» «;
cout<<x[i].prof;
var=15-(strlen(x[i].prof));
for(int j=1;j<var;j++)cout<<» «;cout<<x[i].date<<endl;
}
getch();
if (strlen(x[0].fam) == 0)
{
clrscr();
cout<<«\t База пуста \a»<<endl;
cout<<«\n\a Нажмите любую кнопку «;
getch();
}
}void Find(WORKER *x)
{
int abc,k;
char *fami,xi;clrscr();
cout<<«\t Поиск рабочих, введите по чему чскать : «<<endl;
cout<<«1 — Поиск по фамилии»<<endl;
cout<<«2 — Поиск по должности»<<endl;
cout<<«3 — Поиск по дате приема»<<endl;
cout<<«4 — Выход»<<endl;
cin>>abc;
if(abc<0 || abc>4)
{
cout<<«Такой категории не существует, повторите ввод.»;
cin>>abc;
}switch (abc)
{
case 1 :
clrscr();
cout<<«Введите фамилию для поиска — «;
cin>>fami;
for(int i=0;i<5;i++)
{
if (strcmp(x[i].fam,fami)==0)
{
cout<<endl<<«Это : «<<x[i].fam<<» «<<x[i].prof<<» «<<x[i].date;
k++;
}
}
if (k==0)
{
cout<<» Такой не найден !!!»;
}
getch();
break;
case 2 :
clrscr();
cout<<«Введите должность для поиска — «;
cin>>fami;
for(int i=0;i<5;i++)
{
if (strcmp(x[i].prof,fami)==0)
{
cout<<endl<<«Это : «<<x[i].fam<<» «<<x[i].prof<<» «<<x[i].date;
k++;
}
}
if (k==0)
{
cout<<» Такой не найден !!!»;
}
getch();break;
case 3 :
clrscr();
int god;
cout<<«Введите год для поиска (гггг) — «;
cin>>god;
if (god<1999 || god>2003)
{
cout<<«Ошибка ввода даты, повторите ввод (1990-2003)»<<endl;
cin>>god;
}
for(int i=0;i<5;i++)
{
if (x[i].date == god)
{
cout<<endl<<«Это : «<<x[i].fam<<» «<<x[i].prof<<» «<<x[i].date;
k++;
}
}
if (k==0)
{
cout<<» Такой не найден !!!»;
}
getch();break;
case 4 :
cout<<«\n\n\n\t\t Выйти?[Y/N] : «;
cin>>xi;
if (xi==’n’) abc=4;
break;
default :
cout<<«\a\t Не умничай :)»;
getch();
exit(1);
break;
}
}void Edit(WORKER *x)
{
int s,i,var;
clrscr();
cout<<» Редактирование базы данных…»<<endl;
cout<<«No Фамилия. Должность. Год поступления.»<<endl;
for(int i=0;i<5;i++)
{
cout<<i+1<<» «;
cout<<x[i].fam;
var=15-(strlen(x[i].fam));
for(int j=1;j < var;j++) cout<<» «;
cout<<x[i].prof;
var=15-(strlen(x[i].prof));
for(int j=1;j < var;j++) cout<<» «;cout<<x[i].date<<endl;
}cout<<«Введите номер рабочего, которого редактить : «;
cin>>s;
if(s<1 || s>5 || s==0)
{
cout<<«\a Рабочий с таким номером не существует, повторите ввод!»<<endl;
cin>>s;
}
s—;
clrscr();
cout<<«Редактируем рабочего «<<s+1<<endl;
cout<<«Вводите поочередно : «;
cout<<«\nФамилия :»;
cin>>x[s].fam;
cout<<«\nДолжность :»;
cin>>x[s].prof;
cout<<«\nГод приема на работу :»;
cin>>x[s].date;
cout<<«\n Рабочий[ «<<i+1<<» ]изменен в базе.»<<endl;
cout<<«\n\a Нажмите любую кнопку. «;
getch();
}void Load(WORKER *x)
{
clrscr();
cout<<» Читаем информацию из файла …….»<<endl;
FILE *fp;
if ((fp=fopen(«data.txt»,»rt+»)) == NULL)
{
cout<<» Ошибка! Файл не существует. \a»<<endl;
cout<<«\n\a Нажмите любую кнопку. «;
getch();
}
else
{
fread(x,sizeof(WORKER),5,fp);
fclose(fp);
cout<<«\n\a Информация считана !Нажмите любую кнопку. «;
getch();
}
}void Save(WORKER *x)
{
clrscr();
cout<<» Записываем информацию в файл …….»<<endl;
FILE *fp;
if ((fp = fopen(«data.txt»,»wt+»)) =
= NULL)
{
cout<<«Ошибка доступа. Файл не создан !!!\a»<<endl;
cout<<«\n\a Нажмите любую кнопку. «;
getch();
}
fwrite(x,sizeof(WORKER),5,fp);
fclose(fp);
cout<<«\n\a Информация записана !Нажмите любую кнопку. «;
getch();
}void Remove()
{
int a = remove(«data.txt»);
cout<<«\n\a Файл базы удален! Нажмите любую кнопку «;
getch();
}