2020-06-07更新:
新增SysSearch类源码
2020-5-25更新:
GitHub地址: https://github.com/0x886c/System.git
2019-12-26 更新客户端签到成功后的UI显示,更新程序步骤完成后数据库的信息界面
宿舍一起完成了一个课程设计,发出来分享下,完成这个题目后,自己对线程的理解深入了许多,也更加了解了Java的封装性
效果图
数据库中的初始测试数据
Client文件夹
Serve文件夹
打开这四个exe文件后,我们输入测试数据
如果输入的数据和数据库中数据一致
如果输入信息与数据库中学生信息不一致
只有签到成功服务端UI才会显示
文件传输客户端
服务端在D:\FiletransferTest收到文件
学生完成签到,提交作业后的数据库信息
程序源码排布
ClientLogin类
此类实现客户端的UI显示,输入信息监听,客户端线程的启动
package Client;
import UI.UI1;
import UI.UI2;
import UI.UI4;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class LoginClient extends Thread{
static Socket socket = null;//静态socket对象可以在LoginClient整个类中使用
public static void main(String[] args){
new UI1();//客户端登陆界面显示
}
public void run(){//获取来自服务端的输入流
try {
String string = new String();
InputStream inputStream = socket.getInputStream();//获得输入流
int len = 0;
byte[] buf = new byte[1024];
//将字节流转化成字符串,获得服务端发送的信息
if ((len=inputStream.read(buf))!=-1){
string = new String(buf,0,len);
}
//System.out.println(string);
if (string.equals("已成功签到")){//服务端确定学生输入信息与数据库中内容一致
new UI4();//弹出签到成功界面
}else {
new UI2();//弹出信息输入错误界面
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static class LoginListener implements ActionListener{
TextField textFieldId,textFieldName,textFieldClass;
String Stuid,Stuname,Stuclass;
Frame loginframe = null;
//通过外部类的方法完成UI1中的参数传递
//一下定义的方法分别获得监听的Id,Name,Class,Frame
public void SetTextId(TextField textField){
textFieldId = textField;
}
public void SetTextName(TextField textField){
textFieldName = textField;
}
public void SetTextClass(TextField textField){
textFieldClass = textField;
}
public void SetTextFrame(Frame frame){
loginframe = frame ;
}
//监听界面输入并以字节流的形式将数据发送至服务端
@Override
public void actionPerformed(ActionEvent e) {
//获得字符串类型的数据
Stuid = textFieldId.getText();
Stuname = textFieldName.getText();
Stuclass = textFieldClass.getText();
//测试是否获得数据
System.out.println(Stuid+'\n'+Stuname+'\n'+Stuclass);
try {
//这里的host是我局域网中当作服务端的主机的静态IP,根据自己情况输入服务端IP
socket = new Socket("192.168.1.100",7777);
OutputStream outputStream = socket.getOutputStream();
//这里字节流中加入了本机IP以边签到时间的录入
outputStream.write((Stuid+" "+Stuname+" "+Stuclass+" "+socket.getInetAddress().getHostAddress()).getBytes());
} catch (UnknownHostException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
//监听时启动线程
LoginClient loginClient = new LoginClient();
loginClient.start();
}
}
}
SysServe类
此类实现服务端UI显示,学生成功登录信息监听,服务端线程的启动
package Serve;
import Datebase.SysInsertSignoutTime;
import Datebase.SysInsertTime;
import Datebase.SysSearch;
import Filetransfer.FiletransferClient;
import UI.ServeUi;
import UI.UI1;
import UI.UI2;
import UI.UI4;
import javax.swing.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class SysServe extends Thread{
static ServerSocket serverSocket;