1、黄 淮 学 院信息工程学院数据库系统原理与应用课程设计报告题 目:学生成绩管理系统设计与实现 指导老师: 张 银 玲 学 号:1434120137姓 名:齐顺彪班 级: 软件1401B时 间:201611 分 数:一课程设计目的数据库课程设计是为数据库原理及应用课程而独立开设的实践性课程,对于巩固数据库知识,加强学生的实际动手能力和提高学生综合素质十分必要。通过本实验达到以下目的:(1) 培养学生具有C/S和B/S/S模式的数据库应用软件系统的设计和开发能力.(2) 熟练掌握一种数据库系统(如SQL Server)的使用.(3) 熟练掌握一种数据库应用软件开发工具(如PowerBuilder、
2、ASP、VB。NET、JSP、Java、SSH)的使用。(4) 通过设计实际的数据库系统应用课题,进一步熟悉数据库管理系统的操作技术,提高动手能力,提高分析问题和解决问题的能力.二课程设计任务与要求:1、任务:学生成绩管理系统问题描述:1) 全校学生上万名。2) 每个学生都有学号,姓名等各种信息.3) 每个学生每学期都会学习多门课程,拥有多门成绩,不同的专业学习的课程也不同,对应的成绩也不相同。4) 对学生成绩的管理是一件非常复杂的事情。2、设计要求:1) 实现教师对学生录入新修课程的成绩.2) 实现对所有学生成绩精细查询和分类统计.3) 能够按学号,姓名,班级等分类查询学生成绩。4) 能够对
3、成绩进行精确,比较,范围,无成绩查找。5) 能够进行学生信息管理.6)设计一完整的数据库.要求掌握数据库的设计的每个步骤;掌握数据设计各阶段的输入、输出、设计环境、目标和方法;熟练的使用SQL语言实现数据库以及数据库重要对象的建立、应用和维护。三课程设计说明书1 需求分析(1)功能需求 学生成绩管理系统需要完成功能主要有:学生管理:主要是对学生进行统一管理,主要操作有查询、新增、修改、删除、导出,查看详情。查询学生:可以根据学号、姓名、班级、专业、院系等进行查询,显示所有符合条件的学生.修改学生:修改选中的学生;删除学生:删除选中的学生;导出学生:将学生列表导出到Excel表格文档中,供用户下
4、载查看;查看学生详情:查看选中的学生详情;新增学生:既录入新的学生教师管理:主要是对教师进行统一管理,主要操作有查询、新增、修改、删除、导出,查看详情。查询教师:可以根据工号、姓名、院系等进行查询,显示所有符合条件的教师。修改教师:修改选中的教师;删除教师:删除选中的教师;导出教师:将教师列表导出到Excel表格文档中,供用户下载查看;查看教师详情:查看选中的教师详情;新增教师:既录入新的教师院系管理:主要是对院系进行统一管理,主要操作有查询、新增、修改、删除、查看详情。专业管理:主要是对专业进行统一管理,主要操作有查询、新增、修改、删除、查看详情。班级管理:主要是对班级进行统一管理,主要操作
5、有查询、新增、修改、删除、查看详情。课程管理:主要对课程的统一管理安排,主要操作有查询、新增、修改、删除、查看详情。学生成绩管理:主要按教师工号、学生学号、学生姓名、班级、精确成绩、比较成绩、成绩范围、 无成绩,成绩集合查找成绩信息。删除摸个学生的成绩,批量修改学生成绩, 批量录入学生成绩。2 概要设计(1)实体属性图及实体联系(ER)图根据1)所要实现的功能设计,可能建立它们之间的关系,进而实现逻辑结构功能。图书管理信息系统可以划分的实体有:书籍类别信息实体、读者信息实体、书籍信息实体、借阅记录信息实体,归还记录信息实体.用ER图一一描述这些实体。图2-1 学生类别实体及其属性图 图2-2
6、教师类别实体及其属性 图23 课程类别实体及其属性 图2-4 院系类别实体及其属性 图25 专业类别实体及其属性 图2-6 班级类别实体及其属性图27 总的信息实体ER图3逻辑设计(1)关系模式学生类(学号,姓名,年龄,性别,入学时间,专业,院系,班级,家庭地址,宿舍号,政治面貌,身份证号)院系类(编号,名称,位置,教师人数,学生人数,开班时间,院系精神)专业类(编号,名称,人数,开始时间,所属院系,辅导员)班级类(编号,名称所在教室,人数,班长,所属专业)宿舍类(楼号,管理员姓名,管理员电话,空闲房间数,在宿人数)辅导员类(姓名,联系电话,家庭地址,家庭电话,学历,管理班级)成绩类(学号,课
7、程号,学期,学年,平时成绩,考试成绩,实验成绩,总成绩)课程类(课程号,课程名,考试类别,开课学年,开课学期,理论学时,实验学时,总学时, 平时成绩比率,实验成绩比率,期末成绩比率)教师类(工号,姓名,性别,年龄,入职时间,婚姻状况,联系方式,所属院系,家庭地址,住宅电话)4 查询成绩关系图:图41查询成绩关系图5 物理设计数据库物理设计阶段的任务是根据具体计算机系统(DBMS和硬件等)的特点,为给定的数据库模型确定合理的存储结构和存取方法.所谓的“合理”主要有两个含义:一个是要使设计出的物理数据库占用较少的存储空间,另一个对数据库的操作具有尽可能高的速度。主要体现在后者。(1)建立索引:对b
8、ook_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上建立非
9、聚集索引对system_Administrator表在administratorid列上建立聚集索引。对system_Super_Administrator表在superadministratorid 上建立聚集索引.(2)存储结构确定数据库的存储结构主要指确定数据的存放位置和存储结构,包括确定关系、索引、日志、备份等的存储安排及存储结构,以及确定系统存储参数的配置. 将日志文件和数据库对象(表、索引等)分别放在不同的磁盘可以改进系统的性能。所以系统将日志文件和数据文件存放在不同磁盘上.6数据库建立(1)创建数据库create database ssmson (name=ssms_data,f
10、ilename=d:2016qiussms.mdf,size=100,maxsize=5000,filegrowth=10)log on(name=ssms_log, filename=d:2016qiussms。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 te
11、acher( tid varchar(8) primary key check (tid like 090-9090-9090-90909),-教师编号 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 c
12、har(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位数字组成,12位代表入学年
13、份, -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
14、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
15、,专业名称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 profess
16、ional(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
17、,-实验学时 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) DEFA
18、ULT 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)
19、 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,-授
20、课地点 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_IDVarchar(20)Not null学生学号Stu_NameVarchar(20)Not null学生
21、姓名Stu_Ageint(3)Not null学生年龄Stu_SexVarchar(2)Not null学生性别Stu_TelVarchar(20)联系方式Stu_MajorVarchar(20)专业名称Stu_DepartVarchar(20)院系名称Stu_ClassVarchar(20)班级名称Stu_HomeAddVarchar(50Not null家庭地址Stu_DormVarchar(10)学生宿舍Stu_IDnumVarchar(20)Not null身份证号Stu_FaceVarchar(10)Not null政治面貌Dep_IDVarchar(10)院系编号Maj_IDVar
22、char(10)专业编号Class_IDVarchar(10)班级编号院系表设计字段名数据类型是否为空级联说明Dep_IDVarchar(10)Not null院系编号Dep_NameVarchar(20)Not null院系名称Dep_AddVarchar(30)Not null 院系位置Dep_TeanumVarchar(5)Not null教师人数Dep_StunumVarchar(5)Not null在校学生人数Dep_StarttimedateNot null办院时间Dep_jianjietextNot null学院简介Dep_BossVarchar(10)Notnull与院长表级联
23、院长Dep_NumIntNotnull院系序号专业表设计:字段名数据类型是否为空级联说明Maj_IDVarchar(10)Not null专业编号Maj_NameVarchar(20)Not null专业名称Maj_StunumVarchar(5)Not null学生人数Maj_BossVarchar(10)Not null 辅导员Dep_NameVarchar(10)Not null院系名称Dep_IDVarchar(10)Not null与院系表级联院系编号Maj_NumIntNotnul专业序号Maj_jianjieText专业简介班级表设计:字段名数据类型是否为空级联说明Cla_IdV
24、archar(10)Not null班级编号Cla_NameVarchar(10)Not null班级名称Cla_StunumInt(5)Not null班级人数Cla_leadVarchar(5)Not null班长Cla_AddVarchar(10)所在位置Maj_IdVarchar(10)Not null与专业表级联专业编号Maj_NameVarchar(10)Not null专业名称教师表设计:字段名数据类型是否为空级联说明Tea_IdVarchar(20)Not null教师编号Tea_NameVarchar(10)Not null教师姓名Tea_SexVarchar(2)Not n
25、ull性别Tea_AgeVarchar(5)Not null年龄Tea_marredVarchar(5)Not null婚姻状况Tea_TelVarchar(20)Not null联系方式Dep_IdVarchar(10)Not null与院系表级联院系编号Dep_NameVarchar(10)Not null院系名称Home_AddVarchar(50)Not null家庭地址成绩表设计:字段名数据类型是否为空级联说明sco_Academic_yearVarchar(20)Not null开课年份sco_SemesterVarchar(10)Not null开课学期sco_SidVarcha
26、r(10)Not null学生学号sco_CidVarchar(10)Not null课程编号sco_TidVarchar(10)Not null教师编号sco_UsualResultsInt平时成绩sco_ExamResultsInt考试成绩sco_ExperResultsInt考试成绩sco_TotalScoreint综合成绩(2)将已有成绩添加到成绩表中insert into score values(2014-2015,一,1334120101,2,20070769,90,87,85,null) insert into score values(2015-2016,一,13341201
27、01,3,20070755,92,83,80,null) insert into score values(20152016,一,1334120101,4,20070768,78,80,75,null)insert into score values(2014-2015,一,1334120102,2,20070755,89,86,82,null)insert into score values(20152016,一,1334120102,3,20070755,98,88,92,null)insert into score values(20152016,一,1434120101,1,20070
28、768,89,88,85,null)insert into score values(20152016,一,1434120102,1,20070768,78,68,88,null)insert into score values(20142015,一,1334110101,2,20070755,90,91,93,null)insert into score values(20152016,一,1334110101,4,20070768,95,88,93,null)insert into score values(20152016,一,1334110101,5,20070769,95,89,88
29、,null)insert into score values(20142015,一,1334110102,2,20070755,85,83,81,null)insert into score values(2015-2016,一,1334110102,4,20070768,55,70,66,null)insert into score values(20152016,一,1334110102,5,20070769,60,75,68,null)insert into score values(2015-2016,一,1434110101,1,20070768,45,65,70,null)inse
30、rt 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_TotalSco
31、re, 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_ExperResultsFROM dbo.Stu_info INNER JOIN dbo.Sco_info ON dbo
32、。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_Id10 系统实现(1) 系统功能模块图:系统功能模块图如图101图101系统功能模块图(1)五个子系统的功能如下:登录子系统: 可以实现管理员,教师和学生登录查询成绩子系统:主要用于管理员查询学生,其中查询包括按学生学号直接查询,按教师工号查询
33、,按学生姓名查询,按班级查询(可选模糊查询)。成绩查询可以按成绩范围的要求查询.删除成绩子系统:主要由教师进行学生成绩的清除.修改成绩子系统:由教师修改学生成绩.录入成绩子系统: 由教师进行学生成绩的录入。(2) 开发框架的选择:MVC框架(3) M层与数据库的连接连接数据库的主要方式。数据访问方式 采用JDBC的方式访问数据库. JDBC访问数据库的过程 a)连接驱动,获得数据库链接 b)执行预sql语句c) 关闭数据库的连接具体实现代码如下:package com。yq。datebasecon;import java。sql.*;publicclass datebasecon String
34、 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 get
35、Connection() 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();return
36、con;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 Autogenerated catch blocke.printStackTrace();(4) 学生成绩管理模块的实现图101学生成绩管理系统管理员登录界面图图10-2 管理员登录首界面图10-3 管理员查询学生成绩图104 按学号查询学生图10-5录入学生成绩图106 查询学生成绩实现代
37、码: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”);/获得登录身份Stri
38、ng uid = (String)session.getAttribute(uname”);/获得登录账号Listscomod 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”);
39、String maxx = request.getParameter(max”);String jsppath = ”scoManager”;String jspname=”selectsco.jsp;System.out。println(uid);if(minn!=nullmaxx!=null)intmin = Integer。parseInt(minn);intmax = Integer。parseInt(maxx);scolist = factory。getscoImpl()。getscobyfanwei(min, max);elseif(content!=null&content!=”
40、)if(type=null)String select = selected.toString()。trim();System。out。println(”查询内容:”+content);switch(select。toString()。trim()case”sid”:scolist = factory.getscoImpl()。getscobystuid(content);break;caseclas”:scolist = factory。getscoImpl()。getscobyclanam(content);break;case”tea”:scolist = factory。getscoI
41、mpl().getscobyteaname(content);break;casecourse”:scolist = factory。getscoImpl()。getscobycouname(content);break;elseString sotype = type.toString()。trim();System。out.println(”查询条件:+sotype);switch(sotype)casejingque”:scolist = factory.getscoImpl().getscobyjingque(content);break;case”bijiao”:scolist =
42、factory.getscoImpl().getscobybijiao(content);break;case”wuchengji”:scolist = factory。getscoImpl()。getscobynull();break;elseif(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;elsescolist = factory。getscoImpl()。getscobystuid(uid);System。out.println(”list大小:”+scolist。size();intpagemax=15;intpagenum=0;pa