Escrito en lenguaje c
# incluir ltstdlib.h gt
# incluir ltmalloc.h gt//Utilizar la función de aplicación de memoria malloc() y la memoria función de liberación gratuita().
# include ltstring.h gt//Procesamiento de cadenas
# include ltstdio.h gt//Operación de archivo (leer archivo)
Dirección de estructura/ *Inicio dirección*/
{
ciudad char[10];/*ciudad*/
ciudad char[10];/*condado*/< /p >
char pueblo[10];/*municipio*/
};
número de teléfono de la estructura/*información de contacto*/
{< / p>
char SJ[50]; /*Teléfono móvil*/
char JD[30] /*Teléfono de casa*/
char XD[30];/ *Número de teléfono de la escuela*/
};
Personal de la estructura/*Información personal*/
{
nombre del personaje[20] ; /*Nombre*/
char sex[10]; /*Género*/
Char MZ[16] /*Nacionalidad*/
Verificar ErGJ[17];/*Nacionalidad*/
char XL[19];/*Educación*/
};
Puntuación Estructural//Nivel
{
Número de carácter[20]; //Número de estudiante
char inglés[20];
char chino[20];
char math[20];
charphysics[20];
};
Typedef struct linknode //Definición El tipo de nodo.
{
char dirección[100]; //dirección
char cumpleaños[100]; //fecha de nacimiento
Estructura puntuación sc;//resultado
struct PE; //información personal
struct phone te; //información de contacto
boolean flag;
struct linknode * next
}Tipo de nodo;
Lista de candidatos clasificados según las puntuaciones de las pruebas
{
tipo de nodo * head
Público:
lista();
Lista::~ Lista();
nodo de enlace * crear lista (int) ; //Crear una lista enlazada
int listlen(); //Devuelve la longitud de la lista enlazada
nodetype * findnode(int); //Devuelve el nodo encontrando el puntero de número de secuencia.
nodetype * find(char c[]); //Devuelve el puntero al nodo buscando el nombre.
int find 2(char c[]); //Devuelve el número de serie del nodo buscando el nombre.
nodetype * ins node(int); //Insertar nodo
void delnode(int); //Eliminar nodo
nodetype * load();/ /Inicialización: leer datos desde el exterior.
void readstr(FILE *f, char * string); // Función de lectura de línea
bool check(char *a, char * b); las cuerdas son iguales.
void help(); //Mostrar el menú de ayuda
void edit person(nodetype *); //Editar descripción personal
void edit score(nodetype) * ); //Editar rendimiento académico
void edit phone(nodetype *); //Editar información de contacto
void dispname() //Mostrar los nombres de todos los estudiantes.
void disp node(nodetype * p); //Muestra toda la información de un estudiante.
void disp person(nodetype *); //Muestra la descripción personal del estudiante.
void dispscore(nodetype *); //Muestra el rendimiento académico de los estudiantes.
void disp phone(nodetype *); //Muestra la información de contacto del estudiante.
};
Boolllist:: check (char * a, char * b) // Compara dos cadenas para determinar la igualdad.
{
int I;
int j = strlen(b
for(I = 0; i ltj; i); )
{
Si (*a==*b)
{
a;
b ;
}
Otros
Devuelve 0;
}
Devuelve 1;
}
nodetype * list::creat list(int n)//Crea una lista vinculada.
{
tipo de nodo *h=NULL, *s, *t;
int I = 1
for(int j; = 0; j ltn; j )
{
If(i==1) //Crea el primer nodo.
{
h=(tipo de nodo*)malloc(sizeof(tipo de nodo));
h- gt next = NULL
t = h;
}
De lo contrario // crea los nodos restantes
{
s = (tipo de nodo *)malloc (tamaño de (tipo de nodo));
s- gt; siguiente = NULL
t->; siguiente = s;
t = s; //t Siempre apunta al último nodo de la lista enlazada individualmente generada.
}
i;
}
cabeza = h;
Devolver h;
}
Lista vacía::readstr(FILE *f, char *string)
{
Hacer
{
//①: Lea primero una línea de texto.
fgets(string, 255, f); //fgets(): Lee una cadena de longitud 255-1 del archivo f.
//Y guárdalo en una cadena.
} while((string[0]== '/')| |(string[0]== '\n');
Retorno;
}
tipo de nodo* Lista::carga()
{
ARCHIVO * fp
tipo de nodo * p;
char c[255];
int num
if((fp=fopen("student.txt "," r ")== NULL)
{
cout lt lt"No se puede abrir el archivo"
Devuelve 0;
}
readstr(fp, c );
sscanf(c, "Longitud del enlace: d", ampnum); //Obtener la longitud de la lista enlazada
p = creat list(num); Crear una lista de enlaces
for(int I = 0; i ltnumi)
{
readstr(fp,c);
strcpy(p - gt; dirección, c);
readstr(fp, c
strcpy(p- gt; cumpleaños, c
); readstr(fp, c);
strcpy(p-gt; número de serie, c);
readstr(fp, c); - gt; sc .chino, c);
readstr(fp, c
strcpy(p- gt; sc.inglés, c
readstr(fp, c);
strcpy(p-gt; sc.math, c);
readstr(fp, c); (p- gt ; sc.physics, c);
readstr(fp, c
strcpy(p- gt; pe.name, c
);readstr (fp, c);
strcpy(p-gt; pe.sex, c);
readstr(fp, c); >strcpy(p - gt; P.E. GJ, c);
readstr(fp, c);
strcpy(p- gt; P.E. MZ, c
);readstr(fp, c);
strcpy(p- gt; P.E. XL, c);
readstr(fp, c);
strcpy(p-gt; te. SJ, c); c);
strcpy(p- gt; te. JD, c);
readstr(fp, c);
strcpy(p- gt; te. return p;
}
void list::dispnode(nodetype * p)//Muestra toda la información de un estudiante.
{
if(p!=null)
{
mostrar persona(p);
disp puntuación(p);
disp teléfono(p);
}
}
Lista nula:: dispname() / /Muestra los nombres de todos los estudiantes.
{
tipo de nodo * p = head
cout lt lt"Estudiantes existentes:"
if(p==NULL)
cout lt lt"Sin datos del estudiante"
Y (p!=null)
{
cout lt lt"Nombre: "
p = p- gt; next;
}
}
Int List::listlen() //return La longitud de la lista enlazada.
{
int I = 0;
tipo de nodo * p = cabeza
Y (p!=null)
{
p = p-gt; siguiente;
i;
}
regresar;
}
nodetype * list::findnode(int I)//Devuelve el puntero del nodo al encontrar el número de secuencia.
{
tipo de nodo * p = cabeza
int j = 1;
if (i gtlistlen()| | I lt; =0) // me desbordo o desbordo
Devuelve NULL
Otros
{
Y (p! = NULL amp ampj ltI ) //Encuentra el nodo I-ésimo y apúntalo con p.
{
j;
p = p- gt; siguiente
}
Devuelve p ;
}
}
Nodetype* List::find(char c[]) //Devuelve el puntero al nodo buscando el nombre.
{
tipo de nodo * p = cabeza
int j = 1;
strcat(c, "\n");/ /Todas las cadenas leídas desde fuera tienen un carácter de nueva línea al final.
Y (p! = NULL amp amp! (check (c, p- gt; sports. name)) // Encuentra el nodo I-ésimo y apúntalo con p.
{
j;
p = p-gt;
}
Devuelve p; p >}
Int List::find2(char c[]) //Devuelve el número de serie del nodo buscando el nombre. nodetype * p =. head
int j = 1;
strcat(c, "\n"); //Todas las cadenas leídas desde fuera tienen un carácter de nueva línea al final.
And (p! = NULL amp amp! (check (c, p- gt; sports. name)) // Encuentra el nodo I-ésimo y apúntalo con p.
{
j;
p = p- gt; siguiente
}
Devuelve j ;
}
tipo de nodo* Lista:: insnode(int i)
{
tipo de nodo *h=head, *p, * s;
s =(nodetype *)malloc(sizeof(nodetype));//Crear nodo
s- gt; next = NULL
If ( i==0) //i=0, S es el primer nodo de la lista vinculada.
{
s- gt; next = h;
h = s; //Redefinir el nodo principal
} p>
Otros
{
p = findnode(I); //Encuentra el nodo I y apúntalo con p.
if (p!=null)
{
s- gt; siguiente = p- gt;
p - >; next = s;
}
else cout lt lt "El valor I ingresado es incorrecto"
}
head = h;
Return s;
}
Lista vacía: :delnode(int i) //Eliminar el nodo I.
{
tipo de nodo * h = encabezado, * p = encabezado, * s;
int j = 1
If( i==1) //Eliminar el primer nodo.
{
h = h-gt;
libre(p); Otros
{
p = findnode(I-1); // Encuentra el nodo I-1, p apunta a este nodo.
if (p!= NULL amp ampp->; next!=null)
{
s = p- gt; // s puntos; al nodo que se va a eliminar.
p->; siguiente = s- gt;
Gratis
}
Otros
cout lt lt"El valor I ingresado es incorrecto"
}
head = h;
}
void List: : editar persona(tipo de nodo * p)
{
char c[100];
cout lt lt"Ingrese un nombre:"
CIN gt; gtc;
strcat(c, "\n");
strcpy(p- gt;pe.name, c);
cout lt lt"Ingrese el género:"
CIN gtc;
strcat(c, "\n");
strcpy(p - gt; pe.sex, c);
cout lt lt"Ingrese la fecha de nacimiento (por ejemplo: 1982-1-1):" < endl
CIN gt; gtc;
strcat(c, "\n");
strcpy(p- gt; cumpleaños, c);
cout lt lt" Por favor ingrese Nacionalidad: "
CIN gt;gtc;
strcat(c,"\n");
strcpy(p- gt;p.MZ ,c );
cout lt lt"Ingrese la nacionalidad:"
CIN gt; gtc;
strcat(c, "\n");< /p >
strcpy(p- gt; P.E. GJ, c);
cout lt ltIngrese su nivel educativo: "< ltendl
CIN gt; gtc; p >
strcat(c, "\n");
strcpy(p- gt; P.E.
XL, c);
cout lt lt"Ingrese la dirección de su domicilio (por ejemplo, No. 11 Jiefang Road, ciudad de Yulin, Guangxi)" < ltendl
CIN gtc; ;
p>strcat(c, "\n");
strcpy(p- gt; dirección, c);
cout lt lt"Personal edición de información completada!" lt ltendl
disp person(p);
}
void List::editscore(nodetype* p)
{ p>
char a[50];
cout lt lt"Ingrese su número de estudiante:"
CIN gt;
strcat (a, " \ n ");
strcpy(p- gt; sc.num, a);
cout lt lt"Ingrese la puntuación del idioma: "
CIN gt; gta;
strcat(a, "\n");
strcpy(p- gt; sc. chino, a);
cout lt lt"Ingresa tu puntuación en inglés:"
CIN gt;
strcat(a, "\n");
strcpy(p- gt;sc.english,a);
cout lt lt"Ingrese su puntaje de matemáticas:"
CIN gta;
strcat(a, " \ n ");
strcpy(p- gt; sc.math, a);
cout lt lt"Ingrese su puntuación de física. :"
CIN gt; gta;
strcat(a, "\n");
strcpy(p- gt;Ciencia Física a);< /p >
cout lt lt"Edición de puntuaciones de materias completada!" lt ltendl
disp score(p);
}
void List:: editar teléfono (tipo de nodo * p)
{
char c[50];
cout lt lt"Ingrese su número de teléfono móvil:"
CIN gt;gtc;
strcat(c, "\n");
strcpy(p- gt;te. SJ, c);
cout lt lt"Ingrese el número de teléfono de su casa:"
CIN gt; gtc;
strcat(c, "\ n ");
strcpy(p- gt; te. JD, c);
cout lt lt"Ingrese el número de teléfono de la escuela: "
CIN gt; gtc;
strcat(c, "\n");
strcpy(p- gt;te.
XD, c);
cout lt lt"¡Edición de la información de contacto completada!" p>Lista vacía: :disp persona(tipo de nodo * p)
{
cout lt lt"Nombre:"
cout lt lt"Género:"
cout lt lt"Nacionalidad:"
cout lt lt"Nacionalidad:"
cout lt lt"Educación:"
cout lt lt"Fecha de nacimiento:"
cout lt lt"Dirección de casa:"
}
void List:: dispscore(nodetype* p)
{
cout lt lt"Número de estudiante:"
cout lt lt"Logros de China:"
cout lt lt"Puntuaciones en inglés:"
cout lt lt"Puntuación de Matemáticas:"
cout lt lt"Puntuación de Física:"
}
void List:: disp phone(nodetype * p)
{
cout lt lt"El número de teléfono móvil es: "
cout lt lt" El número de teléfono de casa es"
cout lt lt"El número de teléfono de la escuela es"
}
void List:: help()
{
cout lt ltendl ltltendl
cout lt lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * lt; ltendl
cout lt lt" 1: Editar información personal"
cout lt lt"2. Editar resultados académicos"
cout lt lt" 3: Editar información de contacto"
cout lt lt" 4: Mostrar información personal"
cout lt lt"5: Mostrar logros académicos"
cout lt lt" 6: Mostrar información de contacto"
cout lt lt" 7: Mostrar toda la información sobre el alumno "
cout lt lt" 8: Menú de ayuda "
cout lt lt" 9: Volver al menú anterior "
cout lt lt" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * lt; ltendl
}
Lista::~list()
{
tipo de nodo *pa=cabeza, *pb
Si (¡pop! = vacío)
{
Pb = pa- gt; next;
if(pb==NULL)
Gratis ( pa );
Otros
{
Y (pb!=null)<
/p>
{
Gratis (pa);
pa = pb
Pb = p B- gt;
}
Gratis(pa);
}
}
}
Operador de clase p>
{
Lista l 1;
Público:
void Loop(); //Bucle principal
void display(); //Mostrar menú
};
Lista::List()
{
head = NULL p>
}
Operador nulo: display()
{
cout lt ltendl lt ltendl
cout lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *" p>
cout lt lt" 1: Agregar información de un estudiante"
cout lt lt" 2: Eliminar información de estudiante"
cout lt lt" 3: Mostrar los nombres de todos los estudiantes "
cout lt lt" 4: Mostrar toda la información de un solo estudiante por nombre "
cout lt lt" 5: Editar un solo estudiante por nombre" p >
cout lt lt" 6: Menú Ayuda"
cout lt lt" 7: Guardar datos"
cout lt lt" 0: Salir del sistema"
cout lt "* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *" ltendl
}
Operador void: : Loop()
{
Lista l 1; //Objeto de lista
char ch[20];
tipo de nodo *p , * head
int I; // Número de serie del nodo de almacenamiento
p = l 1. load(); //Inicialización: leer datos desde el exterior y crear una lista vinculada.
cabeza = p;
display();
mientras(1)
{
cout lt ltendl lt ltendl
cout lt "Ingrese una opción (opción de ayuda - gt; 6):" lt; ltendl
CIN gtch;
/ ///system(" cls ");
if(L1.check(ch, " 1 "))
{
p = l 1 . ins nodo(0);
head = p;
//system(" cls ");
cout lt ltendl
cout lt "* * * * * * * * * * * * * *Agregar información del estudiante* * * * * * * * * * * * * * *" < endl
cout lt; lt"Ingrese su información personal a continuación:"
l 1. editar persona(p);
cout lt lt"Ingrese las puntuaciones de sus materias a continuación:"
l 1. editar puntuación(p);
cout lt lt"Ingrese la información de contacto a continuación:"
l 1. editar teléfono(p);
}
if(L1.check(ch, " 2 "))
{
//system(" cls ");
cout lt ltendl
cout lt lt"* * * * * * * * * * * * * * *Eliminar la información de un estudiante* * * * * * * * * * * * * * * * * *"< lt;endl
l 1. dispname();
cout lt lt"Ingrese el nombre del estudiante:"
CIN gt ; gtch;
I = l 1 . encontrar 2(ch);
l 1 . (L1.check(ch, " 3 "))
{
//system(" cls ");
cout lt ltendl
cout lt lt* * * * * * * * * * * * * * * * Mostrar los nombres de todos los estudiantes* * * * * * * * * * * * * "
l 1. dispname();
}
if(L1.check(ch, "4"))
{
/ /system(" cls ");
cout lt ltendl
cout lt lt"* * * * * * * * * * * * * * * Muestra el nombre de un solo estudiante según en su nombre Toda la información * * * * * * * * * * * * * * * * < lt;endl
l 1. dispname();
cout lt lt" Por favor ingrese el nombre del estudiante: "
CIN gt; gtch;
p = l 1 . find(ch);
l 1
.disp nodo(p);
}
if(L1.check(ch, " 6 "))
{
. Display();
}
If(L1.check(ch, " 7))//Guardar los datos.
{
ARCHIVO * fp
if((fp=fopen("student.txt "," w ")= = NULL)
{
cout lt lt "No se puede abrir el archivo"
Return;
}
int I;
char t[255];
//Asigne L1.listlen() al número en la cadena
sprintf(t, "Longitud del enlace: d\n ", l 1. listlen()); p >
fputs(t, FP);
strcpy(t, "\n");
fputs(t, FP);
p = l 1 . findnode(1); // Apunta el puntero principal a
for(I = 0; i ltl 1 . listlen(); i )
{
fputs(p- gt; dirección, FP); //Dirección de salida
fputs(p- gt; cumpleaños, FP); //Salida de cumpleaños
fputs(p- gt;sc.num, FP); //Número de estudiante de salida
fputs(p- gt; sc.chinese, FP); //Puntuación de idioma de salida
fputs(p- gt; sc.english, FP); //Salida de puntuaciones en inglés
fputs(p- gt; sc.math, FP); //Salida de puntuaciones de matemáticas
fputs(p- gt; sc.physics, FP); //Puntuaciones de física de salida
fputs(p- gt; pe.name, FP); //Nombre de salida
fputs (p- gt; pe.sex, FP); // Género de salida
fputs(p- gt; PE. GJ, FP); // Nacionalidad de salida
fputs( p - gt; PE. MZ, FP); //Exportar nacionalidad
fputs(p- gt; PE. XL, FP); //Exportar calificaciones académicas
fputs(p). - gt ; te. SJ, FP); // salida de teléfono
fputs(p- gt; te. JD, FP); //Número de teléfono residencial de salida
fputs(p-gt;te.
XD, FP); // Genera el número de teléfono de la escuela
fputs(t, FP
p = p- gt; p>
p = cabeza;
fclose(FP);
}
if(L1.check(ch, " 5 ") )
{
char c[20];
//system(" cls ");
cout lt ltendl p>
cout lt lt"******************Editar estudiantes individuales según el nombre* * * * * * * * * * * * * * * * * * * * * *" lt ; ltendl
l 1. dispname();
cout lt lt"Ingrese el nombre del estudiante:"
CIN gt; gtc;
p = l 1 . buscar(c);
//system(" cls ");
cout lt ltendl lt ltendl
cout lt lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * lt; ltendl
cout lt lt" 1: Editar información personal"
cout lt lt"2. Editar resultados académicos"
cout lt lt " 3: Editar información de contacto"
cout lt lt" 4: Mostrar información personal"
cout lt "5: Mostrar logros académicos"
cout lt lt" 6: Mostrar información de contacto"
cout lt lt" 7: Mostrar toda la información sobre el estudiante"
cout lt lt" 8: Menú de ayuda"
cout lt lt" 9: Volver al menú anterior"
cout lt lt"* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * lttendl
mientras(1)
{< /p >
cout lt ltendl lt ltendl
cout lt lt"Ingrese una opción (opción de ayuda - gt; 8):" lt; ;
//system(" cls ");
if(L1.check(c, " 1 "))
{
//system(" cls ");
cout lt ltendl
cout lt lt"* * * * * * * * * * * * * * Editar información personal* * * * * * * * * * * * * * < lt;endl
l 1. editar persona(p);
}
si no (L1 .check(c, " 2 "))
{
//sistema
(" cls ");
cout lt ltendl
cout lt lt"* * * * * * * * * * * * * * * * * * * Logros académicos de la departamento editorial* * * * * * * * * * * *"< lt;endl
l 1. editar partitura(p);
}
else if( L1.check(c, " 3 "))
{
//system(" cls ");
cout lt ltendl p>
cout lt lt"* * * * * * * * * * * * * *Información de contacto del editor* * * * * * * * * * * * * * * * *"< lt;endl p>
l 1. editar teléfono(p);
}
else if(L1.check(c, "4"))
{ p>
//system(" cls ");
cout lt ltendl
cout lt "* * * * * * * * * * * * * *mostrar información personal * * * * * * * * * * * * * *"
l 1. disp persona(p);
}
else if (L1.check(c, " 5 "))
{
//system(" cls ");
cout lt ltendl p>
cout lt lt"* * * * * * * * * * * * * * * *Mostrar rendimiento académico* * * * * * * * * * * * < lt;endl
l 1. puntuación disp(p);
}
else if(L1.check(c, "6"))
{
//system(" cls ");
cout lt ltendl
cout lt "* * * * * * * * * * * * * * * * * * * Mostrar información de contacto * * * * * * * * * * * * * *"< lt; endl
l 1. disp phone(p);
} p>
else if(L1.check(c, " 7 "))
{
//system(" cls ");
l 1 . disp nodo(p);
}
else if(L1.check(c, "8"))
{
//system(" cls ");
l 1. ayuda();
}
else if(L1.check(c, " 9 "))
{
Display();
Break; //Utiliza break para saltar de este bucle sin regresar, lo que significa salir del programa.
}
}
}
else if(L1.check(ch, " 0 "))
Retorno;
}
Retorno;
}
int main()
{ p>
Sistema("Color 3A");
Operador chp
CHP. loop();
Devuelve 0;
}
Definitivamente funciona.