JAVA课程设计报告标准化考试系统.docx
《JAVA课程设计报告标准化考试系统.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计报告标准化考试系统.docx(33页珍藏版)》请在冰豆网上搜索。
JAVA课程设计报告标准化考试系统
课程设计报告
(2012--2013年度第2学期)
标准化考试系统
专业
计算机科学与技术
学生姓名
班级
学号
指导教师
完成日期
2013.7
标准化考试系统
1概述
1.1课程设计目的
1、加深对《Java语言与面向对象技术》课程基础知识的理解,掌握Java语言面向对象程序设计的开发方法和步骤;
2、进一步理解面向对象程序设计的思想和方法,利用Java语言进行程序设计的能力;
3、课程设计将课本上的理论知识和实际应用相结合,锻炼学生发现问题、分析问题和解决问题的能力。
加强学生研发、编写、调试程序的能力;
4、培养学生在项目开发中团队合作精神、创新意识及能力;
5、提高学生科技论文写作能力,规范完成课程设计报告。
1.2课程设计内容与要求
设计C/S模式的标准化考试系统,即客户端和服务器端都是Java应用程序,具体要求如下:
(1)用户单击选项卡中的“登录”将出现登录界面。
用户在登录界面输入学号、姓名以及服务器的IP,并请求服务器建立套接字链接。
用户登录的目的是为了将自己的基本信息存放到服务器上,以便服务器记录用户的考试成绩。
因此,用户和服务器建立连接后,服务器将创建一个和用户相关的一个文件,该文件的名字由用户的学号、姓名以及用户所在客户端机器的IP所组成。
(2)单击端选项卡中的“选择试卷”将出现选择试卷界面。
如果用户成功登录,即和服务器建立连接并在服务器端创建了和其相关的文件,那么,用户再选择试卷界面可以将服务器上的试卷文件的名字存放到客户端界面中的下拉式列表中,然后再在下拉列表中选择一个试卷文件的名字提交给服务器。
(3)单击端选项卡中的“答卷”将出现答卷界面。
如果用户成功登录,并且用户通过“选择试卷”界面选择了一套试卷,那么用户在答卷界面可以从服务器读入所选试卷的内容,而且在“答卷”界面可以提交自己的答案给服务器、服务器将用户提交的答案存入用户登录时服务器所创建的和该用户相关的文件中。
提交答案后,在“答卷”界面可以查询分数。
2系统需求分析
2.1系统目标
通过本系统能够实现用户登录,选择试卷,完成试卷,查询分数等功能。
2.2主体功能
A.C/S模式,即客户端与服务器端都是Java应用程序;
B.输入服务器IP地址,连接服务器功能;
C.登录验证功能;
D.学生可以选择所要做的试题;
E.开始考试;
F.完成考试后,学生可以查看自己的分数、试题、正确答案、分值以及自己所选择的答案;
2.3开发环境
MyEclipse
3系统总体设计
3.1系统的功能模块划分
本系统主要有以下几个功能模块:
用户登录,选择试卷,完成试卷,查询分数等。
标准化考试系统
客户端窗口
完成试卷
用户登录
选择试卷
提交试卷
查询分数
退出系统
3.2系统流程图
N
Y
4系统详细设计
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创建的对象,该按钮将当前容器注册为自己的ActionEvent事件监视器。
2)方法
a、ClientLogin()是构造方法,用来创建clientLogin类。
b、actionPerformed(ActionEvent)方法是ClientLogin类实现ActionListener接口中的方法。
ClientLogin创建的容器startCon按钮的ActionEvent事件监视器,当用户单击该按钮时,容器将执行actionPerformed(ActionEvent)方法进行相应的操作。
3、主要程序代码
importjava.awt.*;
importjava.awt.event.*;
importjava.io.*;
import.*;
importjavax.swing.*;
publicclassClientLoginextendsJPanelimplementsActionListener{
StringverifyMess;
JTextFieldinputNumber,inputName,inputServerIP;
JLabelhintMess;
JButtonstartCon;
Stringnumber,name,IP;
publicClientLogin(){
inputNumber=newJTextField(10);
inputName=newJTextField(10);
hintMess=newJLabel("请输入学号、姓名和服务器的IP",JLabel.CENTER);
hintMess.setFont(newFont("隶书",Font.BOLD,18));
inputServerIP=newJTextField(10);
startCon=newJButton("提交");
startCon.addActionListener(this);
Boxbox1=Box.createHorizontalBox();
box1.add(newJLabel("输入学号:
",JLabel.CENTER));
box1.add(inputNumber);
Boxbox2=Box.createHorizontalBox();
box2.add(newJLabel("输入姓名:
",JLabel.CENTER));
box2.add(inputName);
Boxbox3=Box.createHorizontalBox();
box3.add(newJLabel("输入IP:
"));
box3.add(inputServerIP);
Boxbox4=Box.createHorizontalBox();
box4.add(newJLabel("单击提交按钮",JLabel.CENTER));
box4.add(startCon);
BoxboxH=Box.createVerticalBox();
boxH.add(box1);
boxH.add(box2);
boxH.add(box3);
boxH.add(box4);
JPanelpCenter=newJPanel();
pCenter.add(boxH);
pCenter.setBackground(newColor(210,210,110));
setLayout(newBorderLayout());
add(pCenter,BorderLayout.CENTER);
JPanelpNorth=newJPanel();
pNorth.setBackground(Color.green);
pNorth.add(hintMess);
add(pNorth,BorderLayout.NORTH);
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==startCon){
number=inputNumber.getText().trim();
name=inputName.getText().trim();
if(number.length()>0&&name.length()>0){
IP=inputServerIP.getText().trim();
try{
LoginThreadthread=newLoginThread(hintMess);
if(!
(thread.isAlive())){
thread=newLoginThread(hintMess);
thread.makeConnection(number,name,IP);
thread.start();
}
}
catch(Exceptionee){
hintMess.setText("无法连接"+ee);
}
}
else{
JOptionPane.showMessageDialog(this,"必须输入学号和姓名","警告",
JOptionPane.WARNING_MESSAGE);
}
}
}
}
classLoginThreadextendsThread{
Socketsocket;
InetSocketAddresssocketAddress;
DataInputStreamin;
DataOutputStreamout;
JLabelhintMess;
LoginThread(JLabelhint){
hintMess=hint;
}
publicvoidmakeConnection(Stringnumber,Stringname,StringIP)throwsIOException{
InetAddressaddress=InetAddress.getByName(IP);
socketAddress=newInetSocketAddress(address,6666);
socket=newSocket();
socket.connect(socketAddress);
in=newDataInputStream(socket.getInputStream());
out=newDataOutputStream(socket.getOutputStream());
out.writeUTF("学生"+number+""+name);
}
publicvoidrun(){
Strings=null;
while(true){
try{
s=in.readUTF();
if(s.startsWith("成功登录:
")){
StringverifyMess=s.substring(s.indexOf(":
")+1);
GetTestFile.setVerifyMess(verifyMess);
ClientTestArea.setVerifyMess(verifyMess);
GetTestFile.setSocketAddress(socketAddress);
ClientTestArea.setSocketAddress(socketAddress);
hintMess.setText(s);
Stringtishi="成功登录,请单击左侧的\"选择试卷界面\"";
JOptionPane.showMessageDialog(null,