Код:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <conio.h>
#include <string.h>
using namespace std;
void Menu();
int c=0; //Глобальная переменная с - для количества элементов структуры
int k=0; //Глобальная переменная к - для номера увольняемого абонента
struct Worker //Структура для абонента
{
struct FIO
{
char surname[50]; //Фамилия
char name[50]; //Имя
char second_name[50]; //Отчество
};
FIO fio;
char birth[10]; //Дата рождения
char sex[30]; //Пол
int staj; //Стаж работы по специальности
char adress[100]; //Домашний адрес
char berth[50]; //Должность
int salary; //Оклад
};
class Firma //Создаю свой класс
{
public:
Firma(); //Конструктор
void LoadFile(); //Функция для считывания информации из файла
void New_worker(); //Функция для добавления экземпляра структуры
void Remove_base(); //Функция для удаления сотрудника
void See_Base(); //Функция просмотра базы
void Naity(); //Функция для поиска по адресу/фамилии
void Yvolit(); //Функция для увольнения сотрудника
void SaveFile(); //Функция для записи телефонной книги в файл
Worker work[40]; //40 экземпляров структуры Worker
};
Firma fir; //Экземпляр класса
Firma::Firma() //Инициализация конструктора
{
}
void Firma::LoadFile()
{
FILE *f = fopen("workers.txt", "r"); //Открываем базу
if((f=fopen("workers.txt","r"))==NULL)
printf("Cannot open file\n"); //Сообщение, если невозможно открыть файл
char buff[150],*p;
int i=0;
while(!feof(f)) //Цикл продолжается, пока не достигнут конец файла
{
fgets (buff, sizeof(buff), f); //Считывание первой строки файла
p = strtok (buff," "); //Указатель на первую строку в файле до первого знака " "
strcpy (work[i].fio.surname, p); //Копирование первой строки до " " в массив экземпляра структуры
p = strtok (NULL, " "); //Указатель на первую строку в файле до второго знака " "
strcpy (work[i].fio.name, p); //Копирование первой строки от " " до " " в массив экземпляра структуры
p = strtok (NULL, "\n"); //Указатель на первую строку в файле от второго знака " " до конца строки
strcpy (work[i].fio.second_name, p);//Копирование первой строки от " " до конца строки в массив экземпляра структуры
fgets (buff, 10, f); //Считывание второй строки файла
p = strtok (buff, "\n"); //Указатель на вторую строку в файле
strcpy (work[i].birth, p); //Копирование второй строки в массив экземпляра структуры
fgets(buff, sizeof(buff),f); //Считывание третьей строки файла
p = strtok (buff, "\n"); //Указатель на третью строку в файле
strcpy (work[i].sex, p); //Копирование третьей строки в массив экземпляра структуры
fgets(buff, sizeof(buff),f); //Считывание четвертой строки файла
work[i].staj = atoi(buff); //Присваивание переменной экземпляра структуры значения из четвертой строки файла
fgets(buff, sizeof(buff),f); //Считывание пятой строки файла
p = strtok (buff, "\n"); //Указатель на пятую строку в файле
strcpy (work[i].adress, p); //Копирование пятой строки в массив экземпляра структуры
fgets(buff, sizeof(buff),f); //Считывание шестой строки файла
p = strtok (buff, "\n"); //Указатель на шестую строку в файле
strcpy (work[i].berth, p); //Копирование шестой строки в массив экземпляра структуры
fgets(buff,sizeof(buff),f); //Считывание седьмой строки файла
work[i].salary = atoi(buff); //Присваивание переменной экземпляра структуры значения из седьмой строки файла
fgets(buff,sizeof(buff),f); //Считывание восьмой (пустой) строки файла
i++;
}
c=i; //Количество структур в файле
fclose(f); //Закрываем базу
}
void Firma::New_worker()
{
char buf[150],*p;
cout<<"Enter telephon subscriber surname, name and second name"<<endl; //ФИО сотрудника
_flushall(); //Очищает буфер перед вводом сотрудника
cin.getline(buf,150,'\n');
p = strtok(buf, " \n");
strcpy(work[c].fio.surname, p);
p = strtok(NULL, " \n");
strcpy(work[c].fio.name, p);
p = strtok(NULL, "\n\0");
strcpy(work[c].fio.second_name, p);
cout<<"Enter date of birth DD/MM/YY"<<endl; //Дата рождения сотрудника
cin.getline(work[c].birth, sizeof(work[c].birth), '\n');
cout<<"Enter sex of worker"<<endl;
cin.getline(work[c].sex, sizeof(work[c].sex), '\n');
cout<<"Enter experience of worker"<<endl;
cin>>work[c].staj;
_flushall();
cout<<"Enter telephon subscriber adress:"<<endl; //Адрес сотрудника
cin.getline(work[c].adress, sizeof(work[c].adress), '\n');
cout<<"Enter berth of worker"<<endl; //Должность
cin.getline(work[c].berth, sizeof(work[c].berth), '\n');
cout<<"Enter salary, $:"<<endl; //Оклад
cin>>work[c].salary;
c++; //Добавление 1 экземпляра структуры
}