Java图形界面开发–图文并茂建立学生管理系统

来源:http://blog.csdn.net/qq_25827845/article/details/50932501

作者:温柔狠角色

图形用户界面(Graphics User Interface,GUI)是用户与程序交互的窗口,比命令行的界面更加直观并且更好操作。

这是本人在学习java图形界面开发阶段一步一步实现的超级简易的学生管理系统。虽然说不入大神法眼,但这确实是费了自己不少心血。对于我这样的菜鸟来说,考虑不周到,一不小心就Exception,然后就是自己调呀调。在此分享出来希望对和我一样的菜鸟有帮助。

程序完整代码下载地址见:

chaohuangtianjie994/The-System-of-Student-Manager

步骤一:静态登录界面的实现。

代码如下:

/*** 功能:学生成绩管理系统* 步骤1、登录界面的静态实现* author:ywq*/importjava.awt.*;importjavax.swing.*;publicclassLoginextendsJFrame{//定义组件JPaneljp1,jp2,jp3;//面板JLabeljlb1,jlb2;//标签JButtonjb1,jb2;//按钮JTextFieldjtf;//文本JPasswordFieldjpf;//密码publicstaticvoidmain(String[]args){Loginwin=newLogin();}//构造函数publicLogin(){//创建面板jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();//创建标签jlb1=newJLabel("用户名");jlb2=newJLabel("密    码");//创建按钮jb1=newJButton("登录");jb2=newJButton("重置");//创建文本框jtf=newJTextField(10);//创建密码框jpf=newJPasswordField(10);//设置布局管理this.setLayout(newGridLayout(3,1));//网格式布局//加入各个组件jp1.add(jlb1);jp1.add(jtf);jp2.add(jlb2);jp2.add(jpf);jp3.add(jb1);jp3.add(jb2);//加入到JFramethis.add(jp1);this.add(jp2);this.add(jp3);//设置窗体this.setTitle("用户登录");//窗体标签this.setSize(300,150);//窗体大小this.setLocationRelativeTo(null);//在屏幕中间显示(居中显示)this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出关闭JFramethis.setVisible(true);//显示窗体//锁定窗体this.setResizable(false);}}

运行界面如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图1

本静态界面的实现,使用了网格布局,3行1列,在每一行中放入了一个JPanel面板,每个面板上又分别放入所需的组件,整体构成了一个静态的登录界面。

步骤二:添加监听,并且进行验证用户名和密码。

代码如下:

/** 功能:学生成绩管理系统* 步骤1:登录界面的静态实现* 步骤2:添加对各个组件的监听。* 步骤3:对用户名和密码进行验证。* author:ywq*/packagecom.package_1;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;publicclassLoginextendsJFrameimplementsActionListener{//定义组件JButtonjb1,jb2=null;JRadioButtonjrb1,jrb2=null;JPaneljp1,jp2,jp3,jp4=null;JTextFieldjtf=null;JLabeljlb1,jlb2,jlb3=null;JPasswordFieldjpf=null;ButtonGroupbg=null;//设定用户名和密码finalStringstu_name="6";finalStringstu_pwd="1";finalStringtea_name="5";finalStringtea_pwd="1";publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLoginms=newLogin();}publicLogin(){//创建组件jb1=newJButton("登录");jb2=newJButton("重置");//设置监听jb1.addActionListener(this);jb2.addActionListener(this);jrb1=newJRadioButton("教师");jrb2=newJRadioButton("学生");bg=newButtonGroup();bg.add(jrb1);bg.add(jrb2);jrb2.setSelected(true);jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jp4=newJPanel();jlb1=newJLabel("用户名:");jlb2=newJLabel("密    码:");jlb3=newJLabel("权    限:");jtf=newJTextField(10);jpf=newJPasswordField(10);//加入到JPanel中jp1.add(jlb1);jp1.add(jtf);jp2.add(jlb2);jp2.add(jpf);jp3.add(jlb3);jp3.add(jrb1);jp3.add(jrb2);jp4.add(jb1);jp4.add(jb2);//加入JFrame中this.add(jp1);this.add(jp2);this.add(jp3);this.add(jp4);//设置布局管理器this.setLayout(newGridLayout(4,1));//给窗口设置标题this.setTitle("学生成绩管理系统");//设置窗体大小this.setSize(300,200);//设置窗体初始位置this.setLocation(200,150);//设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗体this.setVisible(true);this.setResizable(true);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="登录"){//如果选中教师登录if(jrb1.isSelected()){tealogin();}elseif(jrb2.isSelected())//学生在登录系统{stulogin();}}elseif(e.getActionCommand()=="重置"){clear();}}//学生登录判断方法publicvoidstulogin(){if(stu_name.equals(jtf.getText())&&stu_pwd.equals(jpf.getText())){//          System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);clear();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框clear();}}//教师登录判断方法publicvoidtealogin(){if(tea_name.equals(jtf.getText())&&tea_pwd.equals(jpf.getText())){//          System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);clear();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框clear();}}//清空文本框和密码框publicvoidclear(){jtf.setText("");jpf.setText("");}}

运行界面如下所示:

Java图形界面开发–图文并茂建立学生管理系统插图3
Java图形界面开发–图文并茂建立学生管理系统插图5
Java图形界面开发–图文并茂建立学生管理系统插图7

本程序加入了对各个组件的监听,首先implements ActionListener接口,然后注册监听。在ActionPerformance方法中进行相应的处理事件。

当点击登录按钮时,首先判断是哪个权限的用户在进行登录,分别调用taelogin()和stulogin()方法来进行验证。在验证方法中,对文本框和密码框的内容进行一个判断,分别弹出不同的提示信息。

步骤三:(1)程序连接数据库来进行用户名和密码的验证!!!(2)验证成功后进行界面的切换!!!

代码如下:

/** 功能:学生成绩管理系统* 步骤1、登录界面的静态实现* 步骤2:实现界面的切换* 步骤3:使用数据库来验证用户名和密码* author:ywq*/packagecom.package_2;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.*;publicclassloginextendsJFrameimplementsActionListener{//定义登录界面的组件JButtonjb1,jb2,jb3=null;JRadioButtonjrb1,jrb2=null;JPaneljp1,jp2,jp3,jp4=null;JTextFieldjtf=null;JLabeljlb1,jlb2,jlb3=null;JPasswordFieldjpf=null;ButtonGroupbg=null;//设定用户名和密码staticStringuserword;staticStringpwd;staticConnectionct=null;PreparedStatementps=null;ResultSetrs=null;publicstaticvoidmain(String[]args){// TODO Auto-generated method stubloginms=newlogin();try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");ct=DriverManager.getConnection("jdbc:odbc:ywq");}catch(Exceptione){e.printStackTrace();}}//构造函数publiclogin(){//创建组件jb1=newJButton("登录");jb2=newJButton("重置");jb3=newJButton("退出");//设置监听jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);//以上三个按钮的监听统一放在了actionPerformance()中//监听也可以是下边这种方式//      jb3.addActionListener(new ActionListener()//      {////          @Override//          public void actionPerformed(ActionEvent e) {//              // TODO Auto-generated method stub//              System.exit(0);//          }////      });jrb1=newJRadioButton("教师");jrb2=newJRadioButton("学生");bg=newButtonGroup();bg.add(jrb1);bg.add(jrb2);jrb2.setSelected(true);jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jp4=newJPanel();jlb1=newJLabel("用户名:");jlb2=newJLabel("密    码:");jlb3=newJLabel("权    限:");jtf=newJTextField(10);jpf=newJPasswordField(10);//加入到JPanel中jp1.add(jlb1);jp1.add(jtf);jp2.add(jlb2);jp2.add(jpf);jp3.add(jlb3);jp3.add(jrb1);jp3.add(jrb2);jp4.add(jb1);jp4.add(jb2);jp4.add(jb3);//加入JFrame中this.add(jp1);this.add(jp2);this.add(jp3);this.add(jp4);//设置布局管理器this.setLayout(newGridLayout(4,1));//给窗口设置标题this.setTitle("学生成绩管理系统");//设置窗体大小this.setSize(300,200);//设置窗体初始位置this.setLocation(200,150);//设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗体this.setVisible(true);this.setResizable(true);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="退出"){System.exit(0);}elseif(e.getActionCommand()=="登录"){//如果选中教师登录if(jrb1.isSelected()){//创建火箭车try{ps=ct.prepareStatement("select * from info where 权限=? ");//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,"教师");//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();//循环取出while(rs.next()){//将教师的用户名和密码取出userword=rs.getString(2);pwd=rs.getString(3);System.out.println("成功获取到密码和用户名from数据库");System.out.println(userword+"t"+pwd+"t");}}catch(SQLExceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较tealogin();}elseif(jrb2.isSelected())//学生在登录系统{//创建火箭车try{ps=ct.prepareStatement("select * from info where 权限=? ");//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,"学生");//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();//循环取出while(rs.next()){//将学生的用户名和密码取出userword=rs.getString(2);pwd=rs.getString(3);System.out.println("成功获取到密码和用户名from数据库");System.out.println(userword+"t"+pwd+"t");}}catch(SQLExceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较stulogin();}}elseif(e.getActionCommand()=="重置"){clear();}}//清空文本框和密码框publicvoidclear(){jtf.setText("");jpf.setText("");}//学生登录判断方法publicvoidstulogin(){if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText())){//              System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);clear();//关闭当前界面dispose();//创建一个新界面UIui=newUI();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框clear();}}//教师登录判断方法publicvoidtealogin(){if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText())){//              System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);clear();//关闭当前界面dispose();//创建一个新界面,适用于教师来管理学生UIui=newUI();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框clear();}}}

首先建立相应的数据库,如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图9

在程序中,首先是在主函数中(1)加载数据库驱动 。(2)建立连接

此处有问题,可参考博客Java程序操作数据库SQLserver详解

在进行验证时,通过建立火箭车将所需的SQL语句发送到数据库,并且查询得到相应的数据。利用此数据和用户输入的用户名和密码进行验证。当验证成功时,即进行界面的跳转。

页面跳转关键部分:

(1)调用dispose()方法关闭当前界面

(2)重新new一个新界面,比如本例中的new UI();其中,UI是另一个完整的界面。

如此实现了界面的切换。

UI界面的代码如下:

packagecom.package_2;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassUIextendsJFrameimplementsActionListener{//定义组件JButtonjb1,jb2=null;JPaneljp1,jp2,jp3=null;JLabeljlb1,jlb2,jlb3,jlb4=null;publicstaticvoidmain(String[]args){// TODO Auto-generated method stub//          UI  ui=new UI();}//构造函数publicUI()//不能申明为void!!!!!否则弹不出新界面{//创建组件jb1=newJButton("课程管理");jb2=newJButton("成绩查询");jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jlb1=newJLabel("姓名");jlb2=newJLabel("学号");jlb3=newJLabel("最新公告:");jlb4=newJLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);jp1.add(jlb2);jp2.add(jb1);jp2.add(jlb3);jp3.add(jb2);jp3.add(jlb4);this.add(jp1);this.add(jp2);this.add(jp3);//设置布局管理器this.setLayout(newGridLayout(3,3,50,50));this.setTitle("学生成绩管理系统");this.setSize(400,300);this.setLocation(200,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){// TODO Auto-generated method stub}}

以上程序的执行结果如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图11
Java图形界面开发–图文并茂建立学生管理系统插图13

步骤4:(1)程序连接数据库来进行用户名和密码的验证!!!(2)验证成功后进行界面的切换!!!

对步骤三的代码进行一定的优化

代码如下:Login.java

/** 功能:学生成绩管理系统* 步骤1、登录界面的静态实现* 步骤2:实现界面的切换* 步骤3:使用数据库来验证用户名和密码* 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类* author:ywq*/packagecom.package_5;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.*;publicclassLoginextendsJFrameimplementsActionListener{//定义登录界面的组件JButtonjb1,jb2,jb3=null;JRadioButtonjrb1,jrb2=null;JPaneljp1,jp2,jp3,jp4=null;JTextFieldjtf=null;JLabeljlb1,jlb2,jlb3=null;JPasswordFieldjpf=null;ButtonGroupbg=null;//菜单项JMenuBarjmb=null;JMenujm=null;JMenuItemjmi1,jmi2=null;publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLoginms=newLogin();}//构造函数publicLogin(){//创建组件jb1=newJButton("登录");jb2=newJButton("重置");jb3=newJButton("退出");//设置监听jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);jmb=newJMenuBar();//JMenuBar指菜单栏jm=newJMenu("选项");//JMenu是菜单栏中的选项栏jmi1=newJMenuItem("开始");//JMenuItem指选项栏中的选项jmi2=newJMenuItem("退出系统");jm.add(jmi1);jm.add(jmi2);jmb.add(jm);jrb1=newJRadioButton("教师",true);jrb2=newJRadioButton("学生");bg=newButtonGroup();bg.add(jrb1);bg.add(jrb2);//      jrb2.setSelected(true);jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jp4=newJPanel();jlb1=newJLabel("用户名:");jlb2=newJLabel("密    码:");jlb3=newJLabel("权    限:");jtf=newJTextField(10);jpf=newJPasswordField(10);//加入到JPanel中jp1.add(jlb1);jp1.add(jtf);jp2.add(jlb2);jp2.add(jpf);jp3.add(jlb3);jp3.add(jrb1);jp3.add(jrb2);jp4.add(jb1);jp4.add(jb2);jp4.add(jb3);//加入JFrame中this.setJMenuBar(jmb);this.add(jp1);this.add(jp2);this.add(jp3);this.add(jp4);//设置布局管理器this.setLayout(newGridLayout(4,1));//给窗口设置标题this.setTitle("学生成绩管理系统");//设置窗体大小this.setSize(300,250);//设置窗体初始位置this.setLocation(200,150);//设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗体this.setVisible(true);this.setResizable(true);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="退出"){System.exit(0);}elseif(e.getActionCommand()=="登录"){//当点击登录按钮时,首先与数据库建立连接GetSQL.ConnectSQL();//如果选中教师登录if(jrb1.isSelected()){GetSQL.sqlquery("教师");//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较this.tealogin();}elseif(jrb2.isSelected())//学生在登录系统{GetSQL.sqlquery("学生");//从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较this.stulogin();}}elseif(e.getActionCommand()=="重置"){this.clear();}}//清空文本框和密码框publicvoidclear(){jtf.setText("");jpf.setText("");}//学生登录判断方法publicvoidstulogin(){if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText())){//                  System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();//关闭当前界面dispose();//创建一个新界面Stu_UIui=newStu_UI();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框this.clear();}}//教师登录判断方法publicvoidtealogin(){if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText())){//                  System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();//关闭当前界面dispose();//创建一个新界面,适用于教师来管理学生Teachert=newTeacher();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框this.clear();}}}

SQL.java 负责与数据库建立连接,包括俩方法。一个是连接数据库方法,一个是查询方法。可进一步扩展。

packagecom.package_5;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;//写一个类,用来与数据库建立连接,并且查询数据classGetSQL{//设定用户名和密码staticStringuserword;staticStringpwd;staticConnectionct=null;staticPreparedStatementps=null;staticResultSetrs=null;//用于连接数据库的方法,可用于子类的继承publicstaticvoidConnectSQL(){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");ct=DriverManager.getConnection("jdbc:odbc:ywq");}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}//用于向数据库进行查询的方法publicstaticvoidsqlquery(Strings){//创建火箭车try{ps=ct.prepareStatement("select * from info where 权限=? ");//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,s);//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();//循环取出while(rs.next()){//将教师的用户名和密码取出userword=rs.getString(2);pwd=rs.getString(3);System.out.println("成功获取到密码和用户名from数据库");System.out.println(userword+"t"+pwd+"t");}}catch(Exceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}}Stu_UI.java学生登录成功后跳转的界面[java]viewplaincopy在CODE上查看代码片派生到我的代码片packagecom.package_5;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassStu_UIextendsJFrameimplementsActionListener{//定义组件JButtonjb1,jb2=null;JPaneljp1,jp2,jp3=null;JLabeljlb1,jlb2,jlb3,jlb4=null;//      public static void main(String[] args) {//          // TODO Auto-generated method stub//          Stu_UI  ui=new Stu_UI();//      }//构造函数publicStu_UI()//不能申明为void!!!!!否则弹不出新界面{//创建组件jb1=newJButton("课程管理");jb2=newJButton("成绩查询");jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jlb1=newJLabel("姓名");jlb2=newJLabel("学号");jlb3=newJLabel("最新公告:");jlb4=newJLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);jp1.add(jlb2);jp2.add(jb1);jp2.add(jlb3);jp3.add(jb2);jp3.add(jlb4);this.add(jp1);this.add(jp2);this.add(jp3);//设置布局管理器this.setLayout(newGridLayout(3,3,50,50));this.setTitle("学生成绩管理系统");this.setSize(400,300);this.setLocation(200,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){// TODO Auto-generated method stub}}

Teacher.java 教师登录成功后跳转的界面。

packagecom.package_5;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassTeacherextendsJFrameimplementsActionListener{//定义组件JLabeljl2=null;JTextFieldjtf=null;JButtonjb=null;JPaneljp1,jp2=null;JTablejtable=null;Stringname=null;Stringnum=null;staticConnectionct=null;PreparedStatementps=null;ResultSetrs=null;//  public static void main(String[] args) {//      // TODO Auto-generated method stub//      Teacher t=new Teacher();////      try {//          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//          ct=DriverManager.getConnection("jdbc:odbc:ywq");//      } catch (Exception e) {////          e.printStackTrace();//      }////  }//构造函数publicTeacher(){//创建组件jl2=newJLabel("请输入学号:");jtf=newJTextField(10);jb=newJButton("查询");//设置监听jb.addActionListener(this);//设置表格finalObject[]columnNames={"姓名","学号"};Object[][]rowData={{"小明","2015110512"},{"小","2015110"},{"小红","2015110511"}};jtable=newJTable(rowData,columnNames);jp1=newJPanel();jp2=newJPanel();jp1.add(jl2);jp1.add(jtf);jp1.add(jb);jp2.add(jtable);this.add(jp1);this.add(jp2);this.setLayout(newGridLayout(2,3));this.setTitle("学生成绩管理系统—教师");this.setSize(500,400);this.setLocation(200,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="查询"){//JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);//创建火箭车try{ps=ct.prepareStatement("select * from info where xuehao=? ");//给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,jtf.getText());//ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();//循环取出if(rs.next()){name=rs.getString(5);System.out.println("查询成功from数据库");System.out.println(name+"t");JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);}else{System.out.println("查询失败");JOptionPane.showMessageDialog(null,"查询失败!","提示消息",JOptionPane.WARNING_MESSAGE);}//              while(rs.next()){//                  //将教师的用户名和密码取出////                     num=rs.getString(4);//                   name=rs.getString(5);//                  System.out.println("查询成功from数据库");//                  System.out.println(name+"t");//              }}catch(SQLExceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}}}

步骤5:优化数据库验证条件,使用不同的表来进行查询;教师界面增加查询功能。

代码如下:Login6.java

/** 功能:学生成绩管理系统* 步骤1、登录界面的静态实现* 步骤2:实现界面的切换* 步骤3:使用数据库来验证用户名和密码* 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类* 步骤5:优化代码,增加判断条件。* 步骤6:使用数据库进行查询时,优化查询方法和判断条件。数据库的表中可有多个数据。引入不同的表来查询。* 步骤7:教师界面实现了查询某个学生信息和某教师信息的功能。* author:ywq*/packagecom.package_7;importjavax.swing.*;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.*;publicclassLogin6extendsJFrameimplementsActionListener{//定义登录界面的组件JButtonjb1,jb2,jb3=null;JRadioButtonjrb1,jrb2=null;JPaneljp1,jp2,jp3,jp4=null;JTextFieldjtf=null;JLabeljlb1,jlb2,jlb3=null;JPasswordFieldjpf=null;ButtonGroupbg=null;//菜单项JMenuBarjmb=null;JMenujm=null;JMenuItemjmi1,jmi2=null;publicstaticvoidmain(String[]args){// TODO Auto-generated method stubLogin6ms=newLogin6();}//构造函数publicLogin6(){//创建组件jb1=newJButton("登录");jb2=newJButton("重置");jb3=newJButton("退出");//设置监听jb1.addActionListener(this);jb2.addActionListener(this);jb3.addActionListener(this);jmb=newJMenuBar();//JMenuBar指菜单栏jm=newJMenu("选项");//JMenu是菜单栏中的选项栏jmi1=newJMenuItem("开始");//JMenuItem指选项栏中的选项jmi2=newJMenuItem("退出系统");jm.add(jmi1);jm.add(jmi2);jmb.add(jm);jrb1=newJRadioButton("教师",true);jrb2=newJRadioButton("学生");bg=newButtonGroup();bg.add(jrb1);bg.add(jrb2);//      jrb2.setSelected(true);jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jp4=newJPanel();jlb1=newJLabel("用户名:");jlb2=newJLabel("密    码:");jlb3=newJLabel("权    限:");jtf=newJTextField(10);jpf=newJPasswordField(10);//加入到JPanel中jp1.add(jlb1);jp1.add(jtf);jp2.add(jlb2);jp2.add(jpf);jp3.add(jlb3);jp3.add(jrb1);jp3.add(jrb2);jp4.add(jb1);jp4.add(jb2);jp4.add(jb3);//加入JFrame中this.setJMenuBar(jmb);this.add(jp1);this.add(jp2);this.add(jp3);this.add(jp4);//设置布局管理器this.setLayout(newGridLayout(4,1));//给窗口设置标题this.setTitle("学生成绩管理系统");//设置窗体大小this.setSize(300,250);//设置窗体初始位置this.setLocation(200,150);//设置当关闭窗口时,保证JVM也退出this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//显示窗体this.setVisible(true);this.setResizable(true);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand()=="退出"){System.exit(0);}elseif(e.getActionCommand()=="登录"){if(!jtf.getText().isEmpty()&&!jpf.getText().isEmpty()){//当点击登录按钮时,首先与数据库建立连接GetSQL.ConnectSQL();//如果选中教师登录if(jrb1.isSelected()){GetSQL.querytea("教师",jtf.getText());//首先判断是否存在该用户,即是否得到了密码if(GetSQL.pwd==null){this.clear();}else{//调用登录方法this.tealogin();}}elseif(jrb2.isSelected())//学生在登录系统{GetSQL.querystu("学生",jtf.getText());//首先判断是否存在该用户,即是否得到了密码if(GetSQL.pwd==null){this.clear();}else{//调用登录方法this.stulogin();}}}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();}}elseif(e.getActionCommand()=="重置"){this.clear();}}//清空文本框和密码框publicvoidclear(){jtf.setText("");jpf.setText("");}//学生登录判断方法publicvoidstulogin(){if(GetSQL.pwd.equals(jpf.getText())){//                  System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();//关闭当前界面dispose();//创建一个新界面Stu_UI6ui=newStu_UI6();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框this.clear();}}//教师登录判断方法publicvoidtealogin(){if(GetSQL.pwd.equals(jpf.getText())){//                  System.out.println("登录成功");JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);this.clear();//关闭当前界面dispose();//创建一个新界面,适用于教师来管理学生Teacher6t=newTeacher6();}elseif(jtf.getText().isEmpty()&&jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jtf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);}elseif(jpf.getText().isEmpty()){JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);}else{JOptionPane.showMessageDialog(null,"用户名或者密码错误!n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);//清空输入框this.clear();}}}

SQL.java

/** 功能:用来和数据库SQLserver进行连接,以及相应的查询方法。*/packagecom.package_7;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjavax.swing.JOptionPane;//写一个类,用来与数据库建立连接,并且查询数据classGetSQL{// 设定用户名和密码staticStringuserword;staticStringpwd;staticStringenglish;staticStringnum;staticStringname;staticStringchinese;staticStringzhengzhi;staticStringmath;staticStringage;staticStringsalary;staticStringsex;staticStringzhicheng;staticStringteanum;staticStringteaname;staticConnectionct=null;staticPreparedStatementps=null;staticResultSetrs=null;// 用于连接数据库的方法,可用于子类的继承publicstaticvoidConnectSQL(){try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");ct=DriverManager.getConnection("jdbc:odbc:ywq");System.out.println("The SQL is connected");}catch(Exceptione){// TODO Auto-generated catch blocke.printStackTrace();}}// 用于向数据库进行查询的方法publicstaticvoidquerystu(Strings,Stringusername){// 创建火箭车try{ps=ct.prepareStatement("select * from info where 权限=? and 用户名=? ");// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,s);ps.setString(2,username);// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();// 循环取出if(rs.next()){// 将教师的用户名和密码取出userword=rs.getString(2);pwd=rs.getString(3);System.out.println("成功获取到密码和用户名from数据库");System.out.println(userword+"t"+pwd+"t");}else{JOptionPane.showMessageDialog(null,"没有此用户,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);}}catch(Exceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}//在教师表中进行查询publicstaticvoidquerytea(Strings,Stringname){// 创建火箭车try{ps=ct.prepareStatement("select * from info_tea where 权限=? and 用户名=? ");// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,s);ps.setString(2,name);// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();// 循环取出if(rs.next()){// 将教师的用户名和密码取出userword=rs.getString(2);pwd=rs.getString(3);System.out.println("成功获取到密码和用户名from数据库");System.out.println(userword+"t"+pwd+"t");}else{JOptionPane.showMessageDialog(null,"没有此用户,请重新输入!","提示消息",JOptionPane.WARNING_MESSAGE);}}catch(Exceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}//从数据库中根据学号或者教工号来查询数据,并且填入表格。publicstaticvoidgetdatastu(Strings){// 创建火箭车try{ps=ct.prepareStatement("select * from info where 学号 =? ");// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,s);// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();if(rs.next()){// 将教师的用户名和密码取出num=rs.getString(4);name=rs.getString(5);math=rs.getString(6);chinese=rs.getString(7);english=rs.getString(8);zhengzhi=rs.getString(9);}else{JOptionPane.showMessageDialog(null,"沒有此学生,请重新输入","提示消息",JOptionPane.WARNING_MESSAGE);}}catch(Exceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}publicstaticvoidgetdatatea(Strings){// 创建火箭车try{ps=ct.prepareStatement("select * from info_tea where 教师编号号 =? ");// 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式ps.setString(1,s);// ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集rs=ps.executeQuery();if(rs.next()){// 将教师的用户名和密码取出teanum=rs.getString(4);teaname=rs.getString(5);sex=rs.getString(6);salary=rs.getString(7);zhicheng=rs.getString(8);age=rs.getString(9);}else{JOptionPane.showMessageDialog(null,"沒有此教师,请重新输入","提示消息",JOptionPane.WARNING_MESSAGE);}}catch(Exceptione1){// TODO Auto-generated catch blocke1.printStackTrace();}}}

Stu_UI6.java

/** 功能:学生登录成功界面。**/packagecom.package_7;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassStu_UI6extendsJFrameimplementsActionListener{//定义组件JButtonjb1,jb2=null;JPaneljp1,jp2,jp3=null;JLabeljlb1,jlb2,jlb3,jlb4=null;//      public static void main(String[] args) {//          // TODO Auto-generated method stub//          Stu_UI6  ui=new Stu_UI6();//      }//构造函数publicStu_UI6()//不能申明为void!!!!!否则弹不出新界面{//创建组件jb1=newJButton("课程管理");jb2=newJButton("成绩查询");jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jlb1=newJLabel("姓名");jlb2=newJLabel("学号");jlb3=newJLabel("最新公告:");jlb4=newJLabel("我校举行六十周年校庆的通知");jp1.add(jlb1);jp1.add(jlb2);jp2.add(jb1);jp2.add(jlb3);jp3.add(jb2);jp3.add(jlb4);this.add(jp1);this.add(jp2);this.add(jp3);//设置布局管理器this.setLayout(newGridLayout(3,3,50,50));this.setTitle("学生成绩管理系统");this.setSize(400,300);this.setLocation(200,200);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}@OverridepublicvoidactionPerformed(ActionEvente){// TODO Auto-generated method stub}}

Teacher.java

/** 功能:实现了查询学生和老师的信息,并且显示在表格中的功能。*/packagecom.package_7;importjavax.swing.*;importjavax.swing.table.DefaultTableModel;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;publicclassTeacher6extendsJFrameimplementsActionListener{// 定义组件JLabeljl2,jl,jl3,jl4=null;JTextFieldjtf,jtf2=null;JButtonjb,jb2=null;JPaneljp1,jp2,jp3,jp4,jp5,jp6=null;DefaultTableModelmodel,model2=null;JTabletable,table2=null;JScrollPanejsp,jsp2=null;//  public static void main(String[] args) {// TODO Auto-generated method stub//      Teacher6 t = new Teacher6();//  }// 构造函数publicTeacher6(){// 创建组件jl=newJLabel("请输入学号:");jl2=newJLabel("请输入教工号:");jl3=newJLabel("学生信息表:");jl4=newJLabel("教师信息表:");jtf=newJTextField(10);jtf2=newJTextField(10);jb=newJButton("查询1");jb2=newJButton("查询2");// 设置监听jb.addActionListener(this);jb2.addActionListener(this);// 设置表格1String[]colnames={"姓名","学号","数学","语文","英语","政治"};model=newDefaultTableModel(colnames,3);table=newJTable(model);jsp=newJScrollPane(table);//设置表格2String[]col={"姓名","教工号","性别","工资","职称","年龄"};model2=newDefaultTableModel(col,3);table2=newJTable(model2);jsp2=newJScrollPane(table2);jp1=newJPanel();jp2=newJPanel();jp3=newJPanel();jp4=newJPanel();jp5=newJPanel();jp6=newJPanel();jp5.setLayout(newBorderLayout());jp6.setLayout(newBorderLayout());jp1.add(jl);jp1.add(jtf);jp1.add(jb);jp1.setLayout(newFlowLayout(FlowLayout.LEFT));jp1.setPreferredSize(newDimension(20,20));jp3.add(jl2);jp3.add(jtf2);jp3.add(jb2);jp3.setLayout(newFlowLayout(FlowLayout.LEFT));jp2.add(jsp);jp4.add(jsp2);jp5.add(jl3,BorderLayout.SOUTH);jp6.add(jl4,BorderLayout.SOUTH);this.add(jp1);this.add(jp5);this.add(jp2);this.add(jp3);this.add(jp6);this.add(jp4);this.setLayout(newGridLayout(6,1));this.setTitle("学生成绩管理系统—教师");this.setSize(500,500);this.setLocation(150,150);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);this.setResizable(false);}@OverridepublicvoidactionPerformed(ActionEvente){if(e.getActionCommand().equals("查询1")&&!jtf.getText().isEmpty()){// 当点击查询按钮1时,首先与数据库建立连接GetSQL.ConnectSQL();GetSQL.getdatastu(jtf.getText());jtf.setText("");//          System.out.println(GetSQL.english);//          System.out.println(GetSQL.chinese);// 将数据填入表格table.setValueAt(GetSQL.name,0,0);table.setValueAt(GetSQL.num,0,1);table.setValueAt(GetSQL.math,0,2);table.setValueAt(GetSQL.chinese,0,3);table.setValueAt(GetSQL.english,0,4);table.setValueAt(GetSQL.zhengzhi,0,5);}elseif(e.getActionCommand().equals("查询2")&&!jtf2.getText().isEmpty()){// 当点击查询按钮1时,首先与数据库建立连接GetSQL.ConnectSQL();GetSQL.getdatatea(jtf2.getText());jtf2.setText("");// 将数据填入表格table2.setValueAt(GetSQL.teaname,0,0);table2.setValueAt(GetSQL.teanum,0,1);table2.setValueAt(GetSQL.sex,0,2);table2.setValueAt(GetSQL.salary,0,3);table2.setValueAt(GetSQL.zhicheng,0,4);table2.setValueAt(GetSQL.age,0,5);}else{JOptionPane.showMessageDialog(null,"请输入要查询的编号","提示消息",JOptionPane.WARNING_MESSAGE);}}}

其中,数据库数据如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图15

在前面的数据库查询中,使用了

ps=ct.prepareStatement(“select * from info where 权限=? “);

这条语句,是依次将数据库中的权限学生或者”教师”的数据全部取出来,进行判断时,会产生错误。因为其将最后一个数据复制给了username和password。

改进方法:

ps = ct.prepareStatement(“select * from info where 权限=? and 用户名=? “);

此条语句按照jtf.getText()来进行查询,如果查到此用户名则判断密码是否正确。否则将弹出用户名不存在的提示,较好的解决了查询问题。

如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图17
教师登录成功界面,如图:
Java图形界面开发–图文并茂建立学生管理系统插图19

在此系统中,可以对数据库中学生表和教师表中的信息进行查询,按照提示,可输入学号和教工号来实现。

如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图21

说说经验之谈,在构建表格的时候,列名怎么也不出现。

查阅资料后发现,只有将JTable加入到JScrollPane中才会显示列名。代码如下:

// 设置表格1String[]colnames={"姓名","学号","数学","语文","英语","政治"};model=newDefaultTableModel(colnames,3);table=newJTable(model);jsp=newJScrollPane(table);

然后将JScrollPane添加进一个JPanel中,实现了表格的设置。

至于点击查询按钮所进行的查询工作就和前面大同小异了。当输入的学号或者教工号不存在时,会给出一个提示。如图所示:

Java图形界面开发–图文并茂建立学生管理系统插图23

简易信息管理系统适合新手学Java图形界面开发。1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。2、使用了事件监听、Java操作SQLserver数据库等知识。3、图形化界面中使用了JTable等组件,将查询结果显示在表格中。

其实,在这个简单的程序中,至少我可以看出可以使用单例模式和门面模式。见:

Java设计模式—门面模式(带案例分析)

Java图形界面开发—简易登录注册小程序

经过好久的努力,在图形化界面开发上,希望能够帮助更多正在学习图形界面开发的小伙伴~

本文完!

—————————————————————————————————————————

在学习过程如果有任何疑问,请来极乐网(http://www.dreawer.com)提问,或者扫描下方二维码,关注极乐官方微信,在平台下方留言~

Java图形界面开发–图文并茂建立学生管理系统插图25

原创文章 Java图形界面开发–图文并茂建立学生管理系统,版权所有
如若转载,请注明出处:https://www.itxiaozhan.cn/20228831.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注