-
#服务电话专线#高考学生成绩管理系统的设计和实现
顶 顶 热2024/06/13 09:58:53 发布331408 浏览0 回复0 点赞
帖子:21
精华:0
注册:2023/10/23 03:14:19
IP属地:未知
一、设计内容
实现了一个学生成绩管理系统,可以用来管理学生的基本信息和成绩信息。它提供了多种功能,包括录入学生信息、修改学生成绩、删除学生信息、增加学生信息、计算总分和平均分、查询学生信息、查询班级信息、成绩排序和统计班级不及格人数等。
二、设计目标
目标旨在实现一个功能完善、易于使用的学生成绩管理系统。它应该能够满足教师和学生对于成绩管理的各种需求,提供快捷、准确、可靠的服务。
三、设计技术
系统设计使用了C++ 语言和面向对象程序设计的方法来实现。它使用了类和对象来封装数据和操作,定义了 `Student` 类和 `StudentManager` 类来分别表示学生和学生管理器。这两个类都包含了数据成员和成员函数,用来存储数据和实现操作。
四、设计细节
细节使用了文件输入输出流来从文件中读取学生信息和将学生信息保存到文件中。它还使用了类和对象来封装数据和操作,提高代码的可读性和可维护性。在处理各种功能时,都遵循模块化、结构化的原则,将程序划分为若干个模块,每个模块负责实现一个特定的功能。
五、系统程序测试
(1)测试用例
测试用例应该覆盖程序的各个功能,包括录入学生信息、修改学生成绩、删除学生信息、增加学生信息、计算总分和平均分、查询学生信息、查询班级信息、成绩排序和统计班级不及格人数等。对于每个功能,都应该编写若干个测试用例,包括正常情况和异常情况。
l 录入学生信息:
这个功能可以从文件中读取学生信息,并将其存储到程序中。它使用了文件输入流来读取文件中的数据,并使用Student 类的构造函数来创建学生对象。
l 修改学生成绩:
这个功能可以修改指定学生的成绩。它首先根据用户输入的学号或姓名查找学生,然后调用Student 类的 updateScore 函数来修改学生的成绩。
l 删除学生信息:
这个功能可以删除指定学生的信息。它首先根据用户输入的学号或姓名查找学生,然后将其从程序中删除。
l 增加学生信息:
这个功能可以增加新的学生信息。它根据用户输入的数据创建一个新的学生对象,并将其添加到程序中。
l 计算总分和平均分:
这个功能可以计算所有学生的总分和平均分。它遍历所有学生,计算每个学生的总分和平均分,并输出结果。
l 查询学生信息:
这个功能可以查询指定学生的信息。它首先根据用户输入的学号或姓名查找学生,然后输出该学生的详细信息。
l 查询班级信息:
这个功能可以查询指定班级的信息。它遍历所有学生,找到属于指定班级的学生,并输出他们的详细信息。
l 成绩排序:
这个功能可以对所有学生的成绩进行排序。它根据用户输入的排序方式(升序或降序),使用冒泡排序算法对所有学生进行排序。
l 统计班级不及格人数:
这个功能可以统计指定班级中每门课程的不及格人数。它遍历所有属于指定班级的学生,统计每门课程的不及格人数,并输出结果。
(2)测试结果与分析
分析测试结果,可以分析程序的正确性,并对程序进行改进。如果发现程序存在错误或者不足之处,应该及时修改并重新测试。
系统测试运行界面:
功能1:文本录入(如下图所示)
成功查询到文件录入的学生信息和成绩。
功能2:修改成绩
功能3:删除成绩
删除该学生成绩信息后,未查询到该学生,说明功能3能成功运行。
功能4:增加成绩
实现查询一个未增加的学生的学号,结果自然是未查询到。然后开始增加该名学号的学生。
增加该名学号的学生后查询
成功查询到改名学号的学生,增加功能成功。
功能5:计算总分和平均分
计算总分和平均分运行成功。
功能6:查询成绩
成功查询到学号为6号的学生成绩信息,功能6查询可以运行。
功能7:查询班级信息
查询班级信息成功,说明功能7成功运行。
功能8:成绩排序
这个是升序排序,运行成功。
下面是运行按降序排序功能,看是否能正常运行。结果如下图:
结果显示能成功按降序进行学生成绩的排序,说明升序和降序排序都能运行成功。功能8没问题。
功能9:统计班级不及格人数
查询到5班每门专业课均有不及格人数,说明功能9能成功统计班级不及格人数。
功能0:退出系统
功能0成功退出了系统,说明该功能有效。
以上是系统的全部功能测试,均已测试完毕,都是没有问题的,能正常运行。程序测试部分已经结束。
六、完整系统代码展示
#include <iostream>
#include <cstring>
#include <fstream>
#include <sstream>
#include <algorithm>
using namespace std;
const int MAX_STUDENTS = 1000;
class Student
{
public:
string id;
string name;
string gender;
string classId;
int scores[5];
int totalScore;
double averageScore;
public:
Student();
Student(string Id, string Name, string Gender, string ClassId, int Scores[]);
void updateScore(int subjectIndex, int newScore);
};
Student::Student(string Id, string Name, string Gender, string ClassId, int Scores[])
{
id = Id;
name = Name;
gender = Gender;
classId = ClassId;
totalScore = 0;
averageScore = 0;
for (int i = 0; i < 5; i++)
{
scores[i] = Scores[i];
totalScore += Scores[i];
}
averageScore = totalScore / 5.0;
}
Student::Student()
{
totalScore = 0;
averageScore = 0;
for (int i = 0; i < 5; i++)
{
scores[i] = 0;
}
}
void Student::updateScore(int subjectIndex, int newScore)
{
totalScore -= scores[subjectIndex];
scores[subjectIndex] = newScore;
totalScore += newScore;
averageScore = totalScore / 5.0;
}
class StudentManager
{
private:
Student students[MAX_STUDENTS];
int studentCount;
public:
StudentManager();
void loadStudents();
void saveStudents();
void addStudent(Student student);
void deleteStudent(string idOrName);
void updateStudent(string idOrName, int subjectIndex, int newScore);
void printStudent(Student student);
void printStudents();
void queryStudent(string idOrName);
void queryClass(string classId);
void sortStudents(int order);
void countFailures(string classId);
};
StudentManager::StudentManager()
{
studentCount = 0;
}
void StudentManager::loadStudents()
{
ifstream file("students.txt");
if (file.is_open())
{
string line;
while (getline(file, line))
{
istringstream iss(line);
string id, name, gender, classId;
int scores[5] = { 0 };
iss >> id >> name >> gender >> classId;
for (int i = 0; i < 5; i++)
{
iss >> scores[i];
}
students[studentCount++] = Student(id, name, gender, classId, scores);
}
file.close();
}
}
void StudentManager::saveStudents()
{
ofstream file("students.txt");
if (file.is_open())
{
for (int i = 0; i < studentCount; i++)
{
Student student = students[i];
file << student.id << " " << student.name << " " << student.gender << " " << student.classId << " ";
for (int j = 0; j < 5; j++)
{
file << student.scores[j] << " ";
}
file << endl;
}
file.close();
}
}
void StudentManager::addStudent(Student student)
{
students[studentCount++] = student;
}
void StudentManager::deleteStudent(string idOrName)
{
int index = -1;
for (int i = 0; i < studentCount; i++)
{
if (students[i].id == idOrName || students[i].name == idOrName)
{
index = i;
break;
}
}
if (index != -1)
{
for (int i = index; i < studentCount - 1; i++)
{
students[i] = students[i + 1];
}
studentCount--;
cout << "删除成功" << endl;
}
else
{
cout << "未找到该学生" << endl;
}
}
void StudentManager::updateStudent(string idOrName, int subjectIndex, int newScore)
{
int index = -1;
for (int i = 0; i < studentCount; i++)
{
if (students[i].id == idOrName || students[i].name == idOrName)
{
index = i;
break;
}
}
if (index != -1)
{
students[index].updateScore(subjectIndex, newScore);
cout << "修改成功" << endl;
}
else
{
cout << "未找到该学生" << endl;
}
}
void StudentManager::printStudent(Student student)
{
cout << "学号:" << student.id << " " << "姓名:" << student.name << " " << "性别:" <<
student.gender << " " << "班级:" << student.classId;
cout << " 各科成绩:";
for (int i = 0; i < 5; i++)
{
cout << student.scores[i] << " ";
}
cout << "总成绩:" << student.totalScore << " " << "平均成绩:" << student.averageScore << endl;
}
void StudentManager::printStudents()
{
for (int i = 0; i < studentCount; i++)
{
printStudent(students[i]);
}
}
void StudentManager::queryStudent(string idOrName)
{
int index = -1;
for (int i = 0; i < studentCount; i++)
{
if (students[i].id == idOrName || students[i].name == idOrName)
{
index = i;
break;
}
}
if (index != -1)
{
Student student = students[index];
cout << "学号:" << student.id << " " << "姓名:" << student.name << " " <<
"性别:" << student.gender << " " << "班级:" << student.classId << " ";
cout << " 各科成绩:";
for (int i = 0; i < 5; i++)
{
cout << student.scores[i] << " ";
}
cout << "总成绩:" << student.totalScore << " " << "平均成绩:" << student.averageScore << endl;
}
else
{
cout << "未找到该学生" << endl;
}
}
void StudentManager::queryClass(string classId)
{
for (int i = 0; i < studentCount; i++)
{
if (students[i].classId == classId)
{
printStudent(students[i]);
}
}
}
void StudentManager::sortStudents(int order)
{
if (order == 1)
{
for (int i = 0; i < studentCount - 1; i++)
{
for (int j = 0; j < studentCount - i - 1; j++)
{
if (students[j].averageScore > students[j + 1].averageScore)
{
swap(students[j], students[j + 1]);
}
}
}
}
else if (order == 2)
{
for (int i = 0; i < studentCount - 1; i++)
{
for (int j = 0; j < studentCount - i - 1; j++)
{
if (students[j].averageScore < students[j + 1].averageScore)
{
swap(students[j], students[j + 1]);
}
}
}
}
}
void StudentManager::countFailures(string classId)
{
int failures[5] = { 0 };
for (int i = 0; i < studentCount; i++)
{
if (students[i].classId == classId)
{
for (int j = 0; j < 5; j++)
{
if (students[i].scores[j] < 60)
{
failures[j]++;
}
}
}
}
for (int i = 0; i < 5; i++)
{
cout << "专业课" << i + 1 << "不及格人数:" << failures[i] << endl;
}
}
void menu()
{
cout << " 学生成绩管理 " << endl;
cout << " " << 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 << "8.成绩排序" << endl;
cout << "9.统计班级不及格人数" << endl;
cout << "0.退出系统" << endl;
cout << "===============" << endl;
}
int main()
{
StudentManager studentManager;
studentManager.loadStudents();
while (true)
{
menu();
cout << "请输入选择:";
int choice;
cin >> choice;
switch (choice)
{
case 1:
{
studentManager.loadStudents();
system("pause");
system("cls");
break;
}
case 2:
{
string idOrName;
cout << "请输入学号或姓名:";
cin >> idOrName;
int subjectIndex;
cout << "请输入要修改的专业课序号(1-5):";
cin >> subjectIndex;
subjectIndex--;
int newScore;
cout << "请输入新成绩:";
cin >> newScore;
studentManager.updateStudent(idOrName, subjectIndex, newScore);
system("pause");
system("cls");
break;
}
case 3:
{
string idOrName;
cout << "请输入学号或姓名:";
cin >> idOrName;
studentManager.deleteStudent(idOrName);
system("pause");
system("cls");
break;
}
case 4:
{
string id, name, gender, classId;
int scores[5] = { 0 };
cout << "请输入学号:";
cin >> id;
cout << "请输入姓名:";
cin >> name;
cout << "请输入性别:";
cin >> gender;
cout << "请输入班级:";
cin >> classId;
cout << "请输入五门专业课成绩:";
for (int i = 0; i < 5; i++)
{
cin >> scores[i];
}
studentManager.addStudent(Student(id, name, gender, classId, scores));
cout << "增加成功" << endl;
system("pause");
system("cls");
break;
}
case 5:
{
studentManager.printStudents();
system("pause");
system("cls");
break;
}
case 6:
{
string idOrName;
cout << "请输入学号或姓名:";
cin >> idOrName;
studentManager.queryStudent(idOrName);
system("pause");
system("cls");
break;
}
case 7:
{
string classId;
cout << "请输入班级:";
cin >> classId;
studentManager.queryClass(classId);
system("pause");
system("cls");
break;
}
case 8:
{
int order;
cout << "请输入排序方式(1-升序,2-降序):";
cin >> order;
studentManager.sortStudents(order);
studentManager.printStudents();
system("pause");
system("cls");
break;
}
case 9:
{
string classId;
cout << "请输入班级:";
cin >> classId;
studentManager.countFailures(classId);
system("pause");
system("cls");
break;
}
case 0:
{
studentManager.saveStudents();
system("pause");
system("cls");
return 0;
}
default:
break;
}
}
return 0;
}
七、系统设计总结
总结实现了一个功能完善、易于使用的学生成绩管理系统。它采用面向对象程序设计的方法,使用了类和对象来封装数据和操作。在实现过程中遇到了一些问题,但都得到了妥善解决。通过这个课题,学习者可以更好地掌握C++ 语言和面向对象程序设计的方法。
【温馨提示】 转发本信息给好友或分享到朋友圈,被转发超过20次,信息将自动置顶一周!
楼主其他帖子
-
“女性容易上火是缺钙吗?专家解答及有效调理方法”#医疗内幕#
2024/10/18 14:53:03239681浏览 -
2024女友养成类游戏手游推荐,可以恋爱的游戏手游排行榜#恋爱咨询#
2024/06/15 17:27:15330674浏览 -
耐美尔喷剂说明书 耐美尔喷剂正品官网#婚姻生活#
2024/04/07 22:39:10336302浏览 -
性趣提升:男性情趣用品的精选指南与实用技巧#婚姻生活#
2024/01/19 19:16:13342170浏览 -
《MQTT:物联网通信的关键技术》#消费维权#
2023/12/28 10:53:42343594浏览
新帖速递
-
苏州三六六社会实践青少年上海天文馆研学营火热招募中#育儿交流#
2025/08/28 15:24:45 -
成都房产抵押贷款vs信用贷#日常分享#
2025/08/25 17:04:34 -
按揭房屋抵押贷款办理流程全解析#日常分享#
2025/08/25 16:43:05 -
140万的房产抵押贷款究竟能贷多少#日常分享#
2025/08/25 16:11:19 -
避暑+探险!苏州三六六青少年象山清凉营,名额有限速抢!#育儿交流#
2025/08/04 10:49:39 -
深圳贷款电话,光明押车贷款申请条件#日常分享#
2025/07/19 23:44:26
精华好贴
-
中国十大b2b网站排名 阿里巴巴慧聪中国网#政府监督#
2023/11/07 13:26:07 -
苍蝇最怕什么气味(揭秘驱赶苍蝇的神器)#医疗援助#
2023/06/16 08:33:34 -
怎样正确清洗包皮,有什么需要注意的吗?##
2023/02/16 21:59:42 -
微信:16日起将对假冒官方组织公众号采取删除账号信息等措施##
2023/01/14 17:16:44 -
🔥 🔥 钜惠来袭!12🈷 9日隆重开业!翠丰生鲜名家汇店等你来挑“鲜”!##
2022/12/12 23:09:04 -
门面转让,金码头最好的位置##
2022/12/12 22:59:21