目录
前言 7
一、系统开发环境及相关技术 8
(一)系统设计思想及处理流程 8
(二)运行环境 8
(三)开发技术及开发工具简介 8
三、需求分析 10
(一)学生用户需求 10
(二)老师用户需求 10
(三)班主任用户需求 10
二、可行性分析 11
(一)技术可行性 11
(二)经济可行性 11
(三)法律可行性 11
(四)操作可行性 11
四、系统总体设计 12
(一)系统功能结构图 12
(二)用户信息管理 12
(三)考勤信息管理 13
(四)系统总体流程 14
五、数据库设计 15
(一)概念结构设计 15
(二)数据库分析 16
(三)数据库表 16
六、输入/输出设计 19
(一)登录界面 19
(二)学生操作界面 20
(三)老师操作界面 21
(四)班主任操作界面 22
七、系统的测试与维护 23
(一)系统的测试 23
(二)系统的维护 24
八、总结 25
致谢 26
附录 27
参考文献 29
三、需求分析
(一)学生用户需求
在部分高校中,老师已经把学生的出勤率作为期末考试分数的参考了,因此学生对自己的出勤情况也比较在意。而在过去,几乎都是使用纸质的方式记录考勤结果,这种方式不但效率比较低,而且也不利于当今倡导的环保主题。
本系统的开发,恰恰解决了这种弊端。学生可以及时的查询自己的出勤率,以便掌控自己的期末考试,也能提醒学生不要逃课,有利于教学。同时,由于本系统的出现,大大节约了纸张的使用,从某种意义上说也有利于环保。
(二)老师用户需求
老师是本系统的主要用户。鉴于平时老师考勤多是自己或是让考勤班长用本子记录,这样既浪费了时间又不利于环保,有时甚至连老师自己都嫌麻烦。本系统的开发恰恰解决了这种难题。首先,避免了纸张的浪费现象,在一定程度上节约了时间。
老师可以通过本系统管理本班学生的上课出勤情况。老师考勤时,及时的把考勤情况录入到系统中即可。
(三)班主任用户需求
班主任老师以系统管理员的身份拥有系统的最高权限,负责系统所需所有数据的动态同步更新以及维护,根据系统针对各用户的设计,基本功能是管理系统所有用户的添加、删除、修改等。
平时,由于班主任的工作比较繁杂,可能没有太多的时间去管理自己的班级。有了本系统,班主任可以随时动态的查看本班同学平时上课的出勤情况,以便及时了解本班情况,从而更好的管理本班。

二、可行性分析
(一)技术可行性
经过两年多的在校学习,我基本了解了java技术的使用,这帮助了我进一步了解本系统的难易程度。在实训期间,进一步巩固了我对java知识的了解,并且学会了如何开发一个比较小的系统。结合在校期间学的SQL数据库知识和实训期间学到的Oracle数据库知识,帮助我制作了后台数据库服务器。况且在网络如此发达的今天,相对的难点完全能够在网上找到相应的解决方式。
总上所述,开发本系统,在技术上完全是可行的。
(二)经济可行性
开发该系统只需要一台主机,加上java和Oracle等知识,并且了解windows操作系统,在开发时间内(三个月),所需的成本不多。
本系统的开发,完全由本人一人独自完成,不需要对开发人员支付工资,也不会产生各种开发经费。
综上所述,本系统的开发,在经济上完全是可行的。
(三)法律可行性
本系统的开发完全是独立完成的,没有借鉴任何非法书籍或是非法产品,因此就不存在版权问题。
由于本系统并没有打算投放市场,不会存在非法交易等违法行为。
总上所述,本系统的开发,在法律上也是可行的。
(四)操作可行性
本系统的开发是基于Windows操作环境下开发的,所有的操作都是Windows环境的基本操作,所以在操作方面完全没有任何技术含量。
本系统的开发是面向高校的考勤而开发,而在当今社会,各高校的学生或工作人员都有一定的电脑操作技术,操作本系统完全是轻而易举的事。
综上所述,本系统的开发,在操作上也是完全可行的。

四、系统总体设计

(一)系统功能结构图

基于java的学生考勤管理系统是提供给班主任、老师和学生使用的信息管理系统。其功能结构图如下:

java 根据考勤规则生成数据 java课程设计学生考勤系统_java 根据考勤规则生成数据


图4-1 系统功能结构图

package com.java.view;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import javax.swing.table.DefaultTableModel;

import com.java.bean.TeacherInfo;
import com.java.dao.STDao;
import com.java.service.TeacherLogic;

public class TeacherView extends JFrame {

	private JLabel lblNo;
	private JLabel lblName;
	private JLabel lblCourse;
	private JLabel lblVTN;
	private JLabel lblTAN;
	private JLabel lblLN;
	private JLabel lblLEN;
	private JLabel lblNull;
	private JLabel lblNull2;
	private JLabel lblNull3;
	private JTextField tfdNo;
	private JTextField tfdName;
	private JTextField tfdCourse;
	private JTextField tfdVTN;
	private JTextField tfdTAN;
	private JTextField tfdLN;
	private JTextField tfdLEN;
	private JButton btnAdd;
	private JButton btnSelect;
	private JButton btnUpdate;
	private JTable tblInfo;
	private DefaultTableModel model;
	private JPanel panel;
	private JPanel plMain;
	private JPanel pl1;
	private JPanel pl2;
	private JPanel pl3;
	private JPanel pl4;
	private JPanel pl5;
	private JPanel pl6;
	private JPanel pl7;
	private JPanel pl8;
	private JPanel pl9;
	private JPanel pl0;
	
	private TeacherLogic tlg;
	
	public TeacherView(){
		init();
	}
	
	private void init() {
		tlg = new TeacherLogic(this);
		
		lblNo = new JLabel("学号:",JLabel.RIGHT);
		lblName = new JLabel("姓名:",JLabel.RIGHT);
		lblCourse = new JLabel("课程编号:",JLabel.RIGHT);
		lblVTN = new JLabel("请假次数:",JLabel.RIGHT);
		lblTAN = new JLabel("旷课次数:",JLabel.RIGHT);
		lblLN = new JLabel("迟到次数:",JLabel.RIGHT);
		lblLEN = new JLabel("早退次数:",JLabel.RIGHT);
		lblNull = new JLabel(" ");
		lblNull2 = new JLabel(" ");
		lblNull3 = new JLabel("    ");
		
		tfdNo = new JTextField(8);
		tfdName = new JTextField(8);
		tfdCourse = new JTextField(8);
		tfdVTN = new JTextField(8);
		tfdTAN = new JTextField(8);
		tfdLN = new JTextField(8);
		tfdLEN = new JTextField(8);
		
		btnAdd = new JButton("添加");
		btnSelect = new JButton("查询");
		btnUpdate = new JButton("更新");
		
		model = new DefaultTableModel();
		model.addColumn("学号");
		model.addColumn("姓名");
		model.addColumn("课程名称");
		model.addColumn("旷课次数");
		model.addColumn("请假次数");
		model.addColumn("迟到次数");
		model.addColumn("早退次数");
		tblInfo = new JTable(model);
		
		panel = new JPanel();
		plMain  = new JPanel();
		pl1 = new JPanel();
		pl2 = new JPanel();
		pl3 = new JPanel();
		pl4 = new JPanel();
		pl5 = new JPanel();
		pl6 = new JPanel();
		pl7 = new JPanel();
		pl8 = new JPanel();
		pl9 = new JPanel();
		pl0 = new JPanel();
		
		pl1.setLayout(new GridLayout(3,1,5,15));
		pl2.setLayout(new GridLayout(3,1,5,10));
		pl3.setLayout(new GridLayout(3,1,5,15));
		pl4.setLayout(new GridLayout(3,1,5,10));
		pl5.setLayout(new GridLayout(3,1,5,15));
		pl6.setLayout(new GridLayout(3,1,5,10));
		pl7.setLayout(new FlowLayout(FlowLayout.LEFT,10,20));
		pl7.setBorder(new TitledBorder(new EtchedBorder(),"查询信息"));
		pl8.setBorder(new TitledBorder(new EtchedBorder(),"查询结果"));
		pl8.setLayout(new BorderLayout(5,5));
		pl9.setLayout(new GridLayout(3,1,5,10));
		pl0.setLayout(new BorderLayout(5,5));
		panel.setLayout(new BorderLayout(5,5));
		plMain.setLayout(new BorderLayout(5,5));
		
		pl1.add(lblNo);
		pl1.add(lblName);
		pl1.add(lblCourse);
		
		pl2.add(tfdNo);
		pl2.add(tfdName);
		pl2.add(tfdCourse);
		
		pl3.add(lblVTN);
		pl3.add(lblTAN);
		
		pl4.add(tfdVTN);
		pl4.add(tfdTAN);
		
		pl5.add(lblLN);
		pl5.add(lblLEN);
		
		pl6.add(tfdLN);
		pl6.add(tfdLEN);
		
		pl7.add(pl1);
		pl7.add(pl2);
		pl7.add(pl3);
		pl7.add(pl4);
		pl7.add(pl5);
		pl7.add(pl6);
		
		pl8.add(new JScrollPane(tblInfo),BorderLayout.CENTER);
		
		pl9.add(btnAdd);
		pl9.add(btnUpdate);
		pl9.add(btnSelect);
		
		pl0.add(pl9,BorderLayout.SOUTH);
		
		panel.add(pl7,BorderLayout.NORTH);
		panel.add(pl8,BorderLayout.CENTER);
		
		plMain.add(panel,BorderLayout.CENTER);
		plMain.add(pl0,BorderLayout.EAST);
		plMain.add(lblNull,BorderLayout.NORTH);
		plMain.add(lblNull2,BorderLayout.SOUTH);
		plMain.add(lblNull3,BorderLayout.WEST);
		
		this.setTitle("学生考勤管理系统——老师");
		this.setSize(610, 450);
		this.add(plMain);
		this.setResizable(false);
		this.setLocationRelativeTo(null);
		this.setVisible(true);
		
		Toolkit kit = Toolkit.getDefaultToolkit();
		// 取得图片
		Image img = kit.getImage("src/image/5.jpg");
		// 设置窗体的标题图标
		this.setIconImage(img);
		
		this.addWindowListener(new WindowListener(){
			@Override
			public void windowClosing(WindowEvent e) {
				int option = JOptionPane.showConfirmDialog(null, "确定退出?","删除",
						JOptionPane.YES_OPTION,JOptionPane.WARNING_MESSAGE,null);
				switch (option) {
				    case JOptionPane.YES_OPTION:
				    	System.exit(0);
				    case JOptionPane.NO_OPTION:
				    	new TeacherView();
				}
			}
			@Override
			public void windowOpened(WindowEvent e) {}
			@Override
			public void windowClosed(WindowEvent e) {}
			@Override
			public void windowIconified(WindowEvent e) {}
			@Override
			public void windowDeiconified(WindowEvent e) {}
			@Override
			public void windowActivated(WindowEvent e) {}
			@Override
			public void windowDeactivated(WindowEvent e) {}
		});
		
		btnAdd.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				check(tfdNo.getText(),tfdCourse.getText());
				clean();
			}
		});
		
		btnUpdate.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				chack(tfdNo.getText(),tfdName.getText(),tfdCourse.getText());
				clean();
			}
		});
		
		btnSelect.addActionListener(new ActionListener(){
			@Override
			public void actionPerformed(ActionEvent e) {
				tlg.getSearch();
			}
		});
		
	}
	
	public void tableChange(ArrayList<TeacherInfo> teaf){
		Vector data = new Vector();
		for(int i = 0; i < teaf.size(); i++){
			TeacherInfo tf = teaf.get(i);
			Vector dataRow = new Vector();
			dataRow.add(tf.getStuNo());
			dataRow.add(tf.getStuName());
			dataRow.add(tf.getCsName());
			dataRow.add(tf.getTAN());
			dataRow.add(tf.getVTN());
			dataRow.add(tf.getLN());
			dataRow.add(tf.getLEN());
			data.add(dataRow);
		}
		Vector c = new Vector();
		c.add("学号");
		c.add("姓名");
		c.add("课程名称");
		c.add("旷课次数");
		c.add("请假次数");
		c.add("迟到次数");
		c.add("早退次数");
		DefaultTableModel dt = new DefaultTableModel(data, c);
		tblInfo.setModel(dt);
	}

	public void clean(){
		tfdNo.setText("");
		tfdName.setText("");
		tfdCourse.setText("");
		tfdVTN.setText("");
		tfdTAN.setText("");
		tfdLN.setText("");
		tfdLEN.setText("");
	}
	
	public String[] getTacInfo(){
		String[] str = new String[7];
		str[0] = tfdNo.getText().trim();
		str[1] = tfdName.getText().trim();
		str[2] = tfdCourse.getText().trim();
		str[3] = tfdVTN.getText().trim();
		str[4] = tfdTAN.getText().trim();
		str[5] = tfdLN.getText().trim();
		str[6] = tfdLEN.getText().trim();
		
		return str;
	}
	
	// 更新判断
	public String chack(String str,String str1,String str2){
		STDao std = new STDao();
		Connection conn = std.getConnection();
		PreparedStatement pst=null;
		ResultSet rs=null;
		String stuNo = null;
		String stuName = null;
		String csNo = null;
		String sql = "select stuno,stuname,csno from tb_kaoqin where stuno = " + str + " and stuname = '" + str1 + "' and csno = " + str2;
		if("".equals(str)){
			JOptionPane.showOptionDialog(null, "学号不能为空!", "提示", JOptionPane.DEFAULT_OPTION,
					JOptionPane.INFORMATION_MESSAGE, null, null, null);
			return null;
		}
		if("".equals(str1)){
			JOptionPane.showOptionDialog(null, "姓名不能为空!", "提示", JOptionPane.DEFAULT_OPTION,
					JOptionPane.INFORMATION_MESSAGE, null, null, null);
			return null;
		}
		if("".equals(str2)){
			JOptionPane.showOptionDialog(null, "课程编号不能为空!", "提示", JOptionPane.DEFAULT_OPTION,
					JOptionPane.INFORMATION_MESSAGE, null, null, null);
			return null;
		}
		try {
			pst = conn.prepareStatement(sql);
			rs = pst.executeQuery();
			while(rs.next()){
				stuNo = rs.getString(1);
				stuName = rs.getString(2);
				csNo = rs.getString(3);
			}
			if(str.equals(stuNo) && str1.equals(stuName) && str2.equals(csNo)){
				tlg.teaUpdate();
			}  else {
				JOptionPane.showOptionDialog(null, "信息不存在,请添加!", "提示", JOptionPane.DEFAULT_OPTION,
						JOptionPane.INFORMATION_MESSAGE, null, null, null);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			std.close();
			std.closeOthers(pst, rs);
		}
		return null;
	}

	// 添加判断
	public String check(String str1,String str2){
		STDao std = new STDao();
		Connection conn = std.getConnection();
		PreparedStatement pst=null;
		ResultSet rs=null;
		String stuNo = null;
		String csNo = null;
		String sql = "select stuno, csno from tb_kaoqin where stuno = " + str1 + " and csno = " + str2;
		if("".equals(str1)){
			JOptionPane.showOptionDialog(null, "学号不能为空!", "提示", JOptionPane.DEFAULT_OPTION,
					JOptionPane.INFORMATION_MESSAGE, null, null, null);
			return null;
		}
		if("".equals(str2)){
			JOptionPane.showOptionDialog(null, "课程编号不能为空!", "提示", JOptionPane.DEFAULT_OPTION,
					JOptionPane.INFORMATION_MESSAGE, null, null, null);
			return null;
		}
		try {
			pst = conn.prepareStatement(sql);
			rs = pst.executeQuery();
			while(rs.next()){
				stuNo = rs.getString(1);
				csNo = rs.getString(2);
			}
			if(!str1.equals(stuNo) || !str2.equals(csNo)){
				tlg.teaAdd();
			} else {
				JOptionPane.showOptionDialog(null, "信息已存在,请更新!", "提示", JOptionPane.DEFAULT_OPTION,
						JOptionPane.INFORMATION_MESSAGE, null, null, null);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
	
}

java 根据考勤规则生成数据 java课程设计学生考勤系统_学生考勤管理系统_02


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_03


java 根据考勤规则生成数据 java课程设计学生考勤系统_Swing_04


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_05


java 根据考勤规则生成数据 java课程设计学生考勤系统_java 根据考勤规则生成数据_06


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_07


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_08


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_09


java 根据考勤规则生成数据 java课程设计学生考勤系统_学生考勤管理系统_10


java 根据考勤规则生成数据 java课程设计学生考勤系统_Swing_11


java 根据考勤规则生成数据 java课程设计学生考勤系统_Java_12


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_13


java 根据考勤规则生成数据 java课程设计学生考勤系统_1024程序员节_14


java 根据考勤规则生成数据 java课程设计学生考勤系统_java 根据考勤规则生成数据_15