学生请假管理系统
声明:未经允许,请勿转载
运行结果








学生请假管理系统需求分析




GUI 编程





事件处理













数据库编程





部分代码
项目结构

实体类 Admin.java
packageinfo;publicclassAdmin{//管理员信息类privateStringUserIdentity;//用户身份,用于判断登录用户是学生Student还是教师Teacher还是管理员AdminprivateString id;// 工号,即用户账号privateString password;//用户密码privateString name;// 姓名privateString sex;// 性别privateString age;//年龄privateString jobTitle;//职称privateStringPhone;//联系电话privateString address;// 家庭住址// 2120220087 010718 小庄 男 21 电气与计算机工程学院 教师 15018722839 广东省广州市//("Admin"," 2120220087 ","1 ","小庄"," 男 ","21 "," 教务处主任"," 15018722839"," 广东省广州市");publicAdmin(){}publicAdmin(String userIdentity,String id,String password,String name,String sex,String age,String jobTitle,String phone,String address){this.UserIdentity= userIdentity;this.id = id;this.password = password;this.name = name;this.sex = sex;this.age = age;this.jobTitle = jobTitle;this.Phone= phone;this.address = address;}publicStringgetUserIdentity(){returnUserIdentity;}publicvoidsetUserIdentity(String userIdentity){UserIdentity= userIdentity;}publicStringgetId(){return id;}publicvoidsetId(String id){this.id = id;}publicStringgetPassword(){return password;}publicvoidsetPassword(String password){this.password = password;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetSex(){return sex;}publicvoidsetSex(String sex){this.sex = sex;}publicStringgetAge(){return age;}publicvoidsetAge(String age){this.age = age;}publicStringgetJobTitle(){return jobTitle;}publicvoidsetJobTitle(String jobTitle){this.jobTitle = jobTitle;}publicStringgetPhone(){returnPhone;}publicvoidsetPhone(String phone){Phone= phone;}publicStringgetAddress(){return address;}publicvoidsetAddress(String address){this.address = address;}}
LeaveData.java
packageinfo;publicclassLeaveData{//请假信息表单privateString num;// 编号privateString name;// 姓名privateStringID;// 学号privateString sex;//性别privateString age;//年龄privateString faculties;// 所在院系privateString profession;//专业名称privateString className;// 班级名称privateStringPhone;//联系电话privateString requestData;//申请日期privateStringStartTime;// 开始时间privateStringEndEime;// 结束时间privateString reason;//申请理由privateStringApprover;//审核人privateStringApprovalReason;//审核意见privateString state;//状态/**
* 状态:
* 编辑保存 ----未提交
* 请假----请假申请中
* 请假审批通过 ---请假成功
* 请假审批不通过--请假失败
* 销假 ---销假申请中
* 销假审批通过--销假成功
* 销假审批不通过---销假失败
*/publicLeaveData(){}publicLeaveData(String num,String name,StringID,String sex,String age,String faculties,String profession,String className,String phone,String requestData,String startTime,String endEime,String approver,String approvalReason,String reason,String state){this.num = num;this.name = name;this.ID=ID;this.sex = sex;this.age = age;this.faculties = faculties;this.profession = profession;this.className = className;this.Phone= phone;this.requestData = requestData;this.StartTime= startTime;this.EndEime= endEime;this.Approver= approver;this.ApprovalReason= approvalReason;this.reason = reason;this.state = state;}publicStringgetNum(){return num;}publicvoidsetNum(String num){this.num = num;}publicStringgetName(){return name;}publicvoidsetName(String name){this.name = name;}publicStringgetID(){returnID;}publicvoidsetID(StringID){this.ID=ID;}publicStringgetSex(){return sex;}publicvoidsetSex(String sex){this.sex = sex;}publicStringgetAge(){return age;}publicvoidsetAge(String age){this.age = age;}publicStringgetFaculties(){return faculties;}publicvoidsetFaculties(String faculties){this.faculties = faculties;}publicStringgetProfession(){return profession;}publicvoidsetProfession(String profession){this.profession = profession;}publicStringgetClassName(){return className;}publicvoidsetClassName(String className){this.className = className;}publicStringgetPhone(){returnPhone;}publicvoidsetPhone(String phone){Phone= phone;}publicStringgetRequestData(){return requestData;}publicvoidsetRequestData(String requestData){this.requestData = requestData;}publicStringgetStartTime(){returnStartTime;}publicvoidsetStartTime(String startTime){StartTime= startTime;}publicStringgetEndEime(){returnEndEime;}publicvoidsetEndEime(String endEime){EndEime= endEime;}publicStringgetReason(){return reason;}publicvoidsetReason(String reason){this.reason = reason;}publicStringgetApprover(){returnApprover;}publicvoidsetApprover(String approver){Approver= approver;}publicStringgetApprovalReason(){returnApprovalReason;}publicvoidsetApprovalReason(String approvalReason){ApprovalReason= approvalReason;}publicStringgetState(){return state;}publicvoidsetState(String state){this.state = state;}}
UserLogin.java
packageGUI;importinfo.Admin;importinfo.Student;importinfo.Teacher;importinfo.User;importjavax.swing.*;importjavax.swing.event.DocumentEvent;importjavax.swing.plaf.FontUIResource;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.Enumeration;importjava.util.Objects;importstatictoolbox.LeaveDataBase.getConnection;publicclassUserLoginextendsJFrameimplementsActionListener{privateJTextField fieldAccount =newJTextField();//账号输入框文本privateJPasswordField fieldPassword =newJPasswordField();//密码输入框文本privateJButton buttonLogin =newJButton("登 录");staticUser user =newUser();//用于存储登录者的账户密码及身份Admin admin;Teacher teacher;Student student;publicstaticvoidmain(String[] args){initGobalFont(newFont("宋体",Font.PLAIN,12));try{//org.jb2011.lnf.beautyeye.BeautyEyeLNFHelper.launchBeautyEyeLNF();newUserLogin();}catch(Exception e){
e.printStackTrace();}}publicUserLogin(){this.setTitle("登录系统");this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口this.setBounds(500,150,630,450);//设置页面大小this.setResizable(false);//设置页面不可拖拽改变大小this.setLocationRelativeTo(null);// 设置登录界面居中this.getContentPane().setLayout(null);this.setVisible(true);JLabel titleLabel =newJLabel("学生请假管理系统");
titleLabel.setFont(newFont("华文行楷",Font.PLAIN,30));
titleLabel.setIcon(newImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/logo.png"))));
titleLabel.setBounds(150,70,350,65);this.getContentPane().add(titleLabel);//用户账号JLabel labelAccount =newJLabel("账号:");
labelAccount.setFont(newFont("宋体",Font.PLAIN,20));
labelAccount.setAlignmentY(CENTER_ALIGNMENT);
labelAccount.setIcon(newImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/userName.png"))));
labelAccount.setBounds(150,172,81,30);
fieldAccount.setBounds(243,172,200,30);//fieldAccount.setText("1");///==========this.getContentPane().add(labelAccount);this.getContentPane().add(fieldAccount,BorderLayout.CENTER);
fieldAccount.getDocument().addDocumentListener(newjavax.swing.event.DocumentListener(){publicvoidchangedUpdate(DocumentEvent e){//这是更改操作的处理
user.setAccount(fieldAccount.getText().trim());//trim()方法用于去掉你可能误输入的空格号}publicvoidinsertUpdate(DocumentEvent e){//这是插入操作的处理
user.setAccount(fieldAccount.getText().trim());}publicvoidremoveUpdate(DocumentEvent e){//这是删除操作的处理
user.setAccount(fieldAccount.getText().trim());}});// 用户密码JLabel labelPwd =newJLabel("密码:");
labelPwd.setFont(newFont("宋体",Font.PLAIN,20));
labelPwd.setAlignmentY(CENTER_ALIGNMENT);
labelPwd.setIcon(newImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/password.png"))));
labelPwd.setBounds(150,222,81,30);
fieldPassword.setBounds(243,222,200,30);//fieldPassword.setText("1");///this.getContentPane().add(labelPwd);this.getContentPane().add(fieldPassword,BorderLayout.CENTER);
fieldPassword.getDocument().addDocumentListener(newjavax.swing.event.DocumentListener(){publicvoidchangedUpdate(DocumentEvent e){//这是更改操作的处理
user.setPassword(fieldPassword.getText().trim());//trim()方法用于去掉你可能误输入的空格号}publicvoidinsertUpdate(DocumentEvent e){//这是插入操作的处理
user.setPassword(fieldPassword.getText().trim());}publicvoidremoveUpdate(DocumentEvent e){//这是删除操作的处理
user.setPassword(fieldPassword.getText().trim());}});// 登陆按钮
buttonLogin.setBounds(275,282,95,30);
buttonLogin.setFont(newFont("宋体",Font.PLAIN,13));
buttonLogin.setIcon(newImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/login.png"))));this.getContentPane().add(buttonLogin);//去掉按钮文字周围的焦点框
buttonLogin.setFocusPainted(false);
buttonLogin.addActionListener(this);this.setVisible(true);this.revalidate();this.repaint();}@OverridepublicvoidactionPerformed(ActionEvent e){if(e.getSource()== buttonLogin){booleanLoginUser=false;try{LoginUser=verifyAccount(user.getAccount(), user.getPassword());}catch(SQLException ex){thrownewRuntimeException(ex);}if(LoginUser){//判断权限,加载相应面板if(user.getUserIdentity().equals("Student")){JOptionPane.showMessageDialog(this,"账号密码正确,即将进入系统学生端!","提示",JOptionPane.INFORMATION_MESSAGE);// 提示newMainWindow(student);}elseif(user.getUserIdentity().equals("Teacher")){JOptionPane.showMessageDialog(this,"账号密码正确,即将进入系统教师端!","提示",JOptionPane.INFORMATION_MESSAGE);//newMainWindow(teacher);}elseif(user.getUserIdentity().equals("Admin")){JOptionPane.showMessageDialog(this,"账号密码正确,即将进入系统管理端!","提示",JOptionPane.INFORMATION_MESSAGE);//newMainWindow(admin);}this.dispose();// 关闭当前窗口}}}privatebooleanverifyAccount(String account,String password)throwsSQLException{// 判断输入账号或密码为空与空格的情况if(account ==null||"".equals(account.trim())|| password ==null||"".equals(password.trim())){// 警示框,"Title",JOptionPane.WARNING_MESSAGEJOptionPane.showMessageDialog(null,"账号与密码均不能为空!","警告",JOptionPane.WARNING_MESSAGE);}else{Connection conn =getConnection();Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//查询学生表ResultSet rs = stmt.executeQuery("SELECT *FROM StudentList WHERE id = '"+ account +"' AND password = '"+ password +"';");if(!rs.isBeforeFirst()){//若学生表中不存在,则查询教师表
rs = stmt.executeQuery("SELECT *FROM TeacherList WHERE id = '"+ account +"' AND password = '"+ password +"';");}if(!rs.isBeforeFirst()){//若学生表与教师表中不存在,则查询管理员表
rs = stmt.executeQuery("SELECT *FROM AdminList WHERE id = '"+ account +"' AND password = '"+ password +"';");}if(!rs.isBeforeFirst()){//若学生表与教师表与管理员表中不存在,则提示账户密码错误//错误提示框,"Title",JOptionPane.ERROR_MESSAGEJOptionPane.showMessageDialog(this,"账号密码错误,请重新登录!","警告",JOptionPane.ERROR_MESSAGE);
fieldPassword.setText(null);returnfalse;}while(rs.next()){
user.setUserIdentity(rs.getString(1));//创建对应身份信息的实体类并赋值if(user.getUserIdentity().equals("Student")){
student =newStudent(rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getString(6),
rs.getString(7),
rs.getString(8),
rs.getString(9),
rs.getString(10),
rs.getString(11));}elseif(user.getUserIdentity().equals("Teacher")){
teacher =newTeacher(rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getString(6),
rs.getString(7),
rs.getString(8),
rs.getString(9),
rs.getString(10));}elseif(user.getUserIdentity().equals("Admin")){
admin =newAdmin(rs.getString(1),
rs.getString(2),
rs.getString(3),
rs.getString(4),
rs.getString(5),
rs.getString(6),
rs.getString(7),
rs.getString(8),
rs.getString(9));}}
rs.close();
stmt.close();returntrue;}returnfalse;}//全局字体 https://blog.csdn.net/lifaxing/article/details/79365078publicstaticvoidinitGobalFont(Font font){FontUIResource fontResource =newFontUIResource(font);for(Enumeration<Object> keys =UIManager.getDefaults().keys(); keys.hasMoreElements();){Object key = keys.nextElement();Object value =UIManager.get(key);if(value instanceofFontUIResource){UIManager.put(key, fontResource);}}}}
MainWindow.java
packageGUI;importinfo.Admin;importinfo.Student;importinfo.Teacher;importpanel.PanelAdmin;importpanel.PanelStudent;importpanel.PanelTeacher;importjavax.swing.*;importjavax.swing.border.EtchedBorder;importjava.awt.*;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.util.Objects;publicclassMainWindow{publicstaticJFrame frame;publicstaticJTabbedPane tabbedPane;publicstaticJLabel label_status;privateJMenuBar menuBar;privateJMenuItem mntmNewMenuItem_exit, menuItem_setting, mntmNewMenuItem_help;privateJPanel panel_status;//登录状态//参数 学生publicMainWindow(Student student){windowLoads();newPanelStudent(student);}//参数 教师publicMainWindow(Teacher teacher){windowLoads();newPanelTeacher(teacher);}//参数 管理员publicMainWindow(Admin admin){windowLoads();newPanelAdmin();}privatevoidwindowLoads(){
frame =newJFrame();// 设置窗口标题图标
frame.setIconImage(Toolkit.getDefaultToolkit().getImage("C:\\Users\\ZHUANG\\Desktop\\LeaveSystem1\\LeaveSystem\\src\\images\\icon.png"));
frame.setTitle("学生请假管理系统");
frame.setBounds(0,0,820,626);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口
frame.getContentPane().setLayout(null);
frame.setVisible(true);
tabbedPane =newJTabbedPane(JTabbedPane.TOP);
tabbedPane.setBounds(0,30,820,522);
frame.getContentPane().add(tabbedPane);
frame.setResizable(false);//设置页面不可拖拽改变大小
frame.setLocationRelativeTo(null);// 设置登录界面居中// 系统菜单
menuBar =newJMenuBar();
menuBar.setBounds(0,0,820,21);
frame.getContentPane().add(menuBar);JMenu mnNewMenu =newJMenu("系统");
menuBar.add(mnNewMenu);
mnNewMenu.setIcon(newImageIcon(Objects.requireNonNull(UserLogin.class.getResource("/images/base.png"))));
menuItem_setting =newJMenuItem("设置");
mnNewMenu.add(menuItem_setting);
mntmNewMenuItem_exit =newJMenuItem("直接退出");
mnNewMenu.add(mntmNewMenuItem_exit);
mntmNewMenuItem_exit.addActionListener(newActionListener(){@OverridepublicvoidactionPerformed(ActionEvent e){Object[] options ={"确认","取消"};//定义按钮上的文字int n =JOptionPane.showOptionDialog(null,"是否退出本账户?","提示",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE,null, options, options[1]);if(n ==0){
frame.dispose();newUserLogin();}}});JMenu mnNewMenu_1 =newJMenu("关于");
menuBar.add(mnNewMenu_1);
mntmNewMenuItem_help =newJMenuItem("帮助");
mnNewMenu_1.add(mntmNewMenuItem_help);//状态栏
panel_status =newJPanel();
panel_status.setLocation(0,570);
panel_status.setSize(820,22);
panel_status.setBorder(newEtchedBorder(EtchedBorder.LOWERED,null,null));//边框
frame.getContentPane().add(panel_status);
label_status =newJLabel("登录成功");
label_status.setBounds(207,1,820,25);JProgressBar progressBar =newJProgressBar();
progressBar.setBounds(0,1,200,25);
panel_status.setLayout(null);
panel_status.add(label_status);
panel_status.add(progressBar);
frame.setVisible(true);}}
leaveList.java
packageFunctional.Student;importinfo.LeaveData;importinfo.Student;importjavax.swing.*;importjavax.swing.table.DefaultTableCellRenderer;importjavax.swing.table.DefaultTableModel;importjava.awt.*;importjava.awt.event.MouseAdapter;importjava.sql.Connection;importjava.sql.ResultSet;importjava.sql.Statement;importjava.util.ArrayList;importjava.util.List;importstatictoolbox.LeaveDataBase.getConnection;publicclass leaveList extendsJFrame{publicleaveList(Student student){List<LeaveData> dataList =newArrayList<LeaveData>();try{//查询数据库对应该学生学号的数据Connection conn =getConnection();Statement stmt =null;
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);ResultSet rs = stmt.executeQuery("SELECT *FROM LeaveData WHERE id='"+ student.getId()+"';");if(rs.isBeforeFirst()){while(rs.next()){LeaveData leaveData =newLeaveData();
leaveData.setNum(rs.getString(1));
leaveData.setName(rs.getString(2));
leaveData.setID(rs.getString(3));
leaveData.setSex(rs.getString(4));
leaveData.setAge(rs.getString(5));
leaveData.setFaculties(rs.getString(6));
leaveData.setProfession(rs.getString(7));
leaveData.setClassName(rs.getString(8));
leaveData.setPhone(rs.getString(9));
leaveData.setRequestData(rs.getString(10));
leaveData.setStartTime(rs.getString(11));
leaveData.setEndEime(rs.getString(12));
leaveData.setReason(rs.getString(13));
leaveData.setApprover(rs.getString(14));
leaveData.setApprovalReason(rs.getString(15));
leaveData.setState(rs.getString(16));
dataList.add(leaveData);}}else{JOptionPane.showMessageDialog(this,"无请假历史数据!","提示",JOptionPane.ERROR_MESSAGE);}
rs.close();
stmt.close();}catch(Exception ex){thrownewRuntimeException(ex);}String[] columnName =newString[]{"编号","申请日期","开始时间","结束时间","申请理由","审核人","审核意见","状态"};String[][] columnDate =newString[dataList.size()][];for(int i =0; i < dataList.size(); i++){LeaveData d = dataList.get(i);
columnDate[i]=newString[]{d.getNum(), d.getRequestData(), d.getStartTime(), d.getEndEime(), d.getReason(), d.getApprover(), d.getApprovalReason(), d.getState()};}this.setLayout(null);// 绝对布局setSize(680,522);// 设置界面大小this.setVisible(true);this.setTitle("查询");setResizable(false);// 设置界面大小不可改变setLocationRelativeTo(null);// 设置登录界面居中this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);// 设置默认关闭操作JLabel title =newJLabel("请假信息列表");
title.setFont(newFont("宋体",Font.PLAIN,22));
title.setBounds(260,10,180,50);this.add(title);DefaultTableModel dtm =newDefaultTableModel(columnDate, columnName);JTable jtable =newJTable(dtm){//可选择表格行,但不可编辑publicbooleanisCellEditable(int row,int column){returnfalse;}};
jtable.setShowVerticalLines(false);//去掉竖线DefaultTableCellRenderer r =newDefaultTableCellRenderer();//此三行 内容居中
r.setHorizontalAlignment(JLabel.CENTER);
jtable.getTableHeader().setReorderingAllowed(false);// 表头不可拖动
jtable.setDefaultRenderer(Object.class, r);JScrollPane scrollPane =newJScrollPane();//直接添加容器,表头不显示
scrollPane.setBounds(30,70,600,370);this.add(scrollPane);
scrollPane.setViewportView(jtable);//给table加上一个鼠标事件监听器对象
jtable.addMouseListener(newMouseAdapter(){publicvoidmouseReleased(java.awt.event.MouseEvent e){//是否左建双击if(e.getClickCount()==2&&SwingUtilities.isLeftMouseButton(e)){//添加双击后的int count = jtable.getSelectedRow();//获取你选中的行号String[] datarow =newString[]{"","","","","","","",""};for(int i =0; i < datarow.length; i++){String getname = jtable.getValueAt(count, i).toString();//读取获取行号的某一列的值
datarow[i]= getname;}newJtablePopUps(datarow);}}});JLabel tip =newJLabel("tip:双击表行可以查看其详细信息!");
tip.setFont(newFont("宋体",Font.PLAIN,12));
tip.setBounds(30,435,300,50);this.add(tip);}}
注:完整内容可下载查看完整报告
下载链接
https://download.csdn.net/download/weixin_66397563/87976888
本文转载自: https://blog.csdn.net/weixin_66397563/article/details/131491837
版权归原作者 汐ya~ 所有, 如有侵权,请联系我们删除。
版权归原作者 汐ya~ 所有, 如有侵权,请联系我们删除。