java课程设计---基于Java的在线评测系统的设计与开发.doc_第1页
java课程设计---基于Java的在线评测系统的设计与开发.doc_第2页
java课程设计---基于Java的在线评测系统的设计与开发.doc_第3页
java课程设计---基于Java的在线评测系统的设计与开发.doc_第4页
java课程设计---基于Java的在线评测系统的设计与开发.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

XXXXXXXX学院课程设计报告书课程名称: JAVA课程设计 题 目: 基于Java的在线评测系统的设计与开发系 名: 信息工程系 专业班级: 软件工程 姓 名: XXX 学 号: XXXXXXXXXXX 指导教师: XX 2013年 6 月 28 日课程设计任务书学生姓名: XXX 专业班级: 软件1111 指导教师: XX 工作单位: 信息工程系 设计题目:基于Java的在线评测系统的设计与开发初始条件: Java基础,Java SE,在线评测系统,桌面版的在线考试系统要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)使用JAVA开发一个在线评测系统。该系统主要包括:用户登录、菜单选择、开始考试、分数统计四个功能模块。本系统使用JAVA SWING技术,事件处理机制,文件流和泛型集合进行测评系统的设计,开发和功能实现,并综合运用多线程和网络编程技术。系统总体功能模块图如下:在线评测系统登录响应获取登录信息分数统计开始考试菜单选择用户登录装载用户信息分数显示统计分数交卷保存答案考试倒计时上下翻题答题装载题目信息退出考试系统查看考试规则查看分数开始考试更新用户信息系统功能点说明如下:用户登录功能描述获取登录信息:获取客户端输入用户ID和用户密码pwd。登录响应:根据登录校验的结果,显示相应的界面;若登录不成功,只在当前页面显示错误提示,若登录成功,关闭当前界面,显示菜单界面。菜单选择描述更新用户信息:将登录成功的用户信息显示到当前界面。开始考试:点击“开始”,关闭当前界面,显示考试界面。查看分数:点击“分数”,若还未开始,提示“考试未开启”,若已完成考试,显示分数结果。查看考试规则:点击“考试规则”,显示考试规则面板。退出考试系统:点击“离开”,退出系统。开始考试功能描述装载用户信息:现在用户身份、考试科目等相关信息。装载题目信息:将题目信息显示到面板上。答题:选择当前题目答案,并自动保存该答案数据到内存中。上下翻题:点击“上一题”“下一图”,可随意翻阅题目信息。考试倒计时:考试开始后,面板显示考试时间倒计时,时长为20分钟。交卷保存答案:点击“交卷”确认后,考试结束,保存当前试卷相关数据,关闭当前界面,显示菜单选择界面。分数统计功能描述统计分数:将答题结果与标准答案比对,计算分数。分数显示:查看分数或者交卷时,将计算出的分数显示到当前面板中。时间安排:日期课程内容6.17Java语言基础6.18Java OOP基础 6.19Java SE 核心6.20用户登录功能6.21菜单选择功能6.25考试答题功能6.26分数统计功能6.27系统调试和验收6.28-29撰写课程设计报告 指 导 教 师 签 字: 2013 年 6 月 13 日系 主 任 签 字: 马德宝 2013 年 6 月 14日 课程设计报告书1. 设计题目基于java的在线测评系统的设计与开发。2. 开发环境硬件环境:微机系列,内存在1G以上软件环境:Microsoft Windows XP。3. 开发工具MyEclipse IDE4. 完成时间2013617-2013.6.285.需求分析 系统的对象确定之后,应该对系统进行定性的分析,分析是为了了解系统应达到的目和 系统应具备的功能。在线考试系统由四大功能模块组成:用户登录模块、菜单选择模块、 开始考试模块以及分数统计模块。 5.1用户登录模块功能 获取登录信息:获取客户端输入用户ID和用户密码pwd。登录响应:根据登录校验的结果,显示相应的界面;若登录不成功,只在当前页面显示错误提示,若登录成功,关闭当前界面,显示菜单界面。 登录取消:若文本框内容错误或许清除,可直接按取消按钮来实现。 5.2菜单选择模块功能 更新用户信息:将登录成功的用户信息显示到当前界面。 开始考试:点击“开始”,关闭当前界面,显示考试界面。 查看分数:点击“分数”,若还未开始,提示“考试未开启”,若已完成考试, 显示分数结果。 看考试规则:点击“考试规则”,显示考试规则面板。 退出考试系统:点击“离开”,退出系统。 5.3开始考试模块功能 装载用户信息:现在用户身份、考试科目等相关信息。装载题目信息:将题目信息显示到面板上。答题:选择当前题目答案,并自动保存该答案数据到内存中。上下翻题:点击“上一题”“下一题”,可随意翻阅题目信息,无上一题或下一题是按钮无效。考试倒计时:考试开始后,面板显示考试时间倒计时,时长为20分钟,时间到时,不能在答题,系统自动保存试卷。交卷保存答案:点击“交卷”确认后,考试结束,保存当前试卷相关数据,关闭当前界面,显示菜单选择界面,意外点击窗口关闭按钮时,也自动进行保存。5.4分数统计模块功能 统计分数:将答题结果与标准答案比对,计算分数。分数显示:查看分数或者交卷或关闭考试界面时,将计算出的分数显示到当前面板中。6系统总体设计方案 6.1系统功能模块的创建 1欢迎登陆界面的创建; 2登陆界面模块创建和划分; 3 菜单界面的创建与其作用实现; 4 考试规则界面创建; 5考试界面的创建和划分; 6.2系统要实现的功能 1用户的名字、密码和编号都能够在菜单界面和考试界面中显示出来; 2系统能随机在题库中所给的十个级别题目中每个级别中抽出两个题目构成一套试 卷; 3考试完后用户可通过交卷或查分能够看到成绩; 4 考试界面有个倒计时来限制答题时间,时间到,系统自动交卷和保 存。 6.3面向对象的设计 本次课设充分体现出了java语言抽象,封装,继承,多态和多线程的作用,为实现该项目功能锁设计类如下:1 界面类:LoginFrame(登录界面),MenuFrame(菜单界面)WelcomeWindow(欢迎界面) RuleFrame(考试规则界面) ExamFrame(考试界面)2 控制器类:ClientContext3 后台数据处理类:ExamService(考试后台数据处理)4 IdOrPwdException(编号与密码数据处理) 5 实体类: EntityContext(试卷内容的读取与显示) Question(题 库) QuestionInfo(试卷) User(用户信息)6 主类:Main(入口类) 6.4画出系统的结构 在线评测系统登录响应获取登录信息分数统计开始考试菜单选择用户登录装载用户信息分数显示统计分数交卷保存答案考试倒计时上下翻题答题装载题目信息退出考试系统查看考试规则查看分数开始考试更新用户信息 7.系统详细设计1 欢迎界面设计,通过Welcome类来实现,该界面在出现2秒后会自动消失,然后登陆界面出现,欢迎界面截图如图1 图1 欢迎界面 2实现用户的登陆功能,通过login类来设计该界面,该界面能获取登录信息(获取客户端输入用户ID和用户密码pwd)和得到登录响应(根据登录校验的结果,显示相应的界面;若登录不成功,只在当前页面显示错误提示,若登录成功,关闭当前界面, 显示菜单界面。)以及能通过取消按钮(cancelBtn)和clientContext.cancel()方法实现取消功能。登录界面与前台逻辑处理截图如图2-4 图2 登录界面图3 编号输入不合法图4 密码错误 3创建一个MunuFrame的类,实现菜单面板功能的实现,能实现更新用户信息即将登录成功的用户信息显示到当前界面, 开始考试, 查看分数(点击“分数”,若还未开始,提示“考试未开启”,若已完成考试,显示分数结果),查看考试规则(点击“考试规则”,显示考试规则面板)和退出考试系统(点击“离开”,退出系统)以及点击关闭窗体有提示信息等功能。各功能截图如图5-图10 图5 菜单界面图6 考试前点击分数按钮 图7考试后点击“开始”按钮图8 点击考试规则按钮 图9 点击“X”按钮图10 点击“离开”按钮 4开始考试功能的实现,包括装载用户信息,装载题目信息,答题,上下翻题,考试倒计时交卷保存答案,关闭窗体系统自动保存试卷以及当前为第一题或最后一题时前一题按钮或最后一题按钮无效(不可点击)等功能,试卷的创建与保存可用集合(list,map)来实现,把题库中的级别当作键,级别对应题当作值放在map中,截图如图11-图14 图11 考试总体界面图12 时间到界面图13 试卷保存成功后窗体显示(交卷或时间截至)图14 考试中途关闭窗体 5考试分数统计功能模块的描述,包括统计分数:将答题结果与标准答案比对,计算分数和分数显示:查看分数或者交卷时,将计算出的分数显示到当前面板中;效果截图如图15-图16 图15 交卷时分数显示图16 查分时分数显示 6源代码 见附录18 系统的调试和测试 8.1 设计过程中遇到的问题和解决方案 如何让整个项目具有层次性,既易于阅读也用于防止业务逻辑处理与数据 处理全部在一个类里而导致实现困难和编程混乱? 解决方案:通过MVC模式来设计程序,界面只处理前台工作,建立一个控制器 类进行业务逻辑处理,在后台进行业务数据处理功能。 8.2测试过程中遇到的问题和解决方案 (1)当考试时,意外关闭窗口时,考试答案不会保存。 解决方案:为窗口添加监听器, setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);this.addWindowListener(new WindowAdapter() Overridepublic void windowClosing(WindowEvent e) int val=JOptionPane.showConfirmDialog(null, 确定离开?);if(val=JOptionPane.YES_OPTION)clientContext.send();clientContext.examFrameExit(); 当窗体关闭时,会更据提示信息自动保存。(2)发现登录见面的取消按钮无作用。 于是为取消按钮设置了事件监听,再将方法实现为清空文本框中内容,即通过 idTextField.setText(null)和pwdField.setText(null)语句来实现。 9设计心得体会 面向对象,java是面向对象程序设计语言,这次课程实践.,我更加深刻地理解了面向对象的概念,我觉得这是我这次实践的第一个收货.;。 怎么说呢,达内的老师讲课方法新颖,很有吸引力,我十分喜欢这种方式,在这种氛围下学习我很有激情. 再说说我的感想吧,错误,是啊,不断的错不断的错,不断的找不断的找,好多次我都快发疯了,但是呢,没有真正用过心的去做一件事的认识不能理解那种心情的,就是,你的努力,终于有收获了,而这次的实验课,也是再一次让我明白,只有不断的犯错,然后找错,才能学到知识,才能进步.哎,这真的是,让人心里,既焦躁,又兴奋.这次的经历告诉我,淡定,细心,耐心,不要轻易放弃,相信自己,加油加油. 软件知识的学习,从来都不是意见容易的事,其实也是,任何的东西,想要学好学精,都的付出时间和汗水啊.我一次次告诉自己,加油加油啊!不知不觉一个多星期实验就这样结束了,感觉时间好快,时间就是知识时间就是金钱啊,而我不自觉的又想起了自己平时,一次次浪费时间,常立志不立长志,哎,人也许就是这样,需要压力,和打击,然后才能真正的长大,懂事啊!本次课设也让我明白了毅力与心态的重要性,无论如何时候都不要轻易放弃,也不要让懒惰缠上自己,要抓住任何一个机会去学习更多知识。更要多实践,它对知识的收获将是更深刻的。10答辩设计过程及答辩回答问题记载:1.java的特点 答:封装,继承,多态 ,面向对象2.怎么将你类所在路径图片加载到控件上?答:首先通过类名.class.getResource(带格式图片名)获得图片路径url,然后通过new ImageIcon(url)创建对象,然后将该对象添加到所需的控件上。3怎样让在一个类中创建的对象在其他类中可用并且该对象只在内存中存在一个?答:可通过依赖注入方法实现,例如可用get(),set()方法来实现引用类型参数传递。 指导教师评语: 成绩评定: 签名: 2013 年 6 月 30 日附录1源代码Main类代码:package com.tarena.client;import com.tarena.entity.EntityContext;import com.tarena.service.ExamService;import com.tarena.ui.ClientContext;import com.tarena.ui.ExamFrame;import com.tarena.ui.LoginFrame;import com.tarena.ui.MenuFrame;import com.tarena.ui.RuleFrame;import com.tarena.ui.WelcomeWindow; /主类public class Main public static void main(String args) ClientContext clientContext=new ClientContext();/欢迎界面 WelcomeWindow welcomeWindow=new WelcomeWindow();/登录界面 LoginFrame loginFrame=new LoginFrame();/菜单界面 MenuFrame menuFrame=new MenuFrame();/考试界面 ExamFrame examFrame=new ExamFrame();ExamService examService=new ExamService();EntityContext entityContext=new EntityContext(); /考试规则界面RuleFrame ruleFrame=new RuleFrame();menuFrame.setRuleFrame(ruleFrame);loginFrame.setClientContext(clientContext);menuFrame.setClientContext(clientContext);examFrame.setClientContext(clientContext);examService.setEntityContext(entityContext);clientContext.setWelcomeWindow(welcomeWindow);clientContext.setLoginFrame(loginFrame);clientContext.setMenuFrame(menuFrame);clientContext.setExamFrame(examFrame);clientContext.setExamService(examService);clientContext.start();ClientContext类代码:package com.tarena.ui;import java.util.Date;import java.util.List;import java.util.Timer;import java.util.TimerTask;import javax.swing.JOptionPane;import javax.swing.JPasswordField;import javax.swing.JTextField;import com.tarena.entity.Question;import com.tarena.entity.QuestionInfo;import com.tarena.entity.User;import com.tarena.service.ExamService;import com.tarena.service.IdOrPwdException;public class ClientContext /欢迎界面 WelcomeWindow welcomeWindow;/null/登录界面 LoginFrame loginFrame;/菜单界面 MenuFrame menuFrame;/考试界面 ExamFrame examFrame;ExamService examService;QuestionInfo curQuestion;JTextField idTextField;JPasswordField pwdField;User loginUser;boolean finish=false;int score;/构造方法public ClientContext()public ClientContext(WelcomeWindow welcomeWindow, LoginFrame loginFrame,MenuFrame menuFrame, ExamFrame examFrame) this.welcomeWindow = welcomeWindow;this.loginFrame = loginFrame;this.menuFrame = menuFrame;this.examFrame = examFrame;/* * 开始考试,首先进入欢迎界面 和 登录界面 * */public void start()welcomeWindow.setVisible(true);Timer timer=new Timer();timer.schedule(new TimerTask() /延时两秒后欢迎界面消失,登录界面出现public void run() welcomeWindow.setVisible(false);loginFrame.setVisible(true);, 2000);public void login()User u;try int userId=loginFrame.getUserId();String userPwd=loginFrame.getUserPwd();u = examService.login(userId,userPwd);loginUser=u;/登录成功 将登录的用户赋值给loginUserloginFrame.setVisible(false);menuFrame.updateUserInfo(u.getName();menuFrame.setVisible(true); catch (IdOrPwdException e1) JOptionPane.showMessageDialog(loginFrame, e1.getMessage(); catch (NumberFormatException e2) JOptionPane.showMessageDialog(loginFrame, 请输入整数 编号!); catch (Exception e3)JOptionPane.showMessageDialog(loginFrame, 系统错误!请联系系统管理员!);public void startExam()/if(finish)JOptionPane.showMessageDialog(menuFrame, 考试已结束!);return;/返回 结束当前方法体examService.startExam();curQuestion=examService.getPaper().get(0);examFrame.updateView(loginUser,curQuestion);startTime();/点击开始考试按钮,同时进行到计时menuFrame.setVisible(false);examFrame.setVisible(true);public void startTime()long timeLimit=1000*60*1;long startTime=System.currentTimeMillis();final long endTime=startTime+timeLimit;final Timer timer=new Timer();timer.schedule(new TimerTask() public void run() long time=endTime-System.currentTimeMillis();long h=time/1000/60/60;long m=time/1000/60;long s=time/1000%60;String timeStr=h+:+m+:+s;examFrame.updateTime(timeStr);, 0,1000);timer.schedule(new TimerTask() Overridepublic void run() timer.cancel();JOptionPane.showMessageDialog(examFrame, 考试时间到!);send();/考试时间到,自动保存,new Date(endTime);/到指定Date时间执行run方法public void next()saveUserAnswer();/点击下一题按钮,保存答案QuestionInfo nextQuestion=examService.findQuestionByIndex(curQuestion.getIndex()+1);curQuestion=nextQuestion;examFrame.updateView(loginUser, curQuestion);public void pre()saveUserAnswer();/点击上一题,保存答案QuestionInfo preQuestion=examService.findQuestionByIndex(curQuestion.getIndex()-1);curQuestion=preQuestion;examFrame.updateView(loginUser, curQuestion);/更新面板内容public void send()saveUserAnswer();score=examService.getScore();JOptionPane.showMessageDialog(examFrame, 分数: +score);examFrame.setVisible(false);menuFrame.setVisible(true);/考试已结束的状态finish=true;public void saveUserAnswer()int curIndex=curQuestion.getIndex();List userAnswer=examFrame.getUserAnswer();examService.saveUserAnswer(curIndex,userAnswer);public void getScore()if(!finish)JOptionPane.showMessageDialog(menuFrame, 考试尚未开启!);return;JOptionPane.showMessageDialog(menuFrame, 分数: +score);public void examFrameExit()examFrame.setVisible(false);public WelcomeWindow getWelcomeWindow() return welcomeWindow;public void setWelcomeWindow(WelcomeWindow welcomeWindow) this.welcomeWindow = welcomeWindow;public LoginFrame getLoginFrame() return loginFrame;public void setLoginFrame(LoginFrame loginFrame) this.loginFrame = loginFrame;public MenuFrame getMenuFrame() return menuFrame;public void setMenuFrame(MenuFrame menuFrame) this.menuFrame = menuFrame;public ExamFrame getExamFrame() return examFrame;public void setExamFrame(ExamFrame examFrame) this.examFrame = examFrame;public ExamService getExamService() return examService;public void setExamService(ExamService examService) this.examService = examService;public void menuFrameexit() menuFrame.setVisible(false);public void cancel() idTextField.setText(null);pwdField.setText(null);public JTextField getIdTextField() return idTextField;public void setIdTextField(JTextField idTextField) this.idTextField = idTextField;public JPasswordField getPwdField() return pwdField;public void setPwdField(JPasswordField pwdField) this.pwdField = pwdField;WelcomeWindow类代码:package com.tarena.ui;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.Toolkit;import .URL;import javax.swing.*;import javax.swing.border.LineBorder;public class WelcomeWindow extends JWindowint width=430;int height=300;public WelcomeWindow()/init();public void init()setSize(width, height);centerWindow();setContentPane(createContentPane();public JPanel createContentPane()JPanel p=new JPanel(new BorderLayout();URL url=WelcomeWindow.class.getResource(welcome.png);ImageIcon icon=new ImageIcon(url);p.setBorder(new LineBorder(Color.GRAY);p.add(BorderLayout.CENTER,new JLabel(icon);return p;public void centerWindow()Toolkit tk=Toolkit.getDefaultToolkit();Dimension screen=tk.getScreenSize();this.setLocation(screen.width-width)/2, (screen.height-height)/2);LoginFrame类代码:package com.tarena.ui;import javax.swing.*;import javax.swing.border.EmptyBorder;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;/* * 描述一个登录窗体对象 * */public class LoginFrame extends JFrame/属性String title=登录界面;int width=300;int height=200;ClientContext clientContext;JTextField idTextField;JPasswordField pwdField;/构造方法(初始化对象)public LoginFrame()/给该窗体初始化init();/方法/给窗体初始化public void init()setTitle(title);/给窗体设置标题setSize(width, height);centerFrame();setContentPane(createContentPane();/创建主面板public JPanel createContentPane()JPanel p = new JPanel(new BorderLayout();/主面板p.setBorder(new EmptyBorder(8,8,8,8);/设置内边距/给主面板添加组件p.add(BorderLayout.SOUTH,createBottomPane();p.add(BorderLayout.NORTH,new JLabel(登录系统,JLabel.CENTER);p.add(BorderLayout.CENTER,createCenterPane();return p;/创建主面板的中间面板public JPanel createCenterPane()JPanel p = new JPanel(new BorderLayout();p.add(BorderLayout.NORTH,createIdPwdPane();return p;/创建编号、密码面板public JPanel createIdPwdPane()JPanel p = new JPanel(new GridLayout(2,1,0,10);p.add(createIdPane();p.add(createPwdPane();return p;/创建编号面板public JPanel createIdPane()JPanel p = new JPanel(new BorderLayout();p.add(BorderLayout.WEST,new JLabel(编号:);idTextField=new JTextField();p.add(BorderLayout.CENTER,idTextField);return p;/创建密码面板public JPanel createPwdPane()JPanel p = new JPanel(new BorderLayout();p.add(BorderLayout.WEST,new JLabel(密码:);pwdField=new JPasswordField();p.add(BorderLayout.CENTER,pwdField);return p;/创建主面板的底部面板public JPanel createBottomPane()JPanel p = new JPanel();JButton loginBtn=new JButton(登录);loginBtn.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) clientContext.login(););JButton cancelBtn=new JButton(取消);cancelBtn.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) clientContext.setIdTextField(idTextField);clientContext.setPwdField(pwdField);clientContext.cancel(););p.add(loginBtn);p.add(cancelBtn);return p;public void centerFrame()Toolkit tk=Toolkit.getDefaultToolkit();Dimension d=tk.getScreenSize();this.setLocation(d.width-width)/2, (d.height-height)/2);public int getUserId()return Integer.parseInt(idTextField.getText();public String getUserPwd()return new String(pwdField.getPassword();public ClientContext getClientContext() return clientContext;public void setClientContext(ClientContext clientContext) this.clientContext = clientContext;MenuFrame类代码:package com.tarena.ui;import java.awt.BorderLayout;import java.awt.Dimension;import java.awt.FlowLayout;import java.awt.Toolkit;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import java.awt.event.WindowListener;import .URL;import javax.swing.*;public class MenuFrame extends JFrame/属性String title=选择菜单界面;int width=580;int height=350;JLabel userInfoLab;ClientContext clientContext; RuleFrame ruleFrame; /构造方法public MenuFrame()/调用初始化方法init(),完成窗体的初始化(给窗体设置相关属性)init();/方法/初始化窗体public void init()/给窗体设置标题this.setTitle(title);/给窗体设置初始大小(宽、高)this.setSize(width, height);centerFrame();setDefaultCloseOperation(JF

温馨提示

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

评论

0/150

提交评论