学生信息管理系统

发布于:2023-07-04 ⋅ 阅读:(54) ⋅ 点赞:(0)

学生信息管理系统

具体题目:
一个班30名学生,4门课程。使用菜单形式进行学生成绩管理,完成结构化程序设计并完成以下功能。

(1) 成绩信息的输入;

(2) 成绩的计算;

(3) 成绩的排序;

(4) 成绩信息的输出 ;

(5) 学生的查找(按学号,按姓名)。


前言

学生信息是学校管理一项繁杂的工作。学生完成课程考试后,教师要录入学生的考试成绩,再由管理员统计所有学生的信息计算每个学生的总分,进行排名。本文就介绍了如何设计一套实用的学生信息管理系统。


提示:以下是本篇文章正文内容,下面案例可供参考

1、系统需求

系统中需要实现的功能如下:

  1. 学生信息的输入:向系统中添加学生信息,包括(学号,姓名,语文、数学、英语、化学四门成绩)
  2. 学生成绩的计算:计算每个学生四门成绩的总和
  3. 学生成绩的排序:按照学生的四门成绩总和从高到低排序
  4. 学生信息的输出:输出所有学生(排序前和排序后)所有信息,包括(学号,姓名,语文、数学、英语、化学四门成绩)
  5. 学生的查找(按学号或者姓名):按照姓名查看指定学生信息

2.创建项目

创建项目步骤如下:

  1. 创建新项目
  2. 添加文件

2.1创建项目

打开vs2019后,点击创建新项目,创建新的cpp项目
在这里插入图片描述
在这里插入图片描述
填写项目名称,选择项目路径:
在这里插入图片描述

2.2添加文件
在这里插入图片描述
添加成功后,效果如图:
在这里插入图片描述

3.学生信息的输入

功能描述:
输入学生的信息,学生信息包括(学号,姓名,语文、数学、英语、化学四门成绩)

步骤:

  1. 设计学生结构体
  2. main函数中定义学生数组
  3. 封装学生信息输入函数
  4. 在main函数中调用输入函数
  5. 测试添加学生信息功能

3.1 设计学生结构体
学生信息包括:学号、姓名、语文 数学 英语 化学 分数四门总分

设计如下:

#include<iostream>
using namespace std;
struct student
{
	char num[10];  //学号
	string name;  //姓名  包含头文件#include<string>
	float score[4];//语文、数学、英语、化学 成绩
	float add;  //四门成绩之和
}; 

3.2 main函数中定义学生数组
维护一个容量为30的存放学生信息的数组

设计如下:

int const N = 30;  //表示成员变量 一个班30个学生

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	system("pause");
	return 0;
}

3.3 封装学生信息输入函数

输入学生信息代码:

int input(student stu1[], int n)//输入学生的信息并统计输入总人数
{
	int i = 0, j;
	cout << "请输入" << N << "个学生的学号 姓名 语文 数学 英语 化学 的成绩" << endl;
	while (i < n)
	{
		char ch, zh;
		cin >> stu1[i].num;  //输入学号
		cin >> stu1[i].name;  //输入姓名
		for (j = 0; j < 4; j++)
			cin >> stu1[i].score[j];  //输入分数
		cout << "第" << i + 1 << "个学生输入完毕!" << endl;  
		i++;
	}
	cout << endl;
	cout << "*********************************" << endl;
	cout << "******共输入" << i << "个学生记录******" << endl;  // 统计输入总人数
	cout << "*********************************" << endl;
	cout << endl;
	return i;  //返回总人数的值
}

3.4.在main函数中调用输入函数
设计如下:

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	int i;
	i = input(stu, N);  //i为输入函数中返回的输入总人数
	system("pause");
	return 0;
}

3.5. 测试添加学生信息功能
测试输入学生信息是否成功输入 (测试学生人数2人)

测试效果图如下:
在这里插入图片描述

4.学生成绩的计算

功能描述:计算每个学生的成绩总和

步骤:

  1. 封装计算学生成绩的函数
  2. 在main函数中调用计算函数
  3. 测试计算学生成绩的功能

4.1 封装计算学生成绩的函数
设计如下:

int count(student stu1[], int n)//求学生的总分
{
	int i, j;
	float sum1;
	for (i = 0; i < n; i++)
	{
		sum1 = 0;
		for (j = 0; j < 4; j++)
		{
			sum1 = sum1 + stu1[i].score[j];
		}
		stu1[i].add = sum1;
		cout << "stu["<<i+1<<"]的总分为:"<<stu1[i].add << endl;
	}
	return 0;
}

4. 2. 在main函数中调用计算函数
设计如下:

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	int i;
	i = input(stu, N);  //i为输入函数中返回的输入总人数
	count(stu, i);  
	system("pause");
	return 0;
}

4.3 测试计算学生成绩的功能

测试能否算出每个学生的总分

测试效果图如下:
在这里插入图片描述

5. 成绩信息的输出

功能描述:
输出所有输入的学生信息,学生信息包括(学号,姓名,语文、数学、英语、化学四门成绩)
步骤:

  1. 封装输出学生成绩的函数
  2. 在main函数中调用输出函数
  3. 测试输出学生成绩的功能

5.1 封装输出学生成绩的函数
设计如下:

#include<iomanip>

void output( student stu1[],int n)//输出
{
	//cout << "----------" << endl;
	int i, j;
	for (i = 0; i < n; i++)
	{
		cout << "第" << i + 1 <<"个学生"<< endl;
		cout << "学号:" << stu1[i].num << endl;
	    cout<<"姓名:" << stu1[i].name << endl;
		cout << "语文 英语 数学 化学 分数为:" << endl;
		for (j = 0; j < 4; j++)
			cout<< stu[i].score[j] << setw(4);  //包含头文件  #include<iomanip>
		cout << endl;
		cout << "-----------" << endl;
	}
}

5.2 在main函数中调用输出函数

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	int i;
	i = input(stu, N);  //i为输入函数中返回的输入总人数
	count(stu, i);  
	output(stu, i);
	system("pause");
	return 0;
}

5.3 测试输出学生成绩的功能
测试效果如下:
在这里插入图片描述

6.成绩的排序

功能描述:
按照学生的四门成绩总和从高到低排序

步骤:

  1. 封装排序学生成绩的函数
  2. 在main函数中调用排序函数
  3. 测试排序学生成绩的功能

6.1 封装排序学生成绩的函数
设计如下:

int sort(student stu1[], int n)//从高到低排序
{
	int i,j;
	student temp;
	for (j = 0; j < n; j++)  //进行n次循环,比较n趟
	{
		for (i = 0; i < n - j; i++)//在每一趟中进行n-j次比较
		{
			if (stu1[i].add < stu1[i + 1].add)//相邻两个数比较
			{
				temp = stu1[i];
				stu1[i] = stu1[i + 1];
				stu1[i + 1] = temp;
			}
		}
	}
	return 0;
}

6. 2 在main函数中调用排序函数
设计如下:

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	int i;
	i = input(stu, N);  //i为输入函数中返回的输入总人数
	count(stu, i);  
	sort(stu, i);
	output(stu,i);
	system("pause");
	return 0;
}

6. 3 测试排序学生成绩的功能
测试效果如下:
在这里插入图片描述

7. 学生的查找(按学号,按姓名)

功能描述:
按照姓名查看指定学生信息
步骤:

  1. 封装查找学生成绩的函数``
  2. 在main函数中输入指定学生姓名并调用查找函数
  3. 测试查找学生成绩的功能

7.1 封装查找学生成绩的函数
设计如下:

int finding(student stu[], string name)  //name为main函数中输入的要查找学生名字
{
	int i,r=-1;
	for (i = 0; i < N; i++)
	{
		if (stu[i].name == name)
		{//如果指定查找的学生存在,输出该学生的学号和姓名,并返回i值
			cout << stu[i].num << "  " << stu[i].name << endl;
			cout << endl;
			r = i;  
		}
	}
	return r;  // 如果为找到指定的学生,返回r(-1)值
}

7.2 在main函数中输入指定学生姓名并调用查找函数

int main()
{
	student stu[N] = { 0 }; //结构体数组初始化  一个班30个同学的信息初始为空
	int i;
	i = input(stu, N);  //i为输入函数中返回的输入总人数
	count(stu, i);  
	sort(stu, i);
	output(stu, i);
	{
		cout << "请输入姓名" << endl;
		string name;  //与结构体成员name定义同种类型 string
		cin >> name;  //输入指定学生的姓名,进行查找!
		if (finding(stu, name) == -1)  //调用查找函数,若返回值为-1,则表示没找到该学生
		{
			cout << "查无此人!" << endl;
		}
		else//返回值为i,则表示找到了该学生
		{
			cout << "找到此人!" << endl;
		}
	}
	system("pause");
	return 0;
}

7.3 测试查找学生成绩的功能
测试效果如下:
在这里插入图片描述

8.输入系统的完善

功能描述:
完善输入系统的两个功能

  1. 输入过程中学生信息输入有误,重新输入学生信息的动能
  2. 提前结束输入学生信息的功能

步骤:

  1. 在输入函数中添加重新输入信息的代码
  2. 测试重新输入学生信息的功能
  3. 在输入函数中添加提前结束输入学生信息的代码
  4. 测试提前结束输入学生信息的功能

8.1 在输入函数中添加重新输入信息的代码

#include<conio.h>  //定义了通过控制台进行数据的输入和数据输出的函数(通过按键盘产生的对应的操作)。

int input(student stu1[], int n)//输入学生的信息并统计输入总人数
{
	int i = 0, j;
	cout << "请输入" << N << "个学生的学号 姓名 语文 数学 英语 化学 的成绩" << endl;
	while (i < n)
	{
		char ch, zh;
		cin >> stu1[i].num;  //输入学号
		cin >> stu1[i].name;  //输入姓名
		for (j = 0; j < 4; j++)
			cin >> stu1[i].score[j];  //输入分数
		cout << "第" << i + 1 << "个学生输入完毕!" << endl;  
		i++;

//此段为重新输入的代码   以下
		cout << "按r可重新输入上一行数据,按回车继续" << endl;
		ch = _getch();//  输入字符   但只能接受一个字符   使用要包含头文件#include<conio.h>
		if (ch == 'r')
		{
			cout << "重新输入:" << endl;
			i = i - 1;
		}
		else if (ch == 13)  //回车键在十进制下ASCII码为13
		{
			//cout << endl;
		}
		else
			cout << "error!" << endl;
	}
	//以上
	
	cout << endl;
	cout << "*********************************" << endl;
	cout << "********共输入" << i << "个学生记录********" << endl;  // 统计输入总人数
	cout << "*********************************" << endl;
	cout << endl;
	return i;  //返回总人数的值
}

8.2 测试重新输入学生信息的功能
测试效果如下:
在这里插入图片描述

8.3 在输入函数中添加提前结束输入学生信息的代码

int input(student stu1[],int n)//输入学生的信息并统计输入总人数
{
	int i=0,j;
	cout << "请输入"<<N<<"个学生的学号 姓名 语文 数学 英语 化学 的成绩" << endl;
	while(i<n)
	{
		char ch,zh;
		cin >> stu1[i].num;
		cin >> stu1[i].name;
		for (j = 0; j < 4; j++)
		cin >> stu1[i].score[j];
		cout << "第" << i +1<< "个学生输入完毕!" << endl;
		i++;
		cout << "按r可重新输入上一行数据,按回车继续" << endl;
		ch = _getch();//  输入字符   但只能接受一个字符   使用要包含头文件#include<conio.h>
		if (ch == 'r')
		{
			cout << "重新输入:" << endl;
			i = i - 1;
		}
		else if (ch == 13)  //回车键在十进制下ASCII码为13
		{
			//cout << endl;
		}
		else
			cout << "error!" << endl;
			
		// 此段为提前结束输入的代码  如下
		cout << "按t可提前结束输入,按回车继续" << endl;
		cout << "-------------------------" << endl;
		zh = _getch();
		if (zh == 't')
			break;
		else if (zh == 13)
		{
			cout << endl;
			cout << "输入第" << i + 1 << "个学生信息" << endl;
		}
		else
			cout << "error!" << endl;
	}
	//  如上
	cout << endl;
	cout << "*********************************" << endl;
	cout << "******共输入" << i << "个学生记录******" << endl;
	cout << "*********************************" << endl;
	cout << endl;
	return i;
}

8.4 测试提前结束输入学生信息的功能
测试效果如下:
在这里插入图片描述

至此,学生信息管理系统完成!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到