资源描述
黄 淮 学 院
信息工程学院
数据库系统原理与应用课程设计报告
题 目:学生成绩管理系统设计与实现
指导老师: 张 银 玲
学 号:1434120137
姓 名:齐顺彪
班 级: 软件1401B
时 间:2016—11
分 数:
一.课程设计目的
数据库课程设计是为数据库原理及应用课程而独立开设的实践性课程,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。通过本实验达到以下目的:
(1) 培养学生具有C/S和B/S/S模式的数据库应用软件系统的设计和开发能力.
(2) 熟练掌握一种数据库系统(如SQL Server)的使用.
(3) 熟练掌握一种数据库应用软件开发工具(如PowerBuilder、ASP、VB。NET、JSP、Java、SSH)的使用。
(4) 通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力.
二.课程设计任务与要求:
1、任务:
学生成绩管理系统问题描述:
1) 全校学生上万名。
2) 每个学生都有学号,姓名等各种信息.
3) 每个学生每学期都会学习多门课程,拥有多门成绩,不同的专业学习的课程也不同,对应的成绩也不相同。
4) 对学生成绩的管理是一件非常复杂的事情。
2、设计要求:
1) 实现教师对学生录入新修课程的成绩.
2) 实现对所有学生成绩精细查询和分类统计.
3) 能够按学号,姓名,班级等分类查询学生成绩。
4) 能够对成绩进行精确,比较,范围,无成绩查找。
5) 能够进行学生信息管理.
6)设计一完整的数据库.要求掌握数据库的设计的每个步骤;掌握数据设计各阶段的输入、输出、设计环境、目标和方法;熟练的使用SQL语言实现数据库以及数据库重要对象的建立、应用和维护。
三.课程设计说明书
1 需求分析
(1)功能需求
学生成绩管理系统需要完成功能主要有:
学生管理:主要是对学生进行统一管理,主要操作有查询、新增、修改、删除、导出,查看详情。
查询学生:可以根据学号、姓名、班级、专业、院系等进行查询,显示所有符合条件的学生.
修改学生:修改选中的学生;
删除学生:删除选中的学生;
导出学生:将学生列表导出到Excel表格文档中,供用户下载查看;
查看学生详情:查看选中的学生详情;
新增学生:既录入新的学生
教师管理:主要是对教师进行统一管理,主要操作有查询、新增、修改、删除、导出,查看详情。
查询教师:可以根据工号、姓名、院系等进行查询,显示所有符合条件的教师。
修改教师:修改选中的教师;
删除教师:删除选中的教师;
导出教师:将教师列表导出到Excel表格文档中,供用户下载查看;
查看教师详情:查看选中的教师详情;
新增教师:既录入新的教师
院系管理:主要是对院系进行统一管理,主要操作有查询、新增、修改、删除、查看详情。
专业管理:主要是对专业进行统一管理,主要操作有查询、新增、修改、删除、查看详情。
班级管理:主要是对班级进行统一管理,主要操作有查询、新增、修改、删除、查看详情。
课程管理:主要对课程的统一管理安排,主要操作有查询、新增、修改、删除、查看详情。
学生成绩管理:主要按教师工号、学生学号、学生姓名、班级、精确成绩、比较成绩、成绩范围、
无成绩,成绩集合查找成绩信息。删除摸个学生的成绩,批量修改学生成绩,
批量录入学生成绩。
2 概要设计
(1)实体属性图及实体联系(E—R)图
根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。
图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体.用E—R图一一描述这些实体。
图2-1 学生类别实体及其属性图 图2-2 教师类别实体及其属性
图2—3 课程类别实体及其属性 图2-4 院系类别实体及其属性
图2—5 专业类别实体及其属性 图2-6 班级类别实体及其属性
图2—7 总的信息实体E—R图
3逻辑设计
(1)关系模式
学生类(学号,姓名,年龄,性别,入学时间,专业,院系,班级,家庭地址,宿舍号,政治
面貌,身份证号)
院系类(编号,名称,位置,教师人数,学生人数,开班时间,院系精神)
专业类(编号,名称,人数,开始时间,所属院系,辅导员)
班级类(编号,名称所在教室,人数,班长,所属专业)
宿舍类(楼号,管理员姓名,管理员电话,空闲房间数,在宿人数)
辅导员类(姓名,联系电话,家庭地址,家庭电话,学历,管理班级)
成绩类(学号,课程号,学期,学年,平时成绩,考试成绩,实验成绩,总成绩)
课程类(课程号,课程名,考试类别,开课学年,开课学期,理论学时,实验学时,总学时,
平时成绩比率,实验成绩比率,期末成绩比率)
教师类(工号,姓名,性别,年龄,入职时间,婚姻状况,联系方式,所属院系,家庭地址,住宅电话)
4 查询成绩关系图:
图4—1查询成绩关系图
5 物理设计
数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法.所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。主要体现在后者。
(1)建立索引:
①对book_style表在bookstyleno属性列上建立聚集索引,在bookstyle属性列上建立非聚集索引。
②对System_book表在bookid上建立聚集索引,在bookname、bookstyleno、boookauther、bookpub上建立非聚集索引。
③对return_record表在bookid上建立聚集索引,在readerid上建立非聚集索引
④对reader_fee表在bookid上建立聚集索引,在readerid上建立非聚集索引.
⑤对system_reader表在readerid列上建立聚集索引
⑥对boorow_record表在bookid上建立聚集所以,在readerid上建立非聚集索引
⑦对system_Administrator表在administratorid列上建立聚集索引。
⑧对system_Super_Administrator表在superadministratorid 上建立聚集索引.
(2)存储结构
确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置.
将日志文件和数据库对象(表、索引等)分别放在不同的磁盘可以改进系统的性能。所以系统将日志文件和数据文件存放在不同磁盘上.
6数据库建立
(1)创建数据库
create database ssms
on
(name=’ssms_data’,
filename=’d:\2016qiu\ssms.mdf',
size=100,
maxsize=5000,
filegrowth=10
)
log on
(name=’ssms_log’,
filename=’d:\2016qiu\ssms。ldf’,
size=200,
maxsize=100000,
filegrowth=10);
Go
(2)管理员表建立
CREATE TABLE administrator (
aid varchar(30) primary key,
aPassword varchar(40) NOT NULL,
aName varchar(10)
) go
——(3)教师表建立
CREATE TABLE teacher(
tid varchar(8) primary key check (tid like ’[0—9][0-9][0—9][0-9][0—9][0-9][0—9][0—9]'),-—教师编号
tPassword varchar(20) NOT NULL,—-密码
tName varchar(10) NOT NULL,-—教师姓名
tSex varchar(2) ,—-教师性别
tEducation varchar(10) ,——学历
tTitle varchar(10) DEFAULT NULL,--职称
tTelephone varchar(11) ,-—电话
tEmail varchar(20) DEFAULT NULL,-—邮箱
did char(2) ,-—所在系编号
tBirthday datetime DEFAULT NULL,--出生日期
tPhotoPath varchar(255) DEFAULT NULL,——照片地址
CONSTRAINT fk_teacher_department FOREIGN KEY (did) REFERENCES department (did) on delete cascade on update cascade
)
go——(4)学生表表建立
CREATE TABLE student(
sid char(10) primary key ,
-—学号(用户名),学号由10位数字组成,1—2位代表入学年份,
--3-4位代表院系,7-8位代表班级序号,9-10是学生在班级中的序号。
sPassword varchar(20) NOT NULL,-—密码
sName varchar(10) NOT NULL,——姓名
sClassName varchar(30) NOT NULL,——班级名称
sSex char(2) ,--性别
sBirthday datetime DEFAULT NULL,——出生日期
sPolitical varchar(10) DEFAULT NULL,—-政治面貌
fresh bit DEFAULT 1 , ——是否是在校生
sPhotoPath varchar(255) DEFAULT NULL,——照片所在路径
sEmail varchar(30) DEFAULT NULL-—电子邮箱
)
go
(5)院系表建立
create table department
(did char(2) primary key ,—-系编号
dName varchar(60) not null,——系名称
dOfficePlace varchar(60) ,--办公地点
dTelephone char(11) —-办公电话
)
Go
(6)专业表建立
create table Professional(
pid varchar(7) primary key,——专业代码
pName varchar(40) unique not null,——专业名称
lengthOfSchooling int,-—修业年限
disciplines varchar(20), —-学科门类
professionalCategory varchar(26),-—专业门类
did char(2) ,—-所属院系编号
)
Go
-—(7)班级表建立*/
create table class(
cName varchar(30) primary key ,——班级名程,B表示本科
cNumber int null,——人数
pid varchar(7),-—专业编号
constraint fk_class_professioal foreign key(pid) references professional(pid) on delete cascade on update cascade
)
Go
——(8) 课程表表建立
CREATE TABLE course(
cid varchar(10) PRIMARY KEY,——课程编号
cName varchar(60) unique ,——课程名
cType varchar(10) DEFAULT NULL,—-课程属性
cExamtype varchar(10),——考试类别
cOpenyear tinyint, --开课学年
cOpenterm tinyint,——开课学期
cTheoryHours int,--理论学时
cExperimentalHours int,--——实验学时
cTotalHours int ,——总学时
cCredit int DEFAULT NULL,——学分
cUsualResultsRatio numeric(3,1) null,-—平时成绩比率
cExperimentalResultsRatio numeric(3,1) null,—-实验成绩比率
cFinalAchievementRatio numeric(3,1) null——期末成绩比率
)
Go
-—(9)成绩表建立
CREATE TABLE score(
academic_year varchar(20) DEFAULT NULL,——学年
semester varchar(10) DEFAULT NULL,——学期
sid char(10) ,-—学号
cid varchar(10) ,—-课程号
tid varchar(8) ,
usualResults int DEFAULT NULL,—-平时成绩
examResults int DEFAULT NULL,——考试成绩
experimentalResults int DEFAULT NULL,-—实验成绩
totalScore int DEFAULT NULL,——总成绩
constraint pk_score PRIMARY KEY (sid,cid),
CONSTRAINT fk_t_score_stu FOREIGN KEY (sid) REFERENCES student (sid) ,
CONSTRAINT fk_t_score_course FOREIGN KEY (cid) REFERENCES course (cid) ,
CONSTRAINT fk_t_score_teacher FOREIGN KEY (tid) REFERENCES teacher (tid)
)go
(10)授课关系表创建
CREATE TABLE teaching (
openYear varchar(20) ,——授课学年
openTerm varchar(10),——授课学期
taddress varchar(30) DEFAULT NULL,-—授课地点
ttime varchar(30) DEFAULT NULL,-—授课时间
tid varchar(8) ,-—教师编号
cid varchar(10) ,-—课程编号
pid varchar(7),——专业编号
constraint pk_teaching primary key(openYear,openTerm,pid,tid,cid,ttime) ——on delete cascade on update cascade
)
7 数据库设计
学生表设计:
字段名
数据 类型
是否为空
说明
Stu_ID
Varchar(20)
Not null
学生学号
Stu_Name
Varchar(20)
Not null
学生姓名
Stu_Age
int(3)
Not null
学生年龄
Stu_Sex
Varchar(2)
Not null
学生性别
Stu_Tel
Varchar(20)
联系方式
Stu_Major
Varchar(20)
专业名称
Stu_Depart
Varchar(20)
院系名称
Stu_Class
Varchar(20)
班级名称
Stu_HomeAdd
Varchar(50
Not null
家庭地址
Stu_Dorm
Varchar(10)
学生宿舍
Stu_IDnum
Varchar(20)
Not null
身份证号
Stu_Face
Varchar(10)
Not null
政治面貌
Dep_ID
Varchar(10)
院系编号
Maj_ID
Varchar(10)
专业编号
Class_ID
Varchar(10)
班级编号
院系表设计
字段名
数据类型
是否为空
级联
说明
Dep_ID
Varchar(10)
Not null
院系编号
Dep_Name
Varchar(20)
Not null
院系名称
Dep_Add
Varchar(30)
Not null
院系位置
Dep_Teanum
Varchar(5)
Not null
教师人数
Dep_Stunum
Varchar(5)
Not null
在校学生人数
Dep_Starttime
date
Not null
办院时间
Dep_jianjie
text
Not null
学院简介
Dep_Boss
Varchar(10)
Notnull
与院长表级联
院长
Dep_Num
Int
Notnull
院系序号
专业表设计:
字段名
数据类型
是否为空
级联
说明
Maj_ID
Varchar(10)
Not null
专业编号
Maj_Name
Varchar(20)
Not null
专业名称
Maj_Stunum
Varchar(5)
Not null
学生人数
Maj_Boss
Varchar(10)
Not null
辅导员
Dep_Name
Varchar(10)
Not null
院系名称
Dep_ID
Varchar(10)
Not null
与院系表级联
院系编号
Maj_Num
Int
Notnul
专业序号
Maj_jianjie
Text
专业简介
班级表设计:
字段名
数据类型
是否为空
级联
说明
Cla_Id
Varchar(10)
Not null
班级编号
Cla_Name
Varchar(10)
Not null
班级名称
Cla_Stunum
Int(5)
Not null
班级人数
Cla_lead
Varchar(5)
Not null
班长
Cla_Add
Varchar(10)
所在位置
Maj_Id
Varchar(10)
Not null
与专业表级联
专业编号
Maj_Name
Varchar(10)
Not null
专业名称
教师表设计:
字段名
数据类型
是否为空
级联
说明
Tea_Id
Varchar(20)
Not null
教师编号
Tea_Name
Varchar(10)
Not null
教师姓名
Tea_Sex
Varchar(2)
Not null
性别
Tea_Age
Varchar(5)
Not null
年龄
Tea_marred
Varchar(5)
Not null
婚姻状况
Tea_Tel
Varchar(20)
Not null
联系方式
Dep_Id
Varchar(10)
Not null
与院系表级联
院系编号
Dep_Name
Varchar(10)
Not null
院系名称
Home_Add
Varchar(50)
Not null
家庭地址
成绩表设计:
字段名
数据类型
是否为空
级联
说明
sco_Academic_year
Varchar(20)
Not null
开课年份
sco_Semester
Varchar(10)
Not null
开课学期
sco_Sid
Varchar(10)
Not null
学生学号
sco_Cid
Varchar(10)
Not null
课程编号
sco_Tid
Varchar(10)
Not null
教师编号
sco_UsualResults
Int
平时成绩
sco_ExamResults
Int
考试成绩
sco_ExperResults
Int
考试成绩
sco_TotalScore
int
综合成绩
(2)将已有成绩添加到成绩表中
insert into score values(’2014-2015’,’一’,'1334120101’,’2’,’20070769',90,87,85,null)
insert into score values(’2015-2016’,’一',’1334120101’,’3’,’20070755',92,83,80,null)
insert into score values(’2015—2016’,'一’,’1334120101’,’4','20070768’,78,80,75,null)
insert into score values(’2014-2015','一’,’1334120102’,'2’,’20070755',89,86,82,null)
insert into score values(’2015—2016',’一’,'1334120102’,'3',’20070755',98,88,92,null)
insert into score values('2015—2016’,’一’,'1434120101’,’1’,’20070768’,89,88,85,null)
insert into score values('2015—2016’,’一’,’1434120102’,'1',’20070768',78,68,88,null)
insert into score values(’2014—2015',’一’,’1334110101’,’2’,’20070755',90,91,93,null)
insert into score values('2015—2016',’一’,’1334110101',’4’,'20070768’,95,88,93,null)
insert into score values('2015—2016’,'一’,'1334110101’,'5’,'20070769',95,89,88,null)
insert into score values(’2014—2015’,’一’,'1334110102','2’,'20070755’,85,83,81,null)
insert into score values(’2015-2016',’一','1334110102’,’4’,’20070768',55,70,66,null)
insert into score values(’2015—2016’,'一’,’1334110102’,'5’,’20070769',60,75,68,null)
insert into score values('2015-2016’,'一’,’1434110101’,’1’,'20070768’,45,65,70,null)
insert into score values(’2015-2016’,'一’,’1434110102’,’1',’20070768',62,71,83,null)8 数据库用户权限管理
该系统设置四种类型的用户
(1) 管理员(administrator) 可以进行学生信息管理;
(2) 教师(teacher) :只能对学生成绩的管理和个人信息的查看。
(4) 学生(student):只能查看个人信息和个人成绩.
9、建立视图
-—--———-—-————建立查询成绩视图
SELECT dbo。Sco_info。sco_UsualResults, dbo。Sco_info。sco_ExamResults, dbo。Sco_info。sco_TotalScore, dbo。Stu_info。stu_Name, dbo.Stu_info。stu_ClassName, dbo.Tea_info。tea_Name,
dbo。Sco_info.sco_Academic_year, dbo.Sco_info。sco_Tid, dbo。Sco_info.sco_Cid, dbo.Cou_info.cou_Name, dbo.Sco_info。sco_Sid, dbo.Stu_info。stu_ClaId, dbo。Sco_info。sco_ExperResults
FROM dbo.Stu_info INNER JOIN
dbo.Sco_info ON dbo。Stu_info。stu_Id = dbo.Sco_info.sco_Sid INNER JOIN
dbo.Tea_info ON dbo。Sco_info.sco_Tid = dbo.Tea_info.tea_Id INNER JOIN
dbo。Cou_info ON dbo.Sco_info。sco_Cid = dbo。Cou_info.cou_Id
10 系统实现
(1) 系统功能模块图:
系统功能模块图如图10—1
图10—1系统功能模块图
(1)五个子系统的功能如下:
①登录子系统:
可以实现管理员,教师和学生登录
②查询成绩子系统:
主要用于管理员查询学生,其中查询包括按学生学号直接查询,按教师工号查询,按学生姓名查询,按班级查询(可选模糊查询)。成绩查询可以按成绩范围的要求查询.
③删除成绩子系统:
主要由教师进行学生成绩的清除.
④修改成绩子系统:
由教师修改学生成绩.
⑤录入成绩子系统:
由教师进行学生成绩的录入。
(2) 开发框架的选择:MVC框架
(3) M层与数据库的连接
连接数据库的主要方式。
①数据访问方式
采用JDBC的方式访问数据库.
JDBC访问数据库的过程
a)连接驱动,获得数据库链接
b)执行预sql语句
c) 关闭数据库的连接
具体实现代码如下:
package com。yq。datebasecon;
import java。sql.*;
publicclass datebasecon {
String DRIVER = "com。microsoft.sqlserver.jdbc.SQLServerDriver”;
String url=”jdbc:sqlserver://localhost:1433;databaseName=user”;
String dbname="sa”;
String dbpass="123456";
private Connection con = null;
protected PreparedStatement ps=null;
protected Statement st=null;
protected ResultSet rs=null;
public Connection getConnection() {
try {
System。out。println("开始导入驱动");
Class。forName(DRIVER);
System。out.println(”开始连接SqlServer数据库”);
con = DriverManager.getConnection(url, dbname,dbpass);
System。out.println("SqlServer数据库连接成功");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
returncon;
}
publicvoid closecon(){
try {
if(rs!=null){
rs。close();
}
if(st!=null){
st.close();
}
if(ps!=null){
ps。close();
}
if(con!=null){
con。close();
}
} catch (SQLException e) {
// TODO Auto—generated catch block
e.printStackTrace();
}
}
}
(4) 学生成绩管理模块的实现
图10—1学生成绩管理系统管理员登录界面图
图10-2 管理员登录首界面
图10-3 管理员查询学生成绩
图10—4 按学号查询学生
图10-5录入学生成绩
图10—6 查询学生成绩
实现代码:
protectedvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request。setCharacterEncoding("gbk”);
response.setCharacterEncoding(”gbk”);
HttpSession session = request.getSession();
String shenfen = (String)session.getAttribute(”shenfen”);//获得登录身份
String uid = (String)session.getAttribute("uname”);//获得登录账号
List〈scomod> scolist = null;
String selected = request。getParameter(”select”);
System.out。println(”selected:”+selected);
String content = request.getParameter("content”);
String type = request。getParameter("type”);
String minn = request。getParameter("min”);
String maxx = request.getParameter("max”);
String jsppath = ”scoManager”;
String jspname=”selectsco.jsp";
System.out。println(uid);
if(minn!=null&&maxx!=null){
intmin = Integer。parseInt(minn);
intmax = Integer。parseInt(maxx);
scolist = factory。getscoImpl()。getscobyfanwei(min, max);
}else{
if(content!=null&&content!=””){
if(type==null){
String select = selected.toString()。trim();
System。out。println(”查询内容:”+content);
switch(select。toString()。trim()){
case”sid”:
scolist = factory.getscoImpl()。getscobystuid(content);
break;
case"clas”:
scolist = factory。getscoImpl()。getscobyclanam(content);
break;
case”tea”:
scolist = factory。getscoImpl().getscobyteaname(content);
break;
case"course”:
scolist = factory。getscoImpl()。getscobycouname(content);
break;
}
}else{
String sotype = type.toString()。trim();
System。out.println(”查询条件:"+sotype);
switch(sotype){
case"jingque”:
scolist = factory.getscoImpl().getscobyjingque(content);
break;
case”bijiao”:
scolist = factory.getscoImpl().getscobybijiao(content);
break;
case”wuchengji”:
scolist = factory。getscoImpl()。getscobynull();
break;
}
}
}else{
if(shenfen。equals(”admin")){
scolist = factory。getscoImpl().getallsco();
}elseif(shenfen.equals(”tea”)){
scolist = factory.getscoImpl().getscobyteaid(uid);
if(scolist==null){
System.out。println(”查询为空”);
}
jspname="selectscobytea。jsp";
}else{
scolist = factory。getscoImpl()。getscobystuid(uid);
}
}
}
System。out.println(”list大小:”+scolist。size());
intpagemax=15;
intpagenum=0;
pa
展开阅读全文