import java.io.*;
import java.net.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Client {
// C/S模式
private Socket socket;
private DataInputStream dis;
private DataOutputStream dos;
// GUI组件
private JFrame frame;
private JPanel panelHead, panelLeft, panelRight,panelCenter;
private JLabel labelTitle,labelBody,labelSearchId,labelSearchName,labelName,labelId,labelChinese,labelMath,labelEnglish ;
private JTextField inputFieldSearchId, inputFieldSearchName, inputFieldName, inputFieldId,inputFieldChinese,inputFieldMath,inputFieldEnglish;
private JButton buttonSearchId, buttonSearchName, buttonAver, buttonMax, buttonMin, buttonAll,buttonAdd,buttonRevise;
public Client() throws IOException {
// 初始化C/S
socket = new Socket("localhost", 4852);
dis = new DataInputStream(socket.getInputStream());
dos = new DataOutputStream(socket.getOutputStream());
// 初始化GUI
frame = new JFrame("超级管理员");
frame.setSize(800, 500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// frame.pack();
frame.setVisible(true);
GridBagConstraints constraints = new GridBagConstraints();
labelTitle = new JLabel("欢迎使用学生成绩管理系统");
labelTitle.setFont(new Font("楷体", Font.BOLD, 24));
labelTitle.setHorizontalAlignment(JLabel.CENTER);
panelHead = new JPanel(new GridBagLayout());
panelHead.setPreferredSize(new Dimension(800, 100));
constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.CENTER;
panelHead.add(labelTitle,constraints);
frame.getContentPane().add(BorderLayout.NORTH, panelHead);
labelSearchId = new JLabel("按照学号查找:");
inputFieldSearchId = new JTextField(10);
buttonSearchId = new JButton("确认");
labelSearchName = new JLabel("按照姓名查找:");
inputFieldSearchName = new JTextField(10);
buttonSearchName = new JButton("确认");
buttonAver = new JButton("平均分");
buttonMax = new JButton("最高分");
buttonMin = new JButton("最低分");
buttonAll = new JButton("所有成绩");
panelLeft = new JPanel(new GridBagLayout());
// panelLeft.setPreferredSize(new Dimension(500, 700));
constraints.gridx = 0;
constraints.gridy = 0;
constraints.anchor = GridBagConstraints.CENTER;
panelLeft.add(labelSearchId,constraints);
constraints.gridx = 2;
constraints.gridy = 0;
panelLeft.add(inputFieldSearchId,constraints);
constraints.gridx = 4;
constraints.gridy = 0;
panelLeft.add(buttonSearchId,constraints);
constraints.gridx = 0;
constraints.gridy = 2;
panelLeft.add(labelSearchName,constraints);
constraints.gridx = 2;
constraints.gridy = 2;
panelLeft.add(inputFieldSearchName,constraints);
constraints.gridx = 4;
constraints.gridy = 2;
panelLeft.add(buttonSearchName,constraints);
constraints.gridx = 0;
constraints.gridy = 4;
panelLeft.add(buttonAver,constraints);
constraints.gridx = 2;
constraints.gridy = 4;
panelLeft.add(buttonMax,constraints);
constraints.gridx = 4;
constraints.gridy = 4;
panelLeft.add(buttonMin,constraints);
constraints.gridx = 2;
constraints.gridy = 6;
panelLeft.add(buttonAll,constraints);
frame.getContentPane().add(BorderLayout.WEST, panelLeft);
buttonSearchId.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 处理按学号查询的逻辑
// 获取输入的学号
String Id = inputFieldSearchId.getText();
// 检查输入是否为空
if (Id == null || Id.trim().isEmpty()) {
JOptionPane.showMessageDialog(frame, "请输入有效的学号!");
return;
}
try {
// 发送学号到服务器进行查询
sendNumberToServer("1 "+Id+" 0 0 0 0");
// 从服务器获取查询结果
DataInputStream dataInputStream = getDataInputStream();
String result = dataInputStream.readUTF();
// 显示查询结果
labelBody.setText(result);
} catch (IOException ex) {
JOptionPane.showMessageDialog(frame, "查询失败,请检查网络连接或服务器状态!");
ex.printStackTrace();
}
}
});
buttonSearchName.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 处理按姓名查询的逻辑
// 获取输入的姓名
String name = inputFieldSearchName.getText();
// 检查输入是否为空
if (name == null || name.trim().isEmpty()) {
JOptionPane.showMessageDialog(frame, "请输入有效的姓名!");
return;
}
try {
// 发送姓名到服务器进行查询
sendNumberToServer("2 " + name + " 0 0 0 0");
// 从服务器获取查询结果
DataInputStream dataInputStream = getDataInputStream();
String result = dataInputStream.readUTF();
// 显示查询结果
labelBody.setText(result);
} catch (IOException ex) {
JOptionPane.showMessageDialog(frame, "查询失败,请检查网络连接或服务器状态!");
ex.printStackTrace();
}
}
});
buttonAver.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 处理各科平均分的逻辑
try {
// 发送平均分请求到服务器
sendNumberToServer("3 0 0 0 0 0");
// 从服务器获取平均分结果
DataInputStream dataInputStream = getDataInputStream();
String result = dataInputStream.readUTF();
// 显示平均分结果
labelBody.setText(result);
} catch (IOException ex) {
JOptionPane.showMessageDialog(frame, "查询失败,请检查网络连接或服务器状态!");
ex.printStackTrace();
}
}
});
buttonMax.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// 处理各科最高分的逻辑
try {
// 发送最高分请求到服务器
sendNumberToServer("4 0 0 0 0 0");
// 从服务器获取最高分结果
DataInputStream dataInputStream = getDataInputStream();
String result = dataInputStream.readUTF();
// 显示最高分结果
labelBody.setText(result);
} catch (IOException ex) {
JOptionPane.showMessageDialog(frame, "查询失败,请检查网络连接或服务器状态!");
ex.printStackTrace();
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
实现应用,基于C/S模式,可以通过网络管理存放在服务端的学生成绩。提供图形界面(GUI)操作编辑信息。要能通过菜单选择功能。基于Socket,多客户端使用多线程,以能同时从多个客户端执行功能。学生的成绩信息存放在数据库或文件。 1)初始输入n个同学,m门成绩。 2)可以增加学生 3)可以修改某学生成绩 4)可以按姓名或学号查询某学生的各门课成绩、平均成绩 5)可以查询全部学生的各科平均分、最高分、最低分 6)可以输出所有学生的成绩表 适用人群: Java网络编程实践初学者 使用场景: Java课程设计
资源推荐
资源详情
资源评论
收起资源包目录
程序代码.zip (2个子文件)
程序代码
StudentSystemServer.txt 12KB
StudentSystemClient.txt 17KB
共 2 条
- 1
资源评论
- 代码从不说谎2024-01-19#内容详尽 #全网独家 #注释完整
鸿·蒙
- 粉丝: 889
- 资源: 23
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功