📄 server_readscore.java
字号:
/*
创建日期 2006-4-18
* 作者:褚廷军
* 项目名称:学生考试系统;
* 项目要求:毕业设计;
* 模块名称:成绩评判模块
* 模块功能:接收用户答案与数据库中正确答案作比较
* 得出分数。返回到用户端,并将分数存入数据库
*
* 更改所生成文件模板为
* 窗口 > 首选项 > Java > 代码生成 > 代码和注释
*/
package tserver;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
// import java.sql.Connection;
// import java.sql.DriverManager;
// import java.sql.PreparedStatement;
// import java.sql.ResultSet;
// import java.sql.SQLException;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.StringTokenizer;
import tools.ConnectBean;
// 定义一个接收用户答案的类,判断对错,将分数返回到用户端,并将成绩存入数据库
public class Server_readScore extends Thread {
Socket socket;
DataOutputStream out = null;
DataInputStream in = null;
String[] userAnswer = new String[50], crreAnswer = new String[50];
/**
* @param socket
*/
public Server_readScore(Socket socket) {
// ----------------------创建网络连接----------------------------------//
this.socket = socket;
try {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
// ------------------------- 接收用户提交的答案---------------------------//
String str1 = "";// 接收用户名
String str2 = "";// 接收考试科目
String str3 = "";// 接收用户答案
String str4 = "";// 接收题目个数
int count = 0;
int uno = 0;
String dbk = ""; // 正确答案
String readkey = ""; // 用户答案
try {
readkey = in.readUTF();
System.out.println(readkey);
} catch (IOException e1) {
e1.printStackTrace();
}
StringTokenizer stc = new StringTokenizer(readkey, ",");
if (stc.hasMoreTokens()) {
// 客户传来答案的第一个字符为用户名,第二个字符为考试科目
str1 = stc.nextToken().trim();
System.out.println("用户为:" + str1);
uno = Integer.parseInt(str1);
}
if (stc.hasMoreTokens()) {
//第二个字符为考试科目
str2 = stc.nextToken().trim();
System.out.println("试题类型为:" + str2);
}
if (stc.hasMoreTokens()) {
str3 = null;
// 第三个为用户答案
str3 = stc.nextToken().trim();
System.out.println("用户答案为:" + str3);
int a = 0;
StringTokenizer rk = new StringTokenizer(str3, "@");
while (true) {
if (rk.hasMoreTokens()) {
userAnswer[a] = rk.nextToken();
System.out.println(userAnswer[a]);
++a;
} else
break;
}
if (stc.hasMoreTokens()) {
str4 = stc.nextToken().trim();
System.out.println("题目个数为:" + Integer.parseInt(str4));
}
}
// ------------------------------在数据库获取正确答案-------------------------//
try {
ConnectBean cb = new ConnectBean();
if (!cb.openConnection()) {
System.out.println("连接数据失败");
System.exit(1);
return;
}
String sql = "select tkey from exam where eid='" + str2 + "'";
cb.createPreparedStatement(sql, false);
ResultSet rs = cb.executeQuery();
while (rs.next()) {
dbk += rs.getString("tkey") + "*";
}
cb.close();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println("正确答案为:" + dbk);
int k = 0;
StringTokenizer rk = new StringTokenizer(dbk, "*");
while (true) {
if (rk.hasMoreTokens()) {
crreAnswer[k] = rk.nextToken();
System.out.println(crreAnswer[k]);
++k;
} else
break;
}
// ------------------------判断分数---------------------------------//
for (int i = 0; i <Integer.parseInt(str4); i++) {
if (userAnswer[i].equals(crreAnswer[i])) {
count += 10;
}
}
System.out.println("用户:" + str1 + ",你的得分为:" + count);
// 将分数返回到客户端
try {
out.writeUTF(Integer.toString(count));
System.out.println("将分数返回到客户端");
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
// ------------------------将分数存到数据库------------------------------//
try {
ConnectBean cb = new ConnectBean();
if (!cb.openConnection()) {
System.out.println("连接数据失败");
System.exit(1);
return;
}
String sql1 = "update stuinfo set escore = ? where sno= ?";
String sql2 = "update stuinfo set mscore = ? where sno= ?";
String subject = "";
if (str2.equals("e")) {
subject = sql1;
} else {
subject = sql2;
}
PreparedStatement ps = cb.createPreparedStatement(subject);
ps.setInt(1, count);
ps.setInt(2, uno);
ps.executeUpdate();
System.out.println("更新成功");
cb.commit();
cb.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
System.out.println("写入数据发生错误!!!/n" + e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -