C++课程设计——学生成绩管理系统

2023-05-16

今天清理电脑偶尔发现一个我刚学编程时用c++写的一份课程设计,使用到简单的链表,结构体,c++类与对象的知识——学生成绩管理系统。
~~
系统结构:

  1. 管理员模式
  2. 教师模式
  3. 学生模式

实现了对学生成绩及信息的增删改查以及排序。

效果图

主菜单

在这里插入图片描述

管理员模式菜单

在这里插入图片描述

源代码

#include <algorithm>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <string>
using namespace std;
class Student
{
private:
    char name[10];
    char id[12];
    float math;
    float computer;
    float english;

public:
    Student()
    {
    }
    Student(char *n)
    {
        strcpy(name, n);
    }
    Student(char *n, char *i)
    {
        strcpy(name, n);
        strcpy(id, i);
    }
    void SetName(char *n)
    {
        strcpy(name, n);
    }
    void SetID(char *i)
    {
        strcpy(id, i);
    }
    void SetMath(float m)
    {
        math = m;
    }
    void SetComputer(float c)
    {
        computer = c;
    }
    void SetEnglish(float e)
    {
        english = e;
    }
    void SetAll(float m, float e, float c)
    {
        math = m;
        english = e;
        computer = c;
    }
    float Sum()
    {
        return math + english + computer;
    }
    string Name()
    {
        return name;
    }
    string Id()
    {
        return id;
    }
    float GetMath()
    {
        return math;
    }
    float GetEnglish()
    {
        return english;
    }
    float GetComputer()
    {
        return computer;
    }
    bool Match(char *str, short flag) //flag=1 name flag=2 id
    {
        if (flag == 1)
            return strcmp(name, str) == 0;
        else
            return strcmp(id, str) == 0;
    }
    void Print()
    {
        cout << name << '\t' << id << endl;
        cout << "高数:" << math << '\t' << "英语:" << english << '\t' << "C++:" << computer << endl;
    }
};

struct Node
{
    Student st;
    Node *next;
};
class Data //su zu
{
private:
    Node *head;

public:
    Data()
    {
        head = new Node;
        head->next = NULL;
    }
    ~Data()
    {
        Node *p;
        while (head != NULL)
        {
            p = head;
            head = head->next;
            delete p;
        }
        cout << "程序结束";
    }
    void Push(char *n, char *i, float m, float e, float c)
    {

        Student st(n, i);
        st.SetAll(m, e, c);
        Node *p = new Node;
        p->st = st;
        p->next = head->next;
        head->next = p;
    }
    void Push()
    {
        char n[10], id1[12];

        cout << "请输入添加学生姓名:";
        cin >> n;
        cout << endl;
        Node *p;
        do
        {
            cout << "请输入添加学生学号:";
            cin >> id1;
            for (p = head->next; p != NULL; p = p->next)
            {
                if (p->st.Match(id1, 2))
                {
                    cout << "该学号已存在请重新输入" << endl;
                    break;
                }
            }
        } while (p != NULL);
        Student stu1(n, id1);
        float m, e, c;
        cout << "请输入该生高数成绩:";
        cin >> m;
        cout << "请输入该生英语成绩:";
        cin >> e;
        cout << "请输入该生C++成绩:";
        cin >> c;
        stu1.SetAll(m, e, c);
        Node *s = new Node;
        s->st = stu1;
        s->next = head->next;
        head->next = s;
        cout << "添加成功\n";
        system("pause");
    }
    Node *Search(Node *start, char *str, short flag)
    {
        for (Node *p = start; p != NULL; p = p->next)
        {
            if (p->st.Match(str, flag))
            {

                p->st.Print();
                return p;
            }
        }
        return NULL;
    }
    Node *Search1()
    {
        short choice;
        char ch;
        do
        {
            cout << "1.按姓名搜索  2.按学号搜索";
            cin >> choice;
        } while (choice != 1 && choice != 2);
        char match[12];
        cout << "请输入你要查找的" << (choice == 1 ? "姓名" : "学号") << ":\n";
        cin >> match;
        Node *result = head->next;
        while (true)
        {
            result = Search(result, match, choice);
            if (result == NULL)
            {
                cout << "未找到该学生" << endl;
                system("pause");
                return NULL;
            }
            cout << "这是你要找的学生?(y/n)";
            cin >> ch;
            system("pause");
            if (ch == 'y' || ch == 'Y')
                return result;
            else
                result = result->next;
        }
    }
    bool Delete()
    {
        Node *result;
        result = Search1();
        if (result == NULL)
            return false;
        char choice;
        cout << "是否要删除这条信息?(y/n)";
        cin >> choice;
        Node *p;
        if (choice == 'y' || choice == 'Y')
        {
            p = result;
            for (p = head; p->next != result; p = p->next)
                ;
            p->next = result->next;
            result->next = NULL;
            delete result;
            cout << "删除成功";
            system("pause");
            return true;
        }
        cout << "信息未删除";
        system("pause");
        return false;
    }
    bool xiugai()
    {
        Node *result;
        result = Search1();
        if (result == NULL)
            return false;
        char choice;
        char choice1;
        char xinname[10];
        float xinmath, xinenglish, xincomputer;

        cout << "是否要修改 (y/n)";
        cin >> choice;
        if (choice == 'y' || choice == 'Y')
        {
            cout << "请输入要修改内容的序号    1.姓名   2.高数成绩   3.英语成绩   4.C++成绩\n";
            cout << "    (注: 学号无法修改)\n";
            cin >> choice1;
            switch (choice1)
            {
            case '1':
                cout << "请输入修改后姓名:";
                cin >> xinname;
                result->st.SetName(xinname);
                cout << "修改成功";
                system("pause");
                break;
            case '2':
                cout << "请输入修改后高数成绩:";
                cin >> xinmath;
                result->st.SetMath(xinmath);
                cout << "修改成功";
                system("pause");
                break;
            case '3':
                cout << "请输入修改后英语成绩:";
                cin >> xinenglish;
                result->st.SetEnglish(xinenglish);
                cout << "修改成功";
                system("pause");
                break;
            case '4':
                cout << "请输入修改后C++成绩:";
                cin >> xincomputer;
                result->st.SetComputer(xincomputer);
                cout << "修改成功";
                system("pause");
                break;
            default:
                cout << "信息未修改";
                system("pause");
                return false;
            }
            return true;
        }
        cout << "信息未修改";
        return false;
    }
    void Display()
    {
        cout << endl;
        cout << setw(12) << setiosflags(ios::left) << "姓名" << setw(12) << "学号" << setw(8) << "高数" << setw(8) << "英语" << setw(8) << "C++" << setw(8) << "总分" << endl;
        Node *p;
        for (p = head->next; p != NULL; p = p->next)
        {
            cout << setw(12) << p->st.Name() << setw(12) << p->st.Id() << setw(8) << p->st.GetMath() << setw(8) << p->st.GetEnglish() << setw(8) << p->st.GetComputer() << setw(8) << p->st.Sum() << endl;
        }
        cout << resetiosflags(ios::left);
        system("pause");
    }
    void Sort()
    {
        char choice;
        do
        {
            cout << "请输入排序方式:  1.学号升序     2.总成绩降序" << endl;
            cin >> choice;
        } while (choice != '1' && choice != '2');
        if (choice == '1')
        {
            Node *p = head->next;
            while (p != NULL)
            {
                Node *q = p->next;
                while (q != NULL)
                {
                    if (p->st.Id() > q->st.Id())
                    {
                        Node *s = new Node;
                        s->st = p->st;
                        p->st = q->st;
                        q->st = s->st;
                    }
                    q = q->next;
                }
                p = p->next;
            }
        }
        else
        {
            Node *p = head->next;
            while (p != NULL)
            {
                Node *q = p->next;
                while (q != NULL)
                {
                    if (p->st.Sum() < q->st.Sum())
                    {
                        Node *s = new Node;
                        s->st = p->st;
                        p->st = q->st;
                        q->st = s->st;
                    }
                    q = q->next;
                }
                p = p->next;
            }
        }
        cout << "排序完成";
        system("pause");
    }
    char MainMenu()
    {
        char choice;
        do
        {
            system("cls");
            cout << "    --------------欢迎使用学生成绩管理系统--------------\n\n\n";
            cout << "                      1.管理员入口\n";
            cout << "                      2.教师入口\n";
            cout << "                      3.学生入口\n";
            cout << "                      4.退出\n";
            cin >> choice;
        } while (choice < '1' || choice > '4');
        return choice;
    }
    char MMenu()
    {
        char choice;
        do
        {
            system("cls");
            cout << "    -------------------管理员模式--------------------\n\n\n";
            cout << "                      1.添加学生\n";
            cout << "                      2.查找学生\n";
            cout << "                      3.删除学生\n";
            cout << "                      4.重新排序\n";
            cout << "                      5.修改学生信息\n";
            cout << "                      6.返回上一级\n";
            cin >> choice;
        } while (choice < '1' || choice > '6');
        return choice;
    }
    char TMenu()
    {
        char choice;
        do
        {
            system("cls");
            cout << "    --------------------教师模式----------------------\n\n\n";
            cout << "                      1.添加学生\n";
            cout << "                      2.查找学生\n";
            cout << "                      3.重新排序\n";
            cout << "                      4.返回上一级\n";
            cin >> choice;
        } while (choice < '1' || choice > '4');
        return choice;
    }
    char SMenu()
    {
        char choice;
        do
        {
            system("cls");
            cout << "    --------------------学生模式-----------------------\n\n\n";
            cout << "                      1.查找学生\n";
            cout << "                      2.学生排序\n";
            cout << "                      3.返回上一级\n";
            cin >> choice;

        } while (choice < '1' || choice > '3');
        return choice;
    }
};
int main()
{
    Data s;
    bool flag = false;
    bool flag1 = false;
    bool flag2 = false;
    bool flag3 = false;
    char choice;
    s.Push("lxp", "1111", 60, 90, 80);
    s.Push("jjy", "1112", 80, 40, 100);
    s.Push("wzb", "1113", 30, 32, 100);
    s.Push("fhd", "1114", 100, 120, 200);
    while (!flag)
    {
        choice = s.MainMenu();
        switch (choice)
        {
        case '1':
            while (!flag1)
            {
                choice = s.MMenu();
                switch (choice)
                {
                case '1':
                    s.Push();
                    break;
                case '2':
                    s.Search1();
                    break;
                case '3':
                    s.Delete();
                    break;
                case '4':
                    s.Sort();
                    s.Display();
                    break;
                case '5':
                    s.xiugai();
                    break;
                case '6':
                    flag1 = true;
                    break;
                }
            }
            break;
        case '2':
            while (!flag2)
            {
                choice = s.TMenu();
                switch (choice)
                {
                case '1':
                    s.Push();
                    break;
                case '2':
                    s.Search1();
                    break;
                case '3':
                    s.Sort();
                    s.Display();
                    break;
                case '4':
                    flag2 = true;
                    break;
                }
            }
            break;
        case '3':
            while (!flag3)
            {
                choice = s.SMenu();
                switch (choice)
                {
                case '1':
                    s.Search1();
                    break;
                case '2':
                    s.Sort();
                    s.Display();
                    break;
                case '3':
                    flag3 = true;
                    break;
                }
            }
            break;
        case '4':
            flag = true;
            break;
        }
        flag1 = false;
        flag2 = false;
        flag3 = false;
    }
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++课程设计——学生成绩管理系统 的相关文章

  • [SDN]使用mininet搭建单臂路由的VLAN网络

    作者 xff1a 清水寺丞 简介 xff1a 正在学习unity xff0c 数据库 xff0c 计算机通信网络和python 喜欢部署各种奇奇怪怪的小项目 喜欢就点个关注一起学习吧 前言 xff1a 本文实践了使用mininet来搭建一个
  • Spring整合MyBatis导致一级缓存失效问题

    熟悉MyBatis的小伙伴都知道MyBatis默认开启一级缓存 xff0c 当我们执行一条查询语句后 xff0c MyBatis会以我们查询的信息生成一个缓存key xff0c 查询的结果为value xff0c 存到一个map中 xff0
  • 用echarts写潮汐表,并处理后端传来的数据为潮汐表接口的数据

    这是后端传来的接口类型 xff1a 其中分别是今天 xff0c 昨天 xff0c 明天的数据 xff0c 一天24个小时 xff0c 分别为a0和a23表示 xff1b 后端接口数据如下 xff1a dom表单代码如下 xff1a lt d
  • 分类算法-Logistic Regression(逻辑回归)实战案例

    一 定义 逻辑回归是一种广义线性回归模型 xff0c 主要用于二分类 问题 xff08 也可以用于多分类 xff09 xff0c 具有简单 可并行化 解释性强的特点 xff0c 目前在各个领域使用的都非常频繁 逻辑回归的本质是假设数据服从伯
  • 快乐数算法

    def sum l n sum a 61 0 for i in str n sum a 43 61 int i 2 return sum a sum1 61 n 61 int input 请输入数字 while sum l n not in
  • 2021-04-26

    标题altium 相同原理图导入PCB厚如何避免重复建布局 思想 xff1a channel offset 使每个component的offset一致 方法 xff1a 步骤一 xff0c 选取其中一个布局好 xff0c 创建一个room1
  • 深度学习模型压缩与优化加速

    1 简介 深度学习 xff08 Deep Learning xff09 因其计算复杂度或参数冗余 xff0c 在一些场景和设备上限制了相应的模型部署 xff0c 需要借助模型压缩 优化加速 异构计算等方法突破瓶颈 模型压缩算法能够有效降低参
  • 选择排序算法(思路分析) [数据结构][Java]

    选择排序算法 思路分析 基本介绍 选择排序也属于内部排序的一种 是从 34 欲排序的数据 34 中 按照指定的规则选出某一元素 再根据规定交换位置后达到排序的目的 选择排序思想 以升序排序为例讲解 选择排序 Select Sorting 也
  • 2021-09-29

    第一次数据结构与算法作业 https share weiyun com Bfh1pSeJ 初学者 x1f913 xff0c 算法漏洞较多 希望各位大佬指点一下 xff0c 谢谢大家
  • 2021-10-27

    十进制整数转换 xff0c 使用链栈实现 xff0c 实验报告 内容 xff1a 将十进制整数num转换为r进制数 xff0c 其转换方法为辗转相除法 xff0c 要求用链栈实现 算法分析 xff1a 程序中设计了四个函数 函数IiStac
  • C++生成随机数

    随机数通过 随机数引擎类 和 随机数分布类 引擎类可以生成 unsigned xff08 无符号数 xff09 随机数序列 xff1b 分布类使用一个引擎类生成指定类型的 在给定范围内的 服从特定概率分布的随机数 它们定义在头文件 rand
  • 进程间的通信-信号量(C语言)

    目录 一 信号量 1 什么是信号 2 在linux下 xff0c 有哪些信号 3 在linux下 xff0c 这些信号究竟是由谁来发出 4 用户如何发送信号给进程 xff1f 二 信号的函数接口 1 如何发送信号给另外一个进程 2 如何捕捉
  • Python实现设计模式之工厂模式

    引言 设计模式是可重复使用的编程方案 xff0c 已被用于各种现实世界的环境中 xff0c 并被证明能产生预期的结果 在本文中 xff0c 我们将学习最常见的设计模式之一 xff1a 工厂模式 正如我们稍后将看到的 xff0c 这种模式使我
  • 地表最强AI 辅助编程工具——GitHub Copilot安装教程

    GitHub Copilot 文章目录 GitHub Copilot一 GitHub Copilot 介绍二 GitHub Copilot 通行证注册流程1 打开GitHub Copilot 网址 https copilot github
  • 【暑期每日一题】洛谷 P1605 迷宫

    题目链接 xff1a P1605 迷宫 洛谷 计算机科学教育新生态 luogu com cn 题目描述 给定一个 N M 方格的迷宫 xff0c 迷宫里有 T 处障碍 xff0c 障碍处不可通过 在迷宫中移动有上下左右四种方式 xff0c
  • 关于外网访问本地服务器

    我在网上查到的外网访问本地服务器的方式有两种 xff1a 第一种是通过内网穿透的技术实现的 第二种是通过申请域名 xff0c 申请空间 xff0c 申请云服务器 xff0c 搭建网站实现的 内网穿透的方式实现外网访问本地服务器 选择合适的内
  • Python基础知识点-- if 语句

    此文章为Python基础知识点 xff08 从入门到实践 xff09 if 语句 xff0c 此节Python基础知识点包括 xff1a 条件测试 if 语句 使用if 语句处理列表 设置 if 语句格式 目录 一 条件测试 1 1 检查是
  • SecureCRT 上传文件

    目录 一 xff0e 用SecureCRT来上传和下载文件 1 在使用SecureCRT上传下载之前需要给服务器安装lrzsz xff1a 2 命令sz rz的使用方法 xff1a 3 设置上传 下载文件的默认目录 二 使用TFP上传 一
  • 【错误解决】Segmentation fault (core dumped)爆栈解决

    大家好 xff0c 我是编程的赛赛 xff0c 专注于保姆级代码教程 说明 Segmentation fault core dumped 这个错误在Linux下运行程序时出现的原因多种多样 xff0c 本质大多是内存操作错误 xff0c 以
  • Debian10自签CA证书

    基础知识 1 3思路 想构建CA必须要了解CA构建的情况 请先参照加密解密方面博客 简单思路如下 构建私有CA 生成私钥 自签署证书 2 给节点发放证书 节点申请证书 生成私钥 生成证书签署请求 把请求文件发送给CA 3 CA签署证书 验正

随机推荐

  • Debian10安装教程

    Debian 10 Buster 安装过程图文详解 360doc com nbsp 需求 nbsp 步骤 由于比赛是最小安装 这里我们选择第二项 第一项是图像化界面 第二项是字符界面 语言 nbsp 根据赛题要求 这里选择语言为Englis
  • Questa-sim安装最后一步点了是之后,安装了hardlock.sys文件导致电脑无限蓝屏重启的解决方案

    学习FPGA xff0c 需要安装Questa sim仿真软件 xff0c 没有提前看安装教程 xff0c 在软件安装的最后一步 xff0c 本应该点击否 xff0c 我点了是以后电脑直接蓝屏无限重启 xff0c 真是反人类的设计 xff1
  • 用定时器计数器计算初值

    只需要输入晶振频率 定时时长和计时方式 一般选择方式1 即可 如晶振为12MHz 定时时长为50ms 方式1 xff0c 即可计算出初值为3CB0 xff0c 如下图所示 总结 xff1a 定时器在单片机有着极其重要的作用 xff0c 利用
  • Linux系统管理---xfs文件系统--centos7

    目录 一 XFS文件系统 xff1a 1 数据区 xff08 data section xff09 2 文件系统活动登录区 xff08 log section xff09 3 实时运行区 xff08 realtime section xff
  • 中文code:blocks安装(三分钟包安装成功,不成功你找我)

    目录 一 下载code bocks压缩包并解压 a 百度网盘下载压缩包 xff08 不需安装了 xff09 b 创键快捷方式并拉到桌面 二 一步完成汉化 xff0c 两步完成调试环境 a 打开上面创建在桌面上的快捷方式 b 一步汉化 c 两
  • 2021-2022年度第三届全国大学生算法设计与编程挑战赛(冬季赛)题解(7道题)

    只有 xff1a B xff0c D xff0c E xff0c G xff0c I xff0c K xff0c L 正文 B xff1a 题目链接 Error 题目 xff1a 思路 xff1a 二分 二分给出一个d xff0c 先考虑第
  • mysql jar包下载(直接链接下载)

    mysql connector java 8 0 23 jar的下载链接 xff1a mysql jar包下载 服务器一年后过期 xff0c 过期的话先用百度网盘下载吧 链接 xff1a https pan baidu com s 187w
  • Druid-1.1.12.jar下载 (链接下载+使用)

    链接下载 xff1a 下载链接 不行的话用网盘下载 网盘下载 xff1a 链接 xff1a https pan baidu com s 1VUvRj VuxCDd3fb uvA8Q pwd 61 1111 提取码 xff1a 1111 下载
  • 第十三届蓝桥杯c++b组2022年国赛决赛题解

    写的不是很好 xff0c 8000 43 浏览量后开的粉丝可见 xff0c 希望涨一点点粉 觉得还阔以的 xff0c 就不要取关了Fight xff4f 39 39 题目pdf下载 xff1a 第十三届蓝桥杯大赛软件赛决赛pdf下载 G题没
  • OpenWrt 设置IP地址

    注 本文是基于Ubuntu14 04 43 Openwrt17 01开发的教程 5 1在开发板上设置IP 由于我们在开发过程中 xff0c 可能会用到其他路由器 xff0c 而它们的IP一般都是192 168 1 1 xff0c 为了让开发
  • java打包成exe(带图片,不放大)

    目录 一 如何把java程序打包成exe文件 二 过程 二 1 如何将java程序打包成jar包 二 2 如何使用软件exe4j将jar包打包成exe文件 三 如何在打包的时候带上图片和音乐 四 如何打包后不放大 五 如何把exe文件发送给
  • 【华为OD机试真题java、python、c++、jsNode】匿名信(100%通过+复盘思路)

    nbsp nbsp 代码请进行一定修改后使用 本代码保证100 通过率 本文章提供java python c jsNode四种代码 复盘思路在文章的最后 题目描述 电视剧 分界线 里面有一个片段 男主为了向警察透露案件细节 且不暴露自己 于
  • 第十四届蓝桥杯javaA组2023年省赛初赛题解

    题目pdf下载 xff1a 第十四届蓝桥杯省赛pdf下载 目录 试题 A 特殊日期 试题 B 与或异或 试题 C 平均 试题 D 棋盘 试题 E 互质数的个数 试题 F 阶乘的和 试题 G 小蓝的旅行计划 试题 H 太阳 试题 I 高塔 试
  • JsNode算法题acm模式输入

    js分为jsNode和JsV8两种输入输出方式 xff0c 一般的执行代码还是一样的 牛客是两种都支持 华为的题目大多只支持jsNode 本文主要介绍jsNode的输入 JsNode 首先他是逐行输入的 xff0c 就和py差不多 xff0
  • c++11 将enum转为字符串,将字符串转为enum

    一般用enum有两种情况 xff0c 一种是string类型方便 人 读 一种是int类型 xff0c 方便机器识别 所以 xff0c 很多情况 xff0c 需要把int转为string类型 xff0c 或者将string转为int类型 x
  • 手把手教你阿里云服务器搭建网站(超详细图文)

    前文概述 出于好奇 xff0c 我用学生优惠租了一台阿里云服务器 xff0c 打算做一些Java web的开发 xff0c 但是毕竟是第一次接触这样的东西 xff0c 还是比较陌生 xff0c 在这个过程中遇到了一些问题 xff08 肯定会
  • arm64位处理器Ubuntu18.04系统安装libpcap-dev

    1 背景需求 编译项目文件时需要包含头文件 xff1a include lt pcap h gt xff0c 但缺少对应的库 正常情况下 xff0c 打开终端 xff0c 输入下面这行指令即可解决 xff1a sudo apt get in
  • 指定JDK运行Jar包

    指定JDK运行Jar包 找到JDK安装路径如下路径 E Java javaJDK bin java exe正常运行Jar包为 java jar xxx jar指定jdk运行 E Java javaJDK bin java exe jar x
  • Anaconda3安装教程---图文讲解

    Hello xff0c 大家好 xff0c 我是霜淮子 xff0c 今天分享一篇Anaconda3的安装教程 软件介绍 Anaconda xff0c 中文大蟒蛇 xff0c 是一个开源的python发行版本 xff0c 其包含了conda
  • C++课程设计——学生成绩管理系统

    今天清理电脑偶尔发现一个我刚学编程时用c 43 43 写的一份课程设计 xff0c 使用到简单的链表 xff0c 结构体 xff0c c 43 43 类与对象的知识 学生成绩管理系统 系统结构 xff1a 管理员模式教师模式学生模式 实现了