目录
成绩管理系统--C/C++实现
- 项目内容基本满足要求,且有诸多改进,总体上没有问题
- 项目采用C++,需要掌握类、文件操作、各种数据结构等基本知识。
- 希望能对入门的程序猿一点帮助
一、功能概述
使用C++完成该系统的开发,通过该系统可以实现用户信息和学生信息的创建、查询、修改、删除,用户权限的判断,以及数据保存、读取等功能
二、功能详细说明
-
学生管理:
- 增加学生 (
addStudent
) - 显示学生信息 (
displayStudents
) - 修改学生信息 (
modifyStudent
) - 删除学生 (
deleteStudent
) - 添加学生成绩 (
addStudentgrade
) - 显示学生成绩 (
displayStudentsgrade
) - 修改学生成绩 (
modifyStudentgrade
) - 删除学生成绩 (
deleteStudentgrade
) - 计算学生成绩 (
calculateGrade
)
- 增加学生 (
-
用户管理:
- 用户注册 (
registerUser
) - 用户登录 (
loginUser
) - 删除用户 (
delete_user
)
- 用户注册 (
-
文件操作:
- 保存学生信息到文件 (
saveToFile
) - 从文件中加载学生信息 (
loadFromFile
) - 备份数据 (
backupData
) - 恢复数据 (
restoreData
) - 保存注册信息 (
saveregister
) - 从文件中导入注册信息 (
loadFromFile_rg
) - 删除文件中的注册信息 (
deFromFile_rg
)
- 保存学生信息到文件 (
-
权限管理:
- 根据不同角色(管理员、教师、学生、家长)设置不同的权限 (
initRolePermissions
) - 检查当前用户是否有权限执行某个操作 (
hasPermission
)
- 根据不同角色(管理员、教师、学生、家长)设置不同的权限 (
-
主菜单:
- 系统主菜单 (
mainMenu
) - 登录前的主界面 (
main
)
- 系统主菜单 (
三、代码实现
#include <bits/stdc++.h>
using namespace std;
// 学生类
class Student {
public:
int id;
string name;
string gender;
int age;
map<string, double> grades; // map of course name and grade
double totalGrade;
int failedSubjects;
int coursesTaken;
string remarks;
//初始化学生
Student(int id, string name, string gender, int age)
: id(id), name(name), gender(gender), age(age), totalGrade(0), failedSubjects(0), coursesTaken(0),remarks("无") {}
//计算总成绩
void calculateTotalGrade() {
totalGrade = 0;
failedSubjects = 0;
for (auto& course : grades) {
totalGrade += course.second;//map的对应
if (course.second < 60) failedSubjects++;
}
if (!grades.empty()) totalGrade /= grades.size();
}
//计算GPA
double getGPA() const {
if (totalGrade - 50 < 0)return 0;
return (totalGrade - 50) / 10;
}
//评级
string getGradeEvaluation() const {
if (totalGrade >= 90) return "优";
else if (totalGrade >= 80) return "良";
else if (totalGrade >= 70) return "中等";
else if (totalGrade >= 60) return "不佳";
else return "不及格";
}
void saveGradesToFile() const {
ofstream outFile(to_string(id) + "_grades.txt");
for (const auto& grade : grades) {
outFile << grade.first << " " << grade.second << endl;
}
outFile.close();
}
//从文件加载科目成绩
void loadGradesFromFile() {
ifstream inFile(to_string(id) + "_grades.txt");
if (inFile.is_open()) {
grades.clear();
string subject;
double grade;
while (inFile >> subject >> grade) {
grades[subject] = grade;
}
inFile.close();
calculateTotalGrade();
}
}
};
// 用户类
class User {
public:
string username;
string password;
string role;
//初始化用户
User(string username, string password, string role)
: username(username), password(password), role(role) {}
};
// 学生管理系统类
class StudentManagementSystem {
private:
vector<Student> students;
vector<User> users;
User* currentUser;
map<string, vector<string>> rolePermissions;
public:
StudentManagementSystem() {
currentUser = nullptr;
initRolePermissions();
}
//设置不同角色不同权限
void initRolePermissions() {
rolePermissions["admin"] = { "addStudent", "displayStudents", "modifyStudent", "deleteStudent", "saveToFile", "loadFromFile", "backupData", "restoreData", "feedback", "testModule", "logout" ,"calculateGrade" };
rolePermissions["teacher"] = { "addStudent", "displayStudents", "saveToFile", "loadFromFile", "calculateGrade", "logout" };
rolePermissions["student"] = { "calculateGrade", "feedback", "logout" };
rolePermissions["parent"] = { "displayStudents","calculateGrade", "logout" };
}
//注册
void registerUser() {
string username, password, role;
cout << "Enter username: ";
cin >> username;
cout << "Enter password: ";
cin >> password;
cout << "Enter role (admin/teacher/student/parent): ";
for (auto& user : users) {
if (user.username == username && user.password == password) {
cout << "此人已经存在,此人是" << user.role << endl;
return;
}
}
cin >> role;
users.push_back(User(username, password, role));
cout << "Registration successful!" << endl;
}
//保存注册信息
void saveToFile_rg() {
if (!hasPermission("saveToFile")) return;
ofstream outFile("register.txt");
for (const auto& user : users) {
outFile << user.username << " " << user.password << " " << user.role << endl;
}
outFile.close();
cout << "Data saved successfully!" << endl;
}
//从文件中导入注册信息
void loadFromFile_rg() {
ifstream inFile("register.txt");
if (inFile.is_open()) {
string username, password, role;
while (inFile >> username >> password >> role) {
User user1(username, password, role);
users.push_back(user1);
}
inFile.close();
cout << "Data loaded successfully!" << endl;
}
else {
cout << "Unable to open file!" << endl;
}
}
//删除注册信息
void deFromFile_rg() {
string file = "register.txt";
ofstream file_writer(file, ios_base::out);
}
void deFile(string s) {
string file = s;
ofstream file_writer(file, ios_base::out);
}
//删除用户
void delete_user() {
while (1) {
string username1;
cout << "请输入username" << endl;
cin >> username1;
for (vector<User>::iterator it = users.begin(); it != users.end(); ) {
if (it->username == username1) {
cout << "delete successful! 此用户为 " << it->role << endl;
it = users.erase(it);
break;
}
else it++;
}
cout << "继续请按非零数字";
int f; cin >> f;
if (!f)return;
}
}
//登录
bool loginUser() {
string username, password;
cout << "Enter username: ";
cin >> username;
cout << "Enter password: ";
cin >> password;
for (auto& user : users) {
if (user.username == username && user.password == password) {
currentUser = &user;
cout << "Login successful! Welcome, " << user.role << endl;
return true;
}
}
cout << "Login failed! Please try again." << endl;
return false;
}
//增加学生
void addStudent() {
if (!hasPermission("addStudent")) return;
while (1) {
int id, age;
string name, gender, remark;
cout << "Enter student ID: ";
cin >> id;
if (id < 0) {
cout << "Invalid id! Please try again." << endl;
return;
}
for (auto& student : students)
if (student.id == id) {
cout << "此人存在" << endl; return;
}
cout << "Enter student name: ";
cin >> name;
cout << "Enter student gender: ";
cin >> gender;
cout << "Enter student age: ";
cin >> age;
if (age < 0) {
cout << "Invalid age! Please try again." << endl;
return;
}
students.push_back(Student(id, name, gender, age));
cout << "Student added successfully!" << endl;
cout << "按非零键继续";
int f; cin >> f; if (!f)return;
}
}
//显示学生信息
void displayStudents() {
if (!hasPermission("displayStudents")) return;
for (const auto& student : students) {
cout << "ID: " << student.id << ", Name: " << student.name << ", Gender: " << student.gender
<< ", Age: " << student.age <<" 反馈: "<<student.remarks<<" 不及格数 " <<student.failedSubjects<<" 已选科目数量 "<<student.coursesTaken << endl;
}
}
//修改学生信息
void modifyStudent() {
if (!hasPermission("modifyStudent")) return;
int id;
cout << "Enter student ID to modify: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
string name, gender, remark;
int age;
cout << "Enter new name: ";
cin >> name;
cout << "Enter new gender: ";
cin >> gender;
cout << "Enter new age: ";
cin >> age;
if (age < 0) {
cout << "Invalid age! Please try again." << endl;
return;
}
cout << "Enter new remark: ";
cin >> remark;
student.name = name;
student.gender = gender;
student.age = age;
student.remarks = remark;
cout << "Student modified successfully!" << endl;
cout << "按非零键继续" << endl;
int f; cin >> f; if (!f)return; modifyStudent();
return;
}
}
cout << "Student not found!" << endl;
}
//删除学生信息
void deleteStudent() {
if (!hasPermission("deleteStudent")) return;
int id;
cout << "Enter student ID to delete: ";
cin >> id;
for (auto it = students.begin(); it != students.end(); ++it) {
if (it->id == id) {
students.erase(it);
cout << "Student deleted successfully!" << endl;
cout << "按非零键继续" << endl;
int f; cin >> f; if (!f)return; deleteStudent();
return;
}
}
cout << "Student not found!" << endl;
}
//添加学生成绩
void addStudentgrade() {
if (!hasPermission("addStudent")) return;
int id;
string subject;
double grade;
cout << "Enter student subject: ";
cin >> subject;
cout << "Enter student grade: ";
cin >> grade;
if (grade < 0 || grade > 100) {
cout << "Invalid grade! Grade must be between 0 and 100." << endl;
return;
}
cout << "Enter student ID to modify: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
student.grades.insert(pair<string, double>(subject, grade));
cout << "Student grade added successfully!" << endl;
student.calculateTotalGrade();
cout << "Student added successfully!" << endl;
cout << "按非零键继续" << endl;
int f; cin >> f; if (!f)return;
addStudentgrade(); return;
}
}
cout << "Student not found!" << endl;
}
//显示学生成绩
void displayStudentsgrade() {
if (!hasPermission("displayStudents")) return;
for (const auto& student : students) {
cout << "ID: " << student.id << ", Name: " << student.name << ", Gender: " << student.gender
<< ", Age: " << student.age << ", Total Grade: " << student.totalGrade << ", GPA: " << student.getGPA()
<< ", Grade Evaluation: " << student.getGradeEvaluation();
cout << endl;
}
}
//修改学生成绩
void modifyStudentgrade() {
if (!hasPermission("modifyStudent")) return;
int id;
cout << "Enter student ID to modify: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
string subject;
double grade;
cout << "Enter student subject: ";
cin >> subject;
cout << "Enter student grade: ";
cin >> grade;
student.grades.insert(pair<string, double>(subject, grade));
cout << "Student modified successfully!" << endl;
student.calculateTotalGrade();
cout << "按非零键继续" << endl;
int f; cin >> f; if (!f)return;
modifyStudentgrade(); return;
}
}
cout << "Student not found!" << endl;
}
//删除学生成绩
void deleteStudentgrade() {
if (!hasPermission("deleteStudent")) return;
int id;
cout << "Enter student ID to delete: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
student.grades.clear();
cout << "Student modified successfully!" << endl;
cout << "按非零键继续" << endl;
int f; cin >> f; if (!f)return; deleteStudentgrade();
return;
}
}
cout << "Student not found!" << endl;
}
//保存到文件中
void saveToFile() {
if (!hasPermission("saveToFile")) return;
deFile("students.txt");
ofstream outFile("students.txt");
for (const auto& student : students) {
outFile << student.id << " " << student.name << " " << student.gender << " " << student.age << " "
<< student.totalGrade << " " << student.failedSubjects << " " << student.coursesTaken << " "
<< student.remarks << endl;
}
outFile.close();
for (const auto& student : students) {
student.saveGradesToFile();
}
cout << "Data saved successfully!" << endl;
}
//从文件中导入
void loadFromFile() {
if (!hasPermission("loadFromFile")) return;
ifstream inFile("students.txt");
if (inFile.is_open()) {
students.clear();
int id, age;
string name, gender;
double totalGrade;
int failedSubjects, coursesTaken;
string remarks;
while (inFile >> id >> name >> gender >> age >> totalGrade >> failedSubjects >> coursesTaken >> remarks) {
Student student(id, name, gender, age);
student.totalGrade = totalGrade;
student.failedSubjects = failedSubjects;
student.coursesTaken = coursesTaken;
student.remarks = remarks;
student.loadGradesFromFile();
students.push_back(student);
}
inFile.close();
cout << "Data loaded successfully!" << endl;
}
else {
cout << "Unable to open file!" << endl;
}
}
//备份数据
void backupData() {
if (!hasPermission("backupData")) return;
deFile("backupData");
ofstream backupFile("backup.txt");
for (const auto& student : students) {
backupFile << student.id << " " << student.name << " " << student.gender << " " << student.age << " "
<< student.totalGrade << " " << student.failedSubjects << " " << student.coursesTaken << " "
<< student.remarks << endl;
}
backupFile.close();
for (const auto& student : students) {
student.saveGradesToFile();
}
cout << "Data backup successfully!" << endl;
}
//恢复数据
void restoreData() {
if (!hasPermission("restoreData")) return;
ifstream backupFile("backup.txt");
if (backupFile.is_open()) {
students.clear();
int id, age;
string name, gender;
double totalGrade;
int failedSubjects, coursesTaken;
string remarks;
while (backupFile >> id >> name >> gender >> age >> totalGrade >> failedSubjects >> coursesTaken >> remarks) {
Student student(id, name, gender, age);
student.totalGrade = totalGrade;
student.failedSubjects = failedSubjects;
student.coursesTaken = coursesTaken;
student.remarks = remarks;
student.loadGradesFromFile();
students.push_back(student);
}
backupFile.close();
cout << "Data restored successfully!" << endl;
}
else {
cout << "Unable to open backup file!" << endl;
}
}
//计算成绩
void calculateGrade() {
if (!hasPermission("calculateGrade")) return;
int id;
cout << "Enter student ID to calculate grade: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
student.calculateTotalGrade();
cout << "Total Grade: " << student.totalGrade << ", GPA: " << student.getGPA()
<< ", Grade Evaluation: " << student.getGradeEvaluation(); int i = 1;
for (auto& t : student.grades) {
cout << " 科目" <<i<<":" << t.first << " 分数:" << t.second << " "; i++;
}cout << endl;
return;
}
}
cout << "Student not found!" << endl;
}
//保存注册信息
void saveregister() {
if (!hasPermission("saveToFile")) return;
deFromFile_rg();
saveToFile_rg();
}
//反馈
void feedback() {
if (!hasPermission("feedback")) return;
int id;
string feedback;
cout << "Enter student ID to give feedback: ";
cin >> id;
for (auto& student : students) {
if (student.id == id) {
cout << "Enter feedback: ";
cin.ignore();
getline(cin, feedback);
student.remarks = feedback;
cout << "Feedback added successfully!" << endl;
return;
}
}
cout << "Student not found!" << endl;
}
//测试
void testModule() {
if (!hasPermission("testModule")) return;
cout << "Testing module..." << endl;
//待添加
}
//检查
bool hasPermission(const string& action) {
if (currentUser == nullptr) {
cout << "You need to login first!" << endl;
return false;
}
if (find(rolePermissions[currentUser->role].begin(), rolePermissions[currentUser->role].end(), action) == rolePermissions[currentUser->role].end()) {
cout << "You do not have permission to perform this action!" << endl;
return false;
}
return true;
}
//主界面
void mainMenu() {
while (true) {
cout << "\nMain Menu\n";
cout << "1. Add Student\n";
cout << "2. Display Students\n";
cout << "3. Modify Student\n";
cout << "4. Delete Student\n";
cout << "5. Save to File\n";
cout << "6. Load from File\n";
cout << "7. Backup Data\n";
cout << "8. Restore Data\n";
cout << "9. single Grade\n";
cout << "10. Feedback\n";
cout << "11. save_regiser\n";
cout << "12. add_Student_grade\n";
cout << "13. display_Students_grade\n";
cout << "14. modify_Student_grade\n";
cout << "15. delete_Student_grade\n";
cout << "16. Logout\n";
cout << "Enter your choice: ";
int choice;
cin >> choice;
switch (choice) {
case 1:
addStudent();
break;
case 2:
displayStudents();
break;
case 3:
modifyStudent();
break;
case 4:
deleteStudent();
break;
case 5:
saveToFile();
break;
case 6:
loadFromFile();
break;
case 7:
backupData();
break;
case 8:
restoreData();
break;
case 9:
calculateGrade();
break;
case 10:
feedback();
break;
case 11:
saveregister();
break;
case 12:
addStudentgrade();
break;
case 13:
displayStudentsgrade();
break;
case 14:
modifyStudentgrade();
break;
case 15:
deleteStudentgrade();
break;
case 16:
currentUser = nullptr;
return;
case 17:
testModule(); break;
default:
cout << "Invalid choice! Please try again." << endl;
}
cout << "是否保存,保存请按非零数";
int f; cin >> f;
if (f)backupData();
}
}
};
#include<Windows.h>
int main() {
StudentManagementSystem sms;
//画爱心
/* system(" color 01");//设计程序颜色
printf(" 成绩管理系统\n");//打印文字
system(" color 0c");
float x, y, a;//定义变量x,y,a
for (y = 1.5f; y > -1; y -= 0.1f)
{
for (x = -1.5f; x < 1.5f; x += .05f) {
a = x * x + y * y - 1;
putchar(a * a * a - x * x * y * y * y < 0.0f ? 'x' : ' ');
}
Sleep(150);//停顿函数(1.5秒钟)
putchar('\n'); //换行
}
system(" color 01");
*/
sms.loadFromFile_rg();
while (true) {
cout << "\nWelcome to Student Management System\n";
cout << "1. Register\n";
cout << "2. Login\n";
cout << "3. Exit\n";
cout << "4.delete_user\n";
cout << "Enter your choice: ";
int choice;
cin >> choice;//选择
switch (choice) {
case 1:
sms.registerUser();
break;
case 2:
if (sms.loginUser()) {
sms.mainMenu();
}
break;
case 3:
return 0;
case 4:
sms.delete_user(); break;
default:
cout << "Invalid choice! Please try again." << endl;
}
}
}
四、总结
以上就是今天要讲的内容,本文介绍了学生管理系统的开发,提供了完整有序的撰写思路,先前的思路仅供参考,最终以源码为准。如果对你有帮助,还请点点关注,我会继续发布其他有价值的内容。