Data Structure

教务管理系统C++文件系统

注:编译环境为VC++6.0

文件 说明
Teacher.cpp 可运行文件
HandedHomeWork 学生提交的作业
Grade.txt 学生成绩及选课情况
HomeWork.txt 教师发布的作业
Tealogin.txt 教师账号及密码
Plagisrist.txt 作业抄袭情况
Unsubmit.txt 未提交作业的情况
  • 学号为20200000的作业存放在HandedHomeWork/20000(课程编号)/20200000(学号).txt
  • Grade.txt内按“学号 课程号 平时成绩 期末成绩 总评 ”次序,存放学生成绩及选课情况

教师端

已实现的功能:

  • 根据自己的帐号和密码进行登录。登录出错应提示。

  • 发布作业。作业被记录到文件中,供教师与学生查找。

  • 检查作业。统计交作业的情况,统计未提交作业的学生学号以及总人数。

  • 自动检查抄袭。
    比较作业目录下的作业文件,如果有任何两个文件的相似度超过80%,则自动判定为抄袭,向教师提示。

  • 提交课程成绩。
    成绩由平时分和期末分的平均得出,其中平时分和期末分由教师输入,计算总评时的比例由老师设置(比如平时分占30%,期末分占70%)。在教师输入了课程成绩之后,教务员端能查找到,学生端也能查找到自己的成绩。实现提示:在输入成绩后,该成绩被记录到文件中,以供查找。

  • 退出保存功能。当该软件被关闭,再打开时,数据没有丢失。


实现:

使用Open Hash存储教师的教师编号与密码。

图中结点的键值“88880001”至“88882000”均为教师编号。考虑到

  1. 几乎不注销账号,不经常使用删除操作。
  2. 它可以提供快速的插入操作和查找操作。
  3. 教师编号唯一,哈希函数设计为教师编号对教师总人数取余,使散列地址分布均匀。很少有冲突情况。

  • 注册时,
    根据教师编号计算出在数组的位置。如果这个位置上没有元素,那么直接将它存储在这个位置上;如果这个位置上已经有元素了,遍历链表,比较教师编号,若有相同(提示用户),若无相同,存在链表尾部。
  • 登录时,
    通过哈希函数计算,找到对应链表,再遍历链表,如果输入的教师编号、密码与结点的相匹配,则登陆成功。

下面是使用hash表 结合BST存储选课信息以及某个课程的学生成绩。

因为考虑到有两万个学生与200门课程,若使用一张哈希表,可能需要一个200*2w这么大的数组,所需要的空间太多。有的课程选课人多、有的课选课人少,可能出现空间没得到有效利用的情况。

一共有200门课,所以建立一个长度为200的哈希表和200个二叉查找树,
用200门课的课程编号映射到相应的BST,一棵树存放一门课程的信息,使用选课学生的学号作为二叉查找树的键。

由于学号随机,按学号放使整棵树高度变小。这也有效解决了有的课程选课人多、有的课选课人少情况下,空间的浪费。
当修改同一门课程的平时分占总分比时,可以大批量修改学生成绩。

所以,

  • 插入数据时,先根据课程编号找到在数组的位置。再对BST进行插入。
  • 查找数据,先根据课程编号找到在数组的位置。再对BST进行查找。
    将数据写入txt文档时,是用前序遍历写进去的,也就是按学号“中小大”顺序写入,在下次读取txt建立BST时,就可以避免BST成链的情况。

由于需要计算作业相似度,这里使用了最长公共子序列计算两文本的相似度。

如果最长公共子序列长为k,文本1长为n1,文本2长为n2,则相似度为

(2*k)/(n1+n2)

下面介绍最长公共子序列的实现:

用二维数组Cmn记录串X与Y的最长公共子序列长度,m、n分别为x、y长度。

  1. 当xi=yj时,找出Xi-1和Yj-1的最长公共子序列,然后在其尾部加上xi(或者yj)即可得X和Y的一个最长公共子序列。

  2. 当xi≠yj时,必须解两个子问题,即找出Xi和Yj-1的一个最长公共子序列及Xi-1和Yj的一个最长公共子序列。这两个公共子序列中较长者即为X和Y的一个最长公共子序列。

    在算法中,每一次的递归调用使i或j减1,因此算法的计算时间为Θ(m+n)。构建c[m][n]表需要Θ(mn)。
    计算出最长公共子序列长为k后,如果文本1长为n1,文本2长为n2,则相似度为 (n1+n2)分之2k。若相似度大于80%,则判为抄袭。

这里使用了链表存放学号以及相应的作业。链表的键值为学号。由于需要两两比对,使用两个for循环遍历链表(先确定一个指针,另一个遍历,再移动那个指针)
比对过程,使用最长公共子序列计算每两个学生作业的相似度,如果相似度大于0.8,记录这两位同学的学号。

由于两两比对,使用两个for循环遍历链表、加上使用最长公共子序列计算所需时间较长。考虑到现实生活中,如果第一位与第二位相似度过大,则判定两位都存在抄袭情况,不需要再将第二位与其他同学比较。

故可以删掉一个相同的,除去重复比较的过程。

分析:

在选用数据结构时,如果使用哈希表存放学号以及相应的作业。如果使用定长哈希表,由于学生数不确定,开出的数组,容易出现空间的浪费。如果通过new创建哈希表,很难做到刚才说的删除操作。

若使用BST,BST的一个结点比链表的结点多了一个指针的空间。所以使用链表存放学号以及学生作业。

教务管理系统C++文件系统,使用Open Hash存储教师的教师编号与密码。相关推荐

  1. 河南科技学院教务管理系统服务器,河南科技学院教务管理系统:http://jwc.hist.edu.cn...

    各教学单位: 为保证下学期教学工作正常运行,根据年度教学工作计划,教务处决定开始组织安排2019-2020学年第二学期教学任务,现将有关事宜通知如下: 一.工作内容及程序 下学期教学任务安排工作分为核 ...

  2. 教务处管理系统c语言编程,基于C语言的教务管理系统的设计

    基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...

  3. 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.

    创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证. 一.显示页面 新建一个登录页面,即login.jsp <%--Created by In ...

  4. (fym)ssm基于web的教务管理系统 毕业设计261620

    ssm 教务管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用J ...

  5. 数据库设计实例 教务管理系统

    数据库实验七 数据库设计 题目要求: 设计一个教务管理系统.要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等.具体考核方法根据自己了解的实际情况处理. 假设此次 ...

  6. java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计

    学校教务管理系统的设计与实现 摘 要 学校教务管理信息化是提高办公效率的主要途径,随着我国高等教育的快速发展,学校办学规模的不断扩大,在校学生人数不断增多,办学层次出现多元化,由一地办学发展到多地多点 ...

  7. 某校教务管理系统post分析,Python实现自动查询成绩并发送短信

    某校教务管理系统post分析,Python实现自动查询成绩并发送短信 前言 本人是一名大三大学生,考完试不久,由于自己不知道期末考试什么时候出考试成绩,并且每次查询成绩特别麻烦(首先得登录VPN连接学 ...

  8. 自己的服务器连接教务系统,勤哲Excel服务器做中学教务管理系统

    众所周知,高等院校的教务管理工作是整个高校工作的重要环节之一,教务系统的运转关系到整个高校工作的运行.在不少教育工作者看来,教务工作直接影响学校的整体教学质量和学生的培养进度.同时,随着信息化建设的推 ...

  9. 基于java Springboot实现教务管理系统《视频版-建议收藏》

    视频演示: 文末获取源码联系 java Springboot教务管理系统 研究背景: 在当今信息社会发展中中,计算机科学的飞速发展,大多数学校开始注意办公效率的发展是很关键,对学校的管理起到举足轻重的 ...

最新文章

  1. vscode断开调试服务器文件,vscode显示等待调试器断开连接
  2. 国产数据库年终大盘点
  3. iOS APP提交上架流程
  4. pytorch tensor查找0_在PyTorch中Tensor的查找和筛选例子
  5. Linux下qt桌面程序闪退,qt无法正常使用
  6. Android全面解析Handler
  7. C++头文件<functional>和bind、placeholders占位符使用简单例子
  8. sql还原数据库备份数据库_如何获取SQL数据库还原历史记录
  9. 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
  10. 091 类的多态和多态性
  11. java 调用oracle函数_java – 用Spring的SimpleJdbcCall来调用Oracle函数
  12. 微型计算机启天m425显卡驱动,Lenovo联想启天M425台式机NVIDIA VGA驱动26.21.14.4223版For Win10-64(2020年4月7日发布)...
  13. java五险一金去从工资扣吗,五险一金需要自己交钱吗?是从工资里扣除还是......
  14. 无线键盘RK61使用说明
  15. 计算机选择位置不能选桌面,win7电脑桌面的图标无法拖动位置了怎么办?
  16. 逆向工程实验——pre9(可执行文件的加密MD5碰撞lab)
  17. 放弃北上广的N个理由
  18. 用 C 语言开发一门编程语言 — 字符串的设计与实现
  19. The softwares are used in Flex developing
  20. 【Java】view.setVisibility()的使用方法

热门文章

  1. 制作Ubuntu的deb格式包 从Hello World做起
  2. Oracle删除创建用户并授权
  3. 计算机网络第五章——网络层
  4. 进程互斥的硬件实现方式【操作系统学习笔记】
  5. System.out.println()快捷键
  6. 从IT时代转入DT时代 安防应该注意什么?
  7. 类似蚂蚁森林html5游戏源码,js仿照 蚂蚁森林 效果
  8. XML生成java类
  9. 【AD笔记】--原理图原理图库原理图
  10. python调用libvirt_python实战系列之通过libvirt操作KVM(六)