步骤一:创建登录界面

/*** 功能:学生成绩管理系统* 步骤1、登录界面的静态实现* author:hyy*/
import java.awt.*;
import javax.swing.*;
public class Login extends JFrame{//定义组件JPanel jp1,jp2,jp3;//面板JLabel jlb1,jlb2;//标签,没有框JButton jb1,jb2;//按钮,有框的窗体JTextField jtf;//文本框JPasswordField jpf;//密码框,敲入的数字和字符不会显示在其中public static void main(String[] args) {     //主方法Login win=new Login();}//构造函数public Login(){//创建面板jp1 = new JPanel();jp2 = new JPanel();jp3 = new JPanel();//创建标签jlb1 = new JLabel("用户名");jlb2 = new JLabel("密    码");//创建按钮jb1 = new JButton("登录");jb2 = new JButton("重置");//创建文本框jtf = new JTextField(10);//创建密码框jpf = new JPasswordField(10);//设置布局管理this.setLayout(new GridLayout(3, 1));//网格式布局,3行一列//加入各个组件jp1.add(jlb1);  //将标签1添加到第一行面板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);      //这样窗体不能被改变大小}
}

结果:

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

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

代码如下:

[java] view plain copy
  1. /*
  2. * 功能:学生成绩管理系统
  3. * 步骤1:登录界面的静态实现
  4. * 步骤2:添加对各个组件的监听。
  5. * 步骤3:对用户名和密码进行验证。
  6. * author:hyy
  7. */
  8. package com.package_1;
  9. import javax.swing.*;
  10. import java.awt.*;
  11. import java.awt.event.ActionEvent;
  12. import java.awt.event.ActionListener;
  13. public class Login extends JFrame implements ActionListener {
  14. //定义组件
  15. JButton jb1,jb2=null;
  16. JRadioButton jrb1,jrb2=null;
  17. JPanel jp1,jp2,jp3,jp4=null;
  18. JTextField jtf=null;
  19. JLabel jlb1,jlb2,jlb3=null;
  20. JPasswordField jpf=null;
  21. ButtonGroup bg=null;
  22. //设定用户名和密码
  23. final String stu_name="6";
  24. final String stu_pwd="1";
  25. final String tea_name="5";
  26. final String tea_pwd="1";
  27. public static void main(String[] args) {
  28. // TODO Auto-generated method stub
  29. Login  ms=new Login();
  30. }
  31. public Login()
  32. {
  33. //创建组件
  34. jb1 = new JButton("登录");
  35. jb2 = new JButton("重置");
  36. //设置监听
  37. jb1.addActionListener(this);
  38. jb2.addActionListener(this);
  39. jrb1 = new JRadioButton("教师");     //带点的选择小按钮
  40. jrb2 = new JRadioButton("学生");
  41. bg = new ButtonGroup();             //创建按钮组,这样做的目的就是为了二者选择其一
  42. bg.add(jrb1);
  43. bg.add(jrb2);
  44. jrb2.setSelected(true);             //默认选择jrb2
  45. jp1 = new JPanel();
  46. jp2 = new JPanel();
  47. jp3 = new JPanel();
  48. jp4 = new JPanel();
  49. jlb1 = new JLabel("用户名:");
  50. jlb2 = new JLabel("密    码:");
  51. jlb3 = new JLabel("权    限:");
  52. jtf = new JTextField(10);          //创建普通文本框
  53. jpf = new JPasswordField(10);     //创建密码登录框
  54. //加入到JPanel中
  55. jp1.add(jlb1);
  56. jp1.add(jtf);
  57. jp2.add(jlb2);
  58. jp2.add(jpf);
  59. jp3.add(jlb3);
  60. jp3.add(jrb1);
  61. jp3.add(jrb2);
  62. jp4.add(jb1);
  63. jp4.add(jb2);
  64. //加入JFrame中
  65. this.add(jp1);
  66. this.add(jp2);
  67. this.add(jp3);
  68. this.add(jp4);
  69. //设置布局管理器
  70. this.setLayout(new GridLayout(4,1));
  71. //给窗口设置标题
  72. this.setTitle("学生成绩管理系统");
  73. //设置窗体大小
  74. this.setSize(300,200);
  75. //设置窗体初始位置
  76. this.setLocation(200, 150);
  77. //设置当关闭窗口时,保证JVM也退出
  78. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  79. //显示窗体
  80. this.setVisible(true);
  81. this.setResizable(true);
  82. }
  83. @Override
  84. public void actionPerformed(ActionEvent e) {
  85. if(e.getActionCommand() == "登录")
  86. {
  87. //如果选中教师登录
  88. if(jrb1.isSelected())
  89. {
  90. tealogin();
  91. }else if(jrb2.isSelected())                //学生在登录系统
  92. {
  93. stulogin();
  94. }
  95. }else if(e.getActionCommand() == "重置")
  96. {
  97. clear();
  98. }
  99. }
  100. //学生登录判断方法
  101. public void stulogin()
  102. {
  103. if(stu_name.equals(jtf.getText())&&stu_pwd.equals(jpf.getText()))
  104. {
  105. //          System.out.println("登录成功");
  106. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  107. clear();
  108. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  109. {
  110. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  111. }else if(jtf.getText().isEmpty())
  112. {
  113. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  114. }else if(jpf.getText().isEmpty())
  115. {
  116. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  117. }else
  118. {
  119. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  120. //清空输入框
  121. clear();
  122. }
  123. }
  124. //教师登录判断方法
  125. public void tealogin()
  126. {
  127. if(tea_name.equals(jtf.getText())&&tea_pwd.equals(jpf.getText()))
  128. {
  129. //          System.out.println("登录成功");
  130. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  131. clear();
  132. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  133. {
  134. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  135. }else if(jtf.getText().isEmpty())
  136. {
  137. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  138. }else if(jpf.getText().isEmpty())
  139. {
  140. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  141. }else
  142. {
  143. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  144. //清空输入框
  145. clear();
  146. }
  147. }
  148. //清空文本框和密码框
  149. public  void clear()
  150. {
  151. jtf.setText("");
  152. jpf.setText("");
  153. }
  154. }

运行界面如下所示:

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

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

步骤三:(1)程序连接数据库来进行用户名和密码的验证!!!

(2)验证成功后进行界面的切换!!!

代码如下:

[java] view plain copy
  1. /*
  2. * 功能:学生成绩管理系统
  3. * 步骤1、登录界面的静态实现
  4. * 步骤2:实现界面的切换
  5. * 步骤3:使用数据库来验证用户名和密码
  6. * author:hyy
  7. */
  8. package com.package_2;
  9. import javax.swing.*;
  10. import java.awt.*;
  11. import java.awt.event.ActionEvent;
  12. import java.awt.event.ActionListener;
  13. import java.sql.*;
  14. public class login extends JFrame implements ActionListener {
  15. //定义登录界面的组件
  16. JButton jb1,jb2,jb3 = null;
  17. JRadioButton jrb1,jrb2 = null;
  18. JPanel jp1,jp2,jp3,jp4 = null;
  19. JTextField jtf = null;
  20. JLabel jlb1,jlb2,jlb3 = null;
  21. JPasswordField jpf = null;
  22. ButtonGroup bg = null;
  23. //设定用户名和密码
  24. static String userword;
  25. static String pwd;
  26. static Connection ct=null;
  27. PreparedStatement ps=null;
  28. ResultSet rs=null;
  29. public static void main(String[] args) {
  30. // TODO Auto-generated method stub
  31. login  ms=new login();
  32. try {
  33. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");    // 加载数据库尔驱动
  34. ct=DriverManager.getConnection("jdbc:odbc:ywq");  //连接
  35. } catch (Exception e) {
  36. e.printStackTrace();   //在命令行打印异常信息在程序中出错的位置及原因
  37. }
  38. }
  39. //构造函数
  40. public login()
  41. {
  42. //创建组件
  43. jb1 = new JButton("登录");
  44. jb2 = new JButton("重置");
  45. jb3 = new JButton("退出");
  46. //设置监听
  47. jb1.addActionListener(this);
  48. jb2.addActionListener(this);
  49. jb3.addActionListener(this);
  50. //以上三个按钮的监听统一放在了actionPerformance()中
  51. //监听也可以是下边这种方式
  52. //      jb3.addActionListener(new ActionListener()
  53. //      {
  54. //
  55. //          @Override
  56. //          public void actionPerformed(ActionEvent e) {
  57. //              // TODO Auto-generated method stub
  58. //              System.exit(0);
  59. //          }
  60. //
  61. //      });
  62. jrb1=new JRadioButton("教师");
  63. jrb2=new JRadioButton("学生");
  64. bg=new ButtonGroup();
  65. bg.add(jrb1);
  66. bg.add(jrb2);
  67. jrb2.setSelected(true);
  68. jp1=new JPanel();
  69. jp2=new JPanel();
  70. jp3=new JPanel();
  71. jp4=new JPanel();
  72. jlb1=new JLabel("用户名:");
  73. jlb2=new JLabel("密    码:");
  74. jlb3=new JLabel("权    限:");
  75. jtf=new JTextField(10);
  76. jpf=new JPasswordField(10);
  77. //加入到JPanel中
  78. jp1.add(jlb1);
  79. jp1.add(jtf);
  80. jp2.add(jlb2);
  81. jp2.add(jpf);
  82. jp3.add(jlb3);
  83. jp3.add(jrb1);
  84. jp3.add(jrb2);
  85. jp4.add(jb1);
  86. jp4.add(jb2);
  87. jp4.add(jb3);
  88. //加入JFrame中
  89. this.add(jp1);
  90. this.add(jp2);
  91. this.add(jp3);
  92. this.add(jp4);
  93. //设置布局管理器
  94. this.setLayout(new GridLayout(4,1));
  95. //给窗口设置标题
  96. this.setTitle("学生成绩管理系统");
  97. //设置窗体大小
  98. this.setSize(300,200);
  99. //设置窗体初始位置
  100. this.setLocation(200, 150);
  101. //设置当关闭窗口时,保证JVM也退出
  102. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  103. //显示窗体
  104. this.setVisible(true);
  105. this.setResizable(true);
  106. }
  107. @Override
  108. public void actionPerformed(ActionEvent e) {
  109. if(e.getActionCommand()=="退出")
  110. {
  111. System.exit(0);  //0正常结束,退出JVM    1异常结束
  112. }else if(e.getActionCommand()=="登录")
  113. {
  114. //如果选中教师登录
  115. if(jrb1.isSelected())
  116. {
  117. //创建火箭车
  118. try {
  119. ps=ct.prepareStatement("select * from info where 权限=? ");
  120. //给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  121. ps.setString(1, "教师");      //跟数据库存储的第一个字段的比较
  122. //ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  123. rs=ps.executeQuery();      //执行查询的方法
  124. //循环取出
  125. while(rs.next()){
  126. //将教师的用户名和密码取出
  127. userword=rs.getString(2);
  128. pwd=rs.getString(3);
  129. System.out.println("成功获取到密码和用户名from数据库");
  130. System.out.println(userword+"\t"+pwd+"\t");
  131. }
  132. } catch (SQLException e1) {
  133. // TODO Auto-generated catch block
  134. e1.printStackTrace();
  135. }
  136. //从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
  137. tealogin();
  138. }else if(jrb2.isSelected()) //学生在登录系统
  139. {
  140. //创建火箭车
  141. try {
  142. ps=ct.prepareStatement("select * from info where 权限=? ");
  143. //给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  144. ps.setString(1, "学生");
  145. //ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  146. rs=ps.executeQuery();
  147. //循环取出
  148. while(rs.next()){
  149. //将学生的用户名和密码取出
  150. userword=rs.getString(2);
  151. pwd=rs.getString(3);
  152. System.out.println("成功获取到密码和用户名from数据库");
  153. System.out.println(userword+"\t"+pwd+"\t");
  154. }
  155. } catch (SQLException e1) {
  156. // TODO Auto-generated catch block
  157. e1.printStackTrace();
  158. }
  159. //从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
  160. stulogin();
  161. }
  162. }else if(e.getActionCommand()=="重置")
  163. {
  164. clear();
  165. }
  166. }
  167. //清空文本框和密码框
  168. public  void clear()
  169. {
  170. jtf.setText("");
  171. jpf.setText("");
  172. }
  173. //学生登录判断方法
  174. public void stulogin()
  175. {
  176. if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
  177. {
  178. //              System.out.println("登录成功");
  179. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  180. clear();
  181. //关闭当前界面
  182. dispose();
  183. //创建一个新界面
  184. UI ui=new UI();
  185. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  186. {
  187. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  188. }else if(jtf.getText().isEmpty())
  189. {
  190. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  191. }else if(jpf.getText().isEmpty())
  192. {
  193. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  194. }else
  195. {
  196. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  197. //清空输入框
  198. clear();
  199. }
  200. }
  201. //教师登录判断方法
  202. public void tealogin()
  203. {
  204. if(userword.equals(jtf.getText())&&pwd.equals(jpf.getText()))
  205. {
  206. //              System.out.println("登录成功");
  207. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  208. clear();
  209. //关闭当前界面
  210. dispose();
  211. //创建一个新界面,适用于教师来管理学生
  212. UI ui=new UI();
  213. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  214. {
  215. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  216. }else if(jtf.getText().isEmpty())
  217. {
  218. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  219. }else if(jpf.getText().isEmpty())
  220. {
  221. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  222. }else
  223. {
  224. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  225. //清空输入框
  226. clear();
  227. }
  228. }
  229. }

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

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

此处有问题,可参考博客 http://blog.csdn.net/qq_25827845/article/details/50836362

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

页面跳转关键部分:

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

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

如此实现了界面的切换。

UI界面的代码如下:

[java] view plain copy
  1. package com.package_2;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. public class UI extends JFrame implements ActionListener
  6. {
  7. //定义组件
  8. JButton jb1,jb2=null;
  9. JPanel jp1,jp2,jp3=null;
  10. JLabel jlb1,jlb2,jlb3,jlb4=null;
  11. public static void main(String[] args) {
  12. // TODO Auto-generated method stub
  13. //          UI  ui=new UI();
  14. }
  15. //构造函数
  16. public  UI()    //不能申明为void!!!!!否则弹不出新界面
  17. {
  18. //创建组件
  19. jb1=new JButton("课程管理");
  20. jb2=new JButton("成绩查询");
  21. jp1=new JPanel();
  22. jp2=new JPanel();
  23. jp3=new JPanel();
  24. jlb1=new JLabel("姓名");
  25. jlb2=new JLabel("学号");
  26. jlb3=new JLabel("最新公告:");
  27. jlb4=new JLabel("我校举行六十周年校庆的通知");
  28. jp1.add(jlb1);
  29. jp1.add(jlb2);
  30. jp2.add(jb1);
  31. jp2.add(jlb3);
  32. jp3.add(jb2);
  33. jp3.add(jlb4);
  34. this.add(jp1);
  35. this.add(jp2);
  36. this.add(jp3);
  37. //设置布局管理器
  38. this.setLayout(new GridLayout(3,3,50,50));
  39. this.setTitle("学生成绩管理系统");
  40. this.setSize(400,300);
  41. this.setLocation(200, 200);
  42. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  43. this.setVisible(true);
  44. }
  45. @Override
  46. public void actionPerformed(ActionEvent e) {
  47. // TODO Auto-generated method stub
  48. }
  49. }

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

步骤4:(1)程序连接数据库来进行用户名和密码的验证!!!

(2)验证成功后进行界面的切换!!!【对步骤三的代码进行一定的优化】

代码如下:Login.java

[java] view plain copy
  1. /*
  2. * 功能:学生成绩管理系统
  3. * 步骤1、登录界面的静态实现
  4. * 步骤2:实现界面的切换
  5. * 步骤3:使用数据库来验证用户名和密码
  6. * 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
  7. * author:hyy
  8. */
  9. package com.package_5;
  10. import javax.swing.*;
  11. import java.awt.*;
  12. import java.awt.event.ActionEvent;
  13. import java.awt.event.ActionListener;
  14. import java.sql.*;
  15. public class Login extends JFrame implements ActionListener {
  16. //定义登录界面的组件
  17. JButton jb1,jb2,jb3=null;
  18. JRadioButton jrb1,jrb2=null;
  19. JPanel jp1,jp2,jp3,jp4=null;
  20. JTextField jtf=null;
  21. JLabel jlb1,jlb2,jlb3=null;
  22. JPasswordField jpf=null;
  23. ButtonGroup bg=null;
  24. //菜单项
  25. JMenuBar jmb=null;
  26. JMenu jm=null;
  27. JMenuItem jmi1,jmi2=null;
  28. public static void main(String[] args) {
  29. // TODO Auto-generated method stub
  30. Login  ms=new Login();
  31. }
  32. //构造函数
  33. public Login()
  34. {
  35. //创建组件
  36. jb1=new JButton("登录");
  37. jb2=new JButton("重置");
  38. jb3=new JButton("退出");
  39. //设置监听
  40. jb1.addActionListener(this);
  41. jb2.addActionListener(this);
  42. jb3.addActionListener(this);
  43. jmb = new JMenuBar();   //JMenuBar指菜单栏
  44. jm = new JMenu("选项"); //JMenu是菜单栏中的选项栏
  45. jmi1 = new JMenuItem("开始"); //JMenuItem指选项栏中的选项
  46. jmi2 = new JMenuItem("退出系统");
  47. jm.add(jmi1);
  48. jm.add(jmi2);
  49. jmb.add(jm);
  50. jrb1=new JRadioButton("教师",true);  //默认选择老师
  51. jrb2=new JRadioButton("学生");
  52. bg=new ButtonGroup();
  53. bg.add(jrb1);
  54. bg.add(jrb2);
  55. //      jrb2.setSelected(true);
  56. jp1=new JPanel();
  57. jp2=new JPanel();
  58. jp3=new JPanel();
  59. jp4=new JPanel();
  60. jlb1=new JLabel("用户名:");
  61. jlb2=new JLabel("密    码:");
  62. jlb3=new JLabel("权    限:");
  63. jtf=new JTextField(10);
  64. jpf=new JPasswordField(10);
  65. //加入到JPanel中
  66. jp1.add(jlb1);
  67. jp1.add(jtf);
  68. jp2.add(jlb2);
  69. jp2.add(jpf);
  70. jp3.add(jlb3);
  71. jp3.add(jrb1);
  72. jp3.add(jrb2);
  73. jp4.add(jb1);
  74. jp4.add(jb2);
  75. jp4.add(jb3);
  76. //加入JFrame中
  77. this.setJMenuBar(jmb);
  78. this.add(jp1);
  79. this.add(jp2);
  80. this.add(jp3);
  81. this.add(jp4);
  82. //设置布局管理器
  83. this.setLayout(new GridLayout(4,1));
  84. //给窗口设置标题
  85. this.setTitle("学生成绩管理系统");
  86. //设置窗体大小
  87. this.setSize(300,250);
  88. //设置窗体初始位置
  89. this.setLocation(200, 150);
  90. //设置当关闭窗口时,保证JVM也退出
  91. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  92. //显示窗体
  93. this.setVisible(true);
  94. this.setResizable(true);
  95. }
  96. @Override
  97. public void actionPerformed(ActionEvent e) {
  98. if(e.getActionCommand()=="退出")
  99. {
  100. System.exit(0);
  101. }else if(e.getActionCommand()=="登录")
  102. {
  103. //当点击登录按钮时,首先与数据库建立连接
  104. GetSQL.ConnectSQL();
  105. //如果选中教师登录
  106. if(jrb1.isSelected())
  107. {
  108. GetSQL.sqlquery("教师");
  109. //从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
  110. this.tealogin();
  111. }else if(jrb2.isSelected()) //学生在登录系统
  112. {
  113. GetSQL.sqlquery("学生");
  114. //从数据库得到用户名和密码后调用登录方法,与输入的用户名和密码作比较
  115. this.stulogin();
  116. }
  117. }else if(e.getActionCommand()=="重置")
  118. {
  119. this.clear();
  120. }
  121. }
  122. //清空文本框和密码框
  123. public  void clear()
  124. {
  125. jtf.setText("");
  126. jpf.setText("");
  127. }
  128. //学生登录判断方法
  129. public void stulogin()
  130. {
  131. if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
  132. {
  133. //                  System.out.println("登录成功");
  134. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  135. this.clear();
  136. //关闭当前界面
  137. dispose();
  138. //创建一个新界面
  139. Stu_UI ui=new Stu_UI();
  140. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  141. {
  142. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  143. }else if(jtf.getText().isEmpty())
  144. {
  145. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  146. }else if(jpf.getText().isEmpty())
  147. {
  148. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  149. }else
  150. {
  151. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  152. //清空输入框
  153. this.clear();
  154. }
  155. }
  156. //教师登录判断方法
  157. public void tealogin()
  158. {
  159. if(GetSQL.userword.equals(jtf.getText())&&GetSQL.pwd.equals(jpf.getText()))
  160. {
  161. //                  System.out.println("登录成功");
  162. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  163. this.clear();
  164. //关闭当前界面
  165. dispose();
  166. //创建一个新界面,适用于教师来管理学生
  167. Teacher t=new Teacher();
  168. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  169. {
  170. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  171. }else if(jtf.getText().isEmpty())
  172. {
  173. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  174. }else if(jpf.getText().isEmpty())
  175. {
  176. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  177. }else
  178. {
  179. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  180. //清空输入框
  181. this.clear();
  182. }
  183. }
  184. }

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

[java] view plain copy
  1. package com.package_5;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. //写一个类,用来与数据库建立连接,并且查询数据
  7. class GetSQL
  8. {
  9. //设定用户名和密码
  10. static String userword;
  11. static String pwd;
  12. static Connection ct=null;
  13. static PreparedStatement ps=null;
  14. static ResultSet rs=null;
  15. //用于连接数据库的方法,可用于子类的继承
  16. public static void ConnectSQL()
  17. {
  18. try {
  19. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  20. ct=DriverManager.getConnection("jdbc:odbc:ywq");
  21. } catch (Exception e) {
  22. // TODO Auto-generated catch block
  23. e.printStackTrace();
  24. }
  25. }
  26. //用于向数据库进行查询的方法
  27. public static void sqlquery(String s)
  28. {
  29. //创建火箭车
  30. try {
  31. ps=ct.prepareStatement("select * from info where 权限=? ");
  32. //给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  33. ps.setString(1, s);
  34. //ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  35. rs=ps.executeQuery();
  36. //循环取出
  37. while(rs.next()){
  38. //将教师的用户名和密码取出
  39. userword=rs.getString(2);
  40. pwd=rs.getString(3);
  41. System.out.println("成功获取到密码和用户名from数据库");
  42. System.out.println(userword+"\t"+pwd+"\t");
  43. }
  44. } catch (Exception e1) {
  45. // TODO Auto-generated catch block
  46. e1.printStackTrace();
  47. }
  48. }
  49. }

Stu_UI.java  学生登录成功后跳转的界面

[java] view plain copy
  1. package com.package_5;
  2. import java.awt.*;
  3. import java.awt.event.*;
  4. import javax.swing.*;
  5. public class Stu_UI extends JFrame implements ActionListener
  6. {
  7. //定义组件
  8. JButton jb1,jb2=null;
  9. JPanel jp1,jp2,jp3=null;
  10. JLabel jlb1,jlb2,jlb3,jlb4=null;
  11. //      public static void main(String[] args) {
  12. //          // TODO Auto-generated method stub
  13. //          Stu_UI  ui=new Stu_UI();
  14. //      }
  15. //构造函数
  16. public  Stu_UI()    //不能申明为void!!!!!否则弹不出新界面
  17. {
  18. //创建组件
  19. jb1=new JButton("课程管理");
  20. jb2=new JButton("成绩查询");
  21. jp1=new JPanel();
  22. jp2=new JPanel();
  23. jp3=new JPanel();
  24. jlb1=new JLabel("姓名");
  25. jlb2=new JLabel("学号");
  26. jlb3=new JLabel("最新公告:");
  27. jlb4=new JLabel("我校举行六十周年校庆的通知");
  28. jp1.add(jlb1);
  29. jp1.add(jlb2);
  30. jp2.add(jb1);
  31. jp2.add(jlb3);
  32. jp3.add(jb2);
  33. jp3.add(jlb4);
  34. this.add(jp1);
  35. this.add(jp2);
  36. this.add(jp3);
  37. //设置布局管理器
  38. this.setLayout(new GridLayout(3,3,50,50));
  39. this.setTitle("学生成绩管理系统");
  40. this.setSize(400,300);
  41. this.setLocation(200, 200);
  42. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  43. this.setVisible(true);
  44. }
  45. @Override
  46. public void actionPerformed(ActionEvent e) {
  47. // TODO Auto-generated method stub
  48. }
  49. }

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

[java] view plain copy
  1. package com.package_5;
  2. import javax.swing.*;
  3. import java.awt.*;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6. import java.sql.Connection;
  7. import java.sql.DriverManager;
  8. import java.sql.PreparedStatement;
  9. import java.sql.ResultSet;
  10. import java.sql.SQLException;
  11. public class Teacher extends JFrame implements ActionListener{
  12. //定义组件
  13. JLabel jl2=null;
  14. JTextField jtf=null;
  15. JButton jb=null;
  16. JPanel jp1,jp2=null;
  17. JTable jtable=null;
  18. String name=null;
  19. String num=null;
  20. static Connection ct=null;
  21. PreparedStatement ps=null;
  22. ResultSet rs=null;
  23. //  public static void main(String[] args) {
  24. //      // TODO Auto-generated method stub
  25. //      Teacher t=new Teacher();
  26. //
  27. //      try {
  28. //          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  29. //          ct=DriverManager.getConnection("jdbc:odbc:ywq");
  30. //      } catch (Exception e) {
  31. //
  32. //          e.printStackTrace();
  33. //      }
  34. //
  35. //  }
  36. //构造函数
  37. public Teacher()
  38. {
  39. //创建组件
  40. jl2=new JLabel("请输入学号:");
  41. jtf=new JTextField(10);
  42. jb=new JButton("查询");
  43. //设置监听
  44. jb.addActionListener(this);
  45. //设置表格
  46. final Object[] columnNames = {"姓名","学号"};
  47. Object[][] rowData = {
  48. {"小明","2015110512"},
  49. {"小","2015110"},
  50. {"小红","2015110511"}
  51. };
  52. jtable=new JTable(rowData, columnNames);
  53. jp1=new JPanel();
  54. jp2=new JPanel();
  55. jp1.add(jl2);
  56. jp1.add(jtf);
  57. jp1.add(jb);
  58. jp2.add(jtable);
  59. this.add(jp1);
  60. this.add(jp2);
  61. this.setLayout(new GridLayout(2,3));
  62. this.setTitle("学生成绩管理系统—教师");
  63. this.setSize(500,400);
  64. this.setLocation(200, 200);
  65. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  66. this.setVisible(true);
  67. }
  68. @Override
  69. public void actionPerformed(ActionEvent e) {
  70. if(e.getActionCommand()=="查询")
  71. {
  72. //JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  73. //创建火箭车
  74. try {
  75. ps=ct.prepareStatement("select * from info where xuehao=? ");
  76. //给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  77. ps.setString(1, jtf.getText());
  78. //ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  79. rs=ps.executeQuery();
  80. //循环取出
  81. if(rs.next())
  82. {
  83. name=rs.getString(5);
  84. System.out.println("查询成功from数据库");
  85. System.out.println(name+"\t");
  86. JOptionPane.showMessageDialog(null,"查询成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  87. }else
  88. {
  89. System.out.println("查询失败");
  90. JOptionPane.showMessageDialog(null,"查询失败!","提示消息",JOptionPane.WARNING_MESSAGE);
  91. }
  92. //              while(rs.next()){
  93. //                  //将教师的用户名和密码取出
  94. num=rs.getString(4);
  95. //                   name=rs.getString(5);
  96. //                  System.out.println("查询成功from数据库");
  97. //                  System.out.println(name+"\t");
  98. //              }
  99. } catch (SQLException e1) {
  100. // TODO Auto-generated catch block
  101. e1.printStackTrace();
  102. }
  103. }
  104. }
  105. }

步骤5:优化数据库验证条件,使用不同的表来进行查询。

教师界面增加查询功能。

代码如下:Login6.java

[java] view plain copy
  1. /*
  2. * 功能:学生成绩管理系统
  3. * 步骤1、登录界面的静态实现
  4. * 步骤2:实现界面的切换
  5. * 步骤3:使用数据库来验证用户名和密码
  6. * 步骤4:对代码进行优化。增加专门用来与数据库进行连接的类
  7. * 步骤5:优化代码,增加判断条件。
  8. * 步骤6:使用数据库进行查询时,优化查询方法和判断条件。数据库的表中可有多个数据。引入不同的表来查询。
  9. * 步骤7:教师界面实现了查询某个学生信息和某教师信息的功能。
  10. * author:ywq
  11. */
  12. package com.package_7;
  13. import javax.swing.*;
  14. import java.awt.*;
  15. import java.awt.event.ActionEvent;
  16. import java.awt.event.ActionListener;
  17. import java.sql.*;
  18. public class Login6 extends JFrame implements ActionListener {
  19. //定义登录界面的组件
  20. JButton jb1,jb2,jb3=null;
  21. JRadioButton jrb1,jrb2=null;
  22. JPanel jp1,jp2,jp3,jp4=null;
  23. JTextField jtf=null;
  24. JLabel jlb1,jlb2,jlb3=null;
  25. JPasswordField jpf=null;
  26. ButtonGroup bg=null;
  27. //菜单项
  28. JMenuBar jmb=null;
  29. JMenu jm=null;
  30. JMenuItem jmi1,jmi2=null;
  31. public static void main(String[] args) {
  32. // TODO Auto-generated method stub
  33. Login6  ms=new Login6();
  34. }
  35. //构造函数
  36. public Login6()
  37. {
  38. //创建组件
  39. jb1=new JButton("登录");
  40. jb2=new JButton("重置");
  41. jb3=new JButton("退出");
  42. //设置监听
  43. jb1.addActionListener(this);
  44. jb2.addActionListener(this);
  45. jb3.addActionListener(this);
  46. jmb=new JMenuBar(); //JMenuBar指菜单栏
  47. jm=new JMenu("选项"); //JMenu是菜单栏中的选项栏
  48. jmi1=new JMenuItem("开始"); //JMenuItem指选项栏中的选项
  49. jmi2=new JMenuItem("退出系统");
  50. jm.add(jmi1);
  51. jm.add(jmi2);
  52. jmb.add(jm);
  53. jrb1=new JRadioButton("教师",true);
  54. jrb2=new JRadioButton("学生");
  55. bg=new ButtonGroup();
  56. bg.add(jrb1);
  57. bg.add(jrb2);
  58. //      jrb2.setSelected(true);
  59. jp1=new JPanel();
  60. jp2=new JPanel();
  61. jp3=new JPanel();
  62. jp4=new JPanel();
  63. jlb1=new JLabel("用户名:");
  64. jlb2=new JLabel("密    码:");
  65. jlb3=new JLabel("权    限:");
  66. jtf=new JTextField(10);
  67. jpf=new JPasswordField(10);
  68. //加入到JPanel中
  69. jp1.add(jlb1);
  70. jp1.add(jtf);
  71. jp2.add(jlb2);
  72. jp2.add(jpf);
  73. jp3.add(jlb3);
  74. jp3.add(jrb1);
  75. jp3.add(jrb2);
  76. jp4.add(jb1);
  77. jp4.add(jb2);
  78. jp4.add(jb3);
  79. //加入JFrame中
  80. this.setJMenuBar(jmb);
  81. this.add(jp1);
  82. this.add(jp2);
  83. this.add(jp3);
  84. this.add(jp4);
  85. //设置布局管理器
  86. this.setLayout(new GridLayout(4,1));
  87. //给窗口设置标题
  88. this.setTitle("学生成绩管理系统");
  89. //设置窗体大小
  90. this.setSize(300,250);
  91. //设置窗体初始位置
  92. this.setLocation(200, 150);
  93. //设置当关闭窗口时,保证JVM也退出
  94. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  95. //显示窗体
  96. this.setVisible(true);
  97. this.setResizable(true);
  98. }
  99. @Override
  100. public void actionPerformed(ActionEvent e) {
  101. if(e.getActionCommand()=="退出")
  102. {
  103. System.exit(0);
  104. }else if(e.getActionCommand()=="登录")
  105. {
  106. if(!jtf.getText().isEmpty() && !jpf.getText().isEmpty())
  107. {
  108. //当点击登录按钮时,首先与数据库建立连接
  109. GetSQL.ConnectSQL();
  110. //如果选中教师登录
  111. if(jrb1.isSelected())
  112. {
  113. GetSQL.querytea("教师",jtf.getText());
  114. //首先判断是否存在该用户,即是否得到了密码
  115. if(GetSQL.pwd ==null)
  116. {
  117. this.clear();
  118. }else
  119. {
  120. //调用登录方法
  121. this.tealogin();
  122. }
  123. }else if(jrb2.isSelected()) //学生在登录系统
  124. {
  125. GetSQL.querystu("学生",jtf.getText());
  126. //首先判断是否存在该用户,即是否得到了密码
  127. if(GetSQL.pwd ==null)
  128. {
  129. this.clear();
  130. }else
  131. {
  132. //调用登录方法
  133. this.stulogin();
  134. }
  135. }
  136. }else if(jtf.getText().isEmpty())
  137. {
  138. JOptionPane.showMessageDialog(null,"请输入用户名","提示消息",JOptionPane.WARNING_MESSAGE);
  139. this.clear();
  140. }else if(jpf.getText().isEmpty())
  141. {
  142. JOptionPane.showMessageDialog(null,"请输入密码","提示消息",JOptionPane.WARNING_MESSAGE);
  143. this.clear();
  144. }
  145. }else if(e.getActionCommand()=="重置")
  146. {
  147. this.clear();
  148. }
  149. }
  150. //清空文本框和密码框
  151. public  void clear()
  152. {
  153. jtf.setText("");
  154. jpf.setText("");
  155. }
  156. //学生登录判断方法
  157. public void stulogin()
  158. {
  159. if(GetSQL.pwd.equals(jpf.getText()))
  160. {
  161. //                  System.out.println("登录成功");
  162. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  163. this.clear();
  164. //关闭当前界面
  165. dispose();
  166. //创建一个新界面
  167. Stu_UI6 ui=new Stu_UI6();
  168. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  169. {
  170. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  171. }else if(jtf.getText().isEmpty())
  172. {
  173. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  174. }else if(jpf.getText().isEmpty())
  175. {
  176. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  177. }else
  178. {
  179. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  180. //清空输入框
  181. this.clear();
  182. }
  183. }
  184. //教师登录判断方法
  185. public void tealogin()
  186. {
  187. if(GetSQL.pwd.equals(jpf.getText()))
  188. {
  189. //                  System.out.println("登录成功");
  190. JOptionPane.showMessageDialog(null,"登录成功!","提示消息",JOptionPane.WARNING_MESSAGE);
  191. this.clear();
  192. //关闭当前界面
  193. dispose();
  194. //创建一个新界面,适用于教师来管理学生
  195. Teacher6 t=new Teacher6();
  196. }else if(jtf.getText().isEmpty()&&jpf.getText().isEmpty())
  197. {
  198. JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  199. }else if(jtf.getText().isEmpty())
  200. {
  201. JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
  202. }else if(jpf.getText().isEmpty())
  203. {
  204. JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
  205. }else
  206. {
  207. JOptionPane.showMessageDialog(null,"用户名或者密码错误!\n请重新输入","提示消息",JOptionPane.ERROR_MESSAGE);
  208. //清空输入框
  209. this.clear();
  210. }
  211. }
  212. }

SQL.java

[java] view plain copy
  1. /*
  2. * 功能:用来和数据库SQLserver进行连接,以及相应的查询方法。
  3. */
  4. package com.package_7;
  5. import java.sql.Connection;
  6. import java.sql.DriverManager;
  7. import java.sql.PreparedStatement;
  8. import java.sql.ResultSet;
  9. import java.sql.SQLException;
  10. import javax.swing.JOptionPane;
  11. //写一个类,用来与数据库建立连接,并且查询数据
  12. class GetSQL {
  13. // 设定用户名和密码
  14. static String userword;
  15. static String pwd;
  16. static String english;
  17. static String num;
  18. static String name;
  19. static String chinese;
  20. static String zhengzhi;
  21. static String math;
  22. static String age;
  23. static String salary;
  24. static String sex;
  25. static String zhicheng;
  26. static String teanum;
  27. static String teaname;
  28. static Connection ct = null;
  29. static PreparedStatement ps = null;
  30. static ResultSet rs = null;
  31. // 用于连接数据库的方法,可用于子类的继承
  32. public static void ConnectSQL() {
  33. try {
  34. Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
  35. ct = DriverManager.getConnection("jdbc:odbc:ywq");
  36. System.out.println("The SQL is connected");
  37. } catch (Exception e) {
  38. // TODO Auto-generated catch block
  39. e.printStackTrace();
  40. }
  41. }
  42. // 用于向数据库进行查询的方法
  43. public static void querystu(String s,String username) {
  44. // 创建火箭车
  45. try {
  46. ps = ct.prepareStatement("select * from info where 权限=? and 用户名=? ");
  47. // 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  48. ps.setString(1, s);
  49. ps.setString(2, username);
  50. // ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  51. rs = ps.executeQuery();
  52. // 循环取出
  53. if (rs.next()) {
  54. // 将教师的用户名和密码取出
  55. userword = rs.getString(2);
  56. pwd = rs.getString(3);
  57. System.out.println("成功获取到密码和用户名from数据库");
  58. System.out.println(userword + "\t" + pwd + "\t");
  59. }else
  60. {
  61. JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
  62. }
  63. } catch (Exception e1) {
  64. // TODO Auto-generated catch block
  65. e1.printStackTrace();
  66. }
  67. }
  68. //在教师表中进行查询
  69. public static void querytea(String s,String name ) {
  70. // 创建火箭车
  71. try {
  72. ps = ct.prepareStatement("select * from info_tea where 权限=? and 用户名=? ");
  73. // 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  74. ps.setString(1, s);
  75. ps.setString(2, name);
  76. // ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  77. rs = ps.executeQuery();
  78. // 循环取出
  79. if (rs.next()) {
  80. // 将教师的用户名和密码取出
  81. userword = rs.getString(2);
  82. pwd = rs.getString(3);
  83. System.out.println("成功获取到密码和用户名from数据库");
  84. System.out.println(userword + "\t" + pwd + "\t");
  85. }else
  86. {
  87. JOptionPane.showMessageDialog(null, "没有此用户,请重新输入!", "提示消息", JOptionPane.WARNING_MESSAGE);
  88. }
  89. } catch (Exception e1) {
  90. // TODO Auto-generated catch block
  91. e1.printStackTrace();
  92. }
  93. }
  94. //从数据库中根据学号或者教工号来查询数据,并且填入表格。
  95. public static void getdatastu(String s) {
  96. // 创建火箭车
  97. try {
  98. ps = ct.prepareStatement("select * from info where 学号 =? ");
  99. // 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  100. ps.setString(1, s);
  101. // ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  102. rs = ps.executeQuery();
  103. if(rs.next())
  104. {
  105. // 将教师的用户名和密码取出
  106. num = rs.getString(4);
  107. name = rs.getString(5);
  108. math = rs.getString(6);
  109. chinese = rs.getString(7);
  110. english = rs.getString(8);
  111. zhengzhi = rs.getString(9);
  112. }else
  113. {
  114. JOptionPane.showMessageDialog(null, "沒有此学生,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
  115. }
  116. } catch (Exception e1) {
  117. // TODO Auto-generated catch block
  118. e1.printStackTrace();
  119. }
  120. }
  121. public static void getdatatea(String s) {
  122. // 创建火箭车
  123. try {
  124. ps = ct.prepareStatement("select * from info_tea where 教师编号号 =? ");
  125. // 给?赋值(可防止SQL注入漏洞问题),不要直接使用拼接的方式
  126. ps.setString(1, s);
  127. // ResultSet结果集,大家可以把ResultSet理解成返回一张表行的结果集
  128. rs = ps.executeQuery();
  129. if(rs.next())
  130. {
  131. // 将教师的用户名和密码取出
  132. teanum = rs.getString(4);
  133. teaname = rs.getString(5);
  134. sex = rs.getString(6);
  135. salary = rs.getString(7);
  136. zhicheng = rs.getString(8);
  137. age = rs.getString(9);
  138. }else
  139. {
  140. JOptionPane.showMessageDialog(null, "沒有此教师,请重新输入", "提示消息", JOptionPane.WARNING_MESSAGE);
  141. }
  142. } catch (Exception e1) {
  143. // TODO Auto-generated catch block
  144. e1.printStackTrace();
  145. }
  146. }
  147. }

Stu_UI6.java

[java] view plain copy
  1. /*
  2. * 功能:学生登录成功界面。
  3. *
  4. */
  5. package com.package_7;
  6. import java.awt.*;
  7. import java.awt.event.*;
  8. import javax.swing.*;
  9. public class Stu_UI6 extends JFrame implements ActionListener
  10. {
  11. //定义组件
  12. JButton jb1,jb2=null;
  13. JPanel jp1,jp2,jp3=null;
  14. JLabel jlb1,jlb2,jlb3,jlb4=null;
  15. //      public static void main(String[] args) {
  16. //          // TODO Auto-generated method stub
  17. //          Stu_UI6  ui=new Stu_UI6();
  18. //      }
  19. //构造函数
  20. public  Stu_UI6()    //不能申明为void!!!!!否则弹不出新界面
  21. {
  22. //创建组件
  23. jb1=new JButton("课程管理");
  24. jb2=new JButton("成绩查询");
  25. jp1=new JPanel();
  26. jp2=new JPanel();
  27. jp3=new JPanel();
  28. jlb1=new JLabel("姓名");
  29. jlb2=new JLabel("学号");
  30. jlb3=new JLabel("最新公告:");
  31. jlb4=new JLabel("我校举行六十周年校庆的通知");
  32. jp1.add(jlb1);
  33. jp1.add(jlb2);
  34. jp2.add(jb1);
  35. jp2.add(jlb3);
  36. jp3.add(jb2);
  37. jp3.add(jlb4);
  38. this.add(jp1);
  39. this.add(jp2);
  40. this.add(jp3);
  41. //设置布局管理器
  42. this.setLayout(new GridLayout(3,3,50,50));
  43. this.setTitle("学生成绩管理系统");
  44. this.setSize(400,300);
  45. this.setLocation(200, 200);
  46. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  47. this.setVisible(true);
  48. }
  49. @Override
  50. public void actionPerformed(ActionEvent e) {
  51. // TODO Auto-generated method stub
  52. }
  53. }

Teacher.java

[java] view plain copy
  1. /*
  2. * 功能:实现了查询学生和老师的信息,并且显示在表格中的功能。
  3. */
  4. package com.package_7;
  5. import javax.swing.*;
  6. import javax.swing.table.DefaultTableModel;
  7. import java.awt.*;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import java.sql.Connection;
  11. import java.sql.DriverManager;
  12. import java.sql.PreparedStatement;
  13. import java.sql.ResultSet;
  14. import java.sql.SQLException;
  15. public class Teacher6 extends JFrame implements ActionListener {
  16. // 定义组件
  17. JLabel jl2,jl,jl3,jl4 = null;
  18. JTextField jtf,jtf2 = null;
  19. JButton jb,jb2 = null;
  20. JPanel jp1, jp2,jp3,jp4,jp5,jp6 = null;
  21. DefaultTableModel model,model2 = null;
  22. JTable table,table2 = null;
  23. JScrollPane jsp,jsp2 = null;
  24. //  public static void main(String[] args) {
  25. // TODO Auto-generated method stub
  26. //      Teacher6 t = new Teacher6();
  27. //  }
  28. // 构造函数
  29. public Teacher6() {
  30. // 创建组件
  31. jl = new JLabel("请输入学号:");
  32. jl2=new JLabel("请输入教工号:");
  33. jl3=new JLabel("学生信息表:");
  34. jl4=new JLabel("教师信息表:");
  35. jtf = new JTextField(10);
  36. jtf2 = new JTextField(10);
  37. jb = new JButton("查询1");
  38. jb2 = new JButton("查询2");
  39. // 设置监听
  40. jb.addActionListener(this);
  41. jb2.addActionListener(this);
  42. // 设置表格1
  43. String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };
  44. model = new DefaultTableModel(colnames, 3);
  45. table = new JTable(model);
  46. jsp = new JScrollPane(table);
  47. //设置表格2
  48. String[] col = { "姓名", "教工号", "性别", "工资", "职称", "年龄" };
  49. model2 = new DefaultTableModel(col, 3);
  50. table2 = new JTable(model2);
  51. jsp2 = new JScrollPane(table2);
  52. jp1 = new JPanel();
  53. jp2 = new JPanel();
  54. jp3 = new JPanel();
  55. jp4 = new JPanel();
  56. jp5 = new JPanel();
  57. jp6 = new JPanel();
  58. jp5.setLayout(new BorderLayout());
  59. jp6.setLayout(new BorderLayout());
  60. jp1.add(jl);
  61. jp1.add(jtf);
  62. jp1.add(jb);
  63. jp1.setLayout(new FlowLayout(FlowLayout.LEFT));
  64. jp1.setPreferredSize(new Dimension(20,20));
  65. jp3.add(jl2);
  66. jp3.add(jtf2);
  67. jp3.add(jb2);
  68. jp3.setLayout(new FlowLayout(FlowLayout.LEFT));
  69. jp2.add(jsp);
  70. jp4.add(jsp2);
  71. jp5.add(jl3,BorderLayout.SOUTH);
  72. jp6.add(jl4,BorderLayout.SOUTH);
  73. this.add(jp1);
  74. this.add(jp5);
  75. this.add(jp2);
  76. this.add(jp3);
  77. this.add(jp6);
  78. this.add(jp4);
  79. this.setLayout(new GridLayout(6, 1));
  80. this.setTitle("学生成绩管理系统—教师");
  81. this.setSize(500, 500);
  82. this.setLocation(150, 150);
  83. this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  84. this.setVisible(true);
  85. this.setResizable(false);
  86. }
  87. @Override
  88. public void actionPerformed(ActionEvent e) {
  89. if (e.getActionCommand().equals("查询1")  &&!jtf.getText().isEmpty()) {
  90. // 当点击查询按钮1时,首先与数据库建立连接
  91. GetSQL.ConnectSQL();
  92. GetSQL.getdatastu(jtf.getText());
  93. jtf.setText("");
  94. //          System.out.println(GetSQL.english);
  95. //          System.out.println(GetSQL.chinese);
  96. // 将数据填入表格
  97. table.setValueAt(GetSQL.name, 0, 0);
  98. table.setValueAt(GetSQL.num, 0, 1);
  99. table.setValueAt(GetSQL.math, 0, 2);
  100. table.setValueAt(GetSQL.chinese, 0, 3);
  101. table.setValueAt(GetSQL.english, 0, 4);
  102. table.setValueAt(GetSQL.zhengzhi, 0, 5);
  103. }else if (e.getActionCommand().equals("查询2")  &&!jtf2.getText().isEmpty())
  104. {
  105. // 当点击查询按钮1时,首先与数据库建立连接
  106. GetSQL.ConnectSQL();
  107. GetSQL.getdatatea(jtf2.getText());
  108. jtf2.setText("");
  109. // 将数据填入表格
  110. table2.setValueAt(GetSQL.teaname, 0, 0);
  111. table2.setValueAt(GetSQL.teanum, 0, 1);
  112. table2.setValueAt(GetSQL.sex, 0, 2);
  113. table2.setValueAt(GetSQL.salary, 0, 3);
  114. table2.setValueAt(GetSQL.zhicheng, 0, 4);
  115. table2.setValueAt(GetSQL.age, 0, 5);
  116. }else
  117. {
  118. JOptionPane.showMessageDialog(null , "请输入要查询的编号","提示消息",JOptionPane.WARNING_MESSAGE);
  119. }
  120. }
  121. }

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

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

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

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

改进方法:

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

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

如图所示:

教师登录成功界面,如图:

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

如图所示:

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

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

// 设置表格1
        String[] colnames = { "姓名", "学号", "数学", "语文", "英语", "政治" };

model = new DefaultTableModel(colnames, 3);

table = new JTable(model);

jsp = new JScrollPane(table);

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

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

简易信息管理系统适合新手学Java图形界面开发。

1、登录界面可以进行登录操作。有俩种权限选择。分别跳转到不同的界面。

2、使用了事件监听、Java操作SQLserver数据库等知识。

3、图形化界面中使用了JTable等组件,将查询结果显示在表格中。

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

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

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

Java Swing--学生信息管理系统相关推荐

  1. java编写管理系统_用java编写学生信息管理系统

    <用java编写学生信息管理系统>由会员分享,可在线阅读,更多相关<用java编写学生信息管理系统(7页珍藏版)>请在人人文库网上搜索. 1.用java编写学生信息管理系统im ...

  2. 学生信息录入java,基于java的学生信息管理系统

    基于java的学生信息管理系统中分为多级角色管理:包括系统管理员.学生和老师几种权限,采用了开发技术JSP以及MYSQL数据库作为本系统的开发工具.主要包括新闻模块,考试模块,学生模块,教师模块,选课 ...

  3. Java课设之Swing学生信息管理系统(源码)

    前言: 这是我学java时,写的一个练手项目,主要用来巩固知识,还有很多地方并不完善,有很多不足之处,仅供参考. 另外,如果直接按着我的代码敲很可能会出现bug.这大概率时JDK或MySQL的版本问题 ...

  4. 基于java的学生信息管理系统(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 内容摘要    - 2 - 引言    - 4 - 学生信息管理系统开发的意义和目的    - ...

  5. Java版学生信息管理系统 附源码(JavaFX图形界面)

    1.登录界面 其中的图片存储路径可以替换成自己的,当然我这里的账号密码是先设置好的,其实可以做一个注册的功能,把账号密码存进文件中 package SchoolWork.ManagementSyste ...

  6. Java语言 学生信息管理系统

    学生信息管理系统 1.创建学生类,也就是学生的基本信息,可以用无参构造,也可以为有参构造: public class Student {private String number;private St ...

  7. Java简单学生信息管理系统

    JAVA简单写学生信息管理系统,实现学生信息的输入.查询.修改.删除操作 package Week;import jdk.internal.util.xml.impl.Input;import jav ...

  8. 学生管理系统java mysql_学生信息管理系统 基于Java+mysql开发的学生管理系统 - 下载 - 搜珍网...

    压缩包 : 学生信息管理系统.zip 列表 学生信息管理系统/ 学生信息管理系统/build/ 学生信息管理系统/build.xml 学生信息管理系统/build/built-jar.properti ...

  9. java swing医院信息管理系统 java swing mysql实现的医院信息管理系统源码(1019)

    java swing + mysql 医院信息管理系统(1019) 1.系统运行环境 运行环境:Java8 + MySQL8 开发工具:eclipse/idea 2.系统功能介绍 (下面介绍的功能肯定 ...

  10. java+swing+教科书,java+Swing+学生事务管理系统

    [实例简介] 本系统可以用于新手对于java项目初步的一个了解,并且能很好的帮助理解swing的学习 [实例截图] [核心代码] StudentSelect └── StudentSelect ├── ...

最新文章

  1. ansys大变形开关要不要打开_ANSYS不收敛问题的解决办法
  2. 信息检索及信息过滤方法概述
  3. 堆(heap)和栈(stack)的区别
  4. challenging and foundational
  5. the Open Source Community
  6. Android 中文API (37) —— AbsoluteLayout
  7. Oracle分页查询
  8. java项目上线流程
  9. python 查询oracle数据库返回具体字段名
  10. 如何用ffmpeg合并音频和视频?
  11. echarts pie 饼图 border宽度
  12. 使用MybatisPlus从MySQL切换到SQLServer的坑
  13. golang学习笔记(五):数组的定义和使用
  14. CSS文本设置超出2行显示省略号
  15. 酷炫小程序相册源码,制作属于自己的相册,免费下载
  16. 多组输入与单组输入的区分
  17. 互联网日报 | 4月26日 星期一 | 快手二次元日活跃用户突破1亿;小米全球范围内专利达1.9万件;艺龙酒店首家旗舰店在沪开业
  18. 分布式爬虫系统的设计与实现(SourceForge.net数据爬取)
  19. 安科瑞无线测温装置变电所配电柜测温-安科瑞张宇洁
  20. Tesseract训练新字体

热门文章

  1. 基于PCA的TE过程故障诊断(matlab)
  2. java进程、线程知识扩充
  3. VS2017使用点滴
  4. 限制输入框 输入文本类型(纯数字/数字/中文/英文)
  5. 写一个判素数的函数,在主函数输入一个整数,输出是否为素数的信息。
  6. python飞机大战联网版_Python 飞机大战搞怪版本
  7. TensorFlow实战系列11--卷积层网络结构
  8. webpack Vue热加载配置好的确不行解决方法,限于webstorm编辑
  9. 什么是Java 西安尚学堂
  10. 相邻位数字差值的绝对值不能超过77_微信小程序直播怎么用和挣钱?4位内测CEO答5大关键问题...