第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个信息界面,但在这里只定义了一个类,通过参数来达到所有的界面共用一个类,这也就是面向对象编程的一个特色。