1 绪论

1.1 项目概述

该系统使用Java语言,意义可概括为以下几点:

学生信息管理系统,首先由管理员增加、删除、修改、查找、导入教师信息,再有教师界面登录不同的教师类别,辅导员老师负责增加、删除、查找、学生的相关信息、教务老师负责增加、删除、修改、查找、有哪些课程的相关信息、授课教师负责增加、删除、修改、查找、学生本门课的分数,学生通过注册将信息加到数据库中,再进行登录,学生可以通过本系统来查成绩、查询及修改个人信息,并查询所在班级有哪些课程安排。

1.2 项目意义

(1)保证信息的准确性和时效性,随时通过计算机对系统进行管理,使得学生信息处于最新状态,保证统计数据和分析的准确。

(2)减轻劳动强度、提高工作效率、增加学生管理的透明度。高校学生管理信息系统可以发挥计算机的强大功能,让管理人员从大量繁琐的手工劳动中解放出来,将单调枯燥的纸张涂写变成灵活的电子信息操作。并充分利用网络优势,加快学校内部学生信息和文档的发布、传送和获取,改善和优化学生工作,使各个部门之间的工作联系紧密、井然有序、清楚明晰,大大减轻工作负担,提高工作效率,增加学生管理的透明度。

(3)降低管理成本,由于采用本系统的原因,使辅导员管理工作一改往日埋在各种表格中的被动局面,基本实现了无纸化办公,根除了很多日常管理中的浪费现象,体现出现代化学生管理的优势。

(4)规范化管理,由于采用了计算机统计分析学生信息,一些原始信息在录入时就必须要求准确录入,这就要求管理人员在提供信息时要准确,同时要求在录入时也要十分认真,这样做是为了将错误降到最低,提高系统工作的准确率,从而实现学生管理工作规范化。


2 开发工具和相关技术简介

本项目是教务信息管理系统。开发环境:Eclipse、MySQL;开发语言:Java语言;开发技术:JDBC等。本章将对开发工具和相关技术进行简单介绍。

2.1 Eclipse简介

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse的设计思想:一切皆为插件。其底层封装了一个核心,其他功能都基于此核心写成插件。从而扩展整个Eclipse的功能。

2.2 Java语言介绍

Java语言是一款面向对象的一款高级语言是由Sun Microsystems公司(现已被Oracle公司收购)。由James Gosling和同事们共同研发,并在1995年正式推出,据Oracle官方数据指数,目前全球已有上亿的系统是使用Java开发的。Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。

Java语言的优点:

(1)跨平台性:跨平台性是指软件可以不受计算机硬件和操作系统的约束而在任意计算机环境下正常运行。Java自带的虚拟机很好地实现了跨平台性。

(2)简单:Java语言是一种相当简洁的“面向对象”程序设计语言。

(3)面向对象:面向对象技术使得应用程序的开发变得简单易用,节省代码。

(4)安全性:Java编译时要进行Java语言和语义的检查,保证每个变量对应一个相应的值,编译后生成Java类。

(5)多线程:是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序能够具有更好的交互性、实时性。

因此,在进行后台系统开发时采用了Java语言。

2.3 MySQL简介

MySQL是一种DBMS,而且是一种一个小型的开源的关系型数据库管理系统。2008年1月16日MySQL AB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。

MySQL它在世界范围内得到了广泛的安装和使用,应该是使用人数最多的数据库软件了,因为它有着这样的特性:

成本——MySQL是开源软件,可以免费使用和修改。

性能——MySQL性能很好处理速度很快。

简单——MySQL很容易安装和使用,对新手友好。

MySQL数据库软件也是使用最常用的数据库管理语言:结构化查询语言(SQL)进行数据库管理和操作。

2.4 JDBC技术简介

JDBC是一种用于SQL语句的Java API,由一组类和接口组成,通过调用这些类和接口所提供的方法,可以使用标准的SQL语言来存取数据库中的数据。

SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为 ,JDBC不能直接操作数据库,JDBC通过接口加载数据库的驱动,然后操作数据库。JDBC:Java Data Base Connectivity,它主要由接口组成。组成JDBC的2个包为java.sql和javax.sql。开发JDBC应用需要这2个包的支持外,还需要导入相应JDBC的数据库实现(即数据库驱动)。

 

3 系统需求分析

3.1 系统可行性分析

(1)技术可行性

该程序使用Eclipse编译器,采用的Java语言,Java面向对象,GUI图形界面,MySQL数据库,技术上是可行的。

(2)经济可行性

该程序使用Eclipse编译器是免费的,该软件能满足设计的基本的需求,不需要额外的开销,经济上是可行的。

(3)操作可行性

该程序只需用户安装Eclipse编译器并配置好环境变量就可以使用,GUI也在Eclipse编译器上安装了Window Builder插件,操作简单便捷。符合大部用户的使用习惯。操作上是可行的。

(4)法律可行性

在法律上是合法的,所以是可行的。

3.2 系统需求分析

(1)管理员:增删改查老师信息(工号 姓名 密码)

(2)老师:登录不同类别老师(工号 密码)

    2.1  辅导员老师:增删学生信息,查看学生信息

    2.2  教务老师进行课程管理(增删改查):

         课程编号 课程信息 课程学时 授课教师 班级

例:   00001   Java实训  64学时  李老师  计科3

    2.3课程教师:增删改查学生分数

(3)学生:登录或注册(学号 密码)

   3.1查成绩

   3.2修改和查询个人信息

   3.3所在班级有哪些课程安排(输出课程编号信息)

学生信息管理系统架构 学生信息化管理_学生信息管理系统架构

图3-1 用户角色关系图

学生信息管理系统架构 学生信息化管理_sql_02

 

图3-2 管理员用例图

学生信息管理系统架构 学生信息化管理_sql_03

 

图3-3 教务教师用例图

学生信息管理系统架构 学生信息化管理_MySQL_04

 

 

 

图3-4 课程教师用例图

学生信息管理系统架构 学生信息化管理_sql_05

图3-5 辅导员教师用例图

学生信息管理系统架构 学生信息化管理_Java_06

 

图3-6 学生用例图

3.3 组内成员分工

表3-1 组内成员分工情况表

序号

姓名

组内角色

小组分工

备注

1

董姿熳

项目经理

教师2操作 图形界面设计 测试

 

2

胡瑶瑶

架构师

教师1.3操作 测试

 

3

胡雅楠

测试

管理员相关操作 测试 绘图

 

4

王旭

编码

学生相关操作

 

说明:组内角色:组长为项目经理;其他人分别为编码、测试、架构师等。

3.4 进度安排

进度安排如表3-2所示。

表3-2 进度安排表

阶段

持续时间

阶段描述

输出

构思阶段

5小时

需求分析

需求说明,功能模块图

设计阶段

1天

系统设计

设计说明-可以画流程图;数据库设计

是现阶段

2天

编写代码

项目工程源代码

1天

系统测试

进行黑盒测试(功能测试)-测试说明

运行阶段

5天

部署、运行

系统使用说明、运维报告-答辩

 

 

 


4 系统设计

4.1 系统设计

根据系统的实际功能需求分析,对系统功能部分进行了设计。

登录界面有管理员、教师、学生三种选项,选择不同的身份进入不同的操作。

管理员登录后对教师进行增加、修改、查询、删除的操作,删除操作是当教师离职时可从系统中删除,保留最新数据的同时也减小了存储空间的消耗。

教师登录界面分为三种不同的类别,每个类别的老师各司其职,更符合常规逻辑。辅导员老师增删查学生的个人信息,查看/查找有两种方式,查看每人或者全体查看。课程老师添加需要上课的信息。授课教师管理学生的分数。

学生注册登录,查看及修改个人信息、做到及时更新最新信息,学生也可以查询成绩等。

4.2 数据库设计

根据系统需求分析设计了5张表,分别为管理员信息表、教师信息表、学生信息表、课程表、学生成绩表。具体信息如表4-1到表4-5所示。一下为参考,可以按照自己的需求修改

 

表4-1  管理员信息表

序号

字段名

数据类型

约束

是否为空

说明

1

aid

varchar(10)

主键

管理员ID

2

apassword

varchar(20)

 

管理员密码

 

教师信息表主要记录了教师的基本信息,如表4-2所示。

表4-2  教师信息表

序号

字段名

数据类型

约束

是否为空

说明

1

tid

varchar(10)

主键

工号

2

tname

varchar(10)

 

昵称

3

txueyuan

varchar(10)

 

所属学院

4

tpassword

varchar(20)

 

    教师密码

 

 

 

学生信息表主要记录了学生的基本信息,如表4-3所示。

表4-3  学生信息表

序号

字段名

数据类型

约束

是否为空

说明

1

sid

varchar(10)

主键

学号

2

sname

varchar(10)

 

昵称

3

sxueyuan

varchar(10)

 

所属学院

4

spassword

varchar(20)

 

    教师密码

5

sclass

varchar(10)

 

班级

6

sgender

varchar(10)

 

性别

7

smajor

varchar(10)

 

专业

8

sbirthday

varchar(10)

 

生日

 

课程表主要记录了课程的基本信息,如表4-4所示。

表4-4  课程表

序号

字段名

数据类型

约束

是否为空

说明

1

cid

varchar(10)

主键

课程编码

2

cname

varchar(10)

 

课程信息

3

ctime

varchar(10)

 

授课时长

4

tid

varchar(10)

 

    上课的人

5

smajor

varchar(10)

 

哪个专业

 

学生成绩表主要记录了学生的成绩,如表4-5所示。

表4-5  学生成绩表

序号

字段名

数据类型

约束

是否为空

说明

1

cid

varchar(10)

主键

课程编码

2

cname

varchar(10)

 

课程信息

3

score

varchar(10)

 

成绩

4

sid

varchar(10)

 

    上课的人

 

 

 

 

5 系统实现

5.1 系统代码实现

添加教师信息

button.addActionListener(new
ActionListener() {
                    @Override
                    public void
actionPerformed(ActionEvent e) {
                           String tid = textField.getText();
                           String tname = textField_1.getText();
                           String txueyuan = textField_2.getText();
                           String tpassword = textField_3.getText();
                           try {
                                  statement = cc.createStatement(
                                  ResultSet.TYPE_SCROLL_SENSITIVE,//查询是否已经存在
                                  ResultSet.CONCUR_UPDATABLE);
                              String sql4="select
* from user.teacher where tid="+tid+"";
                              ResultSet rs=statement.executeQuery(sql4);    
                           rs.last();//获取最后一条数据的信息
                           if(rs.getRow()!=1)
{//获取当前信息的行数
                                      String sql="insert
into user.teacher values ("+tid+",'"+tname+"','"+txueyuan+"','"+tpassword+"')";
                                         statement.executeUpdate(sql);
                                         JOptionPane.showMessageDialog(null,"添加成功!");
                                         textField.setText(null);
                                         textField_1.setText(null);
                                         textField_2.setText(null);
                                         textField_3.setText(null);
                           }else {                                      
                                  JOptionPane.showMessageDialog(null,"该工号已存在!");
                           }
                    } catch
(SQLException ex) {
                           ex.printStackTrace();
                           }
                    }
             });
             
             button_1.addActionListener(new
ActionListener() {
                    @Override
                    public void
actionPerformed(ActionEvent e) {
                           new
admin().setVisible(true);//监听返回上一级
                           dispose();
                    }
             
             });

删除教师信息

JButton button = new JButton("确定删除");
             button.addActionListener(new
ActionListener() {
                    public void
actionPerformed(ActionEvent e) {
                           Statement statement=null;
                           String tid = textField.getText();
                           try {
                                  statement = cc.createStatement(
                                  ResultSet.TYPE_SCROLL_SENSITIVE,
                                  ResultSet.CONCUR_UPDATABLE);
                                  String sql4="select
* from user.teacher where tid="+tid+"";//根据id删除
                                  ResultSet rs=statement.executeQuery(sql4);    
                                  rs.last();//获取最后一条数据的信息
                                  
                                  if(rs.getRow()==1)
{//获取当前信息的行数
                                                String
sql2="delete from user.teacher where
tid="+tid+"";
                                                statement.executeUpdate(sql2);//将sql2语句上传至数据库执行
                                                JOptionPane.showMessageDialog(null,"删除成功!");
                                                textField.setText(null);
                                  }else {
                                         JOptionPane.showMessageDialog(null,"该ID不存在!");
                                  }
 
                           } catch
(SQLException ee) {
                                  ee.printStackTrace();
                           }
                    }
             });

查找教师信息

JButton button = new JButton("确定查找");
             button.setFont(new Font("宋体", Font.BOLD, 16));
             button.setBounds(47,
297, 107, 47);
             contentPane.add(button);
             button.addActionListener(new
ActionListener() {
             public void
actionPerformed(ActionEvent e) {
                    ResultSet rs=null;
                    //Statement
statement=null;
                    String tid = textField.getText();
                    PreparedStatement ps=null;
                    try {
                           //statement
= cc.createStatement();
                           String sql = "       select* from user.teacher where tid =
?";
                                         ps = cc.prepareStatement(sql);
                                         ps.setString(1,
tid);
                                         rs = ps.executeQuery();
                                         //比较 相等则登入
                                         if(rs.next()) {
                                                //JOptionPane.showMessageDialog(null,
"登录成功!");
                           
                              String
id=rs.getString("tid");;
                              String
name=rs.getString("tname");
                              String
xueyuan=rs.getString("txueyuan");
                              String
password1=rs.getString("tpassword");
                               JOptionPane.showMessageDialog(null,"ID:"+id+"\n\t"+"姓名:"+name+"\n"+"学院:"+xueyuan+"\n\t"+"密码:"+password1+"\t");
                              
                              }else {
                                     JOptionPane.showMessageDialog(null,"该ID不存在!");
                        }
                           
                    } catch
(SQLException e1) {
                           e1.printStackTrace();
                    }
 
             try {
                    //cc.close();
                    //statement.close();
                    rs.close();
             } catch
(SQLException ee) {
                    ee.printStackTrace();
             }
 
             }
      });

查看全体教师

public
aquankan() {
             this.setBounds(200,200,500,400);
             this.setVisible(true);
             Statement statement=null;
             ResultSet rs=null;
             try {
                    //访问数据库
                    this.setTitle("全体教师信息");
                    statement=cc.createStatement();
                    String sql4="select
* from user.teacher";//sql4语句
                    rs=statement.executeQuery(sql4);     //将sql4语句传至数据库,返回的值为一个字符集用一个变量接收 
             
                    rs.last();//游标移动到查询到的数据库数据记录的最后一条
                    int row=rs.getRow();//获取记录的总条数
                    rs.beforeFirst();//游标回到第一个记录前的位置
                    String arr[]= {"工号","姓名","学院","密码"};//定义表格的列名称
 
                
String comm[][] = new String[row][4];//row行,4列                    rs.next();
                    for(int i=0;i<row;i++) {
                           comm[i][0]=rs.getString("tid");                           comm[i][1]=rs.getString("tname");                             comm[i][2]=rs.getString("txueyuan");                             comm[i][3]=rs.getString("tpassword");                           rs.next(); //游标回到第一个记录的位置      
 
                    }
                    JTable jTable=new JTable(comm,arr);                      jTable.setPreferredScrollableViewportSize(new
Dimension(500,400));//设置可滚动视图的大小 
                    JScrollPane jScrollPane=new
JScrollPane(jTable);    
                    getContentPane().add(jScrollPane,BorderLayout.CENTER);//将滚动条放到窗体  
                    //JOptionPane.showMessageDialog(null,"学生信息表如表所示");
                    setVisible(true);//设置窗体可见  
                    validate();//设置组件可见  
                    pack();//自动调整组建大小使每个组键都能显示
                    
                
statement.close();
                    rs.close();
                    
             } catch
(SQLException e1) {
                    e1.printStackTrace();
             }
      }
修改教师信息
button.addActionListener(new
ActionListener() {
                    public void
actionPerformed(ActionEvent e) {
                           String tid = textField.getText();
                           String tname = textField_1.getText();//修改后姓名
                           String txueyuan = textField_2.getText();     //修改后学院
                           String tpassword = textField_3.getText();//修改后密码
                           Statement statement=null;
                           try {
                                  statement = cc.createStatement(
                                  ResultSet.TYPE_SCROLL_SENSITIVE,//可滚动集,可移动游标,last 及时跟踪数据
                                  ResultSet.CONCUR_UPDATABLE);//更新数据,数据库变,结果集也变
                                  String sql4="select
* from user.teacher where tid='"+tid+"'";//sql4语句
                                  ResultSet rs=statement.executeQuery(sql4);    
                                  rs.last();//获取最后一条数据的信息
                                  //获取当前信息的行数
                                  if(rs.getRow()==1)
{
tname
                                         String sql2="update
user.teacher set tname='"+tname+"',txueyuan
= '"+txueyuan+"',tpassword
= '"+tpassword+"'
where tid='"+tid+"'";
                                         statement.executeUpdate(sql2);//将sql2语句上传至数据库执行
                                         JOptionPane.showMessageDialog(null,"姓名:"+tname+"\n学院:"+txueyuan+"\n密码:"+tpassword+"\n学生成绩修改成功!");
                                  }else {
                                         JOptionPane.showMessageDialog(null,"修改失败,该工号不存在");
                                  }
                                  statement.close();
                                  rs.close();
                                  textField.setText(null);
                                  textField_1.setText(null);
                                  textField_2.setText(null);
                                  textField_3.setText(null);
                           } catch
(Exception a) {
                                  a.printStackTrace();
                           }
                    }
             });   
增加学生信息主要代码
           String sid=jf1.getText();
                     String
sname=jf2.getText();
                     String
sclass=jf3.getText();
                     String
sgender=jf4.getText();
                     String
smajor=jf5.getText();
                     String
sbirthday=jf6.getText();
                     String
sxueyuan=jf7.getText();
                     String
spassword=jf8.getText();
              
                     Statement
statement=null;
                     try {
                            //访问数据库
                            //通过设置
Statement对象上的参数,您可以控制它产生的 ResultSet
                            //ResultSet的类型        设置
ResultSet 的并发性
                            statement = cc.createStatement(
                            ResultSet.TYPE_SCROLL_SENSITIVE,//可滚动结果集,可移动游标 可以使用last  双向滚动,并及时跟踪数据库的更新,以便更改ResultSet中的数据。这种类型受到其他用户所作更改的影响
                            ResultSet.CONCUR_UPDATABLE);//指定可以更新
ResultSet,当数据库变,结果集也跟着变
                               String sql4="select
* from user.student where sid='"+sid+"'";//sql4语句
                               ResultSet rs=statement.executeQuery(sql4);    
                            rs.last();//获取最后一条数据的信息  (查出来的数据)
                            
                            //获取当前信息的行数
                            //没有这个id
                            if(rs.getRow()!=1)
{
                                     String sql="insert
into user.student values ('"+sid+"','"+sname+"','"+sclass+"','"+sgender+"','"+smajor+"','"+sbirthday+"','"+sxueyuan+"','"+spassword+"')";
                                          statement.executeUpdate(sql);//将sql4语句传至数据库
                                          JOptionPane.showMessageDialog(null,"学号:"+sid+"\n姓名:"+sname+"\n班级:"+sclass+"\n性别"+sgender+"\n专业:"+smajor+"\n生日:"+sbirthday+"\n密码:"+spassword+"\n学生信息添加成功" ); 
                            }else {
                                   JOptionPane.showMessageDialog(null,"添加失败,你输入的id号已经存在了"); 
                            }

 

删除学生信息主要代码

String id=jtf.getText();
                                   Statement
statement=null;
                                   try {
                                          //访问数据库
                                          statement = cc.createStatement(
                                          ResultSet.TYPE_SCROLL_SENSITIVE,//可滚动集,可移动游标,及时跟踪数据库的连接
                                          ResultSet.CONCUR_UPDATABLE);//更新数据,数据库变,结果集也跟着变
                                       String sql4="select
* from user.student where sid="+id+"";//sql4语句
                                       ResultSet rs=statement.executeQuery(sql4);    
                                          rs.last();//获取最后一条数据的信息
                                          //获取当前信息的行数
                                          if(rs.getRow()==1)
{
                                                 String
sql2="delete from user.student where
sid="+id+"";
                                                 statement.executeUpdate(sql2);//将sql2语句上传至数据库执行
                                                 JOptionPane.showMessageDialog(null,"删除成功"); 
                                                 jtf.setText(null);
                                          }else {
                                                 JOptionPane.showMessageDialog(null,"删除失败,你输入的id不存在"); 
                                          }
 
查看学生信息主要代码(根据id查)
//依次取得文本框的值并赋一个值
               String sid1=jtf1.getText();
                            ResultSet
rs=null;
                            PreparedStatement
ps=null;
                            try {
                                   //将文本框中的学号课程号与数据库中相比较
                                   String
sql = "       select*
from user.student where sid = ?";
                                                 ps = cc.prepareStatement(sql);
                                                 //给?赋值
                                                 ps.setString(1,
sid1);//第一个?
                                                 rs = ps.executeQuery();
                                                 //比较 相等
                                                 if(rs.next()) {
                                                        
                                      String
sid=rs.getString("sid");
                                      String
sname=rs.getString("sname");
                                      String
sclass=rs.getString("sclass");
                                      String
sgender=rs.getString("sgender");
                                      String
smagor=rs.getString("smajor");
                                      String
sbirthday=rs.getString("sbirthday");
sxueyuan=rs.getString("sxueyuan");
                                      String
spassword=rs.getString("spassword");
                                      JOptionPane.showMessageDialog(null,"学号:"+sid+"\n姓名:"+sname+"\n班级:"+sclass+"\n性别:"+sgender+"\n专业:"+smagor+"\n生日:"+sbirthday+"\n密码:"+spassword+"" ); 
                                      
                                      }else {
                                             JOptionPane.showMessageDialog(null,"该学生ID不存在!");
                                             
//查看学生信息主要代码(全部信息)
//访问数据库
             statement=cc.createStatement();
varchar类型,所以加0变成int型升序,在学生表按sid排序
                        rs=statement.executeQuery(sql4);  //将sql4语句传至数据库,返回的值为一个字符集用一个变量接收 
              
                        rs.last();//游标移动到查询到的数据库数据记录的最后一条
                        int row=rs.getRow();//获取记录的总条数
                        rs.beforeFirst();//游标回到第一个记录前的位置
                        String arr[]= {"学号","姓名","班级","性别","专业","生日","学院","密码"};//定义表格的列名称
 
                         String comm[][] = new String[row][8];//row行,8列                            rs.next(); //是游标向下移动一行的意思 
                            //循环输出
                            for(int i=0;i<row;i++) {
                                   comm[i][0]=rs.getString("sid");                                   comm[i][1]=rs.getString("sname");                                     comm[i][2]=rs.getString("sclass");                                     comm[i][3]=rs.getString("sgender");                                         comm[i][4]=rs.getString("smajor");                                         comm[i][5]=rs.getString("sbirthday");                                         comm[i][6]=rs.getString("sxueyuan");                                         comm[i][7]=rs.getString("spassword");                                              
                                   rs.next(); //游标回到第一个记录的位置      
 
                        }
                            //设置表格
                            JTable
jTable=new JTable(comm,arr);                              jTable.setPreferredScrollableViewportSize(new
Dimension(800,200));//设置可滚动视图的大小 
                            JScrollPane
jScrollPane=new JScrollPane(jTable);    
                            add(jScrollPane,BorderLayout.CENTER);//将滚动条放到窗体  
                            
                            setVisible(true);//设置窗体可见  
                            validate();//设置组件可见  
                            pack();//自动调整组建大小使每个组键都能显示

教务老师操作

增加课程信息

String cid = textField.getText();
                            String
cname = textField_1.getText();                            String
ctime = textField_2.getText();
                            String
tid = textField_3.getText();
                            String
smajor = textField_4.getText();
                            try {
                                   statement = cc.createStatement(
                                   ResultSet.TYPE_SCROLL_SENSITIVE,//查询是否已经存在
                                   ResultSet.CONCUR_UPDATABLE);
                               String sql4="select * from user.courses where cid="+cid+"";
                               ResultSet rs=statement.executeQuery(sql4);    
                            rs.last();//获取最后一条数据的信息
                            if(rs.getRow()!=1)
{//获取当前信息的行数
                                       String sql="insert into user.courses values ('"+cid+"','"+cname+"','"+ctime+"','"+tid+"','"+smajor+"')";                                          statement.executeUpdate(sql);
                                          JOptionPane.showMessageDialog(null,"添加成功!");
                                          textField.setText(null);
                                          textField_1.setText(null);
                                          textField_2.setText(null);
                                          textField_3.setText(null);
                                          textField_4.setText(null);
                            }else {                                      
                                   JOptionPane.showMessageDialog(null,"该课程已存在!");
                            }
                     }
catch (SQLException ex) {
                            ex.printStackTrace();
                            }
                     }

删除课程信息

Statement statement=null;
                            String
cid = textField.getText();
                            try {
                                   statement = cc.createStatement(
                                   ResultSet.TYPE_SCROLL_SENSITIVE,
                                   ResultSet.CONCUR_UPDATABLE);
cid删除
                                   ResultSet
rs=statement.executeQuery(sql4);    
                                   rs.last();//获取最后一条数据的信息
                                   
                                   if(rs.getRow()==1)
{//获取当前信息的行数
                                                 String
sql2="delete
from user.courses where cid='"+cid+"'";
                                                 statement.executeUpdate(sql2);//将sql2语句上传至数据库执行
                                                 JOptionPane.showMessageDialog(null,"删除成功!");
                                                 textField.setText(null);
                                   }else {
                                          JOptionPane.showMessageDialog(null,"该课程不存在!");
                                   }
 
                            }
catch (SQLException ee) {
                                   ee.printStackTrace();
                            }
                     }

修改课程信息

String cid = textField.getText();    //待修改的课程编号
                            String
cname = textField_1.getText();//修改后课程信息                            String
ctime = textField_2.getText();//修改后课程时长
                            String
tid = textField_3.getText(); //修改后授课教师
                            String
smajor = textField_4.getText();//修改后授课班级
                            Statement
statement=null;
                            try {
                                   statement = cc.createStatement(
                                   ResultSet.TYPE_SCROLL_SENSITIVE,//可滚动集,可移动游标,last 及时跟踪数据
                                   ResultSet.CONCUR_UPDATABLE);//更新数据,数据库变,结果集也变
                                   String
sql4="select
* from user.courses where cid='"+cid+"'";//sql4语句
                                   ResultSet
rs=statement.executeQuery(sql4);    
                                   rs.last();//获取最后一条数据的信息
                                   //获取当前信息的行数
                                   if(rs.getRow()==1)
{
                                          //更新数据库中信息
                                          String
sql2="update
user.courses set cname='"+cname+"',ctime = '"+ctime+"',tid
= '"+tid+"',smajor = '"+smajor+"'
where cid='"+cid+"'";                                          statement.executeUpdate(sql2);//将sql2语句上传至数据库执行
                                          JOptionPane.showMessageDialog(null,"课程信息:"+cname+"\n课程时长:"+ctime+"\n授课教师:"+tid+"\n授课班级:"+smajor+"\n学生成绩修改成功!");                                   }else {
                                          JOptionPane.showMessageDialog(null,"修改失败,该课程编号不存在");
                                   }
                                   statement.close();
                                   rs.close();
                                   textField.setText(null);
                                   textField_1.setText(null);
                                   textField_2.setText(null);
                                   textField_3.setText(null);
                                   textField_4.setText(null);
                            }
catch (Exception a) {
                                   a.printStackTrace();
                            }
                     }
查看课程信息
//访问数据库
           
statement=cc.createStatement();
varchar类型,所以加0变成int型升序,在学生表按sid排序
                        rs=statement.executeQuery(sql4);     //将sql4语句传至数据库,返回的值为一个字符集用一个变量接收 
              
                        rs.last();//游标移动到查询到的数据库数据记录的最后一条
                        int row=rs.getRow();//获取记录的总条数
                        rs.beforeFirst();//游标回到第一个记录前的位置
                        String arr[]= {"课程号","课程名称","课时","教师工号","专业"};//定义表格的列名称
 
                         String comm[][] = new String[row][5];//row行,3列                            rs.next();
                            for(int i=0;i<row;i++) {
                                   comm[i][0]=rs.getString("cid");                                   comm[i][1]=rs.getString("cname");                                     comm[i][2]=rs.getString("ctime");                                     comm[i][3]=rs.getString("tid");                                     comm[i][4]=rs.getString("smajor");                                          
                                        
                                   rs.next(); //游标回到第一个记录的位置      
 
                        }
                            JTable
jTable=new JTable(comm,arr);                              jTable.setPreferredScrollableViewportSize(new
Dimension(400,200));//设置可滚动视图的大小 
                            JScrollPane
jScrollPane=new JScrollPane(jTable);    
                            add(jScrollPane,BorderLayout.CENTER);//将滚动条放到窗体  
                            setVisible(true);//设置窗体可见  
                            validate();//设置组件可见  
                            pack();//自动调整组建大小使每个组键都能显示
                            
                         statement.close();
                            rs.close();

 

学生通过输入账号密码来进行登录个人信息管理系统。

登录代码如下

//通过选取student表中的所有列与文本框输入的账号密码进行比较
String sql = "select * from student where sid =
? and spassword = ?";  
                    //在数据库中运行sql
                    ps
= cc.prepareStatement(sql); 
                                  //将sid11赋值给第一个?,spassword11赋值给第二个?。
                                  ps.setString(1, sid11);
                                  ps.setString(2, spassword11);
                                  
                                  rs = ps.executeQuery();
                                  if(rs.next()) {
                                         try{
//相等则创建一个输入流将sid11写入,然后关闭输入流。
                                                FileWriter outr=new FileWriter("test.txt")                                                                       outr.write(sid11);
                                                outr.close();

学生通过点击学生注册按钮进入注册界面,输入自己的账号姓名等信息,将信息保存到student表中。

 

注册代码如下

String sid = textField.getText();
String spassword = textField_1.getText();
String sname = textField_4.getText();
String sgender = textField_2.getText();
String sbirthday = textField_3.getText();
String smajor = textField_5.getText();
String sclass = textField_6.getText();
String sxueyuan = textField_7.getText();
String sql1 = "select
* from student where sid = ? ";
ps = con1.prepareStatement(sql1);
ps.setString(1,
sid);
rs = ps.executeQuery();
if(rs.next()) {
JOptionPane.showMessageDialog(null, "账号已存在请重新输入!");
textField.setText(null);
              textField_1.setText(null);
              textField_2.setText(null);
              textField_3.setText(null);
              textField_4.setText(null);
              textField_5.setText(null);
              textField_6.setText(null);
              textField_7.setText(null);
              }else {
              String
sql = "insert into student(sid,sname,sclass,sgender,smajor,sbirthday,sxueyuan,spassword)
values('"+sid+"','"+sname+"','"+sclass+"','"+sgender+"','"+smajor+"','"+sbirthday+"','"+sxueyuan+"','"+spassword+"')";              
              int count = statement.executeUpdate(sql);
                                          if(count>0) {
              System.out.println("存储成功");
              JOptionPane.showMessageDialog(null, "注册成功!");
              textField.setText(null);
              textField_1.setText(null);
              textField_2.setText(null);
              textField_3.setText(null);
              textField_4.setText(null);
              textField_5.setText(null);
              textField_6.setText(null);
              textField_7.setText(null); 
              }else 
                            System.out.println("存储失败");
}

学生通过输入账号密码后点击登录跳转到个人信息管理页面,可以进行修改个人信息,查找课表,查看成绩等操作。

个人信息管理界面代码如下

 

//创建一个输出流,将inr包成一个带缓冲区的输出流br,然后将之前存入到test中的sid提出赋值给sid2,通过sid2来与数据库中进行比较,匹配成功将此人信息显示在界面上
FileReader inr=new FileReader("test.txt");
BufferedReader br=new BufferedReader(inr);                              
                            sid2=br.readLine();
 
String sql = "select * from student where sid =
? ";

学习在个人信息管理页面点击修改信息则可根据自己的id修改其他信息

修改界面如下:

 

 

通过update语句来更新表中的信息

String sql = "update student set sname='"+sname+"',sclass='"+sclass+"',sgender='"+sgender+"',smajor='"+smajor+"',sbirthday='"+sbirthday+"',sxueyuan='"+sxueyuan+"',spassword='"+spassword+"' where sid='"+sid2+"'";
int
count = statement.executeUpdate(sql);

 

学生在个人信息管理页面点击查看成绩按钮来进入查看成绩界面,通过输入学号来进行查找成绩

代码如下

//通过select语句来进行比较sid,显示出成绩信息
String sql = "select * from scores where sid = ?
";

                                 

学生在个人信息管理页面点击查看课表按钮进入查找课表界面,通过输入的专业名来查找课程

代码如下

//通过select语句来进行比较smajor,显示出课程信息

5.2 系统界面实现 

管理员登录后台系统后,对教师信息进行相关操作。

                                                                           

学生信息管理系统架构 学生信息化管理_sql_07

图5-1  用户登陆界面

学生信息管理系统架构 学生信息化管理_sql_08

 

 

 

图5-2 管理员功能模块

学生信息管理系统架构 学生信息化管理_sql_09

图5-3  添加教师模块

学生信息管理系统架构 学生信息化管理_Java_10

 

 

 

图5-4  删除教师模块

学生信息管理系统架构 学生信息化管理_MySQL_11

 

 

 

图5-5  查找全部教师模块

学生信息管理系统架构 学生信息化管理_学生信息管理系统架构_12

 

 

 

图5-6  查找某个教师模块

学生信息管理系统架构 学生信息化管理_sql_13

 

 

 

图5-7  修改教师模块

老师通过输入账号密码来进行登录系统进入老师界面。老师登录界面如图5-8所示。点击辅导员老师按钮进入辅导员老师界面,如图5-9所示。

学生信息管理系统架构 学生信息化管理_MySQL_14

 

 

 

图5-8  老师登录界面

学生信息管理系统架构 学生信息化管理_学生信息管理系统架构_15

 

 

 

图5-9  辅导员老师所在界面

辅导员老师进入系统后,便可看到辅导员老师的功能。如图5-10所示。

学生信息管理系统架构 学生信息化管理_MySQL_16

 

 

 

图5-10  辅导员老师功能界面

点击增加学生信息,便可增加学生信息。如图5-11所示。保存到数据库

学生信息管理系统架构 学生信息化管理_Java_17

图5-11 增加学生信息功能界面

添加成功后如图5-12所示。把信息保存到了数据库中。如图5-13所示。

                                                       

学生信息管理系统架构 学生信息化管理_Java_18

图5-12  增加学生信息保存到数据库界面

学生信息管理系统架构 学生信息化管理_sql_19

 

 

 

 

图5-13 增加学生信息成功界面

点击删除学生信息,便可删除学生信息。如果数据库里有学生的信息,便删除。如图5-14所示。失败如图5-15所示。

学生信息管理系统架构 学生信息化管理_Java_20

 

 

 

图5-14 删除学生信息成功界面

学生信息管理系统架构 学生信息化管理_sql_21

 

 

 

图5-15删除学生信息失败界面

点击查看学生信息,便可查看信息。可以根据学生id号查看信息。如图5-12所示。也可以查看所有的信息。如图5-16所示。

学生信息管理系统架构 学生信息化管理_sql_22

 

 

 

图5-16  查看学生信息界面

查询成功后显示信息。如图5-17所示。  

学生信息管理系统架构 学生信息化管理_MySQL_23

 

 

 

图5-17 查询学生信息成功界面 

学生信息管理系统架构 学生信息化管理_sql_24

 

 

 

图5-18 查看全部学生信息界面

学生通过输入账号密码来进行登录个人信息管理系统。

如图5-19所示

学生信息管理系统架构 学生信息化管理_sql_25

 

 

 

学生通过点击学生注册按钮进入注册界面,输入自己的账号姓名等信息,将信息保存到student表中。

如图5-20所示

学生信息管理系统架构 学生信息化管理_Java_26

 

 

5-20 注册界面

学生通过输入账号密码后点击登录跳转到个人信息管理页面,可以进行修改个人信息,查找课表,查看成绩等操作。

如图5-21所示:

学生通过输入账号密码后点击登录跳转到个人信息管理页面,可以进行修改个人信息,查找课表,查看成绩等操作。

如图5-21所示:

学生信息管理系统架构 学生信息化管理_学生信息管理系统架构_27

 

 

图5-21 个人信息管理界面

学习在个人信息管理页面点击修改信息则可根据自己的id修改其他信息

如图5-22所示:

学生信息管理系统架构 学生信息化管理_MySQL_28

 

 

学生在个人信息管理页面点击查看课程按钮来进入查看课程界面,通过输入专业名称来进行查找课程

学生信息管理系统架构 学生信息化管理_MySQL_29

 

 

学生在个人信息管理页面点击查看成绩按钮来进入查看成绩界面,通过输入学号来进行查找成绩

学生信息管理系统架构 学生信息化管理_sql_30

 

 

图5-24 查找成绩界面

 

6 系统测试
对管理员功能模块进行测试,测试结果如表6-1所示。

表6-1 管理员模块测试表

编号

测试功能

输入描述

预期结果

运行结果

1

增加功能

管理员加老师信息

数据库中有

正常,与预期结果一致

2

删除功能

管理员通过工号删除教师信息

从数据库中删除

正常,与预期结果一致

3

修改功能

通过工号修改

数据库中显示修改内容

正常,与预期结果一致

4

查找功能

 从数据库中查找

查找到与数据库中对应中内容

正常,与预期结果一致

管理员模块测试主要是针对教师的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。

 

对教师功能模块进行测试,测试结果如表6-2所示。

表6-2 教师模块测试表

编号

测试功能

输入描述

预期结果

运行结果

1

增加功能

老师加学生、课程、成绩信息

数据库中有

正常,与预期结果一致

2

删除功能

教师通过学号、课程号删除相关信息

从数据库中删除

正常,与预期结果一致

3

修改功能

通过学号、课程修改

数据库中显示修改内容

正常,与预期结果一致

4

查找功能

 从数据库中查找

查找到与数据库中对应中内容

正常,与预期结果一致

教师模块测试主要是针对教师的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。

对学生功能模块进行测试,测试结果如表6-3所示。

表6-3 学生模块测试表

编号

测试功能

输入描述

预期结果

运行结果

1

增加功能

学生注册登录添加信息

数据库中有

正常,与预期结果一致

2

修改功能

修改个人信息

数据库中显示修改内容

正常,与预期结果一致

3

查找功能

 从数据库中查找

查找到与数据库中对应中内容

正常,与预期结果一致

学生模块测试主要是针对教师的操作,从测试结果中可以看出该模块的所有功能均能正常实现,且测试结果与预期结果一致。

 

7 结论和心得

学生1董姿熳:

心得:学习java已有4个月的时间,这四个月痛并快乐着!我还记得刚入门的时候环境配置,弄了很久也不知道具体什么样子才算完成。开始网络授课后最开始也不能很好的调整状态,一个视频总要看很久,再后来就熟悉了许多,能独立完成许多任务。好好记笔记,跟着老师做,让身体也产生记忆是我感触非常深的一点,有的课一听就过,可是如果跟做了,学习效果就会好很多。个人设计时要学习GUI和数据库,很不熟练很抓狂,在b站看了很多事情,最后才能应用数据库,并没有得心应手,还需继续学习。

做第一小组的组长,前期多督促别落下进度,后期做综合大家都是一起做,每个人都很认真,大家一起用心去完成这个项目,一遍遍的去调试,一遍遍的挑bug,也崩溃了许多个日日夜夜,从早坐到晚边学数据库GUI边做程序,合理安排好时间我知道肯定能在截止日期之前完成就对组员的要求更高了一些,各取所长同时又面面俱到,很感谢我的组员们的一起努力,也很感谢老师耐心讲解,老师很温柔,虽然素未谋面但是对我们很是包容,问问题总是很快就能得到回复,很感谢老师。最后,在完成设计的那一刻,真的太开心,一路心路历程值得回味。

学生2胡瑶瑶:

心得:通过这几周的Java综合设计,我深切的体会到了团队协作的重要性,我们互相鼓励,互相进步。在我们遇到困难与瓶颈期的时候,我们没有想过要放弃,而是去想方法如何去做出来。虽然过程艰辛,但是从中学到了很多新知识。我相信只要有付出就会有收获。在一些网站上也请教了一些问题,但是我们首先一定要自己先思考,再去请教,这样有助于我们成长。在Java的学习过程中,一句话总结”痛并快乐着“。在今后的学习中,我也会继续努力,增加自己的知识。最后,深切的感谢指导我们的老师和我们辛苦的组长以及各位组员的帮助。

学生3胡雅楠:

心得:在这次综合的项目中,我有了不小的收获,刚拿到任务时的毫无头绪,不知道从何下手,然后一次次的百度,与开会讨论,最终能够把数据库,Java,GUI结合起来一起写程序。通过这个过程,我更加懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合,才能真正为社会服务。我也了解到了在完成一个完整的项目上团队的重要性,在实际的程序开发中,团队的力量往往比个人力量之和要大上很多,并且在今后的开发中,我们都将是以团队的形式展开工作的,所以我们应该在现在学习的时候养成一种良好的团队精神。

最后,感谢在此次项目开发中李老师的热心的帮助和悉心的教导,也要感谢小组同学的帮忙,也让我明白了一个团队的重要性,有你们真好!

学生4王旭:

心得:这次的综合设计和上次的个人设计不同,更强调了团队合作,遇到不会的地方或问题可以通过组内讨论来解决。每个人的问题都会在组内讨论一次,不仅问题本人得到了解决的方案,其他人也能通过这次讨论来获得知识,以便下次不会有同样的问题。这次的课程设计中我也遇到了很多困难,有些通过百度查找已经解决,还有一些会在组内互相讨论出可行的方案,更难的一些就会询问老师,在后面不同GUI界面传递数据时,难住了我好久,组内讨论也没能讨论出一个结果,只好去询问老师,老师给出的解决方案让我茅塞顿开,只是通过一个临时文件的存储就解决了,之前我一直在带参传递钻牛角尖,这让我明白了一个问题可能会有好几种解决的办法,并不一定你认为的就是最好的,可能还有更简单的没有发现,这次的课程设计让我认识到了自己的不足,相信在以后会有更好的表现。