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日

相关文章

  • jackson json序列化实现首字母大写,第二个字母需小写

    要实现JSON序列化后首字母大写,第二个字母小写的格式化方式,可以使用Jackson库提供的两种方式,分别是: 自定义JsonSerializer 在类上使用@JsonProperty注解 下面,我们将分别介绍这两种方式的实现。 1. 自定义JsonSerializer 自定义JsonSerializer是一种常见的方式,使用此方法可以允许我们自行控制JSO…

    C 2023年5月23日
    00
  • golang如何自定义json序列化应用详解

    自定义 JSON 序列化是 Golang 开发中非常有用的技术。 通过自定义序列化规则,我们可以将 Golang 程序数据结构转为 JSON 字符串或者将 JSON 字符串转为 Golang 数据结构,使得数据交互操作更加简单方便。本文将详细介绍如何在Golang中自定义JSON 序列化。 1.自定义JSON序列化 1.1 json.Marshal() 要实…

    C 2023年5月23日
    00
  • vscode C++远程调试运行(学习C++用)

    vscode C++远程调试运行(学习C++用)攻略 简介 本文主要介绍如何使用Visual Studio Code(以下简称VScode)进行C++远程调试运行。远程调试可以方便读者在本地开发环境中编辑、调试和运行分布在远端主机上的代码,对于学习C++等场景非常有用。 步骤 1. 环境搭建 在使用VScode进行远程调试之前,需要先搭建好相关的环境。具体来…

    C 2023年5月23日
    00
  • 在Go语言程序中使用gojson来解析JSON格式文件

    要在Go语言程序中使用gojson解析JSON格式文件,你需要按照以下步骤操作: 步骤1 安装gojson工具 你需要先在计算机上安装gojson工具,可以通过以下命令安装: go get github.com/ChimeraCoder/gojson/gojson 步骤2 生成Go语言结构体 使用gojson工具,我们可以将JSON文件转换成Go语言结构体。…

    C 2023年5月23日
    00
  • 型号为a1526的iphone5c 联通版4g网络怎么开启 联通版iphone5c a1526越狱后破解4g教程

    那么针对这个问题,我将分为两个部分来进行回答。 如何开启型号为a1526的iphone5c联通版4G网络? 首先,您需要确认您的手机是否支持4G网络。型号为a1526的iphone5c 联通版是支持4G网络的,但需满足以下条件: 手机系统为iOS 8.0及以上版本 必须使用联通的USIM卡 在中国大陆地区开通4G网络服务 确认您的手机符合以上条件后,您需要进…

    C 2023年5月23日
    00
  • Asp.net开发常用的51个非常实用的代码

    “Asp.net开发常用的51个非常实用的代码”是一篇介绍Asp.net开发中常用代码的文章,其中包括了一些在实际开发中非常有用的代码片段。下面我将为大家详细讲解完整攻略: 1. 文章概述 本文将介绍Asp.net开发常用的51个实用的代码,包括以下主题:- 数据操作- 字符串操作- 文件操作- XML操作- JSON操作 每个主题下都有几个非常实用的代码片…

    C 2023年5月23日
    00
  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)

    一、简介 货物管理系统可以帮助企业更好地管理其货品,是一套非常实用的管理系统。本文将介绍使用c语言实现的一套货物管理系统,包括增加、删除、查找货物信息等功能。 二、实现步骤 设计数据结构 首先,我们需要设计合适的数据结构用于存储货物信息。可以使用结构体来定义货物信息,例如: struct goods { int id; char name[50]; int …

    C 2023年5月23日
    00
  • Objective-C 入门篇(推荐)

    让我为您详细讲解一下“Objective-C 入门篇(推荐)”的完整攻略。 1. 入门篇介绍 Objective-C 是 iOS 开发的主要编程语言,入门 Objective-C 是 iOS 开发的第一步。本篇文章主要适用于对编程没有任何经验的初学者,将通过一步步教学,帮助您理解 Objective-C 编程语言的特性,以及如何使用 Xcode 开发工具来创…

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