Red de conocimiento informático - Conocimiento informático - 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

Docentes: 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 lt;iostream.hgt;

#include lt;string.hgt

#include lt;conio.hgt; >

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); p>virtual void print(); //Descripción de la función virtual

virtual void insert(){} //Definir la función virtual y no hacer nada, solo definir una interfaz

} ;

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

lista de clases de amigos // Clase de lista vinculada 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 level,

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 enlazada sirve como amiga de esta clase

salario flotante; //Definir salario

public:

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

//Declarar el constructor

void print (); función print()

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

}

//

clase staff: public person{ // Clase derivada staff

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

float hourly_wages // Definir salarios por hora

p>

publi

c:

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

float hourly_wages); //Declarar el constructor

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

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

};

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

persona *root; //Puntero de encabezado de lista

público:

lista (){ root=0 } //Constructor de lista vinculada, el valor inicial es 0

void insert_person(person *node); //Inserta un nodo de objeto en la lista vinculada

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 *add, char *tele)

{ //Constructor de persona

strcpy (persona::nombre, nombre);

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

strcpy(persona::tele,tele

);

persona::edad=edad;

next=0;

}

void persona::print() //Función miembro virtual de la base versión de clase print(), salida de miembros de datos de clase base

{

coutlt;lt;"\nname: "lt;lt;namelt;lt;"\n"

coutlt;lt;"age: "lt;lt;agelt;lt;"\n";

coutlt;lt;"dirección: "lt;lt;addlt;lt;" \n" ;

coutlt;lt;"número de teléfono: "lt;lt;tellt;lt;lt;"\n";

}

//

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

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

float grade_point_average)

p>

{ //student Al constructor de la clase derivada 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 () del estudiante de clase derivada

{

persona::print()

coutlt;lt;"promedio de calificaciones: "lt;lt;grade_point_

Averagelt;lt;"\n";

}

void Student::insert()

{ //Asignar un objeto de la clase de estudiante a ptr. Puntero de clase base, esto está permitido

ptr=nuevo estudiante(nombre, edad, agregar, tele, nivel, promedio_calificación

}

// <); /p>

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

:persona(nombre, edad, agregar, tele) // profesor Al constructor de la clase derivada se le debe agregar

//Constructor de la clase base

{

teacher::salary=salary

}

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

{

persona: :print ();

coutlt;lt;"salario: "lt;lt;salarylt;lt;"\n";

}

vacío profesor :: insert()

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

ptr=new profesor(nombre, edad, agregar, tele, salario);

}

//

staff::staff(char *nombre, int edad, char *add, char *tele, float) salarios_horas)

:persona(nombre, edad, agregar, tele) //personal Es necesario agregar el constructor de la clase derivada

//El constructor de la clase base

//El constructor de la clase base

{

staff::hourly_wages=hourly_wages;

}

void staff::print() //La función miembro print() del personal de clase derivada es la nueva versión

{

person::print()

coutlt;lt;"hourly_wages: "lt;lt;hourly_wageslt; ;lt;"\n" ;

}

void staff::insert()

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

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

}

//

lista vacía: :insert_person(persona *nodo)

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

char key [20];

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

person *curr_node=root

p>

p>

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

while(curr_node !=0 amp; amp; strcmp(curr_node-gt; name, key)lt; 0) < / p>

{ //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, strcmp (cadena 1, cadena 2)lt; 0 significa cadena 1lt; cadena 2, continúa buscando

previous=curr_node

curr_node=curr_node-gt; >}

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

//Usar diferentes versiones: ptr=new lt; tres clases derivadas Uno de los nombres es gt; (tabla de variables del miembro de datos),

//Las variables del miembro de datos son asignadas por el constructor, usando el nuevo atributo: int *s;

// s =new int(20); abrirá espacio y le dará el valor 20, entonces:

//Llame a la función virtual para asignar. el objeto que se insertará en la unidad señalada por ptr

node-gt;ptr-gt;next=curr_node

if(previous==0) ​​​​

root=node-gt;ptr;

else

anterior-gt; next=node-gt; tres oraciones insertan el nodo señalado por ptr en la cadena, aquí: node-gt; ptr, anterior -gt;ptr,

//curr_node-gt;ptr son todos iguales, es decir, equivalentes a person::ptr indica que ptr está restringido

//El objeto es stu: :ptr o tea::ptr o sta::ptr, por lo que node-gt;ptr-gt;next se puede escribir como

// (node-gt;ptr)-gt;next o persona::ptr -gt;siguiente pero node-gt;el nombre no se puede escribir como

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

}

void list::remove(char *name)

{ //Eliminar un objeto del lista enlazada heterogénea Este objeto coincide con el nombre de la palabra clave

person *curr_node=root

person *previous=0; 0 amp; amp; strcmp(curr_node-gt; nombre, nombre)!=0)

{ //Utiliza un bucle para encontrar este objeto

previous=curr_node

curr_node=curr_node-gt; next;

}

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

{

root=curr_node-gt; next

eliminar curr_node

}

p>

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

{

previous-gt; =curr_node -gt; siguiente;

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-gt; print(); //Llama a diferentes versiones de print() según el objeto señalado por cur

cur=cur -gt ;siguiente;

}

}

//

persona *persona::ptr=0; variables Valor inicial

int main()

{

char c;

lista de personas //Definir el objeto de la lista; clase, al mismo tiempo, se llama al constructor de la lista,

// Es decir, root=0

student stu("Liu Ying liuying", 20, "Shanghai shanghai ", "03578395-456", 3, 80.0);

//Defina el objeto stu de la clase de estudiante y llame al constructor del estudiante al mismo tiempo,

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

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

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

people.insert_person(amp;stu

);

people.insert_person(amp;tea);

people.insert_person(amp;sta);

coutlt;lt;"¡Fin de la inserción!\n"; p>

people.print_list();

coutlt; "\n¡Lo anterior imprime la lista enlazada original! Presione c lt; Ingrese gt; Continuar..."; >

cingt; gt;

personas.remove( "陈林chenling");

personas.remove("李明liming");

people.remove("王迢wangchong");

coutlt;lt;"¡Eliminación completa!\n";

people.print_list();

coutlt;lt;"\n¡Lo anterior imprime la lista enlazada eliminada!\n"

return 0;