第21章 Java程序综合案例:教务处管理系统

前面所演示的都是功能相对单一、简单的小实例,下面将演示一个比较实用的综合实例,希望读者能通过本章的学习,更加牢固地掌握Java程序开发,而且还可通过本章的综合实例,来检验自己学习的情况。

这个教务处管理系统具有一定的通用性,希望读者能很好地理解这个综合实例,因为其能带来很多编程的启示。下面将通过详细的代码和分析,来讲述编写应用程序的一个思路。

本实例主要以学生档案管理系统为主要内容。在本系统中,将整个系统分为以下几个模块:

• 会员登录界面。

• 功能选择混合界面。

• 学生档案管理系统。

• 教师档案管理系统。

• 学校领导档案管理系统。

技术要点

首先,分析整个系统的构成。整个系统分为登录系统、主界面系统、学生信息系统、教师信息系统、数据库系统,其实整个应用软件就是将数据库系统中的数据,通过软件界面的形式,展现在用户面前,所以整个系统最关键的就是数据库系统。

将整个软件系统同数据库系统连接,这样就可以通过软件界面来观察数据,并且可以通过增添和删除来操作数据库中的数据。数据库系统同软件如何连接呢?在很多软件中看到,当打开一个信息界面的时候,就会直接出现数据,那就是说在这个界面被装载的时候,同时也会将数据库中的数据装载,即把数据库同这个界面连接起来。如何连接呢?后面会详细讲述。

针对学生信息系统、教师信息系统、领导信息系统建立了主界面,这些界面主要是起到一个主程序入口的作用。

而登录界面,是为了能够防止没有进行系统注册的用户登录到系统。整个软件的结构就是这样的,通过分析后,相信读者的思路已经很清晰了。

在学生信息系统中,主要是通过软件界面来操作数据,例如增加数据和删除数据。另外,还可以通过软件界面进行查询,所以要打开学生信息系统的界面时,数据库就必须连接好了。

在教师信息系统中,主要是通过软件界面来操作数据,例如增加数据和删除数据,另外,还可以通过软件界面进行查询,所以要打开教师信息系统的界面时,数据库就必须连接好了。

21.1 登录界面的设计与代码实现

本节将详细地讲述如何设计整个软件的登录界面,从中可以复习前面学习过的布局管理器、事件监视器等方面的知识。

登录界面主要用来防止非法登录用户,进入软件系统操作系统,所以在登录系统中,首先要设置系统的合法登录用户和登录密码。在登录界面中,可以通过网格组布局管理器,将各个控件合理地分布在界面中。在设计登录界面时,首先将其设置为一个类,此类可以设置为容器类,将所有控件放置其中,然后再将这个容器放置到整体框架中去。其实在设计所有的界面类时,都是将整个类设置为容器类,这样就会给程序员带来在编写代码上的方便和简洁。

本小节将分析登录界面的代码如何实现。其代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class login extends JPanel {
    static final int WIDTH = 300;
    static final int HEIGHT = 150;
    JFrame loginframe;
    /**此方法用来添加控件到容器中。
     * 按照网格组布局方式排列组件的方法。
     * x指控件位于第几列。
     * y指控件位于第几行。
     * w指控件需要占几列。
     * h指控件需要占几行。
     * */
    public static void main(String[] args) {
          login log = new login();
    }
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
          constraints.gridx = x;
          constraints.gridy = y;
          constraints.gridwidth = w;
          constraints.gridheight = h;
          add(c, constraints);
    }
    /**是一个构造器方法,loginframe就是指这个界面的框架。
     * setDefaultCloseOperation是一个使得窗口上面的关闭控件有效的类库方法。
     * lay是一个网格组布局管理器的对象。
     * nameinput是用来输入用户名的文本域。
     * passwordinput是用来输入密码的文本域。
     * title是用来显示标题的标签。
     * name是用来显示"姓名"的标签。
     * password是用来显示"密码"的标签。
     * ok是一个按钮,使进入系统。
     * cancel是一个按钮,使退出界面和系统。
     *   ok.addActionListener是一个进入系统动作事件监听方法。
     *   cancel.addActionListener是一个退出系统和界面动作事件的监听方法。
     *   */
    login() {
          loginframe = new JFrame("教务处管理系统");
          loginframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          GridBagLayout lay = new GridBagLayout();
          setLayout(lay);
          loginframe.add(this, BorderLayout.WEST);
        loginframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH)/2;
        int y = (height - HEIGHT)/2;
        loginframe.setLocation(x, y);
        JButton ok = new JButton("登录");
        JButton cancel = new JButton("放弃");
        JLabel title = new JLabel("会员登录");
        JLabel name = new JLabel("用户名");
        JLabel password = new JLabel("密 码");
        final JTextField nameinput = new JTextField(15);
        final JTextField passwordinput = new JTextField(15);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        constraints.weightx = 3;
        constraints.weighty = 4;
        add(title, constraints, 0, 0, 4, 1);           //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(password, constraints, 0, 2, 1, 1);
        add(nameinput, constraints, 2, 1, 1, 1);
        add(passwordinput, constraints, 2, 2, 1, 1);
        add(ok, constraints, 1, 3, 1, 1);
        add(cancel, constraints, 2, 3, 1, 1);
        loginframe.setResizable(true);
        loginframe.setVisible(true);
        ok.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  String nametext = nameinput.getText();
                  String passwordtext = passwordinput.getText();
                  String str = new String(passwordtext);
                  boolean x = (nametext.equals("yjp"));
                  boolean y = (str.equals("nql"));     //在此设置密码和用户名
                  boolean z = (x && y);
                  if (z == true) {
                      loginframe.dispose();
                      mainframe main = new mainframe();//此界面就是后面的主界面
                      System.out.println("密码和用户名都对,可以进入学生信息系统了");
                  } else if (z == false) {
                      nameinput.setText("");
                      passwordinput.setText("");
                  }
            }
        });
        cancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  loginframe.dispose();
            }
        });
    }
}

运行结果如图21-1所示。

图21-1 软件登录界面

21.2 功能选择界面的设计

主界面的设计,主要就是设计整个软件程序的入口,从这个入口可以通向不同的软件界面系统。

主界面是整个软件的一个综合界面,是所有不同界面的一个入口。进入到这个界面中,可以通过选择按钮,进入不同的界面,然后进行不同的操作。

这个界面需要做的就是添加按钮,并为每个按钮的编写动作事件。下面一小节将给出此类中的代码段,希望读者也能够根据自己的思路,重新编写一个类,这样才能将所学的知识进行融会贯通。

21.2.1 系统功能界面的实现

本节主要分析主界面的代码如何实现。其代码如下:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
/**
 * 这是一个主界面的类。student是指进入学生信息系统的界面控件,teacher是指进入教师信息系统的界面控件,
 * leader是指进入领导信息系统的界面控件,后面紧接着就是这三个控件的动作事件的监视方法,分别是
进入三个不同的系统
 */
class PDA_Frame extends JFrame {
    static final int WIDTH = 400;
    static final int HEIGHT = 200;
    JFrame buttonframe;
    public PDA_Frame() {
          buttonframe = new JFrame();
          buttonframe.setTitle("教务处管理系统");
          buttonframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          buttonframe.setSize(WIDTH, HEIGHT);
          Toolkit kit = Toolkit.getDefaultToolkit();
          Dimension screenSize = kit.getScreenSize();
          int width = screenSize.width;
          int height = screenSize.height;
          int x = (width - WIDTH) / 2;
          int y = (height - HEIGHT) / 2;
          this.setBackground(Color.red);
          buttonframe.setLocation(x, y);
          buttonframe.setVisible(true);
          buttonframe.setForeground(Color.blue);
          JButton student = new JButton(new ImageIcon("D://abc//2.jpg"));
          JButton teacher = new JButton(new ImageIcon("D://abc//1.jpg"));
          JButton leader = new JButton(new ImageIcon("D://abc//3.jpg"));
        buttonframe.add(student);
        buttonframe.add(teacher);
        buttonframe.add(leader);
        buttonframe.setLayout(new GridLayout(3, 1));
        student.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  studentmanageframe studentframe = new studentmanageframe();
            }
        });
        teacher.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  teachermanageframe teacherframe = new teachermanageframe();
            }
        });
        leader.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  leadermanageframe leaderframe = new leadermanageframe();
            }
        });
    }
}

此代码在Applet中被执行后的界面如图21-2所示

图21-2 教务处管理系统主界面

21.2.2 学生信息系统功能界面的实现

当选择学生信息系统时,又会有另一个界面出现。其代码如下所示:

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.util.Vector;
import javax.swing.*;
/**
 * 这是一个学生信息系统的入口框架类。studentframe是顶层窗口框架。通过七个按钮控件分别可以进入
不同班级、不同系的学生信息系统中。
 * 七个按钮控件分别产生七个不同的动作事件。单击事件,分别进入不同的信息系统。
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。通过不同的
SQL语句进入不同的班级和系的管理系统。
 */
class studentmanageframe extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 400;
    static final int HEIGHT = 200;
    JFrame studentframe;
    public studentmanageframe() {
        studentframe = new JFrame();
        studentframe.setBackground(Color.black);
        studentframe.setTitle("学生信息管理系统");
        studentframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        studentframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH)/2;
        int y = (height - HEIGHT)/2;
        studentframe.setLocation(x, y);
        studentframe.setVisible(true);
        studentframe.setResizable(false);
        studentframe.add(this, BorderLayout.CENTER);
        JButton computerone = new JButton("英语系一班学生信息系统");
        JButton computertwo = new JButton("英语系二班学生信息系统");
        JButton computerthree = new JButton("法律系一班学生信息系统");
        JButton bioone = new JButton("法律系二班学生信息系统");
        JButton mechone = new JButton("法律系三班学生信息系统");
        JButton mechtwo = new JButton("数学系一班学生信息系统");
        JButton mechthree = new JButton("数学系二班学生信息系统");
        JLabel title = new JLabel("学生信息管理");
        JLabel banket1 = new JLabel();
        JLabel banket2 = new JLabel();
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        constraints.weightx = 2;
        constraints.weighty = 5;
        JPanel jp = new JPanel();
        jp.setLayout(new GridLayout(1, 3));
        jp.add(banket1);
        jp.add(title);
        jp.add(banket2);
        studentframe.add(jp, BorderLayout.NORTH);
        add(computerone, constraints, 0, 1, 1, 1); //使用网格组布局添加控件
        add(computertwo, constraints, 0, 2, 1, 1);
        add(computerthree, constraints, 0, 3, 1, 1);
        add(bioone, constraints, 0, 4, 1, 1);
        add(mechone, constraints, 1, 1, 1, 1);
        add(mechtwo, constraints, 1, 2, 1, 1);
        add(mechthree, constraints, 1, 3, 1, 1);
        //单击这个按钮,进入到英语系一班学生信息系统
        computerone.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='一班'andmajor='英语系'";
                  Show_Student info = new Show_Student("英语系一班学生信息系统", sql);
              }
        });
        //单击这个按钮,进入到英语系二班学生信息系统
        computertwo.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='二班'andmajor='英语系'";
                  Show_Student studentinformation = new Show_Student("英语系二班学生信息系统",
                            sql);
              }
        });
        //单击这个按钮,进入到法律系一班学生信息系统
        computerthree.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='一班'andmajor='法律系'";
                  S how_Student studentinformation = new Show_Student("法律系一班学生信息系统",
                            sql);
              }
        });
        //单击这个按钮,进入到法律系二班学生信息系统
        bioone.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='二班'andmajor='法律系'";
                  Show_Student studentinformation = new Show_Student("法律系二班学生信息系统",sql);
              }
        });
        //单击这个按钮,进入到法律系三班学生信息系统
        mechone.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='三班'andmajor='法律系'";
                  S how_Student studentinformation = new Show_Student("法律系三班学生信息系统",
                            sql);
              }
        });
        //单击这个按钮,进入到数学系一班学生信息系统
        mechtwo.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='一班'andmajor='数学系'";
                  Show_Studentstudentinformation = newShow_Student("数学系一班学生信息系统",
                            sql);
              }
        });
        //单击这个按钮,进入到数学系二班学生信息系统
        mechthree.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='二班'andmajor='数学系'";
                  Show_Student studentinformation = new Show_Student("数学系二班学生信息系统",
                            sql);
              }
        });
    }
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = w;
        constraints.gridheight = h;
        add(c, constraints);
    }
}

此代码在Applet中被执行后的界面如图21-3所示。

图21-3 学生信息系统界面

21.2.3 教师信息系统功能界面的实现

当选择教师信息系统时,又会有另一个界面出现。其代码如下所示:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
/**
 * 这是一个教师信息系统的入口框架类。teacherframe是顶层窗口框架。通过三个按钮控件分别可以进入
不同系的教师信息系统中。
 * 三个按钮控件分别产生三个不同的动作事件。单击事件,分别进入不同的信息系统。
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。通过不同的
SQL语句进入不同系的管理系统。
 */
class teachermanageframe extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 400;
    static final int HEIGHT = 200;
    JFrame teacherframe;
    public teachermanageframe() {
        teacherframe = new JFrame();
        teacherframe.setTitle("教师档案管理系统");
        teacherframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        teacherframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH) / 2;
        int y = (height - HEIGHT) / 2;
        teacherframe.setLocation(x, y);
        teacherframe.setVisible(true);
        teacherframe.setResizable(false);
        teacherframe.add(this, BorderLayout.CENTER);
        JButton computerteacher = new JButton("英语系教师信息系统");
        JButton bioteacher = new JButton("法律系教师信息系统");
        JButton mechteacher = new JButton("数学系教师信息系统");
        JButton beretun = new JButton("返回");
        JLabel title = new JLabel("教师档案管理系统");
        JLabel banket1 = new JLabel();
        JLabel banket2 = new JLabel();
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        constraints.weightx = 1;
        constraints.weighty = 4;
        JPanel jp = new JPanel();
        jp.setLayout(new GridLayout(1, 3));
        jp.add(banket1);
        jp.add(title);
        jp.add(banket2);
        teacherframe.add(jp, BorderLayout.NORTH);
        add(computerteacher, constraints, 0, 1, 1, 1); //使用网格组布局添加控件
        add(bioteacher, constraints, 0, 4, 1, 1);
        add(mechteacher, constraints, 1, 1, 1, 1);
        //单击这个按钮,进入到英语系教师信息系统
        computerteacher.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereclass='二班'andmajor='英语系'";
                  //String sql="select * from teacherinfo where duty='教师'and
                  //major='英语系'";
                  S how_Teacher teacherinformation = new Show_Teacher("英语系教师信息系统",
                            sql);
            }
        });
        //单击这个按钮,进入到法律系教师信息系统
        bioteacher.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromteacherinfowhereduty='教师'andmajor='法律系'";
                  Show_Teacher teacherinformation = new Show_Teacher("法律系教师信息系统",
                            sql);
              }
        });
        //单击这个按钮,进入到数学系教师信息系统
        mechteacher.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromteacherinfowhereduty='教师'andmajor='数学系'";
                  Show_Teacher teacherinformation = new Show_Teacher("数学系教师信息系统",
                            sql);
              }
        });
    }
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = w;
        constraints.gridheight = h;
        add(c, constraints);
    }
}

此代码在Applet中被执行后,出现教师信息系统界面,如图21-4所示。

图21-4 教师信息系统界面

21.2.4 领导信息系统功能界面的实现

当选择领导信息系统时,又会有另一个界面出现。其代码如下所示:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
/**
 * 这是一个领导信息系统的入口框架类。leaderframe是顶层窗口框架。通过四个按钮控件分别可以进入
到不同职务、不同系的领导信息系统中。
 * 四个按钮控件分别产生四个不同的动作事件。单击事件,分别进入不同的信息系统。
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。通过不同的
SQL语句进入不同系的领导管理系统。
 */
class leadermanageframe extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 400;
    static final int HEIGHT = 200;
    JFrame leaderframe;
    public leadermanageframe() {
        leaderframe = new JFrame();
        leaderframe.setTitle("系领导档案档案管理系统");
        leaderframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        leaderframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH) / 2;
        int y = (height - HEIGHT) / 2;
        leaderframe.setLocation(x, y);
        leaderframe.setVisible(true);
        leaderframe.setResizable(false);
        leaderframe.add(this, BorderLayout.CENTER);
        JButton computerleader = new JButton("英语系领导档案");
        JButton bioleader = new JButton("法律系领导档案");
        JButton mechleader = new JButton("数学系领导档案");
        JButton schoolleader = new JButton("学校领导档案");
        JLabel title = new JLabel("系领导档案管理系统");
        JLabel banket1 = new JLabel();
        JLabel banket2 = new JLabel();
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.anchor = GridBagConstraints.EAST;
        constraints.weightx = 2;
        constraints.weighty = 2;
        JPanel jp = new JPanel();
        jp.setLayout(new GridLayout(1, 3));
        jp.add(banket1);
        jp.add(title);
        jp.add(banket2);
        leaderframe.add(jp, BorderLayout.NORTH);
        add(computerleader, constraints, 0, 0, 1, 1); //使用网格组布局添加控件
        add(bioleader, constraints, 0, 1, 1, 1);
        add(mechleader, constraints, 1, 0, 1, 1);
        add(schoolleader, constraints, 1, 1, 1, 1);
        //单击这个按钮,进入到英语系领导信息系统
        computerleader.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromteacherinfowhereduty<>'教师'andmajor='英语系'";
                  Show_Leader leaderinformation = new Show_Leader("英语系领导信息系统", sql);
              }
        });
        //单击这个按钮,进入到法律系领导信息系统
        bioleader.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereduty<>'教师'andmajor='法律系'";
                  Show_LeaderShow_Leaderrmation = newShow_Leader("法律系领导信息系统",sql);
              }
          });
          //单击这个按钮,进入到数学系领导信息系统
          mechleader.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromstudentinfowhereduty<>'教师'andmajor='数学系'";
                  Show_Leader Show_Leaderrmation = new Show_Leader("数学系领导信息系统", sql);
              }
          });
          //单击这个按钮,进入到学校领导信息系统
          schoolleader.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Stringsql = "select * fromteacherinfowhereduty<>'教师'andmajor='学校'";
                  S how_Leader Show_Leaderrmation = new Show_Leader("学校领导信息系统", sql);
              }
          });
    }
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
          constraints.gridx = x;
          constraints.gridy = y;
          constraints.gridwidth = w;
          constraints.gridheight = h;
          add(c, constraints);
    }
}

此代码在Applet中被执行后出现的领导信息系统界面如图21-5所示。

图21-5 领导信息系统界面

21.3 学生信息系统界面的设计

学生信息系统界面的设计,是这个软件系统界面的主要部分。通过这些界面,用户可以直接操作数据库。下面将详细地讲述和分析代码段。

21.3.1 表studentinfo的数据库设置与代码实现

在设计整个程序的过程中,首先要设计一个学生类,然后将这个学生类储存到数据结构中,最后将这个数据结构中的数据与数据库连接。这样在界面上显示出来的数据就是数据库中的数据。下面是设计学生类的代码。

/**设置了学生的姓名、性别、学号、出生年月、年龄、年级、专业等变量
*通过构造器设置学生姓名、学号的值
*通过设置器设置其他变量的值
*通过访问器获得变量的值
*/
class studentBean {
    private String name;
    private String code;
    private String sexy;
    private String birthday;
    private String address;
    private String age;
    private String grade;
    private String major;
    studentBean(String name, String code) {
          this.name = name;
          this.code = code;
    }
    public String getname() {
          return name;
    }
    public String getcode() {
          return code;
    }
    public void setsexy(String sexy) {
          this.sexy = sexy;
    }
    public void setbirthday(String birthday) {
          this.birthday = birthday;
    }
    public void setage(String age) {
          this.age = age;
    }
    public void setaddress(String address) {
          this.address = address;
    }
    public void setgrade(String grade) {
          this.grade = grade;
    }
    public void setmajor(String major) {
          this.major = major;
    }
    public String getsexy() {
          return sexy;
    }
    public String getbirthday() {
          return birthday;
    }
    public String getage() {
          return age;
    }
    public String getaddress() {
          return address;
    }
    public String getgrade() {
          return grade;
    }
    public String getmajor() {
        return major;
    }
    public String toString() {
        String information = "学生姓名:" + name + "学号:" + code + "年龄:" + age
                  + "出生年月:" + birthday + "家庭地址:" + address + "班级:" + grade
                  + "专业:" + major;
        return information;
    }
}

以上代码将数据库中事先设计的表中的所有字段都显示出来,最后按照字符串形式输出。

21.3.2 储存类的设计

选择什么样的数据结构,对以上的学生类对象进行储存呢?本例选择Vector这种数据结构对学生进行储存,这种数据结构与字符串数组的用法几乎一样。具体的代码如下所示:

import java.util.Vector;
import java.sql.*;
class From_student {
    public Vector getstudent(Connection con, String sql) {
          Vector v = new Vector();
          try {
              Statement st = con.createStatement();
              ResultSet rs = st.executeQuery(sql);
              while (rs.next()) {
                    String name = rs.getString(1);
                    String code = rs.getString(2);
                    String sexy = rs.getString(3);
                    String age = rs.getString(4);
                    String address = rs.getString(5);
                    String birthday = rs.getString(6);
                    String grade = rs.getString(7);
                    String major = rs.getString(8);
                    studentBean ss = new studentBean(name, code);
                    ss.setsexy(sexy);
                    ss.setmajor(major);
                    ss.setbirthday(birthday);
                    ss.setaddress(address);
                    ss.setage(age);
                    ss.setgrade(grade);
                    v.add(ss);
              }
              rs.close();
          } catch (Exception e) {
              e.printStackTrace();
          }
          return v;
    }
    public studentBean getobject(Connection con, String stname) {
        studentBean sst = null;
        try {
            Statement st = con.createStatement();
            String sql = "select * from studentinfo where stname='" + stname
                      + "'";
            ResultSet rs = st.executeQuery(sql);
            //通过结果集中的getString方法从数据库的表中提取表字段的数据
            //再将提取出来的数据赋值给学生对象
            //最后将学生对象存储到vector数据结构中
            while (rs.next()) {
                  String code = rs.getString(2);
                  String sexy = rs.getString(3);
                  String age = rs.getString(4);
                  String address = rs.getString(5);
                  String birthday = rs.getString(6);
                  String grade = rs.getString(7);
                  String major = rs.getString(8);
                  sst = new studentBean(stname, code);
                  sst.setsexy(sexy);
                  sst.setmajor(major);
                  sst.setbirthday(birthday);
                  sst.setaddress(address);
                  sst.setage(age);
                  sst.setgrade(grade);
            }
            rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return sst;
    }
    //通过设置数据库的URL、密码、用户名来建立与数据库的连接
    public Connection getConnection() {
        Connection con = null;
        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            //加载odbc数据驱动
            con = DriverManager.getConnection("jdbc:odbc:myodbc", "", "");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
        return con;
    }
}

以上代码从数据库中提取数据,然后按照每个字段的不同,分别赋值给学生类中的每个字段。最后,将学生类的对象添加到Vector数据结构中。这样数据存取速度大大加快,每次对数据库的操作就不必在数据库中执行。

本程序属于本地程序,如果是在网络数据库中,这样操作就不会增加网络的负担。可以将网络数据库下载到本地的Vector的数据结构中,然后直接操作本地数据结构,等操作完后,再提交到数据库中,这样就能加快速度。

21.3.3 学生信息界面的设计

学生信息界面主要包括显示信息的控件、添加对象的控件、删除对象的控件。在这个学生信息界面中,将学生信息界面抽象成一个类,然后能让所有不同班级和不同系的学生信息系统都能调用它。下面设计学生信息的界面。代码如下所示:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.util.Vector;
import java.sql.*;
/**这是学生类信息系统的框架类
 * studentinfoframe是顶层窗口框架。
 * 通过八个文本域控件可以分别显示不同班级、不同系的学生信息。
 * 四个按钮控件分别产生四个不同的动作事件,分别是添加、删除、更新、返回。addition是添加,
delete是删除,update是更新,bereturn是返回
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。
 * 通过不同的SQL语句进入不同的班级和系的管理系统。
 * 将数据库中的数据先导入到vec中,然后再将vec中的数据导入学生类中,最后将数据输出
 * */
class Show_Student extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    final JComboBox nameinput;
    final JTextField codeinput;
    final JTextField sexyinput;
    final JTextField birthdayinput;
    final JTextField ageinput;
    final JTextField addressinput;
    final JTextField gradeinput;
    final JTextField majorinput;
    JFrame studentinfoframe;
    From_student store = new From_student();
    Connection con = store.getConnection();
    Student_Frame af = new Student_Frame();
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
          constraints.gridx = x;
          constraints.gridy = y;
          constraints.gridwidth = w;
          constraints.gridheight = h;
          add(c, constraints);
    }
    public Show_Student(String str, String sql) {
          studentinfoframe = new JFrame();
          studentinfoframe.setTitle(str);
        studentinfoframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        studentinfoframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH) / 2;
        int y = (height - HEIGHT) / 2;
        studentinfoframe.setLocation(x, y);
        studentinfoframe.setVisible(true);
        //studentinfoframe.setResizable(false);
        studentinfoframe.add(this, BorderLayout.CENTER);
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        JLabel name = new JLabel(new ImageIcon("D://abc//11.jpg"));
        JLabel code = new JLabel(new ImageIcon("D://abc//13.jpg"));
        JLabel sexy = new JLabel(new ImageIcon("D://abc//12.jpg"));
        JLabel age = new JLabel(new ImageIcon("D://abc//14.jpg"));
        JLabel birthday = new JLabel(new ImageIcon("D://abc//15.jpg"));
        JLabel address = new JLabel(new ImageIcon("D://abc//16.jpg"));
        JLabel grade = new JLabel(new ImageIcon("D://abc//17.jpg"));
        JLabel major = new JLabel(new ImageIcon("D://abc//18.jpg"));
        JLabel title = new JLabel(str);
        nameinput = new JComboBox();
        codeinput = new JTextField(10);
        sexyinput = new JTextField(10);
        ageinput = new JTextField(10);
        birthdayinput = new JTextField(10);
        addressinput = new JTextField(10);
        gradeinput = new JTextField(10);
        majorinput = new JTextField(10);
        //将存储在Vector中的数据提取出来重新赋值给学生对象,再利用到学生对象中
        //getname方法来提取出学生姓名,最后使用组合列表框的添加功能将这些名字添加到列表中
        Vector vec = store.getstudent(con, sql);
        for (int i = 0; i < vec.size(); i++) {
            studentBean one = (studentBean) vec.get(i);
            String nameselect = one.getname();
            nameinput.addItem(nameselect);
        }
        String namestring = (String) nameinput.getSelectedItem();
        studentBean p = store.getobject(con, namestring);
        String inputcode = p.getcode();
        String inputsexy = p.getsexy();
        String inputage = p.getage();
        String inputbirthday = p.getbirthday();
        String inputaddress = p.getaddress();
        String inputgrade = p.getgrade();
        String inputmajor = p.getmajor();
        codeinput.setText(inputcode);
        sexyinput.setText(inputsexy);
        ageinput.setText(inputage);
        birthdayinput.setText(inputbirthday);
        addressinput.setText(inputaddress);
        gradeinput.setText(inputgrade);
        majorinput.setText(inputmajor);
        JButton addition = new JButton("添加");
        JButton delete = new JButton("删除");
        JButton update = new JButton("更新");
        JButton bereturn = new JButton("返回");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 6;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(grade, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(gradeinput, constraints, 3, 3, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(addition, constraints, 0, 5, 1, 1);
        add(delete, constraints, 1, 5, 1, 1);
        add(update, constraints, 2, 5, 1, 1);
        add(bereturn, constraints, 3, 5, 1, 1);
        //通过单击每一个列表框中的名字,会相应地显示出此名字的所有信息
        nameinput.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                  String namestring = (String) nameinput.getSelectedItem();
                  studentBean p = store.getobject(con, namestring);
                  String inputcode = p.getcode();
                  String inputsexy = p.getsexy();
                  String inputage = p.getage();
                  String inputbirthday = p.getbirthday();
                  String inputaddress = p.getaddress();
                  String inputgrade = p.getgrade();
                  String inputmajor = p.getmajor();
                  codeinput.setText(inputcode);
                  sexyinput.setText(inputsexy);
                  ageinput.setText(inputage);
                  birthdayinput.setText(inputbirthday);
                  addressinput.setText(inputaddress);
                  gradeinput.setText(inputgrade);
                  majorinput.setText(inputmajor);
              }
        });
        //返回主菜单
        bereturn.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  studentmanageframe manageframe = new studentmanageframe();
                  manageframe.setVisible(true);
                  studentinfoframe.dispose();
              }
        });
        //进入添加主界面
        addition.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Student_Frame addfr = new Student_Frame();
                  addfr.setVisible(true);
              }
        });
        //更新按钮,使得从数据库表中将数据提取显示到界面中
        update.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String name1 = af.ss.getname();
                  String code1 = af.ss.getcode();
                  String age1 = af.ss.getage();
                  String sexy1 = af.ss.getsexy();
                  String birthday1 = af.ss.getbirthday();
                  String address1 = af.ss.getaddress();
                  String grade1 = af.ss.getgrade();
                  String major1 = af.ss.getmajor();
                  nameinput.addItem(name1);
                  nameinput.setSelectedItem(name1);
                  codeinput.setText(code1);
                  ageinput.setText(age1);
                  sexyinput.setText(sexy1);
                  addressinput.setText(address1);
                  birthdayinput.setText(birthday1);
                  gradeinput.setText(grade1);
                  majorinput.setText(major1);
              }
        });
        //删除数据,且更新到数据库中
        delete.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String namestring = (String) nameinput.getSelectedItem();
                  From_student store = new From_student();
                  try {
                      Connection con = store.getConnection();
                      Statement st = con.createStatement();
                      String sql = "delete * from studentinfo where='"
                                + namestring + "'";
                      st.executeUpdate(sql);
                  } catch (Exception e) {
                  }
                  nameinput.removeItem(namestring);
              }
        });
    }
}

这样整个学生信息系统的界面就设计完毕。运行程序,结果如图21-6所示。

图21-6 学生信息系统界面

21.3.4 学生信息录入界面的代码实现

单击“添加”按钮,弹出一个对话框,这是一个框架界面。实现此框架界面的代码如下:

/**主运行类
 * main指主框架
 * setDefaultCloseOperation指让框架右上角的按钮都有效
 * show让框架能显示出来
 * */
import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.Vector;
import javax.swing.*;
/**
 * 这个是学生信息系统添加信息框架类。通过文本域将不同信息的领导分别输出在其中。通过一个添加按钮,
将数据添加到数据库中。
 * 这里的布局是通过网格组布局管理器来设定的。在回送到信息界面时将学生对象ss设定为静态。放置新建
对象时,其值会改变。
 */
class Student_Frame extends JPanel {
    String codetext;
    String agetext;
    String sexytext;
    String birthdaytext;
    String addresstext;
    String gradetext;
    String majortext;
    public final JTextField nameinput = new JTextField(10);
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    static studentBean ss;
    JFrame studentBeanaddframe;
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = w;
        constraints.gridheight = h;
        add(c, constraints);
    }
    public Student_Frame() {
        studentBeanaddframe = new JFrame();
        studentBeanaddframe.setTitle("学生添加系统");
        studentBeanaddframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        studentBeanaddframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH) / 2;
        int y = (height - HEIGHT) / 2;
        studentBeanaddframe.setLocation(x, y);
        studentBeanaddframe.setVisible(true);
        studentBeanaddframe.setResizable(false);
        studentBeanaddframe.add(this, BorderLayout.CENTER);
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        JLabel name = new JLabel(new ImageIcon("D://abc//11.jpg"));
        JLabel code = new JLabel(new ImageIcon("D://abc//13.jpg"));
        JLabel sexy = new JLabel(new ImageIcon("D://abc//12.jpg"));
        JLabel age = new JLabel(new ImageIcon("D://abc//14.jpg"));
        JLabel birthday = new JLabel(new ImageIcon("D://abc//15.jpg"));
        JLabel address = new JLabel(new ImageIcon("D://abc//16.jpg"));
        JLabel grade = new JLabel(new ImageIcon("D://abc//17.jpg"));
        JLabel major = new JLabel(new ImageIcon("D://abc//18.jpg"));
        final JTextField codeinput = new JTextField(10);
        final JTextField sexyinput = new JTextField(10);
        final JTextField ageinput = new JTextField(10);
        final JTextField birthdayinput = new JTextField(10);
        final JTextField addressinput = new JTextField(10);
        final JTextField gradeinput = new JTextField(10);
        final JTextField majorinput = new JTextField(10);
        JLabel title = new JLabel("学生被添加的基本信息");
        JButton additionbutton = new JButton("添加");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 6;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(grade, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(gradeinput, constraints, 3, 3, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(additionbutton, constraints, 0, 5, 4, 1);
        //将每个文本域中的信息赋值给变量,再将变量以值的形式存储到数据库的表中
        //最后,再将这些值存储到学生对象中,并且这个学生对象是一个静态的对象
        additionbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  try {
                      String nametext = nameinput.getText();
                      codetext = codeinput.getText();
                      agetext = ageinput.getText();
                      sexytext = sexyinput.getText();
                      birthdaytext = birthdayinput.getText();
                      addresstext = addressinput.getText();
                      gradetext = gradeinput.getText();
                      majortext = majorinput.getText();
                      From_student store = new From_student();
                      Connection con = store.getConnection();
                      Statement st = con.createStatement();
                      String sql = "insert into studentinfo values('" + nametext
                                + "','" + codetext + "','" + sexytext + "','"
                                + agetext + "','" + addresstext + "','"
                                + birthdaytext + "','" + gradetext + "','"
                                + majortext + "')";
                      st.executeUpdate(sql);
                      ss = new studentBean(nametext, codetext);
                      ss.setage(agetext);
                      ss.setsexy(sexytext);
                      ss.setaddress(addresstext);
                      ss.setbirthday(birthdaytext);
                      ss.setgrade(gradetext);
                      ss.setmajor(majortext);
                      Vector vec = new Vector();
                      vec.add(ss);
                  } catch (Exception e) {
                  }
                  studentBeanaddframe.dispose();
              }
        });
    }
}

图21-7 添加学生系统的界面

运行上述代码,效果如图21-7所示。

21.4 教师信息系统界面的设计

教师信息系统界面的设计,也是这个软件系统界面的主要部分。通过这些界面,用户可以直接操作数据库。

21.4.1 表teacherinfo的数据库设置与代码实现

在设计整个程序的过程中,首先要设计一个教师类,然后将这个教师类储存到一个数据结构中,最后将数据结构中的数据与数据库连接。这样在界面上显示出来的数据就是数据库中的数据。设计教师类的代码如下所示。

/**设置了教师的姓名、性别、工号、出生年月等变量
*通过构造器设置教师姓名、工号的值
*通过设置器设置其他变量的值
*通过访问器获得变量的值
*/
class teacherBean {
    private String name;
    private String code;
    private String sexy;
    private String birthday;
    private String address;
    private String age;
    private String salary;
    private String major;
    private String duty;
    public teacherBean(String name, String code) {
          this.name = name;
          this.code = code;
    }
    public String getname() {
          return name;
    }
    public String getcode() {
}          return code;
    }
    public void setsexy(String sexy) {
          this.sexy = sexy;
    }
    public void setbirthday(String birthday) {
        this.birthday = birthday;
    }
    public void setage(String age) {
        this.age = age;
    }
    public void setaddress(String address) {
        this.address = address;
    }
    public void setsalary(String salary) {
        this.salary = salary;
    }
    public void setmajor(String major) {
        this.major = major;
    }
    public void setduty(String duty) {
        this.duty = duty;
    }
    public String getsexy() {
        return sexy;
    }
    public String getbirthday() {
        return birthday;
    }
    public String getage() {
        return age;
    }
    public String getaddress() {
        return address;
    }
    public String getsalary() {
        return salary;
    }
    public String getmajor() {
        return major;
    }
    public String getduty() {
        return duty;
    }
}

以上代码将整个数据库中事先设计的表中的所有字段都显示出来,最后按照字符串形式输出。

21.4.2 储存类的设计

那么将选择什么样的数据结构,对以上的教师类对象进行储存呢?本例选择Vector数据结构,对教师进行储存。这种数据结构与字符串数组的用法一样,具体代码如下所示:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Vector;
class From_Teacher {
    public Vector getteacher(Connection con, String sql) {
          Vector v = new Vector();
          try {
              Statement st = con.createStatement();
              ResultSet rs = st.executeQuery(sql);
              /**
               * 通过结果集中的getString方法从数据库的表中提取表字段的数据,再将提取出来的数
                 据赋值给教师对象。
               * 最后将教师对象存储到vector数据结构中。
               */
              while (rs.next()) {
                    String name = rs.getString(1);
                    String code = rs.getString(2);
                    String sexy = rs.getString(3);
                    String age = rs.getString(4);
                    String address = rs.getString(5);
                    String birthday = rs.getString(6);
                    String salary = rs.getString(7);
                    String major = rs.getString(8);
                    String duty = rs.getString(9);
                    teacherBean ss = new teacherBean(name, code);
                    ss.setsexy(sexy);
                    ss.setmajor(major);
                    ss.setbirthday(birthday);
                    ss.setaddress(address);
                    ss.setage(age);
                    ss.setsalary(salary);
                    ss.setduty(duty);
                    v.add(ss);
              }
              rs.close();
          } catch (Exception e) {
              e.printStackTrace();
          }
          return v;
    }
    public teacherBean getobject(Connection con, String stname) {
          teacherBean sst = null;
          try {
              Statement st = con.createStatement();
              //String sql="select * from studentinfo where name='"+stname+"'";
              ResultSet rs = st
                        .executeQuery("select * from studentinfo where class='二班
'and major='英语系'");
              while (rs.next()) {
                    String code = rs.getString(2);
                    String sexy = rs.getString(3);
                  String age = rs.getString(4);
                  String address = rs.getString(5);
                  String birthday = rs.getString(6);
                  String salary = rs.getString(7);
                  String major = rs.getString(8);
                  String duty = rs.getString(9);
                  sst = new teacherBean(stname, code);
                  sst.setsexy(sexy);
                  sst.setmajor(major);
                  sst.setbirthday(birthday);
                  sst.setaddress(address);
                  sst.setage(age);
                  sst.setsalary(salary);
                  sst.setduty(duty);
              }
              rs.close();
        } catch (Exception e) {
              e.printStackTrace();
        }
        return sst;
    }
    //通过设置数据库的URL、密码、用户名来建立与数据库的连接
    public Connection getConnection() {
        Connection con = null;
        try {
              Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
              //加载odbc数据驱动
              con = DriverManager.getConnection("jdbc:odbc:myodbc", "", "");
        } catch (SQLException e) {
              e.printStackTrace();
        } catch (ClassNotFoundException ex) {
              ex.printStackTrace();
        }
        return con;
    }
}

以上代码是让程序从数据库中提取数据,然后按照每个字段的不同,分别赋值给教师类中的每个字段,最后,将教师类的对象添加到Vector数据结构中。这样每次对数据库的操作就不需要在数据库中执行。上述程序是本地程序,如果是网络数据库,这样操作不会增加网络的负担。解决方法是可以将网络数据库下载到本地的Vector数据结构中,然后直接操作本地数据结构,操作完毕后,再提交到数据库中,这就大大提高了数据操作的速度。

21.4.3 教师信息界面的设计

教师信息界面主要包括显示信息的控件、添加对象的控件、删除对象的控件。在教师信息界面中,将教师信息界面抽象成一个类,然后能让所有不同系的教师信息系统都能调用它。下面设计教师信息的界面。代码如下所示:

i import java.awt.BorderLayout;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.Vector;
import java.sql.*;
/**
 * 这是教师类信息系统的框架类。teacherinfoframe是顶层窗口框架。通过文本域控件可以分别显示
   不同系的教师信息。
 * 四个按钮控件分别产生四个不同的动作事件,分别是添加、删除、更新、返回。addition是添加,
   delete是删除,update是更新,bereturn是返回。
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。通过不同的
   SQL语句进入不同系的管理系统。
 * 将数据库中的数据先导入到vec中,然后将vec中的数据导入教师类中,最后再将数据输出。
 */
class Show_Teacher extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    final JTextField codeinput;
    final JTextField sexyinput;
    final JTextField birthdayinput;
    final JTextField ageinput;
    final JTextField addressinput;
    final JTextField salaryinput;
    final JTextField majorinput;
    final JTextField dutyinput;
    JFrame teacherinfoframe;
    JComboBox nameinput;
    From_Teacher store = new From_Teacher();
    Connection con = store.getConnection();
    Teacher_Frame af = new Teacher_Frame();
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
          constraints.gridx = x;
          constraints.gridy = y;
          constraints.gridwidth = w;
          constraints.gridheight = h;
          add(c, constraints);
    }
    public Show_Teacher(String str, String sql) {
          teacherinfoframe = new JFrame();
          teacherinfoframe.setTitle(str);
          teacherinfoframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          teacherinfoframe.setSize(WIDTH, HEIGHT);
          Toolkit kit = Toolkit.getDefaultToolkit();
          Dimension screenSize = kit.getScreenSize();
          int width = screenSize.width;
          int height = screenSize.height;
          int x = (width - WIDTH) / 2;
          int y = (height - HEIGHT) / 2;
          teacherinfoframe.setLocation(x, y);
        teacherinfoframe.setVisible(true);
        teacherinfoframe.setResizable(false);
        teacherinfoframe.add(this, BorderLayout.CENTER);
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        JLabel name = new JLabel(new ImageIcon("D://ab//1.jpg"));
        JLabel code = new JLabel(new ImageIcon("D://ab//2.jpg"));
        JLabel sexy = new JLabel(new ImageIcon("D://ab//3.jpg")");
        JLabel age = new JLabel(new ImageIcon("D://ab//4.jpg"));
        JLabel birthday = new JLabel(new ImageIcon("D://ab//5.jpg"));
        JLabel address = new JLabel(new ImageIcon("D://ab//6.jpg"));
        JLabel salary = new JLabel(new ImageIcon("D://ab//7.jpg"));
        JLabel major = new JLabel(new ImageIcon("D://ab//8.jpg"));
        JLabel duty = new JLabel(new ImageIcon("D://ab//9.jpg"));
        JLabel title = new JLabel(str);
        nameinput = new JComboBox();
        codeinput = new JTextField(10);
        sexyinput = new JTextField(10);
        ageinput = new JTextField(10);
        birthdayinput = new JTextField(10);
        addressinput = new JTextField(10);
        salaryinput = new JTextField(10);
        majorinput = new JTextField(10);
        dutyinput = new JTextField(10);
        //将存储在Vector中的数据提取出来重新赋值给教师对象。再利用到教师对象中
        //getname方法来提取出教师姓名来,最后使用组合列表框的添加功能将这些名字添加到列表中
        Vector vec = store.getteacher(con, sql);
        for (int i = 0; i < vec.size(); i++) {
            teacherBean one = (teacherBean) vec.get(i);
            String nameselect = one.getname();
            nameinput.addItem(nameselect);
        }
        String namestring = (String) nameinput.getSelectedItem();
        teacherBean p = store.getobject(con, namestring);
        String inputcode = p.getcode();
        String inputsexy = p.getsexy();
        String inputage = p.getage();
        String inputbirthday = p.getbirthday();
        String inputaddress = p.getaddress();
        String inputsalary = p.getsalary();
        String inputmajor = p.getmajor();
        String inputduty = p.getduty();
        codeinput.setText(inputcode);
        sexyinput.setText(inputsexy);
        ageinput.setText(inputage);
        birthdayinput.setText(inputbirthday);
        addressinput.setText(inputaddress);
        salaryinput.setText(inputsalary);
        majorinput.setText(inputmajor);
        dutyinput.setText(inputduty);
        JButton addition = new JButton("添加");
        JButton delete = new JButton("删除");
        JButton update = new JButton("更新");
        JButton bereturn = new JButton("返回");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 7;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(salary, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(duty, constraints, 0, 5, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(salaryinput, constraints, 3, 3, 1, 1);
        add(dutyinput, constraints, 1, 5, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(addition, constraints, 0, 6, 1, 1);
        add(delete, constraints, 1, 6, 1, 1);
        add(update, constraints, 2, 6, 1, 1);
        add(bereturn, constraints, 3, 6, 1, 1);
        //通过单击每一个列表框中的名字,会相应地显示出此名字的所有信息
        nameinput.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                  String namestring = (String) nameinput.getSelectedItem();
                  teacherBean p = store.getobject(con, namestring);
                  String inputcode = p.getcode();
                  String inputsexy = p.getsexy();
                  String inputage = p.getage();
                  String inputbirthday = p.getbirthday();
                  String inputaddress = p.getaddress();
                  String inputsalary = p.getsalary();
                  String inputmajor = p.getmajor();
                  String inputduty = p.getduty();
                  codeinput.setText(inputcode);
                  sexyinput.setText(inputsexy);
                  ageinput.setText(inputage);
                  birthdayinput.setText(inputbirthday);
                  addressinput.setText(inputaddress);
                  salaryinput.setText(inputsalary);
                  majorinput.setText(inputmajor);
                  dutyinput.setText(inputduty);
              }
          });
          //返回主菜单
          bereturn.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  teachermanageframe manageframe = new teachermanageframe();
                  manageframe.setVisible(true);
                  teacherinfoframe.dispose();
              }
          });
          //进入添加主界面
          addition.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  Teacher_Frame addfr = new Teacher_Frame();
                  addfr.setVisible(true);
              }
          });
          //更新按钮,使得从数据库表中将数据提取显示到界面中
          update.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String name1 = af.ss.getname();
                  String code1 = af.ss.getcode();
                  String age1 = af.ss.getage();
                  String sexy1 = af.ss.getsexy();
                  String birthday1 = af.ss.getbirthday();
                  String address1 = af.ss.getaddress();
                  String salary1 = af.ss.getsalary();
                  String major1 = af.ss.getmajor();
                  String duty1 = af.ss.getduty();
                  nameinput.addItem(name1);
                  nameinput.setSelectedItem(name1);
                  codeinput.setText(code1);
                  ageinput.setText(age1);
                  sexyinput.setText(sexy1);
                  addressinput.setText(address1);
                  birthdayinput.setText(birthday1);
                  salaryinput.setText(salary1);
                  majorinput.setText(major1);
                  dutyinput.setText(duty1);
              }
          });
          //删除数据,且更新到数据库中
          delete.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String namestring = (String) nameinput.getSelectedItem();
                  From_Teacher store = new From_Teacher();
                  try {
                        Connection con = store.getConnection();
                        Statement st = con.createStatement();
                        String sql = "delete * from teacherinfo where='"
                                  + namestring + "'";
                        st.executeUpdate(sql);
                    } catch (Exception e) {
                    }
                    nameinput.removeItem(namestring);
              }
          });
    }
}

这样整个教师信息系统的界面设计完毕,程序的运行结果如图21-8所示。

图21-8 教师信息系统界面

21.4.4 教师信息录入界面的代码实现

单击“添加”按钮,弹出一个对话框,这是一个框架界面。实现此框架界面的代码如下:

/**主运行类
 * main指主框架
 *   setDefaultCloseOperation指让框架右上角的按钮都有效
 *     show让框架能显示出来
 *     */
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JPanel;
/**
 * 这个是教师信息系统添加信息框架类。通过文本域将不同信息的教师分别输出在其中。通过一个添加按钮,
将数据添加到数据库中。
 * 在这里的布局是通过网格组布局管理器来设定的。在回送到信息界面时将教师对象ss设定为静态。放置新
   建对象时,其值会改变。
 */
class Teacher_Frame extends JPanel {
    String codetext;
    String agetext;
    String sexytext;
    String birthdaytext;
    String addresstext;
    String salarytext;
    String majortext;
    String dutytext;
    public final JTextField nameinput = new JTextField(10);
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    static teacherBean ss;
    JFrame teacheraddframe;
    public void add(Component c, GridBagConstraints constraints, int x, int y,
            int w, int h) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = w;
        constraints.gridheight = h;
        add(c, constraints);
    }
    public Teacher_Frame() {
        teacheraddframe = new JFrame();
        teacheraddframe.setTitle("教师添加系统");
        teacheraddframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        teacheraddframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH)/2;
        int y = (height - HEIGHT)/2;
        teacheraddframe.setLocation(x, y);
        teacheraddframe.setVisible(true);
        teacheraddframe.setResizable(false);
        teacheraddframe.add(this, BorderLayout.CENTER);
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        JLabel name = new JLabel(new ImageIcon("D://ab//1.jpg"));
        JLabel code = new JLabel(new ImageIcon("D://ab//2.jpg"));
        JLabel sexy = new JLabel(new ImageIcon("D://ab//3.jpg")");
        JLabel age = new JLabel(new ImageIcon("D://ab//4.jpg"));
        JLabel birthday = new JLabel(new ImageIcon("D://ab//5.jpg"));
        JLabel address = new JLabel(new ImageIcon("D://ab//6.jpg"));
        JLabel salary = new JLabel(new ImageIcon("D://ab//7.jpg"));
        JLabel major = new JLabel(new ImageIcon("D://ab//8.jpg"));
        JLabel duty = new JLabel(new ImageIcon("D://ab//9.jpg"));
        final JTextField codeinput = new JTextField(10);
        final JTextField sexyinput = new JTextField(10);
        final JTextField ageinput = new JTextField(10);
        final JTextField birthdayinput = new JTextField(10);
        final JTextField addressinput = new JTextField(10);
        final JTextField salaryinput = new JTextField(10);
        final JTextField majorinput = new JTextField(10);
        final JTextField dutyinput = new JTextField(10);
        JLabel title = new JLabel("教师被添加的基本信息");
        JButton additionbutton = new JButton("添加");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 7;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(salary, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(duty, constraints, 0, 5, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(salaryinput, constraints, 3, 3, 1, 1);
        add(dutyinput, constraints, 1, 5, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(additionbutton, constraints, 0, 6, 4, 1);
        //将每个文本域中的信息赋值给变量,再将变量以值的形式存储到数据库的表中
        //最后,再将这些值存储到教师对象中,并且这个教师对象是一个静态的对象
        additionbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  try {
                      String nametext = nameinput.getText();
                      codetext = codeinput.getText();
                      agetext = ageinput.getText();
                      sexytext = sexyinput.getText();
                      birthdaytext = birthdayinput.getText();
                      addresstext = addressinput.getText();
                      salarytext = salaryinput.getText();
                      dutytext = dutyinput.getText();
                      majortext = majorinput.getText();
                      From_Teacher store = new From_Teacher();
                      Connection con = store.getConnection();
                        Statement st = con.createStatement();
                        String sql = "insert into teacherinfo values('" + nametext
                                  + "','" + codetext + "','" + sexytext + "','"
                                  + agetext + "','" + addresstext + "','"
                                  + birthdaytext + "','" + salarytext + "','"
                                  + majortext + "','" + dutytext + "')";
                        st.executeUpdate(sql);
                        ss = new teacherBean(nametext, codetext);
                        ss.setage(agetext);
                        ss.setsexy(sexytext);
                        ss.setaddress(addresstext);
                        ss.setbirthday(birthdaytext);
                        ss.setsalary(salarytext);
                        ss.setmajor(majortext);
                        ss.setduty(dutytext);
                        Vector vec = new Vector();
                        vec.add(ss);
                    } catch (Exception e) {
                    }
                    teacheraddframe.dispose();
              }
          });
    }
}

图21-9 教师添加信息系统界面

运行上述代码,效果如图21-9所示。

21.5 领导信息系统界面的设计

领导信息系统界面的设计也是整个软件系统的界面的主要部分之一。当进入这些界面时,界面自动会装载数据库,用户也就可以直接操作数据库。下面将详细地讲述和分析代码段。

21.5.1 表leaderinfo的数据库设置与代码实现

在设计整个程序的过程中,先要设计一个领导类,然后将这个领导类储存到一个数据结构中,最后将这个数据结构中的数据与数据库连接。这在界面上显示出来的数据就是数据库中的数据。下面是领导类的设计代码:

/**设置了领导的姓名、性别、工号、出生年月、年龄、专业等变量
*通过构造器设置领导姓名、工号的值
*通过设置器设置其他变量的值
*通过访问器获得变量的值
**/
class leaderBean {
    private String name;
    private String code;
    private String sexy;
    private String birthday;
    private String address;
    private String age;
    private String salary;
    private String major;
    private String duty;
    public leaderBean(String name, String code) {
        this.name = name;
        this.code = code;
    }
    public String getname() {
        return name;
    }
    public String getcode() {
        return code;
    }
    public void setsexy(String sexy) {
        this.sexy = sexy;
    }
    public void setbirthday(String birthday) {
        this.birthday = birthday;
    }
    public void setage(String age) {
        this.age = age;
    }
    public void setaddress(String address) {
        this.address = address;
    }
    public void setsalary(String salary) {
        this.salary = salary;
    }
    public void setmajor(String major) {
        this.major = major;
    }
    public void setduty(String duty) {
        this.duty = duty;
    }
    public String getsexy() {
        return sexy;
    }
    public String getbirthday() {
        return birthday;
    }
    public String getage() {
        return age;
    }
    public String getaddress() {
        return address;
    }
    public String getsalary() {
        return salary;
    }
    public String getmajor() {
        return major;
    }
    public String getduty() {
        return duty;
    }
}

以上代码将整个数据库中事先设计的表中的所有字段全部显示出来,最后按照字符串形式输出。

21.5.2 储存类的设计

在这里,仍旧将选择Vector这种数据结构对领导进行储存。领导类的储存类设计与教师类的一模一样,在这里不再提供。程序从数据库中提取数据,然后按照每个字段的不同,分别赋值给领导类中的每个字段,最后,将领导类的对象添加到Vector数据结构中。

21.5.3 领导信息界面的设计

领导信息界面同样包括了显示信息的控件、添加对象的控件、删除对象的控件。在这个领导信息界面中,将这个领导信息界面抽象成一个类,然后,能让所有的不同系的领导信息系统(包括学校领导系统)都能调用它。领导信息界面的实现代码如下所示:

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.sql.Connection;
import java.sql.Statement;
import java.util.Vector;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
/**
 * 这是领导类信息系统的框架类。leaderinfoframe是顶层窗口框架。通过文本域控件可以分别显示不同
   系的领导信息。
 * 四个按钮控件分别产生四个不同的动作事件,分别是添加、删除、更新、返回。addition是添加,
   delete是删除,update是更新,bereturn是返回
 * 在布局方面有两个布局管理器,一个是lay即网格组布局,一个是jp即GridLayout布局。通过不同的
   SQL语句进入不同系的管理系统。
 * 将数据库中的数据先导入到vec中,然后将vec中的数据导入领导类中,最后再将数据输出
 */
class Show_Leader extends JPanel {
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    final JComboBox nameinput;
    final JTextField codeinput;
    final JTextField sexyinput;
    final JTextField birthdayinput;
    final JTextField ageinput;
    final JTextField addressinput;
    final JTextField salaryinput;
    final JTextField majorinput;
    final JTextField dutyinput;
    JFrame teacherinfoframe;
    From_Teacher store = new From_Teacher();
    Connection con = store.getConnection();
    Leader_Frame af = new Leader_Frame();
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
          constraints.gridx = x;
          constraints.gridy = y;
          constraints.gridwidth = w;
          constraints.gridheight = h;
          add(c, constraints);
    }
    public Show_Leader(String str, String sql) {
          teacherinfoframe = new JFrame();
          teacherinfoframe.setTitle(str);
          teacherinfoframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          teacherinfoframe.setSize(WIDTH, HEIGHT);
          Toolkit kit = Toolkit.getDefaultToolkit();
          Dimension screenSize = kit.getScreenSize();
          int width = screenSize.width;
          int height = screenSize.height;
          int x = (width - WIDTH) / 2;
          int y = (height - HEIGHT) / 2;
          teacherinfoframe.setLocation(x, y);
          teacherinfoframe.setVisible(true);
          teacherinfoframe.setResizable(false);
          teacherinfoframe.add(this, BorderLayout.CENTER);
          GridBagLayout lay = new GridBagLayout();
          setLayout(lay);
          JLabel name = new JLabel(new ImageIcon("D://bc//1.jpg"));
          JLabel code = new JLabel(new ImageIcon("D://bc //2.jpg"));
          JLabel sexy = new JLabel(new ImageIcon("D://bc //3.jpg"));
          JLabel age = new JLabel(new ImageIcon("D://bc //4.jpg")");
          JLabel birthday = new JLabel(new ImageIcon("D://bc //5.jpg"));
          JLabel address = new JLabel(new ImageIcon("D://bc //6.jpg"));
          JLabel salary = new JLabel(new ImageIcon("D://bc //7.jpg"));
          JLabel major = new JLabel(new ImageIcon("D://bc //8.jpg"));
        JLabel duty = new JLabel(new ImageIcon("D://bc //9.jpg"));
        JLabel title = new JLabel(str);
        nameinput = new JComboBox();
        codeinput = new JTextField(10);
        sexyinput = new JTextField(10);
        ageinput = new JTextField(10);
        birthdayinput = new JTextField(10);
        addressinput = new JTextField(10);
        salaryinput = new JTextField(10);
        majorinput = new JTextField(10);
        dutyinput = new JTextField(10);
        ///将存储在Vector中的数据提取出来重新赋值给领导对象。再利用领导对象中
        //getname方法来提取出领导姓名来,最后使用组合列表框的添加功能将这些名字添加到列表中
        Vector vec = store.getteacher(con, sql);
        for (int i = 0; i < vec.size(); i++) {
            teacherBean one = (teacherBean) vec.get(i);
            String nameselect = one.getname();
            nameinput.addItem(nameselect);
        }
        String namestring = (String) nameinput.getSelectedItem();
        teacherBean p = store.getobject(con, namestring);
        String inputcode = p.getcode();
        String inputsexy = p.getsexy();
        String inputage = p.getage();
        String inputbirthday = p.getbirthday();
        String inputaddress = p.getaddress();
        String inputsalary = p.getsalary();
        String inputmajor = p.getmajor();
        String inputduty = p.getduty();
        codeinput.setText(inputcode);
        sexyinput.setText(inputsexy);
        ageinput.setText(inputage);
        birthdayinput.setText(inputbirthday);
        addressinput.setText(inputaddress);
        salaryinput.setText(inputsalary);
        majorinput.setText(inputmajor);
        dutyinput.setText(inputduty);
        JButton addition = new JButton("添加");
        JButton delete = new JButton("删除");
        JButton update = new JButton("更新");
        JButton bereturn = new JButton("返回");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 7;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(salary, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(duty, constraints, 0, 5, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(salaryinput, constraints, 3, 3, 1, 1);
        add(dutyinput, constraints, 1, 5, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(addition, constraints, 0, 6, 1, 1);
        add(delete, constraints, 1, 6, 1, 1);
        add(update, constraints, 2, 6, 1, 1);
        add(bereturn, constraints, 3, 6, 1, 1);
        //通过单击每一个列表框中的名字,会相应地显示出此名字的所有信息
        nameinput.addItemListener(new ItemListener() {
            public void itemStateChanged(ItemEvent e) {
                  String namestring = (String) nameinput.getSelectedItem();
                  teacherBean p = store.getobject(con, namestring);
                  String inputcode = p.getcode();
                  String inputsexy = p.getsexy();
                  String inputage = p.getage();
                  String inputbirthday = p.getbirthday();
                  String inputaddress = p.getaddress();
                  String inputsalary = p.getsalary();
                  String inputmajor = p.getmajor();
                  String inputduty = p.getduty();
                  codeinput.setText(inputcode);
                  sexyinput.setText(inputsexy);
                  ageinput.setText(inputage);
                  birthdayinput.setText(inputbirthday);
                  addressinput.setText(inputaddress);
                  salaryinput.setText(inputsalary);
                  majorinput.setText(inputmajor);
                  dutyinput.setText(inputduty);
            }
        });
        //返回主菜单
        bereturn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  teachermanageframe manageframe = new teachermanageframe();
                  manageframe.setVisible(true);
                  teacherinfoframe.dispose();
            }
        });
        //进入添加主界面
        addition.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  Leader_Frame addfr = new Leader_Frame();
                  addfr.setVisible(true);
              }
        });
        //更新按钮,使得从数据库表中将数据提取显示到界面中
        update.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String name1 = af.ss.getname();
                  String code1 = af.ss.getcode();
                  String age1 = af.ss.getage();
                  String sexy1 = af.ss.getsexy();
                  String birthday1 = af.ss.getbirthday();
                  String address1 = af.ss.getaddress();
                  String salary1 = af.ss.getsalary();
                  String major1 = af.ss.getmajor();
                  String duty1 = af.ss.getduty();
                  nameinput.addItem(name1);
                  nameinput.setSelectedItem(name1);
                  codeinput.setText(code1);
                  ageinput.setText(age1);
                  sexyinput.setText(sexy1);
                  addressinput.setText(address1);
                  birthdayinput.setText(birthday1);
                  salaryinput.setText(salary1);
                  majorinput.setText(major1);
                  dutyinput.setText(duty1);
              }
        });
        //删除数据,且更新到数据库中
        delete.addActionListener(new ActionListener() {
              public void actionPerformed(ActionEvent Event) {
                  String namestring = (String) nameinput.getSelectedItem();
                  From_Teacher store = new From_Teacher();
                  try {
                      Connection con = store.getConnection();
                      Statement st = con.createStatement();
                      String sql = "delete * from teacherinfo where='"
                                + namestring + "'";
                      st.executeUpdate(sql);
                  } catch (Exception e) {
                  }
                  nameinput.removeItem(namestring);
              }
        });
    }
}

整个领导信息系统的界面设计完毕。程序段的运行结果如图21-10所示。

图21-10 领导信息系统界面

21.5.4 领导信息录入界面的代码实现

单击“添加”按钮,会弹出一个对话框,这是一个框架界面。下面是显示信息的控件组的实现代码:

/**主运行类
 * main指主框架
 * setDefaultCloseOperation指让框架右上角的按钮都有效
 * show让框架能显示出来
 * */
import java.awt.*;
import javax.swing.*;
import java.sql.*;
import java.awt.event.*;
import java.util.Vector;
/**
 * 这个是领导信息系统添加信息框架类。通过文本域将不同信息的领导分别输出在其中。通过一个添加按钮,
   将数据添加到数据库中。
 * 在这里的布局是通过网格组布局管理器来设定的。在回送到信息界面时将领导对象ss设定为静态。放置新
   建对象时,其值会改变。
 */
class Leader_Frame extends JPanel {
    String codetext;
    String agetext;
    String sexytext;
    String birthdaytext;
    String addresstext;
    String salarytext;
    String majortext;
    String dutytext;
    public final JTextField nameinput = new JTextField(10);
    private static final long serialVersionUID = 1L;
    static final int WIDTH = 700;
    static final int HEIGHT = 400;
    static teacherBean ss;
    JFrame leaderraddframe;
    public void add(Component c, GridBagConstraints constraints, int x, int y,
              int w, int h) {
        constraints.gridx = x;
        constraints.gridy = y;
        constraints.gridwidth = w;
        constraints.gridheight = h;
        add(c, constraints);
    }
    public Leader_Frame() {
        leaderraddframe = new JFrame();
        leaderraddframe.setTitle("领导添加系统");
        leaderraddframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        leaderraddframe.setSize(WIDTH, HEIGHT);
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int width = screenSize.width;
        int height = screenSize.height;
        int x = (width - WIDTH) / 2;
        int y = (height - HEIGHT) / 2;
        leaderraddframe.setLocation(x, y);
        leaderraddframe.setVisible(true);
        leaderraddframe.setResizable(false);
        leaderraddframe.add(this, BorderLayout.CENTER);
        GridBagLayout lay = new GridBagLayout();
        setLayout(lay);
        JLabel name = new JLabel(new ImageIcon("D://bc//1.jpg"));
        JLabel code = new JLabel(new ImageIcon("D://bc //2.jpg"));
        JLabel sexy = new JLabel(new ImageIcon("D://bc //3.jpg"));
        JLabel age = new JLabel(new ImageIcon("D://bc //4.jpg")");
        JLabel birthday = new JLabel(new ImageIcon("D://bc //5.jpg"));
        JLabel address = new JLabel(new ImageIcon("D://bc //6.jpg"));
        JLabel salary = new JLabel(new ImageIcon("D://bc //7.jpg"));
        JLabel major = new JLabel(new ImageIcon("D://bc //8.jpg"));
        JLabel duty = new JLabel(new ImageIcon("D://bc //9.jpg"));
        final JTextField codeinput = new JTextField(10);
        final JTextField sexyinput = new JTextField(10);
        final JTextField ageinput = new JTextField(10);
        final JTextField birthdayinput = new JTextField(10);
        final JTextField addressinput = new JTextField(10);
        final JTextField salaryinput = new JTextField(10);
        final JTextField majorinput = new JTextField(10);
        final JTextField dutyinput = new JTextField(10);
        JLabel title = new JLabel("领导被添加的基本信息");
        JButton additionbutton = new JButton("添加");
        GridBagConstraints constraints = new GridBagConstraints();
        constraints.fill = GridBagConstraints.NONE;
        constraints.weightx = 4;
        constraints.weighty = 7;
        add(title, constraints, 0, 0, 4, 1); //使用网格组布局添加控件
        add(name, constraints, 0, 1, 1, 1);
        add(code, constraints, 0, 2, 1, 1);
        add(sexy, constraints, 0, 3, 1, 1);
        add(age, constraints, 0, 4, 1, 1);
        add(nameinput, constraints, 1, 1, 1, 1);
        add(codeinput, constraints, 1, 2, 1, 1);
        add(sexyinput, constraints, 1, 3, 1, 1);
        add(ageinput, constraints, 1, 4, 1, 1);
        add(birthday, constraints, 2, 1, 1, 1);
        add(address, constraints, 2, 2, 1, 1);
        add(salary, constraints, 2, 3, 1, 1);
        add(major, constraints, 2, 4, 1, 1);
        add(duty, constraints, 0, 5, 1, 1);
        add(birthdayinput, constraints, 3, 1, 1, 1);
        add(addressinput, constraints, 3, 2, 1, 1);
        add(salaryinput, constraints, 3, 3, 1, 1);
        add(dutyinput, constraints, 1, 5, 1, 1);
        add(majorinput, constraints, 3, 4, 1, 1);
        add(additionbutton, constraints, 0, 6, 4, 1);
        //将每个文本域中的信息赋值给变量,再将变量以值的形式存储到数据库的表中
        //最后,再将这些值存储到领导对象中,并且这个领导对象是一个静态的对象
        additionbutton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent Event) {
                  try {
                      String nametext = nameinput.getText();
                      codetext = codeinput.getText();
                      agetext = ageinput.getText();
                      sexytext = sexyinput.getText();
                      birthdaytext = birthdayinput.getText();
                      addresstext = addressinput.getText();
                      salarytext = salaryinput.getText();
                      dutytext = dutyinput.getText();
                      majortext = majorinput.getText();
                      From_Teacher store = new From_Teacher();
                      Connection con = store.getConnection();
                      Statement st = con.createStatement();
                      String sql = "insert into teacherinfo values('" + nametext
                                + "','" + codetext + "','" + sexytext + "','"
                                + agetext + "','" + addresstext + "','"
                                + birthdaytext + "','" + salarytext + "','"
                                + majortext + "','" + dutytext + "')";
                      st.executeUpdate(sql);
                      ss = new teacherBean(nametext, codetext);
                      ss.setage(agetext);
                      ss.setsexy(sexytext);
                      ss.setaddress(addresstext);
                      ss.setbirthday(birthdaytext);
                      ss.setsalary(salarytext);
                      ss.setmajor(majortext);
                      ss.setduty(dutytext);
                      Vector vec = new Vector();
                      vec.add(ss);
                  } catch (Exception e) {
                  }
                  leaderraddframe.dispose();
              }
          });
    }
}

运行上述代码,效果如图21-11所示。

图21-11 领导添加信息系统界面

至此,程序全部设计完毕。其实,这个实例程序还有点粗糙,希望读者能够在学习的时候,再添加一些功能,从而检验自己对本书的掌握情况。

每个应用程序都采用模块方式。学生信息系统中有7个信息界面,但在这里只定义了一个类,通过参数来达到所有的界面共用一个类,这也就是面向对象编程的一个特色。