Меню
Категории
Работа со структурами на C++. Задание на создание базы.
13 марта, 2008 Программинг

Работа со структурами на 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();
}

Добавить комментарий




*