目录
前言 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的学生考勤管理系统是提供给班主任、老师和学生使用的信息管理系统。其功能结构图如下:

图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(){@Overridepublic 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();}}@Overridepublic void windowOpened(WindowEvent e) {}@Overridepublic void windowClosed(WindowEvent e) {}@Overridepublic void windowIconified(WindowEvent e) {}@Overridepublic void windowDeiconified(WindowEvent e) {}@Overridepublic void windowActivated(WindowEvent e) {}@Overridepublic void windowDeactivated(WindowEvent e) {}});btnAdd.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {check(tfdNo.getText(),tfdCourse.getText());clean();}});btnUpdate.addActionListener(new ActionListener(){@Overridepublic void actionPerformed(ActionEvent e) {chack(tfdNo.getText(),tfdName.getText(),tfdCourse.getText());clean();}});btnSelect.addActionListener(new ActionListener(){@Overridepublic 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;}}














基于JavaSwing的学生考勤管理系统设计与实现相关推荐

  1. java管理系统课设,基于Java的学生考勤管理系统设计毕业设计

    基于Java的学生考勤管理系统设计毕业设计 本科生毕业论文(设计)本科生毕业论文(设计) 基于基于 JavaJava 的学生考勤管理的学生考勤管理系统设计系统设计 Design of Student ...

  2. java实训答辩ppt_基于JavaSwing的工作考勤管理系统设计与实现毕业论文+开题报告+实习报告+实习日历+答辩PPT+项目源码...

    工作考勤管理系统 摘    要 考勤管理员的考勤的工作不仅工做量大,而且时效性强.在过去,企业多采用签到和报表式进行管理,效率和透明度较差.计算机技术特别是数据库技术的发展为企业建立管理信息系统,对改 ...

  3. 学生考勤管理系统设计_c++课程设计

    以下内容可且仅可供参考,如有错误欢迎指正. 部分内容借鉴自百度 侵删致歉 目录 前言 一.需求分析 二.详细设计 三.用户使用说明 四.总结与体会 五.参考文献 六.附录(源代码) 定义类 函数 1. ...

  4. java学生考勤代码免费,基于jsp的学生考勤管理-JavaEE实现学生考勤管理 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的学生考勤管理, 该项目可用各类java课程设计大作业中, 学生考勤管理的系统架构分为前后台两部分, 最终实现在线上 ...

  5. 高校学生考勤管理系统设计与简单实现

    高校学生考勤管理系统设计与简单实现 我进行这次设计的初衷是想把这个系统放到易班上,所以正常的情况下是应该是两个端口访问的,但是这里我就只用一个index链过去了吗,方便测试. index.jsp &l ...

  6. Java毕业设计_高校学生考勤管理系统设计与实现

    高校学生考勤管理系统设计和实现 高校学生考勤管理系统设计和实现mysql数据库创建语句 高校学生考勤管理系统设计和实现oracle数据库创建语句 高校学生考勤管理系统设计和实现sqlserver数据库 ...

  7. 基于JavaSwing+mysql的图书管理系统设计和实现

    前言: 项目是使用Java swing开发,可实现基础数据维护.图书类型管理和维护.图书信息管理和维护.注销退出.关于作者简介等功能.界面设计比较简介.适合作为Java课设设计以及学习技术使用. 引言 ...

  8. 基于jsp(java)高校学生考勤管理系统设计与实现

    获取项目源文件,学习交流联系Q:1415736481,可指导毕设,课设 本系统主要针对目前高校学生在线请假以及学生上课出勤管理而设计的信息系统.本系统总体上由三大功能模块:请假系统模块.考勤系统模块. ...

  9. 基于Android和PHP学生考勤管理系统设计与实现

    目录 1 前言 1 1.1选题背景 1 1.2可行性分析 1 2 需求分析 3 2.1需求分析目标及任务 3 2.2需求分析组织形式 3 2.3需求分析信息整理 3 2.4研发叙述说明 4 2.5研发 ...

最新文章

  1. 大班体育游戏电子计算机教案,幼儿园大班体育游戏教案《夹球走走走》
  2. CommandBehavior.CloseConnection有何作用
  3. 用VS 2008开发WCF(一)——最快速的WCF入门
  4. Linux代理服务器与防火墙安装与应用
  5. 崩溃!Win10 强制更新导致电脑无限重启
  6. Android 控件之RatingBar评分条
  7. python爬虫和八爪鱼哪个快_【后端开发】python爬虫和八爪鱼哪个快
  8. 1060. 爱丁顿数(25)-PAT乙级真题
  9. ai/ml_您应该在本周(7月11日)阅读有趣的AI / ML文章
  10. WAP调用微信支付https://pay.weixin.qq.com/wiki/doc/api/wap.php?chapter=15_1
  11. Newtonsoft.Json介绍
  12. ERP源码 跨境电商ERP源码 Java电商ERP源码
  13. 结对项目之需求分析与原型设计(导师选择)
  14. 如何使用传统图像处理方法进行大米的计数和长轴方向标记
  15. C++综合项目-boost搜索引擎
  16. fstream ,ifstream,ofstream的用法详解
  17. arm二进制文件转换成c语言,转换非常简单的ARM指令将二进制/十六进制(Converting very simple ARM i...
  18. 基于Springboot的大学生社团管理系统
  19. 【DASH】MPD例子
  20. (已解决)video标签在ios端默认全屏播放(h5开发)

热门文章

  1. 第二十五章 摄像保存示例
  2. linux下sigaction函数,Linux sigaction函数 sa_flags的值
  3. 微软即将推出的Lumia 950/950 XL配置
  4. 《Eclipse的常用简单使用方法》
  5. 电视应用接入微信登录的那些坑
  6. 【无标题】尤破金11.26黄金原油晚间多空行情策略分析及美原油实时操作建议指导
  7. 如何用手机拍好一个女生
  8. 哈夫曼树的带权路径长度总结wpl
  9. 移动端双指缩放事件(原生),e.originalEvent.touches
  10. 微信开发者工具更新版本后,模拟器显示与真机不一致