教务管理系统C++文件系统,使用Open Hash存储教师的教师编号与密码。
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”均为教师编号。考虑到
- 几乎不注销账号,不经常使用删除操作。
- 它可以提供快速的插入操作和查找操作。
- 教师编号唯一,哈希函数设计为教师编号对教师总人数取余,使散列地址分布均匀。很少有冲突情况。
- 注册时,
根据教师编号计算出在数组的位置。如果这个位置上没有元素,那么直接将它存储在这个位置上;如果这个位置上已经有元素了,遍历链表,比较教师编号,若有相同(提示用户),若无相同,存在链表尾部。 - 登录时,
通过哈希函数计算,找到对应链表,再遍历链表,如果输入的教师编号、密码与结点的相匹配,则登陆成功。
下面是使用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长度。
当xi=yj时,找出Xi-1和Yj-1的最长公共子序列,然后在其尾部加上xi(或者yj)即可得X和Y的一个最长公共子序列。
当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存储教师的教师编号与密码。相关推荐
- 河南科技学院教务管理系统服务器,河南科技学院教务管理系统:http://jwc.hist.edu.cn...
各教学单位: 为保证下学期教学工作正常运行,根据年度教学工作计划,教务处决定开始组织安排2019-2020学年第二学期教学任务,现将有关事宜通知如下: 一.工作内容及程序 下学期教学任务安排工作分为核 ...
- 教务处管理系统c语言编程,基于C语言的教务管理系统的设计
基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...
- 创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证.
创建一个简单的后台教务管理系统,包含动态增删改查学生,年级和课程信息及查看登录日志等功能,包含表单验证. 一.显示页面 新建一个登录页面,即login.jsp <%--Created by In ...
- (fym)ssm基于web的教务管理系统 毕业设计261620
ssm 教务管理系统 摘 要 随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理.在现实运用中,应用软件的工作规则和开发步骤,采用J ...
- 数据库设计实例 教务管理系统
数据库实验七 数据库设计 题目要求: 设计一个教务管理系统.要求管理包括:学生的档案,学生选课的情况,学生每学期的综合测评,教师档案,教师工作量等等.具体考核方法根据自己了解的实际情况处理. 假设此次 ...
- java基于ssm的学校教务管理系统的设计与实现论文-计算机毕业设计
学校教务管理系统的设计与实现 摘 要 学校教务管理信息化是提高办公效率的主要途径,随着我国高等教育的快速发展,学校办学规模的不断扩大,在校学生人数不断增多,办学层次出现多元化,由一地办学发展到多地多点 ...
- 某校教务管理系统post分析,Python实现自动查询成绩并发送短信
某校教务管理系统post分析,Python实现自动查询成绩并发送短信 前言 本人是一名大三大学生,考完试不久,由于自己不知道期末考试什么时候出考试成绩,并且每次查询成绩特别麻烦(首先得登录VPN连接学 ...
- 自己的服务器连接教务系统,勤哲Excel服务器做中学教务管理系统
众所周知,高等院校的教务管理工作是整个高校工作的重要环节之一,教务系统的运转关系到整个高校工作的运行.在不少教育工作者看来,教务工作直接影响学校的整体教学质量和学生的培养进度.同时,随着信息化建设的推 ...
- 基于java Springboot实现教务管理系统《视频版-建议收藏》
视频演示: 文末获取源码联系 java Springboot教务管理系统 研究背景: 在当今信息社会发展中中,计算机科学的飞速发展,大多数学校开始注意办公效率的发展是很关键,对学校的管理起到举足轻重的 ...
最新文章
- vscode断开调试服务器文件,vscode显示等待调试器断开连接
- 国产数据库年终大盘点
- iOS APP提交上架流程
- pytorch tensor查找0_在PyTorch中Tensor的查找和筛选例子
- Linux下qt桌面程序闪退,qt无法正常使用
- Android全面解析Handler
- C++头文件<functional>和bind、placeholders占位符使用简单例子
- sql还原数据库备份数据库_如何获取SQL数据库还原历史记录
- 【Baltic2003】【BZOJ1370】Gang团伙(并查集,拆点)
- 091 类的多态和多态性
- java 调用oracle函数_java – 用Spring的SimpleJdbcCall来调用Oracle函数
- 微型计算机启天m425显卡驱动,Lenovo联想启天M425台式机NVIDIA VGA驱动26.21.14.4223版For Win10-64(2020年4月7日发布)...
- java五险一金去从工资扣吗,五险一金需要自己交钱吗?是从工资里扣除还是......
- 无线键盘RK61使用说明
- 计算机选择位置不能选桌面,win7电脑桌面的图标无法拖动位置了怎么办?
- 逆向工程实验——pre9(可执行文件的加密MD5碰撞lab)
- 放弃北上广的N个理由
- 用 C 语言开发一门编程语言 — 字符串的设计与实现
- The softwares are used in Flex developing
- 【Java】view.setVisibility()的使用方法