C++实现简单学生信息管理系统

以下是一份基本的“C++实现简单学生信息管理系统”的攻略:

步骤1:确定基本需求

在设计学生信息管理系统之前,我们应该先确定需要什么功能。这是你应该问自己的问题:

  1. 是一个控制台程序还是有图形化界面?
  2. 需要记录哪些学生信息(例如姓名、年龄、性别、学号、课程等级、分数)?
  3. 可以输入、输出和编辑吗?
  4. 是否可以按照特定的标准对学生进行排序和筛选?
  5. 可以进行计算吗,例如平均分、最高分、最低分等?

回答完这些问题之后,我们就可以开始设计学生信息管理系统了。

步骤2:设计系统框架

我们的系统将包括:

  1. 学生类
  2. 管理类:包括添加、删除、排序、编辑、输出等功能。
  3. 界面:选择菜单项时,可以调用相应的管理函数。

步骤3:编写学生类

class Student
{
  string name_; // 姓名
  int age_; // 年龄
  string gender_; // 性别
  string id_; // 学号
  map<string, int> scores_; // 课程及成绩

public:
  // 构造函数
  Student(string name, int age, string gender, string id,
          map<string, int> scores)
      : name_(name), age_(age), gender_(gender), id_(id), scores_(scores) {}

  // 获取学生信息
  string name() const { return name_; }
  int age() const { return age_; }
  string gender() const { return gender_; }
  string id() const { return id_; }
  map<string, int> scores() const { return scores_; }
};

这个学生类包括了学生的姓名、年龄、性别、学号和一个包含课程及成绩的映射(map<string, int>)。

步骤4:编写学生管理类

class StudentManager
{
  vector<Student> students_;

public:
  // 添加学生
  void AddStudent(const Student &student) { students_.push_back(student); }

  // 删除学生
  void RemoveStudent(const string &id)
  {
    for (auto iter = students_.begin(); iter != students_.end();)
    {
      if (iter->id() == id)
        iter = students_.erase(iter);
      else
        ++iter;
    }
  }

  // 按照成绩排序
  void SortByScore()
  {
    sort(students_.begin(), students_.end(),
         [](const Student &a, const Student &b) {
           auto scores_a = a.scores();
           auto scores_b = b.scores();
           int total_scores_a = 0, total_scores_b = 0;
           for (auto iter = scores_a.begin(); iter != scores_a.end(); ++iter)
           {
             total_scores_a += iter->second;
           }
           for (auto iter = scores_b.begin(); iter != scores_b.end(); ++iter)
           {
             total_scores_b += iter->second;
           }
           return total_scores_a > total_scores_b;
         });
  }

  // 输出所有学生信息
  void PrintAllStudents() const
  {
    for (const auto &student : students_)
    {
      cout << "姓名:" << student.name() << endl;
      cout << "年龄:" << student.age() << endl;
      cout << "性别:" << student.gender() << endl;
      cout << "学号:" << student.id() << endl;
      cout << "成绩:" << endl;

      auto scores = student.scores();
      for (const auto &score : scores)
      {
        cout << score.first << ":" << score.second << endl;
      }

      cout << endl;
    }
  }
};

这个学生管理类包括添加学生、删除学生、按照成绩排序和输出所有学生信息的功能。

步骤5:编写界面

int main()
{
  StudentManager student_manager;

  while (true)
  {
    cout << "请选择:\n"
         << "1. 添加学生\n"
         << "2. 删除学生\n"
         << "3. 按照成绩排序\n"
         << "4. 输出所有学生信息\n"
         << "0. 退出\n";

    int option;
    cin >> option;

    if (option == 0)
      break;
    else if (option == 1)
    {
      cout << "请输入学生的姓名、年龄、性别、学号以及成绩:\n";
      string name, gender, id;
      int age;
      cin >> name >> age >> gender >> id;
      map<string, int> scores;
      string course;
      int score;
      while (cin >> course >> score)
      {
        scores[course] = score;
        if (cin.get() == '\n')
        {
          student_manager.AddStudent(Student(name, age, gender, id, scores));
          break;
        }
      }
    }
    else if (option == 2)
    {
      cout << "请输入要删除学生的学号:\n";
      string id;
      cin >> id;
      student_manager.RemoveStudent(id);
    }
    else if (option == 3)
    {
      student_manager.SortByScore();
    }
    else if (option == 4)
    {
      student_manager.PrintAllStudents();
    }
    else
    {
      cout << "无效选项,请重试\n";
    }
  }

  return 0;
}

这个界面包括一个主循环,以及添加学生、删除学生、按照成绩排序和输出所有学生信息的菜单项。

示例1:添加学生

假设我们希望添加一个名为“张三”的学生,他的年龄为18岁,是男生,学号为“101001”,并且他参加了语文、数学和英语三门课程,分别得到了80分、90分和70分。我们会执行以下步骤:

  1. 在菜单中选择“1. 添加学生”。
  2. 输入“张三 18 男 101001 语文 80 数学 90 英语 70”。
  3. 按下回车键。

这样,我们就成功地添加了一个学生。

示例2:输出所有学生信息

如果我们想输出所有学生的信息,可以选择菜单项“4. 输出所有学生信息”。这时程序将会逐个输出所有学生的基本信息和成绩。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现简单学生信息管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 详解Android studio ndk配置cmake开发native C

    下面是详解Android Studio NDK配置CMake开发Native C的完整攻略。 一、前置条件 在进行此项操作前,先确保以下环境已准备好: Android Studio NDK(可以在 Android Studio 中下载) CMake 二、配置 CMake CMake 是一个开源程序,它可以管理代码的编译过程。在 Android Studio …

    C 2023年5月23日
    00
  • C++运行时获取类型信息的type_info类与bad_typeid异常

    C++编程语言是一门静态类型语言,因此在编译期就会确定对象的类型。但有时候在运行期需要动态地获取对象的类型信息,这时就可以使用type_info类。Type_info类是C++标准库中的一个类,它能提供关于类型的信息。当程序尝试动态地获取一个对象的类型信息,但该对象的类型没有type_info信息时,就会抛出bad_typeid异常。 下面是使用type_i…

    C 2023年5月23日
    00
  • C语言实现逆波兰式实例

    C语言实现逆波兰式实例 逆波兰式是一种数学表达式表示法,也称为后缀表达式。与常见的表达式表示法不同,逆波兰式将操作数放在操作符之前,能够方便地使用栈等数据结构进行表达式的求解。在C语言中实现逆波兰式求值可以采用栈的数据结构进行实现。本文将介绍基于栈的C语言实现逆波兰式的完整攻略。 逆波兰式的基本原理 逆波兰式可以通过以下步骤进行转换: 从左到右扫描中缀表达式…

    C 2023年5月23日
    00
  • C 递归

    C 递归的完整使用攻略 什么是递归 递归是一种常用的编程技巧,它使程序能够对自身进行调用。在递归函数中,函数会不断调用自身,并在每次调用中传递不同的参数,从而使函数能够对复杂的问题进行处理。 递归函数的特点 递归函数必须有一个基本情况,即结束递归的条件,否则会无限循环下去。 每次递归都会使问题规模缩小,直到达到基本情况为止。 递归函数需要调用自身,直到达到基…

    C 2023年5月10日
    00
  • C++学习进阶之Makefile基础用法详解

    《C++学习进阶之Makefile基础用法详解》是一篇介绍Makefile基础用法的详细攻略。在Makefile中,开发者可以使用自定义的规则来管理代码的编译和构建过程,使得项目的复杂度得以降低,并确保开发过程中代码的稳定性和一致性。以下是详细的攻略内容: 1. 什么是Makefile Makefile是一个文本文件,在Unix和Linux操作系统中最常用。…

    C 2023年5月23日
    00
  • U盘双击后无法打开并提示找不到应用程序的原因及解决

    针对“U盘双击后无法打开并提示找不到应用程序”的问题,我们可以进行以下的解决攻略: 原因分析 U盘病毒感染:一些恶意病毒会将U盘上的文件属性进行篡改,导致无法打开并提示找不到应用程序; 应用程序被误删或损坏:在使用U盘的过程中,如果应用程序被误删或者损坏,也会导致U盘双击后无法打开并提示找不到应用程序; U盘上的文件格式不受系统识别:如果U盘上的文件格式不被…

    C 2023年5月23日
    00
  • C语言实现猜数字小游戏的示例代码

    下面是“C语言实现猜数字小游戏的示例代码”的完整攻略。 小游戏介绍 猜数字小游戏是一款非常简单而有趣的小游戏,游戏规则如下: 计算机随机生成一个0到100的数字,你需要通过键盘输入一个数字作为你的猜测; 如果你的猜测数字与计算机随机生成的数字一致,则恭喜你猜对了,游戏胜利; 如果你的猜测数字大于计算机随机生成的数字,则计算机会告诉你猜的数字比实际数字大; 如…

    C 2023年5月24日
    00
  • C语言三子棋一步步实现详程

    C语言三子棋一步步实现详程 本文介绍如何用C语言实现三子棋游戏,并提供了一步步的实现攻略。在实现过程中,我们将会用到C语言的基本语法和数据结构。 游戏规则 三子棋游戏是一种两人对弈的游戏。玩家在一个3×3的九宫格上轮流放置X或O。如果其中一方在棋盘上形成一个连成一线的3个棋子,就获胜了。 实现思路 我们将在控制台上实现这个游戏,并按照以下步骤进行实现: 初始…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部