Diseño del curso C++
"Diseño del curso C++"
Título del diseño del curso: Sistema de gestión del desempeño del estudiante
Clase del estudiante: *****
Estudiante Nombre: *****
ID del estudiante: *****
(2) Análisis de funciones y requisitos del sistema de gestión del desempeño del estudiante
Entrada de desempeño del estudiante , estadísticas, consulta, modificación, eliminación y salida. Dibujar un diagrama de estructura funcional.
(3) Tabla de estructura de datos del sistema de gestión del desempeño de los estudiantes
Número de serie nombre de miembro (nombre de campo) Tipo de datos longitud significado del campo
1 class_0 char 20 class
2 num int número de estudiante
3 nombre char 8 nombre
4 elec flaot tecnología electrónica
5 c_prog float programación en C p> p>
6 medios flaot tecnología multimedia
7 eng float inglés universitario
8 matemáticas flotantes matemáticas avanzadas
9 deportes flotantes deportes universitarios
p>
10 flotación política Economía política marxista
11 puntuación promedio flotante
12 ranking int de orden
(4) Datos de prueba del sistema de gestión del desempeño de los estudiantes Tabla
class_0 num nombre elec c_prog media eng matemáticas deporte política ave orden
Red 30331 3033101 Ma Yunfei 80 70 60 70 70 60 80 El resto de los datos de la tabla están compuestos por mi cuenta.
(5) Usar listas enlazadas para escribir programas (escribir código fuente a mano y dar comentarios)
0) Definir nodos de listas enlazadas
1) Función principal main ( ): Defina el puntero principal de la lista vinculada, llame a entradas, estadísticas y otras funciones para procesar la tabla de puntuación.
2) Establezca la función de lista vinculada Crear (): ingrese información de puntuación de clase a clase política;
3) Función estadística Statistic(): Calcula la calificación promedio
4) Función de consulta Lookup(): Consulta los registros de calificaciones de los estudiantes con números de estudiantes específicos
;5) Función de modificación Modificar(): Modifica el registro de puntuación del estudiante con el número de estudiante especificado.
6) Función de eliminación Eliminar(): Elimina el registro del estudiante con el número de estudiante especificado; ;
7) Función de salida Salida(): Genera el registro de puntuación de todos los estudiantes de la clase.
8) Función de inserción Insertar(): Inserta nuevos nodos en orden de puntuación promedio.
9) Función de clasificación Sort(): ordena los elementos del registro de desempeño de los estudiantes en orden descendente según la puntuación promedio.
El programa es el siguiente:
#include; #include #include #include #include usando el espacio de nombres std; struct Node//Definir nodo de lista enlazada { char* class_0; //Clase int número; char* nombre;//nombre float elec;//puntuación de tecnología electrónica float c_prog;// Puntaje de programación en C float media;// Puntaje de tecnología multimedia float eng;// Puntaje de inglés universitario float math;// Avanzado puntuación de matemáticas deporte flotante;//puntuaciones de deportes universitarios política flotante;//puntuaciones de economía política marxista ave flotante;//puntuaciones promedio int orden;//clasificación Nodo* link; Nodo(){link=NULL;} Nodo(int _number,char * _class_0,char* _name,float _elec, float _c_prog,float _media,float _eng,float _math, float _sport,float _polity,float _ave,int _order,Node* siguiente ) { número=_número; clase_0=nuevo carácter[21]; strcpy(clase_0,_clase_0); nombre=nuevo char[9]; strcpy(nombre,_nombre); elec=_elec; c_prog=_c_prog media=_media; eng=_eng; math=_math; sport=_sport; polity=_polity; ave=_ave; orden=_order; enlace=siguiente; } ~Nodo() { eliminar []clase_0; eliminar []nombre; } p > }; clase StudentScore { privado: Nodo* primero;//Puntero principal del lista vinculada int Choice;//Elija cómo leer los datos int fileNum;//Reste uno del número de archivo actual int fileLoc;// Localice el archivo actual string* fileName; int operChoice; int RecordLength; público: StudentScore(); void Save(); void BuildList(); //Crear manualmente una lista de calificaciones void ReadInfo(int k);//Leer la información del estudiante de la memoria void ClearList(); void Statistic ( ); void Sort(); void Add(); void Delete(); void PrintList(); void Menu(); }; StudentScore::StudentScore() { RecordLength =0; operChoice=0; primero=NULL; elección=0; fileLoc=0; fileNum=0; fileName=new string[10];//Puede almacenar hasta 10 archivos } int GetOrder ( Nodo* primero,float ave); void StudentScore::BuildList() { int _number;//número de estudiante char* _class_0=new char[21];//class char* _name=new char[9];//name float _elec;//puntuación de tecnología electrónica float _c_prog;//Puntuación de programación en C float _media;//Puntuación de tecnología multimedia float _eng;//Puntuación de inglés universitario float _math;//Puntuaciones de matemáticas avanzadas float _sport;//Puntuaciones de deportes universitarios float _polity;//Puntuaciones de economía política marxista float _ave ;//Puntuación promedio int _order;//Ranking char c; Nodo *p,*r=NULL; first=NULL; cout<<"¿Quieres ingresar información de calificaciones del estudiante?"< while((c=getchar())=='n '); while(tolower(c)!='n') { cin>>_class_0;//clase cin>>_número; cin>>_nombre;//nombre cin>>_elec; cin>>_c_prog; cin>>_media; cin>>_eng; cin>>_math; cin>>_sport; cin>>_polity; _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//Obtener la puntuación media > _order=GetOrder(first,_ave); p=new Node(_number,_class_0,_name,_elec, _c_prog,_media,_eng,_math,_sport,_polity, _ave,_order,NULL);//Crea un nuevo nodo para almacenar información if(first!=NULL) r->link=p ; else first=p; r=p; RecordLength++; cout<<"Quieres ingresar información de calificaciones del estudiante ?"< while((c=getchar())=='n'); } } int GetOrder(Node* first, float ave)//Hay un problema grave con el registro de clasificación { int order=1; Nodo* temp= primero; for(;temp;temp=temp->link) { if(temp->ave>ave) orden++; if(temp ->ave } devolver pedido; } void StudentScore ::Statistic() { Node* temp=first; float a_elec=0.0;//Resultados de tecnología electrónica float a_c_prog=0.0;//Puntuación de programación C float a_media=0.0;//Puntuación de tecnología multimedia float a_eng=0.0;//Puntuación de inglés universitario p> float a_math=0.0;//Puntuaciones de matemáticas avanzadas float a_sport=0.0;//Puntuaciones de deportes universitarios float a_polity=0.0;//Puntuaciones de economía política marxista int i=0; while(temp) { a_elec+=temp->elec; a_c_prog+=temp->c_prog; a_media+=temp->media; a_eng+=temp->eng; a_math+=temp->matemáticas a_sport+=temp->deporte; a_polity+=temp->polity; i++; temp=temp-> enlace ; } a_elec=a_elec/i; a_c_prog=a_c_prog/i; a_media=a_media/i; a_eng=a_eng/i; a_math=a_math/i; a_sport=a_sport/i; a_polity=a_polity /i; cout<<"Tecnología electrónica La nota media es: "< cout<<"La nota media de programación en c es: "< cout<< "Multimedia La puntuación técnica media es: "< cout<<"La puntuación media en inglés es: "< cout< <"Matemáticas Avanzadas La puntuación media en deportes es: "< cout<<"La puntuación media en deportes es: "< cout<<"La puntuación media en política es: "< } void StudentScore::Delete() { int studNum; Nodo* p; Nodo* temp=first; cout<<"Por favor, introduzca el estudiante número a eliminar"< cin>>studNum; promedio flotante; for(;temp;temp=temp->link) { cout< if(temp->número==studNum) { p> promedio=temp->ave ; if(temp==first)//Significa que es la primera vez { first=first->link; eliminar temp; break;//Si no saltas, temp=temp->link generará un error } más { p->link=temp->enlace; eliminar temporal; descanso; } } p=temp; RecordLength--; } //Modificar las clasificaciones de los estudiantes a continuación temp=first; for(;temp;temp=temp->link) if(temp->ave } void StudentScore::Add() { p> int _number;//número de estudiante char* _class_0=new char[21];//Clase char* _name=new char[9];/ /Nombre float _elec;//Puntuaciones de tecnología electrónica p> float _c_prog;//Puntuación de programación C float _media;//Puntuación de tecnología multimedia float _eng;//Puntuación de inglés universitario float_ma th;//Puntuaciones de matemáticas avanzadas float _sport;//Puntuaciones de deportes universitarios float _polity;//Puntuaciones de economía política marxista float _ave; Puntuación media int _order;//Ranking char c; Nodo *p,*r=NULL; r= primero; while(r->link) r=r->link; // first=NULL; cout<<"¿Quieres ingresar información de calificaciones del estudiante?"< while((c=getchar())=='n'); while( tolower(c)!='n') { cin>>_class_0;//clase cin>>_number; cin>>_name;//Nombre cin>>_elec; cin>>_c_prog; cin>>_media; cin>>_eng; cin>>_math; cin>>_sport; cin>>_polity; _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity)/7;//Obtener la puntuación media //Escribir un programa que devuelva el ranking _order =GetOrder(first,_ave); p=new Node(_number,_class_0,_name,_elec, _c_prog,_media,_eng,_math,_sport,_polity, p > _ave,_order,NULL);//Crea un nuevo nodo para almacenar información if(first!=NULL) r->link=p; else first=p; r=p; RecordLength++; cout<<"¿Desea ingresar información de calificaciones del estudiante? ?" < while((c=getchar())=='n'); } } void StudentScore::Sort()//Clasificación de burbujas simple desde puntaje alto a puntaje bajo { int i=0; Node* temp = primero; Nodo* antes; // Nodo* p=primero; for(;temp->link;) { if(temp->ave { if(temp==first)//El la descripción es El primer nodo { first=first->link; // p=temp; // temp =temp->enlace; > temp->enlace=temp->enlace->enlace; primero->enlace=temp; antes=primero; } else//No es el primer nodo { before->link=temp->link; temp->link= temp- >enlace->enlace; antes->enlace->enlace=temp; antes=antes->enlace; } } else { temp=temp->enlace; } i++; //Número de cálculos } for(;i>0;i--) { temp=first ; for(int j=0;j { if(temp->ave { cout<<"small!"< if(temp==first)//La descripción es el primer nodo p> { primero=primer->enlace; // p=temp; // temp=temp->enlace ; temp->enlace=temp->enlace->enlace; primero->enlace=temp; antes=primero; } else//no es el primer nodo { before->link=temp->link; temp ->enlace=temp->enlace->enlace; antes->enlace->enlace=temp; antes=antes->enlace; } } else { temp=temp->enlace; } } } } /* bool IsSorted(Nodo* primero) { for(;first;first=first->link) if(first->ave return true; }*/ void StudentScore::PrintList()//Imprimir programa de lista enlazada { cout<<"La lista contiene:"< Nodo* temp= primero; for(;temp;temp=temp->link) { cout< cout< } } void StudentScore::ClearList()//Borrar la lista enlazada { Node* p=new Node; while(first) { p=first->enlace; eliminar primero; first=p; } } //Función de lectura void StudentScore::ReadInfo(int k)//Lee la información del késimo archivo y guárdalo en la lista vinculada { // int wordLength;//Longitud de la subsección del registro int _number;//Número de estudiante char* _class_0=new char[ 21];// Clase char* _name=new char[9];//Nombre float _elec;//Puntuación de tecnología electrónica float _c_prog ;//Puntuaciones de diseño de programas C float _media;//Puntuaciones de tecnología multimedia float _eng;//Puntuaciones de inglés universitario float _math;//Avanzado puntuaciones de matemáticas float _sport;//puntuaciones de deportes universitarios float _polity;//puntuaciones de economía política marxista float _ave;//puntuaciones promedio int _order;//clasificación Nodo *p,*r=NULL; first=NULL; ifstream Infile(fileName[k ].c_str ()); if(!Infile) { cout<<"¡el archivo no está presente!"< return; } Infile>>RecordLength; cout< for(int i =0; i { Infile>>_class_0;//clase // cout<<_class_0; Infile>>_number; Infile>>_name;//nombre Infile>>_elec; Infile>>_c_prog; Infile>>_media; Infile>>_eng; Infile>>_math; Infile>>_sport; Infile >> _polity; Infile>>_ave; Infile>>_order; _ave=(_elec+_c_prog+_media+_eng+_math+_sport+_polity) /7;//Obtener la puntuación media //Escribir un programa para devolver la clasificación _order=GetOrder(first,_ave); p= new Node(_number,_class_0,_name,_elec, _c_prog,_media,_eng,_math,_sport,_polity, _ave,_order,NULL);//Crear un nuevo nodo Haga clic para guardar información if(first!=NULL) r->link=p; else first=p; r=p; } } void StudentScore::Save() { string tempName; cout<<"Ingrese el nombre del archivo que se guardará:"< //Para determinar si tiene el mismo nombre que un archivo existente file cin>>tempName; ofstream savefile(tempName.c_str());//Hacer una conversión Node* temp=first; p> archivo guardado < for(;temp;temp=temp->link) { archivo guardado<< temp->clase_0<< " "< < < } savefile.close (); //Leer información de la tabla de archivos ifstream Readfileinfo("FileRecord.txt"); Readfileinfo>>fileNum; for(int i=0;i Readfileinfo>>fileName[i]; Readfileinfo.close(); fileNum++; fileName[i]=tempName; //Modificar la información de la tabla de archivos ofstream changefile("FileRecord.txt"); changefile< for(i=0 ;i cambiararchivo< cambiararchivo.close(); } void StudentScore::Menu() { cout<<"Por favor, elija cómo leer los datos:"< cout <<"(1) Crear manualmente una nueva tabla de datos"< cout<<"(2) Leer datos del archivo"< cout< <"Por favor seleccione:"; cin>>elección; if(choice==1) { BuildList( ); } if(choice==2) { cout<<"Actualmente existen para los siguientes archivos , elija leer el archivo: "< ifstream fileRecord("fileRecord.txt"); if(!fileRecord) { cout<<"fileRecord no está presente!"< return; } fileRecord>>fileNum; cout<<"Actualmente hay archivos "< for(int i=0;i { fileRecord>>fileName[i]; cout< }< / p> cout<<"Por favor seleccione un archivo:"; cin>>fileLoc; ReadInfo(fileLoc-1); PrintList (); } cout<<"Por favor seleccione la operación que necesita:"< cout<<"(1) Estadísticas de puntuaciones de los estudiantes en varias materias"< cout<<"(2) Eliminar el registro de puntuación de un estudiante"< cout<<"(3) Agregar Registro de puntuación de un determinado estudiante"< cout<<"(4) Ordenar todos los registros de puntuación de los estudiantes en la lista vinculada"< cin>>operChoice; if(operChoice==1) Estadística(); if(operChoice==2) Eliminar( ); if(operChoice==3) Agregar(); if(operChoice==4) Ordenar( ); Guardar(); Borrar Lista(); } int main() { cout<<"////////////////////////////////////"<< endl ; cout<<"¡Bienvenido al sistema de gestión del desempeño estudiantil!"< cout<<"///////////// // ////////////////////"< cout< cout< StudentScore s; s.Menu(); devuelve 0; }