1引言 ……………………………………………………………………………………………………….1
1.1课题背景辑意义 ………………………………………………………………………….1
1.2课题开发技术选择 …………………………………………………………………..1
1.3课题实现技术的简要说明 ………………………………………………………….2
2系统需求分析 ……………………………………………………………………………………..3
2.1功能需求分析 …………………………………………………………………………….3
3学生信息管理系统设计 ……………………………………………………………………….4
3.1数据模型分析与设计 ………………………………………………………………….4
3.2结构设计与结构功能图. …………………………………………………………….6
3.2.1结构设计…………………………………………………………………………….6
3.2.2功能结构图 ……………………………………………………………………….6
4详细设计…………………………………………………………………………………………………8
5系统调试常见错误…………………………………………………………………………………17
总 结 …………………………………………………………………………………………………18
参考文献 …………………………………………………………………………………………………18
1 引 言
由于学生信息的冗长与繁琐,所以它的管理问题带来的麻烦和不方便也随之而来。所以开发一个适合学校的、便于管理学生信息的管理系统是十分重要的。
1.1课题背景及意义
为了充分实现素质教育,多方面发展学生的兴趣爱好,大部分学校都设立了全校范围的内的选修课。学生可以根据自己的兴趣和特长,选择自己喜欢的课程。由于高等学校的快速发展,高校的规模也越来越大,学生数量和课程量都迅速地增长,管理上的手工操作不仅仅会耗费学生与工作人员大量的时间和精力,效率以及准确性也很低。如何使同学们方便、快捷、准确地选课,以及老师们对学生的相关信息的管理,已经成为一个重要的问题。
利用计算机进行学生信息管理,不仅能够保证准确、无误、快速输出,而且还可以利用计算机对有关信息进行查询,检索迅速、查找方便、可靠性高、存储量大、保密性好。要科学地实现信息化管理,开发一个适合学校的,能够进行信息存储、查询、修改等功能的信息管理系统是十分重要的。本课题就是针对便于学生信息管理的问题而设计的一个管理系统。
1.2 课题开发技术选择
本课题设计主要运用的技术有两个:java项目开发和MysqlL对数据库的操作。这里主要介绍本课题为什么选用这两个开发技术:
⑴首先了解一下Java语言特点
Java是一种跨平台,适合于分布式计算环境的面向对象编程语言。具体来说,它具有如下特性:
简单性、面向对象、分布式、解释型、可靠、安全、平台无关、可移植、高性能、多线程、动态性等。
⑵ Access数据库的特点
●无范式要求,可根据实际系统需求构造数据库。
●采用标准的SQL结构化查询语言。
●具有字符界面和图形界面,易于开发。
综上所述,选择java作为开发语言,Mysql作为数据库开发工具是个不错的选择。
1.3 课题实现技术的简要说明
本课题主要运用了java图形编程和oracle数据库的操作。
Java图形编程给用户提供了一个直观、易于与用户进行交互的图形界面。在图形编程中,运用了大量的java.swing包中的类,之所以选择swing包中的类而不选java.awt包中的类,主要是swing包中的类能给用户提供更好的观感。
oracle数据库的操作这部分内容分成三部分来实现:首先,编写对数据库操作的类,包括:连接数据库、执行sql语句、关闭数据库连接等。其次,编写一个用于对学生信息进行数据库操作的类,包括:学生信息的增加、修改、删除和查询等。最后,编写一个用于对课程相关信息进行数据库操作的类,包括:对课程信息的增加、修改、删除、查询等等。
通过结合图形编程和数据库编程,从而基本上实现了学生信息管理的基本功能,由于本人技术上的不足,难免有些地方需要改进,这些存在的问题都将成为本人前进的动力,并在日后更加完善本课题的设计。
2系统需求分析
2.1功能需求分析
本课题根据学生信息管理综合分析,便出于方便管理考虑,将学生信息管理系统的功能总结起来,共需要实现以下几个方面功能:
①管理学生信息
管理所有学生的基本信息,对学生信息的操作包括添加、修改、删除等;可以根据各种条件查询出需要的信息,比如修改,可以通过学生学号查询出学生的基本信息,然后通过对需要修改项进行修改并保存修改后的结果存入数据库的学生表中。
②管理课程信息
管理所有课程的基本信息,包括对课程信息的添加、修改、删除等操作;可以根据各种条件查询出需要的信息,并对相应的信息进行操作。比如修改和删除,可以通过学生的学号查询出学生的相应课程信息,对相应的课程进行修改、删除操作。
③学生选课与成绩
根据学生的学号进行选课,登记所选课程的成绩;可以根据学号查询出选课信息与成绩。
通过以上功能的设计与实现,并实现学生信息管理系统的基本功能。当然在实际的学生信息管理系统中,其功能要比本课题的多的多,也复杂的多,本课题仅简单的实现了一个学生管理系统的设计与实现的流程。
3 学生信息管理系统设计
3.1数据模型分析与设计
数据库模型描述了在数据库中结构化和操纵数据的方法,模型的结构部分规定了数据如何被描述(例如树、表等);模型的操纵部分规定了数据的添加、删除、显示、维护、打印、查找、选择、排序和更新等操作。数据库模型的分类:分层模型、关系模型、网络模型和对象模型。
本课题选择的关系模型,关系模型是目前最重要的一种数据模型。
本课题的关系数据模型的数据结构可分为三个表来表示:学生信息表(student)、课程信息表(course)、学生选课表(sc);
学生信息表用于记录学生的基本信息,如表3-1;课程信息表用于记录课程的基本信息,如表3-2;学生选课表如下表3-3。这三个表对应的E-R图分别是:图3.1 学生信息E-R图;图3.2 课程信息E-R图;图 3.3 学生选课E-R图;如下图。
表3-1 学生信息表(student)
| 名称 | 字段名称 | 数据类型 | 主键 | 非空 |
| 学号 | snum | char(10) | yes | yes |
| 姓名 | sname | varchar2 | no | yes |
| 性别 | ssex | char(2) | no | no |
| 出生日期 | sbirth | char(8) | no | no |
| 入学年份 | syear | char(4) | no | no |
| 名称 | 字段名称 | 数据类型 | 主键 | 非空 |
| 课程编号 | cnum | char(4) | yes | yes |
| 课程名称 | cname | varchar2 | no | yes |
| 授课老师 | cteacher | varchar2 | no | no |
| 名称 | 字段名称 | 数据类型 | 主键 | 非空 |
| 学号 | snum | char(10) | yes | yes |
| 课程编号 | cnum | char(4) | yes | yes |
| 成绩 | grade | number(4,1) | no | no |
3.2 结构设计与结构功能图
3.2.1 结构设计
根据对系统进行需求分析,本系统将分为4个模块:
● 学生管理
管理学生基本信息,包括个人信息的添加、修改、删除以及选课信息的添加。
● 课程管理
管理课程的基本信息,包括课程信息的添加、修改和删除。
● 成绩管理
管理学生选课的成绩信息,包括成绩的登记与修改。
● 信息查询
查询已经登记的信息,包括学生的基本信息、课程的基本信息与成绩信息。
3.2.2 功能结构图
学生管理系统功能结构如图3.4所示。
4 详细设计
该系统由6个模块构成,包括学生管理系统主界面模块、学生信息管理模块、课程信息管理模块、成绩信息管理模块、信息查询模块和数据操作模块。下面分别加以叙述:
① 学生管理系统主界面模块
学生管理系统主界面模块包括StuMS.java和StuMain.java两个文件。StuMS是学生管理系统的主运行类,其中有运行整个程序的main方法,该文件生成了StuMain类的一个实例,从而生成了学生管理系统的界面,如图4.1所示。StuMain类继承自JFrame类,实现了ActionListener接口,他有一个不带参数的构造方法StuMain(),用来生成StuMain的实例。StuMain类将所有功能集中到菜单栏中,并通过调用其他模块来实现学生管理系统的各个功能。
import javax.swing.UIManager;
import java.awt.*;
/*学生管理系统运行主类 */
public class StuMS { 图4.1 学生管理系统主界面
boolean packFrame = false;
/**
* 构造函数
*/
public StuMS() {
StuMain frame = new StuMain();
if (packFrame) {
frame.pack();
}
else {
frame.validate();
}
//设置运行时窗口的位置��
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width-frameSize.width)/ 2, (screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
public static void main(String[] args) {
//设置运行风格
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch(Exception e) {
e.printStackTrace();
}
new StuMS();
}
}
② 学生信息管理模块
学生信息管理模块主要由StuInfo.java、AddStuInfo.java、EdiStuInfo.java、DelStuInfo.java、SelectCourse.java和StuInfoSearchSnum.java共计6个文件组成,其构成关系如图4.2所示。
学生信息管理模块的6个文件组成了主界面中的“学生管理”菜单的内容,其中包括增加、修改、删除和学生选课功能,如图4.3所示。
图4.3 学生信息管理模块的运行界面
③ 课程信息管理模块
课程信息管理模块主要由CourseInfo.java、AddCourseInfo.java、EditCourseInfo.java、DelCourseInfo.java、CourseInfoSearchCnum.java这5个文件组成,其构成关系如图4.4所示。
课程信息管理模块中的5个类文件组成了主界面中“课程管理”菜单的内容,其中包括增加、修改和删除功能,如图4.5所示。
图4.5 课程信息管理模块运行界面
④ 成绩信息管理模块
成绩信息管理模块主要由GradeInfo.java、AddGradeInfo.java、EditGradeInfo.java这3个文件组成,其构成关系如图4.6所示。
成绩信息管理模块中的3个类文件组成了主界面中的“成绩管理”菜单的内容,其中包括增加和修改功能,如图4.7所示。
图4.7 成绩信息管理模块的运行界面
⑤ 信息查询模块
信息查询模块主要包括学生查询、课程查询和成绩查询3个部分。信息查询的运行主截面如图4.8所示。
图4.8 学生信息查询模块的运行界面
学生查询由StuSearchSnum.java、StuSearchSname.java和ResultStudent.java这3个文件组成,主要实现功能包括:按学号查询、按学生姓名查询。
课程查询由CourseSearchCname.java、CourseSearchCteacher.java和ResultCourse.java着3个文件组成,主要实现功能包括:按课程名称查询、按授课老师查询。
成绩查询由GrdSearchAllGrade和ResultGrade这2个文件组成,实现的功能是按照学生的学号查询该学生所有科目成绩
⑥数据库操作模块
数据库操作模块由Database.java、StuBean.java、CrsBean.java和csBean.java这4个文件组成,功能包括连接数据库、执行数据库操作(对学生信息、课程信息和成绩信息进行插入、修改、删除和读取)和关闭数据库连接。连接数据库的主要代码如下:
//Database.java
import java.sql.*;
/**
* 连接数据库的类
*/
public class Database {
private Statement stmt=null;
ResultSet rs=null;
private Connection conn=null;
String sql;
String strurl="jdbc:odbc:student";
public Database(){
}
/**
* 打开数据库连接
*/
public void OpenConn()throws Exception{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection(strurl);
}
catch(Exception e){
System.err.println("OpenConn:"+e.getMessage());
}
}
/**
* 执行sql语句,返回结果集rs
*/
public ResultSet executeQuery(String sql){
stmt = null;
rs=null;
try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=stmt.executeQuery(sql);
}
catch(SQLException e){
System.err.println("executeQuery:"+e.getMessage());
}
return rs;
}
/**
* 执行sql语句
*/
public void executeUpdate(String sql){
stmt=null;
rs=null;
try{
stmt=conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
stmt.executeQuery(sql);
conn.commit();
}
catch(SQLException e){
System.err.println("executeUpdate:"+e.getMessage());
}
}
public void closeStmt(){
try{
stmt.close();
}
catch(SQLException e){
System.err.println("closeStmt:"+e.getMessage());
}
}
/**
* 关闭数据库连接
*/
public void closeConn(){
try{
conn.close();
}
catch(SQLException ex){
System.err.println("aq.closeConn:"+ex.getMessage());
}
}
/*转换编码*/
public static String toGBK(String str){
try {
if(str==null)
str = "";
else
str=new String(str.getBytes("ISO-8859-1"),"GBK");
}
catch (Exception e) {System.out.println(e);}
return str;
}
}
5系统调试常见错误
1.NullPointerException异常
一般是对一个为NULL值的变量进行操作引起的。为避免这种异常,最好在对变量操作之前检查,看它是否为NULL值。
2.SQLException异常
一般是由于SQL语句不正确引起的。为避免这种异常,最好在使用SQL语句的程序中捕获此SQL异常。
3.NumberFormatException异常
这是由于数字的格式错误而出现的例外。为了避免出现此类错误,一般必须保证数据格式输入正确。
4.数据库连接垃圾回收
在实际的开发应用中,通常出现某一个对象未能关闭的情况,为了防止这种情况的发生,可以在有关对数据库操作的Java类文件中增加自动回收函数,在JVM自动地回收对象时,取出使用的连接对象,判断是否关闭,如果没有关闭则关掉。代码如下所示:
protected void finalize()
{
try
{
If(getConn()!=null&&!getConn().isClosed())
{
rs.cloes();
stm.close();
conn.close();
}
}catch(SQLException e){}
}
总 结
经过这次课题的设计并实现,尽管会遇到很多难题,但是让我更加受益的是在这次课题中得到的经验、心得和锻炼。本系统实现了信息化管理学生信息,能够进行信息存储、查询、修改等能功。该系统由六个模块构成,包括学生管理系统的主界面模块、学生信息管理模块、课程信息管理模块、成绩信息管理模块、信息查询模块和数据库操作模块。通过这些模块的有机结合,能方便的对学生信息进行综合管理,从而实现了信息化管理的目的。
由于本人的能力有限,设计过程中难免有不足之处,例如:没有登陆界面、没有区分用户身份及密码服务、数据库设计相对简单等。
这些设计中的存在问题,本人将在日后进一步修改,以便让程序的设计更加完善。
参考文献
[1] 萨师煊、王珊. 数据库系统概论(第三版)[M]. 北京:高等教育出版社
[2]张广彬、梦红蕊、张永宝编著.Java课程设计案例精编. 北京:清华大学出版社下载本文