El profesor dejó una pregunta de prueba de C++, Qiu lo sabe, ¡ayuda!

#ifndefEmployee_H

#Definición empleado_H

//Empleado h

Categoría de empleado

{

Protegido:

char nombre[20]; //nombre

int individualEmpNo//número personal

int nivel; //nivel

p>

Doble salario acumulado; //Salario mensual total

int tag;

Estático int empleadoNo//Número máximo de empleados actual de la empresa.

Público:

Empleado(); //Constructor

~ empleado(); //Destructor

Pago virtual nulo() ; //Calcular la función de salario mensual (función virtual)

Promoción nula virtual (int incremento = 0); //Función de actualización (función virtual)

nombre del conjunto vacío (char *) ; //Establece el nombre de la función

char * GetName(); //Extrae el nombre de la función

int GetindividualEmpNo() //Selecciona la función numérica

int Getgrade(); //Extraer función de nivel

double GetaccumPay(); //Extraer función de salario mensual

void Tg();

int Gettag () ;

void add(char *na, int code, int gr, double p);

};

Técnico de clase: empleado público// técnico a tiempo parcial.

{

Privado:

Doble tarifa por hora//tarifa por hora

int workHours//horas laborables del mes

Público:

Técnico(); //Constructor

void setwork hours(int wh); //Establecer función de horas de trabajo

void pay( ); //Función calcular salario mensual

void promove(int); //Función de actualización

};

Tipo de vendedor: servidor público virtual//part -Tiempo de trabajo Clase de vendedor

{

Protegido:

Double CommRate//Retirar comisión según las ventas.

Ventas dobles; //Ventas del mes actual

Público:

Vendedor(); //Constructor

Ventas de conjuntos nulos. (double s 1); //Establecer función de ventas

void pay(); //Calcular función de salario mensual

void promove(int);

};

Classmanager:Empleado público virtual//clase gerente

{

Protegido:

Pago bimestral;

Público:

manager(); //Constructor

void pay(); //Calcular la función de salario mensual

void promover (int); //Función de actualización

};

Escriba gerente de ventas: gerente público, vendedor público//gerente de ventas

{

Público:

gerente de ventas(); //Constructor

void pay(); //Calcular la función de salario mensual

void promover(int); //Función de actualización

};

Base de datos de clase //Clase de datos del empleado

{

Privado:

int top

Lectura del empleado[100];

Público:

base de datos(); //Leer la información del empleado de empleado.txt, leer [].

int addemp (char *na, int code, int gr, double p //Agregar personal

Consulta de empleado * (int empid);

empleado * consulta 1(char empna[20]);

void disp(); //Visualización de información del empleado

void clear();

~ Base de datos (); //Leer la información en read[] como en empleado.txt

};

#endif

//Employee.cpp

# include & ltiostream & gt

# include & ltcstring & gt

#Include "employee.h"

# include & ltfstream & gt

Usar espacio de nombres std

int empleado::empleado no = 1000 //El número base de empleados es 1000.

//Definición fuera de clase de función miembro

Empleado::Empleado()

{

empno individual = empleado no++;/ /El número de empleado recién ingresado es el número máximo actual más 1.

Nivel = 1; //El valor inicial del nivel es 1.

accumPay = 0.0//El valor inicial del salario mensual total es 0

}

void empleado::add(char *na, int code, int gr, pago doble)

{

tag = 0;

set name(na); individualEmpNo = codegrade = graccumPay = pay

}

anular empleado::pagar(){};

Empleado::~empleado()

{}

Empleado anulado:: :Promoción (incremento entero)

{Level+=increment;}//Actualización, el nivel de actualización se especifica mediante el incremento.

void empleado::nombre de la colección (char * nombres)

{ strcpy(name, name);}//Establecer nombre

char * empleado:: GetName()

{Return name;}//Seleccione el nombre del miembro

int empleado::GetindividualEmpNo()

{ return individualEmpNo}

int empleado::Getgrade()

{Devolver calificación;}//Seleccionar nivel de miembro

Empleado dual::GetaccumPay()

{ devolver accumPay }//Retirar salario mensual

Técnico::Técnico()

{ tarifa por hora = 100 } //Recompensa por hora 100.

técnico nulo::setwork hours(int wh)

{ workHours = wh}//Establecer horario laboral

Técnico nulo::pay()

{pago acumulado = tarifa por hora *(doble)hora de trabajo;}//Calcular el salario mensual y pagar por hora.

Técnico no válido::Promote(integer)

{Employee::Promote(2);}// Llame a la función de actualización de la clase base para actualizar al segundo nivel.

Vendedor:Vendedor

{ CommRate = 0.04}//El ratio de comisión de ventas es del 4%

void sales::set sales(double s 1)

{ sales = s 1;}//Establecer el monto de las ventas

void salesman::pay()

{ accumPay = sales * CommRate}//Mensual salario = Comisión de ventas

void salesman::promote(int)

{ empleado::promote(0);}// Llame a la función de actualización de clase base para actualizar al nivel 0.

Manager::Manager()

{ MonthlyPay = 8000}//Salario mensual fijo de 8.000 yuanes.

void manager::pay()

{ accumPay = MonthlyPay}//El salario mensual total es un salario mensual fijo.

void manager::promote(int)

{Employee::Promote(3);}// Llame a la función de actualización de la clase base para actualizar al nivel tres.

Gerente de ventas::Gerente de ventas()

{

Pago mensual = 5000

CommRate = 0,005

}

void salesmanager::pay()

{

pago acumulado =(doble)pago mensual+CommRate * ventas;

}

void salesmanager::promote(int)

{ empleado::promote(1);}//Llame a la función de actualización de la clase base para actualizar al nivel 1.

int empleado::Gettag()

{Etiqueta de retorno;}

void empleado::Tg()

{

p>

tag = 1;

}

Database::Database()//Lea la información del empleado desde empleado.txt para leer [].

{

Empleado;

top =-1;

archivo fstream("empleado.txt", IOs::in ) ;

mientras (1)

{

archivo leído((char *)&s,sizeof(s));

if(!archivo)interrumpir;

top++;

leer[top]= s;

}

archivo cerrar. ();

}

Base de datos int:: agregar EMP (char * na, código int, int gr, doble p) // Agregar empleados.

{

empleado * EMP = consulta 1(na

if(emp==NULL)

{

arriba++;

Leer [arriba]. add(na, code, gr, p);

Retorno 1;

}Retorno 0;

}

Empleado * base de datos ::query(int empid)

{

for(int I = 0;i<=topi++)

if(read[i].GetindividualEmpNo () = = empid &&read[I]. Gettag()==0)

Volver y cambiar a [I];

Devolver NULL

}

Empleado * base de datos::query1(char empna[20])

{

for(int I = 0; i< = topi++)

if (strcmp(read[i].GetName(), empna)== 0&&&read[i].Gettag()==0)

Return & amp se cambia a [I] ;

Devolver NULL

}

void base::disp()//Visualización de información del empleado

p>

{

for(int I = 0; i& lt= topi++)

{

cout & lt& lt"nombre:"

if (leer [ i]. obtener calificación() = = 1) cout <<"título:"

else if (lea [i]. obtener calificación() = = 2)cout <<"Título:"

else if(read[i].get grade()= = 3)cout<<"Título:"

else cout & lt& lt"Título:"

cout & lt& lt"Salario:"

}

}

void base de datos::clear()

{ arriba =-1;

}

Database::~Database() //Como en empleado.txt Lee la información en read[] como en

{

archivo fstream ("empleado.txt", IOs::out

for(int i = 0;i<=topi++)

if (leer); [i].

Gettag()==0)

archivo . write((char *)& leer[i], tamaño de(leer[I]);

archivo . close() ;

}

//rygl.cpp

# incluir & ltiostream.h & gt

# incluir & ltcstring & gt< / p>

#Include "empleado.h"

# include & ltfstream & gt

void main()

{

Gerente m;

Técnico t;

Gerente de ventas sm;

Vendedor s;

Nombre del personaje [20], Clave[ 20];

código int, wh;

Doble am;

Empleado * emp

Datos de la base de datos;

int i, k, j=0, kk = 3;

while(kk)

{

cout & lt& lt"Ingrese la contraseña ( también tienes "

CIN>>Key;kk-;

if(strcmp(key, "sm 0903410")== 0)break;

p >

else cout & lt& lt" O (︶ ︶)¡Oh, la contraseña es incorrecta!"& lt& ltendl

if(kk = = 0){ cout & lt;& lt"Puedes ¡No vuelvas a ingresar a este sistema! (_)/~ ~Adiós"; exit (0); }

}

do { system(" cls ");

cout & lt& lt"******************Bienvenido al sistema de gestión de personal* * * * * * * * * * * * * * * * * * * *"& lt; & ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! *!*!*!*!*!* !*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1. !*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2 ¡Aumento!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3. ¡Encuéntralo! *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!4. *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!5 salida! *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!6. *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!* !*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"Por favor seleccione su operación:";CIN>>i ;

Conmutador (1)

{

Caso 1: datos . clear();

hacer { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!* !*! *!*!"& lt

& ltendl

cout & lt& lt"!*!*!*!*!*!1.¡Gerente!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2. ¡Técnico a tiempo parcial!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"! *! *!*!*!*!3. Gerente de ventas!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*! *! 4. ¡Promoción a tiempo parcial! *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!5. el menú anterior *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!* !*!* !*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt" Seleccione su operación: "; CIN & gt; & gtk;

Interruptor (k)

{

Caso 1: cout <<"Ingrese el nombre:";CIN>>Name; Nombre de la colección (nombre); m.promoción(0);m.pagar();m.GetName(),m.GetindividualEmpNo(),m.Getgrade(),m.GetaccumPay());

Caso 2: cout<<"Ingrese el nombre:"CIN>>Name;cout<<"Ingrese sus horas de trabajo este mes:";CIN > )); Break;

Caso 3: cout & lt& lt"Ingrese el nombre: "; CIN & gt; & gtName; :CIN>>sm. establecer ventas(soy); SetName(nombre); sm. promover(0); sm. pagar(); sm. GetName(), sm. GetindividualEmpNo(), sm. Getgrade(), sm.

GetaccumPay());Break;

Caso 4: cout<<"Ingrese el nombre:"CIN>>Name;cout<<"Ingrese el monto total de ventas de este mes: "CIN>>am; establecer ventas (soy); s.setName (nombre); s.promote(0); s.pay(); s.GetName(), s. GetindividualEmpNo(), s.Getgrade(), s. GetaccumPay()); break;

Valor predeterminado: cout & lt& lt" ~ ~ o(& gt; _ & lt)o~~ ¡Incorrecto! "& lt& ltendlBreak;

Caso 5: Romper;

}

}mientras(k!=5);Romper;

Caso 2:

hacer { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*! *!*!*!*!*!*!*!*! *!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!* !*!*!1. !*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2 Técnico a tiempo parcial !*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3. ¡Gerente de ventas! !*!"& lt& ltendl

cout & lt& lt"!* !*!*!*!*!4. ¡Promoción a tiempo parcial!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!* !*!5. ¡Volver al menú anterior!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*! *!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*!" & lt& ltendl

cout & lt& ltPor favor seleccione el tipo a agregar: ";CIN>>k;

Switch (k)

{

Caso 1: cout<<"Ingrese el nombre:" CIN>>Name; m. Nombre de la colección (nombre); m. ()); break;

Caso 2:cout <<"Ingrese el nombre:"CIN>>Name;cout<<"Ingrese sus horas de trabajo este mes:"CIN>>twh;t.setwork hours (wh);t.set nombre(nombre) ); t .promover(0); t.getgrade(); t. GetaccumPay()); break;

Caso 3: cout<<"Ingrese su nombre:"; CIN>>Name;cout<<"Ingrese las ventas totales de su departamento este mes":CIN>>am; establecer ventas(soy);

SetName(nombre); sm. promover(0); sm. pagar(); sm. GetName(), sm. GetindividualEmpNo(), sm. Getgrade(), sm.

GetaccumPay());Break;

Caso 4: cout<<"Ingrese el nombre:"CIN>>Name;cout<<"Ingrese el monto total de ventas de este mes: "CIN>>am; establecer ventas (soy); s.setName(nombre); s.promote(0); s.pay(); s.GetName(), s. GetindividualEmpNo(), s.Getgrade(), s. GetaccumPay()); roto;

Caso 5: roto;

Valor predeterminado: cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~ ¡Incorrecto! ”& lt& ltendlbreak;

}

} while(k!=5);break;

Caso 3:

Hacer {

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!* !*!*!*!*!*!*!*!* !*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1. ¡Nombre! lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.¡No.! !*!"& lt& ltendl

cout & lt& lt"! *!*!*!*!*!3¡Volver al menú anterior! *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!* !*!*!*!*!*!*!*!*!*!*!*!*!*!*! *!*!*!"& lt& ltendl

cout & lt& ltPor favor seleccione su método de búsqueda:; CIN & gt; & gtk;

Interruptor (k)

{

Caso 1:cout<<"Ingrese el nombre estás buscando:"CIN>>Name;

emp=data .query1(name);

if(EMP == NULL){ cout <<" ~ ~ o( >_<)o~~No existe tal persona"<<endlBreak ;}

else cout & lt& lt"Nombre:"

Caso 2:cout & lt;& lt" Ingrese el número que está buscando:" CIN & gt;& gt code;

emp=data.query(code);

if(EMP == NULL){ cout & lt; & lt" ~ ~ o(& gt; _ & lt)o~~No existe tal persona"< & ltendlBreak;}

else cout & lt& lt"Nombre:"

Caso 3: Roto;

Valor predeterminado: cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~¡Incorrecto! "& lt& ltendlBreak;

}

} while(k!=3);Break;

Caso 4:

hacer { system(" cls ");

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!*!*!*!*! * !*!*!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!1. *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!2.No.! *!*!*!*!

*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!3 ¡Volver al menú anterior! *!*!*!*!*!"& lt& ltendl

cout & lt& lt"!*!*!*!*!*!*!*!*!*!*!*!* !*!*!*!*!*!*!*!*!*!"& lt& ltendl

cout & lt& ltSeleccione el método de eliminación:; CIN & gt; & gtk;

Cambiar (k)

{

Caso 1:cout<<"Ingrese el nombre que desea eliminar:"CIN>>Name ;

emp=data.query1(name);

if(EMP == NULL){ cout & lt; & lt" ~ ~ o(& gt; _ & lt) o~~No existe tal person"<<endlbreak;}

EMP->TG();break;

Caso 2:cout <<"Ingrese su número para eliminarlo: "CIN>>Code;

emp=data.query(código);

if(EMP==NULL){ cout< & lt" ~ ~ o(& gt;_ & lt)o~~ No existe tal persona" < & ltendlbreak;}

EMP->;TG();

break ;

Caso 3: Roto;

Valor predeterminado: cout & lt& lt" ~ ~ o(& gt;_ & lt)o~~ ¡Incorrecto! "& lt& ltendlBreak;

}

} while(k!=3);Break;

Caso 5: data. disp(); system( " pausa"); break;

Caso 6: cout & lt; & lt "(_)/~~Bye" < & ltendl break;

Valor predeterminado: cout & lt& lt " ~ ~ o(& gt;_ & lt)o~~¡Incorrecto! "& lt& ltendl break;

}

}Y (I!=6);

}

Somos casi iguales Como tú, simplemente cambiamos el curso del año pasado.