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日

相关文章

  • win7/win10+vs2015+pcl1.8.0配置方案详解

    Win7/Win10 + VS2015 + PCL 1.8.0 配置方案详解 概述 本文主要介绍如何在 Windows 7 或 Windows 10 操作系统上使用 Visual Studio 2015 配置 PCL(Point Cloud Library) 1.8.0。其中,PCL 是一个开源的库,用于处理点云数据。在配置 PCL 开发环境之前,需要先安装…

    C 2023年5月23日
    00
  • C语言模拟实现strstr函数的示例代码

    C语言中的strstr函数是用来查找一个字符串中是否包含另一个字符串的函数,其原型定义如下: char *strstr(const char *haystack, const char *needle); 其中,haystack表示要查找的字符串,needle表示要搜索的子字符串。该函数返回子字符串在要查找的字符串中第一次出现的位置的指针,如果没有找到,则返…

    C 2023年5月24日
    00
  • c++ 如何实现线程注入

    C++如何实现线程注入是一个相对复杂和高级的主题,需要一定的专业知识和经验,操作不当可能会对系统和应用程序造成不可预知的损害。下面是一个简单的线程注入攻略,供参考。 前置条件及准备工作 在进行线程注入操作之前,需要考虑以下几点: 需要注入的进程必须是完全信任的,否则注入操作有可能会被拒绝或失败。 需要了解目标进程的架构、平台和权限等信息,以确定注入方式和实现…

    C 2023年5月23日
    00
  • C语言中对数组赋值的三种形式

    针对C语言中对数组赋值的三种形式,我来进行详细的介绍。 一、对固定大小数组的初始化 当我们定义一个固定大小的数组时,我们可以在定义时直接对数组赋值,这样做的形式通常是使用大括号,里面包含着所有的初始元素,形如以下代码: int arr[5] = {1, 2, 3, 4, 5}; 上述代码定义了一个包含5个整型元素的数组,并且对数组进行了初始化赋值,分别赋值为…

    C 2023年5月22日
    00
  • 浅析C# web访问mysql数据库-整理归纳总结

    接下来我将详细讲解“浅析C# web访问mysql数据库-整理归纳总结”的完整攻略。 1.安装MySQL Connector/NET 为了能够访问MySQL数据库,我们需要安装MySQL Connector/NET,可以通过以下步骤进行安装: 1.以管理员身份运行 Visual Studio。2.在“工具”菜单中选择“Nuget包管理器” > “程序包…

    C 2023年5月22日
    00
  • Win10运行程序提示“损坏的映像 错误0xc0000020”解决方法图文教程

    下面是详细的攻略: 问题描述 在Win10系统中运行某个程序时,系统提示“损坏的映像 错误0xc0000020”的错误消息,导致无法正常运行程序。 解决方法 方案一:重新安装程序 出现损坏映像的错误消息,可能是程序自身出现问题导致的。因此,重新安装这个程序是最直接且有效的解决方法。 具体操作步骤如下: 找到出现错误消息的程序,卸载它。 重新下载并安装程序。 …

    C 2023年5月24日
    00
  • 关于C语言多线程pthread库的相关函数说明

    关于C语言多线程pthread库的相关函数说明,我会分为以下几个部分进行讲解: 1. 前言 在讲解多线程pthread库的相关函数说明之前,我们需要了解一下线程的相关概念。 线程是操作系统中的一种执行单元,是处理器调度的基本单位。相对于进程,线程更加轻量级,可以并发执行,一个进程可以包含多个线程。线程之间可以共享代码段、数据段和系统资源。多线程编程可以提高程…

    C 2023年5月23日
    00
  • 关于C/C++中可变参数的详细介绍(va_list,va_start,va_arg,va_end)

    关于C/C++中可变参数的详细介绍,一般涉及到四个主要的宏,它们分别是va_list,va_start,va_arg和va_end。下面我会详细介绍它们的用法和注意事项,并且提供两个示例。 1. va_list va_list是一个类型,用于存储可变参数的信息。声明方式如下: #include <stdarg.h> va_list arg_lis…

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