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

学生成绩管理系统

一、系统需求分析

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

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

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

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

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

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

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

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

二、总体设计

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

管理员具有最高权限并且是唯一的,初始密码默认为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++编程的经验。感谢老师为大家提供了这样一个提高自己的机会!

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神仙别闹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值