C++编写学生成绩管理系统

目录

一、前言

二、系统简介

三、完整代码

四、总结


一、前言

        在学完结构体部分内容后,老师布置了一个综合实验作业,需要制作一个简单的学生成绩管理系统。本文章主要是向大家分享我所编写的学生成绩管理系统代码以及我在编程过程中的感受和遇到的一些问题。 

二、系统简介

        该学生成绩管理系统最多可录入100名学生(可修改上限,此处设为100人),每个学生的信息录入包括姓名、学号、性别、语文成绩、数学成绩、英语成绩以及三门课程的平均成绩。系统功能包括:

(1)输入所有学生的信息(不包括平均成绩);

(2)输出所有学生的信息(不包括平均成绩);

(3)输出某个学生的相关信息;

(4)求任意一门课的平均成绩;

(5)求每个学生3门课程的平均成绩;

(6)找出平均成绩为最高分的学生;

(7)找出平均成绩为不及格的学生;

(8)根据给定的学号查询某学生;

(9)根据给定的学号修改某学生信息。

系统函数对应功能:

(1)构建Create函数,实现所有学生信息的输入;

(2)构建DisplayAll函数,实现所有学生信息的输出;

(3)构建DisplayOne函数,实现某个学生信息的输出;

(4)构建CourseAve函数,实现任意一门课程的计算及输入;

(5)构建StudentAve函数,实现每个学生3门课的平均成绩的计算,并调用DisplayAll函数或DisplayOne函数输出相关信息;

(6)构建TopScore函数,实现平均成绩最高分学生的查找,并调用DisplayOne函数输出该学生的信息(包括姓名、学号、性别、三门课成绩和平均分);

(7)构建FailExam函数,实现平均成绩不及格(60分以下)学生的查找,并调用DisplayOne函数输出该学生的信息(包括姓名、学号、性别、三门课成绩和平均分);

(8)构建IsExist函数,实现根据给定的学号查询某学生是否存在;

(9)构建Search函数,实现调用IsExist函数判断给定学号的某学生是否存在,若存在,则调用DisplayOne函数输出该学生的信息(包括姓名、学号、性别、三门课成绩),若不存在,则输出“查无此人”;

(10)构建Modify函数,实现调用IsExist函数判断给定学号的某学生是否存在,若存在,则修改该学生的信息(包括姓名、学号、性别、三门课成绩),若不存在,则输出“查无此人”;

(11)附加Check函数,检查用户输入规范的问题。

三、完整代码

#include <iostream>
#include <string.h>
#include <iomanip>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)   //解决Visual Studio中strcpy不安全报错问题
using namespace std;
int x = 0;
int* X = &x;   //指针计数器
struct student
{
	char name[10];
	char number[100];
	char sex[10];
	float Chinese;
	float math;
	float English;
	float AverageScore;
};
//--------------------------------------------------------------------------------------------------------------
//定义结构体数组:
struct student stu[100];   //限定100名学生
//--------------------------------------------------------------------------------------------------------------
//判断用户的输入是否正确(字符和字符串):
float Check(int a)
{
	if (a == 0)   //针对字符和字符串
	{
		float m;
		if (cin >> m)
		{
			return m;
		}
		else
		{
			cout << "输入错误,请重新输入:";
			cin.clear();
			cin.get();
			while (!(cin >> m))
			{
				cout << "输入错误,请重新输入:";
				cin.clear();
				cin.get();
			}
			return m;
		}
	}
	else if (a == 1)  //针对字符和字符串以及StudentAve函数中菜单的数字范围
	{
		float m;
		float c;
		if (cin >> m)
		{
			while (1)
			{
				if (m == 1 || m == 2 || m == 3)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					c = Check(1);
					return c;
					break;
				}
			}
		}
		else
		{
			cout << "输入错误,请重新输入:";
			cin.clear();
			cin.get();
			while (!(cin >> m))
			{
				cout << "输入错误,请重新输入:";
				cin.clear();
				cin.get();
			}
			while (1)
			{
				if (m == 1 || m == 2 || m == 3)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					c = Check(1);
					return c;
					break;
				}
			}
		}
	}
	else if (a == 2)   //针对字符和字符串以及重新查询和退出选择功能的数字范围
	{
		float m;
		float c;
		if (cin >> m)
		{
			while (1)
			{
				if (m == 1 || m == 2)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					c = Check(2);
					return c;
					break;
				}
			}
		}
		else
		{
			cout << "输入错误,请重新输入:";
			cin.clear();
			cin.get();
			while (!(cin >> m))
			{
				cout << "输入错误,请重新输入:";
				cin.clear();
				cin.get();
			}
			while (1)
			{
				if (m == 1 || m == 2)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					a = Check(2);
					return a;
					break;
				}
			}
		}
	}
	else if (a == 3)   //针对字符和字符串以及重新查询和退出选择功能的数字范围
	{
		float m;
		float c;
		if (cin >> m)
		{
			while (1)
			{
				if (m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					c = Check(3);
					return c;
					break;
				}
			}
		}
		else
		{
			cout << "输入错误,请重新输入:";
			cin.clear();
			cin.get();
			while (!(cin >> m))
			{
				cout << "输入错误,请重新输入:";
				cin.clear();
				cin.get();
			}
			while (1)
			{
				if (m == 1 || m == 2 || m == 3 || m == 4 || m == 5 || m == 6 || m == 7)
				{
					return m;
					break;
				}
				else
				{
					cout << "输入错误,请重新输入:";
					a = Check(3);
					return a;
					break;
				}
			}
		}
	}
}
//--------------------------------------------------------------------------------------------------------------
//输入学生信息
void Create(int p)
{
	if (x <= 100)   //设置上限,该表存放最多不超过100名学生的信息
	{
		int Y = x;
		cout << "请分别输入:姓名(不超过3个字)、学号(11位数字)、性别、语文成绩、数学成绩、英语成绩" << endl;
		for (int i = Y; i < Y + p; i++)
		{
			cin >> stu[i].name >> stu[i].number >> stu[i].sex >> stu[i].Chinese >> stu[i].math >> stu[i].English;
			if (i != Y + p - 1)
			{
				cout << "请输入下一个学生的信息:" << endl;
			}
			*X += 1;   //记录表中人数
		}
		cout << endl << endl;
		cout << "添加成功!" << endl << endl;
	}
	else
	{
		cout << "亲~表格人数已满,无法再继续添加了噢" << endl << endl << endl;
	}
	return;
}
//--------------------------------------------------------------------------------------------------------------
//输出所有学生信息
int DisplayAll(int a)
{
	if (a == 0)   //该函数基本功能的实现
	{
		cout << endl << "序号\t" << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << endl;
		for (int i = 0; stu[i].Chinese != 0; i++)
		{
			cout << i + 1 << ":\t";
			cout << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << endl;
		}
		cout << endl << endl;
	}
	else if (a == 1)   //StudentAve调用DisplayAll函数专属通道
	{
		cout << endl << "序号\t" << "姓名\t" << "学号\t\t" << "性别\t" << "平均成绩\t" << endl;
		for (int i = 0; stu[i].Chinese != 0; i++)
		{
			cout << i + 1 << ":\t";
			cout << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl;
		}
		cout << endl << endl;
	}
	return 0;
}
//--------------------------------------------------------------------------------------------------------------
//查询某个学生信息
int DisplayOne(int b, float* a)
{
	if (b == 0)   //该函数基本功能的实现
	{
		char A[1000];
		int c = 0;
		cout << "请输入你想查询学生的姓名:";
		cin >> A;
		cout << endl << endl;
		for (int i = 0; i < x; i++)
		{
			int a = strcmp(A, stu[i].name);
			if (a == 0)
			{
				cout << "查询结果:" << endl;
				cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << endl;
				cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << endl << endl;
				return 1;
				break;
			}
			else
			{
				c++;
			}
		}
		if (c == x)
		{
			cout << "查无此人" << endl << endl;
			return 0;
		}
	}
	else if (b == 1)   //StudentAve调用DisplayOne函数专属通道
	{
		char C[1000];
		int d = 0;
		cout << "请输入你想查询学生的姓名:";
		cin >> C;
		cout << endl << endl;
		for (int i = 0; i < x; i++)
		{
			int a = strcmp(C, stu[i].name);
			if (a == 0)
			{
				cout << "姓名\t" << "学号\t\t" << "性别\t" << "平均成绩\t" << endl;
				cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
				return 1;
				break;
			}
			else
			{
				d++;
			}
		}
		if (d == x)
		{
			cout << "查无此人" << endl << endl;
			return 0;
		}
	}
	else if (b == 2)   //TopScore调用DisplayOne函数专属通道
	{
		for (int i = 0; i < x; i++)
		{
			if (*a == stu[i].AverageScore)
			{
				cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
				cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
				cout << "查询成功!" << endl << endl << endl;
				break;
			}
		}
	}
	else if (b == 3)   //FailExam调用DisplayOne函数专属通道
	{
		cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
		for (int i = 0; i < x; i++)
		{
			if (*a == stu[i].AverageScore)
			{
				cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
				break;
			}
		}
	}
	return 0;
}
//--------------------------------------------------------------------------------------------------------------
//计算任意一门课的平均成绩
void CourseAve()
{
	char B[100];
	cout << "请输入您所要查询平均成绩的科目:";
	cin >> B;
	int sum = 0, a = 0;
	for (int i = 0; i < x; i++)
	{
		if (strcmp(B, "语文") == 0)
		{
			sum += stu[i].Chinese;
			a++;
		}
		else if (strcmp(B, "数学") == 0)
		{
			sum += stu[i].math;
			a++;
		}
		else if (strcmp(B, "英语") == 0)
		{
			sum += stu[i].English;
			a++;
		}
		else
		{
			cout << "没有此学科,请重新输入" << endl;
			CourseAve();
			a = 0;
			break;
		}
	}
	if (a == x)
	{
		float ave = (float)sum / x;
		cout << "该学科的平均成绩为:" << ave << endl << endl << endl;
	}
}
//--------------------------------------------------------------------------------------------------------------
//计算每个学生三门课程的平均成绩
int StudentAve(int c)
{
	if (c == 0)   //录入平均成绩并提供查询功能
	{
		for (int i = 0; i < x; i++)
		{
			stu[i].AverageScore = (float)(stu[i].Chinese + stu[i].math + stu[i].English) / 3;
		}
		cout << "平均成绩录入成功!" << endl;
		cout << "1.查看全部学生的平均成绩" << endl;
		cout << "2.查看某个学生的平均成绩" << endl;
		cout << "3.不查看" << endl;
		cout << "输入数字选择要实现的功能:";
		int a = Check(1);
		if (a == 1)   //查看全部学生的平均成绩
		{
			DisplayAll(1);
		}
		else if (a == 2)   //查看某个学生的平均成绩
		{
			float* a = NULL;
			while (1)
			{
				int k = DisplayOne(1, a);
				if (k == 1)
				{
					cout << "查询成功!" << endl << endl;
					break;
				}
				else
				{
					cout << "查询失败,是否重新查询?" << endl;
					cout << "1.是" << endl;
					cout << "2.否" << endl;
					int j = Check(2);
					if (j == 1)
					{
						continue;
					}
					else if (j == 2)
					{
						cout << endl << endl;
						break;
					}
				}
			}
		}
	}
	else if (c == 1)   //直接录入平均成绩,不提供查询功能
	{
		for (int i = 0; i < x; i++)
		{
			stu[i].AverageScore = (float)(stu[i].Chinese + stu[i].math + stu[i].English) / 3;
		}
	}
	return 0;
}
//--------------------------------------------------------------------------------------------------------------
// 平均成绩最高分学生的查找
void TopScore()
{
	StudentAve(1);   //录入每位同学的平均成绩
	//--------------------------------------------------------------------------------------------------------------
	//找出平均成绩中的最大值
	float max = stu[0].AverageScore;
	for (int i = 1; i < x; i++)
	{
		if (max < stu[i].AverageScore)
		{
			max = stu[i].AverageScore;
		}
	}
	float* b = &max;   //利用指针进行地址传递
	DisplayOne(2, b);
	return;
}
//--------------------------------------------------------------------------------------------------------------
//找出平均成绩中不合格的同学 
void FailExam()
{
	StudentAve(1);   //录入每位同学的平均成绩
	float fail;
	float* Fail = &fail;   //利用指针进行地址传递
	int k = 0;   //计数器 
	for (int i = 0; i < x; i++)
	{
		if (stu[i].AverageScore < 60)
		{
			fail = stu[i].AverageScore;
			DisplayOne(3, Fail);
		}
		else
		{
			k++;
		}
	}
	if (k == x)   //k=x即没有一位同学的成绩低于60分
	{
		cout << "全体及格!!!" << endl << endl << endl;
	}
	return;
}
//--------------------------------------------------------------------------------------------------------------
// 根据学号查询某学生是否存在
int IsExist(char b[100])
{
	int k = 0;
	for (int i = 0; i < x; i++)
	{
		int a = strcmp(b, stu[i].number);
		if (a == 0)
		{
			return 1;   //查询成功
			break;
		}
		else
		{
			k++;
		}
	}
	if (k == x)
	{
		return 0;   //查询失败
	}
}
void Search()
{
	char b[100];
	cout << "请输入你所要查询的学号:";
	cin >> b;
	int back = IsExist(b);   //调用IsExist函数判断该学生是否存在
	if (back == 1)
	{
		StudentAve(1);   //录入每位同学的平均成绩
		for (int i = 0; i < x; i++)
		{
			int a = strcmp(b, stu[i].number);
			if (a == 0)
			{
				cout << endl << endl;
				cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
				cout << endl << stu[i].name << "\t" << stu[i].number << "\t" << stu[i].sex << "\t" << stu[i].Chinese << "\t" << stu[i].math << "\t" << stu[i].English << "\t" << fixed << setprecision(2) << stu[i].AverageScore << endl << endl;
				cout << "查询成功!!!" << endl << endl;
				break;
			}
		}
	}
	else if(back == 0)
	{
		cout << "查无此人" << endl << endl;
	}
	return;
}
//--------------------------------------------------------------------------------------------------------------
// 修改学生信息
void Modify()
{
	char c[100];
	cout << "请输入你所要查询的学号:";
	cin >> c;
	int back = IsExist(c);   //调用IsExist函数判断该学生是否存在
	int f = 0;   //定位器
	if (back == 1)
	{
		StudentAve(1);   //录入每位同学的平均成绩
		for (int i = 0; i < x; i++)   //查找出该同学在结构体数组中的下标
		{
			int a = strcmp(c, stu[i].number);
			if (a == 0)
			{
				f = i;
			}
		}
		while (1)   //修改信息
		{
			cout << endl << endl;
			StudentAve(1);   //考虑到成绩的修改,此处重新录入每位同学的平均成绩
			cout << "姓名\t" << "学号\t\t" << "性别\t" << "语文\t" << "数学\t" << "英语\t" << "平均成绩\t" << endl;
			cout << endl << stu[f].name << "\t" << stu[f].number << "\t" << stu[f].sex << "\t" << stu[f].Chinese << "\t" << stu[f].math << "\t" << stu[f].English << "\t" << fixed << setprecision(2) << stu[f].AverageScore << endl << endl;
			cout << "+------------+" << endl;
			cout << "| 1.姓名     |" << endl;
			cout << "| 2.学号     |" << endl;
			cout << "| 3.性别     |" << endl;
			cout << "| 4.语文成绩 |" << endl;
			cout << "| 5.数学成绩 |" << endl;
			cout << "| 6.英语成绩 |" << endl;
			cout << "| 7.退出修改 |" << endl;
			cout << "+------------+" << endl;
			cout << "请选择你要修改的内容(输入数字):";
			int b = Check(3);
			cout << endl << endl;
			if (b == 1)   //改姓名
			{
				char name[10];
				cout << "修改为(不超过三个字):";
				cin >> name;
				strcpy(stu[f].name, name);
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 2)   //改学号
			{
				char number[100];
				cout << "修改为(11位数字):";
				cin >> number;
				strcpy(stu[f].number, number);
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 3)   //改性别
			{
				char sex[100];
				cout << "修改为:";
				cin >> sex;
				strcpy(stu[f].sex, sex);
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 4)   //改语文成绩
			{
				cout << "修改为:";
				float Chinese = Check(0);
				stu[f].Chinese = Chinese;
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 5)   //改数学成绩
			{
				cout << "修改为:";
				float math = Check(0);
				stu[f].math = math;
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 6)   //改英语成绩
			{
				cout << "修改为:";
				float English = Check(0);
				stu[f].English = English;
				cout << endl << endl;
				cout << "修改成功!";
			}
			else if (b == 7)   //退出修改
			{
				cout << "退出成功!" << endl << endl;
				break;
			}
		}
	}
	else if (back == 0)
	{
		cout << "查无此人" << endl << endl;
	}
	return;
}
//--------------------------------------------------------------------------------------------------------------
//主体部分
int main()
{
	//--------------------------------------------------------------------------------------------------------------
	//初始化界面
	system("color F0");   //设置背景色为白色,字体颜色为黑色
	cout << "+------------------------+" << endl;
	cout << "|  Programmer:豆漿油條  |" << endl;
	cout << "|  Version:3.8.4        |" << endl;
	cout << "+------------------------+" << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl;
	cout << "\t\t\t\t\t   欢迎使用学生成绩管理系统!!!" << endl;
	Sleep(5000);   //延时5秒
	system("cls");   //清屏
	//--------------------------------------------------------------------------------------------------------------
	//菜单界面
	while (1)
	{
		//--------------------------------------------------------------------------------------------------------------
		//菜单选项:
		cout << "+-----------------------------------------+" << endl;
		cout << "| 1.录入学生信息                          |" << endl;
		cout << "| 2.查看所有学生信息                      |" << endl;
		cout << "| 3.查询某个学生信息                      |" << endl;
		cout << "| 4.查看任意一门课的平均成绩              |" << endl;
		cout << "| 5.录入所有学生的平均成绩(附带查询功能)|" << endl;
		cout << "| 6.查看平均成绩最高分的学生              |" << endl;
		cout << "| 7.查看平均成绩不及格的学生              |" << endl;
		cout << "| 8.给定学号查询学生                      |" << endl;
		cout << "| 9.给定学号修改学生信息                  |" << endl;
		cout << "| 0.退出程序                              |" << endl;
		cout << "+-----------------------------------------+" << endl;
		cout << "请输入数字以实现功能:";
		//--------------------------------------------------------------------------------------------------------------
		//利用Check函数判断用户的输入是否正确(字符和字符串):
		float n = Check(0);
		cout << endl << endl;
		//--------------------------------------------------------------------------------------------------------------
		//按钮对应功能的实现:
		if (n == 1)
		{
			cout << "请输入你要添加学生的人数:";
			int p = Check(0);
			Create(p);
			Sleep(3000);   //延时3秒
			system("cls");   //清屏
		}
		else if (n == 2)
		{
			DisplayAll(0);
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 3)
		{
			float* a = NULL;
			while (1)
			{
				int k = DisplayOne(0, a);
				if (k == 1)
				{
					cout << "查询成功!" << endl << endl;
					break;
				}
				else
				{
					cout << "查询失败,是否重新查询?" << endl;
					cout << "1.是" << endl;
					cout << "2.否" << endl;
					int j = Check(2);
					if (j == 1)
					{
						continue;
					}
					else if (j == 2)
					{
						cout << endl << endl;
						break;
					}
				}
			}
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 4)
		{
			CourseAve();
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 5)
		{
			StudentAve(0);
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 6)
		{
			TopScore();
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 7)
		{
			FailExam();
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 8)
		{
			Search();
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 9)
		{
			Modify();
			system("pause");   //界面静止
			system("cls");   //清屏
		}
		else if (n == 0)
		{
			cout << "你真的要退出了吗?" << endl;
			cout << "1.强忍离去" << endl;
			cout << "2.继续使用" << endl;
			float a = Check(2);
			cout << endl << endl;
			if (a == 1)
			{
				system("cls");   //清屏
				cout << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << endl << "\t\t\t\t\t\t   期待您的下次使用!" << endl << endl << endl;
				Sleep(3000);   //延时3秒
				break;
			}
			else if (a == 2)
			{
				system("cls");   //清屏
				continue;
			}
		}
		//--------------------------------------------------------------------------------------------------------------
		//判断用户的输入是否正确(非餐单中的整型数字):
		else
		{
			cout << "您输入数字有误,请重新输入" << endl << endl << endl;
		}
		//--------------------------------------------------------------------------------------------------------------
	}
	return 0;
}

注:该程序代码通过Visual Studio2019版编写。

四、总结

        程序采用的是最基础的C++知识,逻辑结构相对简单,但也可能会存在瑕疵和漏洞。大家如果发现代码有什么问题或者有什么改进的意见和看法,欢迎在评论区中指出。

  • 44
    点赞
  • 345
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值