




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 PAGE27 / NUMPAGES32 本科生毕业设计报告 课 题: 基于java的在线考试系统 作 者: 专 业: 班 级: 指导教师: 2012 年 04 月 02 日摘 要在线考试系统与传统考试相比,可以实现考务工作的全自动化管理,并有效地利用校园网的软硬件资源,实现考试的客观性和公证性;自动化组卷、阅卷、判分的流程更是大大的减轻教师的工作强度。在线考试系统旨在实现考试的无纸化管理,基于计算机和网络技术进行在线考试系统的使用,方便校方对考试的管理。本程序是基于eclipse的在线考试系统,利用MVC架构编写,将功能分为3个模块,分别是视图,模型和控制器。将数据分为3个层次,分别为UI层
2、,业务层,实体数据层,各层之间模块独立化,便于数据管理,易于系统维护关键词: Eclipse,MVC架构,Java语言,三层结构。AbstractCompared with the traditional test, online examination can realize the automation management work of the thesis, and effective use of the software and hardware of the campus network resources, realizing the objectivity of the e
3、xam and real; Automation group rolls, scoring, the process is the scores were greatly reduce teachers working strength. On-line examination system designed to achieve examination of the paperless management, based on the computer and network technology online examination system use, convenient to sc
4、hool examination management.The program is based on the eclipse of the online examination system, with the MVC framework to write, will function is divided into three modules, respectively is the view, model and the controller. Data is divided into three levels, respectively UI layer, business layer
5、, the entity data layer, between each layer DuLiHua module, facilitate data management, and is easy to maintain the system.Keywords: Eclipse, MVC framework, Java language,the Three-tier Structure目 录 TOC o 1-4 h z u HYPERLINK l _Toc1374533421.序言 PAGEREF _Toc137453342 h 1HYPERLINK l _Toc1374533431.1 系
6、统描述 PAGEREF _Toc137453343 h 1HYPERLINK l _Toc1374533441.2 结构框图1HYPERLINK l _Toc1374533452.所用开发工具简介2HYPERLINK l _Toc1374533462.1Eclipse简介2HYPERLINK l _Toc1374533472.2 Java 简介2HYPERLINK l _Toc1374533482.3 Java语言在Eclipse中的应用3HYPERLINK l _Toc1374533493.系统总体设计4HYPERLINK l _Toc1374533503.1系统需求分析4HYPERLINK
7、 l _Toc1374533513.2系统概要设计4HYPERLINK l _Toc1374533523.2.1 系统结构设计4HYPERLINK l _Toc1374533533.2.2 Swing设计5HYPERLINK l _Toc1374533543.3 系统详细设计5HYPERLINK l _Toc1374533533.3.1MVC架构5HYPERLINK l _Toc1374533533.3.2对象依赖注入(IOC)6HYPERLINK l _Toc1374533533.3.3简单工厂方法6HYPERLINK l _Toc1374533554.系统应用程序设计8HYPERLINK
8、l _Toc1374533564.1 用户层界面的实现8HYPERLINK l _Toc1374533574.1.1 布局的实现9HYPERLINK l _Toc1374533584.1.2 welcomeWindow的实现9HYPERLINK l _Toc1374533594.1.3 loginFrame的实现10HYPERLINK l _Toc1374533604.1.4 menuFrom的实现 PAGEREF _Toc137453360 h 19HYPERLINK l _Toc1374533614.1.5 examFrame的实现 PAGEREF _Toc137453361 h 21HY
9、PERLINK l _Toc1374533624.1.6 clientContext的实现 PAGEREF _Toc137453362 h 22HYPERLINK l _Toc1374533644.2 业务层界面的实现 PAGEREF _Toc137453364 h 23HYPERLINK l _Toc1374533654.2.1 ExamService的实现 PAGEREF _Toc137453365 h 23HYPERLINK l _Toc1374533664.2.2 用户登录的实现 PAGEREF _Toc137453366 h 24HYPERLINK l _Toc1374533674.
10、2.3 开始考试的实现 PAGEREF _Toc137453367 h 25HYPERLINK l _Toc1374533684.2.4 获得考卷的实现HYPERLINK l _To4.2.5 保存用户答案的实现274.2.6 判分的实现27HYPERLINK l _Toc1374533694.3 数据层的实现27HYPERLINK l _Toc1374533604.3.1线性表HashMap27HYPERLINK l _Toc1374533604.3.2Users集合的实现27HYPERLINK l _Toc1374533614.3.3Questions集合的实现2
11、8HYPERLINK l _Toc137453370致29HYPERLINK l _Toc137453370参考文献 PAGEREF _Toc137453370 h 301. 序言1.1 系统描述在线考试系统主要是学生通过客户机登陆自己的账号,然后完成课程科目的考试,提交,判分的过程。系统主要分成两个部分,分别是服务器端和客户端,两者通过线程的连接来完成考试的各项功能。在服务器端,服务器先启动,读取配置文件,然后将试卷和学生的信息,包括学号,密码,读取到服务器中。这些信息的读取,会被封装在其他的类中,等待客户端发送数据连接请求,一旦发现有请求,就创建一个服务线程与之保持连接,等待考试完成的数据
12、请求发送过来,再断开连接。过程中服务器是一直处于监听客户端请求连接的运行状态。客户端部分,为了方便操作,应用到图形界面swing的技术,这里一共有三个部分的界面,第一个就是学生登录的界面,学生要输入学号和密码登录服务器;其次是学生选择考试科目的界面,要注意先将前面一个窗口销毁,然后再创建新的窗口;最后是学生考试界面的窗口,功能较多,设计也稍显复杂。最后用户点击交卷完成考试过程,并且显示得分,最后关闭窗口,服务器同时要断开连接,线程结束。1.2 结构框图图12. 所用开发工具简介2.1 Eclipse简介Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一
13、个框架和一组服务,用于通过HYPERLINK :/baike.baidu /view/18979.htm插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以与给用户提供一致和统一的集成开发环境
14、而言,所有工具开发人员都具有同等的发挥场所。 2.2 JAVA简介 Java是一种简单的,跨平台的,HYPERLINK :/baike.baidu /view/125370.htm面向对象的,分布式的,解释的,健壮的安全的,结构的中立的,可移植的,性能很优异的多线程的,动态的语言。当1995年SUN推出Java语言之后,全世界的目光都被这个神奇的语言所吸引。Java 编程语言的风格十分接近HYPERLINK :/baike.baidu /view/10075.htmC、HYPERLINK :/baike.baidu /view/824.htmC+语 言。Java是一个纯的面向对象的程序设计语言
15、,它继承了 C+ 语言面向对象技术的核心,多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的存空间,使得程序员不用再为存管理而担忧。Java具有以下鲜明特点:平台无关性平台无关性是指Java能运行于不同的平台。Java引进虚拟机 原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界围共享。 2.安全性Java对程序提供了安全管理器,防止程序的非法访问。 面向对象 Java吸取了C+面向对象的概念,将HYPERLINK :/baike.baidu /view/262940.htm数据封装于 类中,利用类的优点,实现了程序的简洁性和便
16、于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员 只需把主要精力用在类和接口的设计和应用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。分布式Java建立在扩展HYPERLINK :/baike.baidu /view/7729.htmTCP/IP网络平台上。HYPERLINK :/baike.baidu /view/905012.htm库函数提供了用HYPERLINK :/baike.baidu /view/9472.htm和HYPERLINK :/baike.baidu /view/369.htmFTP协议传送和接受信
17、息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。 健壮性Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。HYPERLINK :/baike.baidu /view/29.htmJava自己操纵存减少了存出错的可能性。Java还实现了真HYPERLINK :/baike.baidu /view/209670.htm数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期。并且Java还提供了Null指针检测、数组边界检测、异常出口、Byte code校验等功能。 6.动态 java程序的基本组成单元就是类,有些类是自己编写的
18、,有些是从类库中引入的,而类又是运行 时动态装载的,这就使得Java可以在分部环境中动态的维护程序与分类,而不像C+那样,没档期类库升级以后,如果想让程序具有新类库提供的功能,就需 要修改程序,重新编译。2.3 Java语言在Eclipse中的应用 Eclipse是Java语言的开发工具,通过Eclipse工具可以实现Java面向对象的思想,Java中的接口用于实际编程中,定义一定的接口,并用Java实现类来实现特定的接口。 具体步骤:1、安装JDK,并在高级设置里面配置环境变量,打开Eclipse开发工具, 并在Eclipse里面讲安装好的JDK配置进去。 2、在Eclipse中新建一个Ja
19、va Project,在src目录下新建包。(注意:包名一定要有意义。)在包里面新建类,同样的,类名声明也要有意义。3、调试的时候要在main里面调试。3. 系统总体设计3.1 系统需求分析在传统的学校教学中,进行一场考试,要求老师刻试卷、印试卷、安排考试、监考、收集试卷、评改试卷、讲评试卷和分析试卷,这是一个繁杂的过程,需要大量人力、物力与时间的投入,已经越来越不适应学校信息化建设与现代教学的需要。因此,开发基于eclipse的在线考试系统。3.2 系统概要设计3.2.1 系统结构设计三层架构(整体架构)DataLayer-BisnussLayer-ViewLayer数据访问层-业务逻辑层界
20、面层,三层架构,是当今软件开发的一种流行架构,有点:使得数据与业务逻辑的分离,业务逻辑与用户界面的分离,但是三者相互依赖,用户界面层依赖业务逻辑层依赖数据访问层。 1) 表现层(数据呈现/用户交互)在ui包中 的 用户界面和控制器(ClientContext) 如:当点loginFrame的login按钮时,就会触发clientContext.login()方法,控制器就会处理由用户界面发来的请求。控制器会去业务层处理由用户界面发来的数据。 2) 业务层(业务模型),是软件的核心功能在service包中, 核心接口ExamService 如: 登录系统,开始系统。业务层是在线考试系统的核心功能
21、,它主要是为了处理控制器传来数据。比如说登录功能,先要由控制器从用户界面的得到用户输入的id和password。然后就会调用ExamService的login方法。因为ExamService是接口,必须要有具体实现类来实现它,所以就定义了ExamServiceImpl来具体实现ExamService中的方法。而业务层的id和password是通过实体数据层得到的。3) 数据管理层(数据持久化层),是提供数据的CRUD管理,增删改查数据管理层:只关心数据操作,不涉与业务功能 如: 查找用户。当业务层想实体数据层发送请求时,实体数据层就会寻找特定的id和password,若找到相应的id和pass
22、word就将结果返回给业务层,业务层再将结果返回给用户界面。在entity包中, 核心类:EntityContext, 管理Users 和 Questions。 图.2 系统层次图3.2.2 Swing设计1)AWT使java成功的技术:Applet AWT 具有强大的绘图功能 AWT 的应用控件很少(按钮, 菜单) AWT 时候开发图形,不适合开发应用 2) Swing 是利用AWT绘图功能, 完整的重新绘制了一套控件系统 包括:表格,Tree,等 JFrame 代表有框的窗口,中必须放置一个面板 JPanel 代表空白矩形区域面板, 在面板上可以添加控件/绘制图形3.3 系统详细设计3.3
23、.1 MVC设计模式MVC是三个单词的缩写,分别为:模型(Module),HYPERLINK :/baike.baidu /view/71981.htm视图(View) 和控制Controller)。 MVC模式的目的就是实现Web系统的职能分工。 Model层实现系统中的业务逻辑。 View层用于与用户的交互,通常用JSP来实现。 Controller层是Model与View之间沟通的桥梁,它可以分派用户的请求并选择恰当的视图以用于显示。Model-View-Control模型-视图-控制器。MVC的优点:低耦合性 2)高重用性和可适用性 3)较低的生命周期成本 4)可维护性分离使得界面设计
24、和业务逻辑分离。说的更通俗点就是,将前台设计和后台编码分离,便于美工和代码工的合作,已达到更能完善,用户体验好的软件设计。 1) Module 业务模型:软件核心功能的抽象,封装软件核心功能。 如:注册,登录,开始考试,交卷。 2) View 视图 (表现): 软件的界面视图, 用来呈现用户数据状态, 接受用户请求, 界面中只包含界面显示处理逻辑。 3) Controller(控制器):耦合界面与业务模型,响应处理用户请求, 将用户数据和请求转发给业务模型,根据业务模型的处理结果更新 转发视图界面。 4) MVC 请求流程:用户访问View,发起请求,请求由控制器处理, 控制器请求业务模型完成
25、业务处理,控制器根据业务处理结果更新用户 界面。3.3.2 对象依赖注入(IOC)依赖注入(IOC)这里注入的是loginFrame具体实例(汽油) 相当于汽车和汽油。创建控制器类ClientContext类,中添加界面对象引用和注入方法。 达到控制器能够操作这些对象的目的 ,以防空指针异常的出现。用户界面创建对控制器的引用 。 如: private ClientContext clientContext; public void setClientContext(ClientContext context) this.clientContext = context; 在控制器引用创建的界面对
26、象。public void setLoginFrame(LoginFrame loginFrame)this.loginFrame=loginFrame; 3.3.3 简单工厂模式简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。工厂类是整个模式的关键,包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建与如何组织的。明确了各自的职责和权利,有利于整个HYPERLINK :/baike.baidu /view
27、/1317046.htm软件体系结构的优化。 其实,简单工厂的核心思想就是并不在方法体实现特定的方法,而是在方法外部实现了特定定义的方法,所以如果在调用该方法的时候,简单工厂就会实现方法。就是我给你一个方法名,你直接返回给我结果,我并不在这个方法考虑结果是怎么来的。总之,简单工厂方法就是用来封装复杂的对象创建过程, 提供简单的方法界面。4. 系统应用程序设计4.1 系统各窗体模块组成与实现4.1.1 布局的实现 A 空布局 (绝对位置布局) 绝对布局管理, 是指定位置和宽高的布局 JFrame (w:574, H:390) |- JPanel (W:568, H:357) |- utton O
28、K (x:369 ,y:327 , w:92 ,H:21 ) |- utton Cancel (x:466 ,y:327 , w:92 ,H:21 ) B 布局管理器(相对位置布局,组件的大小和位置有布局管理器控制)1) BorderLayout (边框布局) 将一个面板,分为东南西北中,每个位置只能放一个控件2)FlowLayout (流布局) JPanel 的默认布局是FlowLayout,多个元素顺序排序,一行满了,再接着排下一行。 | OKOKOKOKOKOK | | OKOKOK | | | 3)GridLayout (表格布局)指定行数、列数、元素按照等宽的行列表格进行布局,Swi
29、ng界面是一层套一层实现的,先把要嵌入的元素声明出来,比如说JFrame(框架),utton(按钮)。BorderLayout是实现布局管理器,JFrame frame =new JFrame(布局实现);JPanel content=new JPanel(new BorderLayout();JPanel bottom=new JPanel(new BorderLayout();JPanel btnPanel=new JPanel(new FlowLayout();utton ok=new utton(OK);utton cancel=new utton(Cancel);btnPanel.a
30、dd(ok);btnPanel.add(cancel);bottom.add(BorderLayout.WEST,btnPanel);content.add(BorderLayout.SOUTH,bottom);frame.setContentPane(content);frame.setSize(300,500);frame.setVisible(true);4.1.2 包中资源的加载: Class 实例获得: a. String.class b. str.getClass() c. Class.forName(java.lang.String) 1) 获得类的Class实例 2) 利用Cl
31、ass实例的方法 getResource() 方法获得资源 的URL, 可以进一步打开流。 如: 类 MenuFrame.class 的同包中有图片title.png URL url = getClass().getResourse(title.png) URL url = MenuFrame.class.getResourse(title.png) 其中title.png 表示相对路径访问, title.png和Class 在同一个包下, 如果参数以/ 表示绝对路径,访问其中/ CLASSPATH的根,如:/tarena/elts/gui/title.png 3) 打开图片 ImageIco
32、n ico = new ImageIcon(url); 4) 可以利用InputStream in = url.openStream(); 打开为流 5) 从package(classpath 上)中 打开文本文件 new BufferedReader(new InputStreamReader( getClass().getReaource(test.txt).openStream() 4.1.3 loginFrame的实现创建容面板,在容面板里面创建中间面板和Button面板,中间面板主要是显示用户名和密码框,是用来得到用户输入的。按钮面板上嵌入2个按钮,分别是login按钮,cancel
33、按钮。1)创建容面板,在容面板里面有中间面板和按钮面板,并用边框布局将面板放在特定的位置,边框布局的北边设置一个标签,用来显示用户界面的标题,中间面板放在边框布局的中间,按钮面板放在边框布局的南边。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,8,8,8);/4个方向空白边框p.add(BorderLayout.NORTH,(new JLabel(登录系统,JLabel.CENTER);p.add(BorderLayout.CENTER
34、,createCenterPane();p.add(BorderLayout.SOUTH,createBtnPane();return p;2)实现在容面板中定义的中间面板,先设置一个空白边框,并在边框布局的北边创建Id和Pwd面板,将登录得错误信息显示在边框布局的中间,最后将设置好的面板返回,用于用户操作。 private JPanel createCenterPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,0,0,0);p.add(BorderLayout.NORTH,createIdPw
35、dPane();message=new JLabel(,JLabel.CENTER);p.add(BorderLayout.CENTER,message);return p;3)实现在容面板中定义的按钮面板,创建2个按钮,分别是Login和Cancel,login按钮是为了得到用户的登录请求, cancel按钮是为了得到用户的取消请求,将按钮添加到面板中。 private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();utton login=new utton(Login);utton cancel=new utton(C
36、ancel);getRootPane().setDefaultButton(login);p.add(login);p.add(cancel);this.idField=idField;p.add(BorderLayout.CENTER,idField);return p; 4)为登录界面增加方法,用来获取用户的ID(getUserId()和PWD(getPwd(),用来判断是否在设备文件中。private JTextField idField;private JPasswordField pwdField;private JLabel message;public int getUserId
37、()return Integer.parseInt(idField.getText();public String getPassword()char pwd=pwdField.getPassword();return new String(pwd);public void showMessage(String message)this.message.setText(message);5)若用户名或密码错误,设置错误提示消息,抛出自定义异常 IdOrPwdException,自定义异常的声明必须继承自它的父类Exception才能实现,原本的id:1002和pwd:1234,在这里输错密码,
38、用于执行密码异常,最后将这个错误信息在边框布局的中间显示。(测试的Id:1002;pwd:3456)6)为loginFrame增加对控制器对象的引用, LoginFrame 界面增加 (ClientContext) 的引用和对象注入代码 。一定要这样做,不然会产生空指针异常。private ClientContext clientContext;public void setClientContext(ClientContext clientContext)this.clientContext=clientContext;图.3 loginFrame窗体4.1.4 menuFrame的实现创建
39、容面板,在容面板实现菜单面板,在菜单面板更新考试信息和创建按钮面板,在按钮面板创建4个按钮,分别为开始按钮,分数按钮,消息按钮,退出按钮。1)容面板,容面板里面有2个标签和一个菜单面板,其中,一个标签用来显示图片,另外一个标签用来显示信息,菜单面板的具体设置在另外一个面板实现,这里就实现了简单工厂的方法。不在这个面板具体实现,而是在别的面板声明,这个简单工厂的方法在别的窗体里面同样可以实现。另外,在菜单面板中创建一个标签,用来显示用户信息,因为当用户登录用户登录成功后,就会返回一个登录用户,将这个登录用户在界面上显示,用来表达友好的效果。其次,在菜单面板中在创建一个按钮面板,最后将创建好的按钮
40、和标签返回给菜单面板。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();ImageIcon icon=new ImageIcon(this.getClass().getResource(title.png);p.add(BorderLayout.NORTH,new JLabel(icon);p.add(BorderLayout.CENTER,createMenuPane();p.add(BorderLayout.SOUTH,new JLabel(所有,违版必究!,JLabel.RIGHT);retu
41、rn p; private JPanel createMenuPane()JPanel p=new JPanel(new BorderLayout();userInfo=new JLabel(,JLabel.CENTER);p.add(BorderLayout.NORTH,userInfo);p.add(BorderLayout.CENTER,createBtnPane();return p;2)实现在菜单面板中定义的按钮面板,开始按钮是用来让用户考试的,当用户点击开始按钮的时候,就会跳到考试窗体具体考试;当用户点分数按钮的时候,就会用一个消息框显示用户考试的成绩,注意,只有当用户已经考完试了
42、才会有具体的分数,这在业务逻辑里面具体判断;当用户点考试规则按钮的时候,就会用一个消息框来具体显示考试规则;当用户点退出按钮的时候,就会显示一个确定框提示用户,真的退出吗?。若用户点是,则表示退出系统,若用户点否,则表示用户需要停留在该页面,则保持页面不动。private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();utton start=createImgBtn(exam.png,开始);utton result=createImgBtn(result.png,分数);utton msg=createImgBtn(me
43、ssage.png,考试规则);utton exit=createImgBtn(exit.png,退出);p.add(start);p.add(result);p.add(msg);p.add(exit);getRootPane().setDefaultButton(start);3)分别为start,result,msg,exit按钮添加触发事件, 当用户点开始按钮的时候,就去ClientContext调用start()方法 当用户点分数按钮的时候,就去ClientContext调用sresult()方法 当用户点考试规则按钮的时候,就去ClientContext调用msg()方法 当用户点
44、退出按钮的时候,就去ClientContext调用exit()方法 start .addActionListener(new ActionListener()public void actionPerformed(ActionEvent a)clientContext.start();); result.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.result();); msg.addActionListener(new ActionListener(
45、)public void actionPerformed(ActionEvent e)clientContext.msg(););4)更新用户界面若登录成功,就会返回一个用户对象,务必将userInfo 引用到界面控件对象用户显示当前是哪个用户在考试,显示欢迎界面,以达到有好的界面效果,更新用户界面信息,以便于用户考试。 private JLabel userInfo; public void updateView(User user)String str=欢迎+user+参加考试!;userInfo.setText(str);utton btn=new utton(txt,icon);btn
46、.setVerticalTextPosition(utton.BOTTOM);btn.setHorizontalTextPosition(utton.CENTER);5)为menuFrame添加对控制器对象的引用, LoginFrame 界面增加 控制器(ClientContext) 的引用和对象注入代码 。一定要这样做,不然会产生空指针异常。private ClientContext clientContext;public void setClientContext(ClientContext clientContext) this.clientContext = clientContex
47、t;6)当用户关闭窗口是增加确定按钮 this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)clientContext.exit(LoginFrame.this););图.4 menuFrame窗体ExamFrame窗体1)在考试的时候,若用户点关闭按钮,就会调用交卷方法,增加控制器响应按钮,而不是实际关闭,以保证业务的合理性。this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent
48、e)clientContext.send(););2)创建容面板,其中包含考试面板和工具面板。首先,要用IamgeIcon类将图片显示,其中,考试面板是用于显示考题,选项;工具面板用来嵌套用户的需求,比如说,上一题,下一题,交卷等。同样的,它们都是用边框布局来布局的,分别用东、西、南、北4个方位来分布,最后将创建好的面板返回。private JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(8,8,8,8);ImageIcon icon=new ImageIc
49、on(this.getClass().getResource(title.png);p.add(BorderLayout.NORTH,new JLabel(icon);p.add(BorderLayout.CENTER,createExamPane();p.add(BorderLayout.SOUTH,createToolsPane();return p;3)创建考试面板,首先在考试面板边框布局的北边显示考试信息,比如说编号,考试时间,考试科目等;另外,在考试面板边框布局的中间创建一个考题面板;在考试面板边框布局的南边创建一个选项面板。最后,将创建好的对象返回,用于在考试界面显示。privat
50、e JPanel createExamPane()JPanel p=new JPanel(new BorderLayout();examInfo=new JLabel(,JLabel.CENTER);p.add(BorderLayout.NORTH,examInfo);p.add(BorderLayout.CENTER,createQuestionPane();p.add(BorderLayout.SOUTH,createOptionsPane();return p;4)创建工具面板,首先,在周围边框嵌入一个空白边框;其次,在工具面板边框布局的西边加入题目数量标签;在工具面板边框布局的东面加入
51、定时器标签;在工具面板边框布局的中间创建按钮面板;private JPanel createToolsPane()JPanel p=new JPanel(new BorderLayout();p.setBorder(new EmptyBorder(0,10,0,10);questionCount =new JLabel(,JLabel.LEFT); timer =new JLabel(); p.add(BorderLayout.WEST,questionCount);p.add(BorderLayout.EAST,timer);p.add(BorderLayout.CENTER,createB
52、tnPane();return p;5)创建按钮面板,上一个按钮,下一个按钮,交卷按钮,并分别为上一个,下一个,交卷按钮增加触发事件。private JPanel createBtnPane()JPanel p=new JPanel(new FlowLayout();prev=new utton(上一个);prev.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.prev(););next=new utton(下一个);next.addActionList
53、ener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.next(););utton send=new utton(交卷);send.addActionListener(new ActionListener()public void actionPerformed(ActionEvent e)clientContext.send(););p.add(prev);p.add(next);p.add(send);return p;6)更新考试界面,当用户点击上一个或下一个按钮时,需要先得到当前
54、用户的答案,然后在找到用户想要的特定题目的下标。public void updateView(ExamInfo examInfo, QuestionInfo questionInfo) this.examInfo.setText(examInfo.toString();this.questionArea.setText(questionInfo.toString();this.questionCount.setText(题目:+examInfo.getQuestionCount()+的+(questionInfo.getQuestionIndex()+1)+题);this.updateOpti
55、ons(questionInfo.getUserAnswers();this.updateQuestionCount(examInfo.getQuestionCount(),questionInfo.getQuestionIndex();this.updateButtons(examInfo.getQuestionCount(), questionInfo.getQuestionIndex();7)得到用户答案,判断这个选项框是否被选中,若该选项框被选中,就把这个value写到UserAnswers集合中。public List getUserAnswers()List ans=new Arr
56、ayList();for(Option o:options)if(o.isSelected()ans.add(o.value);return ans;图.5 examFrame的窗体4.1.6 ClientContext控制器 ClientContext是非常重要的,它充当用户界面和业务层的桥梁,每当用户层有请求的时候,都是由控制器捕获请求,然后控制器在去业务层寻找特定的方法处理。等到业务层处理好数据后,也将结果返回给控制器ClientContext,并由控制器将用户请求的数据返回给用户层。 在ClientContext中最重要的就是对界面对象的引用,因为它们互相之间 是相互依赖的,如果不注意
57、这个问题就会发生空指针异常。如:public void setLoginFrame(LoginFrame loginFrame)this.loginFrame=loginFrame;1)处理用户层的登录请求,先调用业务层的登录方法,若登录成功,就以新用户更新菜单界面 (UpdateView),将登录界面显示为false,考试界面设置为true,这样做就是为了跳转到MenuFrame,并为MenuFrame界面增加更新用户信息的方法,加入trycatch模块 public void login()tryint id=loginFrame.getUserId();String pwd=loginF
58、rame.getPassword();User user=examService.login(id,pwd);menuFrame.updateView(user); loginFrame.setVisible(false);menuFrame.setVisible(true);catch(IdOrPwdException e)e.printStackTrace();loginFrame.showMessage(登录失败+e.getMessage();/JOptionPane.showMessageDialog(loginFrame, e.getMessage();catch(NumberFor
59、matException e)loginFrame.showMessage(ID只能为数字);catch(Exception e)e.printStackTrace();loginFrame.showMessage(登录失败+e.getMessage();2)处理菜单界面的开始考试功能,更新考试界面,将menuFrame设置为不可见,将ExamFrame设置为可见,这样就可以显示考试界面了,当用户开始的时候,启动定时器,开始计时功能,提示用户考试时间。public void start()tryexamInfo=examService.start();QuestionInfo question
60、Info=examService.getQuestions(0);this.currentQuestion=questionInfo;examFrame.updateView(examInfo,questionInfo);menuFrame.setVisible(false);examFrame.setVisible(true);startTimer();catch(Exception e)e.printStackTrace();JOptionPane.showMessageDialog(menuFrame, e.getMessage();3)上一题,下一题的处理事件 当用户调用下一题按钮时,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机场安全准入考试题及答案
- 土方工程合同范本大全
- 合同协议书模板的网站
- 文化创意产业众创空间文化产业与文化创意产业投资政策研究
- 婚姻纠纷合同协议书怎么写
- 工程合同委托协议书样本
- 门市出兑合同协议书
- 全民健康面试试题及答案
- 龙湖建设施工合同协议书
- 烟花爆竹燃放合同协议书
- 数字化电力系统转型-洞察阐释
- GB/T 196-2025普通螺纹基本尺寸
- MOOC 中国电影经典影片鉴赏-北京师范大学 中国大学慕课答案
- 血橙生产技术规程
- 医院小型压力蒸汽灭菌器的使用及管理
- 中药学电子版教材
- 脊柱损伤固定搬运术-优秀课件
- 分包进度款申请等审批表
- 阜阳市地质灾害防治规划
- 股票软件“指南针”指标说明
- 人工授精实验室制度和操作规程
评论
0/150
提交评论