Читайте также:
|
|
#include "stdafx.h"
#include <stdio.h>
#include <iostream.h>
#include <string.h>
#include <windows.h>
class CBase // базовый абстрактный класс
{
protected:
CBase*pnext;
public:
virtual void Print(char n,ostream & out){} // виртуальная функция вывода
virtual void Input(char n,istream & in){} // виртуальная функция ввода
};
class Sotrudniki_info //класс общая информация о сотруднике
{
private:
char *SurName;
char *Name;
char *Otchestvo;
int telefon;
char *Birthday;
char *Adres;
public:
Sotrudniki_info(char *,char *,char *,char *,char *,int);
char *ff_Birthday(){return Birthday;}
char *ff_Adress(){return Adres;}
char* ff_Name(){return Name;}
char* ff_SurName(){return SurName;}
char* ff_Otchestvo(){return Otchestvo;}
int ff_Telefon(){return telefon;}
};
Sotrudniki_info:: Sotrudniki_info (char *str, char *str1,char *str2,char *str3,char *str4, int x)
{
SurName=strdup(str);
Name=strdup(str1); //конструкр класса Sotrudniki_info
Otchestvo=strdup(str2);
Birthday=strdup(str3);
Adres=strdup(str4);
telefon=x;
}
class Sotrudniki_work:public Sotrudniki_info// класс сотрудники производственные данные
{
private:
char *Doljnost;
float Zarplata;
int staj;
public:
Sotrudniki_work(char *, char *,char *,char *,char *,char *,int,float,int);
char *ff_Doljnost(){return Doljnost;}
int ff_Staj(){return staj;}
float ff_Zarplata(){return Zarplata;}
};
Sotrudniki_work:: Sotrudniki_work (char *str,char *str1,char *str2,char *str3,char *str4,char *str5,int x, float y,int z):Sotrudniki_info (str,str1,str2,str3,str4,x)
{
Doljnost=strdup(str5);
Zarplata=y; //конструктор класса Sotrudniki_work
staj=z;
}
class Sotrudniki_otpusk:public CBase, public Sotrudniki_work // класс сотрудники данные об отпуске
{
protected:
int kol_dnej;
float Summa;
char* Data_s;
char* Data_po;
bool otpusk;
public:
Sotrudniki_otpusk(char*,char*,char *,char *,char *,char *,int,float,int,int,float,char*,char*,bool);
~Sotrudniki_otpusk();
CBase * Getnext() {return pnext;}
char* ff_Datas(){return Data_s;}
char* ff_Datapo(){return Data_po;}
int ff_Koldnej(){return kol_dnej;}
float ff_Otpusknie(){return Summa;}
bool ff_Otpusk(){return otpusk;}
void Setnext (Sotrudniki_otpusk*p){pnext=p;}
void Print(char*,ostream &);
void Input(char*,istream &);
};
class CFifo //класс список (очередь)
{
private:
Sotrudniki_otpusk * HEAD;
public:
CFifo(Sotrudniki_otpusk*);
~CFifo();
void Print(ostream &,Sotrudniki_otpusk*);
Sotrudniki_otpusk*inlist(char *end);
Sotrudniki_otpusk * Get() {return HEAD;}
void delpam(Sotrudniki_otpusk*);
};
class CWork //класс функции для работы с данными
{
private:
public:
CWork(){};
~CWork(){};
void SaveToFile (char *FileName, Sotrudniki_otpusk *First);
void Sotrudniki_v_otpusk(Sotrudniki_otpusk *);
void Sotrudniki_vishli_otpusk(Sotrudniki_otpusk *);
void V_otpuske (Sotrudniki_otpusk *);
Sotrudniki_otpusk* FromFile (char *FileName);
};
CFifo::CFifo(Sotrudniki_otpusk*H) //конструктор списка
{
HEAD=H;
}
CFifo::~CFifo()// деструктор списка
{
delete HEAD;
}
Sotrudniki_otpusk:: Sotrudniki_otpusk (char *str, char *str1,char *str2, char *str3,
char *str4,char *str5, int x,float s,int y,int z,
float s1,char* str6,char* str7,bool otp):Sotrudniki_work
(str,str1,str2,str3,str4,str5,x,s,z)// конструктор класса Sotrudniki_otpusk
{
kol_dnej=y;
Data_s=strdup(str6);
Data_po=strdup(str7);
Summa=s1;
otpusk=otp;
}
Sotrudniki_otpusk:: ~Sotrudniki_otpusk() // деструктор
{
}
void Sotrudniki_otpusk::Print(char *n,ostream & out) // поток вывода
{
out<<n<<endl;
}
void Sotrudniki_otpusk::Input(char *n,istream & in) //поток ввода
{
in>>n;
}
void CFifo::Print(ostream & out,Sotrudniki_otpusk*p)// вывод на экран всего списка
{
char x[10];
while(p)
{ cout<<"ФИО сотрудника:\n";
p->Print(p->ff_SurName(),cout);
p->Print(p->ff_Name(),cout);
p->Print(p->ff_Otchestvo(),cout);
cout<<"Дата рождения: \t";
p->Print(p->ff_Birthday(),cout);
cout<<"Адрес: \t";
p->Print(p->ff_Adress(),cout);
cout<<"Телефон: \t";
_itoa(p->ff_Telefon(),x,10);
p->Print(x,cout);
cout<<"Должность: \t";
p->Print(p->ff_Doljnost(),cout);
_itoa(p->ff_Staj(),x,10);
cout<<"Стаж работы: \t";
p->Print(x,cout);
cout<<"Зарплата: \t";
_gcvt(p->ff_Zarplata(), 5, x);
p->Print(x,cout);
cout<<"Длина отпуска:\t";
_itoa(p->ff_Koldnej(),x,10);
p->Print(x,cout);
cout<<"C: \t";
p->Print(p->ff_Datas(),cout);
cout<<"По: \t";
p->Print(p->ff_Datapo(),cout);
cout<<"Отпускные: \t";
_gcvt(p->ff_Otpusknie(), 5, x);
p->Print(x,cout);
cout<<"Был в отпуске или нет: \t";
_itoa(p->ff_Otpusk(),x,10);
p->Print(x,cout);
cout<<"=================="<<endl;
p=(Sotrudniki_otpusk*)p->Getnext();
}
}
Sotrudniki_otpusk*CFifo::inlist(char* end) // заполнение списка сотрудников
{
char b;
int x,y,z;
bool o;
float sum;
Sotrudniki_otpusk*head,*tek,*tm;
char buf [255],buf1[255],buf2[255],buf3 [255],buf4[255],buf5[255],buf6[255],buf7[255]="";// ввод данных
cout<<"Фамилия сотрудника\n";
cin>>buf;
cout<<"Имя сотрудника\n";
cin>>buf1;
cout<<"Отчество сотрудника\n";
cin>>buf2;
cout<<"Адрес сотрудника\n";
cin>>buf4;
cout<<" Дата рождения сотрудника\n";
cin>>buf3;
cout<<"Должность\n";
cin>>buf5;
cout<<"Телефон\n";
cin>>x;
cout<<"Стаж\n";
cin>>z;
cout<<"Зарплата\n";
cin>>sum;
do
{
cout<<"С какого числa отпуск (dd.mm.yyyy)\n";
cin>>buf6;
}
while(strlen(buf6)!=10);
cout<<"Количество дней отпуска\n";
cin>>y;
char temp[5]="";
int d,m,year;
for (int i=0;i<2;i++)
temp[i]=buf6[i];
d=atoi(temp);
for (i=3;i<5;i++)
temp[i-3]=buf6[i];
m=atoi(temp);
for (i=6;i<10;i++)
temp[i-6]=buf6[i];
year=atoi(temp);
int kol_dn;
if (m==1||m==3||m==5 ||m==7|| m==8 ||m==10 || m==12) kol_dn=31;
else
if (m==4||m==6||m==9 ||m==11) kol_dn=30;
else
if (m==2) kol_dn=28;
if (d+y<=kol_dn)
{if (d+y<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(m,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
if (d+y>kol_dn)
{
if (d+y-kol_dn<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y-kol_dn,temp,10));
strcat(buf7,".");
if (m+1<=12)
{if(m+1<10) strcat(buf7,"0");
strcat(buf7,_itoa(m+1,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
else
{
strcat(buf7,"01.");
strcat(buf7,_itoa(year+1,temp,10));
}
}
cout<<"Выходить на работу:\n"<<buf7;
cout<<"\nОтпускные\n";
cout<<sum*12/365*y<<endl;
cout<<"Был или не был в отпуске (y/n)\n";
cin>>b;
if (b=='y')
o=true;
else
o=false;
head=new Sotrudniki_otpusk(buf,buf1,buf2,buf3,buf4,buf5,x,sum,y,z,sum*12/365*y,buf6,buf7,o);//передача в конструктор
tek=head;
cout<<"Фамилия сотрудника\n";
cin>>buf;
cout<<"Имя ссторудника\n";
cin>>buf1;
cout<<"Отчество ссотрудника\n";
cin>>buf2;
cout<<"Дата рождения сотрудника\n";
cin>>buf3;
cout<<"Адрес сотрудника\n";
cin>>buf4;
cout<<"Должность\n";
cin>>buf5;
cout<<"Телефон\n";
cin>>x;
cout<<"Стаж\n";
cin>>z;
cout<<"Зарплата\n";
cin>>sum;
do
{
cout<<"С какого числa отпуск (dd.mm.yyyy)\n";
cin>>buf6;
}
while(strlen(buf6)!=10);
cout<<"Количество дней отпуска\n";
cin>>y;
char temp1[3];
for (i=0;i<2;i++)
temp1[i]=buf6[i];
d=atoi(temp1);
for (i=3;i<5;i++)
temp1[i-3]=buf6[i];
m=atoi(temp1);
for (i=6;i<10;i++)
temp[i-6]=buf6[i];
year=atoi(temp);
strcpy(buf7,"");
if (m==1||m==3||m==5 ||m==7|| m==8 ||m==10 || m==12) kol_dn=31;
else
if (m==4||m==6||m==9 ||m==11) kol_dn=30;
else
if (m==2) kol_dn=28;
if (d+y<=kol_dn)
{if (d+y<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y,temp,10));
strcat(buf7,".");
if(m+1<10) strcat(buf7,"0");
strcat(buf7,_itoa(m,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
if (d+y>kol_dn)
{
if (d+y-kol_dn<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y-kol_dn,temp,10));
strcat(buf7,".");
if (m+1<=12)
{if(m+1<10) strcat(buf7,"0");
strcat(buf7,_itoa(m+1,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
else
{
strcat(buf7,"01.");
strcat(buf7,_itoa(year+1,temp,10));
}
}
cout<<"Выходить на работу:\n"<<buf7;
cout<<"\nОтпускные\n";
cout<<sum*12/365*y<<endl;
cout<<"Был или не был в отпуске (y/n)\n";
cin>>b;
if (b=='y')
o=true;
else
o=false;
while (strcmp (buf,end)!=0) //заполняем пока не введено слово "end"
{
tm=new Sotrudniki_otpusk(buf,buf1,buf2,buf3,buf4,buf5,x,sum,y,z,sum*12/365*y,buf6,buf7,o);//передача в конструктор
tek->Setnext(tm);
tek=(Sotrudniki_otpusk*)tek->Getnext();// переход к следующему элементу списка
cout<<"Фамилия сотрудника\n";
cin>>buf;
if (strcmp (buf,end)!=0)
{ cout<<"Имя ссторудника\n";
cin>>buf1;
cout<<"Отчество ссотрудника\n";
cin>>buf2;
cout<<"Дата рождения сотрудника\n";
cin>>buf3;
cout<<"Адрес сотрудника\n";
cin>>buf4;
cout<<"Должность\n";
cin>>buf5;
cout<<"Телефон\n";
cin>>x;
cout<<"Стаж\n";
cin>>z;
cout<<"Зарплата\n";
cin>>sum;
do
{
cout<<"С какого числa отпуск (dd.mm.yyyy)\n";
cin>>buf6;
}
while(strlen(buf6)!=10);
cout<<"Количество дней отпуска\n";
cin>>y;
char temp[5]="";
int d,m,year;
for (i=0;i<2;i++)
temp[i]=buf6[i];
d=atoi(temp);
for (i=3;i<5;i++)
temp[i-3]=buf6[i];
m=atoi(temp);
for (i=6;i<10;i++)
temp[i-6]=buf6[i];
year=atoi(temp);
strcpy(buf7,"");
if (d+y<=30)
{
strcat(buf7,_itoa(d+y,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(m,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
int kol_dn;
if (m==1||m==3||m==5 ||m==7|| m==8 ||m==10 || m==12) kol_dn=31;
else
if (m==4||m==6||m==9 ||m==11) kol_dn=30;
else
if (m==2) kol_dn=28;
if (d+y<=kol_dn)
{if (d+y<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(m,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
if (d+y>kol_dn)
{
if (d+y-kol_dn<10) strcat(buf7,"0");
strcat(buf7,_itoa(d+y-kol_dn,temp,10));
strcat(buf7,".");
if (m+1<=12)
{if(m+1<10) strcat(buf7,"0");
strcat(buf7,_itoa(m+1,temp,10));
strcat(buf7,".");
strcat(buf7,_itoa(year,temp,10));
}
else
{
strcat(buf7,"01.");
strcat(buf7,_itoa(year+1,temp,10));
}
}
cout<<"Выходить на работу:\n"<<buf7;
cout<<"\nОтпускные\n";
cout<<sum*12/365*y<<endl;
cout<<"Был или не был в отпуске (y/n)\n";
cin>>b;
if (b=='y')
o=true;
else
o=false;
}
}
tek->Setnext(NULL);
return head;
}
Sotrudniki_otpusk* CWork::FromFile (char *FileName) // считывание из файла
{
int x,y,z;
bool o;
float sum,sum1;
Sotrudniki_otpusk*head,*tek,*tm;
char buf [255],buf1[255],buf2[255],buf3 [255],buf4[255],buf5[255],buf6[255],buf7[255];
FILE *F = fopen (FileName, "r");
if(F!=NULL)
{
char temp[255];
fgets(buf,255,F);
fgets(buf1,255,F);
fgets(buf2,255,F);
fgets(buf3,255,F);
fgets(buf4,255,F);
fgets(buf5,255,F);
fgets(temp,255,F);
x=atoi(temp);
fgets(temp,255,F);
z=atoi(temp);
fgets(temp,255,F);
sum=atof(temp);
fgets(buf6,255,F);
fgets(buf7,255,F);
fgets(temp,255,F);
y=atoi(temp);
fgets(temp,255,F);
sum1=atof(temp);
fgets(temp,255,F);
o=atoi(temp);
head=new Sotrudniki_otpusk(buf,buf1,buf2,buf3,buf4,buf5,x,sum,y,z,sum1,buf6,buf7,o);//передача в конструктор
tek=head;
do
{
fgets(buf,255,F);
if (strlen(buf)<=1) break;
fgets(buf1,255,F);
fgets(buf2,255,F);
fgets(buf3,255,F);
fgets(buf4,255,F);
fgets(buf5,255,F);
fgets(temp,255,F);
x=atoi(temp);
fgets(temp,255,F);
z=atoi(temp);
fgets(temp,255,F);
sum=atof(temp);
fgets(buf6,255,F);
fgets(buf7,255,F);
fgets(temp,255,F);
y=atoi(temp);
fgets(temp,255,F);
sum1=atof(temp);
fgets(temp,255,F);
o=atoi(temp);
tm=new Sotrudniki_otpusk(buf,buf1,buf2,buf3,buf4,buf5,x,sum,y,z,sum*12/365*y,buf6,buf7,o);//передача в конструктор
tek->Setnext(tm);
tek=(Sotrudniki_otpusk*)tek->Getnext();// переход к следующему элементу списка
}
while(!feof(F));
}
tek->Setnext(NULL);
return head;
}
void CWork::SaveToFile (char *FileName, Sotrudniki_otpusk *First) //Сохраняет список в
{ //файле с именем FileName
FILE *F = fopen (FileName, "w");
Sotrudniki_otpusk *Tek = First;
char E = '\n';
while (Tek!= NULL)
{
fputs (Tek->ff_SurName(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Name(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Otchestvo(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Birthday(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Adress(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Doljnost(), F);
fwrite (&E, 1, 1, F);
char x[10];
_itoa(Tek->ff_Telefon(),x,10);
fputs (x, F);
fwrite (&E, 1, 1, F);
_itoa(Tek->ff_Staj(),x,10);
fputs (x, F);
fwrite (&E, 1, 1, F);
_gcvt(Tek->ff_Zarplata(), 5, x);
fputs (x, F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Datas(), F);
fwrite (&E, 1, 1, F);
fputs (Tek->ff_Datapo(), F);
fwrite (&E, 1, 1, F);
_itoa(Tek->ff_Koldnej(),x,10);
fputs (x, F);
fwrite (&E, 1, 1, F);
_gcvt(Tek->ff_Otpusknie(), 5, x);
fputs (x, F);
fwrite (&E, 1, 1, F);
_itoa(Tek->ff_Otpusk(),x,10);//float
fputs (x, F);
fwrite (&E, 1, 1, F);
Tek = (Sotrudniki_otpusk*)Tek->Getnext();
}
fclose (F);
}
void CWork::Sotrudniki_v_otpusk (Sotrudniki_otpusk *p) //сотрудник в отпуске
{
bool n=false;
char data[15]; //проверка - уходил ли кто-нибудь в отпуск в этот день
char x[10];
cout<<"Введите дату ухода в отпуск (dd.mm.yyyy)"<<endl;
cin>>data;
while(p)
{ if (strcmp(data,p->ff_Datas())==0)
{
cout<<"ФИО сотрудника:\n";
p->Print(p->ff_SurName(),cout);
p->Print(p->ff_Name(),cout);
p->Print(p->ff_Otchestvo(),cout);
cout<<"Должность: \t";
p->Print(p->ff_Doljnost(),cout);
_itoa(p->ff_Staj(),x,10);
cout<<"Длина отпуска:\t";
_itoa(p->ff_Koldnej(),x,10);
p->Print(x,cout);
cout<<"По: \t";
p->Print(p->ff_Datapo(),cout);
cout<<"Отпускные: \t";
_gcvt(p->ff_Otpusknie(), 5, x);
p->Print(x,cout);
n=true;
cout<<"=================="<<endl;
}
p=(Sotrudniki_otpusk*)p->Getnext();
}
if (n==false) cout<<"С этой даты в отпуск никто не уходил\n";
}
void CWork::Sotrudniki_vishli_otpusk (Sotrudniki_otpusk *p) // выходят сотрудники из отпуска
{
bool n=false;
char data[15]; //проверка - выйдет ли кто-нибудь в отпуск в этот день
char x[10];
cout<<"Введите дату выхода из отпуска (dd.mm.yyyy)"<<endl;
cin>>data;
while(p)
{ if (strcmp(data,p->ff_Datapo())==0)
{
cout<<"ФИО сотрудника:\n";
p->Print(p->ff_SurName(),cout);
p->Print(p->ff_Name(),cout);
p->Print(p->ff_Otchestvo(),cout);
cout<<"Должность: \t";
p->Print(p->ff_Doljnost(),cout);
cout<<"Длина отпуска:\t";
_itoa(p->ff_Koldnej(),x,10);
p->Print(x,cout);
cout<<"C: \t";
p->Print(p->ff_Datas(),cout);
n=true;
cout<<"=================="<<endl;
}
p=(Sotrudniki_otpusk*)p->Getnext();
}
if (n==false) cout<<"В этот день никто не выйдет\n";
}
void CWork::V_otpuske (Sotrudniki_otpusk *p) // проверка кто из сотрудников сейчас в отпуске
{ char x[10];
bool n=false;
while(p)
{ if (p->ff_Otpusk())
{
cout<<"ФИО сотрудника:\n";
p->Print(p->ff_SurName(),cout);
p->Print(p->ff_Name(),cout);
p->Print(p->ff_Otchestvo(),cout);
cout<<"Должность: \t";
p->Print(p->ff_Doljnost(),cout);
cout<<"Длина отпуска:\t";
_itoa(p->ff_Koldnej(),x,10);
p->Print(x,cout);
cout<<"C: \t";
p->Print(p->ff_Datas(),cout);
cout<<"По: \t";
p->Print(p->ff_Datapo(),cout);
cout<<"Отпускные: \t";
_gcvt(p->ff_Otpusknie(), 5, x);
p->Print(x,cout);
n=true;
cout<<"=================="<<endl;
}
p=(Sotrudniki_otpusk*)p->Getnext();
}
}
void CFifo::delpam(Sotrudniki_otpusk*l1)// освобождение памяти
{
Sotrudniki_otpusk *tek1,*tm;
tek1=l1;
while(tek1->Getnext())
{
tm=(Sotrudniki_otpusk*)tek1->Getnext();
delete tek1;
tek1=tm;
}
}
void main()
{
SetConsoleCP(1251); //инициализация русского шрифта
SetConsoleOutputCP(1251); //инициализация русского шрифта
cout<<"создайте список сотрудников (end - вместо фамилии завершает ввод списка)"<<endl;//"создание списка";
CFifo*h= new CFifo(h->inlist("end"));
CWork hh;
cout<<"Меню\n"
<<"1- Сотрудники в отпуске\n"
<<"2- Идут в отпуск\n"
<<"3- Выходят из отпуска\n"
<<"4- В файла\n"
<<"5- Из файла\n"
<<"6- Вывод на экран\n"
<<"0- Конец\n";
cout<< "Ввод пункт меню:"<<endl;
int nom;
cin>>nom;
while(nom!=0) //обработка нажатия пункта меню
{
switch(nom)
{
case 1:
cout<<"-------В отпуске------------\n";
hh.V_otpuske(h->Get());
break;
case 2:
cout<<"-------Идут в отпуск------------\n";
hh.Sotrudniki_v_otpusk(h->Get());
break;
case 3:
cout<<"-------Выходят из отпуска------------\n";
hh.Sotrudniki_vishli_otpusk(h->Get());
break;
case 4:
cout<<"-------Записать ф файл------------\n";
hh.SaveToFile("list.txt",h->Get());
break;
case 5:
{cout<<"-------Считать из файла------------\n";
CFifo*h1= new CFifo(hh.FromFile("list.txt"));
h1->Print(cout,h1->Get());
h1->delpam(h1->Get());}
break;
case 6:
{cout<<"-------Вывод списка наэкран------------\n";
h->Print(cout,h->Get());
break;}
default: cout<< "Неправильный ввод пункта меню"<<endl;
}
cout<< "Выберите пункт:"<<endl;
cin>>nom;
}
h->delpam(h->Get());
}
Дата добавления: 2015-09-01; просмотров: 68 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Приклад виконання контрольної роботи | | | ДОМАШНЕ МОРОЗИВО З ШОКОЛАДОМ |