You are on page 1of 158

int insertNumeric = 0;package control;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.BitSet;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.ExamCode;

import model.Student;

public class Final_NumericClientThread extends Thread {

Socket clientSocket;

Final_NumericServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream ooS;

ObjectInputStream ioS;

int numOperator = 0;

int operatorCode = -1;

String operatorType = null;

int[] intAnswers = null;

long[] longAnswers = null;

Answer answer = null;

Student student = null;


int intAnswer = 0;

long longAnswer = 0L;

String str1 = null;

String str2 = null;

String str3 = null;

int A = 0;

public Final_NumericClientThread(Socket s, Final_NumericServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

private boolean initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

if (this.student.getMaSV().trim().equalsIgnoreCase("")) {

System.out.println("SV may " + this.student.getIP() + " Nhap khong dung ma sv");

return false;

} else {

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.err.println(this.student.getIP() + " chua qua buoc 1");

return false;

} else {

this.answer.setStudent(this.student);

return true;

}
}

private void checkResponse(int code) throws IOException {

switch(code) {

case 1:

int uscln = this.is.readInt();

if (this.USCLN(this.A, this.convertString2Num_Ca2(this.str3)) == uscln) {

System.out.println("Ket qua: " + uscln + " Dung");

this.answer.updateAnswer(3, uscln, true);

} else {

System.err.println("Ket qua: " + uscln + " Sai");

this.answer.updateAnswer(3, uscln, false);

break;

case 2:

int bscnn = this.is.readInt();

if (this.BSCNN(this.intAnswers[0], this.intAnswers[1]) == bscnn) {

System.out.println("Ket qua: " + bscnn + " Dung");

this.answer.updateAnswer(4, bscnn, true);

} else {

System.err.println("Ket qua: " + bscnn + " Sai");

this.answer.updateAnswer(4, bscnn, false);

break;

case 3:

boolean isRight = true;

this.sortASC(this.intAnswers);

int[] results = this.insert(this.intAnswers, this.insertNumeric);

int i;
if (this.operatorCode == 1) {

for(i = 0; i < results.length; ++i) {

if (this.is.readInt() != results[i]) {

isRight = false;

break;

} else {

for(i = results.length - 1; i >= 0; --i) {

if (this.is.readInt() != results[i]) {

isRight = false;

break;

if (isRight) {

this.answer.updateAnswer(2, -1, true);

} else {

this.answer.updateAnswer(2, -1, false);

break;

case 4:

boolean isCoPrime = this.is.readBoolean();

this.answer.updateAnswer(4, isCoPrime, isCoPrime &


this.coprime(this.sumOfTheNumbers(this.str1), this.sumOfTheNumbers(this.str2)));

break;

case 5:

int harshad = this.is.readInt();


int num = this.convertString2Num_Ca1(this.str3);

int x = num;

int sum;

for(sum = 0; x > 0; x /= 10) {

int y = x % 10;

sum += y;

if ((num % sum != 0 || harshad != 1) && (num % sum == 0 || harshad != 0)) {

this.answer.updateAnswer(4, harshad, false);

} else {

this.answer.updateAnswer(4, harshad, true);

break;

case 6:

int countPrime = this.is.readInt();

if (countPrime == this.countPrimes(this.convertString2Num_Ca2(this.str3))) {

this.answer.updateAnswer(4, countPrime, true);

} else {

this.answer.updateAnswer(4, countPrime, false);

case 7:

default:

break;

case 8:

boolean isCoPrime_kip23 = this.is.readBoolean();

this.answer.updateAnswer(4, isCoPrime_kip23, isCoPrime_kip23 &


this.coprime(this.convertString2Num_Ca2(this.str1), this.convertString2Num_Ca2(this.str2)));
}

private void sendQuestion(int numOperator) throws IOException {

this.intAnswers = new int[numOperator];

for(int i = 0; i < numOperator; ++i) {

int tmp = (new Random()).nextInt(100) + 100;

this.os.writeInt(tmp);

this.intAnswers[i] = tmp;

public void run() {

try {

super.run();

this.ooS = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.ioS = new ObjectInputStream(this.clientSocket.getInputStream());

if (this.initiateStudentAnswer()) {

int code = this.is.readInt();

if (code == 0) {

this.str1 = this.randomSpaceNumericString_Ca2(3);

this.str2 = this.randomSpaceNumericString_Ca2(3);

this.os.writeUTF(this.str1);

this.os.writeUTF(this.str2);
this.checkResponse(8);

this.A = (new Random()).nextInt(10) + 100;

this.os.writeInt(this.A);

this.str3 = this.randomSpaceNumericString_Ca2(3);

this.os.writeUTF(this.str3);

this.checkResponse(1);

} else if (code == 1) {

this.A = (new Random()).nextInt(10) + 100;

this.os.writeInt(this.A);

this.str3 = this.randomSpaceNumericString_Ca2(3);

this.os.writeUTF(this.str3);

this.checkResponse(1);

this.str1 = this.randomSpaceNumericString_Ca2(3);

this.str2 = this.randomSpaceNumericString_Ca2(3);

this.os.writeUTF(this.str1);

this.os.writeUTF(this.str2);

this.checkResponse(8);

this.ooS.writeObject(this.answer);

String ack = this.is.readUTF();

if (ack.equalsIgnoreCase("OK")) {

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

return;

} catch (SocketException var33) {


System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var32) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var32);

return;

return;

} catch (IOException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var31) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var31);

}
if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var30);

return;

return;

} catch (Exception var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var29);

if (this.clientSocket != null) {

try {

this.clientSocket.close();
} catch (IOException var28) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var28);

return;

return;

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var27);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(Final_NumericClientThread.class.getName()).log(Level.SEVERE, (String)null,
var26);

}
}

public int sumOfTheNumbers(String stng) {

int l = stng.length();

int sum = 0;

String temp = "";

for(int i = 0; i < l; ++i) {

if (Character.isDigit(stng.charAt(i))) {

if (i < l - 1 && Character.isDigit(stng.charAt(i + 1))) {

temp = temp + stng.charAt(i);

} else {

temp = temp + stng.charAt(i);

sum += Integer.parseInt(temp);

temp = "";

return sum;

private String randomNumericString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

for(int i = 0; i < (new Random()).nextInt(7) + 1; ++i) {


int character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

builder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(character));

if ((new Random()).nextInt(2) == 1) {

int numCharacter = (int)(Math.random() * (double)"0123456789".length());

builder.append("0123456789".charAt(numCharacter));

if (count != 0) {

builder.append(" ");

return builder.toString();

private int gcd(int a, int b) {

if (a != 0 && b != 0) {

if (a == b) {

return a;

} else {

return a > b ? this.gcd(a - b, b) : this.gcd(a, b - a);

} else {

return 0;

}
private boolean coprime(int a, int b) {

return this.gcd(a, b) == 1;

private String randomSpaceNumericString_Ca1(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

builder.append(ExamCode.STRING_NUMERIC[(int)(Math.random() *
(double)ExamCode.STRING_NUMERIC.length)]);

builder.append(" ");

return builder.toString().trim();

private int convertString2Num_Ca1(String str) {

String[] nums = str.split(" ");

String strNum = "";

for(int i = 0; i < nums.length; ++i) {

String num = nums[i];

if (num.equalsIgnoreCase("khong")) {

strNum = strNum + "0";

} else if (num.equalsIgnoreCase("mot")) {

strNum = strNum + "1";

} else if (num.equalsIgnoreCase("hai")) {

strNum = strNum + "2";


} else if (num.equalsIgnoreCase("ba")) {

strNum = strNum + "3";

} else if (num.equalsIgnoreCase("bon")) {

strNum = strNum + "4";

} else if (num.equalsIgnoreCase("nam")) {

strNum = strNum + "5";

} else if (num.equalsIgnoreCase("sau")) {

strNum = strNum + "6";

} else if (num.equalsIgnoreCase("bay")) {

strNum = strNum + "7";

} else if (num.equalsIgnoreCase("tam")) {

strNum = strNum + "8";

} else if (num.equalsIgnoreCase("chin")) {

strNum = strNum + "9";

return Integer.valueOf(strNum);

private int convertString2Num_Ca2(String str) {

String strNum = "";

int nextUpper = 0;

for(int i = 0; i < str.length(); ++i) {

if (Character.isUpperCase(str.charAt(i)) && i > nextUpper || i == str.length() - 1) {

String word = "";

if (i == str.length() - 1) {

word = str.substring(nextUpper, i + 1);


} else {

word = str.substring(nextUpper, i);

if (word.equalsIgnoreCase("khong")) {

strNum = strNum + "0";

} else if (word.equalsIgnoreCase("mot")) {

strNum = strNum + "1";

} else if (word.equalsIgnoreCase("hai")) {

strNum = strNum + "2";

} else if (word.equalsIgnoreCase("ba")) {

strNum = strNum + "3";

} else if (word.equalsIgnoreCase("bon")) {

strNum = strNum + "4";

} else if (word.equalsIgnoreCase("nam")) {

strNum = strNum + "5";

} else if (word.equalsIgnoreCase("sau")) {

strNum = strNum + "6";

} else if (word.equalsIgnoreCase("bay")) {

strNum = strNum + "7";

} else if (word.equalsIgnoreCase("tam")) {

strNum = strNum + "8";

} else if (word.equalsIgnoreCase("chin")) {

strNum = strNum + "9";

nextUpper = i;

}
return Integer.valueOf(strNum);

private String randomSpaceNumericString_Ca2(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

builder.append(ExamCode.STRING_NUMERIC[(int)(Math.random() *
(double)ExamCode.STRING_NUMERIC.length)]);

return builder.toString().trim();

public int countPrimes(int n) {

if (n > 0 && n != 1) {

if (n != 3 && n != 2) {

BitSet set = new BitSet();

--n;

int s = (int)Math.sqrt((double)n);

int ctr = n;

for(int p = 2; p <= s; ++p) {

if (!set.get(p)) {

for(int q = 2; p * q <= n; ++q) {

if (!set.get(p * q)) {

--ctr;

set.set(p * q);
}

return ctr - 1;

} else {

return 1;

} else {

return 0;

private int USCLN(int a, int b) {

return b == 0 ? a : this.USCLN(b, a % b);

private long longUSCLN(long a, long b) {

return b == 0L ? a : this.longUSCLN(b, a % b);

private int BSCNN(int a, int b) {

return a * b / this.USCLN(a, b);

private long longBSCNN(long a, long b) {

return a * b / this.longBSCNN(a, b);

}
private void sortASC(int[] arr) {

int temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] > arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

private void sortLongASC(long[] arr) {

long temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] > arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}
}

private void sortDES(int[] arr) {

int temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] < arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

private void sortLongDES(long[] arr) {

long temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] < arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}
}

private boolean compare(Object[] arr, Object[] arr1) {

if (arr != null && arr1 != null && arr.length == arr1.length) {

for(int i = 0; i < arr.length; ++i) {

Object o1 = arr[i];

Object o2 = arr1[i];

if (o1 != o2) {

return false;

return true;

} else {

return false;

private int[] insert(int[] arr, int k) {

int arrIndex = arr.length - 1;

int tempIndex = arr.length;

int[] tempArr = new int[tempIndex + 1];

boolean inserted = false;

for(int i = tempIndex; i >= 0; --i) {

if (arrIndex > -1 && arr[arrIndex] > k) {

tempArr[i] = arr[arrIndex--];

} else if (!inserted) {
tempArr[i] = k;

inserted = true;

} else {

tempArr[i] = arr[arrIndex--];

return tempArr;

2.

package control;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.SocketException;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;
public class Final_NumericServer extends Thread {

Server mainServerThread;

ServerSocket server = null;

public Final_NumericServer(ServerSocket ss) {

this.server = ss;

public void updateView(Student student) {

this.mainServerThread.updateView(student);

public synchronized void updateAnswerList(Answer answer) {

this.mainServerThread.updateAnswerList(answer);

public Answer getAnswer(Student student) {

return this.mainServerThread.getAnswer(student);

public void addStudent(Student s) {

this.mainServerThread.addStudent(s);

public Final_NumericServer(Server main) {

this.mainServerThread = main;

public void listening() throws IOException {


while(true) {

try {

Socket clientSocket = this.server.accept();

Final_NumericClientThread clientThread = new Final_NumericClientThread(clientSocket, this);

clientThread.start();

} catch (SocketException var3) {

System.out.println(" ------- Loi client ------- ");

var3.printStackTrace();

public void openServer() {

try {

this.server = new ServerSocket(11002);

} catch (IOException var2) {

System.out.println(var2);

public void run() {

super.run();

try {

this.openServer();

this.listening();

} catch (IOException var2) {

Logger.getLogger(Final_NumericServer.class.getName()).log(Level.SEVERE, (String)null, var2);


}

3.

package control;

import java.rmi.Remote;

import java.rmi.RemoteException;

import model.ServerConfiguration;

import model.Student;

public interface IRMIServer extends Remote {

ServerConfiguration getStringServerDes(Student var1, ServerConfiguration var2) throws


RemoteException;

ServerConfiguration getNumericServerDes(Student var1, ServerConfiguration var2) throws


RemoteException;

4.

package control;

import java.io.DataInputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.logging.Level;
import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class ObjectClientThread extends Thread {

Socket clientSocket;

ObjectServer serverControl;

ObjectInputStream is;

ObjectOutputStream os;

DataInputStream dis;

Answer answer = null;

Student student = null;

public ObjectClientThread(Socket s, ObjectServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

public boolean checkStudentAnswer() {

try {

this.student = (Student)this.is.readObject();

if (this.student.getMaSV() == null) {

return false;

this.serverControl.addStudent(this.student);

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {
System.out.println("Got a new registration, initiate answer");

this.answer = new Answer(this.student);

this.answer.setAlreadyRegistration(true);

} else {

this.answer.setStudent(this.student);

this.answer.setAlreadyRegistration(true);

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

return true;

} catch (IOException var7) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var7.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var6) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var6);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var5) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var5);


}

} catch (ClassNotFoundException var8) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var8.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var4) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var4);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var3) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var3);

return false;

public void run() {

super.run();
try {

this.os = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.is = new ObjectInputStream(this.clientSocket.getInputStream());

this.dis = new DataInputStream(this.clientSocket.getInputStream());

this.checkStudentAnswer();

this.os.writeObject(this.answer);

} catch (SocketException var31) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var31.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var30);

} catch (IOException var32) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var32.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var29);

}
}

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var28);

} catch (Exception var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var27);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var26);

}
} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var25) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var25);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var24) {

Logger.getLogger(ObjectClientThread.class.getName()).log(Level.SEVERE, (String)null, var24);

5.

package control;

import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;
import java.net.SocketException;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class ObjectServer extends Thread {

Server mainServerThread;

ServerSocket myServer = null;

Student input;

public ObjectServer(ServerSocket ss) {

this.myServer = ss;

public void updateView(Student student) {

this.mainServerThread.updateView(student);

public synchronized void updateAnswerList(Answer answer) {

this.mainServerThread.updateAnswerList(answer);

public Answer getAnswer(Student student) {

return this.mainServerThread.getAnswer(student);

public void addStudent(Student s) {

this.mainServerThread.addStudent(s);
}

public ObjectServer(Server main) {

this.mainServerThread = main;

public void listening() throws IOException {

while(true) {

try {

Socket clientSocket = this.myServer.accept();

ObjectClientThread clientThread = new ObjectClientThread(clientSocket, this);

clientThread.start();

} catch (SocketException var3) {

System.out.println(" ------- Loi client ------- ");

var3.printStackTrace();

public void openServer() {

try {

this.myServer = new ServerSocket(11050);

} catch (IOException var2) {

System.out.println(var2);

public void run() {


super.run();

this.openServer();

try {

this.listening();

} catch (IOException var2) {

Logger.getLogger(ObjectServer.class.getName()).log(Level.SEVERE, (String)null, var2);

6.

package control;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import java.rmi.registry.Registry;

import java.rmi.server.UnicastRemoteObject;

import java.util.ArrayList;

import java.util.Iterator;

import model.ServerConfiguration;

import model.Student;

public class RMIServer extends UnicastRemoteObject implements IRMIServer {

ArrayList<Student> studentGetDesList = new ArrayList();

private boolean isExist(String maSV) {

if (this.studentGetDesList != null) {
Iterator it = this.studentGetDesList.iterator();

Student next;

do {

if (!it.hasNext()) {

return false;

next = (Student)it.next();

} while(!next.getMaSV().equalsIgnoreCase(maSV));

return true;

} else {

return false;

public RMIServer() throws RemoteException {

Registry reg = LocateRegistry.createRegistry(4444);

reg.rebind("Ca2_Server", this);

public synchronized ServerConfiguration getStringServerDes(Student student, ServerConfiguration


config) throws RemoteException {

if (this.studentGetDesList == null) {

this.studentGetDesList = new ArrayList();

if (student.getMaSV() != null && !student.getMaSV().trim().equalsIgnoreCase("")) {


if (!this.isExist(student.getMaSV())) {

this.studentGetDesList.add(student);

config.setStringServerPort(11001);

config.setCode(Integer.valueOf(student.getMaSV().trim().charAt(student.getMaSV().length() - 1)) %
2);

return config;

} else {

return null;

public synchronized ServerConfiguration getNumericServerDes(Student student, ServerConfiguration


config) throws RemoteException {

if (this.studentGetDesList == null) {

this.studentGetDesList = new ArrayList();

if (student.getMaSV() != null && !student.getMaSV().trim().equalsIgnoreCase("")) {

if (!this.isExist(student.getMaSV())) {

this.studentGetDesList.add(student);

config.setNumericServerPort(11002);

config.setCode(Integer.valueOf(student.getMaSV().trim().charAt(student.getMaSV().length() - 1)) %
2);

return config;

} else {

return null;
}

public ArrayList<Student> getStudentGetDesList() {

return this.studentGetDesList;

7.

package control;

import java.rmi.RemoteException;

import java.util.ArrayList;

import java.util.Iterator;

import model.Answer;

import model.Student;

import view.ClientList;

public class Server {

ObjectServer objectServerThread = null;

Final_NumericServer numericServerThread = null;

StringServer stringServerThread = null;

IRMIServer rmiServer = null;

Student input;

ClientList view;

ArrayList<Student> svList = new ArrayList();

ArrayList<Answer> answerList = new ArrayList();

public Server(ClientList v) {

this.view = v;
this.view.setVisible(true);

public void openServer() throws RemoteException {

this.rmiServer = new RMIServer();

this.objectServerThread = new ObjectServer(this);

this.objectServerThread.start();

this.stringServerThread = new StringServer(this);

this.stringServerThread.start();

this.numericServerThread = new Final_NumericServer(this);

this.numericServerThread.start();

public synchronized void addStudent(Student s) {

if (this.svList == null) {

this.svList = new ArrayList();

this.svList.add(s);

} else {

Iterator<Student> it = this.svList.iterator();

boolean isNew = true;

while(it.hasNext()) {

Student next = (Student)it.next();

if (s.getMaSV() != null && next.getMaSV() != null &&


next.getMaSV().equalsIgnoreCase(s.getMaSV())) {

isNew = false;

break;

}
if (isNew) {

this.svList.add(s);

public Student getStudent(String maSV) {

Iterator it = this.svList.iterator();

Student next;

do {

if (!it.hasNext()) {

return null;

next = (Student)it.next();

} while(!next.getMaSV().equalsIgnoreCase(maSV));

return next;

public Answer getAnswer(Student student) {

Iterator it = this.answerList.iterator();

Answer next;

do {

if (!it.hasNext()) {
return null;

next = (Answer)it.next();

} while(!next.getStudent().getMaSV().equalsIgnoreCase(student.getMaSV()));

return next;

public synchronized void updateAnswerList(Answer answer) {

System.out.println("--- answer.isAlreadyRegistration() ---" + answer.isAlreadyRegistration());

Iterator<Answer> it = this.answerList.iterator();

boolean isUpdate = false;

while(it.hasNext()) {

Answer next = (Answer)it.next();

if (next.getStudent().getMaSV().equalsIgnoreCase(answer.getStudent().getMaSV())) {

isUpdate = true;

next.setAnswers(answer.getAnswers());

next.setIsRights(answer.getIsRights());

next.setQuestions(answer.getQuestions());

if (!isUpdate) {

this.answerList.add(answer);

}
public synchronized void updateView(Student student) {

Iterator it = this.answerList.iterator();

while(it.hasNext()) {

Answer next = (Answer)it.next();

if (next.getStudent().getMaSV().equalsIgnoreCase(student.getMaSV())) {

this.view.updateAnswerView(next);

break;

public static void main(String[] args) {

8.

package control;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;
import model.Answer;

import model.StringExam;

import model.Student;

public class StringClientThread extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream objectStream;

StringExam stringExam;

Answer answer = null;

Student student = null;

public StringClientThread(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

private boolean initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

if (this.student.getMaSV().trim().equalsIgnoreCase("")) {

System.out.println("SV may " + this.student.getIP() + " Nhap khong dung ma sv");

return false;

} else {

this.answer = this.serverControl.getAnswer(this.student);
if (this.answer == null) {

System.err.println(this.student.getIP() + " chua qua buoc 1");

return false;

} else {

this.answer.setStudent(this.student);

return true;

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

this.answer.updateAnswer(1, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());
case 4:

case 7:

default:

break;

case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 6:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("So ky tu duy nhat nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Xau moi là :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 8:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Xau chuan hoa la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 9:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Xau có từ đảo ngược :" + this.stringExam.getStringAnswer());

System.out.println("Số từ là :" + this.stringExam.getNumericAnswer());


this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 10:

this.stringExam.setStringAnswer(this.is.readUTF());

String[] strs = this.stringExam.getStringOrg().trim().split(" ");

String strAnswer = "";

for(int i = 0; i < strs.length; ++i) {

String word = strs[i];

for(int j = 0; j < word.length(); ++j) {

strAnswer = strAnswer + (char)(word.charAt(j) +


Integer.valueOf(this.student.getMaSV().trim().substring(this.student.getMaSV().trim().length() - 1)));

strAnswer = strAnswer + " ";

strAnswer = strAnswer.trim();

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(),
strAnswer.equals(this.stringExam.getStringAnswer()));

break;

case 11:

this.stringExam.setCharAnswer(this.is.readChar());

this.answer.updateAnswer(1, this.stringExam.getCharAnswer(), this.stringExam.isRightAnswer());

}
public void run() {

try {

super.run();

this.objectStream = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.is = new DataInputStream(this.clientSocket.getInputStream());

if (!this.initiateStudentAnswer()) {

return;

int code = (new Random()).nextInt(2);

this.os.writeInt(code);

if (code == 0) {

this.stringExam.stringGenerate(11);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.stringExam.stringGenerate(10);

this.os.writeUTF(this.stringExam.getStringOrg());

this.os.writeInt(Integer.valueOf(this.student.getMaSV().trim().substring(this.student.getMaSV().trim().le
ngth() - 1)));

this.checkResponse();

} else if (code == 1) {

this.stringExam.stringGenerate(10);

this.os.writeUTF(this.stringExam.getStringOrg());

this.os.writeInt(Integer.valueOf(this.student.getMaSV().trim().substring(this.student.getMaSV().trim().le
ngth() - 1)));

this.checkResponse();

this.stringExam.stringGenerate(11);
this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.objectStream.writeObject(this.answer);

String ack = this.is.readUTF();

if (ack.equalsIgnoreCase("ok")) {

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

} catch (SocketException var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var32) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var32);

} catch (IOException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();
} catch (IOException var31) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var31);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var30);

} catch (Exception var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var29);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {


Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var28);

} finally {

System.out.println(" finally Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var27);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var26);

9.

package control;
import java.io.IOException;

import java.net.ServerSocket;

import java.net.Socket;

import java.net.SocketException;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class StringServer extends Thread {

Server mainServerThread;

ServerSocket myServer = null;

Student input;

public void run() {

try {

super.run();

this.openServer();

this.listening();

} catch (IOException var2) {

Logger.getLogger(StringServer.class.getName()).log(Level.SEVERE, (String)null, var2);

public StringServer(ServerSocket ss) {

this.myServer = ss;

}
public StringServer(Server main) {

this.mainServerThread = main;

public void openServer() {

try {

this.myServer = new ServerSocket(11001);

} catch (IOException var2) {

System.out.println(var2);

public void updateView(Student student) {

this.mainServerThread.updateView(student);

public synchronized void updateAnswerList(Answer answer) {

this.mainServerThread.updateAnswerList(answer);

public Answer getAnswer(Student student) {

return this.mainServerThread.getAnswer(student);

public void addStudent(Student s) {

this.mainServerThread.addStudent(s);

}
public void listening() throws IOException {

while(true) {

try {

Socket clientSocket = this.myServer.accept();

StringClientThread clientThread = new StringClientThread(clientSocket, this);

clientThread.start();

} catch (SocketException var3) {

System.out.println(" ------- Loi client ------- ");

var3.printStackTrace();

public void close() {

try {

this.myServer.close();

} catch (IOException var2) {

var2.printStackTrace();

2.1.

package model;

import java.io.Serializable;

public class Answer implements Serializable {

static final long serialVersionUID = 2L;


Student student;

Object[] answers = null;

boolean[] isRights;

String[] viewString;

boolean alreadyRegistration = false;

StringExam[] questions = null;

public boolean isAlreadyRegistration() {

return this.alreadyRegistration;

public void setAlreadyRegistration(boolean alreadyRegistration) {

this.alreadyRegistration = alreadyRegistration;

public String[] getViewString() {

return this.viewString;

public void setViewString(String[] result) {

this.viewString = result;

public StringExam[] getQuestions() {

return this.questions;

public Object[] getAnswers() {

return this.answers;
}

public boolean[] getIsRights() {

return this.isRights;

public Answer() {

this.answers = new Object[5];

this.questions = new StringExam[5];

this.isRights = new boolean[5];

this.viewString = new String[5];

public void setQuestions(StringExam[] questions) {

this.questions = questions;

public void setAnswers(Object[] answers) {

this.answers = answers;

public void setIsRights(boolean[] isRights) {

this.isRights = isRights;

public Answer(Student student) {

this.student = student;

this.answers = new Object[5];

this.questions = new StringExam[5];


this.isRights = new boolean[5];

this.viewString = new String[5];

public Student getStudent() {

return this.student;

public void setStudent(Student student) {

this.student = student;

public boolean[] getIsRight() {

return this.isRights;

public boolean updateAnswer(int code, Object answer, boolean isRight) {

this.answers[code] = answer;

this.isRights[code] = isRight;

if (this.viewString == null) {

this.viewString = new String[5];

if (isRight) {

this.viewString[code] = "Đúng";

} else {

this.viewString[code] = "Sai";

}
return this.isRights[code];

public boolean isMyAnswer(String maSV) {

if (this.student != null && this.student.getMaSV() != null) {

return this.student.getMaSV().equalsIgnoreCase(maSV);

} else {

System.err.println("Chua co sinh vien nay !");

return false;

2.2.

package model;

public class ExamCode {

public static final String ALPHA_STRING =


"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ";

public static final String NUMERIC_STRING = "0123456789";

public static final String[] STRING_NUMERIC = new String[]{"Khong", "Mot", "Hai", "Ba", "Bon", "Nam",
"Sau", "Bay", "Tam", "Chin"};

public static final String SPECIAL_STRING = "~!@#$%^&*()><-`/";

public static final int NUMCHAROFSTRING = 1;

public static final int REVERSESTRING = 2;

public static final int UPPERLOWER = 3;

public static final int NUMSPECIALCHAR = 4;

public static final int STRING2NUMERIC = 5;

public static final int UNIQUECHARACTER = 6;

public static final int COUNTSUBSTRING = 7;


public static final int NORMALIZATION = 8;

public static final int REVERSEWORDINSTRING = 9;

public static final int CAESARSTRING = 10;

public static final int SECONDCHAR = 11;

public static final int SUBSTRING = 12;

2.3.

package model;

public class NumericExam {

public static int USCLN(int a, int b) {

return b == 0 ? a : USCLN(b, a % b);

public static int BSCNN(int a, int b) {

return a * b / USCLN(a, b);

public static int count(String string, String substring) {

int count = 0;

for(int idx = 0; (idx = string.indexOf(substring, idx)) != -1; ++count) {

++idx;

return count;

2.4.
package model;

import java.io.Serializable;

public class ServerConfiguration implements Serializable {

static final long serialVersionUID = 3L;

String rmiServerName = "";

int rmiPort = 0;

int stringServerPort = 0;

int numericServerPort = 0;

int code = 0;

public String getRmiServerName() {

return this.rmiServerName;

public void setRmiServerName(String rmiServerName) {

this.rmiServerName = rmiServerName;

public int getRmiPort() {

return this.rmiPort;

public void setRmiPort(int rmiPort) {

this.rmiPort = rmiPort;

public int getCode() {


return this.code;

public void setCode(int code) {

this.code = code;

public int getStringServerPort() {

return this.stringServerPort;

public void setStringServerPort(int stringServerPort) {

this.stringServerPort = stringServerPort;

public int getNumericServerPort() {

return this.numericServerPort;

public void setNumericServerPort(int numericServerPort) {

this.numericServerPort = numericServerPort;

2.5.

package model;

import java.util.BitSet;

import java.util.Random;

import java.util.StringTokenizer;
public class StringExam {

private String stringOrg = null;

private int code;

private int numericAnswer = 0;

private String stringAnswer = null;

private char charAnswer;

public char getCharAnswer() {

return this.charAnswer;

public void setCharAnswer(char charAnswer) {

this.charAnswer = charAnswer;

public StringExam() {

public StringExam(int code, String strOrg) {

this.code = code;

this.stringOrg = strOrg;

public void setNumericAnswer(int numericAnswer) {

this.numericAnswer = numericAnswer;

public void setStringAnswer(String stringAnswer) {


this.stringAnswer = stringAnswer;

public int getNumericAnswer() {

return this.numericAnswer;

public String getStringAnswer() {

return this.stringAnswer;

public String getStringOrg() {

return this.stringOrg;

public int getCode() {

return this.code;

public void setStringOrg(String stringOrg) {

this.stringOrg = stringOrg;

public void setCode(int code) {

this.code = code;

public boolean isRightAnswer() {

if (this.stringOrg == null) {
System.err.println("Issue with original String");

return false;

} else {

switch(this.code) {

case 1:

return this.stringOrg.length() == this.numericAnswer;

case 2:

return this.reverse().equals(this.stringAnswer);

case 3:

return this.stringOrg.equals(this.stringAnswer);

case 4:

return this.countSpecialChar() == this.numericAnswer;

case 5:

return this.string2numeric() == this.numericAnswer;

case 6:

String tmp = "";

int i = 0;

for(; i < this.stringOrg.length(); ++i) {

if (tmp.indexOf(this.stringOrg.charAt(i)) == -1) {

tmp = tmp + this.stringOrg.charAt(i);

return this.numericAnswer == tmp.length() && this.stringAnswer.equalsIgnoreCase(tmp);

case 7:

case 10:

default:

return false;
case 8:

return this.stringAnswer.equals(this.chuanHoa(this.stringOrg));

case 9:

return this.stringOrg.split(" ").length == this.numericAnswer &&


this.stringAnswer.equals(this.reverseEachWordInString(this.stringOrg));

case 11:

return this.charAnswer == this.get2ndMostFreq(this.stringOrg);

public void stringGenerate(int code) {

this.code = code;

switch(this.code) {

case 1:

this.stringOrg = this.randomAlphaString((new Random()).nextInt(10) + 10);

break;

case 2:

this.stringOrg = this.randomAlphaString((new Random()).nextInt(10) + 10);

break;

case 3:

this.stringOrg = this.randomAlphaString((new Random()).nextInt(10) + 10);

break;

case 4:

this.stringOrg = this.randomSpecialString((new Random()).nextInt(10) + 10);

break;

case 5:

this.stringOrg = this.randomNumericString((new Random()).nextInt(9) + 1);

break;
case 6:

this.stringOrg = this.randomAlphaString((new Random()).nextInt(50) + 52);

case 7:

default:

break;

case 8:

this.stringOrg = this.randomAlphaSpaceString((new Random()).nextInt(10) + 10);

break;

case 9:

this.stringOrg = this.randomAlphaSpaceString((new Random()).nextInt(10) + 10);

break;

case 10:

this.stringOrg = this.randomAlphaSpaceString((new Random()).nextInt(10) + 20);

break;

case 11:

this.stringOrg = this.randomAlphaString((new Random()).nextInt(10) + 20);

break;

case 12:

this.stringOrg = this.randomAlphaSpaceString((new Random()).nextInt(10) + 10);

private String randomAlphaString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

int character = (int)(Math.random() *


(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());
builder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(character));

return builder.toString();

private String randomAlphaSpaceString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

for(int i = 0; i < (new Random()).nextInt(7) + 1; ++i) {

int character = (int)(Math.random() *


(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

builder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(character));

if (count != 0) {

builder.append(" ");

return builder.toString().trim();

private String randomNumericString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {
for(int i = 0; i < (new Random()).nextInt(7) + 1; ++i) {

int character = (int)(Math.random() *


(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

builder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(character));

if ((new Random()).nextInt(2) == 1) {

int numCharacter = (int)(Math.random() * (double)"0123456789".length());

builder.append("0123456789".charAt(numCharacter));

if (count != 0) {

builder.append(" ");

System.out.println(builder);

return builder.toString();

private String randomSpecialString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

int choice = (new Random()).nextInt(5) + 5;

int character = 0;

//int character;

if (choice % 2 == 0) {

character = (int)(Math.random() * (double)"~!@#$%^&*()><-`/".length());


builder.append("~!@#$%^&*()><-`/".charAt(character));

} else {

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

builder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(character));

return builder.toString();

private String randomSpaceNumericString(int count) {

StringBuilder builder = new StringBuilder();

while(count-- != 0) {

builder.append(ExamCode.STRING_NUMERIC[(int)(Math.random() *
(double)ExamCode.STRING_NUMERIC.length)]);

System.out.println(builder);

return builder.toString().trim();

public int countSubstring(String string, String substring) {

int count = 0;

for(int idx = 0; (idx = string.indexOf(substring, idx)) != -1; ++count) {

++idx;

}
return count;

private int countSpecialChar() {

return 0;

private String reverse() {

String tmp = "";

for(int i = this.stringOrg.length() - 1; i >= 0; --i) {

tmp = tmp + this.stringOrg.substring(i, i + 1);

return tmp;

private String upperLower() {

return null;

private int string2numeric() {

return 0;

public String chuyenInHoa(String str) {

String s = str.substring(0, 1);

String strOutput = str.replaceFirst(s, s.toUpperCase());


return strOutput;

public String chuanHoa(String strInput) {

String strOutput = "";

StringTokenizer strToken = new StringTokenizer(strInput, " ,\t,\r");

for(strOutput = strOutput + "" + this.chuyenInHoa(strToken.nextToken());


strToken.hasMoreTokens(); strOutput = strOutput + " " + this.chuyenInHoa(strToken.nextToken())) {

return strOutput;

public String reverseEachWordInString(String str1) {

String[] each_words = str1.split(" ");

String revString = "";

for(int i = 0; i < each_words.length; ++i) {

String word = each_words[i];

String reverseWord = "";

for(int j = word.length() - 1; j >= 0; --j) {

reverseWord = reverseWord + word.charAt(j);

revString = revString + reverseWord + " ";

}
return revString.trim();

public char get2ndMostFreq(String str1) {

int[] ctr = new int[256];

int i;

for(i = 0; i < str1.length(); ++i) {

++ctr[str1.charAt(i)];

int ctr_first = 0;

int ctr_second = 0;

for(i = 0; i < 256; ++i) {

if (ctr[i] > ctr[ctr_first]) {

ctr_second = ctr_first;

ctr_first = i;

} else if (ctr[i] > ctr[ctr_second] && ctr[i] != ctr[ctr_first]) {

ctr_second = i;

return (char)ctr_second;

public int sumOfTheNumbers(String stng) {

int l = stng.length();

int sum = 0;
String temp = "";

for(int i = 0; i < l; ++i) {

if (Character.isDigit(stng.charAt(i))) {

if (i < l - 1 && Character.isDigit(stng.charAt(i + 1))) {

temp = temp + stng.charAt(i);

} else {

temp = temp + stng.charAt(i);

sum += Integer.parseInt(temp);

temp = "";

return sum;

private int gcd(int a, int b) {

if (a != 0 && b != 0) {

if (a == b) {

return a;

} else {

return a > b ? this.gcd(a - b, b) : this.gcd(a, b - a);

} else {

return 0;

}
private boolean coprime(int a, int b) {

return this.gcd(a, b) == 1;

private int convertString2Num_Ca2(String str) {

String strNum = "";

int nextUpper = 0;

for(int i = 0; i < str.length(); ++i) {

if (Character.isUpperCase(str.charAt(i)) && i > nextUpper || i == str.length() - 1) {

String word = "";

if (i == str.length() - 1) {

word = str.substring(nextUpper, i + 1);

} else {

word = str.substring(nextUpper, i);

if (word.equalsIgnoreCase("khong")) {

strNum = strNum + "0";

} else if (word.equalsIgnoreCase("mot")) {

strNum = strNum + "1";

} else if (word.equalsIgnoreCase("hai")) {

strNum = strNum + "2";

} else if (word.equalsIgnoreCase("ba")) {

strNum = strNum + "3";

} else if (word.equalsIgnoreCase("bon")) {

strNum = strNum + "4";

} else if (word.equalsIgnoreCase("nam")) {

strNum = strNum + "5";


} else if (word.equalsIgnoreCase("sau")) {

strNum = strNum + "6";

} else if (word.equalsIgnoreCase("bay")) {

strNum = strNum + "7";

} else if (word.equalsIgnoreCase("tam")) {

strNum = strNum + "8";

} else if (word.equalsIgnoreCase("chin")) {

strNum = strNum + "9";

nextUpper = i;

return Integer.valueOf(strNum);

public int countPrimes(int n) {

if (n > 0 && n != 1) {

if (n != 3 && n != 2) {

BitSet set = new BitSet();

--n;

int s = (int)Math.sqrt((double)n);

int ctr = n;

for(int p = 2; p <= s; ++p) {

if (!set.get(p)) {

for(int q = 2; p * q <= n; ++q) {

if (!set.get(p * q)) {
--ctr;

set.set(p * q);

return ctr - 1;

} else {

return 1;

} else {

return 0;

public static void main(String[] args) {

StringExam test = new StringExam();

System.out.println(test.countPrimes(9999));

System.out.println("11000;" + "dsjfkhs14".charAt(8) % 2);

2.6

package model;

import java.io.Serializable;

public class Student implements Serializable {

static final long serialVersionUID = 1L;


private String maSV;

private String hovaten;

private String IP;

private int group;

public int getGroup() {

return this.group;

public Student(String maSV, String hovaten, String IP, int group) {

this.maSV = maSV;

this.hovaten = hovaten;

this.IP = IP;

this.group = group;

public String getMaSV() {

return this.maSV;

public String getHovaten() {

return this.hovaten;

public String getIP() {

return this.IP;

public void setMaSV(String maSV) {


this.maSV = maSV;

public void setHovaten(String hovaten) {

this.hovaten = hovaten;

public void setIP(String IP) {

this.IP = IP;

public void setGroup(int nhom) {

this.group = nhom;

3.

package server;

import control.Server;

import java.io.IOException;

import view.ClientList;

public class FinalTest {

public static void main(String[] args) throws ClassNotFoundException, IOException {

ClientList view = new ClientList();

Server multiServer = new Server(view);

multiServer.openServer();

}
4.1.

package tmp;

import control.Server;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Student;

public class ClientThread extends Thread {

Socket clientSocket;

Server serverControl;

ObjectInputStream is;

ObjectOutputStream os;

public ClientThread(Socket s, Server serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

public void run() {

try {

super.run();

this.is = new ObjectInputStream(this.clientSocket.getInputStream());

this.os = new ObjectOutputStream(this.clientSocket.getOutputStream());


Object o = this.is.readObject();

if (o instanceof Student) {

Student input = (Student)o;

if (this.clientSocket.getInetAddress().getHostAddress() != null &&


this.clientSocket.getInetAddress() != null && this.clientSocket != null) {

input.setIP(this.clientSocket.getInetAddress().getHostAddress());

} else {

input.setIP("NaN");

this.serverControl.addStudent(input);

this.is.close();

this.os.close();

this.clientSocket.close();

} else {

System.out.println("O is not a instance of Student" + o.getClass());

this.is.close();

this.os.close();

this.clientSocket.close();

} catch (SocketException var38) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var38.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var37) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var37);


}

} catch (IOException var39) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var39.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var36) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var36);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var35) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var35);

} catch (ClassNotFoundException var40) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var40.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();
this.os.close();

} catch (IOException var34) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var34);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var33) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var33);

} catch (Exception var41) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var41.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var32) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var32);

if (this.clientSocket != null) {

try {

this.clientSocket.close();
} catch (IOException var31) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var31);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var30) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var30);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var29) {

Logger.getLogger(ClientThread.class.getName()).log(Level.SEVERE, (String)null, var29);

4.2

package tmp;
import control.Final_NumericServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class NumericClientThread_20102018 extends Thread {

Socket clientSocket;

Final_NumericServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream ooS;

int numOperator = 0;

int operatorCode = -1;

String operatorType = null;

int[] intAnswers = null;

float[] floatAnswers = null;

Answer answer = null;

Student student = null;

int intAnswer = 0;

float floatAnswer = 0.0F;


public NumericClientThread_20102018(Socket s, Final_NumericServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse() throws IOException {

int returnOperatorCode = this.is.readInt();

int i;

if (this.operatorType.equalsIgnoreCase("java.lang.Integer")) {

int answer = this.is.readInt();

switch(returnOperatorCode) {

case 1:

int sum = 0;
for(i = 0; i < this.numOperator; ++i) {

sum += this.intAnswers[i];

this.intAnswer = sum / this.numOperator;

if (this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(2, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(2, answer, false);

break;

case 2:

this.intAnswer = this.intAnswers[0];

for(i = 1; i < this.numOperator; ++i) {

if (this.intAnswer < this.intAnswers[i]) {

this.intAnswer = this.intAnswers[i];

if (this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(3, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(3, answer, false);

}
break;

case 3:

this.intAnswer = this.intAnswers[0];

for(i = 1; i < this.numOperator; ++i) {

if (this.intAnswer > this.intAnswers[i]) {

this.intAnswer = this.intAnswers[i];

if (this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(4, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(4, answer, false);

} else {

float answer = this.is.readFloat();

switch(this.operatorCode) {

case 1:

float sum = 0.0F;

for(i = 0; i < this.numOperator; ++i) {

sum += this.floatAnswers[i];

this.floatAnswer = sum / (float)this.numOperator;


if ((float)this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(2, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(2, answer, false);

break;

case 2:

this.floatAnswer = this.floatAnswers[0];

for(i = 1; i < this.numOperator; ++i) {

if (this.floatAnswer < this.floatAnswers[i]) {

this.floatAnswer = this.floatAnswers[i];

if ((float)this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(3, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(3, answer, false);

break;

case 3:

this.floatAnswer = this.floatAnswers[0];

for(i = 1; i < this.numOperator; ++i) {


if (this.floatAnswer > this.floatAnswers[i]) {

this.floatAnswer = this.floatAnswers[i];

if ((float)this.intAnswer == answer) {

System.out.println("Ket qua: " + answer + " Dung");

this.answer.updateAnswer(4, answer, true);

} else {

System.err.println("Ket qua: " + answer + " Sai");

this.answer.updateAnswer(4, answer, false);

this.ooS.writeObject(this.answer);

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

private void sendQuestion() throws IOException {

this.numOperator = (new Random()).nextInt(10) + 10;

this.os.writeInt(this.numOperator);

if ((new Random()).nextInt(1) == 0) {

this.operatorType = "java.lang.Integer";

} else {

this.operatorType = "java.lang.Float";

}
this.os.writeUTF(this.operatorType);

int i;

if (this.operatorType.equalsIgnoreCase("java.lang.Integer")) {

this.intAnswers = new int[this.numOperator];

for(i = 0; i < this.numOperator; ++i) {

int tmp = (new Random()).nextInt(10) + 100;

this.os.writeInt(tmp);

this.intAnswers[i] = tmp;

} else {

this.floatAnswers = new float[this.numOperator];

for(i = 0; i < this.numOperator; ++i) {

float tmp = (new Random()).nextFloat() + (float)(new Random()).nextInt(500);

this.os.writeFloat(tmp);

this.floatAnswers[i] = tmp;

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.ooS = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();
this.sendQuestion();

this.checkResponse();

this.checkResponse();

this.checkResponse();

} catch (SocketException var31) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var31.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var30);

} catch (IOException var32) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var32.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var29);

}
if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var28);

} catch (Exception var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var27);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var26);

}
}

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var25) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var25);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var24) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var24);

4.3

package tmp;
import control.Final_NumericServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class NumericClientThread_25102018 extends Thread {

Socket clientSocket;

Final_NumericServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream ooS;

int numOperator = 0;

int operatorCode = -1;

String operatorType = null;

int[] intAnswers = null;

long[] longAnswers = null;

Answer answer = null;

Student student = null;

int intAnswer = 0;

long longAnswer = 0L;


public NumericClientThread_25102018(Socket s, Final_NumericServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse(int code) throws IOException {

switch(code) {

case 1:

int uscln = this.is.readInt();

if (this.USCLN(this.intAnswers[0], this.intAnswers[1]) == uscln) {

System.out.println("Ket qua: " + uscln + " Dung");

this.answer.updateAnswer(2, uscln, true);

} else {

System.err.println("Ket qua: " + uscln + " Sai");

this.answer.updateAnswer(2, uscln, false);


}

break;

case 2:

int bscnn = this.is.readInt();

if (this.BSCNN(this.intAnswers[0], this.intAnswers[1]) == bscnn) {

System.out.println("Ket qua: " + bscnn + " Dung");

this.answer.updateAnswer(3, bscnn, true);

} else {

System.err.println("Ket qua: " + bscnn + " Sai");

this.answer.updateAnswer(3, bscnn, false);

break;

case 3:

boolean isRight = true;

if (this.operatorCode == 1) {

this.sortASC(this.intAnswers);

} else {

this.sortDES(this.intAnswers);

for(int i = 0; i < this.intAnswers.length; ++i) {

if (this.is.readInt() != this.intAnswers[i]) {

isRight = false;

break;

if (isRight) {

this.answer.updateAnswer(4, -1, true);


} else {

this.answer.updateAnswer(4, -1, false);

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

private void sendQuestion(int numOperator) throws IOException {

this.intAnswers = new int[numOperator];

for(int i = 0; i < numOperator; ++i) {

int tmp = (new Random()).nextInt(10) + 100;

this.os.writeInt(tmp);

this.intAnswers[i] = tmp;

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.ooS = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

this.operatorCode = (new Random()).nextInt(2) + 1;

this.os.writeInt(this.operatorCode);
this.sendQuestion(2);

this.checkResponse(this.operatorCode);

this.sendQuestion(2);

this.checkResponse(this.operatorCode == 1 ? 2 : 1);

this.numOperator = (new Random()).nextInt(10) + 10;

this.os.writeInt(this.numOperator);

this.sendQuestion(this.numOperator);

this.checkResponse(3);

this.ooS.writeObject(this.answer);

} catch (SocketException var31) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var31.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var30);

} catch (IOException var32) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var32.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();
} catch (IOException var29) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var29);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var28);

} catch (Exception var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var27);

if (this.clientSocket != null) {

try {
this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var26);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var25) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var25);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var24) {

Logger.getLogger(NumericClientThread_25102018.class.getName()).log(Level.SEVERE,
(String)null, var24);

}
private int USCLN(int a, int b) {

return b == 0 ? a : this.USCLN(b, a % b);

private long longUSCLN(long a, long b) {

return b == 0L ? a : this.longUSCLN(b, a % b);

private int BSCNN(int a, int b) {

return a * b / this.USCLN(a, b);

private long longBSCNN(long a, long b) {

return a * b / this.longBSCNN(a, b);

private void sortASC(int[] arr) {

int temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] > arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}
}

private void sortLongASC(long[] arr) {

long temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] > arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

private void sortDES(int[] arr) {

int temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] < arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}
}

private void sortLongDES(long[] arr) {

long temp = arr[0];

for(int i = 0; i < arr.length - 1; ++i) {

for(int j = i + 1; j < arr.length; ++j) {

if (arr[i] < arr[j]) {

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

private boolean compare(Object[] arr, Object[] arr1) {

if (arr != null && arr1 != null && arr.length == arr1.length) {

for(int i = 0; i < arr.length; ++i) {

Object o1 = arr[i];

Object o2 = arr1[i];

if (o1 != o2) {

return false;

}
return true;

} else {

return false;

private int[] insert(int[] arr, int k) {

int arrIndex = arr.length - 1;

int tempIndex = arr.length;

int[] tempArr = new int[tempIndex + 1];

boolean inserted = false;

for(int i = tempIndex; i >= 0; --i) {

if (arrIndex > -1 && arr[arrIndex] > k) {

tempArr[i] = arr[arrIndex--];

} else if (!inserted) {

tempArr[i] = k;

inserted = true;

} else {

tempArr[i] = arr[arrIndex--];

return tempArr;

4.4

package tmp;
import control.ObjectServer;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.Student;

public class ObjectClientThread extends Thread {

Socket clientSocket;

ObjectServer serverControl;

ObjectInputStream is;

ObjectOutputStream os;

Answer answer = null;

Student student = null;

public ObjectClientThread(Socket s, ObjectServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

public void initiateStudentAnswer() {

try {

this.student = (Student)this.is.readObject();

if (this.student.getMaSV() == null) {
return;

this.serverControl.addStudent(this.student);

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Got a new registration, initiate answer");

this.answer = new Answer(this.student);

this.answer.setAlreadyRegistration(true);

} else {

this.answer.setStudent(this.student);

this.answer.setAlreadyRegistration(true);

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

} catch (IOException var7) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var7.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var6) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var6);

}
if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var5) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var5);

} catch (ClassNotFoundException var8) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var8.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var4) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var8);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var3) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var8);

}
}

public void run() {

super.run();

try {

this.is = new ObjectInputStream(this.clientSocket.getInputStream());

this.os = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

this.os.writeObject(this.answer);

} catch (SocketException var31) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var31.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var30);

} catch (IOException var32) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var32.printStackTrace();
if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var29);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var28);

} catch (Exception var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var27) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var27);

}
}

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var26);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var25) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var25);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var24) {

Logger.getLogger(NumericClientThread_20102018.class.getName()).log(Level.SEVERE,
(String)null, var24);

}
}

4.5

package tmp;

import control.StringServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.StringExam;

import model.Student;

public class StringClientThread extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream objectStream;

StringExam stringExam;
Answer answer = null;

Student student = null;

public StringClientThread(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

this.stringExam.stringGenerate((new Random()).nextInt(2) + 1);

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());


System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

if (this.stringExam.getNumericAnswer() == this.stringExam.getStringOrg().length()) {

this.os.writeUTF("Dap an Dung");

} else {

this.os.writeUTF("Dap an chua dung");

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

if (this.stringExam.isRightAnswer()) {

this.os.writeUTF("Dap an dung");

} else {

this.os.writeUTF("Dap an Sai");

this.answer.updateAnswer(1, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());

break;

case 4:

this.stringExam.setNumericAnswer(this.is.readInt());
System.out.println(this.stringExam.getNumericAnswer());

break;

case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

this.os.writeInt(this.stringExam.getCode());

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

} catch (SocketException var31) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var31.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var30);


}

} catch (IOException var32) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var32.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var29);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var28) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var28);

} catch (Exception var33) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var33.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();
this.os.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var27);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var26) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var26);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var25) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var25);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var24) {

Logger.getLogger(StringClientThread.class.getName()).log(Level.SEVERE, (String)null, var24);


}

4.6

package tmp;

import control.StringServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.StringExam;

import model.Student;

public class StringClientThread_06112018 extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;
ObjectOutputStream objectStream;

StringExam stringExam;

Answer answer = null;

Student student = null;

public StringClientThread_06112018(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());
System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

this.answer.updateAnswer(1, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());

case 4:

case 7:

default:

break;

case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 6:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("So ky tu duy nhat nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Xau moi là :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());


this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 8:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Xau chuan hoa la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 9:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Xau có từ đảo ngược :" + this.stringExam.getStringAnswer());

System.out.println("Số từ là :" + this.stringExam.getNumericAnswer());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.objectStream = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();
int code = (Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 1)) +
Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2)) +
Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2))) % 2;

this.os.writeInt(code);

StringBuilder subStringBuilder;

int i;

int countRespond;

int character;

StringBuilder longStringBuilder;

if (code == 0) {

this.stringExam.stringGenerate(9);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

longStringBuilder = new StringBuilder();

countRespond = 0;

while(true) {

if (countRespond >= (new Random()).nextInt(10) + 10) {

System.out.println("Long String: " + longStringBuilder.toString());


this.os.writeUTF(longStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

break;

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

++countRespond;

} else {

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

longStringBuilder = new StringBuilder();

for(countRespond = 0; countRespond < (new Random()).nextInt(10) + 10; ++countRespond) {


character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

this.stringExam.stringGenerate(9);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

this.objectStream.writeObject(this.answer);

} catch (SocketException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var33) {


Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var33);

} catch (IOException var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var32) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var32);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var31) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var31);

} catch (Exception var36) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var36.printStackTrace();
if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var30);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var29);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var28) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var28);

}
if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread_06112018.class.getName()).log(Level.SEVERE, (String)null,
var27);

4.7.

package tmp;

import control.StringServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.StringExam;

import model.Student;
public class StringClientThread_06112018_1 extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream objectStream;

StringExam stringExam;

Answer answer = null;

Student student = null;

public StringClientThread_06112018_1(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

}
}

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());

case 4:

case 7:

default:

break;

case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

break;
case 6:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("So ky tu duy nhat nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Xau moi là :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 8:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Xau chuan hoa la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 9:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Xau có từ đảo ngược :" + this.stringExam.getStringAnswer());

System.out.println("Số từ là :" + this.stringExam.getNumericAnswer());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

public void run() {

try {

super.run();
this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.objectStream = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

int code = (Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 1)) +


Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2)) +
Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2))) % 2;

this.os.writeInt(code);

StringBuilder subStringBuilder;

int i;

int countRespond;

int character;

StringBuilder longStringBuilder;

if (code == 0) {

this.stringExam.stringGenerate(2);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

longStringBuilder = new StringBuilder();

countRespond = 0;
while(true) {

if (countRespond >= (new Random()).nextInt(10) + 10) {

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

break;

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

++countRespond;

} else {

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

}
System.out.println("Sub-String: " + subStringBuilder.toString());

longStringBuilder = new StringBuilder();

for(countRespond = 0; countRespond < (new Random()).nextInt(10) + 10; ++countRespond) {

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

this.stringExam.stringGenerate(2);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

this.objectStream.writeObject(this.answer);

} catch (SocketException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();
if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var33) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var33);

} catch (IOException var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var32) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var32);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var31) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var31);

}
} catch (Exception var36) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var36.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var30);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var29);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var28) {


Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var28);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread_06112018_1.class.getName()).log(Level.SEVERE,
(String)null, var27);

4.8

package tmp;

import control.StringServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;
import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.StringExam;

import model.Student;

public class StringClientThread_20102018 extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream objectStream;

StringExam stringExam;

Answer answer = null;

Student student = null;

public StringClientThread_20102018(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");
this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

this.answer.updateAnswer(1, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());

case 4:

default:

break;
case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 6:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("So ky tu duy nhat nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Xau moi là :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

System.out.println(this.stringExam.getNumericAnswer());

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.objectStream = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

int code = (Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 1)) +


Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2)) +
Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2))) % 2;

this.os.writeInt(code);

boolean code1 = false;

StringBuilder subStringBuilder;
int i;

int countRespond;

int character;

StringBuilder longStringBuilder;

if (!code1) {

this.stringExam.stringGenerate(6);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

longStringBuilder = new StringBuilder();

countRespond = 0;

while(true) {

if (countRespond >= (new Random()).nextInt(10) + 10) {

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));
break;

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

++countRespond;

} else {

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

longStringBuilder = new StringBuilder();

for(countRespond = 0; countRespond < (new Random()).nextInt(10) + 10; ++countRespond) {

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());
longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

this.objectStream.writeObject(this.answer);

} catch (SocketException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var33) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var33);

} catch (IOException var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());


var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var32) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var32);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var31) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var31);

} catch (Exception var36) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var36.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var30);
}

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var29);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var28) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var28);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread_20102018.class.getName()).log(Level.SEVERE, (String)null,
var27);

}
}

4.9

package tmp;

import control.StringServer;

import java.io.DataInputStream;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

import java.net.Socket;

import java.net.SocketException;

import java.util.Random;

import java.util.logging.Level;

import java.util.logging.Logger;

import model.Answer;

import model.StringExam;

import model.Student;

public class StringClientThread_25102018 extends Thread {

Socket clientSocket;

StringServer serverControl;

DataInputStream is;

DataOutputStream os;

ObjectOutputStream objectStream;
StringExam stringExam;

Answer answer = null;

Student student = null;

public StringClientThread_25102018(Socket s, StringServer serverControl) {

this.clientSocket = s;

this.serverControl = serverControl;

this.answer = new Answer();

this.stringExam = new StringExam();

private void initiateStudentAnswer() throws IOException {

this.student = new Student(this.is.readUTF(), this.is.readUTF(),


this.clientSocket.getInetAddress().getHostAddress(), this.is.readInt());

this.answer = this.serverControl.getAnswer(this.student);

if (this.answer == null) {

System.out.println("Answer is null");

this.answer = new Answer(this.student);

} else {

this.answer.setStudent(this.student);

private void checkResponse() throws IOException {

switch(this.stringExam.getCode()) {

case 1:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getNumericAnswer());


System.out.println("Ket qua dung la :" + this.stringExam.getStringOrg().length());

this.answer.updateAnswer(0, this.stringExam.getNumericAnswer(),
this.stringExam.isRightAnswer());

break;

case 2:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Ket qua nhan duoc la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

System.out.println("Dap an: " + this.stringExam.isRightAnswer());

this.answer.updateAnswer(1, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

break;

case 3:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println(this.stringExam.getStringAnswer());

case 4:

case 7:

default:

break;

case 5:

this.stringExam.setNumericAnswer(this.is.readInt());

System.out.println(this.stringExam.getNumericAnswer());

break;

case 6:

this.stringExam.setNumericAnswer(this.is.readInt());

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("So ky tu duy nhat nhan duoc la :" + this.stringExam.getNumericAnswer());

System.out.println("Xau moi là :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());


System.out.println(this.stringExam.getNumericAnswer());

break;

case 8:

this.stringExam.setStringAnswer(this.is.readUTF());

System.out.println("Xau chuan hoa la :" + this.stringExam.getStringAnswer());

System.out.println("xau goc la :" + this.stringExam.getStringOrg());

this.answer.updateAnswer(0, this.stringExam.getStringAnswer(), this.stringExam.isRightAnswer());

public void run() {

try {

super.run();

this.is = new DataInputStream(this.clientSocket.getInputStream());

this.os = new DataOutputStream(this.clientSocket.getOutputStream());

this.objectStream = new ObjectOutputStream(this.clientSocket.getOutputStream());

this.initiateStudentAnswer();

int code = (Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 1)) +


Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2)) +
Integer.valueOf(this.student.getMaSV().charAt(this.student.getMaSV().length() - 2))) % 2;

this.os.writeInt(code);

StringBuilder subStringBuilder;

int i;

int countRespond;

int character;

StringBuilder longStringBuilder;

if (code == 0) {

this.stringExam.stringGenerate(8);
this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

longStringBuilder = new StringBuilder();

countRespond = 0;

while(true) {

if (countRespond >= (new Random()).nextInt(10) + 10) {

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

countRespond = this.is.readInt();

this.answer.updateAnswer(1, countRespond, countRespond ==


this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

break;

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());
longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

++countRespond;

} else {

subStringBuilder = new StringBuilder();

for(i = 0; i < 3; ++i) {

countRespond = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

subStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(coun
tRespond));

System.out.println("Sub-String: " + subStringBuilder.toString());

this.os.writeUTF(subStringBuilder.toString());

longStringBuilder = new StringBuilder();

for(countRespond = 0; countRespond < (new Random()).nextInt(10) + 10; ++countRespond) {

character = (int)(Math.random() *
(double)"AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".length());

longStringBuilder.append(subStringBuilder.toString());

longStringBuilder.append("AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZ".charAt(char
acter));

System.out.println("Long String: " + longStringBuilder.toString());

this.os.writeUTF(longStringBuilder.toString());

countRespond = this.is.readInt();
this.answer.updateAnswer(1, countRespond, countRespond ==
this.stringExam.countSubstring(subStringBuilder.toString(), longStringBuilder.toString()));

this.stringExam.stringGenerate(8);

this.os.writeUTF(this.stringExam.getStringOrg());

this.checkResponse();

this.serverControl.updateAnswerList(this.answer);

this.serverControl.updateView(this.student);

this.objectStream.writeObject(this.answer);

} catch (SocketException var34) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var34.printStackTrace();

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var33) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var33);

} catch (IOException var35) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var35.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();
this.os.close();

} catch (IOException var32) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var32);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var31) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var31);

} catch (Exception var36) {

System.out.println(" ------- Loi client ------- ");

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

var36.printStackTrace();

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var30) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var30);

if (this.clientSocket != null) {
try {

this.clientSocket.close();

} catch (IOException var29) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var29);

} finally {

System.out.println("Client IP : " + this.clientSocket.getInetAddress().getHostAddress());

if (this.is != null && this.os != null) {

try {

this.is.close();

this.os.close();

} catch (IOException var28) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var28);

if (this.clientSocket != null) {

try {

this.clientSocket.close();

} catch (IOException var27) {

Logger.getLogger(StringClientThread_25102018.class.getName()).log(Level.SEVERE, (String)null,
var27);

}
}

5.

package view;

import java.awt.EventQueue;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Iterator;

import java.util.Vector;

import java.util.logging.Level;

import java.util.logging.Logger;

import javax.swing.GroupLayout;

import javax.swing.JFrame;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.UIManager;

import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.GroupLayout.Alignment;

import javax.swing.UIManager.LookAndFeelInfo;

import javax.swing.table.DefaultTableModel;

import model.Answer;

import model.Student;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.CreationHelper;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

public class ClientList extends JFrame {

DefaultTableModel model;

private String[] columnNames = new String[]{"Số TT", "Mã SV", "Họ và Tên", "IP", "Nhóm", "Đăng ký",
"CAESAR", "SecondChar", "-", "USCLN", "Prime"};

private Object[][] data;

private JMenu jMenu1;

private JMenu jMenu2;

private JMenuBar jMenuBar1;

private JMenuItem jMenuItem1;

private JScrollPane jScrollPane1;

private JTable jTabClientList;

public ClientList() {

this.initComponents();

this.model = new DefaultTableModel(this.data, this.columnNames);

this.jTabClientList.setModel(this.model);

}
public void addNewRow(Student sv) {

SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");

Date currentTime = new Date();

String dateString = formatter.format(currentTime);

this.model.addRow(new Object[]{this.model.getRowCount(), sv.getMaSV(), sv.getHovaten(),


sv.getIP(), sv.getGroup(), dateString});

public void addNewRows(Answer answer) {

this.model.addRow(new Object[]{this.model.getRowCount() + 1, answer.getStudent().getMaSV(),


answer.getStudent().getHovaten(), answer.getStudent().getIP(), answer.getStudent().getGroup(),
answer.isAlreadyRegistration() ? "Yes" : "No", answer.getViewString()[0], answer.getViewString()[1],
answer.getViewString()[2], answer.getViewString()[3], answer.getViewString()[4]});

public void updateAnswerView(Answer answer) {

if (this.model.getRowCount() == 0) {

this.addNewRows(answer);

} else {

Vector rows = this.model.getDataVector();

Iterator it = rows.iterator();

int rowPos = 0;

boolean isUpdate = false;

while(it.hasNext()) {

++rowPos;

Vector next = (Vector)it.next();

Iterator itItem = next.iterator();

if (next != null && next.get(1).toString().equalsIgnoreCase(answer.getStudent().getMaSV())) {


isUpdate = true;

this.model.setValueAt(answer.getStudent().getIP(), rowPos - 1, 3);

this.model.setValueAt(answer.getStudent().getGroup(), rowPos - 1, 4);

this.model.setValueAt(answer.isAlreadyRegistration() ? "Yes" : "No", rowPos - 1, 5);

this.model.setValueAt(answer.getViewString()[0], rowPos - 1, 6);

this.model.setValueAt(answer.getViewString()[1], rowPos - 1, 7);

this.model.setValueAt(answer.getViewString()[2], rowPos - 1, 8);

this.model.setValueAt(answer.getViewString()[3], rowPos - 1, 9);

this.model.setValueAt(answer.getViewString()[4], rowPos - 1, 10);

break;

if (!isUpdate) {

this.addNewRows(answer);

private void initComponents() {

this.jMenu1 = new JMenu();

this.jScrollPane1 = new JScrollPane();

this.jTabClientList = new JTable();

this.jMenuBar1 = new JMenuBar();

this.jMenu2 = new JMenu();

this.jMenuItem1 = new JMenuItem();

this.jMenu1.setText("jMenu1");

this.setDefaultCloseOperation(3);
this.addWindowListener(new WindowAdapter() {

public void windowClosing(WindowEvent evt) {

ClientList.this.windowClosing(evt);

});

this.jTabClientList.setModel(new DefaultTableModel(new Object[][]{new Object[0], new Object[0],


new Object[0], new Object[0]}, new String[0]));

this.jScrollPane1.setViewportView(this.jTabClientList);

this.jMenu2.setText("Export Excel");

this.jMenuItem1.setText("Save Excel");

this.jMenuItem1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent evt) {

ClientList.this.jMenuItem1ActionPerformed(evt);

});

this.jMenu2.add(this.jMenuItem1);

this.jMenuBar1.add(this.jMenu2);

this.setJMenuBar(this.jMenuBar1);

GroupLayout layout = new GroupLayout(this.getContentPane());

this.getContentPane().setLayout(layout);

layout.setHorizontalGroup(layout.createParallelGroup(Alignment.LEADING).addGroup(layout.createSeq
uentialGroup().addContainerGap().addComponent(this.jScrollPane1, -1, 507,
32767).addContainerGap()));

layout.setVerticalGroup(layout.createParallelGroup(Alignment.LEADING).addGroup(layout.createSeque
ntialGroup().addContainerGap().addComponent(this.jScrollPane1, -1, 339, 32767).addContainerGap()));

this.pack();

private void windowClosing(WindowEvent evt) {


}

private void jMenuItem1ActionPerformed(ActionEvent evt) {

Workbook wb = new HSSFWorkbook();

CreationHelper createhelper = wb.getCreationHelper();

Sheet sheet = wb.createSheet("new sheet");

Row firstRow = sheet.createRow(0);

for(int j = 0; j < this.model.getColumnCount(); ++j) {

firstRow.createCell(j).setCellValue(this.columnNames[j]);

Row row = null;

Cell cell = null;

for(int i = 0; i < this.model.getRowCount(); ++i) {

row = sheet.createRow(i + 1);

for(int j = 0; j < this.model.getColumnCount(); ++j) {

cell = row.createCell(j);

cell.setCellValue(String.valueOf(this.model.getValueAt(i, j)));

try {

SimpleDateFormat formatter = new SimpleDateFormat("hh:mm:ss");

Date currentTime = new Date();

formatter.format(currentTime);

FileOutputStream out = new FileOutputStream("Kip4.xls");


wb.write(out);

out.close();

} catch (FileNotFoundException var12) {

Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var12);

} catch (IOException var13) {

Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var13);

public static void main(String[] args) {

try {

LookAndFeelInfo[] var1 = UIManager.getInstalledLookAndFeels();

int var2 = var1.length;

for(int var3 = 0; var3 < var2; ++var3) {

LookAndFeelInfo info = var1[var3];

if ("Nimbus".equals(info.getName())) {

UIManager.setLookAndFeel(info.getClassName());

break;

} catch (ClassNotFoundException var5) {

Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var5);

} catch (InstantiationException var6) {

Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var6);

} catch (IllegalAccessException var7) {

Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var7);

} catch (UnsupportedLookAndFeelException var8) {


Logger.getLogger(ClientList.class.getName()).log(Level.SEVERE, (String)null, var8);

EventQueue.invokeLater(new Runnable() {

public void run() {

ClientList client = new ClientList();

client.setVisible(true);

client.addNewRow((Student)null);

});

You might also like