酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

c++程序: 实现一个单门课程成绩管理系统。进入系统时,用户可选择身份:1.教师;2学生。 以教师身份进入后,如果上次已保存了数据,可将文件中数据读取出来,并允许修改部分数据。如果未保存数据,则允许教师录入新的数据。具体功能包括: 可录入或修改课程信息,包括:课程编号、课程名称; 可录入或修改课程的评分项目 (数量任意,不低于3项),包括:项目名称、所占分比例(需进行合法性检测,各项目比例之和为100%);示例如下: 项目名称 所占比例 实验 30% 作业 20% 期中考试 20% 期末考试 30% 注: 一旦录入学生成绩后,评分项目不允许修改;未录入成绩数据时,允许进行修改。 3.可录入、修改、刑除学生(学生数量不限)读门课程的各项成绩,并按照其比例自动算出总成绩;学生基本信息包括学号、姓名;示例如下: 学号:201901 姓名:张三 实验:60 作业:70 期中考试:60 期未考试:80 信息显示功能。可显示课程信息、评分项目信息、所有学生的成绩单。 5.能够将上述数据保存在文件中,二进制、文本文件均可。(课程信息和评 分项目信息可保存一个文件,成绩单可保存一个文件;也可全部保存为

以下是一个C++实现的单门课程成绩管理系统的示例程序: ```cpp #include <iostream> #include <fstream> #include <vector> using namespace std; struct Course { int courseNumber; string courseName; }; struct GradeItem { string itemName; float itemPercentage; }; struct Student { int studentNumber; string studentName; vector<float> grades; }; vector<Course> courses; vector<GradeItem> gradeItems; vector<Student> students; void saveData() { ofstream file("data.txt", ios::out | ios::binary); // Save courses int courseCount = courses.size(); file.write(reinterpret_cast<const char*>(&courseCount), sizeof(int)); for (const Course& course : courses) { file.write(reinterpret_cast<const char*>(&course), sizeof(Course)); } // Save grade items int gradeItemCount = gradeItems.size(); file.write(reinterpret_cast<const char*>(&gradeItemCount), sizeof(int)); for (const GradeItem& gradeItem : gradeItems) { file.write(reinterpret_cast<const char*>(&gradeItem), sizeof(GradeItem)); } // Save students int studentCount = students.size(); file.write(reinterpret_cast<const char*>(&studentCount), sizeof(int)); for (const Student& student : students) { file.write(reinterpret_cast<const char*>(&student), sizeof(Student)); } file.close(); } void loadData() { ifstream file("data.txt", ios::in | ios::binary); if (!file) { cout << "No saved data found." << endl; return; } // Load courses int courseCount; file.read(reinterpret_cast<char*>(&courseCount), sizeof(int)); courses.resize(courseCount); for (Course& course : courses) { file.read(reinterpret_cast<char*>(&course), sizeof(Course)); } // Load grade items int gradeItemCount; file.read(reinterpret_cast<char*>(&gradeItemCount), sizeof(int)); gradeItems.resize(gradeItemCount); for (GradeItem& gradeItem : gradeItems) { file.read(reinterpret_cast<char*>(&gradeItem), sizeof(GradeItem)); } // Load students int studentCount; file.read(reinterpret_cast<char*>(&studentCount), sizeof(int)); students.resize(studentCount); for (Student& student : students) { file.read(reinterpret_cast<char*>(&student), sizeof(Student)); } file.close(); } void enterCourseInfo() { Course course; cout << "Enter course number: "; cin >> course.courseNumber; cin.ignore(); cout << "Enter course name: "; getline(cin, course.courseName); courses.push_back(course); } void enterGradeItems() { gradeItems.clear(); int gradeItemCount; cout << "Enter the number of grade items: "; cin >> gradeItemCount; cin.ignore(); for (int i = 0; i < gradeItemCount; i++) { GradeItem gradeItem; cout << "Enter item name: "; getline(cin, gradeItem.itemName); cout << "Enter item percentage: "; cin >> gradeItem.itemPercentage; cin.ignore(); gradeItems.push_back(gradeItem); } } void enterStudentGrades() { Student student; cout << "Enter student number: "; cin >> student.studentNumber; cin.ignore(); cout << "Enter student name: "; getline(cin, student.studentName); student.grades.resize(gradeItems.size()); for (int i = 0; i < gradeItems.size(); i++) { cout << "Enter grade for " << gradeItems[i].itemName << ": "; cin >> student.grades[i]; } students.push_back(student); } void displayCourseInfo() { cout << "Course Information:" << endl; for (const Course& course : courses) { cout << "Course Number: " << course.courseNumber << endl; cout << "Course Name: " << course.courseName << endl; cout << endl; } } void displayGradeItems() { cout << "Grade Item Information:" << endl; for (const GradeItem& gradeItem : gradeItems) { cout << "Item Name: " << gradeItem.itemName << endl; cout << "Item Percentage: " << gradeItem.itemPercentage << "%" << endl; cout << endl; } } void displayStudentGrades() { cout << "Student Grades:" << endl; for (const Student& student : students) { cout << "Student Number: " << student.studentNumber << endl; cout << "Student Name: " << student.studentName << endl; cout << "Grades:" << endl; for (int i = 0; i < gradeItems.size(); i++) { cout << gradeItems[i].itemName << ": " << student.grades[i] << endl; } cout << endl; } } void showMenu() { cout << "1. Enter course information" << endl; cout << "2. Enter grade items" << endl; cout << "3. Enter student grades" << endl; cout << "4. Display course information" << endl; cout << "5. Display grade items" << endl; cout << "6. Display student grades" << endl; cout << "7. Save data" << endl; cout << "8. Exit" << endl; } int main() { loadData(); int choice; do { showMenu(); cout << "Enter your choice: "; cin >> choice; cin.ignore(); switch (choice) { case 1: enterCourseInfo(); break; case 2: enterGradeItems(); break; case 3: enterStudentGrades(); break; case 4: displayCourseInfo(); break; case 5: displayGradeItems(); break; case 6: displayStudentGrades(); break; case 7: saveData(); break; case 8: cout << "Exiting..." << endl; break; default: cout << "Invalid choice. Please try again." << endl; } cout << endl; } while (choice != 8); return 0; } ``` 该程序使用了结构体来表示课程、评分项目和学生,使用了向量(vector)来存储数据。程序将数据保存在一个名为"data.txt"的二进制文件中,可以在每次启动程序时加载数据,并可以在用户选择保存数据时将数据写入文件。用户可以通过选择菜单选项来进行不同的操作,包括录入课程信息、评分项目和学生成绩,显示课程信息、评分项目和学生成绩,和保存数据。 [2024-05-24 10:20:03 | AI写代码神器 | 4293点数解答]

相关提问