[Conception finale du cours] Système de gestion des performances des étudiants

Parce que c'est unique, parce que c'est toujours pareil

Annuaire d'articles

1. Introduction au système de gestion des performances des étudiants

2. Concevoir des idées de système de gestion des performances des étudiants

3.Code source

1. test.c 

2. Système de gestion des étudiants.c

3.Stu_System.c

4.Enseignant.c

5.Système de gestion des étudiants.h  


Avant-propos :

Le système de gestion des performances des étudiants comprend un portail de connexion pour les enseignants et un portail de connexion pour les étudiants, qui peuvent ajouter, supprimer, rechercher, classer, enregistrer, etc.

1. Introduction au système de gestion des performances des étudiants

Le projet est divisé en 5 fichiers, 4 fichiers sources .c et 1 fichier d'en-tête .h

Le cadre global de la mise en œuvre du projet test.c        et l'interface de connexion initiale du système de gestion des scores, etc.

Student Management System.c        réalise l'interface de connexion du système enseignant et du système étudiant ainsi que l'initialisation des données des membres du système.

Stu_System.c        implémente des fonctions associées telles que le système de connexion des étudiants

Teacher.c        implémente des fonctions associées telles que le système de connexion des enseignants

Student Management System.h        stocke divers fichiers d'en-tête dans le projet, des variables constantes définies par #define, des fonctions, des déclarations de structure, etc.

Il est recommandé d'utiliser un environnement de traduction intégrant la compilation et la liaison 

Environnement recommandé :

Compilateurs C/C++ tels que Visual Studio 2017 ou supérieur, Dev-C++, Visual Studio Code, etc.

Introduction au système de gestion des performances des étudiants

  Le système de gestion des performances dispose de deux entrées de connexion, divisées en entrée enseignant et entrée étudiant.

  Les informations sur la note d'un élève comprennent : le nom de l'élève, son âge, son sexe, son numéro d'étudiant, sa spécialisation et sa note.

  Le système de l'enseignant peut ajouter des informations sur les étudiants, supprimer des informations sur les étudiants, interroger les informations sur les étudiants et afficher le classement global des étudiants ; le système des étudiants peut afficher les informations sur les étudiants saisies, les classements, etc. Chaque fois qu'un enseignant ajoute un élève, après avoir quitté le système de gestion des performances des élèves, le programme enregistre automatiquement les informations sur l'élève sous forme de fichier txt sous forme de texte binaire. Certaines ou toutes les informations sur l'élève sont définitivement supprimées.

Interface d'exploitation du système de gestion des performances des étudiants

2. Concevoir des idées de système de gestion des performances des étudiants

  Tout d'abord, nous devons encapsuler une interface système. C'est relativement simple. Il vous suffit de contrôler l'espacement et vous pouvez utiliser printf pour y parvenir. Utilisez ensuite l'instruction switch...case pour sélectionner si l'enseignant se connecte ou l'étudiant se connecte et utilise la boucle do...while pour l'encapsuler afin de garantir que le système peut être utilisé plusieurs fois ; dans le système de l'enseignant et dans le système des étudiants, des instructions de sélection de cas printf, switch... similaires et do. Les boucles ..while sont également utilisées pour réaliser les fonctions de sélection correspondantes.

  La seconde consiste à initialiser le système étudiant. Afin d'économiser de la mémoire et de maximiser l'efficacité de fonctionnement du système, le projet utilise une méthode de gestion dynamique de la mémoire. Lors de l'initialisation, la fonction de mémoire dynamique est utilisée pour ouvrir trois espaces étudiants. Plus tard, à mesure que le nombre d'étudiants augmente, lorsque l'espace système est plein, ouvrez deux espaces étudiants supplémentaires et continuez à l'ouvrir une fois qu'il est plein, et ainsi de suite, n'ouvrez que deux espaces étudiants supplémentaires à chaque fois. L'utilisation de la gestion dynamique de la mémoire ici peut éviter un gaspillage excessif de mémoire.

  Ensuite, l'enseignant saisit les informations, supprime les élèves, etc. Vous pouvez utiliser directement la fonction scanf pour saisir les informations. Pour supprimer les informations sur l'étudiant, vous devez d'abord trouver l'étudiant, vous devez donc créer une fonction distincte pour rechercher les informations sur l'étudiant par le nom de l'étudiant, ce qui est également pratique pour une utilisation ultérieure. lors de la vérification des informations sur l'étudiant.Après avoir trouvé l'étudiant, utilisez l'étudiant Écrasez-le avec les données de l'étudiant suivant, puis écrasez les informations précédentes avec l'entrée suivante, et enfin réduisez le nombre d'étudiants de 1. L'écrasement ici peut être complété à l'aide de la fonction memset .

  Il existe également une fonction de classement des notes des étudiants, et les classements doivent être affichés dans les classements du système enseignant et du système étudiant. Étant donné que les informations sur les étudiants sont dans la structure, il est recommandé d'utiliser la fonction de tri rapide qsort pour terminer, mais la fonction qsort doit être modifiée de l' ordre croissant d'origine à l'ordre décroissant .

  Enfin, enregistrez et chargez les informations sur les étudiants. À la fin de l'ensemble du projet, vous pouvez ajouter une instruction pour écrire le fichier et écrire les informations sur l'étudiant dans le fichier une par une via la fonction rwrite ; tandis que le chargement des informations binaires sur l'étudiant dans le fichier consiste à encapsuler individuellement un fichier lu. lors de l'initialisation des informations sur l'étudiant.Fonction de fichier pour charger les données de l'étudiant. La méthode binaire est utilisée pour lire et écrire des fichiers afin d'empêcher la divulgation des informations sur les étudiants .

3.Code source

1.  test.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.  Système de gestion des étudiants.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. Enseignant.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.Système de gestion des étudiants.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);

insérer la description de l'image ici

  Le blogueur écrit depuis longtemps, si vous pouvez offrir au blogueur un triple combo gratuit pour encourager le blogueur, alors je pense que votre pantalon thaïlandais est vraiment épicé ! ! !

Je suppose que tu aimes

Origine blog.csdn.net/zyb___/article/details/131815262
conseillé
Classement