基于C++实现(控制台)学生成绩管理系统

news2024/11/25 4:51:19

学生成绩管理系统

一、系统需求分析

一个巨大的学校有数以万计的教工、学生和相应的资料需要管理。一个好的学生成绩管理系统可以协助管理员管理巨大的数据库,允许管理员、教师跟学生这三种用户登录进行相应的操作。

管理员具有管理数据库的一切权限。管理员负责录入可以使用本系统的用户名单,赋予他们使用权限,分发初始密码;可以重置用户密码,也可以修改自己的登录密码;可以以任意用户用身份登录进行管理与操作。为了保护用户隐私,不允许批量导出用户信息。对于管理员账户,提供功能如下:

  • 添加用户:可以赋予用户登录系统的权限;
  • 修改用户信息:可以修改已经加入系统的用户姓名、编号,重置密码等;
  • 删除已有用户:可以删除已经加入系统的用户资料;
  • 修改管理员登录密码:修改自己的登录密码。

教师可以录入学生的成绩,修改自己录入的成绩,删除自己录入的成绩,修改自己的登录密码等。为了保护用户隐私,不允许批量导出学生成绩信息。对于教师账户,提供功能如下:

  • 录入学生成绩:录入自己执教的科目的成绩;
  • 修改学生成绩:修改自己录入的成绩;
  • 删除学生成绩:删除自己录入的成绩;
  • 修改登录密码:修改自己的登录密码。

学生可以查询自己的成绩,修改自己的登录密码等。为了保护用户隐私,不允许查询他人的成绩。对于教师账户,提供功能如下:

  • 查询成绩:列表显示现有成绩信息,包括科目、分数、负责的教师;
  • 修改登录密码:修改自己的登录密码。

广大老师和同学可以通过这一系统安全方便地管理成绩。程序数据结构非常紧凑,可以存储海量数据,满足大学等专业院校的数据规模需求。总之,利用这一学生成绩管理系统,可以满足各种用户的需求,实现对学生成绩的管理工作。

二、总体设计

系统提供三种账户:管理员、教师和学生。

管理员具有最高权限并且是唯一的,初始密码默认为password,需要及时修改,否则整个数据库将暴露在风险之中。管理员负责赋予用户权限,分发初始密码;一旦用户忘记密码,还可以帮用户重置密码;管理员可以以任意用户用身份登录进行管理与操作,对数据库的细节进行维护。教师可以录入、修改、删除自己负责的科目成绩;学生可以查询自己的成绩。

学生成绩管理系统中功能模块图:

三、详细设计

用户分为4类,其继承关系如下:

学生成绩管理系统各功能模块的实现:

  • 管理员登录

  • 教师登录

  • 学生登录

四、系统调试

调试过程中最大的Bug还是出在数据IO上。由于每次读取的内容长度并不能保证固定,因此必须先读取数据长度,然后根据读取结果确定读取的内容长度。测试中发现,数据文件如果不用”r+b”模式打开读取,会在数据库体积较大(大概几百字节)导致异常。这是之前没有注意到的。

为了测试系统对海量数据的处理能力,我随机生成了15000个左右的教师和50000个左右的学生供系统读取,顺带测试数据库大小。测试结果显示,系统可以流畅地读取数万条用户记录,生成的数据库文件大小为2.5M左右。这与每个对象的数据成员大小息息相关,即每条用户信息平均占用大概32字节的空间。按此,每个成绩信息占用大概64字节,即使按照每人附带10科的成绩,总的大小也不会超过~10M的数量级。这一规模的数据大致相当于我校目前的人数规模,可以保证满足实际应用需求。

其他的问题主要有登录信息的初始化与保存。为了保证密码的安全性,输入密码的UI我采用了监视键盘输入的方式,不会将明文显示在屏幕上。但同时带来的问题就是多字节字符的读取问题:getch()无法读取多字节字符,这就意味着汉字无法输入。当然,对于密码这种东西可以将输入进行限制,剔除无效字符;但用户名就无法进行实时监视输入,导致的问题就是输入用户名的时候不能退出,必须输错然后报错退出……

五、结果分析

在源代码的组织上,仍将源代码与工程文件分开保存,这样既便于跨平台编译,又利于保证安全防止误操作。类的定义单独保存为类名为文件名的.h和.cpp中,且头文件使用编译头保护,既避免了重复编译又减少了编译的工作量。

在数据的组织上,为每个类设置IO函数,保证了数据结构的稳定读写。

在代码的细节上,根据Google C风格指引的建议,没有使用C风格的流IO。对于异常处理,我也根据Google的建议没有采用C++风格的try-throw-catch结构,而是对于可以预见的非致命错误进行提示后继续运行,对于不可预见的致命性错误使用printf输出后暂停程序。调试中并没有因为异常处理带来额外的麻烦,大部分的错误提示也都没有出现。

编译环境的选择。使用的是Code::Blocks+TDM64 GCC。64位编译器,但加了-m32参数,编译结果为32位程序,在Windows 8 x64上编译并测试运行通过。调用了非标准库函数,使用VS特别是老的VS编译不保证通过。

六、总结

这个系统应该说比人事管理系统更加复杂,因为有账户系统、大量的数据处理。经过这些天的Debug,在消灭代码中种种不足的同时更增加了C++编程的经验。感谢老师为大家提供了这样一个提高自己的机会!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118205.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兔英语语法体系——观后笔记

目录 一、视频链接 二、视频前言 三、简单句(Simple Sentences) 1. 可独立完成的动作 2. 有1个动作的承受者 3. 有两个动作承受者 4. 只有一个动作承受者(但需补充) 5. 非 “动作” 6. 总结 四、五大基本句型 五、句子成分 6. 定语 7. 状语 8. 同位语 9. 总结 …

[SWPUCTF 2022 新生赛]

目录 [SWPUCTF 2022 新生赛]ez_rce 什么是poc? [SWPUCTF 2022 新生赛]where_am_i [SWPUCTF 2022 新生赛]js_sign [SWPUCTF 2022 新生赛]xff ​[SWPUCTF 2022 新生赛]numgame call_user_func()函数 ::双冒号运算符 [SWPUCTF 2022 新生赛]ez_sql [SWPUCTF 2…

Anylogic比较运行实验

比较运行实验案例: 设置好参数后,点击左下角的开始,即可运算出结果 设置图例参数,在界面上图例显示为改变的变量值:

雕虫小技:解决VSCode中extern “C“的代码缩进问题

问题现象 创建一个标准的C语言头文件:foo.h #ifndef _FOO_H_ #define _FOO_H_#ifdef __cplusplus extern "C" { #endif/************************************************************************** * Include Files …

Security(lt2)

some basic terminology • plaintext - original message • ciphertext - coded message • cipher - algorithm for transforming plaintext to ciphertext • key - info used in cipher known only to sender/receiver • encipher (encrypt) - converting plaintext to …

从fasta文件中提取指定长度序列构建矩阵

要从 FASTA 文件中提取指定长度的序列并构建矩阵,你可以使用 BioPython 库,它可以方便地处理生物序列数据。你可以通过从 FASTA 文件中读取序列,然后将每个序列拆分成指定长度的子序列,最终构建矩阵。 以下是一个示例代码&#x…

深兰科技董事长陈海波出席《中马建交五十周年高级别经贸合作》

2024年9月3日,中马建交50周年高级别经贸合作交流会暨马来西亚第九任首相VIP欢迎晚宴在北京隆重举行,深兰科技创始人、董事长陈海波先生应邀出席。 会议期间,双方举行了品牌出海合作签约仪式。在马来西亚首相雅各布先生的见证下,深…

分解+优化+组合+对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测

分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测 目录 分解优化组合对比!核心无忧!VMD-SSA-Transformer-LSTM多变量时间序列光伏功率预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.…

万字长文带你窥探Spring中所有的扩展点

写在前面 Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机制。很多时候我们只要引…

直流负载技术介绍

直流负载技术是一种用于控制和调节电力系统运行状态的重要技术。它主要通过对电力系统中的直流负载进行有效的管理和控制,以保证电力系统的稳定运行,提高电力系统的运行效率,降低电力系统的运行成本。 直流负载技术主要包括直流负载的检测、…

csdn有xss漏洞吗?

csdn有xss漏洞吗? 图片111?

GNU风格代码编译(27)

1makefile 的规则 命令必须使用tab 按键, 而不能使用 空格按键。 1. TARGETstart 2. TARGETCmain 3. all: 4. arm-none-linux-gnueabi-gcc -O0 -g -c -o $(TARGETC).o $(TARGETC).c 5. arm-none-linux-gnueabi-gcc -O0 -g -c -o $(TARGET).o $(TARGET).s…

米壳AI:分享一个轻松保存外网高清原视频的方法!

hello!各位小伙伴们,你们好呀!今天我要给大家分享一个超级实用的工具 ——medio.cool。 在这个信息全球化的时代,我们常常会被国外的精彩视频所吸引,然而如果我们想到外网下载视频,最高只可以保存 720p 的画…

AI 智能体: 一篇文章,解锁你的第一张 Coze 卡片

你是否和我一样,看多了用大量文字堆积的回复结果就会感到腻呢? 相比于枯燥乏味的文字,大家更喜欢图文并茂的呈现方式。 图片中,左侧是生成的卡片,右侧是没有配置卡片的效果。你会选哪一个? 或许&#xf…

假期学习-- iOS 通知详解

iOS 通知详解 数据结构 从我们之前使用通知的流程和代码来看,通知其实就是一个单例,方便随时访问。 NSNotificationCenter:消息中心 这个单例类中主要定义了两个表,一个存储所有注册通知信息的表的结构体,一个保存…

自定义一个maven插件,deploy(推送)依赖到私服的时候企业微信群里通知

很多时候,项目里面会引入各种同公司写的依赖,而这些依赖有时候更新到了nexus私服,其他人又不知道,导致本地的代码执行不符合预期。 我们这就有这种情况,因为依赖还处于开发阶段,并不是一个release版本&…

基于vue框架的车辆维修管理系统的设计与实现pvno9(程序+源码+数据库+调试部署+开发环境)系统界面在最后面。

系统程序文件列表 项目管理:普管,驾驶员,维修员,维修出库,采购入库,配件信息,车辆信息,维修申请,维修费用 开题报告内容 基于Vue框架的车辆维修管理系统的设计与实现开题报告 一、项目背景与意义 随着汽车保有量的不断增加,车辆维修行业面临着前所未…

计算机毕业设计选题推荐-流浪动物领养管理系统-Java/Python项目实战(亮点:数据可视化分析、智能推荐)

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

Node.js构建千万级高可用企业级应用:‌深入六大核心业务场景

Node.js构建千万级高可用企业级应用:‌深入六大核心业务场景 Node.js,‌作为一种基于Chrome V8 JavaScript引擎构建的开源运行时环境,‌已经在企业级应用中展现出其独特的优势。‌特别是在处理高并发、‌实时性要求高的应用场景中&#xff0…

解码数字化转型顶层规划(附236页PPT:xx企业数字化转型项目顶层规划方案)

写在前面:PPT分享见后文~ 企业数字化转型顶层规划的制定是一个系统性的过程,需要综合考虑多个方面。以下是制定企业数字化转型顶层规划的一些关键步骤和要点,以供参考: 1、明确数字化转型战略定位: 将数字化转型作为…