diff --git a/StudentSystem.cpp b/StudentSystem.cpp new file mode 100644 index 0000000..53c55f4 --- /dev/null +++ b/StudentSystem.cpp @@ -0,0 +1,218 @@ +#include +#include +#include +#include +#include + +// 基类 Student +class Student { + protected: + std::string name; + std::string id; + float totalScore; + + public: + Student(const std::string &name, const std::string &id) : name(name), id(id), totalScore(0.0f) {} + virtual ~Student() {} + + virtual void calculateTotalScore() = 0; + virtual void display() const = 0; + + const std::string &getName() const { + return name; + } + const std::string &getId() const { + return id; + } + float getTotalScore() const { + return totalScore; + } +}; + +// 本科生类 Undergraduate +class Undergraduate : public Student { + private: + float usualScore; + float midtermScore; + float finalScore; + + public: + Undergraduate(const std::string &name, const std::string &id, float usual, float midterm, float final) + : Student(name, id), usualScore(usual), midtermScore(midterm), finalScore(final) {} + + void calculateTotalScore() override { + totalScore = usualScore * 0.3f + midtermScore * 0.3f + finalScore * 0.4f; + } + + void display() const override { + std::cout << "姓名: " << name << ", ID: " << id + << ", 平时成绩: " << usualScore + << ", 期中成绩: " << midtermScore + << ", 期末成绩: " << finalScore + << ", 总分: " << totalScore << std::endl; + } +}; + +// 研究生类 Graduate +class Graduate : public Student { + private: + float writtenScore; + float interviewScore; + + public: + Graduate(const std::string &name, const std::string &id, float written, float interview) + : Student(name, id), writtenScore(written), interviewScore(interview) {} + + void calculateTotalScore() override { + totalScore = writtenScore * 0.7f + interviewScore * 0.3f; + } + + void display() const override { + std::cout << "姓名: " << name << ", ID: " << id + << ", 笔试成绩: " << writtenScore + << ", 面试成绩: " << interviewScore + << ", 总分: " << totalScore << std::endl; + } +}; + +// 学生管理类 StudentManager +class StudentManager { + private: + std::map students; + + public: + void addStudent(Student *student) { + students[student->getId()] = student; + } + + void removeStudent(const std::string &id) { + if (students.find(id) != students.end()) { + delete students[id]; + students.erase(id); + std::cout << "学生 " << id << " 成功删除." << std::endl; + } else { + std::cerr << "学生 " << id << " 不存在." << std::endl; + } + } + + void queryStudent(const std::string &id) { + if (students.find(id) != students.end()) { + students[id]->display(); + } else { + std::cerr << "学生 " << id << " 不存在." << std::endl; + } + } + + void displayAllStudents() { + for (const auto &pair : students) { + pair.second->display(); + } + } + + void saveToFile(const StudentManager &manager, const std::string &filename) { + std::ofstream outfile(filename); + if (!outfile.is_open()) { + std::cerr << "文件不存在" << std::endl; + return; + } + for (const auto &pair : manager.students) { + pair.second->display(); + outfile << pair.second->getName() << "," << pair.second->getId() << "," << pair.second->getTotalScore() << std::endl; + } + outfile.close(); + std::cout << "数据成功录入." << std::endl; + } + +}; + +int main() { + StudentManager manager; + bool running = true; + int choice; + + while (running) { + std::cout << "学生成绩管理系统\n"; + std::cout << "输入1以添加学生\n"; + std::cout << "输入2以查询学生\n"; + std::cout << "输入3以删除学生\n"; + std::cout << "输入4以展示所有学生成绩\n"; + std::cout << "输入5以保存数据\n"; + std::cout << "输入6以退出\n"; + std::cout << "请输入你的指令: \n"; + std::cin >> choice; + + switch (choice) { + case 1: { + std::string name, id, type; + float score1, score2, score3; + std::cout << "输入学生姓名: "; + std::cin >> name; + std::cout << "输入学生ID: "; + std::cin >> id; + std::cout << "如果是本科生请输入u,研究生则输入g :"; + std::cin >> type; + + + if (type == "u" || type == "U") { + std::cout << "输入平时成绩: "; + std::cin >> score1; + std::cout << "输入期中成绩: "; + std::cin >> score2; + std::cout << "输入期末成绩: "; + std::cin >> score3; + std::cout << "添加成功\n"<calculateTotalScore(); + manager.addStudent(undergraduate); + } else if (type == "g" || type == "G") { + std::cout << "输入笔试成绩: "; + std::cin >> score1; + std::cout << "输入面试成绩: "; + std::cin >> score2; + std::cout << "添加成功\n"<calculateTotalScore(); + manager.addStudent(graduate); + } else { + std::cerr << "不存在该类型. 请重试." << std::endl; + } + break; + } + case 2: { + std::string id; + std::cout << "输入需要查询的学生的ID: "; + std::cin >> id; + manager.queryStudent(id); + break; + } + case 3: { + std::string id; + std::cout << "输入需要删除的学生的ID: "; + std::cin >> id; + manager.removeStudent(id); + break; + } + case 4: { + manager.displayAllStudents(); + break; + } + case 5: { + std::string filename; + std::cout << "输入文件名称: "; + std::cin >> filename; + manager.saveToFile(manager, filename); + break; + } + case 6: { + running = false; + std::cout << "正在退出" << std::endl; + break; + } + default: { + std::cout << "不存在该选项,请重试." << std::endl; + } + } + } + return 0; +} +