基于java的教师基本信息设计
目录
前言
基于java窗体的教师基本信息设计,是在已有知识的基础上,利用数据库与GUI的巧妙结合,实现在窗体的界面下间接完成对数据库的属性信息的操作,从而完成对教师授课,基本信息增删改查的相关操作。
不仅锻炼对知识的掌握能力还培养对信息的综合实战以及将所学知识与实际生活需求相结合的能力。
从而尽最大能力的完成实验的要求,更好的展现设计者的编程能力。
以下是本篇文章正文内容,下面案例仅供参考
一、原示例代码分析
1.1 教师基本信息添加
教师基本信息添加代码
package com.company;
import java.awt.*;//用于创建用户界面和绘制图像的所有类
import java.awt.event.*;//用于处理AWT组件触发的不同类型事件的接口和类
import javax.swing.*;//提供“轻量级”组件,尽量让组件在所有平台工作方式相同
import java.sql.*;//进行服务器端数据源访问和处理
/**
* AddDialog(增加)
*/
public class AddDialog extends JFrame {
//增加继承图形化界面设置容器(JFrame)
/**
* private定义只能在这个类里调用
* public定义外部可以调用,但是也可以修改,这样不安全,所以就用了final
* 这样,外部即可以调用,也不怕被人修改
*/
//宽度320像素
public static final int Width =320;
//高度230像素
public static final int Heigth =230;
//创建按钮btn,btn2
Button btn,btn2;
//创建标签,编辑单行文本
JTextField jt,jt2,jt3,jt4,jt5,jt6,jt7,jt8;
/**
* 构造方法与类同名,对象的创建
* 通过构造方法完成
* 构造方法没有返回值
*/
//构造增加方法,初始化组件
public AddDialog(){
//定义控件的大小,设置控件的宽度和高度
setSize(Width,Heigth);
//将组件移到新位置,用820和200表示新位置左上角坐标
setLocation(820,200);
//标题栏上设置增加字符串
setTitle(new String("增加"));
/**
* 设置为流式布局,组件在窗体中从左到右依次排列
*如果排到行的末尾,换行排列
*排列会随着窗体的大小而改变
*/
setLayout(new FlowLayout());
/**
* 添加到容器中的组件放在一个列表中
* 列表的顺序将定义组件在容器内的正向堆栈顺序。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//将教师添加属性实例化
jt=new JTextField(20);// 创建文本框jt,指定可见列数为20列
Label lb=new Label(属性);//定义了一个全局变量lb,将他放入contentPane中
jt2=new JTextField(20);//创建文本框jt2,指定可见列数为20列
Label lb2=new Label(属性);//定义了一个全局变量lb2,将他放入contentPane中
jt3=new JTextField(20);创建文本框jt3,指定可见列数为20列
Label lb3=new Label(属性);定义了一个全局变量lb3,将他放入contentPane中
jt4=new JTextField(20);创建文本框jt4,指定可见列数为20列
Label lb4=new Label(属性);//定义了一个全局变量lb4,将他放入contentPane中
jt5=new JTextField(20);创建文本框jt5,指定可见列数为20列
Label lb5=new Label(属性);定义了一个全局变量lb5,将他放入contentPane中
jt6=new JTextField(20);创建文本框jt6,指定可见列数为20列
Label lb6=new Label("所在系别:");定义了一个全局变量lb6,将他放入contentPane中
jt7=new JTextField(20);创建文本框jt7,指定可见列数为20列
Label lb7=new Label("所在教研室:");定义了一个全局变量lb7,将他放入contentPane中
jt8=new JTextField(20);创建文本框jt8,指定可见列数为20列
Label lb8=new Label("入职时间:");定义了一个全局变量lb8,将他放入contentPane中
//将按钮进行实例化
btn=new Button("确定");//实现添加功能的按钮
btn.addActionListener(new Enter());//为按钮绑定事件监听
btn2=new Button("取消");//实现取消功能的按钮
//将标签和按钮添加至面板
add(lb);add(jt);add(lb2);add(jt2);add(lb3);add(jt3);add(lb4);add(jt4);add(lb5);add(jt5);
add(lb6);add(jt6);add(lb7);add(jt7);add(lb8);add(jt8);add(btn);add(btn2);
}
/**
* implements实现父类,子类不可以覆盖父类的方法或者变量。
* 即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
*/
class Enter implements ActionListener{
//ActionListener响应TextField中的Enter
@Override//如果想重写父类的方法,在方法前面加上@Override系统可以帮忙检查方法的正确性
public void actionPerformed(ActionEvent e){
/**
* 组件发生事件的时候,会将事件包装成一个 ActionEvent对象,也就是这里的e
*从e里可以获得事件源对象。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
AddDialog ad= new AddDialog();//新建一个AddDialog
//如果事件源对象得到的命令行为执行添加按钮的功能
if(e.getActionCommand().equals("添加")){
con.setBackground(Color.green);//设置背景颜色为绿色
//录入教师信息
*************可根据自己的需求进行添加。*****************
String TCourse=jt7.getText();//录入教师所教授课程
String TEtime=jt8.getText();//录入教师入职时间
/**
* Object[]声明的是一个Object类型的数组
* 所有类都继承自Object,Object[]可以存放所有类型的对象
* String[]只能存放String类型的对象
*/
Object str[]={
TNo,TN,TSex,TAge,TPro,TDept,TCourse,TEtime};//String类型数组转换成Object类型
Connection sin=Dbcon.getconnectin();//连接数据库
Dbcon.insert(sin, str);//插入数组
/**
* showConfirmDialog()方法的返回值为整型常量,
* 当按下一个按钮时,返回相应的整型常量,“是”、“否”、“取消”和“确认”对应的常量分别是:0、1、2、0
* JOptionPane.NO_OPTION点击否按钮后,返回1
*/
JOptionPane.showMessageDialog(null,"添加成功!","操作提示",JOptionPane.NO_OPTION );//对话框里输出添加成功等信息
dispose();//释放所有本机屏幕资源
}
}
}
}
程序运行窗口界面
信息添加
进行教师基本信息添加时,采用的是流式布局。
标签随窗口的变化而变化,点击添加“按钮”会进入教师基本信息的录入增加界面。
信息添加成功
颜色背景初始时,为无色。
信息添加成功后弹出添加对话框,信息界面变为绿色。
1.2 教师基本信息数据库配置
教师基本信息数据库的相关配置,为了充分利用现有的数据库,所以将原来的使用MySQL数据库改为了使用SQL Server数据库。
二个数据库的配置和操作有很大的不同,端口号由原程序使用的是3306,改为了使用1433端口。
同时SQL Server还需要开启Windows和SQL Server混合账号验证设置,sa用户的授权还需要开启。
教师基本信息数据库配置代码
package com.company;
import java.sql.*;//进行服务器端数据源访问和处理
import javax.swing.*;//提供“轻量级”组件,尽量让组件在所有平台工作方式相同
/**
* Dbcon(数据库的配置)
*/
public class Dbcon {
public final static Connection getconnectin(){
Connection con=null;
//设置TCP/IP的端口号为1433,数据库的名称为ZNPB
String url="jdbc:sqlserver://localhost:1433;DatabaseName=ZNPB";
/**
* Java异常处理
* try{}选定捕获异常的范围,将可能发生异常的语句放在try块中
* catch语句块中对异常对象进行处理
* 每个try语句块可以伴随一个或多个catch语句
* catch语句块用于处理可能产生的不同类型的异常对象。
*/
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//数据库配置的用户名为sa
String user="sa";
//设置sa的密码为123456
String password="123456";
//连接成功的参数需要端口号,用户名,密码符合
con=DriverManager.getConnection(url,user,password);
con.setCatalog("ZNPB");
}
catch(SQLException sqle){
/**
* 当try语句中出现异常是时,会执行catch中的语句,
* java运行时系统会自动将catch括号中的SQLException 初始化
* sqle是此对象引用名称。然后sqle会自动调用SQLException类中指定的方法,
*/
System.out.println(sqle+"Connection successful!");//数据库连接成功
}
catch(Exception e){
/**
* java运行时系统会自动将catch括号中的Exception 初始化
* e是此对象引用名称。然后e会自动调用Exception类中指定的方法,
*/
System.out.println(e+"Connection failed!");//数据库连接失败
}
return con;
}
//添加数据
public final static void insert(Connection con,Object obj[]){
PreparedStatement stmt=null;
try {
stmt=con.prepareStatement("insert into Teacher(TNo,TN,TSex,TAge,TPro,TDept,TCourse,TEtime) values(?,?,?,?,?,?,?,?)");
stmt.setString(1,obj[0].toString());
stmt.setString(2,obj[1].toString());
stmt.setString(3,obj[2].toString());
stmt.setString(4,obj[3].toString());
stmt.setString(5,obj[4].toString());
stmt.setString(6,obj[5].toString());
stmt.setString(7,obj[6].toString());
stmt.setString(8,obj[7].toString());
stmt.execute();
} catch (SQLException e) {
JOptionPane.showMessageDialog(null,"failed","connection failed",JOptionPane.NO_OPTION );
}
}
//查询数据
public final static ResultSet query(Connection con){
ResultSet rs = null;
PreparedStatement stmt;
try {
stmt=con.prepareStatement("select * from Teacher");
rs=stmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
}
return rs;
}
//删除数据
public final static void delete(Connection con,String s){
try {
PreparedStatement stmt;
stmt=con.prepareStatement("delete from Teacher where TNo=?");
stmt.setObject(1,s);
stmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
finally{
/**
* 无论异常是否被捕获,finally的代码一定会被执行。
* finally里存放释放资源、后续处理的代码
*/
}
}
}
SQL Server相关服务的开启及配置操作
有关SQL Server的所有服务都要确保开启。
SQL Server的数据库用户安全性配置操作
1.3 教师基本信息修改
教师基本信息的修改,考虑到要更加的符合生活实际的基本需求,修改相当于在以工号为主键的情况下,
对该用户的信息进行添加操作,所以在修改教师基本信息的基础上,添加了一个新的录入信息的类,
目的是使修改后的信息仍然能够正常的录入到教师表中。
教师基本信息修改代码
package com.company;
import java.awt.*;//用于创建用户界面和绘制图像的所有类
import java.awt.event.*;//用于处理AWT组件触发的不同类型事件的接口和类
import javax.swing.*;//提供“轻量级”组件,尽量让组件在所有平台工作方式相同
import java.sql.*;//进行服务器端数据源访问和处理
/**
* AlterDialog(修改)
*/
public class AlterDialog extends JFrame {
//修改继承图形化界面设置容器(JFrame)
/**
*private定义只能在这个类里调用
*public定义外部可以调用,但是也可以修改,这样不安全,所以就用了final
* 这样,外部即可以调用,也不怕被人修改
*/
//宽度320像素
public static final int Width =320;
//高度230像素
public static final int Heigth =230;
//创建按钮btn,btn2
Button btn,btn2;
//创建标签,编辑单行文本
JTextField jt,jt2,jt3,jt4,jt5,jt6,jt7,jt8;
/**
* 构造方法与类同名,对象的创建
* 通过构造方法完成
* 构造方法没有返回值
*/
//构造修改方法,初始化组件
public AlterDialog(){
//定义控件的大小,设置控件的宽度和高度
setSize(Width,Heigth);
//将组件移到新位置,用820和200表示新位置左上角坐标
setLocation(820,200);
//标题栏上设置修改字符串
setTitle(new String("修改:"));
/**
* 设置为流式布局,组件在窗体中从左到右依次排列
* 如果排到行的末尾,换行排列
* 排列会随着窗体的大小而改变
*/
setLayout(new FlowLayout());
/**
* 添加到容器中的组件放在一个列表中
* 列表的顺序将定义组件在容器内的正向堆栈顺序。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//将教师修改属性实例化
jt=new JTextField(20);// 创建文本框jt,指定可见列数为20列
Label lb=new Label("工号:");//定义了一个全局变量lb,将他放入contentPane中
//将按钮进行实例化
btn=new Button("确定");//实现确定功能的按钮
btn.addActionListener(new Enter());//为按钮绑定事件监听,即注册监听器
btn2=new Button("取消");//实现取消功能的按钮
//将标签和按钮添加至面板
add(lb);add(jt);
add(btn);add(btn2);
}
/**
* implements实现父类,子类不可以覆盖父类的方法或者变量。
* 即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
*/
class Enter implements ActionListener{
//ActionListener响应TextField中的Enter
@Override//如果想重写父类的方法,在方法前面加上@Override系统可以帮忙检查方法的正确性
public void actionPerformed(ActionEvent e){
/**
*组件发生事件的时候,会将事件包装成一个ActionEvent对象,也就是这里的e
*从e里可以获得事件源对象。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//如果事件源对象得到的命令行为执行确定按钮的功能
if(e.getActionCommand().equals("确定")){
con.setBackground(Color.red);//设置背景颜色为红色
//连接数据库
Connection sin=Dbcon.getconnectin();
String TNo=jt.getText();//教师教职工号
/**
* Java异常处理
* try{}选定捕获异常的范围,将可能发生异常的语句放在try块中
* catch语句块中对异常对象进行处理
* 每个try语句块可以伴随一个或多个catch语句
* catch语句块用于处理可能产生的不同类型的异常对象。
*/
try {
/**
* PreparedStatement对象可以防止sql注入
*/
PreparedStatement stmt;//声明一个类型为PreparedStatement的变量stmt
//删除教师表中教职工号为*的信息数据
stmt=sin.prepareStatement("delete from Teacher where TNo=?");
/**
* setObject()
* 第一个参数指SQL语句中的第几个参数
* 第二个参数指要设置的值
*/
stmt.setObject(1,TNo);//设置SQL语句中的第一个参数教职工号
/**
* 如果已知某个过程返回两个结果集,则在使用方法 execute 执行该过程后,
* 必须调用方法 getResultSet 获得第一个结果集,然后调用适当的 getXXX 方法获取其中的值。
* 要获得第二个结果集,需要先调用 getMoreResults 方法,然后再调用 getResultSet 方法。
* 如果已知某个过程返回两个更新计数,则首先调用方法 getUpdateCount,然后调用 getMoreResults,并再次调用 getUpdateCount。
* 如果结果是 ResultSet对象,则方法 execute 返回 true;如果结果是 Java int,则返回 false。
*/
stmt.execute();//返回对象,结果集
} catch (SQLException h) {
/**
* 当try语句中出现异常是时,会执行catch中的语句,
* java运行时系统会自动将catch括号中的SQLException h 初始化
* h是此对象引用名称。然后h会自动调用SQLException类中指定的方法,
* 就出现了h.printStackTrace()。
*/
h.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
}
dispose();//释放所有本机屏幕资源
TianjiaDialog tg=new TianjiaDialog();//新建一个TianjiaDialog
tg.show();//显示添加窗口
}
}
}
}
教师基本信息的相关修改操作
教师基本信息修改后录入的操作
1.3 教师基本信息查询
教师基本信息的查询操作,为了更好的符合使用者的体验,
提供了通过查询按钮去查询教师的基本信息和通过执行SQL 语句命令 进行教师基本信息的查询。
教师基本信息查询代码
package com.company;
import java.awt.*;//用于创建用户界面和绘制图像的所有类
import java.awt.event.*;//用于处理AWT组件触发的不同类型事件的接口和类
import javax.swing.*;//提供“轻量级”组件,尽量让组件在所有平台工作方式相同
import java.sql.*;//进行服务器端数据源访问和处理
/**
* CxDialog(查询)
*/
public class CxDialog extends JFrame {
//查询继承图形化界面设置容器(JFrame)
/**
*private定义只能在这个类里调用
*public定义外部可以调用,但是也可以修改,这样不安全,所以就用了final
* 这样,外部即可以调用,也不怕被人修改
*/
//宽度320像素
public static final int Width =320;
//高度230像素
public static final int Heigth =230;
//创建按钮btn,btn2
Button btn,btn2;
//创建标签,编辑单行文本
JTextField jt;
//构造查询方法,初始化组件
public CxDialog(){
//定义控件的大小,设置控件的宽度和高度
setSize(Width,Heigth);
//将组件移到新位置,用820和200表示新位置左上角坐标
setLocation(820,200);
//设置标题栏查询字符串
setTitle(new String("查询:"));
setLayout(new FlowLayout());
/**
* 添加到容器中的组件放在一个列表中
* 列表的顺序将定义组件在容器内的正向堆栈顺序。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//将教师查询属性实例化
jt=new JTextField(20);//创建文本框jt,指定可见列数为20列
Label lb=new Label("工号:");//定义一个全局变量lb,将他放入contentPane中
//将按钮进行实例化
btn=new Button("确定");//实现确定功能的按钮
btn.addActionListener(new Enter());//为按钮绑定事件监听,即注册监听器
btn2=new Button("取消");//实现取消功能的按钮
//将标签和按钮添加至面板
add(lb);add(jt);
add(btn);add(btn2);
}
/**
* implements实现父类,子类不可以覆盖父类的方法或者变量。
* 即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
*/
class Enter implements ActionListener{
//ActionListener响应TextFieled中的Enter
@Override//如果想重写父类的方法,在方法的前面加上@Override系统可以帮忙检查方法的正确性
public void actionPerformed(ActionEvent e){
/**
* 组件发生事件时,会将事件包装成一个ActionEvent对象,也就是这里的e
* 从e里可以获得事件源对象。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//如果事件源对象得到的命令行为执行确定按钮的功能
if(e.getActionCommand().equals("确定")){
con.setBackground(Color.green);//设置背景颜色为绿色
//连接数据库
Connection sin=Dbcon.getconnectin();
String TNo=jt.getText();//教师教职工号
ResultSet rs=null;//定义这个ResultSet的对象rs
PreparedStatement stmt=null;//定义这个PreparedStatement的对象stmt
/**
* Java异常处理
* try{}选定捕获异常的范围,将可能发生异常的语句放在try块中
* catch语句块中对异常对象进行处理
* 每个try语句块可以伴随一个或多个catch语句
* catch语句块用于处理可能产生的不同类型的异常对象。
*/
try {
//查询教师表中教职工号为*的信息数据
stmt=sin.prepareStatement("select * from Teacher where TNo=?");
/**
* setObject()
* 第一个参数指SQL语句中的第几个参数
* 第二个参数指要设置的值
*/
stmt.setObject(1,TNo);//设置SQL语句中的第一个参数教职工号
rs=stmt.executeQuery();//返回查询的对象rs
while(rs.next()){
//是游标向下移动一行的
String msg=rs.getString("TNo")+"\t"+rs.getString("TN")+"\t"+rs.getString("TSex")+"\t"+rs.getString("TAge")+"\t"+rs.getString("TPro")+"\t"+rs.getString("TDept")+"\t"+rs.getString("TCourse")+"\t"+rs.getString("TEtime")+"\n";
JOptionPane.showMessageDialog(null,msg,"查询结果:",JOptionPane.NO_OPTION );
}
} catch (SQLException h) {
/**
* 当try语句中出现异常是时,会执行catch中的语句,
* java运行时系统会自动将catch括号中的SQLException h 初始化
* h是此对象引用名称。然后h会自动调用SQLException类中指定的方法,
* 就出现了h.printStackTrace()。
*/
h.printStackTrace();//在命令行打印异常信息在程序中出错的位置及原因
}
}
dispose();//释放所有本机屏幕资源
}
}
通过点击查询按钮,实现对教师基本信息的查询
通过执行SQL 语句实现对教师基本信息的查询操作,SQL语句的执行为:“select * from Teacher”或者“select * from Teacher where TNo=‘’”
1.4 教师基本信息删除
教师基本信息的删除操作,提供了通过删除按钮去删除教师的基本信息和通过执行SQL语句命令 进行教师基本信息的删除。
package com.company;
import java.awt.*;//用于创建用户界面和绘制图像的所有类
import java.awt.event.*;//用于处理AWT组件触发的不同类型事件的接口和类
import javax.swing.*;//提供“轻量级”组件,尽量让组件在所有平台工作方式相同
import java.sql.*;//进行服务器端数据源访问和处理
/**
* DeleteDialog(删除)
*/
public class DeleteDialog extends JFrame {
//删除继承图形化界面设置容器(JFrame)
/**
*private定义只能在这个类里调用
*public定义外部可以调用,但是也可以修改,这样不安全,所以就用了final
*这样,外部即可以调用,也不怕被人修改
*/
//宽度320像素
public static final int Width =320;
//高度230像素
public static final int Heigth =230;
//创建按钮btn,btn2
Button btn,btn2;
//创建标签,编辑单行文本
JTextField jt;
//构造删除方法,初始化组件
public DeleteDialog(){
//定义控件的大小,设置控件的宽度和高度
setSize(Width,Heigth);
//将组件移到新位置,用820和200表示新位置左上角坐标
setLocation(820,200);
//设置标题栏删除字符串
setTitle(new String("删除:"));
setLayout(new FlowLayout());
/**
* 添加到容器中的组件放在一个列表中
* 列表的顺序将定义组件在容器内的正向堆栈顺序。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//将教师删除属性实例化
jt=new JTextField(20);//创建文本框jt,指定可见列数为20列
Label lb=new Label("工号:");//定义一个全局变量lb,将他放入contentPane中
//将按钮进行实例化
btn=new Button("确定");//实现确定功能的按钮
btn.addActionListener(new Enter());//为按钮绑定事件监听,即注册监听器
btn2=new Button("取消");//实现取消功能的按钮
//将标签和按钮添加至面板
add(lb);add(jt);
add(btn);add(btn2);
}
/**
* implements实现父类,子类不可以覆盖父类的方法或者变量。
* 即使子类定义与父类相同的变量或者函数,也会被父类取代掉。
*/
class Enter implements ActionListener{
//ActionListener响应TextField中的Enter
@Override//如果想重写父类的方法,在方法的前面加上@Override系统可以帮忙检查方法的正确性
public void actionPerformed(ActionEvent e){
/**
* 组件发生事件时,会将事件包装成一个ActionEvent对象,也就是这里的e
* 从e里可以获得事件源对象。
*/
Container con=getContentPane();//获得一个容器面板用来存放组件
//如果事件源对象得到的命令行为执行确定按钮的功能
if(e.getActionCommand().equals("确定")){
con.setBackground(Color.red);//设置背景颜色为绿色
String TNo=jt.getText();//教师教职工号
//连接数据库
Connection sin=Dbcon.getconnectin();
Dbcon.delete(sin, TNo);//插入数组
/**
* showConfirmDialog 询问一个确认问题,如 yes/no/cancel。
* showInputDialog 提示要求某些输入。
* showMessageDialog 告知用户某事已发生。
* showOptionDialog 上述三项的大统一 (Grand Unification)。
* messageType定义 message 的样式。外观管理器根据此值对对话框进行不同地布置,并且通常提供默认图标。可能的值为:
* ERROR_MESSAGE、INFORMATION_MESSAGE、WARNING_MESSAGE、QUESTION_MESSAGE、PLAIN_MESSAGE
*/
JOptionPane.showMessageDialog(null,"删除成功!","操作提示",JOptionPane.INFORMATION_MESSAGE );//删除成功等信息
dispose();//释放所有本机屏幕资源
}
}
}
}
通过点击删除按钮,实现对教师基本信息的删除
通过执行SQL 语句实现对教师基本信息的删除操作,SQL语句的执行为:“delete from Teacher where TNo=‘’”
二、结果验证
登录界面
增加界面
删除界面
修改界面
查询界面
总结
重点理解异常处理的相关操作和逻辑分析的思想,了解和掌握了相关驱动程序的配置,从而实现了程序和数据库的紧密结合。
了解掌握java程序生成jar包的相关操作,对数据库的学习得到了巩固和运用。
其中GUI设计关于教师的一些相关信息属性和系统的功能配置,可以根据需要添加,下一步进行代码的优化,也是努力学习的一个重要环节。
参考文献
[1]王越. JAVA编程语言在计算机软件开发中的应用[J]. 电子技术与软件工程,2019(01):35.
[2]党岳雷. 基于Java语言的高校信息化APP设计[J]. 微型电脑应用,2019,35(01):119-121.
[3]黄文娟. 基于Java和MySQL的图书馆信息化管理系统设计[J]. 电子设计工程,2019,27(02):20-24.
[4]桂林斌. 基于Java EE的高校科研成果管理系统的设计与实现[J]. 电脑与电信,2018(Z1):24-27.
[5]徐巍.基于Java技术平台的教学管理系统设计与实现[J].卫星电视与宽带多媒体,2020(02):67-68.
源代码文件
基于java的GUI教师基本信息管理系统生成jar包版
基于java的教师基本信息设计代码注释及验证视频
基于java的GUI教师基本信息管理系统