基于Qt的教务管理系统的实现本科论文_第1页
基于Qt的教务管理系统的实现本科论文_第2页
基于Qt的教务管理系统的实现本科论文_第3页
基于Qt的教务管理系统的实现本科论文_第4页
基于Qt的教务管理系统的实现本科论文_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学武汉理工大学武汉理工大学武汉理工大学基于Qt的教务管理系统的实现摘要近年来,由于计算机网络与计算机软件的不断快速迅猛发展,人们的生活习惯也由此造成了很大的变化,并且计算机信息管理系统也越来越多的参与到人们的日常生活与工作中来,对于我们学生来说,这种变化尤其巨大。信息的快速更新变化使得学校在学生信息的管理上投入的资源越来越多。所以,为了提高学校教务管理工作的效率,节约教务资源与经费,并且减少教务处理工作中的失误,有必要开发一套高效自动化的计算机信息管理系统。本论文中的系统使用的开发工具是Qt,采用SqLite数据库,是在使用比较广泛的windows下开发,利用其提供的面向对象编程的可视化工具来编制出界面友好,操作简单的程序。此教务管理系统由后台数据的处理部分与前台应用的交互部分组成,并且该系统可以根据用户不同的权限来提供不同的操作,主要包括学生的成绩管理、学生的学籍管理、学校的班级管理等。此教务管理系统的开发目的在于最大限度的节省人才资源的同时也可以提高管理效率,能够及时、准确、迅速的满足不同用户的不同需求。关键词:教务管理系统;Qt;SqLite;效率TheimplementationofeducationaladministrationsystembasedonQtAbstractInrecentyears,duetothecomputernetworkandcomputersoftwarecontinuouslyrdevelopmentquick,people'slifehabitalsocausedthegreatchanges,andcomputerinformationmanagementsystemisalsomoreandmoreinvolvedinthePeople'sDailylifeandwork,forourstudents,thischangeisespeciallylarge.Updateinformationchangetheschoolinthemanagementofstudentinformationresourcesmoreandmore.So,inordimprovetheefficiencyofschooleducationaladministrationwork,savingtheeducationalresourcesandfunds,andreducethefaultsinoureducationalwork,itisnecessarytoasetofefficientautomaticcomputerinformationmanagementsystem.SystemdevelopmenttoolsusedinthispaperistheQt,usingSqLitedatabase,isuseofmoreextensivedevelopmentundertheWindows,usingtheobject-orientedprogrammingofferedbythevisualtoolstodevelopthefriendlyinterface,simpleopprocedures.Theeducationaladministrationmanagementsystembythebackgrounddataprocessingpartandtheforegroundapplicationoftheinteractionoftheparts,andtcanprovidedifferentaccordingtodifferentuserpermissionstooperation,mainlyincludesthestudentperformancemanagement,studentstatusmanagement,schoolofclassmanagement,etc.Thedevelopmentoftheeducationaladministrationsystemisaimedatmaximumsaveresourcesatthesametimealsocanimprovetheefficiencyofmanagemenabletotimely,accuratelyandquicklytomeetthedifferentneedsofdifferentusers.KeyWords:Educationaladministrationmanagementsystem;Qt;Sqlite;efficienc目录摘要................................................................................Abstract...............................................................................1系统概述...........................................................................1.1项目背景.....................................................................1.2系统开发的目的和意义.........................................................1.3目前国内外的研究现状.........................................................1.3.1国外研究现状.............................................................1.3.2国内研究现状.............................................................2关键技术...........................................................................2.1开发工具简介.................................................................2.1.1QtCreator集成开发环境....................................................2.1.2Sqlite简介................................................................2.2开发语言简介.................................................................2.2.1C++......................................................................2.2.2SQL......................................................................系统总体设计的实现.................................................................系统模块结构的设计...........................................................3.1.1软件模块结构的设计.......................................................3.1.2软件模块总体处理流程.....................................................3.1.3功能分配.................................................................系统功能总体设计.............................................................3.3系统的总体界面设计介绍.......................................................3.4数据库的设计.................................................................3.5数据库表的实体图.............................................................3.6系统数据出错处理设计.........................................................3.6.1系统的出错信息以及处理方法...............................................3.6.2补救措施.................................................................3.6.3安全保密设计.............................................................4详细设计...........................................................................4.1系统的主程序.................................................................4.2程序初始化界面的实现.........................................................4.3数据库的操作.................................................................4.4管理员模块的实现.............................................................4.5学生模块的实现...............................................................4.6教师模块的实现...............................................................4.7数据库模块的实现.............................................................系统运行界面展示...................................................................登录界面展示.................................................................5.2管理员操作初始化界面展示.....................................................5.3教师操作界面展示.............................................................武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学5.4学生界面展示.................................................................5.5错误处理界面展示.............................................................系统测试...........................................................................测试概述.....................................................................6.2测试过程.....................................................................6.3测试结果.....................................................................总结..............................................................................参考文献..............................................................................致谢..............................................................................外文原文..............................................................................外文翻译..............................................................................

1系统概述1.1项目背景信息系统的目的是让人可以高效的进行工作,包括对信息的一系列操作,如添加信息、修改信息、删除信息、查询信息等;人们将计算机硬件与软件相结合来开发出信息平台,在这个平台中实现信息系统的功能与目的。现如今,教务发展越来越快、越来越好,由此引发的高校教育资源也越来越紧张,因此对于高校的教学管理部门来说一套好的教务管理系统不仅可以解决日渐增大的教学管理量,而且可以降低教学管理的复杂度与难度。此外,对于教育高校来说,教育管理的方式与手段也将从另一个层面体现学校的价值与教育能力,这直接影响到学校的形象。在信息高速发展的今天各大高校有必要建设一个完善的教务管理系统,这样高校可以更加合理的利用各学院的众多教学实验资源、更加合理地处理各种教学实验信息、更加合理优化安排各种教学资源,让各种资源利用都达到最大化。这些日益突出的关键问题俨然已经需要各高校教学管理部门花费一定的人力、物力去解决了。借助于计算机信息系统的强大功能,高校可以解决教务管理的一系列繁琐问题,计算机有其细致性、准确度高等特点,这些都是教务管理工作中必须的,所以信息化在日常工作中要不断的体现;现阶段,各个高校也开始对教务系统加大投资,加快校园的信息化步伐,解放人在教务管理中的繁琐工作,这样的改革对教育来说是具有重要意义的。1.2系统开发的目的和意义高校的教务管理方式在现如今是必须要改革的,而在信息化的浪潮中学校的教务管理系统的修改是必然的趋势。高校教务管理工作作为高校教育管理的一个重要环节,它是高校管理工作的核心,也是高校管理的基础。一个学校的教务管理工作的效率高低直接影响到学校教务工作的是否可以快速的处理,也间接的影响到了学校对于人才的培养质量。而且学生对教务管理系统也提出了更高的要求,信息管理系统不再仅仅是看通知的地方,而是学生与学校进行沟通的途径,学生可以将一些信息反馈给学校,学校也可以通过这个平台了解学生的动态,这样的系统对于学校的教育是有促进作用的。高校要适应信息化的发展,积极的开展教务系统的调查,满足学生对信息系统的需求,满足老师对学生的教育需要,这样可以快速的将教育资源最大化,避免浪费大量的教育资源。1.3目前国内外的研究现状1.3.1国外研究现状在信息化浪潮席卷全球、日益渗透到社会生活各个领域的今天,数字化校园建设如火如荼。特别是,欧美、日本等发达国家高度重视信息化建设,早在20世纪90年代初几乎所有的高校便建成了比较完善的校园网,各个职能部门都基本实现了网络化、信息化管理。目前国外在教务管理软件的设计和开发方面处于领先地位,不论是在开发的方法上还是在软件的使用率上都很成功。1.3.2国内研究现状我国的高等教育在近几年发展很快,高校在管理工作中需要处理的任务越来越多,这样不仅工作难度加大了而且落后的教育直接导致教学水平的提高困难。这些问题的出现让人们开始考虑换种方式来管理高校的教务工作,各高校纷纷启动并加快了数字化校园建设的步伐,相继建成了校园网,为管理软件的应用提供了硬件平台。任何新生事物的发展都离不开启蒙摸索、初见成效与加快发展的步骤,所以高校教育的信息化也不例外。通过不断的摸索,不断的尝试,我国的高校教务管理工作逐渐开始不断步入正规。现在,我国的各高校的教务管理工作还在不断的集成发展,许多高校也建立了各具特色的管理系统,这些改革都给高校的管理带来了一定的好处与方便。譬如人力资源的解放以及工作中的准确度的提高。但是,事物的发展都具有双面性,教务管理信息系统的快速发展还存在一定的缺陷,如功能的不全面,不能将所有的教务管理工作在一个系统中体现,而且功能的效率不高,有时候还存在一定的缺陷,对于一些特殊的问题没有提供很好的解决方案等等的一些问题,这些问题都需要在以后的不断发展中做出改进。2关键技术2.1开发工具简介2.1.1QtCreator集成开发环境QtCreator是跨平台的QtIDE,QtCreator是Qt被Nokia收购后推出的一款新的轻量级集成开发环境(IDE)。此IDE能够跨平台运行,支持的系统包括Linux(32位及64位)、MacOSX以及Windows。根据官方描述,QtCreator的设计目标是使开发人员能够利用Qt这个应用程序框架更加快速及轻易的完成开发任务。QtCreator主要是为了帮助新Qt用户更快速入门并运行项目,还可提高有经验的Qt开发人员的工作效率。使用强大的C++代码编辑器可快速编写代码。语法标识和代码完成功能输入时进行静态代码检验以及提示样式上下文相关的帮助代码折叠括号匹配和括号选择模式高级编辑功能。采用C++语言设计,编码规范清晰,关键算法或处理须加注释说明。QtCreator是一款跨平台的集成开发环境,特别针对Qt开发者,是QtSDK组成的一部分,可运行于Windows,Linux/X11及MacOSX等桌面操作系统,允许开发者为多桌面环境及移动设备平台创建应用程序。它包括一个可视化调试工具和集成的GUI版面和外形设计师。这个编辑器的功能包括语法高亮度显示和自动完成。QtCreator在Linux上,使用GCC的C++编译器。在Windows,默认安装它可以使用MinGW或MSVC。从源代码编译时,也可以使用cdb。QTCreator是一个跨平台的C++GUI应用构架,它提供了丰富的窗口控件,具有面向对象、易于扩展、组件编程等特点,最为引人注目的是目前在Linux上最为流行的KDE的桌面环境,它就是建立在QT库的基础之上。QT支持多种平台,随着KDE的快速发展普及,QT很有可能成为Linux系统窗口平台上进行软件开发的GUI首选工具。信号和槽是QT的核心机制,要学会QT编程那么就必须对信号和槽机制有所了解。信号和槽机制是一种接口,应用在对象之间的通信,是QT的核心特性,同时也是QT区别于其它种类工具包的重要地方。信号和槽机制是QT自行定义的一种通信机制,它独立于标准的C/C++语言,所以必须要正确的处理好信号和槽机制,这里借助moc(MetaObjectCompiler)工具,该moc工具是一个C++的预处理工具,为事件处理自动生成所需要的附加处理代码。在我们所熟知的多种GUI工具包中,窗口小控件(widget)都有一个回调函数用来响应它们能触发的动作,这个回调函数通常是一个指针,它指向某个函数。但是,在QT中信号和槽机制取代了这些函数指针,使得人们在编写这些通信程序时更为简洁明了。信号和槽机制能使用任意数量、任意类型的参数。在这里我设计的主窗口命名为:mainwindow。所有从QObject或其子类(例如Qwidget)派生的类都可以包含信号和槽机制。当对象改变状态时,信号就由该对象发射出去,这就是对象所要做的事情,但它不知道另一端是谁在接收这个信号,这就是所谓的信息封装,它保证对象被当作一个真正的组件来使用。槽被用来接收信号,它们是对象成员函数,称为槽函数。但槽函数并不知道是否有信号和自己相连。而且,对象也不了解具体的通信机制。在编程时可以将多个信号与单个槽函数进行连接,也可以将单个信号与多个槽函数进行连接,甚至也可以将一个信号和另外一个信号相连,这时无论第一个信号在何时发武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学射,那么都将立刻发射第二个信号。总之,信号与槽机制构成了一个很强大的控件编程机制。2.1.2Sqlite简介SQLite,是一款轻型的数据库,是关系型数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite是遵守ACID[2]的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在开始一个事务的时候锁定整个数据文件而完成的。同时它还支持事务处理功能等等。也有人说它象Microsoft的Access,有时候真的觉得有点象,但是事实上它们区别很大。比如SQLite支持跨平台,操作简单,能够使用很多语言直接创建数据库,而不象Access一样需要Office的支持。如果你是个很小型的应用,或者你想做嵌入式开发,没有合适的数据库系统,那么你可以考虑使用SQLite。到2013年10月17日最新版本是3.8.1。它的官方网站是:或者,能在上面获得源代码和文档。同时因为数据库结构简单,系统源代码也不是很多,也适合想研究数据库系统开发的专业人士。2.2开发语言简介2.2.1C++C++语言是一种使用非常广泛的计算机编程语言。C++是一种基于静态数据类型检查的、支持多重编程范式的程序设计语言。C++语言支持过程化程序设计、数据抽象、面向对象程序设计、泛型程序设计等多种程序设计风格。C++语言的设计目标,就是要让C++既具有适合于系统程序设计的C语言所具有的可适应性和高效性,又能在其程序组织结构方面具有像Simula那样的语言设施(Simula所支持的这种程序组织结构通常被称为面向对象程序设计风格)。在设计的时候,还做了很大的努力,使得引借自Simula的高层次的程序设计技术能够应用于系统程序设计之中。这即是说,C++所提供的抽象机制能够被应用于那些对效率和可适应性具有极高要求的程序设计任务之中。采用C++面向对象语言,利用抽象和封装等机制,借助类、对象、继承、传递等技术进行构造的软件开发方法,它的出发点和目标就是使人们在想一个问题的过程和方法时与分析、设计和实现系统的过程和方法尽最大可能的一致,即描述问题的认知空间以及解决问题的方法空间要在结构上尽可能的一致,这样面向对象方法自然地模拟了人类认知世界的方式,所以这是一个很好的思维认知的方法,也是特别好的一种软件开发方法。1998的C++标准分为两个部分:核心语言和C++标准程序库;后者包含了大部分标准模板库和C标准程序库的稍加修改版本。存在许多不属于标准部分的C++程序库,且使用外部链接,程序库甚至可以用C撰写。C++标准程序库充分吸收了C标准程序库,并佐以少许的修改,使其与C++良好的运作。另一个大型的程序库部分,是以标准模板库(STL)为基础,STL于1994年2月正式成为ANSI/ISOC++。它提供了实用的工具,如容器(如:矢量和链表),迭代器(广义指针)提供容器以类似数组的访问方式,以及算法进行搜索和排序的运算。此外还提供了(multi)map(关系数组)和(multi)set,它们都使用兼容的界面。因此,以下成为可能,使用模板撰写泛型算法,它可以和任何容器或在任何以迭代器定义的串行上运作。如同C,使用#include指令包含标准表头,即可访问程序库里的功能。C++提供69个标准表头,其中19个不再赞成使用。使用标准库(例如:使用std::vector或std::string来取代C风格的数组)有助于导向更安全和更灵活的软件。STL在纳入C++标准以前,是来自HP和后来的SGI的第三方程式库,标准中并未称之为“STL”,它只是标准库中的一部分,但仍有许多人使用这个名称,以别于其它的标准库(输入/输出流、国际化、诊断、C程序库子集,等等)。和C语言相比,C++引入了更多的特性,包括:陈述性声明,类似函数的强制转型,new/delete操作符,布林类型,参考类型,默认参数,函数重载,命名空间,类型(包括所有和类型相关的特性,如继承、成员函数、虚函数、抽象类型和构造函数),操作符重载,模板,::操作符,异常处理和运行时期识别。和普遍认为的相反,C++不是第一个正式引入const关键字的语言。80年代早期,BjarneStroustrup和DennisRetchie讨论之后提供了在C语言中readonly/writeonly的实现机制,并在带类型的C中取得了一定经验。关键字const正式引入C语言是在ANSIC89。这早于第一个C++国际标准近十年,但此时const已被C++实现普遍采用。C++在某些案例中(见下“与C不兼容之处”),进行比C还要多的类型检查。以“//起始”作为注解起源自C的前身BCPL,而后被重新引入到C++。C++的一些特性,C不久之后也采用了,包括在for循环的括号中声明,C++风格的注解(使用//符号,和inline,虽然C99定义的inline关键字与C++的定义不兼容。不过,C99也引入了不存在于C++的特性,如:可变参数宏,和以数组作为参数的较佳处理;某些C++编译器可能实现若干特性,以作为扩展,但其余部分并不符合现存的C++特性)一个常见的混淆其实只是一个微妙的术语问题:由于它的演化来自C,在C++中的术语对象和C语言一样是意味着存储器区域,而不是类的实例,在其它绝大多数的面向对象语言也是如此。举例来说,在C和C++中,语句inti;定义一个int类型的对象,这就是变量的值i将在赋值时,所存入的存储器区域。C++主要有三个编译阶段:预处理、转译成目标代码和链接(最后的两个阶段一般才视为真正的“编译”)。在第一阶段,预处理,会将预处理器指令替换成源代码,然后送到下一个编译阶段。预处理指令的运作方式是根据用户定义的规则,简单的把记号字符串行置换成其它的记号字符串行。它们进行宏置换、含入其它的文件(由底层至高级的特性,例如包含模块/包/单元/组件)、条件式编译和条件式含入。2.2.2SQLSQL全称是“结构化查询语言(StructuredQueryLanguage)”。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。目前,SQL语言已被确定为关系数据库系统的国际标准,被绝大多数商品化关系数据库系统采用,如Oracle、Sybase、DB2、Informix、SQLServer这些数据库管理系统都支持SQL语言作为查询语言。结构化查询语言SQL是一种介于关系代数与关系演算之间的语言,其功能包括查询、操纵、定义和控制四个方面,是一个通用的功能极强的关系数据库标准语言。在SQL语言中不需要告诉SQL如何访问数据库,只要告诉SQL需要数据库做什么。结构化查询语言包含6个部分:一:数据查询语言(DQL:DataQueryLanguage)其语句,也称为“数据检索语句”,用以从表中获得数据,确定数据怎样在应用程序给出。保留字SELECT是DQL(也是所有SQL)用得最多的动词,其他DQL常用的保留字有WHERE,ORDERBY,GROUPBY和HAVING。这些DQL保留字常与其他类型的SQL语句一起使用。二:数据操作语言(DML:DataManipulationLanguage)其语句包括动词INSERT,UPDATE和DELETE。它们分别用于添加,修改和删除表中的行。也称为动作查询语言。三:事务处理语言(TPL)它的语句能确保被DML语句影响的表的所有行及时得以更新。TPL语句包括BEGINTRANSACTION ,COMMIT和ROLLBACK。四:数据控制语言(DCL)它的语句通过GRANT或REVOKE获得许可,确定单个用户和用户组对数据库对象的访问。某些RDBMS可用GRANT或REVOKE控制对表单个列的访问。五:数据定义语言(DDL)其语句包括动词CREATE和DROP。在数据库中创建新表或删除表(CREATTABLE或DROPTABLE);为表加入索引等。DDL包括许多与人数据库目录中获得数据有关的保留字。它也是动作查询的一部分。六:指针控制语言(CCL)它的语句,像DECLARECURSOR ,FETCHINTO和UPDATEWHERECURRENT用于对一个或多个表单独行的操作。3系统总体设计的实现3.1系统模块结构的设计3.1.1软件模块结构的设计根据系统分析的结果,按照结构化的系统设计方法,教学事务管理系统从功能由课程管理子系统、学籍管理子系统、成绩管理子系统组成。各子系统的简要功能说明如表3-1。表3-1各子系统的简要功能概述模块名模块名功能简介班级管理维护学校的每个班级的基本信息,包括班级名、班级号、专业、辅导员等相关信息。学籍管理完成对学生的学籍管理,包括学籍录入、学籍修改、学籍查询等相关功能。成绩管理管理每个学生所修课程的成绩,包括成绩录入、成绩修改、成绩查询、成绩修改等相关功能。教师信息管理每个老师的基本信息,包括老师基本信息录入、修改、查询等相关功能。系统管理功能包括系统的一些基本功能,如修改密码、查询用户基本信息、重新登陆等。3.1.2软件模块总体处理流程根据各个子系统的功能划分,画出本软件的顶层数据流图,如图3-1所示。用户在登陆界面登陆中输入所需的登陆信息后需要在程序的后台进行用户身份的验证,当这些验证都通过后才可以由用户去操作相应的功能,主要有学生管理、教师管理、成绩管理、班级管理和系统管理。在这些管理模块中需要设计到数据库的交互的操作,需要进行数据的操作后将输出结果更新数据库文件,如果需要的话,操作结果也会在用户操作界面中进行展示。图图3-1顶层数据流程本软件的二层数据流图如图3-2所示,在这个数据流图中详细的描述了程序中数据的处理流程,从得到数据到数据的处理以及数据的输出都做了详细的描述。用户登录用户验证用户名密码错误信息数据库文件判断用户类别数据库操作学生管理系统管理班级管理成绩管理教师管理教师资料管理学生资料管理系统资料管理添加,删除添加,删除添加,删除班级资料管理学生成绩查询教师表教师信息单学生信息表学生信息单系统信息表系统信息班级信息表成绩信息表班级信息成绩信息学号添加删除图3-2二层数据流程图3.1.3功能分配本系统中各功能需求与程序模块(组件)之间的关系如下表3-2所示。表3-2功能需求与程序模块关系表功能需求功能需求课程管理系统管理教师信息查询教师添加教师修改教师删除学生信息查询学生添加学生修改学生删除成绩录入成绩修改成绩删除成绩信息查询班级信息查询班级录入班级删除班级修改用户信息修改密码重新登陆如表3-2所示,使用表的形式将各个管理模块的功能进行了描述,通过这个表可以快速直观的了解各个管理模块的功能,不同的模块对应着不同的功能,有些功能模块在其它的管理模块中可以借用,只需要将这个模块的实现函数进行封装,并且向外部模块提供一个接口,外部模块通过这个接口来调用这个功能来实现另外的功能。3.2系统功能总体设计根据对系统的分析,将系统的功能机构图再次细分,得到如下结构,如图3-3所示。教务管理系统教务管理系统管理员管理学生信息管理通用功能模块教师信息管理查看学籍信息查看成绩信息查看班级信息教师信息操作赏罚管理学生信息操作添加用户教师相关信息查询班级信息查询学生相关信息查询学生成绩信息操作查看帮助信息修改当前用户密码学生信息查询学生信息修改学生信息删除学生信息增加教师信息查询教师信息修改教师信息删除教师信息增加学生成绩信息查询学生成绩信息修改学生成绩信息删除学生成绩信息增加图3-3系统的总体功能图在这个教务管理系统中,主要分为了四大模块,分别是学生管理模块、教师管理模块、管理员管理模块以及通用模块。在通用模块中是一些所有用户都有的操作,在后面代码的具体实现中为了布局的美观这个通用模块中的功能会分散开来安排;其余的三个模块都是对信息的一些处理,但他们最大的区别在于有严格的操作权限控制,不同的用户不能对信息的处理越级,这样会有很大的安全隐患。学生的功能主要集中在查看,查看成绩、查看学籍、查看班级等一些普通的操作,教师的主要任务是对学生成绩的操作,这类用户对学生的成绩有最大的权限。管理员用户拥有学生与老师的全部权限,但管理员用户最大的功能是管理用户,即管理员来控制可以什么样的人登录到系统中来,这样管理员就可以通过修改用户的登录信息或者是删除登录信息来控制系统的使用权的归属问题,这样的设计对与系统的安全性有积极的作用。此外,系统的设计还要考虑数据库的问题,设计一个安全可靠的数据库是非常有必要的。此外,作为一个教务管理系统,奖惩模块是必须的。在这个系统中,奖惩模块只有管理员可以操作,其它用户是没法进行管理的,其它用户可以进行查询这些奖惩,包括奖学金、助学金、以及其它的一些奖励;也可以将对学校的惩罚写入系统中,如作弊、打架、以及其它的一些违法学校规章制度的行为。3.3系统的总体界面设计介绍如图3-4所示是系统的总体初步界面。图3-4图3-4系统的总体初步界面控件,这个控件提供用户登录类型的选择,分别有管理员、学生、教师。在界面上会有来个Qlabel标签来提示用户输入用户名与密码,代码部分会获得它们的text(),通过与数据库中的记录相比对来判断用户是否有权限来登录系统。此外还有确认登录与取消登录的QpushButton按钮。在代码的实现部分会给这俩个按钮注册槽函数来响应它们的点击事件clicked()。根据不同的用户提供不同的界面,但是在操作的主界面中界面的总体设计是一样的,或者是说不同的用户是通过对控件的可用与否来达到权限的控制,但控件在不同的界面中会有相同的位置。将不同属性的控件放在不同的QWidget中,这样在布局中是很好操作的,也是很方便的。不同的用户类型type对应着不同的操作界面,管理员的登录会给提供最全面的操作,包括一组管理员特有的按钮QPushButton,包括对用户的管理与老师、学生信息的增加、修改、删除等,在这些操作中都会操作到数据库文件,所以数据库文件的安全设计是非常至关重要的。此外在程序的主界面的左下角会有一个QtoolBox控件,通过这个控件可以达到功能集中化的效果,QToolBox可以容纳不同的控件,这里我添加的是QlistWidget,这是为了让QlistWidget的不同选择条目对于与界面右下角部分的QStackWidget的不同界面,这样就达到了不同的条目对于与不同的功能操作界面,也回避了弹出式的界面操作,那样的界面容易造成操作紊乱。程序界面的右下角我设计的是在一个QWidget的加入一个QStackWidget控件,然后用QStackWidget的页面数对应于我左下角的QToolBox控件的条目数,这样就可以利用这俩个控件的currentRowChanged(int)事件与相应setCurrentIndex(int)槽函数来达到界面功能的跳转。在QstackWidget的每个界面中可以继续添加QstackWdiget控件,这样又可以对应于左边中QToolBox控件的子界面中添加的QlistWidget的条目数,使得功能再加以细化,界面的功能设计也更加的完善与合理。如果是学生与老师登录到系统,代码部分的设计会使得这俩类的用户无法使用左下角的控件,这时,在程序界面的中间部分会给用户提供相应的操作按钮。这样的设计不仅会使得程序的安全性得到保障,也会使得系统用户的功能得到完整的体现。但是学生与老师的操作权限还是有所区别,所以可以用QpushButton的enable()函数来设置按钮是否可用,如果登录到系统的用户没有使用该控件功能的权限,这时可以将QpushButton的enable()参数值设置为false,这样就保障了权限的不外露。在此系统中,管理员有俩个独特的功能,管理用户与奖赏功能模块。在这俩个模块实现中,将所有的功能集中化处理,使用QsqlTableModel的对象的特性,将它与Qtableview绑定到一起,在Qtableview中将信息进行直观的操作,然后点击下方的QpushButton来实现数据的操作,这样的设计可以方便、直观的进行操作,并且将功能集中起来操作简单。在功能区域中左边是一个类似与QQ分类的设计,这样的设计是将功能集中化并且可以节省空间,在系统功能区的上半部分是一排按钮,这些按钮提供的一些常用的功能,并且这些按钮是与其它系统用户所共同拥有的。将他们分离出来一方面是为了方便操作;另一方面也可以比较方便的进行操作限制,通过设置这些按钮是否能用来区别系统的其它用户,这点会在接下来的图片中所展示。系统中将会使用背景色与背景图片来使系统达到美观的目的,并且控制控件的大小以及控件的扩展策略,这样可以防止窗口的大小变化的时候图片的没规律的扩展。在文本框中需要输入内容的时候需要控制输入的内容,在这个系统中,我设计的是只能输入数字,并且是10位的数字,这样可以减少后期数据的处理与数据库中数据的紊乱。此外,在系统界面的整体布局中要特别注意对布局管理器的使用,将控件加到容器中,再对容器界面设计布局管理器,最后设计整体容器的布局管理器,尽最大的努力来使得界面达到整洁美观的效果。在界面出现后有的时候需要改变界面的大小,这种就需要在界面的控件上设置控件的扩展策略,保证界面中的控件能够正常的显示,并且在缩放界面的时候界面中的控件保持它们的相对位置不变。3.4数据库的设计数据库设计是构建一个系统的关键。这是因为数据库设计的优劣将直接影响系统数据的安全性、可靠性。在数据库设计过程中,需要遵循的一般原则是:数据库各表的设计要反应现实中的事物。数据表中的字段类型和大小要符合使用习惯。较少数据库的荣誉和数据的不一致性。书库应用的一个特点是对数据库的频繁操作,每次操作可能只会设计一个表,也可以同时设计多个表,也有可能对一个数据表进行多个操作,在这种情况下,由于数据冗余和数据不一致时,可能会引起错误。要有助于提高数据处理速度。程序访问数据库的速度依赖于硬件的速度,数据量的大小和数据表设计的优劣,而前两个因素是很难更改的。要包成数据库的安全。安全性是数据库应用软件的重要要求。本教务管理系统涉及的实体包括:用户:用户类型、用户名、密码。学生:学号、姓名、性别、年龄、班级、联系电话、家庭住址、备注。教师:职工号、姓名、性别、年龄、职称、联系电话。班级:班级id、班级名、年级、学制、专业、班主任、备注。成绩单:课程编号、学号、学年、学期、分数。奖惩信息:学号、奖惩名、奖惩内容。3.5数据库表的实体图概念结构设计是将需求分析得到的用户需求抽象为信息结构的过程。它是整个数据库设计的关键。为了把问题清楚的表达出来,通常要建立一个概念性的数据模型。概念性的数据模型是面向问题的数据模型。最常用的表示概念性数据模型的方法是实体-联系方法。这种方法用实体图描述现实世界中的实体,而不涉及这些实体在系统中的实现方法。用这种方法表示的概念性数据模型又称为实体模型。实体模型中包含“实体”,“联系”和“属性”。描述各个实体的实体图如下所示。图3-5用户实体图如图3-5所示是用户的实体图,实体用户的属性有用户类型type、用户名id以及密码passwd。图3-6学生信息实体图如图3-6所示是学生的实体图,实体学生的属性有学号id、姓名name、性别sex、年龄age、班级classname、联系电话telnum、家庭住址address和备注remark。图3-7教师信息实体图如图3-7所示是教师的实体图,实体教师的属性有职工号id、姓名teachname、性别teachsex、年龄teachage、职称teachjob以及联系电话teachtelnum。图3-8班级信息实体图如图3-8所示是班级的实体图,实体班级的属性有班级号id、班级名classname、年级grade、学制schoolsystem、专业major、班主任boss、备注remark。图3-9奖罚信息的实体图如图3-9所示是惩罚信息的实体图,实体奖惩信息的属性有学号id、奖惩类型type、奖惩内容content。图3-10成绩信息的实体图如图3-10所示是学生成绩单的实体图,实体学生成绩单的属性有学生学号id、课程编号Sid、学年schoolyear、学期term、分数score。对于这些数据库表中的属性,根据它们的实际情况在实现数据库表的时候实现每个表的属性,并且在表中设置它们接收数据的条件,使存入数据库中的数据更加合理化。图3-10中所示的学生成绩单的实体图在实现的时候根据实际情况将课程编号与学号设置为这个表的复合主键,防止出现了学生成绩错误的情况。所以,在实际的开发过程中需要建立名为manage.db的数据库,然后在这个数据库中加入这五张表,信息从这些数据表中取出,然后经过程序使用再写入数据库中。由于使用的是SQLite数据库,可以使用可视化界面来查看数据库中的信息是否正确的设置。3.6系统数据出错处理设计3.6.1系统的出错信息以及处理方法如表3-3所示,系统的出错信息以及处理方法一览表。 表3-3系统的出错信息以及处理方法出错名出错名称系统输出信息处理方法用户名输入错误“登陆信息有误”进入登录页面前三次密码错误“登陆信息有误”进入登录页面密码错数次数超过三次“信息有误,请您确认信息后登陆”进入默认登录页,并半小时内禁止该用户进行登录。输入数据格式错误禁止用户输入不允许为空的输入框输入空字符弹回原输入页面的输入处在表3-3中描述了一些系统中需要处理的一些出错信息,系统中有各种各样的不同错误信息,系统需要有相应的错误处理方法,如果用户在使用系统的时候出现了错误,系统可以提供相应的错误提示或者系统自动的进行错误处理。3.6.2补救措施由于数据在数据库中已经有备份,故在系统出错后可以依靠数据库的恢复功能,并且依靠日志文件使系统再启动,就算系统崩溃用户数据也不会丢失或遭到破坏。但有可能占用更多的数据存储空间,权衡措施由用户来决定。3.6.3安全保密设计数据库安全保密就是保证数据库中数据的保密性、正确性。即保护数据库中的数据不被非法用户获取,不因为操作员失误或者软硬件故障导致数据错误。当前,数据库受到的主要威胁有:对数据库的不正确访问,引起数据库数据的错误;为了某种目的,故意破坏数据库,使其不能恢复;非法访问数据库信息;用户通过网络进行数据库访问时,有可能受到种技术的攻击;未经授权非法修改数据库数据,使其失去正确性;硬件毁坏、自然灾害、磁干扰等。本系统用户管理保证了只有授权的用户才能进入系统进行数据操作,而且对一些重要数据,系统设置为只有更高权限的人员方可读取或是操作。系统安全保密性较高。武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学4详细设计4.1系统的主程序intmain(intargc,char*argv[]){QApplicationa(argc,argv);QFontfont("Times",15,QFont::Bold);a.setFont(font);//添加一下四行代码用来解决中文显示乱码的问题QTextCodec*codec=QTextCodec::codecForName("GB2312");QTextCodec::setCodecForLocale(codec);QTextCodec::setCodecForCStrings(codec);QTextCodec::setCodecForTr(codec);RegActionw;//不需要w.show();否则会生成一个空白的界面。returna.exec();}这是系统的主函数,系统所有的运行都是从这个函数开始,所以在这个函数中的设置都是全局的,将会影响到整个系统的设置。所以对于一些在整个系统中都需要进行设计的参数一般都会在这里进行设计。系统在运行时会有系统默认的字体,如果需要可以在这个函数中进行设置,这样可以使系统看起来更加美观;此外,系统在运行时由于语言环境的不同或者文化的差异,这将导致系统的字体在显示时与设计的初衷不一样,所以在这个主函数中进行设置,这样就不会出现显示乱码的情况。4.2程序初始化界面的实现界面的初始化是通过QtCreator来拖拽来实现的,再加上后期代码中对界面的修饰,这样就成了最后的效果图。this->setWindowFlags(Qt::Dialog|Qt::WindowMinimizeButtonHint);this->setAutoFillBackground(true);QPalettepalette;QPixmappixmap(":/D:/5.jpg");palette.setBrush(QPalette::Window,QBrush(pixmap));this->setPalette(palette);对setWindowFlags()函数参数的设置来控制界面中大小的设置,屏蔽还原按钮,这样的设计对于只提供登录的窗口来说是比较好的,其次可以通过控制QPalette的属性来设置窗口的背景图片,但前提是界面的自动填充得设置为真,否则设置不会生效。在使用图片的时候需要注意将图片做成资源文件,这样就可以很好的进行移植,当系统在其它电脑上运行的时候也可以显示出图片。信号与槽函数:connect(ui->quit_btm,SIGNAL(clicked()),this,SLOT(close()));退出按钮的clicked()信号与本界面的close()函数相结合来达到窗口的退出功能。connect(this->loginwidget->ui->log_btm,SIGNAL(clicked()),this,SLOT(log_fun()));新建一个类,在这个类中的公有部分设置一个登录窗口的对象,这样可以通过这个对象来操作登录类中的控件,这样的设计符合逻辑结构的分层,避免太多的数据堆积到一起造成数据操作时紊乱。在这个教务系统中,有大量的点击信号与槽函数,对于发出这些信号的控件都有自己独特的名字,然后根据它们的名字进行函数的命名,并且在编程中信号与槽函数的连接都有相应的注释。信号和槽机制是QT的主流核心技术,在程序运行的时候,有的信号槽就没有指到恰当的地方,所以导致的结果就是在点击按键的时候没有出现预期的结果,所以每一个都有对应的信号和槽,代码量比较多,在编写的时候稍微不小心就会导致connect()函数的实效,所以一定要小心每个按键在编写时要保证它的有效。图4-1登录流程图如图4-1所示的流程图所示,登录按钮的槽函数log_fun()负责采集登录窗口的数据,并且对数据进行判断,对于不正确的登录信息予以拒绝访问。这时就要与数据库中的表进行交互,本程序使用的Sqlite数据库,并且调用QT中封装的数据库的操作来完成与数据库的数据交流。voidRegAction::log_fun(){QStringtype=this->loginwidget->ui->type_combobox->currentText();QStringname_string=this->loginwidget->ui->name_LineTxt->text();QStringpasswd=this->loginwidget->ui->passwd_LineTxt->text();if(!sql.connectionDB()){QMessageBox::warning(this,"fail","数据库打开失败!");}if(this->loginwidget->ui->type_combobox->currentIndex()==0||this->loginwidget->ui->name_LineTxt->text().isEmpty()||this->loginwidget->ui->passwd_LineTxt->text().isEmpty()){QMessageBox::warning(this,"fail","登录信息有误");}else{if(!sql.selectuser(type,name_string,passwd))QMessageBox::warning(this,"fail","登录失败");else{sql.db.close();QStringtype=this->loginwidget->ui->type_combobox->currentText();intid=this->loginwidget->ui->name_LineTxt->text().toInt();QSqlTableModel*model=sql.queryuserinfo(id,type);this->mainface->ui->usertable->setModel(model);this->mainface->show();if(pare("学生")==0){this->mainface->ui->left_widget->setEnabled(false);this->mainface->ui->queryAllClass->setEnabled(false);this->mainface->ui->queryAllRecord->setEnabled(false);this->mainface->ui->queryAllScore->setEnabled(false);this->mainface->ui->updscore_btm->setEnabled(false);this->mainface->ui->addscore_btm_2->setEnabled(false);this->mainface->ui->delscore_btm->setEnabled(false);this->mainface->ui->managuser_btm->setEnabled(false);mainface->show();}elseif(pare("管理员")==0){this->mainface->ui->left_widget->setEnabled(true);this->mainface->ui->queryAllClass->setEnabled(true);this->mainface->ui->queryAllRecord->setEnabled(true);this->mainface->ui->queryAllScore->setEnabled(true);this->mainface->ui->updscore_btm->setEnabled(true);this->mainface->ui->addscore_btm_2->setEnabled(true);this->mainface->ui->delscore_btm->setEnabled(true);this->mainface->ui->managuser_btm->setEnabled(true);mainface->show();}elseif(pare("教师")==0){this->mainface->ui->left_widget->setEnabled(false);this->mainface->ui->queryAllClass->setEnabled(true);this->mainface->ui->queryAllRecord->setEnabled(true);this->mainface->ui->queryAllScore->setEnabled(true);this->mainface->ui->updscore_btm->setEnabled(true);武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学武汉理工大学this->mainface->ui->addscore_btm_2->setEnabled(true);this->mainface->ui->delscore_btm->setEnabled(true);this->mainface->ui->managuser_btm->setEnabled(false);mainface->show();}}}}由以上代码可以看出,不同的登录对象对应于不同的操作界面的设置是在页面的显示时动态生成的,在界面重新登录时可以保证提供给用户正确的界面。系统先获得在登录界面中Qlineedit中的数据,然后将这些用户信息跟数据库中存放的用户信息相比对,并且使用if嵌套来判断不同的情况。对于信息错误的信息,系统会弹出一个QMessageBox来提示用户输入有误,并且用户可以重新输入;对于正确的信息,系统将对信息做出判断,根据不同的用户来配置不同的用户界面,即通过将一些控件禁用来实现。QRegExpregExp("[0-9]{1,10}");QRegExpValidator*pRegExpValidator=newQRegExpValidator(regExp,this);ui->name_LineTxt->setValidator(pRegExpValidator);ui->passwd_LineTxt->setEchoMode(QLineEdit::Password);在登录界面中需要输入用户名以及密码,出于安全的考虑,在输入用户名的文本框中设置了输入限制,根据正则表达式的规范,在这个文本框中将无法输入数字之外的其它字符,并且有字数限制,此处根据我的实际情况设置成了最多十位的输入。而且密码框的输入字符会显示为小黑点,这样就可以避免密码在无意之间泄漏。4.3数据库的操作上面的代码中涉及到了数据库的操作,对于数据库的操作,可以新建一个封装数据库操作的类,在这个类中完成对数据库的交互部分。一般数据库链接有五大步骤,分别是:1.加载(注册)数据库2.建立链接3.执行SQL语句4.处理结果5.关闭数据库boolsql_reg::connectionDB(){db=QSqlDatabase::addDatabase("QSQLITE");db.setDatabaseName("manager.db");if(db.open()){qDebug()<<"数据库打开成功";returntrue;}else{qDebug()<<"数据库打开失败";db.lastError();qDebug()<<"****************";returnfalse;}}这是一个连接数据库的函数。对于要执行数据操作的程序来说,所有的操作都是基于数据库的连接成功,所以将数据库的连接部分单独分为一个函数,并且在这个函数中添加了一些输出语句;如果出错,可以通过db.lastError()来提供出错的信息,并且可以通过使用qdebug来定外错误的位置,这样可以给程序员的检错提供帮助,使程序员快速的发现错误以至解决错误。boolsql_reg::selectuser(QStringtype,QStringid,QStringpasswd){bool*ok;id.toInt(ok,10);QSqlQueryquery;query.exec(QString("select*fromuserwheretype='%1'andid=%2andpasswd='%3'").arg(type).arg(id).arg(passwd));//qDebug()<<QString("select*fromuserwheretype='%1'andid=%2andpasswd='%3'").arg(type).arg(id).arg(passwd);if(!query.next()){qDebug()<<"none";qDebug()<<"selectusererror";qDebug()<<query.lastError();qDebug()<<"************";returnfalse;}else{qDebug()<<query.value(0).toInt()<<query.value(1).toString();returntrue;}} 查询用户,这是点击登录按钮后的槽函数要调用的函数,将用户在登录界面提供的信息传参到这个函数,这个函数负责将传入的信息与数据库中的信息进行比对,并且返回比对结果;如果比对结果发现数据正确,返回true,否则返回false,程序根据函数的不同返回结果来选择不同的程序流程走向。//查询用户信息QSqlTableModel*sql_reg::queryuserinfo(intid,QStringtype){QSqlTableModel*model=newQSqlTableModel;model->setTable("user");model->setEditStrategy(QSqlTableModel::OnManualSubmit);//添加过滤器model->setFilter(QObject::tr("id=%1andtype='%2'").arg(id).arg(type));model->select();//选取整个表的所有行model->lastError();//ui->tableView->setModel(model);returnmodel;} 这个函数查询用户在数据库中的信息,程序根据函数返回结果QsqlTab

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论