用c++代码实现实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改或添加新数据。如果为第一次录入(之前无保存的数据),则允许教师录入相关数据。具体功能包括: 1.可录入或修改课程信息,包括:课程编号、课程名称; 2.可录入、修改、删除学生(数量不限)成绩,成绩项目包含两项:平时成绩、期末成绩,并按照各50%比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 请录入“C++编程”课程成绩 学号:201901 姓名:张三 平时成绩:60 期末成绩:80 3.信息显示功能,可显示课程编号、课程名称、所有学生的成绩单。成绩单格式如下: 学号 姓名 平时成绩 期末成绩 总成绩 5.能够将上述数据保存在文件中,二进制、文本文件均可。 6.可读取上述文件。 以学生身份进入后,如果已保存了成绩数据,可将文件中数据读取出来,并允许查询。如果尚无保存数据,提示尚无成绩信息。具体功能包括: 1.信息显示功能,可显示课程编号、课程名称、所有学生的成绩单。
时间: 2024-02-17 16:02:29 浏览: 103
用C++实现的一个成绩管理系统,连接数据库SQL Server 2005,实现基本的添加删除查询修改等功能.zip
很好,以下是用 C++ 实现的单门课程成绩管理系统的代码:
```c++
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
// 定义学生结构体
struct Student {
char id[20];
char name[50];
float dailyScore;
float finalScore;
float totalScore;
};
// 定义课程结构体
struct Course {
char id[20];
char name[50];
Student* students;
int studentCount;
};
// 显示菜单
void showMenu() {
cout << "请选择身份:" << endl;
cout << "1. 教师" << endl;
cout << "2. 学生" << endl;
cout << "0. 退出" << endl;
}
// 读取学生信息
void readStudentData(Student& s) {
cout << "学号:";
cin >> s.id;
cout << "姓名:";
cin >> s.name;
cout << "平时成绩:";
cin >> s.dailyScore;
cout << "期末成绩:";
cin >> s.finalScore;
s.totalScore = s.dailyScore * 0.5 + s.finalScore * 0.5;
}
// 显示学生信息
void showStudentData(Course& c) {
cout << "课程编号:" << c.id << endl;
cout << "课程名称:" << c.name << endl;
cout << "学号\t姓名\t平时成绩\t期末成绩\t总成绩" << endl;
for (int i = 0; i < c.studentCount; i++) {
Student s = c.students[i];
cout << s.id << "\t" << s.name << "\t" << s.dailyScore << "\t\t" << s.finalScore << "\t\t" << s.totalScore << endl;
}
}
// 保存学生信息到文件
void saveStudentData(Course& c) {
ofstream out;
out.open("data.bin", ios::binary);
out.write((char*)&c, sizeof(c));
out.close();
}
// 从文件读取学生信息
bool loadStudentData(Course& c) {
ifstream in;
in.open("data.bin", ios::binary);
if (!in) {
return false;
}
in.read((char*)&c, sizeof(c));
in.close();
return true;
}
// 释放学生内存
void freeStudentData(Course& c) {
delete[] c.students;
c.studentCount = 0;
}
// 添加学生
void addStudent(Course& c) {
Student s;
readStudentData(s);
c.studentCount++;
c.students = (Student*)realloc(c.students, sizeof(Student) * c.studentCount);
c.students[c.studentCount - 1] = s;
saveStudentData(c);
}
// 修改学生
void updateStudent(Course& c) {
char id[20];
cout << "请输入要修改的学生学号:";
cin >> id;
for (int i = 0; i < c.studentCount; i++) {
Student& s = c.students[i];
if (strcmp(s.id, id) == 0) {
readStudentData(s);
saveStudentData(c);
return;
}
}
cout << "未找到该学生!" << endl;
}
// 删除学生
void deleteStudent(Course& c) {
char id[20];
cout << "请输入要删除的学生学号:";
cin >> id;
for (int i = 0; i < c.studentCount; i++) {
Student& s = c.students[i];
if (strcmp(s.id, id) == 0) {
for (int j = i; j < c.studentCount - 1; j++) {
c.students[j] = c.students[j + 1];
}
c.studentCount--;
c.students = (Student*)realloc(c.students, sizeof(Student) * c.studentCount);
saveStudentData(c);
return;
}
}
cout << "未找到该学生!" << endl;
}
// 教师身份操作
void teacherMode() {
Course c;
bool hasData = loadStudentData(c);
if (hasData) {
cout << "读取到上次保存的数据:" << endl;
showStudentData(c);
} else {
cout << "未找到保存的数据,开始录入数据:" << endl;
cout << "请输入课程编号:";
cin >> c.id;
cout << "请输入课程名称:";
cin >> c.name;
c.studentCount = 0;
c.students = NULL;
}
while (true) {
cout << endl;
cout << "请选择操作:" << endl;
cout << "1. 录入学生信息" << endl;
cout << "2. 修改学生信息" << endl;
cout << "3. 删除学生信息" << endl;
cout << "4. 显示学生信息" << endl;
cout << "0. 退出" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
addStudent(c);
break;
case 2:
updateStudent(c);
break;
case 3:
deleteStudent(c);
break;
case 4:
showStudentData(c);
break;
case 0:
freeStudentData(c);
return;
default:
cout << "无效的操作!" << endl;
break;
}
}
}
// 学生身份操作
void studentMode() {
Course c;
bool hasData = loadStudentData(c);
if (hasData) {
showStudentData(c);
} else {
cout << "尚无成绩信息!" << endl;
}
}
int main() {
while (true) {
showMenu();
int choice;
cin >> choice;
switch (choice) {
case 1:
teacherMode();
break;
case 2:
studentMode();
break;
case 0:
return 0;
default:
cout << "无效的身份!" << endl;
break;
}
}
}
```
这段代码实现了单门课程成绩管理系统的基本功能,包括教师和学生两种身份的操作,以及将数据保存在文件中,二进制和文本文件都可以。如果需要更多功能,可以在此基础上进行扩展。
阅读全文