C++实现简单学生成绩管理系统

C++实现简单学生成绩管理系统

系统概述

学生成绩管理系统是一个常见的应用程序,用于管理学生的各类信息,例如学生基本资料,选修课程等信息。本文将介绍如何使用C++实现一个简单的学生成绩管理系统。

系统需求

学生成绩管理系统需要实现的功能如下:

  • 增加学生信息,包含学号、姓名及出生年月日
  • 增加学生课程成绩信息,包含课程编号、课程名称及成绩
  • 修改学生信息及学生课程成绩信息
  • 删除学生学科成绩信息
  • 查询学生信息及学生成绩

系统设计

数据结构

为了满足系统需求,我们需要定义若干数据结构。

  • Student 结构体,包含学生的学号、姓名及出生年月日等信息。
  • Course 结构体,包含课程的编号、课程名称及成绩等信息。
  • StudentInfo结构体,包含了学生的个人信息(Student)及学生的课程成绩信息(Course)。

具体定义及代码实现如下:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;

// 定义学生信息结构体
struct Student {
    string id;
    string name;
    int year;
    int month;
    int day;
};

// 定义课程成绩结构体
struct Course {
    string id;
    string name;
    double score;
};

// 定义学生信息结构体,包含个人信息和学科成绩
struct StudentInfo {
    Student student;
    vector<Course> courses;
};

对于多个学生及学生的课程成绩,我们可以使用 vector 容器来存储。因此,我们还需要声明一个保存学生信息的 vector,定义如下:

vector<StudentInfo> students;

系统功能函数

接下来,我们需要实现若干系统功能函数,包括添加学生信息,添加学生课程成绩,修改学生信息及学生课程成绩,删除学生学科成绩信息以及查询学生信息及学生成绩。具体实现如下:

添加学生信息

添加学生信息,需要用户输入学号、姓名及出生年月日等信息,代码实现如下:

void addStudent() {
    // 输入学生信息
    cout << "请输入学生信息:" << endl;
    Student student;
    cout << "学号:";
    cin >> student.id;
    cout << "姓名:";
    cin >> student.name;
    cout << "出生年月日(用空格分隔):";
    cin >> student.year >> student.month >> student.day;
    // 将学生信息添加到学生信息列表中
    StudentInfo studentInfo;
    studentInfo.student = student;
    students.push_back(studentInfo);
    cout << "添加成功!" << endl;
}

添加学生课程成绩

添加学生课程成绩,需要用户输入课程编号、课程名称及成绩等信息。在输入课程成绩前,需要先输入学生的学号,找到对应学生信息后再添加课程成绩。代码实现如下:

void addCourse() {
    // 输入学号
    string id;
    cout << "请输入学生学号:";
    cin >> id;
    // 查找学生信息
    auto it = find_if(students.begin(), students.end(),
            [id](const StudentInfo& s){return s.student.id == id;});
    if (it == students.end()) {
        cout << "学生不存在!" << endl;
        return;
    }
    // 输入课程成绩信息
    Course course;
    cout << "请输入课程成绩信息:" << endl;
    cout << "课程编号:";
    cin >> course.id;
    cout << "课程名称:";
    cin >> course.name;
    cout << "成绩:";
    cin >> course.score;
    // 添加课程信息
    it->courses.push_back(course);
    cout << "添加成功!" << endl;
}

修改学生信息及学生课程成绩

修改学生信息及学生课程成绩,需要先输入学生学号,查找到对应的学生信息,然后让用户输入修改后的信息。修改学生课程成绩,还需要输入要修改的成绩的课程编号。代码实现如下:

void modifyStudent() {
    // 输入学号
    string id;
    cout << "请输入学生学号:";
    cin >> id;
    // 查找学生信息
    auto it = find_if(students.begin(), students.end(),
            [id](const StudentInfo& s){return s.student.id == id;});
    if (it == students.end()) {
        cout << "学生不存在!" << endl;
        return;
    }
    // 输入修改后的信息
    cout << "请输入修改后的信息:" << endl;
    cout << "学号:";
    cin >> it->student.id;
    cout << "姓名:";
    cin >> it->student.name;
    cout << "出生年月日(用空格分隔):";
    cin >> it->student.year >> it->student.month >> it->student.day;
    cout << "修改成功!" << endl;

    // 修改课程成绩
    cout << "是否要修改课程成绩?(Y/N)" << endl;
    string choice;
    cin >> choice;
    if (choice == "Y" || choice == "y") {
        // 输入课程编号
        string courseId;
        cout << "请输入要修改的课程编号:";
        cin >> courseId;
        // 查找课程成绩
        auto courseIt = find_if(it->courses.begin(), it->courses.end(),
                [courseId](const Course& c){return c.id == courseId;});
        if (courseIt == it->courses.end()) {
            cout << "课程成绩不存在!" << endl;
            return;
        }
        // 输入修改后的成绩
        cout << "请输入修改后的成绩:";
        cin >> courseIt->score;
        cout << "修改成功!" << endl;
    }
}

删除学生学科成绩信息

删除学生学科成绩信息,需要先输入学生学号,查找到对应的学生信息,再根据课程编号删除对应的课程成绩。代码实现如下:

void removeCourse() {
    // 输入学号
    string id;
    cout << "请输入学生学号:";
    cin >> id;
    // 查找学生信息
    auto it = find_if(students.begin(), students.end(),
            [id](const StudentInfo& s){return s.student.id == id;});
    if (it == students.end()) {
        cout << "学生不存在!" << endl;
        return;
    }
    // 输入课程编号
    string courseId;
    cout << "请输入要删除的课程编号:";
    cin >> courseId;
    // 查找课程成绩
    auto courseIt = find_if(it->courses.begin(), it->courses.end(),
            [courseId](const Course& c){return c.id == courseId;});
    if (courseIt == it->courses.end()) {
        cout << "课程成绩不存在!" << endl;
        return;
    }
    // 删除课程成绩
    it->courses.erase(courseIt);
    cout << "删除成功!" << endl;
}

查询学生信息及学生成绩

查询学生信息及学生成绩,需要先输入学生学号,查找到对应的学生信息,然后输出学生个人信息及学生课程成绩信息。代码实现如下:

void queryStudent() {
    // 输入学号
    string id;
    cout << "请输入学生学号:";
    cin >> id;
    // 查找学生信息
    auto it = find_if(students.begin(), students.end(),
            [id](const StudentInfo& s){return s.student.id == id;});
    if (it == students.end()) {
        cout << "学生不存在!" << endl;
        return;
    }
    // 输出学生信息
    cout << "学号:" << it->student.id << endl;
    cout << "姓名:" << it->student.name << endl;
    cout << "出生日期:" << it->student.year << "年"
        << it->student.month << "月" << it->student.day << "日" << endl;
    // 输出课程成绩
    if (it->courses.empty()) {
        cout << "无成绩记录!" << endl;
        return;
    }
    cout << "课程成绩:" << endl;
    for (const auto& course : it->courses) {
        cout << course.id << " " << course.name << " " << course.score << endl;
    }
}

示例说明

下面给出两个示例,展示如何使用学生成绩管理系统实现学生信息及课程成绩的管理。

示例一

假设有两个学生,分别为“1001 张三 1990 1 1”和“1002 李四 1991 2 2”,现在需要录入这两个学生的信息及课程成绩,具体操作如下:

请输入操作代码:1
请输入学生信息:
学号:1001
姓名:张三
出生年月日(用空格分隔):1990 1 1
添加成功!
请输入学生信息:
学号:1002
姓名:李四
出生年月日(用空格分隔):1991 2 2
添加成功!
请输入操作代码:2
请输入学生学号:1001
请输入课程成绩信息:
课程编号:001
课程名称:数学
成绩:90
添加成功!
请输入学生学号:1001
请输入课程成绩信息:
课程编号:002
课程名称:英语
成绩:85
添加成功!
请输入学生学号:1002
请输入课程成绩信息:
课程编号:001
课程名称:数学
成绩:92
添加成功!
请输入操作代码:5
请输入学生学号:1001
学号:1001
姓名:张三
出生日期:1990年1月1日
课程成绩:
001 数学 90
002 英语 85
请输入操作代码:5
请输入学生学号:1002
学号:1002
姓名:李四
出生日期:1991年2月2日
课程成绩:
001 数学 92

示例二

假设学生“1001 张三 1990 1 1”已经有了一门成绩“001 数学 90”,现在需要修改张三的个人信息及“001 数学”课程的成绩为95分,具体操作如下:

请输入操作代码:3
请输入学生学号:1001
请输入修改后的信息:
学号:1003
姓名:王五
出生年月日(用空格分隔):1992 3 3
修改成功!
是否要修改课程成绩?(Y/N)
Y
请输入要修改的课程编号:001
请输入修改后的成绩:95
修改成功!
请输入操作代码:5
请输入学生学号:1003
学号:1003
姓名:王五
出生日期:1992年3月3日
课程成绩:
001 数学 95

总结

使用C++实现简单的学生成绩管理系统,需要按照系统需求定义合适的数据结构,然后增加、修改、删除、查询学生信息及课程成绩时,根据需求编写对应的函数。对于函数的具体实现,需要注意输入输出、错误处理、参数传递等方面的问题。通过本文的介绍,相信大家能够掌握使用C++实现简单学生成绩管理系统的方法。

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

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

相关文章

  • C语言自动生成enum值和名字映射代码

    以下是详细讲解“C语言自动生成enum值和名字映射代码”的完整攻略: 背景 在C语言中,枚举类型(enum)是一个非常常用的数据类型。在实际的编程过程中,我们常常需要将枚举类型的变量转换成其对应的字符串表示或者将字符串表示转换成枚举类型的变量。手动编写这样的代码往往非常繁琐且容易出错,因此我们需要一种自动生成这样代码的工具。 工具 在这里,我们推荐使用开源工…

    C 2023年5月24日
    00
  • Java日常练习题,每天进步一点点(43)

    以下是Java日常练习题43的完整攻略。 题目描述 本题目要求实现一个方法,该方法接受一个整数数组,返回数组中最大的两个数之和。 方法签名 public static int maxTwoSum(int[] nums) 示例输入输出 示例1: 输入: [1,2,3,4,5] 输出: 9 示例2: 输入: [7,5,1,6,3,0] 输出: 13 解题思路 这…

    C 2023年5月22日
    00
  • 如何获取C++类成员虚函数地址的示例代码

    获取C++类成员虚函数地址可以通过以下步骤完成: 步骤1:定义一个具有多个虚函数的C++类。 class Base { public: virtual void func1() { cout << "Base::func1()" << endl; } virtual void func2() { cout <…

    C 2023年5月23日
    00
  • C++面试常见问题整理汇总

    C++面试常见问题整理汇总 本文旨在整理和汇总C++面试中常见的问题,包括但不限于基础知识、语法、实际应用等方面,并提供相应的解答和说明以供参考。 1. 基础知识 1.1 C++的数据类型有哪些?它们所占用的字节空间分别是多少? C++的数据类型包括基本数据类型和构造类型,其中基本数据类型有: 整型(int、short、long、long long等) 布尔…

    C 2023年5月22日
    00
  • C/C++ 引用作为函数的返回值方式

    C/C++ 中引用是一种特别的数据类型,其本质是指向其他变量地址的别名。引用作为函数的返回值方式,可以避免拷贝对象造成的性能浪费,并且使代码更加简洁易懂。 返回值为左值引用 当函数的返回值声明为左值引用时,我们可以在函数内返回对象的引用,由于返回值是一个引用,因此可以对该对象进行修改。下面是一个简单的例子: #include <iostream>…

    C 2023年5月22日
    00
  • C标准库的实现详解

    C标准库的实现详解 简介 assert.h 是 C 标准库中的一个头文件,该头文件包含一个宏 assert() 和一些用于调试的宏定义,它们可以在程序运行中检查和诊断条件是否为真,即程序是否按照预期运行。通常情况下,assert() 用于调试程序,以确保程序的正确性。 assert()宏的使用 assert() 宏用于在程序运行期间检测给定的条件是否为真。如…

    C 2023年5月23日
    00
  • C++实现四叉树效果(附源码下载)

    C++实现四叉树效果(附源码下载) 四叉树也称为四元树或者八叉树,是一种树形数据结构,其特点是每个内部节点有四个子节点或是八个子节点。四叉树在计算机图形学和图像处理领域中得到了广泛应用。本文将讲解如何用 C++ 实现四叉树,并提供源码下载。 实现思路 基本概念 四叉树的基本概念是将二维空间划分为四个象限,每个象限为一个节点。每个节点又可以继续向下划分,直到一…

    C 2023年5月23日
    00
  • Windows程序内部运行机制实例详解

    Windows程序内部运行机制实例详解 本篇介绍一些 Windows 程序的内部运行机制,包括程序启动的过程、线程的创建和同步、进程的管理和通信等。本文中的示例是基于 C# 编写的,但是所讲的原理对其他编程语言同样适用。 程序的启动过程 当用户双击一个程序的可执行文件时,操作系统会为该程序创建一个进程。进程是隔离和保护应用程序的一个容器,包括了代码、数据和系…

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