资源描述
课 程 设 计
课程名称 数据库系统概论
题目名称 学生学籍信息管理系统
学生学院 计算机学院
专业班级
学 号
学生姓名
指导教师 左 亚 尧
2013年 1 月 17 日
目录
1 引 言 3
1.1 课程设计选题 3
1.2 课程设计的目的 3
1.3 本选题的设计背景 3
2 系统分析与设计 3
2.1 功能及性能分析 3
2.1.1 功能需求 3
2.1.2 工作流程图 4
2.2 系统的开发运行环境 4
2.3 系统总体设计 4
2.3.1 系统设计思想 4
2.3.2 学校工作流程分析 5
2.3.3 用户具体需求分析 5
2.3.4 系统设计分析 5
2.3.5 系统权限分析 5
3 数据库设计 5
3.1 数据库概念结构 6
3.2 E-R图 6
3.3 数据库逻辑结构 7
3.4 流程图 7
3.5 数据字典 9
3.6 物理结构设计 10
3.7 安全性设计 12
4 详细设计与实现 12
4.1 系统设计例图 12
4.2 登陆模块 16
5 总结 19
6 参考文献 19
7 附录 19
7.1 程序清单 20
1 引 言
1.1 课程设计选题
《学生学籍信息管理系统》
1.2 课程设计的目的
通过数据库系统课程设计,熟悉了SQL SERVER数据库管理系统的结构与组成;掌握了SQL SERVER数据库管理系统的应用技术和的使用;应用java程序设计,链接数据库,进行管理与维护。最终达到掌握数据库管理系统的使用和开发,提高分析问题、解决问题和实践应用能力。
1.3 本选题的设计背景
随着信息技术在管理上越来越深如而广泛的应用,管理信息系统的实施在技术上已经逐步成熟。管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。学生学籍管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学籍管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。作为计算机应用的一部分,使用计算机对学生学籍进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高学生学籍管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
本系统是一个典型的信息管理系统,主要完成对学生基本信息、班级信息、课程信息、成绩信息等多种数据信息的管理,包括数据库中表的录入、修改、删除等。系统还可以完成对各类信息的查询、录入、修改、删除等功能,其中学籍管理用户包括系统管理员、普通用户,普通用户包括教师和学生。
由于本系统管理的对象单一,都是学生,且每个数据内容具有较强的关联性,涉及的计算过程不是很复杂。因此,比较适合于采用数据库管理。
本系统是在Win 7 系统的环境下开发的,所采用的开发语言是Java语言,使用的开发工具为: MyEclipse6.0,采用Microsoft SQL Server 2008数据库管理系统。
2 系统分析与设计
2.1 功能及性能分析
2.1.1 功能需求
在一些学校等机构,随着学生数量的不断增加,学生的信息不断增多,人工管理信息的难度也越来越大。而且效率也是很低的。所以如何自动高效地管理信息是这些年来许多人所研究的。
随着这些年电脑计算机的速度质的提高,成本的下降,IT互联网大众趋势的发展。我们使用电脑的高效率才处理数据信息成为可能。 学生学籍管理系统的出现,正是管理人员与信息数据,计算机的进入互动时代的体现。友好的人机交互模式,清晰简明的图形界面,高效安全的操作使得我们对成千上万的信息的管理得心应手。
学生学籍管理系统,以SQL数据库作为后台信息存储,Java作为前台系统的语言。提供了对学生信息添加,查询,修改,删除的功能。实现了最基本的信息管理。
2.1.2 工作流程图
2.2 系统的开发运行环境
本系统开发平台: JAVA + SQL Server 2008
本系统运行环境: Win 7
2.3 系统总体设计
2.3.1 系统设计思想
1.采用现有的资源,先进的管理系统开发方案,充分利用学校现有的资源, 减少开发中的时间和财力、物力、提高系统开发的水平和应用效果。
2.系统满足学校的需求,例如学生信息的录入、查询、更新等。管理员对用户的查询、增加、删除等。
3.系统应具备数据库维护功能,及时根据用户需求进行数据添加、删除、修改等操作。
2.3.2 学校工作流程分析
学校工作总体规划由教务人员在学生学籍信息管理系统中完成对运行教务处所需的基本数据的维护,包括这些信息的增加、修改及对各项信息的变动都将在这进行操作。
新的学年,教务人员首先加入年级信息,然后编排班级,再对来校学生进行基本的信息录入,新生入学后由教务人员在学籍系统中完成新学生信息的维护。
在每个学期开始,教务处根据班级的情况,以班为单位,为每个班级安排一个辅导员及,并对各科老师进行安排。
每举行一次考试后由任课老师对本科的成绩进行录入,上交教务处,汇总,并进行排名,由教务处再进行汇总,并对各班级各科成绩及总成绩进行排名。
教务处、辅导员及任课老师跟据实际情况对录入的成绩进行维护,各位同学对以上录入的信息可以跟据自己的需要进行适当的查询。
2.3.3 用户具体需求分析
普通用户:对各科成绩的查询及查看所有学生的成绩以及所有学生的信息,修改用户密码。
系统管理员:能够浏览所有用户信息,能添加删除用户,修改密码,新生入学还能够添加修改新生的学籍信息,删除毕业生的学籍信息,对所有院系的课程进行安排,能够进行各班级管理,还能对学生成绩进行添加、修改、查询等管理。
2.3.4 系统设计分析
本系统功能主要分为六大类:
用户管理:用于对用户的添加删除,赋予不同权限及对用户密码的修改及查询。
课程管理:用于对各学期课程的开设、修改、查询和删除。
成绩管理:用于对成绩的添加、修改、查询和删除。
班级管理:用于对班级的添加、修改、查询和删除。
帮助信息:用于对本系统的具体操作进行详解。
2.3.5 系统权限分析
权限功能:为用户设置权限功能,可分为普通用户,系统管理员。普通用户只是查询不能修改,系统管理员能修改、删除所有信息。
录入功能:系统没有为普通用户提供相应的录入功能,为系统管理员提供对所有信息的录入功能。
查询功能:为所有用户提供查询的功能,可查询允许范围内的所有信息。
维护功能:为普通用户提供查询及相应的修改功能,为系统管理员提供对所有信息的修改删除功能。
帮助功能:能帮助初次使用者对本系统的应用及处理常见的问题。
退出功能:结束并关闭系统。
3 数据库设计
3.1 数据库概念结构
概念结构的实际是整个数据库设计的关键,这个阶段主要的目标是通过对用户需求进行综合、归纳与抽象,形成一个独立于DBMS的概念模型(E-R图)。
它的主要特点是:1.能真实、充分地反映现实世界,包括事物与事物之间的联系,能满足用户对数据的处理要求,是对现实世界的一个真实模型;2.易于理解,因此可以用它和不熟悉计算机的用户交换意见;3.易于更改,当应用环境和应用要求改变时,容易对概念模型修改和扩充;4.易于向关系、网状、层次等各种数据模型转换。
3.2 E-R图
1. 分E-R图:
e
图3.1 分E-R图
2. 系统的总体E-R图:
3.3 数据库逻辑结构
这个阶段的任务就是把概念结构设计阶段设计好的基本E-R图转换为与DBMS所支持的数据模型相符合的逻辑结构。在这个阶段里,该系统的目标就是把基本的E-R图转换成关系数据模型。通过转换,得到的所需的数据表如下,其中,有下划线的属性为主键。
学生(姓名,性别,学号,班级号,出生日期,入学日期,家庭住址,备注)
班级(班级号,年级,辅导员,自习室 )
用户(用户名,密码,权限)
课程(课程名,课程编号,课程类型,课程描述)
成绩(学生姓名,学号,班级名称,课程名,分数)
3.4 流程图
1. 系统流程图
图3.2 系统流程图
2. 分模块流程图
(1)录入模块流程图
图3.3 录入模块流程图
(2)系统管理模块流程图
图3.4 系统维护模块流程图
(3) 查询模块流程图
图3.5 查询模块流程图
3.5 数据字典
3.6 物理结构设计
根据逻辑关系模型可直接设计基于某种数据库管理系统支持的物理结构,我们知道关系数据库是由表构成的,所以依据系统用户信息、学生基本信息、班级信息、课程信息和成绩信息在数据库中建立相应的表。
本系统采用的后台数据库是Microsoft SQL Server 2008数据库系统,根据学籍管理系统的数据字典,设计出学籍管理系统数据库中各个数据表,本数据库名称为“student”,其中包含五张表,它们分别是学生基本信息数据表,班级信息数据表,课程信息数据表,成绩信息数据表,用户登陆信息数据表。
1. 学生基本信息数据表,包括学生的学号、姓名、性别、生日、家庭地址、联系电话,入学日期,还有所在的系与班级,便于管理和查询学生的基本信息。
表3.6.1 学生基本信息数据表
2. 班级信息数据表,包括班级号、年级、辅导员、自习教室,设置为字符型。
表3.6.2 班级数据信息表
3. 班级信息数据表,包括班级名称及所在的年级,均设为字符型。
表3.6.3 班级信息数据表
4. 课程信息数据表,包括课程的编号、课程名称、课程类型及一些课程描述。
表3.6.4 课程信息数据表
5. 成绩信息数据表,包括考试科目编号、姓名、班级、学号、分数,便于成绩查询。
表3.6.5 成绩信息数据表
6. 用户信息数据表,包括用户名、密码以及用户的权限。
表3.6.6 用户信息数据表
3.7 安全性设计
该系统的用户只有两种,一种是普通用户,对各科成绩的查询及查看所有学生的成绩以及所有学生的信息,修改用户密码。另一种系统管理员,能够浏览所有用户信息,能添加删除用户,修改密码,新生入学还能够添加修改新生的学籍信息,删除毕业生的学籍信息,对所有院系的课程进行安排,能够进行各班级管理,还能对学生成绩进行添加、修改、查询等管理。,管理员具有对数据库操作的所有权限。
4 详细设计与实现
4.1 系统设计例图
用例图是对系统需求的描述,表达了系统的功能和所提供的服务,包括学生信息管理子系统、系统信息管理子系统、课程管理子系统、班级管理子系统、成绩管理子系统,如图所示:
活动图:
活动图可以用来描述工作流和并发处理行为,表达从一个活动到另一个活动的控制流,描述的是响应内部处理的对象类的行为。在本系统中,首先登陆学籍管理系统,输入其用户名和密码,若用户名和密码有误则返回,否则进入下一步,普通用户和管理员用户的功能各不同相同。如图2.20所示。
系统活动图
数据流图
本系统从总体上分为系统信息管理、学生信息管理、课程管理、班级管理和成绩管理五大部分。每个模块有自己的作用。下面的各模块功能流图就是由各功能之间的关系而得出的。
1. 系统管理数据流图
系统管理数据流图
2. 学生信息数据流图
学生信息数据流图
3. 课程管理数据流图
课程管理数据流图
4. 班级管理数据流图
班级管理数据流图
5. 成绩管理数据流图
成绩管理数据流图
从以上数据流图中可以看出学生信息管理系统所需完成具体的功能:
系统管理模块: 用户的添加、删除、浏览及权限的赋予。
学生信息管理模块:输入学生基本信息,并可以对学生信息进行添加、查询、修改、删除。还可以关键字查询并从数据库里调出的学生基本信息.
输出学生基本信息,学号、班号、姓名查询的信息结果。
班级信息管理模块:输入班号、教室号、班主任等信息,并可以对班级信息进行添加、修改、查询、删除。包括班号、教室号、班主任、年级的录入及修改。
输出班号、教室号、班主任年级等信息。
成绩信息管理模块:输入成绩信息,并可以对成绩信息进行添加、查询、修改、删除。还可以用关键字查询并调出数据库里的学生基本成绩信息的修改、删除等。
输出查询的学生成绩信息。
课程信息管理模块:输入课程的基本信息,并可以对课程信息进行添加、修改、删除及课程设置。课程设置能够对各年级的课程进行分类。划分学期所学的课程。
输出课程的基本信息、年级及学期中所要学的课程等。
4.2 登陆模块
4.2.1. 程序基本界面:
用户有两个111和222,密码都是123
添加一个学生数据:
查看数据库添加的内容:
修改其中一个数据:
显示修改后的数据库:
删除其中一个数据:
5 总结
课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
回顾这次学生学籍信息管理系统的设计,从选题,到需求分析、设计、编码实现、测试等,报告的撰写,这一系列连贯的过程,至今我仍感慨颇多,收获也很多。但是可以学到很多很多的新东西,同时不仅可以巩固以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,书本上和课堂上的东西远远不能满足我们需要,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到的问题,可以说得是困难重重,毕竟我们是第一次课程设计,难免会遇到过各种各样的问题,比如数据库与java的连接,数据的创建,首先要画出E-R图,然后分析内在联系,接着是逻辑结构设计,这个阶段的任务就是把概念结构设计阶段设计好的基本E-R图转换为与DBMS所支持的数据模型相符合的逻辑结构。在这个阶段里,该系统的目标就是把基本的E-R图转换成关系数据模型。画出流程图,分析数据字典,物理结构设计,创建各种表,这些都要静心做,认真思考。还有就是java界面的设计,先是创建各个模拟界面,同时把各项功能连接数据库,通过界面可以修改数据库。
通过这次学生学籍信息管理系统的设计,让我了解了更多,一个程序不仅仅是写代码,还需要先做需求的分析,数据的设计,用户界面的设计等等。同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固等等。经过这次的课程设计我会在以后的时间里努力的学习一些课外的知识不能仅仅局限在课堂上。通过这次设计我在学会独立思考的同时,更懂得了要虚心向同学请教,这样可以达到事半功倍的效果。
6 参考文献
【1】张海藩. 软件工程导论. 清华大学出版社. 2008年.
【2】刘振安,董兰芳,刘燕君. 面向对象技术与UML.机械工业出版社.2008年.
【3】印旻,王行言,Java语言与面向对象程序设计.清华大学出版社. 2007年.
【4】王珊,萨师煊. 数据库系统概述. 高等教育出版社. 2009年.
7 附录
7.1 程序清单
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;
class DataBase { // DataBase类
public void Add(String xh, String xm, String xb, String xy, String bj,
String jg) throws SQLException {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 学号='"
+ xh + "'");
r.last();
if (r.getRow() == 1) {
JOptionPane.showMessageDialog(null, "该学号的学生信息已存在");
} else if (xh.equals("")) {
JOptionPane.showMessageDialog(null, "学号不能为空");
}
else {
s.executeUpdate(" insert into 学籍管理系统 values ('" + xh + "','"
+ xm + "','" + xb + "','" + xy + "','" + bj + "','"
+ jg + "')");
s.close();
c.close();
JOptionPane.showMessageDialog(null, "<html>" + "学号:" + xh
+ "<br>" + "姓名:" + xm + "<br>" + "性别:" + xb + "<br>"
+ "学院:" + xy + "<br>" + "班级:" + bj + "<br>" + "籍贯:"
+ jg + "<br> 学生记录添加成功!");
}
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "数据添加异常!");
}
}
public void DisplayAll(ResultSet r) {
try {
r.last();
System.out.println("数据库表共有" + r.getRow() + "行记录");
r.beforeFirst();
while (r.next()) {
System.out.print("第" + r.getRow() + "行记录:");
System.out.print(" 学号为:" + r.getString("学号"));
System.out.print(" 姓名为:" + r.getString("姓名"));
System.out.print(" 性别为:" + r.getString("性别"));
System.out.print(" 学院为:" + r.getString("学院"));
System.out.print(" 班级为:" + r.getString("班级"));
System.out.println(" 籍贯为:" + r.getString("籍贯"));
}
} catch (Exception e) {
}
}
public void DisplayOne(String str22) throws Exception {
try {
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 学号='"
+ str22 + "'");
r.last();
int cc = r.getRow();
if (cc == 0) {
JOptionPane.showMessageDialog(null, "未查询到相关信息!");
} else {
r.beforeFirst();
while (r.next()) {
JOptionPane.showMessageDialog(null,
"<html>" + "学号:" + r.getString("学号") + "<br>"
+ "姓名:" + r.getString("姓名") + "<br>"
+ "性别:" + r.getString("性别") + "<br>"
+ "学院:" + r.getString("学院") + "<br>"
+ "班级:" + r.getString("班级") + "<br>"
+ "籍贯:" + r.getString("籍贯")
+ "<br> 已查询到相关记录!");
}
}
} catch (Exception e) {
}
}
public void DeleteXh(String str11) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 学号='"
+ str11 + "'");
r.last();
if (r.getRow() == 1) {
s.executeUpdate("delete from 学籍管理系统 where 学号='" + str11 + "'");
JOptionPane.showMessageDialog(null, "学生记录删除成功!");
} else {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
} catch (Exception e) {
}
}
public void DeleteXm(String str13) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 姓名='"
+ str13 + "'");
r.last();
if (r.getRow() == 1) {
s.executeUpdate("delete from 学籍管理系统 where 姓名='" + str13 + "'");
JOptionPane.showMessageDialog(null, "学生记录删除成功!");
} else {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
} catch (Exception e) {
}
}
public void UpdateXh(String xg, String str15, String str16) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 学号='"
+ xg + "'");
r.last();
if (r.getRow() == 1) {
s.executeUpdate("update 学籍管理系统 set " + str15 + "='" + str16
+ "' where 学号='" + xg + "'");
JOptionPane.showMessageDialog(null, "学生记录修改成功!");
} else {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
}
public void UpdateXm(String str18, String str19, String str20) {
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统 where 姓名='"
+ str18 + "'");
r.last();
if (r.getRow() == 1) {
s.executeUpdate("update 学籍管理系统 set " + str19 + "='" + str20
+ "' where 姓名='" + str18 + "'"); // 直接执行SQL语句修改
JOptionPane.showMessageDialog(null, "学生记录修改成功!");
} else {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
;
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "学籍系统中并无相关记录!");
}
}
}
class J_ActionListener1 extends JFrame implements ActionListener // 创建J_ActionListener1类监听功能选项面板"显示已有学生信息"的按钮
{
public void actionPerformed(ActionEvent e) {
JButton b1 = (JButton) e.getSource();
Object aa = JOptionPane.showInputDialog(null, "请选择按何种方式查询", "选择",
JOptionPane.QUESTION_MESSAGE, null, new String[] { "显示所有学生记录",
"查询某个学生记录" }, "显示所有学生记录");
if (aa == "显示所有学生记录") {
try {
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
ResultSet r = s.executeQuery("select * from 学籍管理系统");
DataBase a = new DataBase();
a.DisplayAll(r);
} catch (SQLException e1) {
}
} else {
try {
Connection c = DriverManager
.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=StudentManager",
"sa", "125521");
Statement s = c.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
DataBase a = new DataBase();
String str11 = JOptionPane.showInputDialog("请输入要查询的记录的学号");
a.DisplayOne(str11);
} catch (Exception e1) {
}
}
}
}
class J_ActionListener2 extends JFrame implements ActionListener {
public void actionPerformed(ActionEvent e) {
JButton b2 = (JButton) e.getSource();
try {
new J_ActionListener6();
} catch (Exception e2) {
}
}
}
class J_ActionListener6 extends J_ActionListener2 implements ActionListener {
DataBase a = new DataBase();
JTextField jtf1 = new JTextField();
JT
展开阅读全文