计算机毕业论文考试管理系统开发含程序源代码(编辑修改稿)内容摘要:
以简易地转化为XML网络服务,通过Internet被不同操作系统上运行的任何程序调用。 C程序员还可以方便地使用面向对象的编程技艺来开发利用现有的CML网络服务。 (1)Client/Server模式当今,网络应用模式由最初的对等模式发展到Client/server(客户端/服务器)模式,直到现在广泛应用的三层Client/Server模式,即:用户使用标准的客户端(如Microsoft的Internet Explorer等常用的网络工具)访问应用服务器,由应用服务器对数据库进行操作。 当然,C的网络开发也将遵循Client/Server模式。 (2)网络连接的流程客户端和服务器端程序的基本动作流程(TCP方式),:网络初始化网络初始化工厂 请求连接 Connect() 获得服务端接字Socket socket 数据传输 Read/Write etc.关闭连接()连 接 确 认 监听端口Listener()获得客户端套接字Socket socket数据传输 Read/Write etc关闭连接() TCP动作流程设计中。 Server端启动服务程序,监听Clinet端的连接请求;Client端在启动时必须提供Server端的IP地址和端口号。 头相采集技术考试管理系统,利用摄像机对考生进行头相当场采集,可以有效地防止考生代考的现象。 计算机在安装摄像头驱动程序后,这就是一个关于摄像机的类,调用它,可以使应用程序接上摄像头,对考生进行摄像。 数据库存储图片文件将图片存到数据库中时,首先要将其转化成二进制流,新建一个内存流,把图片存放到二进制流中,然后将二进制流中的内容按字节读入到字节数组中,存放数据到数据库时,只要把该字节数组存放到数据库中,就可以实现数据库存储图片。 图片存入数据库的实现代码如下:try { //新建一个内存流 MemoryStream ms=new MemoryStream()。 //把图片内容存到二进制流中去 FileStream fsImage = new FileStream(C:\\ExamData\\, )。 //把内存流中的内容按字节读入字节数组中 byte[] myData=new Byte[]。 =0。 (myData,0,())。 //将字节数组存储到数据的操作………… } catch(Exception ex) { (().Trim(),提示信息,)。 return。 }从数据库中读取图片的实现代码如下://以字节为单位传入数据byte[] myDate=new byte[0]。 myData=(byte[]) dr["图片"]。 // dr["图片"]为图片数据字段值int bmpSize=。 //建立一个内存流MemoryStream ms=new memoryStream()。 //把图片内容写入该内存流(myData,0,bmpSize)。 Bitmap bmp。 //根据内存流的内容新建图片bmp=new Bitmap(ms)。 报表技术每个应用程序都需要打印报表或文档的功能。 在Visual C++或visual Basic等语言中,由于没有可视化的设计界面来设计打印面,实现打印有时会比实现用户界面所需要的代码量还要多。 所以在这些语言中,主要通过两种方式实现打印:通过第三方软件或利用Office VBA的功能实现文档打印。 第三方软件比如水晶报表或ActiveReport等,都拥有图形化的设计界面,可快速实现打印功能,实现简单、使用方便、有强大的功能。 使用Office VBA实现报表或文档的打印具有灵活性,配合Office提供的宏记录功能,可较为快速的实现编程。 使用Office,并且在报表格式改变后,需要重新更改代码。 .NET框架在实现报表打印上提供了灵活简便的方案结合与打印相关的类,通过明确编码可实现复杂格式的报表打印,如常用的打印预览和将报表输出到打印机上等。 另外,微软公司提供的AQL Server report Server产品适用于企业级报表的生成,具备强大的报表的生成和打印功能,援用类似于Office word的表格设计功能,在支持.NET的语言中,可通过增加Web引用实现对某一报表的引用。 SQL Server report在报表格式更改后,不需要更改程序代码,对于需要实现企业级报表的开发项目来说,是一个极好的选择。 ,水平有限,加之设计时间很紧,本次设计我采用了最方便的第三控件:水晶报表,对考生报名信息进行打印。 数据加密、解密技术数据加密,是保证数据安全最重要的手段。 考试管理系统的设计,像考生答案和分数这样的字段是必须加密码的,如果不加密,很容易被恶意的修改,考虑到考试的公平、公正,数据的安全等问题,采用数据加密技术,对数据库中一些重要字段进行加密。 要正确显示读取加密后的数据,所以在读取加密码数据时必须对其进行解密,才能显示出正确的信息。 此次设计的加密算法采用Rijndael算法,是今后的几年内,在许多密码术的应用中Rijndael将逐步取代数据加密标准(DES)以及后来的Triple DES。 这个算法是由两个比利时密码学家Vincent Rijmen和Joan Daemen设计的。 Rijndael算法是新一代的对称区块密码,它支持128,192,还有256比特的金钥大小,数据以128比特的区块来处理,但不同于AES设计标准的是,区块大小能反映金钥的大小。 根据不同的金钥/区块大小,Rijndael使用不同的回合数,如下所示: 如果金钥/区块大小为128比特,则回合数为9。 如果金钥/区块大小为192比特,则回合数为11。 如果金钥/区块大小为256比特,则回合数为13。 Rijndael是一个取代线性变换密码,它不需要Feistel网络。 Rijndael使用了三个离散可倒转统一变换(层),它们是:线性混合变换(Linear Mix Transform),非线性变换(Nonlinear Transform),以及金钥加法变换(Key Addition Transform)。 在第一个回合前就执行了一个简单的金钥加法层,这样就增加了安全性。 这之后就是Nr1个回合以及一个终止回合(final round)。 这变换形成了一个开始后但又是整个过程结束前的状态(State)。 这个State可以认为是一个矩阵,行数为4,列数为区块长度(block length)除以比特长度(比如,除以32)。 密码金钥同样也是一个行数为4的矩阵,不同的是列数为金钥长度除以32。 而区块可以看作是4字节线性矩阵的向量。 实际的变换是这样的:位元组取代转换是非线性的取代转换,每个State字节都将独立地执行位元组取代转换,其中Sbox(取代表)由两个变换构成,并且它们是可逆的。 移列变换使State的每一列以不同的位移作偏移。 偏移的位移取决于这个State的区块长度。 换行变换把State列看作一个存在GF(28)中的多项式,并且对一个固定的多项式作乘法,如果发生溢位,则再模x4+1。 最后,对State用回合金钥变换作异或。 金钥排程(key schedule)通过金钥扩充(key expansion)和回合的选择来帮助加密金钥(Cipher Key)决定回合金钥(Round Key)。 总的来说,Rijndael的结构体现了一种高度的结构化的设计,这使得在克服未来任何袭击对算法作出修改时将比过去的算法设计容易得多。 第4章 核心算法167。 智能组卷算法自动组卷是考试系统自动化操作的核心目标之一,而如何保证生成的试卷能最大程度的满足用户的不同需要,并具有随机性、科学性、合理性,这是实现中的一个难点。 尤其在交互式环境下用户对于组卷速度要求较高,而一个理论上较完美的算法可能会以牺牲时间作为代价,往往不能达到预期的效果。 因此,选择一个高效、科学、合理的算法是自动组卷的关键。 以往的具有自动组卷功能的考试系统大多采用随机选取法和回溯试探法。 随机选取法根据状态空间的控制指标,由计算机随机的抽取一道试题放入试题库,此过程不断重复,直到组卷完毕,或已无法从题库中抽取满足控制指标的试题为止。 该方法结构简单,对于单道题的抽取运行速度较快,但是对于整个组卷过程来说组卷成功率低,即使组卷成功,花费时间也令人难以忍受。 尤其是当题库中各状态类型平均出题量较低时,组卷往往以失败而告终。 回溯试探法这是将随机选取法产生的每一状态类型纪录下来,当搜索失败时释放上次纪录的状态类型,然后再依据一定的规律(正是这种规律破坏了选取试题的随机性)变换一种新的状态类型进行试探,通过不断的回溯试探直到试卷生成完毕或退回出发点为止,这种有条件的深度优先算法,对于状态类型和出题量都较少的题库系统而言,组卷成功率较好,但是在实际到一个应用时发现这种算法对内存的占用量很大,程序结构相对比较复杂,而且选取试题缺乏随机性,组卷时间长,后两点是用户无法接受的,因此它也不是一种很好的用来自动组卷的算法。 分析上述两种算法的优缺点,不难发现,在限制条件状态空间的控制下,随机选取法有时能够抽取出一组令用户满意的试题。 只不过由于它随机选取试题的范围太大,无法确定目前条件下哪些区域能够抽取合适的试题,反而可能在那些已经证明是无法抽取合适试题的区域内反复选题,进行大量的无效操作进入死循环,最终导致组卷失败。 回溯试探法组卷成功率高,但它是以牺牲大量的时间为代价的,对于现今越来越流行的考生网上随机即时调题的考试过程来说,它已不符合要求。 因此,必须结合以上两种方法寻找一种新的改进算法,这种算法要具有全局寻优和收敛速度快的特点。 遗传算法(Genetic Algorithms)以其具有自适应全局寻优和智能搜索技术,并且有收敛性好的特性,能很好的满足自动考试组卷的要求。 167。 遗传算法的基本步骤Holland 1975年提出的传统的GA。 它的主要步骤如下:第一步:编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的不同组合便构成了不同的点。 第二步:初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体, N个个体构成了一个群体。 GA以这N个串结构数据作为初始点开始迭代。 第三步:适应性值评估检测:适应性函数表明个体或解的优劣性。 不同的问题,适应性函数的定义方式也不同。 第四步:选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。 遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。 选择实现了达尔文的适者生存原则。 第五步:交换:交换操作是遗传算法中最主要的遗传操作。 通过交换操作可以得到新一代个体,新个体组合了其父辈个体的特性。 交换体现了信息交换的思想。 第六步:变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。 同生物界一样,GA中变异发生的概率很低,~。 变异为新个体的产生提供了机会。 :选择编码方式产生初始群体计算初始群体的适应性值选择 交换 变异计算新一代群体的适应性值Y 如果不满足条件N 计算完成 GA的计算过程图167。 遗传算法描述遗传算法是一种并行的、能够有效优化的算法,以Morgan的基因理论及Eldridge 与Gould间断平衡理论为依据,同时融合了Mayr的边缘物种形成理论和Bertalanffv一般系统理论的一些思想,模拟达尔文的自然界遗传学:继承(基因遗传)、进化(基因突变)优胜劣汰(优的基因大量被遗传复制,劣的基因较少被遗传复制)。 其实质就是一种把自然界有机体的优胜劣汰的自然选择、适者生存的进化机制与同一群体中个体与个体间的随机信息交换机制相结合的搜索算法。 运用遗传算法求解问题首先需将所要求解的问题表示成二进制编码,然后根据环境进行基本的操作:selection,crossover,mutation……这样进行不断的所谓“生存选择”,最后收敛到一个最适应环境条件的个体上,得到问题的最优解。 Simple_Genetic_algorithm(){ t:=1。 /*变量t表示迭代代数*/ 初始化候选解群体Population(t)。 计算各个解的适应值。 do while(终止条件不满足) { 随机地将群中的个体两两配对,进行交配操作。 执行变异操作。 利用选择机制形成下一代候选取:Population(t+1):=Selection(Population(t))。 t:=t+1。 } } 167。 遗传算法应用一般来说,用户在自动组卷时会对试卷的质量提出多方面的要求,如总题量、平均难度、题型比例等,自动组卷就应最大程度的满足用户的要求。 因此,在组卷之前,我们首先为自动组卷过程建立控制指标相应状态空间D,。计算机毕业论文考试管理系统开发含程序源代码(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。