基本要求: 1、程序功能 编程实现一个基础的成绩管理系统。 2、设计目的 通过本程序综合掌握类类型、函数、文件等知识的综合使用。 3、功能要求(可扩充功能) (1)实现简单的菜单设计,如下所示: 1 添加学生信息 2 显示学生信息 3 查找学生信息 4 成绩计算 5 按总分降序输出 0 退出 (2)每个学生的信息至少包括姓名、学号、3门课程的成绩、班级等信息。 (3)“添加学生信息”:输入新的学生信息以后,系统将把相关信息存储到文件中

时间: 2024-03-25 16:38:56 浏览: 11
好的,以下是一个简单的成绩管理系统的实现,满足上述要求: ```c++ #include <iostream> #include <fstream> #include <vector> #include <algorithm> using namespace std; class Student { private: string name; string id; int score1; int score2; int score3; string cls; public: Student(string name = "", string id = "", int score1 = 0, int score2 = 0, int score3 = 0, string cls = "") : name(name), id(id), score1(score1), score2(score2), score3(score3), cls(cls) {} string getName() const { return name; } string getId() const { return id; } int getScore1() const { return score1; } int getScore2() const { return score2; } int getScore3() const { return score3; } string getCls() const { return cls; } void setName(string name) { this->name = name; } void setId(string id) { this->id = id; } void setScore1(int score1) { this->score1 = score1; } void setScore2(int score2) { this->score2 = score2; } void setScore3(int score3) { this->score3 = score3; } void setCls(string cls) { this->cls = cls; } void print() const { cout << "Name: " << name << ", ID: " << id << ", Score1: " << score1 << ", Score2: " << score2 << ", Score3: " << score3 << ", Class: " << cls << endl; } void save(ofstream& fout) const { fout << name << " " << id << " " << score1 << " " << score2 << " " << score3 << " " << cls << endl; } }; bool cmp(const Student& s1, const Student& s2) { return s1.getScore1() + s1.getScore2() + s1.getScore3() > s2.getScore1() + s2.getScore2() + s2.getScore3(); } void addStudent(vector<Student>& students, ofstream& fout) { cout << "Please input student's name, id, score1, score2, score3, class: "; string name, id, cls; int score1, score2, score3; cin >> name >> id >> score1 >> score2 >> score3 >> cls; students.push_back(Student(name, id, score1, score2, score3, cls)); students.back().save(fout); cout << "Add student successfully!" << endl; } void showStudents(const vector<Student>& students) { for (const auto& student : students) { student.print(); } } void findStudent(const vector<Student>& students) { cout << "Please input student's name or id: "; string keyword; cin >> keyword; for (const auto& student : students) { if (student.getName() == keyword || student.getId() == keyword) { student.print(); return; } } cout << "Cannot find student!" << endl; } void calcScore(const vector<Student>& students) { for (const auto& student : students) { cout << "Name: " << student.getName() << ", ID: " << student.getId() << ", Total score: " << student.getScore1() + student.getScore2() + student.getScore3() << endl; } } void sortStudents(vector<Student>& students) { sort(students.begin(), students.end(), cmp); showStudents(students); } int main() { vector<Student> students; ifstream fin("students.dat"); if (fin) { string name, id, cls; int score1, score2, score3; while (fin >> name >> id >> score1 >> score2 >> score3 >> cls) { students.push_back(Student(name, id, score1, score2, score3, cls)); } fin.close(); } ofstream fout("students.dat", ios::app); while (true) { cout << "Menu:" << endl; cout << "1. Add student information" << endl; cout << "2. Show student information" << endl; cout << "3. Find student information" << endl; cout << "4. Calculate total score" << endl; cout << "5. Sort by total score" << endl; cout << "0. Exit" << endl; int choice; cin >> choice; switch (choice) { case 1: addStudent(students, fout); break; case 2: showStudents(students); break; case 3: findStudent(students); break; case 4: calcScore(students); break; case 5: sortStudents(students); break; case 0: fout.close(); return 0; default: cout << "Invalid choice!" << endl; break; } } return 0; } ``` 以上代码中,我们使用了类 Student 来表示每个学生的信息,通过学生的姓名、学号、3门课程的成绩、班级等信息来创建一个学生对象。在类中,我们定义了一些 getter 和 setter 方法,用于获取和设置学生的各种信息,以及 print 和 save 方法,分别用于在控制台输出学生信息和将学生信息存储到文件中。 在主函数中,我们使用了一个 vector 来存储所有学生对象,然后根据用户的选择来执行不同的操作。具体来说,我们实现了以下几个函数: - addStudent:用于添加一个新的学生信息,首先从控制台获取学生的各种信息,然后创建一个新的学生对象,并将其存储到文件中和 vector 中。 - showStudents:用于显示所有学生的信息,遍历 vector 中的所有学生对象并调用 print 方法输出。 - findStudent:用于查找指定学生的信息,首先从控制台获取关键字,然后遍历 vector 中的所有学生对象,如果找到了与关键字匹配的学生,则调用 print 方法输出其信息。 - calcScore:用于计算每个学生的总分,遍历 vector 中的所有学生对象,并根据各科成绩计算总分并输出。 - sortStudents:用于按照总分降序排列所有学生,调用 sort 函数并传入自定义的 cmp 函数,然后调用 showStudents 方法输出排序后的结果。 在程序开始时,我们从文件中读取所有学生的信息,并将其存储到 vector 中;在程序结束时,我们将 vector 中的所有学生信息存储回文件中。

相关推荐

最新推荐

recommend-type

[Python语言程序设计-第11期] 测验1: Python基本语法元素 (第1周)

4.字符串是一个字符序列,给字符串s,以下表示s从右侧向左第三个字符的是:s[-3] 5.以下不是Python语言合法命名的是:5MyGod 6.在Python中,用于获取用户输入的函数是:input() 7.下面不属于Python保留字的是:type 8...
recommend-type

单片机C语言程序设计:T0控制LED实现二进制计数

说明:本例对按键的计数没有使用查询法,没有使用外部中断函数,没有使用定时或计数中断函数。而是启用了计数器,连接在 T0 引脚的按键每次按下时,会使计数寄存器的值递增,其值通过 LED以二进制形式显示
recommend-type

Oracle实验六 PL/SQL程序设计

(1)创建一个函数,以客户号为参数,返回该客户订购图书的价格总额。 create or replace function sumprice( id customers.customer_id%type) return books.cost%type as sumprice books.cost%type; begin ...
recommend-type

c++程序设计基础课程设计学生成绩管理系统实验报告

设计一个类Cstudent,类中包含一个学生的基本数据如下: 编号,姓名,性别,年龄,数学成绩,计算机成绩,外语成绩。 并假设编号为整数,且从1号往后连续编号;姓名为字符串,性别为字符。如: 1 LiPing m 18 89 98 ...
recommend-type

函数版-简单的学生信息管理系统(python实现)

函数版-简单的学生信息管理系统(python实现)功能如下开始部分增加学生信息修改学生信息删除学生信息查询学生显示所有学生的信息 学了一段时间的python后,自己动手做了一个函数版-简单的学生信息管理系统。 功能...
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

用matlab绘制高斯色噪声情况下的频率估计CRLB,其中w(n)是零均值高斯色噪声,w(n)=0.8*w(n-1)+e(n),e(n)服从零均值方差为se的高斯分布

以下是用matlab绘制高斯色噪声情况下频率估计CRLB的代码: ```matlab % 参数设置 N = 100; % 信号长度 se = 0.5; % 噪声方差 w = zeros(N,1); % 高斯色噪声 w(1) = randn(1)*sqrt(se); for n = 2:N w(n) = 0.8*w(n-1) + randn(1)*sqrt(se); end % 计算频率估计CRLB fs = 1; % 采样频率 df = 0.01; % 频率分辨率 f = 0:df:fs/2; % 频率范围 M = length(f); CRLB = zeros(M,1); for
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。