Colección de citas famosas - Colección de versos - Ayúdame a escribir un programa en C++

Ayúdame a escribir un programa en C++

//Hola amigos, simplemente pueden modificar el siguiente programa. Los comentarios son muy claros

Título:

Personas en universidades Divididas en tres categorías: estudiantes. , docentes y personal, su información básica es la siguiente:

Estudiantes: nombre, edad, número de estudiante, grado, calificaciones

Profesores: nombre, edad, cédula de identidad, cargo , salario

Personal: nombre, edad, número de identificación, salario

Ahora necesitamos administrar la información de varios miembros del personal, utilice el método orientado a objetos para diseñar una lista enlazada heterogénea , utilizado para almacenar su información.

/*Implementación de lista enlazada heterogénea: hay tres clases: estudiante, profesor y personal, y luego define una clase de lista enlazada

. Esta clase se utiliza para almacenar objetos de estos diferentes. clases, y declarar la lista de clases de la lista vinculada como amiga de todas estas clases para que puedan acceder a sus miembros privados.

*/

#include

#include

#include

class person{ //Definir una clase base diferente con miembros de datos públicos

lista de clases amigas; //La clase de lista enlazada sirve como amiga de esta clase

protegida:

char name[20]; //Definir nombre

int age; //Definir edad

char add[40] / /Definir dirección

char tele[20]; //Definir número de teléfono

persona estática *ptr; //Definir un puntero estático que apunta al objeto de clase persona

persona *next; Puntero al siguiente objeto

public:

person(char *name,int age,char *add,char *tele);//Función de construcción

virtual void print(); //Describe la función virtual

virtual void insert(){};//Define una función virtual y no hace nada, solo define una interfaz

}; /p>

estudiante de clase:persona pública{ //Estudiante de clase derivada

lista de clases de amigos //La clase de lista vinculada sirve como amiga de esta clase

int nivel; ; //Definir calificación

float grade_point_average; //Definir puntaje promedio

public:

estudiante(char *nombre,int edad,char *add,char *tele, int nivel,

float grade_point_average); //Declarar el constructor

void print() //Redefinir la función print()

void insert(); //Redefinir la función insert()

};

//

profesor de clase:persona pública{ // Profesor de clase derivado

lista de clases de amigos; //La clase de la lista vinculada sirve como amiga de esta clase

salario flotante; //Definir salario

público:

p >

teacher(char *nombre,int edad,char *add,char *tele,salario flotante

//Declarar el constructor

void print(); /Redefinir la función print()

void insert(); //Redefinir la función insert()

}

//

class staff:public person{ //Personal de clase derivada

lista de clases de amigos; //La clase de lista vinculada sirve como amiga de esta clase

float hourly_wages; //Definir salarios por hora

public:

staff(char *name,int age,char *add,char *tele,

float hourly_wages); constructor

void print(); //Redefinir la función print()

void insert(); //Redefinir la función insert()

}; /p>

//

lista de clases{ //Definir clase de lista enlazada heterogénea

persona *root //Puntero principal de lista enlazada

public; :

list(){ root=0 } //Constructor de lista vinculada, inicialmente 0

void insert_person(person *node);

void remove(char *name); //Eliminar un nodo de objeto de la lista enlazada

void print_list() //Generar toda la lista enlazada

>};

//

persona::persona(char *nombre,int edad,char *añadir,char *tele)

{ //Constructor de persona

strcpy(persona::nombre,nombre);

strcpy(persona::añadir,añadir

strcpy(persona::tele, tele)

persona::edad=edad;

siguiente=0;

}

void persona::imprimir() // La versión print() de la función miembro virtual de la clase base genera los miembros de datos de la clase base

{

cout<<"\nname: "<

cout<<"edad: "<

cout<<"dirección: "<

cout<<"número de teléfono: "<

}

//

estudiante::estudiante (char *nombre,int edad,char *agregar,char *tele, int nivel,

float grade_point_average):persona(nombre,edad,agregar,tele)

{ // Al constructor de la clase derivada del estudiante se le debe agregar el constructor de la clase base

student::level=level

student::grade_point_average=grade_point_average;

}

void Student::print() //Nueva versión de la función miembro print() de la clase derivada Student

{

persona::print();

cout<<"promedio de calificaciones: "<

}

void; Student::insert()

void Student::insert()

p>

{ //Asigna un objeto de la clase de estudiante al puntero de clase base ptr, que está permitido

ptr=nuevo estudiante(nombre,edad,añadir,tele,nivel,grado_punto_av

edad);

}

//

profesor::profesor(char *nombre,int edad,char *add,char *tele, salario flotante)

:person(name,age,add,tele) //teacher Es necesario agregar el constructor de la clase derivada

//El constructor de la clase base

{

teacher::salary=salary;

}

void teacher::print() //Nueva función miembro print() de derivada Versión del profesor de clase

{

persona::print();

cout<<"salario: "<

}

void profesor::insert()

{ //Asigna un objeto de la clase profesor al puntero de clase base ptr, lo cual está permitido

ptr=nuevo profesor(nombre,edad,añadir,tele,salario

}

//

personal::personal(); char * name,int age,char *add,char *tele, float hourly_wages)

:person(name,age,add,tele) //Es necesario agregar el constructor de la clase derivada del personal

//Constructor de la clase base

{

staff::hourly_wages=hourly_wages

}

void staff; : :print() //Nueva versión de la función miembro print() de la clase derivada staff

{

person::print()

cout<; <" salarios_horas: "<

}

void staff::insert()

{ //Agregar un miembro de la clase de personal El objeto se asigna al puntero de clase base ptr, que está permitido

ptr=new staff(name,age,add,tele,hourly_wages

}

//

void list::insert_person(person *node)

{ //Inserta un objeto en la lista heterogénea enlazada, que puede ser estudiante, profesor o staff

char key[20];

strcpy(key,node->name); //Asigna el nombre del objeto a insertar a key

persona *curr_node=root;

persona *previous=0; //Definir dos punteros de búsqueda

while(curr_node !=0 && strcmp(curr_node->nombre,clave) <0)

{ //Utilice curr_node al frente, anterior al final y la tecla para realizar un bucle para encontrar la posición de inserción, ordenar por nombre

//Las cadenas se ordenan en orden ascendente orden, strcmp(string 1, string 2)<0 significa string 1< String 2, continúa buscando

previous=curr_node

<

p>curr_node=curr_node->next;

}

node->insert(); //Dado que insert() es una función virtual, se ajustará según el objeto. del puntero de nodo

//Utilice diferentes versiones: ptr=new (tabla de variables del miembro de datos),

//Se asignan las variables del miembro de datos por el constructor, por nuevas características: int *s;

// s=new int(20); abrirá espacio y le dará el valor 20, por lo que dice:

//Llamar La función virtual asigna el objeto a insertar a la unidad señalada por ptr

node->ptr->next=curr_node

if(previous= =0) ​​

root=nodo->ptr;

else

anterior->siguiente=nodo->ptr; >// Las tres oraciones anteriores se refieren a ptr El nodo se inserta en la cadena, aquí: nodo->ptr, anterior->ptr,

//curr_node->ptr son todos iguales, es decir , equivalente a person::ptr, lo que indica que ptr está restringido

//El objeto es stu::ptr o tea::ptr o sta::ptr, por lo que node->ptr->next puede ser escrito como

// (nodo->ptr) ->siguiente o persona::ptr->siguiente pero nodo->nombre no se puede escribir como

// persona::nombre , solo puede aparecer en el constructor

}

void list::remove(char *name)

{ //Eliminar un objeto del enlace heterogéneo list y use el nombre de la palabra clave para que coincida con este objeto

person *curr_node=root

person *previous=0

while(curr_node !=0; && strcmp(curr_node->name,name)!=0)

{ //Usa un bucle para encontrar este objeto

previous=curr_node

curr_node; =curr_node->next;

}

if(curr_node!=0 && anterior==0) ​​//Si este objeto es el nodo principal en la lista vinculada

{

root=curr_node->siguiente;

p>

eliminar curr_node

}

else if( curr_node!=0 && anterior!=0) //Este objeto es un nodo no principal en la lista vinculada

{

anterior->next=curr_node->next

eliminar curr_node

}

}

lista vacía::print_list()

{

person *cur=root; //Asigna el puntero principal a cur primero

while(cur!=0) //Recorre el contenido del nodo y mueve el puntero

{

cur->print(); //Según el par señalado por cur

Como diferentes llamadas a diferentes versiones de print()

cur=cur->next

}

}

//

// p>

persona *persona::ptr=0; //Asignar valor inicial a la variable estática

int main()

{

char c ;

list people; //Define el objeto people de la clase de lista y llama al constructor de la lista,

//Es decir, root=0;

estudiante stu ("Liu Ying liuying",20,"Shanghai shanghai","03578395-456",3,80.0

//Definir el objeto); stu de la clase de estudiante y llame al constructor de estudiante al mismo tiempo,

//Es decir, primero use el constructor de persona de la clase base y luego el suyo propio

teacher tea("李明liming",35,"Beijing beijing","0105918695-106",560.50); ​​​​

personal("陈林chenling",40,"Qingdao qingdao","05325895944-335 ",10);

personas.insert_person(&stu);

personas.insert_person(&tea);

personas.insert_person(&sta);

cout<<"¡Fin de la inserción!\n";

people. print_list();

cout<<"\n¡Lo anterior imprime la lista enlazada original! Pulsa c para continuar....";

cin>>c;

people.remove("陈林chenling");

people.remove("李明liming");

people.remove("王袢wangchong" );

cout<<"¡Eliminación completada!\n"; >

people.print_list();

cout<<"\n¡Lo anterior imprime la lista de enlaces atrás eliminados!\n";

}