首先,我们需要定义一个学生结构体,用于存储学生的基本信息:
struct Student {
string id; // 学号
string name; // 姓名
string gender; // 性别
string dormitory; // 宿舍号码
string phone; // 电话号码
};
然后,我们需要定义一个函数用于从学生基本信息文件中读取数据并存储到一个 vector 中:
vector readStudents(string filename) {
vector students;
ifstream infile(filename);
string line;
while (getline(infile, line)) {
stringstream ss(line);
string id, name, gender, dormitory, phone;
ss >> id >> name >> gender >> dormitory >> phone;
Student student = {id, name, gender, dormitory, phone};
students.push_back(student);
}
infile.close();
return students;
}
接下来,我们需要定义一个课程结构体,用于存储学生成绩的基本信息:
struct Course {
string student_id; // 学号
string course_id; // 课程编号
string course_name; // 课程名称
int credit; // 学分
int usual_score; // 平时成绩
int experiment_score; // 实验成绩
int final_score; // 卷面成绩
int comprehensive_score; // 综合成绩
int earned_credit; // 实得学分
};
接着,我们需要定义一个函数用于从学生成绩基本信息文件中读取数据并存储到一个 vector 中:
vector readCourses(string filename) {
vector courses;
ifstream infile(filename);
string line;
while (getline(infile, line)) {
stringstream ss(line);
string student_id, course_id, course_name;
int credit, usual_score, experiment_score, final_score, comprehensive_score, earned_credit;
ss >> student_id >> course_id >> course_name >> credit >> usual_score >> experiment_score >> final_score >> comprehensive_score >> earned_credit;
Course course = {student_id, course_id, course_name, credit, usual_score, experiment_score, final_score, comprehensive_score, earned_credit};
courses.push_back(course);
}
infile.close();
return courses;
}
现在,我们已经完成了数据的读取,接下来我们可以实现一些基本的功能,比如:查询某个学生的基本信息和成绩信息,计算某个学生的总成绩和平均成绩等。
查询某个学生的基本信息和成绩信息:
void queryStudentInfo(string id, vector students, vector courses) {
cout << "学号\t姓名\t性别\t宿舍号码\t电话号码" << endl;
for (int i = 0; i < students.size(); i++) {
if (students[i].id == id) {
cout << students[i].id << "\t" << students[i].name << "\t" << students[i].gender << "\t" << students[i].dormitory << "\t" << students[i].phone << endl;
break;
}
}
cout << endl;
cout << "学号\t课程编号\t课程名称\t学分\t平时成绩\t实验成绩\t卷面成绩\t综合成绩\t实得学分" << endl;
for (int i = 0; i < courses.size(); i++) {
if (courses[i].student_id == id) {
cout << courses[i].student_id << "\t" << courses[i].course_id << "\t" << courses[i].course_name << "\t" << courses[i].credit << "\t" << courses[i].usual_score << "\t" << courses[i].experiment_score << "\t" << courses[i].final_score << "\t" << courses[i].comprehensive_score << "\t" << courses[i].earned_credit << endl;
}
}
}
计算某个学生的总成绩和平均成绩:
void calculateScore(string id, vector courses) {
int total_score = 0;
int count = 0;
for (int i = 0; i < courses.size(); i++) {
if (courses[i].student_id == id) {
total_score += courses[i].comprehensive_score;
count++;
}
}
if (count > 0) {
double average_score = (double)total_score / count;
cout << "学号为 " << id << " 的学生的总成绩为 " << total_score << ",平均成绩为 " << average_score << endl;
} else {
cout << "学号为 " << id << " 的学生没有成绩信息" << endl;
}
}
最后,我们可以在主函数中调用上述函数来实现相应的功能:
int main() {
vector students = readStudents("A.txt");
vector courses = readCourses("B.txt");
queryStudentInfo("01", students, courses);
calculateScore("02", courses);
return 0;