数据库课设之学生信息管理系统
一、系统需求分析
学校每年都有新生入学、老生毕业,还有其他各种人事变动。如何有效地管理这些学生
的信息,帮助学校和老师掌握学生的情况,这就是学生信息管理系统需要完成的功能。
1.1 系统功能分析
本系统主要的功能是收集学生的个人信息,以便向教师提供每个学生在校的情况。系统
的主要功能有:
a、学生个人信息输入,包括:姓名、性别、院系、生日、籍贯、生源所在地等。
b、学生流动情况的输入,包括:转系、休学、复学、退学、毕业。
c、奖惩情况的输入。
d、学生个人情况查询和修改,包括流动情况和奖罚情况。
1.2 系统功能模块设计(划分)
根据系统功能要求可以将系统分解成几个模
块来分别设计应用程序界面,如图 1 所示。
1.3 与其它系统的关系
学生信息管理系统是校园信息管理系统的一个组成部分。它为其它系统,如班级信息管理系统、
教学管理系统、成绩单系统、宿舍分配系统等,提供学生的基本情况。同时需要其他系统提
供的班级设置和院系设置等情况。这些系统可以使用同一个数据库,直接相互调用所需的数
据。
1.4 数据流程图
学生信息管理系统的数据流程如图 2 所示。
二、数据库设计
2.1 数据库需求分析
根据上一节的数据流程图,可以列出以下记录学生信息所需的数据项和数据结构:
a、学生:学号、姓名、性别、生日、籍贯、所在院系、所在班级。
b、处罚记录:记录号、级别、处罚对象、记录时间、详细描述、是否生效。
c、奖励记录:记录号、级别、奖励对象、记录时间、详细描述。
d、学籍变更记录:记录号、变更情况、记录对象、记录时间、详细描述。
所需的外部数据支持:
e、班级:班级编号、班级名称、所属院系。
f、院系:代码、名称。
2.2 数据库概念结构设计
图 3 是本系统所需数据的 E-R 模型图。
三、各功能模块的设计与实现
3.1 功能说明
1、学生个人信息输入
2、学籍变更情况的输入
3、奖励情况的输入
4、处罚情况的输入
5、学生个人情况查询和修改
3.2 用户界面设计
完成数据库创建和功能说明以后,我们可以进行下一步工作,即设计用户界面。由于本
系统管理内容比较简单,且为校园管理信息系统的一部分,因此使用一个窗体不同的标签页
来完成系统要求的 5 项功能。
我们把学生信息管理系统的窗体分成____个主要部分,如图____所示。
1、应用程序主窗体的创建
2、学生个人信息输入界面
3、学籍变更情况输入界面
4、奖励情况输入界面
5、处罚情况输入界面
6、学生个人情况查询和修改界面
3.3 各功能模块的实现
1、学生个人信息输入
2、学籍变更情况输入
3、奖励情况输入
4、处罚情况输入
5、学生个人情况查询和修改
四、系统实现
根据系统E-R图,需要设计4个数据表来存放学生的信息。为了系统的完整,系统中包括了应用程序设计中所需的4个外部数据表。为了优化数据表结构,部分字段采用代码形式,因此需要附加3个代码表。这11个数据表如表1到表11所示。
表1 student学生个人信息表
表2 studentxj学籍变更信息表
表3 reward奖励记录信息表
表4 punishment处罚记录信息表
表5 class班级信息表
表6 department院系信息表
表7 change_code学籍变动代码表
表8 reward_levels奖励等级代码表
表9 punish_levels处罚等级代码表
表10 studentdlb学生账号密码登录表
表11 teacherdlb老师账号密码登录表
4.1、学生和教务办老师的账号密码登陆界面
学生和教务办老师的账号密码登陆界面请见如图3-1学生和教务办老师的账号密码登陆界面。这个界面是进入学生信息管理系统的钥匙并且设置了教务办老师和学生两个权限,为了实现不同权限的登录功能,所以在数据库中设计了学生账号密码登录表和老师账号密码登录表两个表格,然后用户可以选择自己的身份权限输入自己的账号密码进行登录,然后系统通过连接数据库的两个表格去和用户输入的账号密码去相应匹配,只有匹配成功之后才会出现不同的用户主界面,然后才可以进行数据操作。(用户名的填写格式界面文本框有提示)
实现学生和教务办老师的账号密码登陆界面的全部代码:
package xr06;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import javax.swing.*;
import xr06.DbProcess;
public class Student_management_login_system extends JFrame implements ActionListener {
JButton jb1,jb2,jb3=null;
JRadioButton jrb1,jrb2=null;
JPanel jp0,jp1,jp2,jp3,jp4=null;
JTextField jtf=null;
JLabel jlb0,jlb1,jlb2,jlb3=null;
JPasswordField jpf=null;
ButtonGroup bg=null;
private static DbProcess dbProcess;
public static void main(String[] args) {
Student_management_login_system smls=new Student_management_login_system();
}
public Student_management_login_system()
{
setIconImage(Toolkit.getDefaultToolkit().getImage("G:\\timg-1.jpg"));//图片可以自己选择换
jb1=new JButton("登录 (login)");
jb1.setBounds(32, 5, 150, 27);
jb1.setBackground(Color.ORANGE);
jb2=new JButton("重置 (resetting)");
jb2.setBounds(196, 5, 204, 27);
jb2.setBackground(Color.ORANGE);
jb3=new JButton("退出 (exit)");
jb3.setBounds(414, 5, 150, 27);
jb3.setForeground(Color.BLACK);
jb3.setBackground(Color.ORANGE);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
jrb1=new JRadioButton("教务办老师 (teacher)");
jrb1.setFont(new Font("宋体", Font.BOLD, 15));
jrb1.setBounds(216, 30, 201, 27);
jrb1.setBackground(new Color(255, 255, 153));
jrb2=new JRadioButton("学生 (student)");
jrb2.setFont(new Font("宋体", Font.BOLD, 15));
jrb2.setBounds(423, 30, 163, 27);
jrb2.setBackground(new Color(255, 255, 153));
bg=new ButtonGroup();
bg.add(jrb1);
bg.add(jrb2);
jrb2.setSelected(true);
jp0=new JPanel();
jp0.setBounds(0, 0, 602, 100);
jp0.setBackground(new Color(255, 255, 153));
jp1=new JPanel();
jp1.setBounds(0, 99, 602, 55);
jp1.setBackground(new Color(255, 255, 153));
jp2=new JPanel();
jp2.setBounds(0, 152, 602, 70);
jp2.setBackground(new Color(255, 255, 153));
jp3=new JPanel();
jp3.setBounds(0, 221, 602, 86);
jp3.setBackground(new Color(255, 255, 153));
jp4=new JPanel();
jp4.setBounds(0, 307, 602, 93);
jp4.setBackground(new Color(255, 255, 153));
jlb0=new JLabel("\u5B66\u751F\u4FE1\u606F\u7BA1\u7406\u7CFB\u7EDF");
jlb0.setFont(new Font("方正舒体", Font.BOLD, 40));
jlb0.setBounds(129, 36, 351, 51);
jlb1=new JLabel("用户名 (user name):");
jlb1.setFont(new Font("宋体", Font.BOLD, 18));
jlb1.setBounds(54, 25, 236, 18);
jlb2=new JLabel("\u5BC6 \u7801 (pass-word)\uFF1A");
jlb2.setFont(new Font("宋体", Font.BOLD, 18));
jlb2.setBounds(54, 35, 227, 18);
jlb3=new JLabel("\u8EAB \u4EFD (Identity)\uFF1A");
jlb3.setFont(new Font("宋体", Font.BOLD, 15));
jlb3.setBounds(29, 26, 201, 34);
jtf=new JTextField(15);
jtf.setBounds(253, 24, 281, 24);
jpf=new JPasswordField(15);
jpf.setBounds(253, 34, 281, 24);
jtf.addFocusListener(new JTextFieldHintListener("请输入学号/教职工号", jtf));
jp0.setLayout(null);
jp0.add(jlb0);
jp1.setLayout(null);
jp1.add(jlb1);
jp1.add(jtf);
jp2.setLayout(null);
jp2.add(jlb2);
jp2.add(jpf);
jp3.setLayout(null);
jp3.add(jlb3); //添加标签
jp3.add(jrb1);
jp3.add(jrb2);
jp4.setLayout(null);
jp4.add(jb1); //添加按钮
jp4.add(jb2);
jp4.add(jb3);
getContentPane().setLayout(null);
getContentPane().add(jp0);
getContentPane().add(jp1);
getContentPane().add(jp2);
getContentPane().add(jp3);
getContentPane().add(jp4);
this.setTitle("学生信息管理系统 ");
this.setSize(605,433);
this.setLocation(700, 300);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //设置当关闭窗口时,保证JVM也退出
this.setVisible(true);
this.setResizable(false);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("登录 (login)")
&& !jtf.getText().isEmpty()&&!jpf.getText().isEmpty()){
System.out.println("actionPerformed(). 登录 (login)");
String jtfQueryField = jtf.getText().trim();
String jpfQueryField = jpf.getText().trim();
queryProcess(jtfQueryField,jpfQueryField);
}
else if(e.getActionCommand().equals("登录 (login)")
&& jtf.getText().isEmpty()&&!jpf.getText().isEmpty()){
JOptionPane.showMessageDialog(null,"请输入用户名!","提示消息",JOptionPane.WARNING_MESSAGE);
}//只有用户名没有输入
else if(e.getActionCommand().equals("登录 (login)")
&& jtf.getText().isEmpty()&& jpf.getText().isEmpty()){
JOptionPane.showMessageDialog(null,"请输入用户名和密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}//用户名和密码都没有输入
else if(e.getActionCommand().equals("登录 (login)")
&& !jtf.getText().isEmpty()&&jpf.getText().isEmpty()){
JOptionPane.showMessageDialog(null,"请输入密码!","提示消息",JOptionPane.WARNING_MESSAGE);
}//只有密码没有输入
else if(e.getActionCommand().equals("重置 (resetting)")){
jtf.setText("");
jpf.setText("");
}
else{
int n=JOptionPan