Notas de estudio de C++ (7) - Sistema de gestión de información estudiantil

prefacio

Resumen funcional general

Implementación de código específico

Iniciar sesión en el módulo del sistema del estudiante

Crear un módulo de información del estudiante

Mostrar módulo de información del estudiante

Guardar módulo de información del estudiante

Lea el módulo de información del estudiante

Agregar módulo de información del estudiante

Eliminar módulo de información del estudiante

Buscar módulo de información del estudiante

Modifique el módulo de información del estudiante

Insertar módulo de información del estudiante

Módulo de clasificación de estudiantes


prefacio

He aprendido las clases y los objetos de C++ antes, y tengo una comprensión preliminar de C++ Para profundizar en su aplicación, aprenderé a escribir un sistema de gestión de información estudiantil con todos.

Resumen funcional general

Funciones del sistema de gestión de información de los estudiantes:

  • menú vacío();//menú principal
  • void CreateStuInfo();//Crear información del estudiante
  • void GetStuFile();//Escribe la información del estudiante en el archivo
  • void ShowStu();//Mostrar toda la información del estudiante
  • void PutStuFile();//Mostrar información del estudiante en la terminal
  • void AddStu();//Agregar información del estudiante
  • void DeleteStu();//Eliminar información del estudiante
  • void FindStu();//Encontrar información del estudiante
  • void ModifyStu();//Modificar información del estudiante
  • void InsertStu();//Insertar información del estudiante
  • //void CountStu();//Estadísticas de información de los alumnos
  • void SortStu();//Ordenar por calificaciones de los estudiantes       

Definición de nodo de lista enlazada individualmente 

struct Student_Node {
	int num;      //学号
	int age;      //年龄
	char name[20];//姓名
	char sex[10]; //性别
	char major[10];//专业
	char born[10]; //出生日期
	char address[20];//家庭住址
	int Math;       //数学成绩
	struct Student_Node* next;//指针域
};

clase de estudiante

class Student
{
public:
	Student()
	{
		head = new Student_Node;
		head->next = NULL;
	}
	void menu();//主菜单
	void CreatStuInfo();//创建学生信息
	void GetStuFile();//将学生信息写入文件
	void ShowStu();//显示全部学生信息
	void PutStuFile();//将学生信息显示在终端上
	void AddStu();//增加学生信息
	void DeleteStu();//删除学生信息
	void FindStu();//查找学生信息
	void ModifyStu();//修改学生信息
	void InsertStu();//插入学生信息
	//void CountStu();//统计学生信息
	void SortStu();//按照学生成绩排序
private:
	struct Student_Node* head;
};

Implementación de código específico

Iniciar sesión en el módulo del sistema del estudiante

Primero mire los resultados de la ejecución: el sistema de inicio de sesión aquí es un poco descuidado, puede limitar la cantidad de inicios de sesión o cuentas existentes y no permitir la reinscripción y otras restricciones.

Ejemplo de código: 

//首页
void start_page()
{
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------欢迎使用学生信息管理系统--------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t|------------------------------------|" << endl;
	cout << "\t\t\t\t请按Enter进行下一步!!!" << endl << "\t\t\t\t";
	getchar();//停顿便于观察
	system("cls");//刷新界面
}

//登录注册界面
void login()
{
	char username[20], password[10];
	cout << "\t\t\t\t欢迎您进入学生基本信息管理软件的注册界面!" << endl << endl;
	cout << "\t\t\t\t【0】我已经注册过了!" << endl << endl;
	cout << "\t\t\t\t【1】未注册,现在注册!" << endl << endl;
	cout << "\t\t\t\t请按Entet键继续......";
	getchar();
	int i;
	cout << "\t\t\t\t" << "请输入......";
	cin >> i;
	if (i == 1)
	{
		cout << "\t\t\t\t" << "欢迎新用户注册!" << endl << endl;
		cout << "\t\t\t\t" << "请输入您的用户名:";
		cin >> username;
		cout << "\t\t\t\t" << "请输入您的密码:";
		cin >> password;
		system("pause");
		system("cls");
		ofstream regist(".login.txt");
		regist << username;
		regist << password;
		regist.close();
		cout << "注册成功!" << endl;
		getchar();
		system("cls");
	}
	cout << "\t\t\t\t" << "请输入您的用户名:";
	cin >> username;
	cout << "\t\t\t\t" << "请输入您的密码:";
	cin >> password;
	char str[20];
	FILE* fp = fopen(".login.txt", "r");
	if (!fp)
	{
		cout << "打开失败" << endl;
		return;
	}
	while (fgets(str, 20, fp))
	{
	}
	fclose(fp);
	if (strcmp(strcat(username, password), str) == 0)
	{
		cout << "登录成功";//登录成功后,在这里添加主菜单
		//main_function();
	}
	else {
		cout << "\t\t\t\t账号或密码错误,请输入正确的账号和密码!!!" << endl;
	}
	getchar();
	//system("cls");
}

Crear un módulo de información del estudiante

Ejemplo de ejecución de resultados: es obvio que la edad y la fecha de nacimiento no coinciden con la situación real. Puede agregar algunas restricciones necesarias según sus necesidades.

el código se muestra a continuación:

//创建学生信息
void Student::CreatStuInfo()
{
	cout << "\t\t\t\t请输入您要创建的学生的数量:" << endl << "\t\t\t\t";
	int i;
	cin >> i;
	struct Student_Node* p1 = head;
	struct Student_Node* p2;
	for (int j = 1; j < i + 1; j++)
	{
		p2 = new Student_Node;
		cout << "\t\t\t\t请输入第" << j << "个学生的学号:" << endl << "\t\t\t\t";
		cin >> p2->num;
		cout << "\t\t\t\t请输入第" << j << "个学生的年龄:" << endl << "\t\t\t\t";
		cin >> p2->age;
		cout << "\t\t\t\t请输入第" << j << "个学生的姓名:" << endl << "\t\t\t\t";
		cin >> p2->name;
		cout << "\t\t\t\t请输入第" << j << "个学生的性别:" << endl << "\t\t\t\t";
		cin >> p2->sex;
		cout << "\t\t\t\t请输入第" << j << "个学生的专业:" << endl << "\t\t\t\t";
		cin >> p2->major;
		cout << "\t\t\t\t请输入第" << j << "个学生的出生日期:" << endl << "\t\t\t\t";
		cin >> p2->born;
		cout << "\t\t\t\t请输入第" << j << "个学生的家庭地址:" << endl << "\t\t\t\t";
		cin >> p2->address;
		cout << "\t\t\t\t请输入第" << j << "个学生的数学成绩:" << endl << "\t\t\t\t";
		cin >> p2->Math;
		p2->next = NULL;
		p1->next = p2;
		p1 = p2;
	}
	getchar();
}

//主菜单
void Student::menu()
{
	cout << "\t\t\t\t------------------------------------" << endl;
	cout << "\t\t\t\t|            主菜单                 |" << endl;
	cout << "\t\t\t\t| 【1】创建学生的信息               |" << endl;
	cout << "\t\t\t\t| 【2】显示学生的信息               |" << endl;
	cout << "\t\t\t\t| 【3】将录入的学生信息进行保存     |" << endl;
	cout << "\t\t\t\t| 【4】将所保存的学生的信息进行读取 |" << endl;
	cout << "\t\t\t\t| 【5】增添学生的信息               |" << endl;
	cout << "\t\t\t\t| 【6】删除学生的信息               |" << endl;
	cout << "\t\t\t\t| 【7】查找学生的信息               |" << endl;
	cout << "\t\t\t\t| 【8】修改学生的信息               |" << endl;
	cout << "\t\t\t\t| 【9】插入学生的信息               |" << endl;
	cout << "\t\t\t\t| 【10】统计学生的信息              |" << endl;
	cout << "\t\t\t\t| 【11】退出学生基本信息管理软件    |" << endl;
	cout << "\t\t\t\t| 【12】 按照学生的数学成绩进行排序 |" << endl;
	cout << "\t\t\t\t------------------------------------|" << endl;
	cout << "\t\t\t\t请输入您的选择:" << endl << "\t\t\t\t";
}

Mostrar módulo de información del estudiante

Ejemplo de ejecución de resultados

 el código se muestra a continuación:

//显示全部学生成绩
void Student::ShowStu()
{
	struct Student_Node* p1 = head->next;
	int i = 1;
	if (p1 == nullptr)
	{
		i = 0;
	}
	if (i == 0)
	{
		cout << "\t\t\t\t没有找到学生的信息!!!" << endl;
	}
	if (i == 1)
	{
		while (p1)
		{
			cout << endl;
			cout << "学生的学号:\t\t\t" << p1->num << endl;
			cout << "学生的年龄:\t\t\t" << p1->age << endl;
			cout << "学生的姓名:\t\t\t" << p1->name << endl;
			cout << "学生的性别:\t\t\t" << p1->sex << endl;
			cout << "学生的专业:\t\t\t" << p1->major << endl;
			cout << "学生的出生日期:\t\t\t" << p1->born << endl;
			cout << "学生的家庭住址:\t\t\t" << p1->address << endl;
			cout << "学生的英语成绩:\t\t\t" << p1->Math;
			p1 = p1->next;
		}
	}
	getchar();
}

Guardar módulo de información del estudiante

Ejemplo de ejecución de resultados:

 Debajo de la ruta correspondiente, puede encontrar el Bloc de notas creado

 el código se muestra a continuación:

//将学生信息写入文件中
void Student::GetStuFile()
{
	ofstream outfile(".studentlist.txt");
	if (!outfile)
	{
		cout << "打开文件失败!\n" << endl;
	}
	struct Student_Node* p1 = head->next;
	while (p1)
	{
		outfile << "学号:" << p1->num << endl;
		outfile << "年龄:" << p1->age << endl;
		outfile << "姓名:" << p1->name << endl;
		outfile << "性别:" << p1->sex << endl;
		outfile << "专业:" << p1->major << endl;
		outfile << "出生日期:" << p1->born << endl;
		outfile << "家庭地址:" << p1->address << endl;
		outfile << "英语成绩:" << p1->Math << endl;
		p1 = p1->next;
	}
	outfile.close();
	cout << "保存成功!" << endl;
	getchar();
}

Lea el módulo de información del estudiante

Ejemplo de ejecución de resultados: la información del estudiante se puede leer directamente desde el archivo

el código se muestra a continuación:

//将学生信息写到终端
void Student::PutStuFile()
{
	int count = 0;
	char str[1024];
	FILE* fp = fopen(".studentlist.txt", "r");
	if (!fp)
	{
		return;
	}
	while (fgets(str, 1024, fp))
	{
		if (count % 8 == 0)
		{
			cout << endl;
		}
		cout << str;
		count++;
	}
	fclose(fp);
	system("pause");
}

Agregar módulo de información del estudiante

//增加学生信息
void Student::AddStu()
{
	struct Student_Node* p1 = head->next;
	struct Student_Node* p2;
	int a = 1, b = 1;
	int c; //学生的学号                
	while (p1->next != NULL)
	{
		p1 = p1->next;
		a++;
	}
	cout << "\t\t\t\t请输入学生的学号:" << endl << "\t\t\t\t";
	cin >> c;
	p1 = head->next;
	for (int i = 1; i <= a; i++)//判断学生的学号是否重复 
	{
		if (p1->num == c)
		{
			cout << "\t\t\t\t出错:学号重复!!!" << endl;
			b = 0;
			break;
		}
		p1 = p1->next;
	}
	if (b != 0)//判断 
	{
		p1 = head;
		while (p1->next != NULL)
		{
			p1 = p1->next;
		}
		p2 = new Student_Node;
		p2->num = c;
		cout << "\t\t\t\t请输入学生的年龄:" << endl << "\t\t\t\t"; cin >> p2->age;
		cout << "\t\t\t\t请输入学生的姓名:" << endl << "\t\t\t\t"; cin >> p2->name;
		cout << "\t\t\t\t请输入学生的性别:" << endl << "\t\t\t\t"; cin >> p2->sex;
		cout << "\t\t\t\t请输入学生的专业:" << endl << "\t\t\t\t"; cin >> p2->major;
		cout << "\t\t\t\t请输入学生的出生日期:" << endl << "\t\t\t\t"; cin >> p2->born;
		cout << "\t\t\t\t请输入学生的家庭住址:" << endl << "\t\t\t\t"; cin >> p2->address;
		cout << "\t\t\t\t请输入学生的数学成绩:" << endl << "\t\t\t\t"; cin >> p2->Math;
		p2->next = NULL;
		p1->next = p2;
		p1 = p2;
	}
	getchar();
}

Eliminar módulo de información del estudiante

void Student::DeleteStu()
{
	struct Student_Node* p1;
	p1 = head;
	struct Student_Node* p2;
	int i = 1;
	if (p1->next == NULL)
	{
		cout << "\t\t\t\t删除失败!!!" << endl;
		cout << "\t\t\t\t无可用的数据!!!" << endl;
		i = 0;
	}
	if (i == 1)
	{
		int j;
		cout << "\t\t\t\t请输入您想要删除的学生的学号:" << endl << "\t\t\t\t";
		cin >> j;
		while (p1->next != NULL)
		{
			if (p1->next->num == j)
			{
				cout << "\t\t\t\t******删除成功********" << endl;
				getchar();
				p2 = p1->next;
				p1->next = p2->next;
				delete p2;
				return;

			}
			p1 = p1->next;
		}
		cout << "\t\t\t\t删除错误!!!无法找到此学生的信息!!!" << endl;
	}
	getchar();
}

Buscar módulo de información del estudiante

void Student::FindStu()
{
	int  i = 0;
	struct Student_Node* p1 = head->next;
	int j;
	cout << "\t\t\t\t|--------------------------|" << endl;
	cout << "\t\t\t\t|                          |" << endl;
	cout << "\t\t\t\t|【1】请输入学生的学号查询 |" << endl;
	cout << "\t\t\t\t|【2】请输入学生的姓名查询 |" << endl;
	cout << "\t\t\t\t|                          |" << endl;
	cout << "\t\t\t\t|--------------------------|" << endl;
	cout << "\t\t\t\t";
	cin >> j;
	switch (j)
	{
	case 1:
		int a;
		cout << "\t\t\t\t请输入学生的学号:" << endl << "\t\t\t\t";
		cin >> a;
		while (p1 != NULL)
		{
			if (p1->num == a)
			{
				cout << "\t\t\t\t该学生的学号:\t\t\t\t";
				cout << p1->num << endl;
				cout << "\t\t\t\t该学生的年龄:\t\t\t\t";
				cout << p1->age << endl;
				cout << "\t\t\t\t该学生的姓名:\t\t\t\t";
				cout << p1->name << endl;
				cout << "\t\t\t\t该学生的性别:\t\t\t\t";
				cout << p1->sex << endl;
				cout << "\t\t\t\t该学生的专业:\t\t\t\t";
				cout << p1->major << endl;
				cout << "\t\t\t\t该学生的出生日期:\t\t\t";
				cout << p1->born << endl;
				cout << "\t\t\t\t该学生的家庭住址:\t\t\t";
				cout << p1->address << endl;
				cout << "\t\t\t\t该学生的数学成绩:\t\t\t";
				cout << p1->Math << endl;
				i++;
			}
			p1 = p1->next;
		}
		if (i == 0)
		{
			cout << "\t\t\t\t查询错误!!!" << endl;
			cout << "\t\t\t\t没有此学生的数据!!!" << endl;
		}
		break;
	case 2:
		char xingming[20];
		cout << "\t\t\t\t请输入学生的姓名:" << endl;
		cout << "\t\t\t\t";
		cin >> xingming;
		while (p1 != NULL)
		{
			if (strcmp(p1->name, xingming) == 0)
			{

				cout << "\t\t\t\t该学生的学号:\t\t\t\t";
				cout << p1->num << endl;
				cout << "\t\t\t\t该学生的年龄:\t\t\t\t";
				cout << p1->age << endl;
				cout << "\t\t\t\t该学生的姓名:\t\t\t\t";
				cout << p1->name << endl;
				cout << "\t\t\t\t该学生的性别:\t\t\t\t";
				cout << p1->sex << endl;
				cout << "\t\t\t\t该学生的专业:\t\t\t\t";
				cout << p1->major << endl;
				cout << "\t\t\t\t该学生的出生日期:\t\t\t";
				cout << p1->born << endl;
				cout << "\t\t\t\t该学生的家庭住址:\t\t\t";
				cout << p1->address << endl;
				cout << "\t\t\t\t该学生的数学成绩:\t\t\t";
				cout << p1->Math;
				i++;
			}
			p1 = p1->next;
		}
		if (i == 0)
		{

			cout << "\t\t\t\t查询错误!!!" << endl;
			cout << "\t\t\t\t没有此学生的数据!!!" << endl;
		}
		break;
	default:
		cout << "\t\t\t\t信息错误!!!" << endl;
	}
	getchar();
	
}

Modifique el módulo de información del estudiante

void Student::ModifyStu()
{
	struct Student_Node* p1 = head->next;
	struct Student_Node* p2 = head->next;
	cout << "\t\t\t\t请输入需要修改的学生的学号:" << endl;
	int i;
	int j = 0;
	int k = 1;
	cout << "\t\t\t\t";
	cin >> i;
	while (p1)
	{
		if (p1->num == i)//对是否有该生的信息进行判断 
		{
			j = 1;
		}
		p1 = p1->next;
	}
	if (j == 0)
	{
		cout << "\t\t\t\t错误!!!" << endl;
		cout << "\t\t\t\t没有该生的信息!!!" << endl;
	}
	if (j == 1)
	{
		p1 = head->next;
		while (p1)
		{
			if (p1->num == i)
			{
				cout << "\t\t\t\t-----------------------------" << endl;
				cout << "\t\t\t\t|---【1】修改学生的学号------" << endl;
				cout << "\t\t\t\t|---【2】修改学生的姓名------" << endl;
				cout << "\t\t\t\t|---【3】修改学生的性别------" << endl;
				cout << "\t\t\t\t|---【4】修改学生的专业------" << endl;
				cout << "\t\t\t\t|---【5】修改学生的出生日期--" << endl;
				cout << "\t\t\t\t|---【6】修改学生的家庭住址--" << endl;
				cout << "\t\t\t\t|---【7】修改学生的数学成绩--" << endl;
				cout << "\t\t\t\t|---【8】修改学生的年龄------" << endl;
				cout << "\t\t\t\t|----------------------------" << endl;
				int x;
				cout << "\t\t\t\t";
				cin >> x;
				switch (x)
				{
				case 1:
					cout << "\t\t\t\t请输入修改后的学号:" << endl;
					int y;
					cout << "\t\t\t\t";
					cin >> y;
					while (p2)
					{
						if (p2->num == y)
						{
							cout << "\t\t\t\t出错!!!" << endl;
							cout << "\t\t\t\t学号重复!!!" << endl;
							break;
							k = 0;
						}
						p2 = p2->next;
					}
					if (k != 0)
					{
						p1->num = y;
					}
					break;
				case 2:
					cout << "\t\t\t\t请输入姓名:" << endl << "\t\t\t\t";
					cin >> p1->name;
					break;
				case 3:
					cout << "\t\t\t\t请输入性别:" << endl << "\t\t\t\t";
					cin >> p1->sex;
					break;
				case 4:
					cout << "\t\t\t\t请输入专业:" << endl << "\t\t\t\t";
					cin >> p1->major;
					break;
				case 5:
					cout << "\t\t\t\t请输入出生日期:" << endl << "\t\t\t\t";
					cin >> p1->born;
					break;
				case 6:
					cout << "\t\t\t\t请输入家庭住址:" << endl << "\t\t\t\t";
					cin >> p1->address;
					break;
				case 7:
					cout << "\t\t\t\t请输入数学成绩:" << endl << "\t\t\t\t";
					cin >> p1->Math;
					break;
				case 8:
					cout << "\t\t\t\t请输入年龄:" << endl << "\t\t\t\t";
					cin >> p1->age;
					break;
				}
				break;
			}
		}
	}
	getchar();
	
}

Insertar módulo de información del estudiante

void Student::InsertStu()
{
	struct Student_Node* p1, * p2;
	struct Student_Node* p3;
	int i;
	cout << "\t\t\t\t请输入要在哪个学号之后插入学生信息:" << endl << "\t\t\t\t";
	cin >> i;
	p1 = new Student_Node;
	cout << "\t\t\t\t请输入待插入学生的学号:" << endl << "\t\t\t\t";
	cin >> p1->num;
	cout << "\t\t\t\t请输入待插入学生的年龄:" << endl << "\t\t\t\t";
	cin >> p1->age;
	cout << "\t\t\t\t请输入待插入学生的姓名:" << endl << "\t\t\t\t";
	cin >> p1->name;
	cout << "\t\t\t\t请输入待插入学生的性别:" << endl << "\t\t\t\t";
	cin >> p1->sex;
	cout << "\t\t\t\t请输入待插入学生的专业:" << endl << "\t\t\t\t";
	cin >> p1->major;
	cout << "\t\t\t\t请输入待插入学生的出生日期:" << endl << "\t\t\t\t";
	cin >> p1->born;
	cout << "\t\t\t\t请输入待插入学生的数学成绩:" << endl << "\t\t\t\t";
	cin >> p1->Math;
	cout << "\t\t\t\t请输入待插入学生的家庭住址:" << endl << "\t\t\t\t";
	cin >> p1->address;
	p2 = head->next;
	p3 = head;
	while (p2)
	{
		p3 = p2;
		if (p3->num == i)
		{
			break;
		}
		p2 = p2->next;
	}
	p1->next = p3->next;
	p3->next = p1;
	getchar();
}

Módulo de clasificación de estudiantes

void Student::SortStu()
{
	//由高分到低分排列  
	{
		int i = 1;
		if (head->next == NULL)
		{
			i = 0;
		}
		if (i == 0)
		{
			cout << "\t\t\t\t出错!!!" << endl;
			cout << "\t\t\t\t没有找到学生的数据!!!" << endl;
		}
		if (i == 1)
		{
			struct Student_Node* p1, * p2;
			int num_1;
			int age_1;
			char name_1[20];
			char sex_1[10];
			char major_1[10];
			char born_1[10];
			char address_1[10];
			int Math_1;
			int num_2;
			int age_2;
			char name_2[20];
			char sex_2[10];
			char major_2[10];
			char born_2[10];
			char address_2[10];
			int Math_2;
			for (p1 = head->next; p1 != NULL; p1 = p1->next)
			{
				for (p2 = p1->next; p2 != NULL; p2 = p2->next)
				{
					if (p1->Math < p2->Math)
					{
						num_1 = p1->num;
						age_1 = p1->age;
						strcpy(name_1, p1->name);
						strcpy(sex_1, p1->sex);
						strcpy(major_1, p1->major);
						strcpy(born_1, p1->born);
						strcpy(address_1, p1->address);
						Math_1 = p1->Math;
						num_2 = p2->num;
						age_2 = p2->age;
						strcpy(name_2, p2->name);
						strcpy(sex_2, p2->sex);
						strcpy(major_2, p2->major);
						strcpy(born_2, p2->born);
						strcpy(address_2, p2->address);
						Math_2 = p2->Math;
						p1->num = num_2;
						p1->age = age_2;
						strcpy(p1->name, name_2);
						strcpy(p1->sex, sex_2);
						strcpy(p1->major, major_2);
						strcpy(p1->born, born_2);
						strcpy(p1->address, address_2);
						p1->Math = Math_2;
						p2->num = num_1;
						p2->age = age_1;
						strcpy(p2->name, name_1);
						strcpy(p2->sex, sex_1);
						strcpy(p2->major, major_1);
						strcpy(p2->born, born_1);
						strcpy(p2->address, address_1);
						p2->Math = Math_1;
					}
				}
			}
			cout << "\t\t\t\tWonderful*****排序成功*****" << endl;
		}getchar();
	}
}

Supongo que te gusta

Origin blog.csdn.net/m0_58367586/article/details/127653583
Recomendado
Clasificación