[Diseño final del curso] Sistema de gestión del desempeño estudiantil

Porque es único, porque siempre es igual.

Directorio de artículos

1. Introducción al sistema de gestión del desempeño estudiantil.

2. Ideas de diseño del sistema de gestión del desempeño estudiantil.

3. Código fuente

1. prueba.c 

2. Sistema de gestión de estudiantes.c

3.Stu_System.c

4.Profesor.c

5.Sistema de Gestión de Estudiantes.h  


Prefacio:

El sistema de gestión del desempeño de los estudiantes incluye un portal de inicio de sesión para maestros y un portal de inicio de sesión para estudiantes, que pueden agregar, eliminar, buscar, clasificar, guardar, etc., información de los estudiantes.

1. Introducción al sistema de gestión del desempeño estudiantil.

El proyecto está dividido en 5 archivos, 4 archivos fuente .c y 1 archivo de encabezado .h

El marco general de la implementación del proyecto test.c        y la interfaz de inicio de sesión inicial del sistema de gestión de puntuaciones, etc.

Student Management System.c        realiza la interfaz de inicio de sesión del sistema docente y del sistema estudiantil y la inicialización de los datos de los miembros del sistema.

Stu_System.c        implementa funciones relacionadas, como el sistema de inicio de sesión de estudiantes

Teacher.c        implementa funciones relacionadas, como el sistema de inicio de sesión de profesores

Student Management System.h        almacena varios archivos de encabezado en el proyecto, variables constantes definidas por #define, funciones, declaraciones de estructura, etc.

Se recomienda utilizar un entorno de traducción que integre compilación y vinculación. 

Entorno recomendado:

Compiladores C/C++ como Visual Studio 2017 o superior, Dev-C++, Visual Studio Code, etc.

Introducción al sistema de gestión del desempeño estudiantil

  El sistema de gestión del desempeño tiene dos entradas de inicio de sesión, divididas en entrada de docentes y entrada de estudiantes.

  La información de calificaciones de un estudiante incluye: nombre del estudiante, edad, sexo, número de estudiante, especialización y grado.

  El sistema de profesores puede agregar información de los estudiantes, eliminar información de los estudiantes, consultar información de los estudiantes y ver la clasificación general de los estudiantes; el sistema de estudiantes puede ver la información ingresada de los estudiantes, clasificaciones, etc. Cada vez que un profesor agrega un estudiante, después de salir del sistema de gestión del desempeño del estudiante, el programa guardará automáticamente la información del estudiante como un archivo txt en forma de texto binario. Parte o toda la información del estudiante se elimina permanentemente.

Interfaz de operación del sistema de gestión del desempeño estudiantil

2. Ideas de diseño del sistema de gestión del desempeño estudiantil.

  En primer lugar, necesitamos encapsular una interfaz del sistema. Esto es relativamente simple. Solo necesita controlar el espaciado y puede usar printf para lograrlo. Luego use la instrucción switch...case para seleccionar si el maestro inicia sesión. o el estudiante inicia sesión y usa el bucle do... while para encapsularlo y garantizar que el sistema se pueda usar varias veces; en el sistema del profesor y en el sistema del estudiante, declaraciones de selección de casos similares a printf, switch... y do. ... Los bucles while también se utilizan para realizar las funciones de selección correspondientes.

  El segundo es inicializar el sistema del estudiante. Para ahorrar memoria y maximizar la eficiencia operativa del sistema, el proyecto utiliza un método de administración de memoria dinámica. Al inicializar, la función de memoria dinámica se usa para abrir tres espacios para estudiantes. Posteriormente, a medida que aumenta el número de estudiantes, cuando el espacio del sistema esté lleno, abra dos espacios más para estudiantes y continúe abriendo después de que esté lleno, y así sucesivamente, solo abra dos espacios más para estudiantes cada vez. El uso de la administración de memoria dinámica aquí puede evitar el desperdicio excesivo de memoria.

  A continuación, el profesor ingresa información, elimina estudiantes, etc. Puede usar directamente la función scanf para ingresar la información. Para eliminar la información del estudiante, primero debe buscar al estudiante, por lo que debe empaquetar una función separada para buscar la información del estudiante por el nombre del estudiante, lo cual también es conveniente para su uso posterior. al verificar la información del estudiante, después de encontrar al estudiante, use el estudiante Sobrescríbalo con los datos del siguiente estudiante, y luego sobrescriba la información anterior con la entrada posterior, y finalmente reduzca el número de estudiantes en 1. La sobrescritura aquí puede ser completado usando la función memset .

  También existe una función de clasificación de las calificaciones de los estudiantes, y las clasificaciones deben mostrarse en las clasificaciones del sistema de profesores y del sistema de estudiantes. Debido a que la información del estudiante está en la estructura, se recomienda utilizar la función de clasificación rápida qsort para completar, pero la función qsort debe cambiarse del orden ascendente original al orden descendente .

  Finalmente, guarde y cargue la información del estudiante. Al final de todo el proyecto, puede agregar una declaración para escribir el archivo y escribir la información del estudiante en el archivo una por una a través de la función rwrite; mientras que cargar la información binaria del estudiante en el archivo es encapsular individualmente un archivo leído. al inicializar la información del estudiante Función de archivo para cargar los datos del estudiante. El método binario se utiliza para leer y escribir archivos para evitar la divulgación de información de los estudiantes .

3. Código fuente

1.  prueba.c 

#define _CRT_SECURE_NO_WARNINGS
#include "Student Management System.h"

void menu()
{
	printf("————————————————————————————————————————————————————————————————\n");
	printf("                       学生成绩管理系统                         \n");
	printf("————————————————————————————————————————————————————————————————\n");
	printf("          1.教师登录                      2.学生登录            \n");
	printf("                         0.退出系统            \n");
	printf("————————————————————————————————————————————————————————————————\n");
}
int main()
{
	int input = 0;
	System Mge;
	Init_System(&Mge);
	int ret = 0;
	do
	{
		menu();
		printf("请选择:-> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			//进入教师系统
			Teacher_System(&Mge);
			break;
		case 2:
			Stu_System(&Mge);
			break;
		case 3:
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}

2.  Sistema de gestión de estudiantes.c

#define _CRT_SECURE_NO_WARNINGS

#include "Student Management System.h"
int Increase_Capacity2(System* Mge)//先判断是否够
{
	assert(Mge);
	if (Mge->sz == Mge->Max_Space)
	{
		Stu* tmp = (Stu*)realloc(Mge->data, (Mge->Max_Space + Add_Connt) * sizeof(Stu));
		if (Mge->data == NULL)
		{
			perror("realloc");
			return 1;
		}
		Mge->data = tmp;
		Mge->Max_Space += Add_Connt;	/*printf("增容成功\n");*/
		return 0;
	}
	else
		return 0;
}
void Load_Sy(System* Mge)
{
	assert(Mge);
	FILE* pf = fopen("data.txt", "rb");
	if (pf == NULL)
	{
		return;
	}
	else
	{
		Stu tmp = { 0 };
		while (fread(&tmp, sizeof(Stu), 1, pf))
		{
			if (1 == Increase_Capacity2(Mge))
				return;//开辟失败
			else
			{
				Mge->data[Mge->sz] = tmp;
				Mge->sz +=1;
			}
		}
	}
	fclose(pf);
	pf = NULL;
}
void Menu_Teacher()
{
	printf("\n——————————                 教师系统                 ————————————\n");
	printf("          1.录入学生信息                 2.删除学生信息           \n");
	printf("          3.显示所有学生信息             4.查看排名               \n");
	printf("          5.查询学生信息                 6.一键删除所有学生信息          \n");
	printf("                        0.退出教师系统                                   \n");
	printf("————————————————————————————————————————————————————————————————\n");

}
void Menu_Stu()
{
	printf("\n——————————                 学生系统                 ————————————\n");
	printf("                        1.查看我的信息                                         \n");
	printf("                        0.退出学生系统                                          \n");
	printf("————————————————————————————————————————————————————————————————\n");
}
void Init_System(System* Mge)
{
	//初始化系统
	assert(Mge);
	Mge->data = (Stu*)malloc(Inti_Data * sizeof(Stu));//初始化三个学生的空间
	if (Mge->data == NULL)
	{
		perror("malloc");
		return;
	}
	else
	{
		Mge->sz=0;
		Mge->Max_Space = Inti_Data;
		//加载通讯录
		Load_Sy(Mge);
	}
}
void Teacher_System(System* Mge)//教师系统
{
	assert(Mge);
	int input = 0;
	do 
	{
		Menu_Teacher();
		printf("请选择:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			Add_Stu(Mge);//增加学生信息
			break;
		case 2:
			Del_Stu(Mge);//删除学生信息
			break;
		case 3:
			Show_Stu(Mge);//打印
			break;
		case 4:
			Sort(Mge);//查看排名
			break;
		case 5:
			SearchStu(Mge);//查找学生
			break;
		case 6:
			Del_Exit(Mge);//删除所有信息
			break;
		case 0:
			De_System(Mge);
			break;
		default:
			printf("退出教师系统\n");
			break;
		}
	} while (input);
}

void Stu_System(System* Mge)
{
	assert(Mge);
	int input = 0;
	do
	{
		Menu_Stu();
		printf("请选择:->");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			View(Mge);
			break;
		case 0:
			break;
		default:
			printf("输入错误,请重新输入:");
			break;
		}
	} while (input);
}

3.Stu_System.c

#define _CRT_SECURE_NO_WARNINGS
#include "Student Management System.h"
int FindName1(System* Mge, char* str1)
{
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		if (strcmp(str1, Mge->data[i].Name) == 0)
			return i;//找到了
	}
	return Mge->sz;
}
int Comper2(const void* p1, const void* p2)
{
	return(((Stu*)p2)->Garde-(((Stu*)p1)->Garde));
}
void View(System* Mge)
{
	assert(Mge);
	printf("请输入你的名字:->\n");
	char str1[10] = "0";
	scanf("%s",str1);
	qsort(&(Mge->data[0]), Mge->sz, sizeof(Stu), Comper2);
	int i=FindName1(Mge,str1);
	if (i == Mge->sz)
	{
		printf("请检查你的信息是否正确或找老师查询信息是否录入\n");
		return;
	}
	else
	{
		printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s%5s\n",
			"姓名", "年龄", "学号", "性别", "专业", "成绩", "排名");
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde,
			i+1);
	}
	 
}
 

4. Maestro.c

#define _CRT_SECURE_NO_WARNINGS
#include "Student Management System.h"

int FindName(System* Mge,char*str1)
{
	assert(Mge && str1);
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		if (strcmp(str1, Mge->data[i].Name) == 0)
			return i;//找到了
	}
	return Mge->sz;
}
int Increase_Capacity(System* Mge)//先判断是否够
{
	assert(Mge);
	 
	if (Mge->sz == Mge->Max_Space)
	{
		Stu* tmp = (Stu*)realloc(Mge->data, (Mge->Max_Space + Add_Connt) * sizeof(Stu));
		if (Mge->data == NULL)
		{
			perror("realloc");
			return 1;
		}
		Mge->data = tmp;
		Mge->Max_Space += Add_Connt;	/*printf("增容成功\n");*/
		return 0;
	}
	else
		return 0;
}
void Add_Stu(System* Mge)//录入学生信息
{
	assert(Mge);
	int z = Increase_Capacity(Mge);
	if (z == 1)
		printf("增容失败\n");
	else//不用增容
	{
		printf("请输入姓名:\n");
		scanf("%s", Mge->data[Mge->sz].Name);
		printf("请输入年龄:\n");
		scanf("%d",&(Mge->data[Mge->sz].Age));
		printf("请输入学号:\n");
		scanf("%s",Mge->data[Mge->sz].Id);
		printf("请输入性别:\n");
		scanf("%s",Mge->data[Mge->sz].Sex);
		printf("请输入专业:\n");
		scanf("%s",Mge->data[Mge->sz].Pro);
		printf("请输入成绩:\n");
		scanf("%d",&(Mge->data[Mge->sz].Garde));
		Mge->sz += 1;
	}
}

void Show_Stu(System* Mge)//打印学生信息
{
	assert(Mge);
	printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s\n",
		  "姓名", "年龄", "学号", "性别", "专业","成绩");
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde);
	}
} 

void Del_Stu(System* Mge)//删除学生信息
{
	assert(Mge);
	printf("请输入你要删除学生的名字:\n");
	char str1[10] = "0";
	scanf("%s", str1);
	//先找到学生
	int z=FindName(Mge,str1);
	if (z == Mge->sz)
	{
		printf("未找到该学生\n");
		return;
	}
	else
	{
		int i = 0;
		for (i = z; i < Mge->sz; i++)
		{
			memmove(&Mge->data[i], &Mge->data[i + 1], sizeof(Stu));
		}
		Mge->sz--;
	}
}
int Comper(const void* p1, const void* p2)
{
	return(((Stu*)p2)->Garde - (((Stu*)p1)->Garde));
}
void Sort(System* Mge)
{
	assert(Mge);
	qsort(&(Mge->data[0]), Mge->sz, sizeof(Stu), Comper);
	printf("学生排名为:\n");
	printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s%5s\n",
		"姓名", "年龄", "学号", "性别", "专业", "成绩","排名");
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde
		            , i+1);
	}
}

void SearchStu(System* Mge)
{
	assert(Mge);
	char str1[15] = "0";
	printf("请输入要查找的学生的姓名");
	scanf("%s", str1);
	int i = FindName(Mge, str1);
	if (i == Mge->sz)
	{
		printf("未找到该学生\n");
		return;
	}
	else
	{
		printf("%10s\t%-4s\t%-15s\t%5s\t%24s\t%5s\n", 
		"姓名", "年龄", "学号", "性别", "专业", "成绩");
		printf("%10s\t%-4d\t%-15s\t%5s\t%24s\t%5d\n",
			Mge->data[i].Name,
			Mge->data[i].Age,
			Mge->data[i].Id,
			Mge->data[i].Sex,
			Mge->data[i].Pro,
			Mge->data[i].Garde);
	}
}
void De_System(System* Mge)//写入文件
{
	assert(Mge);
	FILE* pf = fopen("data.txt", "wb");
	Stu tmp = { 0 };
	int i = 0;
	for (i = 0; i < Mge->sz; i++)
	{
		//以二进制的形式写入文件
		fwrite(Mge->data + i, sizeof(Stu), 1, pf);
	}
	//关闭文件
	free(Mge->data);
	Mge->data = NULL;
	fclose(pf);
	pf = NULL;
}

void Del_Exit(System* Mge)
{
	assert(Mge);
	memset(Mge->data, 0, sizeof(Stu) * (Mge->sz));
	Mge->sz= 0;
}

5.Sistema de Gestión de Estudiantes.h  

#pragma once
#define Inti_Data 3
#define Add_Connt 2
#include<stdlib.h>
#include<assert.h>
#include<stdio.h>
#include<string.h>
//学生信息
typedef struct Stu
{
	//结构体类型重命名为Stu
	char Name[15];
	int Age;
	char Id[19];//学号
	char Sex[5];//性别
	char Pro[24];//专业
	int Garde;//成绩
}Stu;
typedef struct System
{
	Stu* data;
	int sz;//学生人数
	int Max_Space;//系统最大容量
}System;

void Teacher_System(System* Mge);

int FindName(System* Mge, char* str1);
void Init_System(System* Mge);
void Add_Stu(System* Mge);
void Show_Stu(System* Mge);
void Del_Stu(System* Mge);
void Sort(System* Mge);
void SearchStu(System* Mge);
void Stu_System(System* Mge);
void View(System* Mge);
void De_System(System* Mge);
void Del_Exit(System* Mge);

inserte la descripción de la imagen aquí

  El blogger ha estado escribiendo durante mucho tiempo, si puedes darle al blogger un combo triple gratis para animarlo, ¡entonces creo que tus pantalones tailandeses son realmente picantes! ! !

Supongo que te gusta

Origin blog.csdn.net/zyb___/article/details/131815262
Recomendado
Clasificación