Java课程设计-班务管理系统

 

由于高等学校的快速发展,高校的规模也越来越大,学生数量和课程量都迅速地增长,学生信息的冗长与繁琐,所以它在管理上的手工操作不仅仅会耗费学生与工作人员大量的时间和精力,效率以及准确性也很低。如何使同学们方便、快捷、准确地选课,以及老师们对学生的相关信息的管理,已经成为一个重要的问题。

随着计算机科学的发展,数据库技术在Internet中的应用越来越广泛,为广大网络用户提供了更加周到和人性化的服务。个性化已逐渐成为当今Web应用的潮流。利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高、存储量大、保密性好。要科学地实现信息化管理,开发一个适合学校的,能够进行信息存储、查询、修改等功能的信息管理系统是十分重要的。

本课题就是针对便于学生信息管理的问题而设计的一个管理系统,主要运用的技术有两个:JAVA项目开发和Mysql对数据库的操作,采用SpringMVC技术实现一个基于B/S结构的班务管理系统,建立了一个满足实际情况的班级信息管理系统。本系统主要实现管理所有学生的基本信息,对学生信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过学生学号查询出学生的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的学生表中。研究了一种基于数据关联规则的网络学生信息管理系统,具有用户使用更简单、界面更直观等优点,一定程度上提高班务管理的效率。

关键词  JAVA  Mysql 学生信息管理--班务管理

目录

第一章 概述

1.1 引言

1.2 系统目标

第二章 班务管理系统需求分析

2.1 系统功能需求

2.1.1 登录管理

2.1.2 系统设置

2.1.3 学籍管理

2.1.4 管理员用户功能

2.1.5 普通学生用户功能

2.1.6 学生管理

2.1.7 课程管理

2.1.8 成绩管理

2.1.9 信息查询

2.1.10 评估管理

2.1.11 退出管理

2.2 系统的性能要求

2.3系统配置

2.3.1 软件配置

2.3.2 硬件配置

2.3.3 网络配置

2.4 系统的未来可能提出的要求

2.5 可行性分析

2.5.1 技术可行性

第三章 班级管理系统总体设计

3.1 功能设计

3.2 系统功能设计

第四章 详细设计

4.1 开发工具的选用及其介绍

4.2 系统实现

    4.2.1 学生管理系统主界面模块

    4.2.2 学生信息管理模块

第五章 系统实现与测试

5.1 系统代码设计........................................................... ..

5.2 系统功能试.......................................................................................................................

第六章 总结

第一章 概述

1.1 引言

班务管理系统是针对班级事务管理而开发的一套管理软件。班务管理系统将分为4个板块:学生管理、课程管理、成绩管理、信息查询组件为一体,涵盖了班级事务整个运作流程。班务管理的计算机化是整个学校德育管理中的重要一部分,介于它的重要性学生成绩管理系统的开发与应用就逐渐提入议程,并占着越来越重要的份量。从技术上来讲,我们的养老院基于SSM(springMVC、spring、mabits)开发的一个内部管理系统。增加了spring很多方面的知识,很多之前从未接触过得技术领域。

运用学生成绩管理维护系统可以减轻学院教学人员的工作量,缩小开支,提高工作效率与准确率,能够节省时间,学生也能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。而学生成绩管理系统的应用也为今天的民办教育在未来市场的竞争力有所提高。

在现代高科技的飞跃发展,人们工作习惯的改变,特别是电脑的大量普及,人们生活节奏越来越快,怎样提高工作效率是人们首先考虑的问题。学生成绩管理是一个非常繁琐与复杂的一项工作,一个原因就是工作量大,不好管。对于一个学校而言,管理好学生的成绩,是非常重要的。因此开发出一套学生成绩管理系统是非常必要的

通过该系统,班级内部可将学生管理、课程管理、成绩管理连成一个有机整体,进行快速、高效的信息收集和数据处理,提高学校班级管理效能。

1.2 系统目标

本次设计的养老院管理系统功能齐全,包括课程编号、课程名称、授课 教师、上课地点、课程类别、学生身份,将学生管理、课程管理、成绩管理 为一体,实现了班务管理、系统办公的立体化功能。此系统学生管理包括: 添加、修改、删除、学生选课,课程管理包括:增加、修改、删除,成绩管 理包括:增加、修改,信息查询包括:学生查询、课程查询、成绩查询。

详细设计是在对软件进行需求分析、设计规格说明后的编码设计阶段, 是保证软件系统的关键步骤。如果要给软件测试下定义,可以这样讲,系统 代码设计是最直接实现使用者目的设计阶段。

第二章 班务管理系统需求分析

2.1 系统功能需求

2.1.1 登录管理

2.1.2 系统设置

2.1.3 学籍管理

2.1.4 管理员用户功能

2.1.5 普通学生用户功能

2.1.6 学生管理

2.1.7 课程管理

2.1.8 成绩管理

2.1.9 信息查询

2.1.10 评估管理

2.1.11 退出管理

2.2 系统的性能要求

因服务器资源有限,故以控制用户数量的手段来保证服务器的稳定。Mysql数据库引擎提供完整的 XML 支持。它还具有构成最大的 Web 站点的数据存储组件所需的可伸缩性、可用性和安全功能[1]。数据库引擎充分保护数据完整性,同时将管理上千并发修改数据库的用户的开销减到最小。因此当网络数据量增大时,系统也可以稳定的运行。

数据库安全方面主要是利用Mysql,Resin自带的各种管理工具,实现对关键数据的保护。

2.3统配置

2.3.1 软件配置

服务器端:安装Java虚拟机,Web服务器软件Resin,数据库软件Mysql

客户端:安装Java虚拟机,Chrome浏览器

开发环境:INTelliJ IDEA

开发语言:Java

Web服务平台:resin-4.0.36

数据库: Mysql5.0

2.3.2 硬件配置

服务器端:Centos6.5,有网络接口卡(NIC),内存应在4GB以上,硬盘在160GB以上。

电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB

操作系统:Microsoft Windows10专业版

客户端:Core i5以上配置的PC机,有网络接口卡(NIC),内存应在4GB以上,硬盘在500GB以上。 

电脑配置:CPU: Core i5 2.30GHz 内存:DDR3 8GB 硬盘:500GB

操作系统:Microsoft Windows 7 专业版

2.3.3 络配置

网络:服务器和客户端应有网络连通。配置TCP/IP协议。

2.4 系统的未来可能提出的要求

严格的兼容性要求,致力于促进Java编程模式,此外,EC将在对Java Community干预小的情况下,尽快实施这个计划以确保这样的过渡尽快的实施。所以我们希望Oracle能继续JCP,但是它可能变成一个完全不同的JCP.如果Oracle成功的实施了所期望的转变,结果会是非常有趣的而且具有广泛的影响。特别有趣的是看到Oracle如何实施这些变革。那将是个迹象表明Oracle将如何同Java工作。

2.可行性分析

2.5.1 技术可行性

系统的性质为管理软件,因而数据库的设计与操纵是系统设计的核心。这里从两方面分析技术上的可行性。首先,对于java编程部分,java课已经开过,本人基本上掌握了对java编程上技巧。加上暑假运用了大部分时间来对图形编程的学习。因此在课题设计中,对java图形编程方面的问题都能迎韧而解。其次,对于数据库的有关知识,本人运用了大量的时间对相关书籍的阅读以及上机实验,基本上掌握了运用oracle数据库技术,具备一定的系统分析与设计能力,熟悉数据库的设计与操纵;因而该系统的实现在技术上是可行的。

2.5.2 人员可行性

本人对该课程设计有足够的技术上的准备,并且时间上也足够充裕。所以在进行该课程设计中,不需要人员分工,整个设计过程都由本人完成,并且已经较好的完成了该项目的开发工作。所有,在人员可行性方面是可行的。

综上所述,JCP肯能会继续存在,但是它可能在指定技术方向上承担不同的作用,此系统开发目标已明确,在技术和经济方面都是都可行。所依此系统的开发是完全可行的。

第三章 班级管理系统总体设计

3.1 功能设计

系统所实现的功能强弱是衡量一个软件好坏的最直接也是最根本的标准。经过对系统的可行性分析、需求分析、数据分析以及数据库设计后,结合调研的情况,本系统分为学生管理、课程管理、成绩管理、信息查询,确定了本系统的功能模块。

图3.1 学生管理系统功能模块

3.2 系统功能设计

本课题根据学生信息管理综合分析,便出于方便管理考虑,将学生信息管理系统的功能总结起来,共需要实现以下几个方面功能:

管理所有学生的基本信息,对学生信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过学生学号查询出学生的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的学生表中。

本课题的关系数据模型的数据结构可分为两个表来表示:学生信息表(Student)、课程信息表(Course)。学生信息表用于记录学生的基本信息,如表1,表2。这两个表对应的E-R图是图3和图4:

表1 学生信息表(Student)

名称

字段名称

数据类型

主键

非空

学号

Snum

Number(10)

Yes

Yes

学生姓名

Sname

Varchar2

No

Yes

性别

Ssex

Char(2)

No

No

名族

Sminzu

Char(2)

No

No

籍贯

Shome

Varchar2

No

No

入学年份

Syear

Char(4)

No

No

出生日期

Sbirth

Char(8)

No

No

表2 学生信息表(Course)

名称

字段名称

数据类型

主键

非空

课程编号

Cunm

Char(4)

Yes

Yes

课程名称

Cname

Varchar2

No

Yes

授课教师

Cteacher

Varchar2

No

No

上课地点

Cplace

Varchar2

No

No

课程类别

Ctype

Char(1)

No

No

   第四章 详细设计

4.1 开发工具的选用及其介绍

4.1.1 SSM 框架

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。Spring是一个优秀的开源框架,从2003年开始兴起,他的存在是为了解决企业开发中的一些复杂逻辑问题,Spring将一些逻辑进行封装,提出控制反转、和面向且面两种开发思想。SpringMVC是Spring框架衍生出来的技术,SpringMVC将控制器、视图解析器和模型对象分离,使得WEB项目的开发更具灵活性。作为数据处理层,MyBatis作为JDBC的强有力替代产品,相比较与hibernate,Mybatis更加轻小,更加灵活。

4.2 系统实现

该系统由4个模块构成,包括学生管理系统主界面模块、学生信息管理模块、信息查询模块和数据操作模块。下面分别加以叙述:


4.2.1 学生管理系统主界面模块


学生管理系统主界面模块包括StuMS.java和StuMain.java两个文件。StuMS是学生管理系统的主运行类,其中有运行整个程序的main方法,该文件生成了StuMain类的一个实例,从而生成了学生管理系统的界面,如图4.1所示。StuMain类继承自JFrame类,实现了ActionListener接口,他有一个不带参数的构造方法StuMain(),用来生成StuMain的实例。StuMain类将所有功能集中到菜单栏中,并通过调用其他模来实现学生管理系统的各个功能。


4.2.2 学生信息管理模块


学生信息管理模块主要由StuInfo.java 、AddStuInfo.java、EdiStulnfo.java、DelStuInfo.java、SelectCourse.java和StuInfoSearchSnum.java共计6个文件组成。

4.2.3 信息查询模块
信息查询模块主要包括学生查询、信息查询2个部分。信息查询的运行主截面如图所示。查询数据,该部分是通过用户输入的欲查询的学生学号来查询该学生的详细.信息。用户输入学号后如果数据库中不存在该学号的学生,系统将会提示该学生不存在信息。如果存在该学生系统将会输出该学生的详细信息,包括学生姓名、学号、性别,学生详细信息

第五章 系统实现与测试

5.1 系统代码设计
详细设计是在对软件进行需求分析、设计规格说明后的编码设计阶段,是保证软件系统的关键步骤。如果要给软件测试下定义,可以这样讲,系统代码设计是最直接实现使用者目的设计阶段。
根据对本系统的功能的详细介绍及对模块的划分,将详细代码设计如下:

Connect.java


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JOptionPane;
import java.awt.Cursor;
public class Connect {
    static String sID, sname, Dept, Java, Python, DataStructure;
    static Connection Co;  
    static PreparedStatement nValue;  
    static ResultSet ResultInfor; 
    static Statement ST;
    //数据库连接函数
    public static void ConnectSQL() {
        String url = "jdbc:sqlserver://localhost:1433;DatabaseName=master;";//master是自己储存数据的数据库名
        try {
            // 连接数据库
            Co = DriverManager.getConnection(url, "sa", "biubiubiu");//sa是SQL账号,后面是密码
            // 建立Statement对象
            ST = Co.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
            JOptionPane.showMessageDialog(null,"数据库连接错误!!!
请联系管理员修复。","错误",JOptionPane.ERROR_MESSAGE); } } public static void GetStudeInfor(String Str) { try { // 给?赋值,防止SQL注入, String sql = "select * from Infor where Stud_ID = ?"; nValue = Co.prepareStatement(sql); nValue.setString(1, Str); ResultInfor = nValue.executeQuery(); if(ResultInfor.next()) { //获取学生信息 sID = ResultInfor.getString("Stud_ID"); sname = ResultInfor.getString("Stud_Name"); Dept = ResultInfor.getString("Stud_Dept"); Java = ResultInfor.getString("JavaGrade"); Python = ResultInfor.getString("PythonGrade"); DataStructure = ResultInfor.getString("DataStructureGrade"); JOptionPane.showMessageDialog(null, "查询成功!"); }else { JOptionPane.showMessageDialog(null, "没有此学生!"); } } catch (Exception e1) { // TODO Auto-generated catch block e1.printStackTrace(); } } }

Function.java

 
import java.awt.*;

import javax.swing.table.DefaultTableModel;
import java.awt.event.*;
import java.sql.*;

import javax.swing.*;


public class Function extends JFrame implements ActionListener{
    String StuID, Stud_Name;
    String num;
    JTextField ID;
    JButton Select;
    JPanel Va, Vb;
    JTable ival;
    JScrollPane qval;
    DefaultTableModel rval;
    JLabel label;
    static Connection ct;  
    PreparedStatement ps;  
    ResultSet rs;
    
    //Connect connect = new Connect();
    //学生登录界面
    public void StudentShow() {
        Icon v1 = new ImageIcon("p3.png");
        Va=new JPanel();
        label=new JLabel();
        label.setIcon(v1);
        label.setText("学号");
        ID = new JTextField(15);
        
        Select=new JButton("查询");
        Select.addActionListener(this);
        //界面表格名添加
        String[] colnames = { "学号","姓名", "学院", "Java", "Python", "数据结构"};  
        rval = new DefaultTableModel(colnames, 3);  
        ival = new JTable(rval);  
        qval = new JScrollPane(ival);
        
        Va = new JPanel();
        Vb = new JPanel();
        
        Va.add(label);
        Va.add(ID);
        Va.add(Select);
        Vb.add(qval);
        //查询位置调整
        this.add(Va,BorderLayout.SOUTH);
        this.add(Vb);
        
        //界面属性设置
        this.setLocationRelativeTo(null); //居中
        this.setVisible(true);
        this.setSize(500,600);
        this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        this.setTitle("学生管理系统");
        
    }

    //学生登录判断
     public void Student(String StudentAccount, String  StudentPassWord,JTextField te1, JPasswordField te2, JFrame frame, Function hua)  
        {
         if(StudentAccount.equals(te1.getText())&&StudentPassWord.equals(te2.getText()))  
            {  
                 JOptionPane.showMessageDialog(this, "登录成功!");
                frame.setVisible(false);//窗口不可见
                hua.StudentShow();//调用一个画板对象中的函数 弹出一个界面
            }else if(te1.getText().isEmpty()&&te2.getText().isEmpty())  
            {  
                JOptionPane.showMessageDialog(this, "请输入账号或密码");
            }else if(te1.getText().isEmpty())  
            {  
                JOptionPane.showMessageDialog(this,"请输入用户名!");  
            }else if(te2.getText().isEmpty())  
            {  
                JOptionPane.showMessageDialog(this,"请输入密码!");
            }else  
            {  
                JOptionPane.showMessageDialog(this,"账户或密码错误!!!
请重新输入","错误",JOptionPane.ERROR_MESSAGE); //清空输入框 Clear(te1, te2); } } //清空文本框和密码框 public void Clear(JTextField te1, JPasswordField te2) { te1.setText(""); te2.setText(""); } //清空密码 public void aClear(JPasswordField te2) { te2.setText(""); } public void bClear(JTextField te3) { te3.setText(""); } public class ButtonListener implements java.awt.event.ActionListener{ //实现ActionListener 接口 implement JTextField te1=new JTextField(); //传参 JPasswordField te2=new JPasswordField(); Function hua=new Function(); //一个画板对象 ButtonListener(JTextField te1,JPasswordField te2) {//重载 窗体上的账号框,密码框传到监听上来 this.te1=te1; this.te2=te2; } public ButtonListener(JTextField ID) { // TODO Auto-generated constructor stub } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub } } public void actionPerformed(ActionEvent ch) { if(ch.getActionCommand()=="查询") { Connect.ConnectSQL();//连接数据库 Connect.GetStudeInfor(ID.getText());//获取ID ID.setText(""); ival.setValueAt(Connect.sID, 0, 0); ival.setValueAt(Connect.sname, 0, 1); ival.setValueAt(Connect.Dept, 0 , 2); ival.setValueAt(Connect.Java, 0, 3); ival.setValueAt(Connect.Python, 0, 4); ival.setValueAt(Connect.DataStructure, 0, 5); } } }

Login.java



import java.awt.Color;
import java.awt.Cursor;
import java.awt.Font;
import java.awt.Image;
import java.awt.Point;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;


public class Login {
    String StudentAccount="123456";  
    String StudentPassWord="123456";
    JLabel L, L1, L2, L3, L4, BK;
    JTextField te1, te3;
    JPasswordField te2;
    JRadioButton value1, value2;
    JButton B1, B2;
    ButtonGroup bg;
    JPanel jp1,jp2,jp3,jp4;
    //设置图标
    Icon v1 = new ImageIcon("p3.png");
    Icon v2 = new ImageIcon("p4.png");
    Icon v3 = new ImageIcon("p5.png");
    Icon v4 = new ImageIcon("p6.png");
    private VerCode VerCode = new VerCode();//引用验证码函数
    
    public static void main(String[] args) {
        Login frame=new Login();
        frame.show();
    }
        JFrame frame=new JFrame();//frame界面
    public void show() {    
        setBackgroudImage();
        
         Toolkit tk = Toolkit.getDefaultToolkit();//默认加载方式
         Image image = new ImageIcon(getClass().getResource("p6.png")).getImage();//设置光标图片
         Cursor cursor = tk.createCustomCursor(image, new Point(10, 10), "biubiubiu");//光标image属性,指定光标中心,光标文字描述
         frame.setCursor(cursor);
        
        L1=new JLabel("账号:");
        L1.setIcon(v1);
        te1=new JTextField(80);
        //设置密码窗口,使用'*'隐藏密码
        L2=new JLabel("密码:");
        L2.setIcon(v2);
        te2=new JPasswordField(80);//
        te2.setEchoChar('*');
        L4 = new JLabel("验证码:");
        L4.setIcon(v3);
        te3=new JTextField(80);
        
        //设置登录身份选择按钮
        jp2 = new JPanel();
        L3 = new JLabel("身份:");
        L3.setIcon(v4);
        value2=new JRadioButton("学生");
        SetBt(value2);
        
        //设置位置和大小
        L1.setBounds(60, 90, 60, 40);
        L2.setBounds(60, 140, 60, 40);
        L3.setBounds(60, 240, 60, 40);
        L4.setBounds(60, 190, 60, 40);
        
        jp2.setBounds(80, 240, 60, 40);
        te1.setBounds(130, 90, 150, 30);
        te2.setBounds(130, 140, 150, 30);
        te3.setBounds(130, 190, 150, 30);
        VerCode.setBounds(290, 190, 100, 40);
        value2.setBounds(120, 240, 60, 40);
        
        //设置'登录'及'重置'按钮
        B1=new JButton("登录");
        B1.setBounds(120, 280, 80, 40);
        SetBt(B1);
        ButtonListener li1=new ButtonListener(te1,te2);             
        
        B2=new JButton("注册");
        B2.setBounds(250, 280, 80, 40);
        SetBt(B2);
        ButtonListener li2=new ButtonListener(te1,te2);
        
        //设置监听  
        B1.addActionListener(li1);  
        B2.addActionListener(li2);  

        //组键添加到窗口
        frame.setLayout(null);
        //frame.add(L);
        
        frame.add(L1);
        frame.add(te1);
        
        frame.add(L2);
        frame.add(te2);
        
        frame.add(L3);
        frame.add(value2);
        
        frame.add(L4);
        frame.add(te3);
        frame.add(VerCode);
        
        frame.add(B1);
        frame.add(B2);
        frame.setVisible(true);//窗体设置为可见
        
        frame.setTitle("学生管理系统");
        frame.setSize(700,403);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        frame.setResizable(false);

    }

    private void SetBt(JButton b12) {
        b12.setBackground(new Color(102, 0, 204));//设置色值
        b12.setFont(new Font("宋体", Font.BOLD, 24));//设置字体,样式。字号
        b12.setOpaque(false);//设置控件透明
        b12.setBorder(BorderFactory.createEmptyBorder());
        
    }
    private void SetBt(JRadioButton b12) {
        b12.setBackground(new Color(102, 0, 204));
        b12.setFont(new Font("Dialog", Font.BOLD, 15));  
        b12.setOpaque(false);//设置控件透明
        b12.setBorder(BorderFactory.createEmptyBorder());
        
    }
    
    public boolean isValidCodeRight() {//判断验证码是否有效
        if(te3 == null) {
            return false;
        }else if(VerCode == null) {
            return true;
        }else if(VerCode.getCode() .equals(te3.getText())) {
            return true;
        }else 
            return false;
    }

    private void setBackgroudImage() {
        // TODO Auto-generated method stub
         ((JPanel) frame.getContentPane()).setOpaque(false);  
            ImageIcon img = new ImageIcon("3.gif"); // 添加图片  
            BK = new JLabel(img);  
            frame.getLayeredPane().add(BK, new Integer(Integer.MIN_VALUE));  
            BK.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());  
    }

    //创建类实现接口
    public  class ButtonListener implements java.awt.event.ActionListener{    //实现ActionListener 接口 implement
        JTextField te1=new JTextField();               //传参
        JPasswordField te2=new JPasswordField();
        Function hua=new Function();                       //一个画板对象
        ButtonListener(JTextField te1,JPasswordField te2) {//重载 窗体上的账号框,密码框传到监听上来
            this.te1=te1;    
            this.te2=te2;
        }
        public ButtonListener(JTextField ID) {
            // TODO Auto-generated constructor stub
        }
        @Override
        public void actionPerformed(ActionEvent ch) {
            // TODO Auto-generated method stub
             if(ch.getActionCommand()=="登录")
                { 
                 if(te3.getText().isEmpty()) {
                        JOptionPane.showMessageDialog(null, "请输入验证码!");
                    }else {
                        if(!isValidCodeRight()) {
                            JOptionPane.showMessageDialog(null, "验证码错误,请重新输入!","错误",JOptionPane.ERROR_MESSAGE);
                            hua.bClear(te3);
                        }
                        else if(value2.isSelected()) 
                        {  
                        hua.Student(StudentAccount, StudentPassWord, te1, te2, frame, hua);//学生
                        }
                          
                        else if(ch.getActionCommand()=="重置")  
                        {  
                            hua.Clear(te1, te2);  
                        }
                    }
                      
                }
            
        }
        
    }
}

VerCode.java



import java.awt.Color;  
import java.awt.Dimension;  
import java.awt.Font;  
import java.awt.FontMetrics;  
import java.awt.Graphics;  
import java.awt.Graphics2D;  
import java.awt.event.MouseEvent;  
import java.awt.event.MouseListener;  
 
import java.util.Random;  
  
import javax.swing.JComponent;  
  
public class VerCode extends JComponent implements MouseListener {  
  
    private String typeface;  
  
    private int V1, V2 = 30;  
  
    private int Len = 4;  
  
    private Random random = new Random();  
  
    public VerCode() {  
        V1 = this.Len * 16 + (this.Len - 1) * 10;  
        setPreferredSize(new Dimension(V1, V2));  
        setSize(V1, V2);  
        this.addMouseListener(this);  
        setToolTipText("点击可以更换验证码");  
    }  
  
    public int getCodeLength() {  
        return Len;  
    }  
  

    //设置验证码长度
    public void setCodeLength(int Len) {  
        if(Len < 4) {  
            this.Len = 4;  
        } else {  
            this.Len = Len;  
        }  
          
    }  
  
    public String getCode() {  
        return typeface;  
    }  
  
    //产生随机颜色
    public Color getRandColor(int min, int max) {  
  
        if (min > 255)  
            min = 255;  
        if (max > 255)  
            max = 255;  
        int red = random.nextInt(max - min) + min;  
        int green = random.nextInt(max - min) + min;  
        int blue = random.nextInt(max - min) + min;  
        return new Color(red, green, blue);  
    }  
    //设置验证码字母
    protected String generateCode() {  
        char[] codes = new char[this.Len];  
        for (int i = 0, len = codes.length; i < len; i++) {  
            if (random.nextBoolean()) {  
                codes[i] = (char) (random.nextInt(26) + 65);  
            } else {  
                codes[i] = (char) (random.nextInt(26) + 97);  
            }  
        }  
        this.typeface = new String(codes);  
        return this.typeface;  
    }  
  
    @Override  
    protected void paintComponent(Graphics g) {  
        super.paintComponent(g);  
        if(this.typeface == null || this.typeface.length() != this.Len) {  
            this.typeface = generateCode();  
        }  
        V1 = this.Len * 16 + (this.Len - 1) * 10;  
        super.setSize(V1, V2);  
        super.setPreferredSize(new Dimension(V1, V2));  
        Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25);  
        g.setFont(mFont);  
        //绘制验证码的背景的矩形轮廓  
        Graphics2D g2d = (Graphics2D) g;  
        g2d.setColor(getRandColor(200, 250));  
        g2d.fillRect(0, 0, V1, V2);  
        g2d.setColor(getRandColor(180, 200));  
        g2d.drawRect(0, 0, V1 - 1, V2 - 1);  
        //绘制验证码背景的线  
        int i = 0, len = 150;  
        for (; i < len; i++) {  
            int x = random.nextInt(V1 - 1);  
            int y = random.nextInt(V2 - 1);  
            int x1 = random.nextInt(V1 - 10) + 10;  
            int y1 = random.nextInt(V2 - 4) + 4;  
            g2d.setColor(getRandColor(180, 200));  
            g2d.drawLine(x, y, x1, y1);  
        }  
          
      
  
        //绘制出验证码的具体字母  
        i = 0; len = this.Len;  
        FontMetrics fm = g2d.getFontMetrics();  
        int base = (V2 - fm.getHeight())/2 + fm.getAscent();  
        for(;i

5.2 系统功能测试
功能测试主要是测试程序模块是否实现了设计中所要求的功能。功能测试中需要注意的有:
(1)查询功能中,有按单一查询条件进行查询的,也有按多个查询条件组合查询的。这里要注意的多个查询条件之间的关系。还有一些常识性的问题,比如按月查询,闰月中二月的天数。
(2)录入功能中,需要注意的是前台设置的数值长度是否大于后台数值长度,以及前台和后台的数据结构是否相符,很多时候录入功能无法实现是由于这些原因。还有就是必须录入的字段的设置时候有误。
(3)测试删除功能中需要注意的是单击”删除”按钮后,一般会出现提示信息,询问是否确定删除。通常情况下,我们单击”确认"按钮查看信息是否被删除掉了,而忽略了单击"取消”按钮后程序的反应:这时有可能的是没有删除,还有一-种可能是即便单击了”取消”按钮,也一样删除了数据。另外,在删除多条记录的时候,要注意连续选中的几条记录是否真正都被删除掉了,即如果再按照这种查询方式查询,时候还能查询出来。有的时候需要在数据库中设立一一个标志位,而不是真正的物理删除。所以在下一次查询中,可能还会被查询出来,这主要是因为在查询条件中没有将标志考虑在内。
(4)关于修改功能的测试主要是看修改确认后是否数据真正已被修改了。这是最基本的功能,需要注意的是看是否能把不应该修改的数据也修改成功了。

你可能感兴趣的:(java,课程设计,数据库)