2 Описание программы
Алгоритм работы программы представлен в виде блок-схемы в ПРИЛОЖЕНИЕ 1. Полный текст программы (листинг) представлен в ПРИЛОЖЕНИИ 2.
Глобальные переменные, используемые в программе:
1. struct bil – структура записей в базе данных;
2. char num[L] – год рождения сотрудника;
3. char fio[L] – Ф.И.О. сотрудника;
4. char kol[L] – образование;
5. char vir[L] – занимаемая должность;
6. char data[L] – дата поступления в фирму.
Разработанные подпрограммы:
1. void soz – ввод новой базы данных;
2. void openfile – открыть файл данных;
3. void redakt – редактирование записи в файле данных;
4. void sohranenie – сохранение в файле данных;
5. void dop – добавление записи в файл данных;
6. void udalenie – удаление записи из файла данных;
7. void poisknumvir – поиск записей по году рождения в файле данных;
8. void sortfio – Сортировка файла данных по Ф.И.О сотрудника.
3 Тестирование программы
При входе в программу появляется меню с выбором пунктов меню, доступных для любого пользователя (рисунок 1):
1. создать базу данных;
2. открыть базу данных;
3. редактировать базу данных;
4. добавить запись;
5. удалить запись;
6. поиск по полю год рождения;
7. сортировка по полю Ф.И.О. сотрудника;
8. выход.
Рисунок 1 – Главное меню программы
Теперь посмотрим, что происходит при нажатии пользователем каждого пункта меню. При неверном вводе данных во всех пунктах меню выходит сообщение об ошибке. Номера пунктов - номера клавиш на клавиатуре.
1.Создать базу данных
Перед тем, чтоб ввести количество записей и самих данных, необходимо ввести имя создаваемого файла. После введения количества записей последовательно выводятся предложения ввести все данные (рисунок 2):
Рисунок 2 – Создание базы данных
2.Открыть базу данных
В этом пункте пользователь может просмотреть свой файл: (рисунок 3):
Рисунок 3 – Открытие базы данных
3. Редактировать базу данных
Редактирование базы данных производится по каждому полю строки (рисунок 4):
Рисунок 4 – Редактирование базы данных
4. Добавить запись.
Добавление записи происходит путем добавлении строки в базе данных и заполнения ее введенными параметрами (рисунок 5):
Рисунок 5 – Добавление данных в базу данных
5.Удалить запись
Удаление записей производится по номеру строки (рисунок 6):
Рисунок 6 – Удаление данных из базы данных
6. Поиск по полю год рождения
В данном пункте осуществляется поиск лиц пенсионного и предпенсионного возраста больше либо равно заданному значению (рисунок 7):
Рисунок 7 – Поиск по базе данных
7. Сортировка по полю Ф.И.О. сотрудника
База данных до сортировки показана на рисунке 8, после сортировки на рисунке 9.
Рисунок 8 –Базы данных до сортировки
Рисунок 9 –Базы данных после сортировки
8. Выход (рисунок 10).
Рисунок 10 – Выход из базы данных
ЗАКЛЮЧЕНИЕ
В ходе выполнения курсовой работы была создана программа на языке Си. Средой разработки был выбран - С++Builder. Разработанная программа «База данных сотрудников фирмы», содержащая сведения о сотрудниках фирмы. Программа служит для создания новой базы данных, открытие уже имеющейся базы данных, редактирование, добавления, удаление и сортировка записей в базе данных.
ПРИЛОЖЕНИЕ 2. Листинг программы:
#include <cstdlib>
#include <iostream>
#include<fstream>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<iomanip>
#include <windows.h>
const int L=130;int k,n;
char str[256],filename[130];
struct bil
{
char num[L];
char fio[L];
char kol[L];
char vir[L];
char data[L];
};
const int N=100;
class bils
{
private:
bil a[N];
int n;
int l;
public:
void soz();
void openfile();
void open();
void redakt();
void sohranenie();
void dop();
void udalenie();
void poisknumvir();
void sortfio();
};
int main(int argc, char *argv[])
{
system("CLS");
bils a;
int pm;
while(1)
{
system("CLS");
CharToOem("\n\n Программа выполнена студентом 3 курса группы 113019 Короленко Ф.В.\n\n",str);
cout<<str;
CharToOem("______________________________________________________\n",str);
cout<<str;
CharToOem("| |\n",str);
cout<<str;
CharToOem("| 1 Создать базу данных |\n",str);
cout<<str;
CharToOem("| 2 Открыть базу данных |\n",str);
cout<<str;
CharToOem("| 3 Редактировать базу данных |\n",str);
cout<<str;
CharToOem("| 4 Добавить запись |\n",str);
cout<<str;
CharToOem("| 5 Удалить запись |\n",str);
cout<<str;
CharToOem("| 6 Поиск по полю Год рождения |\n",str);
cout<<str;
CharToOem("| 7 Сортировка по полю Ф.И.О. |\n",str);
cout<<str;
CharToOem("| 8 Выход |\n",str);
cout<<str;
CharToOem("|_____________________________________________________|\n",str);
cout<<str;
CharToOem("\nВведите пункт: \n",str);
cout<<str;
cin>>pm;
cout<<endl<<endl;
switch(pm)
{
case 1:a.soz();break;
case 2:a.openfile();break;
case 3:a.redakt();break;
case 4:a.dop();break;
case 5:a.udalenie();break;
case 6:a.poisknumvir();break;
case 7:a.sortfio();break;
case 8:{system("CLS");CharToOem("\n\nКонЕц работы...\n\n\n",str);cout<<str;system("PAUSE");return EXIT_SUCCESS;}
default:{CharToOem("Такого пункта не существует\n",str);cout<<str;system("PAUSE");break;}
}
}
}
int Check(char b)//Проверка на символы
{
if(isalpha(b)) k=0;
}
int Check1(char b)//Проверка на числа
{
if(isdigit(b)) k=0;
}
void bils::soz()//Создание новой БД
{
int i, j, q, n=0 , y, m;
char t[70], d[L];
system("CLS");
CharToOem("Введите адрес создаваемого файла: \n",str);
cout<<str; cin>>filename;
CharToOem("Введите количество записей", str);
cout<<str<<endl;
do
{
k=1;
cin>>d;
m=strlen(d);
for(i=0; i<m; i++)
{
Check(d[i]);
}
if(k==0)
{ CharToOem("Неверный ввод. Повторите", str);
cout<<str;}
}
while (k==0);
n=atoi(d);
for(i=0; i<n; i++)
{
cout<<"\n#"<<i+1;
CharToOem ("Год рождения: ", str);
cout<<endl<<str;
do
{
k=1;
cin>>a[i].num;
q=strlen(a[i].num);
for(j=0; j<q; j++)
{
Check(a[i].num[j]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число",str);
cout<<str<<endl;
}
}
while (k==0);
CharToOem("Ф.И.О. ", str);
cout<<endl<<str;
do
{
k=1;
cin>>a[i].fio;
q=strlen(a[i].fio);
for(j=0; j<q; j++)
{
Check1(a[i].fio[j]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem("Образование: ", str);
cout<<endl<<str;
do
{
k=1;
cin>>a[i].kol;
q=strlen(a[i].kol);
for(j=0; j<q; j++)
{
Check1(a[i].kol[j]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str); cout<<str<<endl;}
}
while (k==0);
CharToOem("Должность: ", str);
cout<<endl<<str;
do
{
k=1;
cin>>a[i].vir;
q=strlen(a[i].vir);
for(j=0; j<q; j++)
{
Check1(a[i].vir[j]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem("Дата поступления в фирму ДД.ММ.ГГГГ: ", str);
cout<<endl<<str;
do
{
k=1;
cin>>a[i].data;
q=strlen(a[i].data);
for(j=0; j<q; j++)
{
Check(a[i].data[j]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str);
cout<<str<<endl;}
}
while (k==0);
}
n--;
ofstream fout(filename);
if (!fout)
{ CharToOem("Файл не открыт\n",str);cout<<str; }
i=0; fout<<a[i].num<<" "<<a[i].fio<<" "<<a[i].kol<<" "<<a[i].vir<<" "<<a[i].data;
for(i=1; i<=n; i++)
{
fout<<'\n'<<a[i].num<<" "<<a[i].fio<<" "<<a[i].kol<<" "<<a[i].vir<<" "<<a[i].data;
}
fout.close();
system("PAUSE");
}
void bils::openfile()//Просмотр существующей БД
{
int m;
system("CLS");
CharToOem("Введите адрес открываемого файла: \n",str);
cout<<str; cin>>filename;
ifstream fin;
fin.open(filename);
if (!fin)
{
system("CLS");CharToOem("Файл не открыт!\n",str);cout<<str; system("PAUSE");return;
}
int i=0;
CharToOem("\nБаза данных сотрудников фирмы: \n\n",str);
cout<<str;
CharToOem(" №",str);
cout<<setw(3)<<str;
CharToOem(" год рождения",str);
cout<<setw(10)<<str;
CharToOem(" Ф.И.О. ",str);
cout<<setw(18)<<str;
CharToOem("образование " ,str);
cout<<setw(16)<<str;
CharToOem("Должность ",str);
cout<<setw(18)<<str;
CharToOem("Дата поступления в фирму\n\n",str);
cout<<setw(20)<<str;
while(!fin.eof())
{
cout<<setw(3)<<i+1;
fin>>a[i].num; cout<<setw(10)<<a[i].num;
fin>>a[i].fio; cout<<setw(18)<<a[i].fio;
fin>>a[i].kol; cout<<setw(16)<<a[i].kol;
fin>>a[i].vir; cout<<setw(18)<<a[i].vir;
fin>>a[i].data; cout<<setw(20)<<a[i].data<<endl;
i++;
}
n=i--;
fin.close();
cout<<"\n";
system("PAUSE");
}
void bils::open()//Просмотр существующей БД
{
int m;
system("CLS");
ifstream fin;
fin.open(filename);
if (!fin)
{
system("CLS");CharToOem("Файл не открыт!\n",str);cout<<str; system("PAUSE");return;
}
int i=0;
CharToOem("\nБаза данных сотрудников фирмы: \n\n",str);
cout<<str;
CharToOem(" №",str);
cout<<setw(3)<<str;
CharToOem(" год рождения",str);
cout<<setw(10)<<str;
CharToOem(" Ф.И.О. ",str);
cout<<setw(18)<<str;
CharToOem("образование " ,str);
cout<<setw(16)<<str;
CharToOem("Должность ",str);
cout<<setw(18)<<str;
CharToOem("Дата поступления в фирму\n\n",str);
cout<<setw(20)<<str;
while(!fin.eof())
{
cout<<setw(3)<<i+1;
fin>>a[i].num; cout<<setw(10)<<a[i].num;
fin>>a[i].fio; cout<<setw(18)<<a[i].fio;
fin>>a[i].kol; cout<<setw(16)<<a[i].kol;
fin>>a[i].vir; cout<<setw(18)<<a[i].vir;
fin>>a[i].data; cout<<setw(20)<<a[i].data<<endl;
i++;
}
n=i--;
fin.close();
cout<<"\n";
system("PAUSE");
}
void bils::redakt()//Редактирование БД
{
open();
char t[70], d[L];
int y, q, i,m;
CharToOem("Введите номер редактируемой записи: ", str);
cout<<endl<<str;
do
{
k=1;
cin>>d;
q=strlen(d);
for(i=0; i<q; i++)
{
Check(d[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите", str);
cout<<str<<endl;}
}
while (k==0);
y=atoi(d);
y--;
cout<<endl;
cout<<y+1<<" "<<a[y].num<<" "<<a[y].fio<<" "<<a[y].kol<<" "<<a[y].vir<<" "<<a[y].data<<endl<<endl;
CharToOem("Изменить поле год рождения?\n1-да\n2-нет\n",str);cout<<str;
cin>>k;
if(k==1)
{
CharToOem("Новое значение поля год рождения: \n",str);cout<<str;
do
{
k=1;
cin>>a[y].num;
q=strlen(a[y].num);
for(i=0; i<q; i++)
{
Check(a[y].num[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число",str);
cout<<str<<endl;}
}
while (k==0);
}
CharToOem("Изменить поле Ф.И.О.?\n1-да\n2-нет\n",str);cout<<str;
cin>>k;
if(k==1)
{
CharToOem("Новое значение поля Ф.И.О.: \n",str);cout<<str;
do
{
k=1;
cin>>a[y].fio;
q=strlen(a[y].fio);
for(i=0; i<q; i++)
{
Check1(a[y].fio[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str);
cout<<str<<endl;}
}
while (k==0);
}
CharToOem("Изменить поле Образование?\n1-да\n2-нет\n",str);cout<<str;
cin>>k;
if(k==1)
{
CharToOem("Новое значение поля Образование: \n",str);cout<<str;
do
{
k=1;
cin>>a[y].kol;
q=strlen(a[y].kol);
for(i=0; i<q; i++)
{
Check1(a[y].kol[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
}
CharToOem("Изменить поле Должность?\n1-да\n2-нет\n",str);cout<<str;
cin>>k;
if(k==1)
{
CharToOem("Новое значение поля Должность\n",str);cout<<str;
do
{
k=1;
cin>>a[y].vir;
q=strlen(a[y].vir);
for(i=0; i<q; i++)
{
Check1(a[y].vir[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
}
CharToOem("Изменить поле Дата?\n1-да\n2-нет\n",str);cout<<str;
cin>>k;
if(k==1)
{
CharToOem("Новое значение поля Дата ДД.ММ.ГГГГ \n",str);cout<<str;
do
{
k=1;
cin>>a[y].data;
q=strlen(a[y].data);
for(i=0; i<q; i++)
{
Check(a[y].data[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str);
cout<<str<<endl;}
}
while (k==0);
}
sohranenie();
}
void bils::dop()//Добавление новой записи
{
openfile();
bil m;
char t[70];
int q, i;
cout<<endl;
CharToOem ("Введите новые данные\n ", str);cout<<str;
CharToOem ("\nгод рождения: ", str);cout<<str;
do
{
k=1;
cin>>m.num;
q=strlen(m.num);
for(i=0; i<q; i++)
{
Check(m.num[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem ("\nФ.И.О.: ",str);
cout<<str;
do
{
k=1;
cin>>m.fio;
q=strlen(m.fio);
for(i=0; i<q; i++)
{
Check1(m.fio[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Повторите.", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem ("\nОбразование: ",str);
cout<<str;
do
{
k=1;
cin>>m.kol;
q=strlen(m.kol);
for(i=0; i<q; i++)
{
Check1(m.kol[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem("\nДолжность: ",str);
cout<<str;
do
{
k=1;
cin>>m.vir;
q=strlen(m.vir);
for(i=0; i<q; i++)
{
Check1(m.vir[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
CharToOem("\nДата поступления в фирму: ",str);cout<<str;
do
{
k=1;
cin>>m.data;
q=strlen(m.data);
for(i=0; i<q; i++)
{
Check(m.data[i]);
}
if(k==0)
{CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
a[n]=m;
sohranenie();
}
void bils::udalenie()//Удаление записи
{
int i, q,l=1, j,r;
char ch, t[70], d[L];
open();
cout<<endl;
CharToOem("Введите номер удаляемой строки: ",str);
cout<<str;
do
{
k=1;
cin>>d;
q=strlen(d);
for(i=0; i<q; i++)
{
Check(d[i]);
}
if(k==0)
{ CharToOem("Неверный ввод. Введите число", str);
cout<<str<<endl;}
}
while (k==0);
j=atoi(d);
if(j<0||j>n)
{
CharToOem("Ошибка", str);
cout<<str<<endl;
system ("PAUSE");
return;
}
cout<<j<<" "<<a[j-1].num<<" "<<a[j-1].fio<<" "<<a[j-1].kol<<" "<<a[j-1].vir<<" "<<a[j-1].data<<endl;
for(i=j;i<=n;i++)
{
a[i-1]=a[i];
}
CharToOem("Удалить строку? \nДа-1 \nНет-2\n", str);cout<<str;
cin>>r;
if(r==1)
{
l=0;
n--;
sohranenie();
}
}
void bils::poisknumvir()//Поиск по году рождения
{
int q,i,u,r,p=0;
char kol[L];
open();
CharToOem("\nВведите год рождения:",str);cout<<str;
do
{
k=1;
cin>>kol;
q=strlen(kol);
for(u=0; u<q; u++)
{
Check(kol[u]);
}
if(k==0)
{ CharToOem("Неверный ввод. Повторите.", str); cout<<str<<endl;}
}
while (k==0);
system("CLS");
CharToOem(" год рождения",str);
cout<<setw(10)<<str;
CharToOem(" Ф.И.О. ",str);
cout<<setw(18)<<str;
CharToOem("образование " ,str);
cout<<setw(16)<<str;
CharToOem("Должность ",str);
cout<<setw(18)<<str;
CharToOem("Дата поступления в фирму\n\n",str);
cout<<setw(20)<<str;
k=0;
for(i=0; i<n
; i++)
if(strcmpi(kol,a[i].num)>=0)
{
k=1;
cout<<setw(10)<<a[i].num;
cout<<setw(18)<<a[i].fio;
cout<<setw(16)<<a[i].kol;
cout<<setw(18)<<a[i].vir;
cout<<setw(20)<<a[i].data<<endl;
}
system("PAUSE");
CharToOem("Сохранить изменения?\n Да-1\n Нет-2: ",str);
cout<<str;
cin>>r;
if(r==1) {
if (k==1) { system("CLS");
CharToOem("Введите адрес создаваемого файла: \n",str);
cout<<str; cin>>filename;
ofstream fout(filename);
if (!fout)
{ CharToOem("Файл не открыт\n",str);cout<<str; }
for(i=0; i<=n-1; i++)
if(strcmpi(kol,a[i].num)>=0){
fout<<'\n'<<a[i].num<<" "<<a[i].fio<<" "<<a[i].kol<<" "<<a[i].vir<<" "<<a[i].data;}
fout.close(); }
system("PAUSE"); }
if(!k) {CharToOem(" \n\n Поиск не дал результатов.\n",str); cout<<str;
system("PAUSE");}system("CLS");
}
void bils::sortfio()//Сортировка по Ф.И.О.
{
int i,fl,f,r;
open();
bil t;
f=n-1;
do
{
fl=0;
for(i=0;i<n;i++)
{
if (strcmp(a[i].fio,a[i+1].fio)>0)
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
fl=1;
}
}
f--;
}
while(fl==1);
system("CLS");
CharToOem(" год рождения",str);
cout<<setw(10)<<str;
CharToOem(" Ф.И.О. ",str);
cout<<setw(18)<<str;
CharToOem("образование " ,str);
cout<<setw(16)<<str;
CharToOem("Должность ",str);
cout<<setw(18)<<str;
CharToOem("Дата поступления в фирму\n\n",str);
cout<<setw(20)<<str;
for(i=1; i<=n; i++)
{
cout<<setw(10)<<a[i].num;
cout<<setw(18)<<a[i].fio;
cout<<setw(16)<<a[i].kol;
cout<<setw(18)<<a[i].vir;
cout<<setw(20)<<a[i].data<<endl;
}
CharToOem("Сохранить изменения?\n Да-1\n Нет-2: ",str);
cout<<str;
cin>>r;
if(r==1)
sohranenie();
}
void bils::sohranenie()//Сохранение
{
int i;
ofstream fout(filename);
if (!fout)
{ CharToOem("Файл не открыт\n",str);cout<<str; }
i=0; fout<<a[i].num<<" "<<a[i].fio<<" "<<a[i].kol<<" "<<a[i].vir<<" "<<a[i].data;
if (l==0) n--;
for(i=1; i<=n; i++)
{
fout<<'\n'<<a[i].num<<" "<<a[i].fio<<" "<<a[i].kol<<" "<<a[i].vir<<" "<<a[i].data;
}
fout.close(); system("PAUSE");
}
