1.1开发环境及工具:
Intellij IDEA 、MySQL数据库、JDK 18
1.2项目背景和内容概要
本系统基于显示在线学习中教师对学生的教学、作业的发布与检查进行显示。本次练习将实现账号管理、数据查询、删除数据及相应的GUI设计
模块名称 | 子模块 | 模块执行人 | 模块说明 |
账号管理 | 账号登录 | 管理员、教师、学生 | 登录 |
修改密码 | 管理员、教师、学生 | 修改密码 | |
账号退出 | 管理员、教师、学生 | 退出登录 | |
数据查询 | 教师信息 | 管理员、教师 | 查看教师相关信息 |
学生信息 | 教师、学生 | 查看学生相关信息 | |
学生成绩信息 | 教师、学生 | 查看学生成绩 | |
删除数据 | 删除教师数据 | 管理员 | 信息删除 |
删除学生数据 | 管理员、教师 | 信息删除 | |
删除成绩信息 | 教师 | 信息删除 |
1.3 相关资料 数据字典
- 管理员资料
信 息 | 类 别 | |
账号 | account | Varchar(10) |
密码 | password | Varchar(20) |
- 教师信息
信 息 | 类 别 | |
账号 | Account | Varchar(10) |
密码 | password | Varchar(20) |
教师编号 | id | int |
姓名 | name | Varchar(5) |
性别 | gender | Varchar(1) |
学科 | subject | Varchar(10) |
- 学生信息
信 息 | 类 别 | |
账号 | account | Varchar(10) |
密码 | password | varchar(20) |
学号 | id | int |
姓名 | name | Varcahr(5) |
性别 | Gender | Varchar(1) |
4.成绩表信息
信 息 | 类 别 | |
编号 | Id | Int |
学生编号 | Sid | int |
教师编号 | Tid | int |
学科 | subject | Varcahr(10) |
成绩 | score | int |
服务端
接收消息后分析结构,获取必要的指令,进行数据库的操作并返回客户端需要的信息
客户端
在GUI界面添加监听器,获取指令后修改为一定格式的数据发送给服务端进行处理
在接收到服务端发送的数据后以特定的形势展示
1,登录
界面展示
右边框可以输入相关信息查询、列表双击信息删除行(管理员都可以删除,教师只能管理学生和成绩信息、学生不能修改只能查询),添加键有添加界面,输入信息点击确认后加入数据库
查询
密码修改
删除设计为双击删除不便于演示,后期在查询旁加了一个“添加”按钮实现新增。
增加效果图如下
存在问题:
客户端TCP通讯连接会在发送接收后随着BfferedWriter或BufferedRead管道关闭而断开,因此需要不断地创造Socket连接,不能实现用户间的交流功能。
如果使用JtestField用于信息展示,在服务端用txt储存消息可以实现论坛形势的通信(即所有人可见)
部分代码
服务端接收用if判断区别
if ("登录".equals(mess.split("/")[0])) {
send.condition1(server,mess,port);
} else if ("修改密码".equals(mess.split("/")[0]))
{
send.condition2(server,mess,port);
} else if ( "获取".equals(mess.split("/")[0])) {
if(mess.split("/").length==2){
send.condition3(server,mess,port);
}else{
send.condition4(server,mess,port);
}
} else if ("添加".equals(mess.split("/")[0])) {
send.condition5(server,mess,port);
} else if("修改".equals(mess.split("/")[0])){
send.condition6(server,mess,port);
} else {
a = "你输入的命令错误,请重新输入";
send.sendString(server, a, server.getPort(),port);
}
客户端界面
以管理员主界面为例
JFrame page=setframe("主页面");
Box top =Box.createVerticalBox();
Box view =Box.createHorizontalBox();
JLabel title = new JLabel("管理员账号:"+a);
title.setFont(new Font(Font.SANS_SERIF,Font.BOLD,20));
view.add(Box.createHorizontalStrut(20));
view.add(title);
top.add(Box.createVerticalStrut(20));
top.add(view);
page.add(top,BorderLayout.NORTH);
JTabbedPane Tabs = new JTabbedPane();
Tabs.add("教师列表",RshowTeancher());
Tabs.add("学生列表", showStudent());
page.add(Tabs);
Box bot =Box.createVerticalBox();
Box look =Box.createHorizontalBox();
JButton pw = new JButton("修改密码");
JButton out = new JButton("退出登录");
look.add(Box.createHorizontalStrut(20));
look.add(pw);
look.add(Box.createHorizontalStrut(20));
look.add(out);
bot.add(Box.createVerticalStrut(30));
bot.add(look);
bot.add(Box.createVerticalStrut(20));
page.add(bot,BorderLayout.SOUTH);
pw.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String m="修改密码/管理员/"+a+"/"
+JOptionPane.showInputDialog(page,"请输入修改的密码:","修改密码",JOptionPane.INFORMATION_MESSAGE);
String a= cli.getString(m);
if("修改成功".equals(a)){
JOptionPane.showMessageDialog(page,"修改成功","修改密码",JOptionPane.INFORMATION_MESSAGE);
}else {
JOptionPane.showMessageDialog(page,"修改失败","修改密码",JOptionPane.WARNING_MESSAGE);
}
}
});
out.addMouseListener((new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
page.setVisible(false);
login().setVisible(true);
}
}));
page.setVisible(true);
Jtabbedpane以有修改权限教师表展示
Box re =Box.createHorizontalBox();
String[] clo = {"教师编号","姓名","学科","账号"};
String[][] val =getTtabs(re);
DefaultTableModel tableModel = new DefaultTableModel(val, clo);
JTable tab=new JTable(tableModel){
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
};
JScrollPane scroll = new JScrollPane(tab);
re.add(scroll);
re.add(Box.createHorizontalStrut(5));
Box sel =Box.createVerticalBox();
sel.add(Box.createVerticalStrut(40));
JTextField gra = new JTextField(2);
JTextField cla = new JTextField(2);
JTextField id = new JTextField(2);
sel.add(new JLabel("编号:"));
sel.add(gra);
sel.add(Box.createVerticalStrut(3));
sel.add(new JLabel("名字:"));
sel.add(cla);
sel.add(Box.createVerticalStrut(3));
sel.add(new JLabel("科目:"));
sel.add(id);
sel.add(Box.createVerticalStrut(15));
Box but =Box.createHorizontalBox();
JButton button = new JButton("查询");
but.add(button);
JButton cre=new JButton("添加");
but.add(cre);
sel.add(but);
sel.add(Box.createVerticalStrut(10));
re.add(sel);
//设置双击删除
tab.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2) {
String sql ="修改/教师/delete from Teacher where id="+tableModel.getValueAt(tab.getSelectedRow(),0);
String b =cli.getString(sql);
String[][] getval=getTtabs(re);
tableModel.setDataVector(getval,clo);
}
}
});
//查询
button.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String port="";
String[] a = {gra.getText(),cla.getText(),id.getText()};
if(a[0].length()>0||a[1].length()>0||a[2].length()>0) {
port += "where ";
if (a[0].length() > 0) {
port += "id='" + a[0] + "' and";
}
if (a[1].length() > 0) {
port += " name='" + a[1] + "' and";
}
if (a[2].length() > 0) {
port += " subject='" + a[2] + "' and";
}
port = port.substring(0, port.length() - 3);
}
String[][] getval = getTtabs(re,port);
tableModel.setDataVector(getval,clo);
}
});
//设置添加
cre.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
addTpage().setVisible(true);
}
});
return re;
添加界面,以教师添加为例
JFrame page=setframe("添加教师");
Box a= Box.createHorizontalBox();
Box b=Box.createVerticalBox();
Box c= Box.createHorizontalBox();
c.add(new JLabel("账号:"));
JTextField c1 = new JTextField();
c.add(c1);
Box d= Box.createHorizontalBox();
d.add(new JLabel("密码:"));
JTextField d1 = new JTextField();
d.add(d1);
Box e= Box.createHorizontalBox();
e.add(new JLabel("姓名:"));
JTextField e1 = new JTextField();
e.add(e1);
Box f= Box.createHorizontalBox();
f.add(new JLabel("性别:"));
JTextField f1 = new JTextField();
f.add(f1);
Box g= Box.createHorizontalBox();
g.add(new JLabel("学科:"));
JTextField g1 = new JTextField();
g.add(g1);
Box h= Box.createHorizontalBox();
JButton but1 = new JButton("确定");
h.add(but1);
JButton but2 = new JButton("取消");
h.add(but2);
b.add(Box.createVerticalStrut(100));
b.add(c);
b.add(Box.createVerticalStrut(20));
b.add(d);
b.add(Box.createVerticalStrut(20));
b.add(e);
b.add(Box.createVerticalStrut(20));
b.add(f);
b.add(Box.createVerticalStrut(20));
b.add(g);
b.add(Box.createVerticalStrut(50));
b.add(h);
b.add(Box.createVerticalStrut(100));
a.add(Box.createHorizontalStrut(200));
a.add(b);
a.add(Box.createHorizontalStrut(200));
page.add(a);
but2.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
page.setVisible(false);
}
});
but1.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
String a ="添加/insert into Teacher(account,password,name,gender,subject) value("
+c1.getText()+","+d1.getText()+","+e1.getText()+","+f1.getText()+","+g1.getText()+")";
String b=cli.getString(a);
JOptionPane.showMessageDialog(page,b,"提示",JOptionPane.INFORMATION_MESSAGE);
page.setVisible(false);
}
});
return page;
其余板块模板相似
链接:百度网盘 请输入提取码