版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java语言与面向对象技术课程设计课程设计报告( 2012- 2013年度第2学期)标准化考试系统专业计算机科学与技术学生姓名班级学号指导教师完成日期2013.7目 录目 录21 概 述31.1 课程设计目的31.2 课程设计内容与要求32 系统需求分析42.1 系统目标42.2 主体功能42.3 开发环境43 系统总体设计43.1 系统的功能模块划分43.2 系统流程图54 系统详细设计64.1 客户端模块设计64.1.1 用户登录模块设计(ClientLogin类)64.1.2 选择试卷模块设计(GetTestFile类)114.1.3 回答试卷查询模块设计(ClientTestArea类
2、)154.2 服务器端模块设计234.2.1 Server类234.2.2 ServerThread类254.2.3 ReadTestquestion类295 代码调试306 软件发布317 小结32参考文献33标准化考试系统1 概 述1.1 课程设计目的1、加深对Java语言与面向对象技术课程基础知识的理解,掌握Java语言面向对象程序设计的开发方法和步骤;2、进一步理解面向对象程序设计的思想和方法,利用Java语言进行程序设计的能力;3、课程设计将课本上的理论知识和实际应用相结合,锻炼学生发现问题、分析问题和解决问题的能力。加强学生研发、编写、调试程序的能力;4、培养学生在项目开发中团队合
3、作精神、创新意识及能力;5、提高学生科技论文写作能力,规范完成课程设计报告。1.2 课程设计内容与要求设计C/S模式的标准化考试系统,即客户端和服务器端都是Java应用程序,具体要求如下:(1)用户单击选项卡中的“登录”将出现登录界面。用户在登录界面输入学号、姓名以及服务器的IP,并请求服务器建立套接字链接。用户登录的目的是为了将自己的基本信息存放到服务器上,以便服务器记录用户的考试成绩。因此,用户和服务器建立连接后,服务器将创建一个和用户相关的一个文件,该文件的名字由用户的学号、姓名以及用户所在客户端机器的IP所组成。(2)单击端选项卡中的“选择试卷”将出现选择试卷界面。如果用户成功登录,即
4、和服务器建立连接并在服务器端创建了和其相关的文件,那么,用户再选择试卷界面可以将服务器上的试卷文件的名字存放到客户端界面中的下拉式列表中,然后再在下拉列表中选择一个试卷文件的名字提交给服务器。(3)单击端选项卡中的“答卷”将出现答卷界面。如果用户成功登录,并且用户通过“选择试卷”界面选择了一套试卷,那么用户在答卷界面可以从服务器读入所选试卷的内容,而且在“答卷”界面可以提交自己的答案给服务器、服务器将用户提交的答案存入用户登录时服务器所创建的和该用户相关的文件中。提交答案后,在“答卷”界面可以查询分数。2 系统需求分析2.1 系统目标通过本系统能够实现用户登录,选择试卷,完成试卷,查询分数等功
5、能。2.2 主体功能A.C/S模式,即客户端与服务器端都是Java应用程序;B.输入服务器IP地址,连接服务器功能;C.登录验证功能;D.学生可以选择所要做的试题;E.开始考试;F.完成考试后,学生可以查看自己的分数、试题、正确答案、分值以及自己所选 择的答案;2.3 开发环境MyEclipse3 系统总体设计3.1 系统的功能模块划分本系统主要有以下几个功能模块:用户登录,选择试卷,完成试卷,查询分数等。标准化考试系统客户端窗口完成试卷用户登录选择试卷提交试卷查询分数退出系统3.2 系统流程图开始连接成功连接服务器输入信息显示登录成功NY选择试卷显示试卷回答试卷提交试卷查看分数退出4 系统详
6、细设计4.1 客户端模块设计4.1.1 用户登录模块设计(ClientLogin类) 1、效果图 2、类的主要成员变量和方法1)成员变量a、verfyMess是String对象,该字符串的前缀为“学生”,后缀是用户输入学号、姓名以及客户端的IP。用户登录时需将verifyMess提交给服务器。b、inputNumber、inputName和inputServerIP是JtextField创建的文本框,用于用户输入学号、姓名和服务器的IP.。c、hintMess是JLabel创建的标签,用于显示某些提示信息。d、startCon是JButton创建的对象,该按钮将当前容器注册为自己的Action
7、Event事件监视器。 2)方法a、ClientLogin()是构造方法,用来创建clientLogin类。b、actionPerformed(ActionEvent)方法是ClientLogin类实现ActionListener接口中的方法。ClientLogin创建的容器startCon按钮的ActionEvent事件监视器,当用户单击该按钮时,容器将执行actionPerformed(ActionEvent)方法进行相应的操作。3、主要程序代码import java.awt.*;import java.awt.event.*;import java.io.*;import .*;impo
8、rt javax.swing.*;public class ClientLogin extends JPanel implements ActionListener String verifyMess; JTextField inputNumber,inputName,inputServerIP; JLabel hintMess; JButton startCon; String number,name,IP; public ClientLogin() inputNumber=new JTextField(10); inputName =new JTextField(10); hintMess
9、=new JLabel("请输入学号、姓名和服务器的IP",JLabel.CENTER); hintMess.setFont(new Font("隶书",Font.BOLD,18); inputServerIP=new JTextField(10); startCon=new JButton("提交"); startCon.addActionListener(this); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("输入学号:",JLabel.C
10、ENTER); box1.add(inputNumber); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("输入姓名:",JLabel.CENTER); box2.add(inputName); Box box3=Box.createHorizontalBox(); box3.add(new JLabel("输入IP:"); box3.add(inputServerIP); Box box4=Box.createHorizontalBox(); box4.add(new JLabel(&
11、quot;单击提交按钮",JLabel.CENTER); box4.add(startCon); Box boxH=Box.createVerticalBox(); boxH.add(box1); boxH.add(box2); boxH.add(box3); boxH.add(box4); JPanel pCenter=new JPanel(); pCenter.add(boxH); pCenter.setBackground(new Color(210,210,110); setLayout(new BorderLayout(); add(pCenter,BorderLayout
12、.CENTER); JPanel pNorth=new JPanel(); pNorth.setBackground(Color.green); pNorth.add(hintMess); add(pNorth,BorderLayout.NORTH); public void actionPerformed(ActionEvent e) if(e.getSource()=startCon) number=inputNumber.getText().trim(); name=inputName.getText().trim(); if(number.length()>0&&
13、name.length()>0) IP=inputServerIP.getText().trim(); try LoginThread thread=new LoginThread(hintMess); if(!(thread.isAlive() thread=new LoginThread(hintMess); thread.makeConnection(number,name,IP); thread.start(); catch (Exception ee) hintMess.setText("无法连接"+ee); else JOptionPane.showMes
14、sageDialog(this,"必须输入学号和姓名","警告", JOptionPane.WARNING_MESSAGE); class LoginThread extends Thread Socket socket; InetSocketAddress socketAddress; DataInputStream in; DataOutputStream out; JLabel hintMess; LoginThread(JLabel hint) hintMess=hint; public void makeConnection(String nu
15、mber,String name,String IP) throws IOException InetAddress address=InetAddress.getByName(IP); socketAddress=new InetSocketAddress(address,6666); socket=new Socket(); socket.connect(socketAddress); in=new DataInputStream(socket.getInputStream(); out=new DataOutputStream(socket.getOutputStream(); out.
16、writeUTF("学生"+number+""+name); public void run() String s=null; while(true) try s=in.readUTF(); if(s.startsWith("成功登录:") String verifyMess=s.substring(s.indexOf(":")+1); GetTestFile.setVerifyMess(verifyMess); ClientTestArea.setVerifyMess(verifyMess); GetTestFi
17、le.setSocketAddress(socketAddress); ClientTestArea.setSocketAddress(socketAddress); hintMess.setText(s); String tishi="成功登录,请单击左侧的"选择试卷界面"" JOptionPane.showMessageDialog(null,tishi,"操作提示", JOptionPane.PLAIN_MESSAGE); if(socket.isClosed() return; if(s.startsWith("已经
18、成功登录了") hintMess.setText(s); String tishi="已经成功登录了,请单击左侧的"选择试卷界面"" JOptionPane.showMessageDialog(null,tishi,"操作提示", JOptionPane.PLAIN_MESSAGE); if(socket.isClosed() return; catch (Exception ee) hintMess.setText("服务器暂时关闭了,稍后再请求连接"); return; 4.1.2 选择试卷模块设计(
19、GetTestFile类)1、效果图2、类的主要成员变量和方法 1)成员变量 a、hintMess是JLabel创建的标签,用于显示某些提示信息。b、list是JComboBox创建的下拉列表,用于显示从服务器得到的试卷文件的名字。c、getTestFile和submit是JButton创建的对象,其上的名字分别为“列出试卷的名字”和“提交”,该两个按钮都将当前容器注册为自己的ActionEvent事件监视器。 2)方法a、GetTestFile()是构造方法,用来创建getTestFile类。b、actionPerformed(ActionEvent)方法是GetTestFile类实现Act
20、ionListener接口中的方法。GetTestFile创建的容器getTestFile和submit按钮的ActionEvent事件监视器,当用户单击getTestFile和submit按钮按钮时,容器都将执行actionPerformed(ActionEvent)方法进行相应的操作。3、主要程序代码import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;import .*;public class GetTestFile extends JPanel implements Action
21、Listener,Runnable static String verifyMess; static InetSocketAddress socketAddress; String fileName; JLabel hintMess; JButton getTestFile,submit; JComboBox list; Socket socket; DataInputStream in; DataOutputStream out; Thread thread; int n=0; public GetTestFile() hintMess=new JLabel("单击"列出
22、试卷名字"按纽从服务器得到试卷的名字"); hintMess.setBackground(Color.green); getTestFile=new JButton("列出试卷名字"); getTestFile.setBackground(Color.green); submit=new JButton("提交"); submit.setBackground(Color.orange); getTestFile.addActionListener(this); submit.addActionListener(this); list=
23、new JComboBox(); Box box1=Box.createHorizontalBox(); box1.add(new JLabel("单击"列出"按纽:",JLabel.CENTER); box1.add(getTestFile); Box box2=Box.createHorizontalBox(); box2.add(new JLabel("选择试卷:",JLabel.CENTER); box2.add(list); box2.add(submit); Box boxH=Box.createVerticalBox()
24、; boxH.add(box1); boxH.add(box2); thread=new Thread(this); JPanel pCenter=new JPanel(); pCenter.add(boxH); setLayout(new BorderLayout(); pCenter.setBackground(Color.pink); add(pCenter,BorderLayout.CENTER); JPanel pNorth=new JPanel(); pNorth.add(hintMess); add(pNorth,BorderLayout.NORTH); public stati
25、c void setVerifyMess(String mess) verifyMess=mess; public static void setSocketAddress(InetSocketAddress address) socketAddress=address; public void actionPerformed(ActionEvent e) if(e.getSource()=getTestFile) list.removeAllItems(); try makeConnection(); /见后面的makeConnection()方法 out.writeUTF("列出
26、文件:"+verifyMess); if(!(thread.isAlive() thread=new Thread(this); thread.start(); catch(Exception ee) JOptionPane.showMessageDialog(this,"请登录","操作提示", JOptionPane.PLAIN_MESSAGE); if(e.getSource()=submit) n=list.getItemCount(); if(n>=1) fileName=(String)list.getSelectedItem
27、(); File file=new File(fileName); ClientTestArea.setExaminationFile(file); String tishi="您已经选择了"+fileName+"试卷,请单击左侧的"答卷界面"" JOptionPane.showMessageDialog(this,tishi,"操作提示", JOptionPane.PLAIN_MESSAGE); private void makeConnection() throws IOException socket=new
28、 Socket(); socket.connect(socketAddress); in=new DataInputStream(socket.getInputStream(); out=new DataOutputStream(socket.getOutputStream(); public void run() String s=null; while(true) try s=in.readUTF(); if(s.startsWith("列出文件:") String listItem=s.substring(s.indexOf(":")+1); li
29、st.addItem(listItem); if(s.startsWith("已经全部列出:") hintMess.setText("试卷名字已经全部列出,请在列表中选择试卷"); hintMess.setBackground(Color.green); break; if(s.startsWith("请登录") JOptionPane.showMessageDialog(this,"请登录","操作提示", JOptionPane.PLAIN_MESSAGE); break; catch (E
30、xception ee) 4.1.3 回答试卷查询模块设计(ClientTestArea类) 1、效果图2、类的主要成员变量和方法1)成员变量a、hintMess是JLabel创建的标签,用于显示某些提示信息。b、examineArea是JPanel创建的容器,用于显示试题和答题卡。c、handAnswer,startTest和lookScore是JButton创建的对象,其上的名字分别为“提交答案”、“显示试卷” 和“查看分数”,这三个按钮都将当前容器注册为自己的ActionEvent事件监视器。2)方法a、ClientTestArea()是构造方法,用来创建clientTestArea类。
31、b、actionPerformed(ActionEvent)方法是ClientTestArea类实现ActionListener接口中的方法。ClientTestArea创建的容器是handAnswer,startTest和lookScore按钮的ActionEvent事件监视器,当用户单击handAnswer,startTest和lookScore按钮时,容器都将执行actionPerformed(ActionEvent)方法进行相应的操作。3、主要程序代码 import java.awt.*; import javax.swing.*; import java.awt.event.*; i
32、mport java.io.*; import .*; import java.util.*; public class ClientTestArea extends Panel implements ActionListener,Runnable static String verifyMess; static InetSocketAddress socketAddress; static File examinationFile; ArrayList<JRadioButton> choiceList; Socket socket; DataInputStream in; Dat
33、aOutputStream out; Thread thread; static JPanel examineArea; JLabel hintMess; JButton handAnswer,startTest,lookScore; public ClientTestArea() thread=new Thread(this); choiceList=new ArrayList<JRadioButton>(); examineArea=new JPanel(); examineArea.setForeground(Color.blue); handAnswer=new JButt
34、on("提交答案"); startTest=new JButton("显示试卷"); lookScore=new JButton("查看分数"); handAnswer.setEnabled(false); lookScore.setEnabled(false); hintMess=new JLabel("单击"显示试卷"按纽从服务器得到试卷"); startTest.addActionListener(this); handAnswer.addActionListener(this); loo
35、kScore.addActionListener(this); setLayout(new BorderLayout(); JPanel pCenter=new JPanel(); pCenter.setBackground(Color.yellow); pCenter.setLayout(new BorderLayout(); pCenter.add(new JScrollPane(examineArea),BorderLayout.CENTER); add(pCenter,BorderLayout.CENTER); JPanel pSouth=new JPanel(); pSouth.se
36、tBackground(Color.blue); pSouth.add(handAnswer); pSouth.add(startTest); pSouth.add(lookScore); add(pSouth,BorderLayout.SOUTH); JPanel pNorth=new JPanel(); pNorth.setBackground(Color.green); pNorth.add(hintMess); add(pNorth,BorderLayout.NORTH); public static void setVerifyMess(String mess) verifyMess
37、=mess; public static void setSocketAddress(InetSocketAddress address) socketAddress=address; public static void setExaminationFile(File f) examinationFile=f; examineArea.removeAll(); public void actionPerformed(ActionEvent e) if(e.getSource()=startTest) choiceList.clear(); lookScore.setEnabled(false
38、); try makeConnection(); examineArea.removeAll(); out.writeUTF("显示试卷:"+verifyMess+"#"+examinationFile.getName(); String m="读入的试题:"+examinationFile+"将刷新当前的试题,是否确认继续" int ok=JOptionPane.showConfirmDialog(this,m,"确认对话框", JOptionPane.YES_NO_OPTION,JOptio
39、nPane.INFORMATION_MESSAGE); if(ok=JOptionPane.YES_OPTION) if(!(thread.isAlive() thread=new Thread(this); thread.start(); handAnswer.setEnabled(true); catch(Exception exp) JOptionPane.showMessageDialog(this,"您未登录或选择试卷","操作提示", JOptionPane.PLAIN_MESSAGE); if(e.getSource()=handAnswe
40、r) String m="只有一次提交答案的机会!,一旦提交将无法继续答题,是否确认提交答案" int ok=JOptionPane.showConfirmDialog(this,m,"确认对话框", JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE); if(ok=JOptionPane.YES_OPTION) StringBuffer str=new StringBuffer(); for(int i=0;i<choiceList.size();i+) JRadioButton
41、box=choiceList.get(i); if(box.isSelected() str.append(box.getText(); String myAnswer=new String(str); try makeConnection(); out.writeUTF("提交的答案:"+verifyMess+"#"+myAnswer); handAnswer.setEnabled(false); lookScore.setEnabled(true); catch(Exception exp) JOptionPane.showMessageDialog
42、(this,"您未登录或选择试卷","操作提示", JOptionPane.PLAIN_MESSAGE); if(e.getSource()=lookScore) StringBuffer str=new StringBuffer(); for(int i=0;i<choiceList.size();i+) JRadioButton box=choiceList.get(i); if(box.isSelected() str.append(box.getText(); String myAnswer=new String(str); try mak
43、eConnection(); out.writeUTF("查看得分:"+verifyMess+"#"+myAnswer+"*"+examinationFile.getName(); if(!(thread.isAlive() thread=new Thread(this); thread.start(); catch(Exception exp) JOptionPane.showMessageDialog(this,"您未登录或选择试卷","操作提示", JOptionPane.PLAIN_ME
44、SSAGE); private void makeConnection() throws IOException socket=new Socket(); socket.connect(socketAddress); in=new DataInputStream(socket.getInputStream(); out=new DataOutputStream(socket.getOutputStream(); public void run() while(true) String s=null; try s=in.readUTF(); if(s.startsWith("试卷内容:") String content=s.substring(s.indexOf(":")+1); StringReader read=new StringReader(content); BufferedReader in= new BufferedR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 英语作文我的家乡新沂英语作文初一
- 2024至2030年高频蜡项目投资价值分析报告
- 2024年度员工专属劳务聘任协议版B版
- 2024至2030年趟门配件项目投资价值分析报告
- 2024年度广告灯箱废弃物处理与环保设施安装合同2篇
- 2024至2030年平底钻项目投资价值分析报告
- 2024全新民政局离婚合同法律文件版B版
- 2024年超薄不锈钢箔项目可行性研究报告
- 2024年聚硬氯乙烯排污管件项目可行性研究报告
- 2024年磨砂柄自开直杆伞项目可行性研究报告
- 钢筋弯钩长度汇总-现场检查必备
- 客户关系的维护讲义课件(共17页).ppt
- (完整版)二十四山年月日时吉凶定局详解,
- 工程项目结算稽核办法
- 华文版二年级上册写字书法
- 基层部队经常性思想工作存在的问题与对策
- APQP培训教材PPT课件
- 广东省二手车交易市场经营者备案登记表
- SGRQ评分方法
- 《房屋渗漏修缮技术规程》JGJ@T53-2011
- 小学生语文学科评语
评论
0/150
提交评论