资源描述
黄 淮 学 院信息工程学院数据库系统原理与应用课程设计报告题 目: 学生成绩管理系统设计与实现 指导老师: 张 银 玲 学 号: 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 ssmson (name=ssms_data,filename=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 teacher( tid varchar(8) primary key check (tid like 0-90-90-90-90-90-90-90-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_IDVarchar(20)Not null学生学号Stu_NameVarchar(20)Not null学生姓名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_IDVarchar(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与院长表级联院长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_IdVarchar(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 null性别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_SidVarchar(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,一,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_ExperResultsFROM 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_Id10 系统实现(1) 系统功能模块图:系统功能模块图如图10-1图10-1系统功能模块图(1)五个子系统的功能如下:登录子系统: 可以实现管理员,教师和学生登录查询成绩子系统:主要用于管理员查询学生,其中查询包括按学生学号直接查询,按教师工号查询,按学生姓名查询,按班级查询(可选模糊查询)。成绩查询可以按成绩范围的要求查询。删除成绩子系统: 主要由教师进行学生成绩的清除。修改成绩子系统:由教师修改学生成绩。录入成绩子系统: 由教师进行学生成绩的录入。(2) 开发框架的选择:MVC框架(3) M层与数据库的连接连接数据库的主要方式。数据访问方式 采用JDBC的方式访问数据库。 JDBC访问数据库的过程 a)连接驱动,获得数据库链接 b)执行预sql语句 c) 关闭数据库的连接具体实现代码如下: package com.yq.datebasecon; import java.sql.*; public class 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();return con;public void 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 blocke.printStackTrace();(4) 学生成绩管理模块的实现图10-1学生成绩管理系统管理员登录界面图图10-2 管理员登录首界面图10-3 管理员查询学生成绩图10-4 按学号查询学生图10-5录入学生成绩图10-6 查询学生成绩实现代码:protected void 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 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)int min = Integer.parseInt(minn);int max = Integer.parseInt(maxx);scolist = factory.getscoImpl().getscobyfanwei(min, max);elseif(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;elseString 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;elseif(shenfen.equals(admin)scolist = factory.getscoImpl().getallsco();else if(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();int pagemax=15;int pagenum=0;pagenum = scolist.size()%pagemax0?scolist.size()/pagemax+1:scolist.size()/pagemax;session.setAttribute(list, scolist);session.setAttribute(pagemax, pagemax);session.setAttribute(pagenum, pagenum);session.setAttribute(page, 0);response.sendRedirect(jsppath+/+jspname);11课程设计心得体会在本次课程设计的软件开发的过程中,我全面实践一个面向数据库的应用系统的开发过程,学习了很多有关的知识。这样的项目对我学过的数据结构,程序设计,数据库,软件工程等课程是一个综合性很高的实践。一些以前没有学得很扎实的课程的内容,由于需要在实践中运用,刚开始我也感到很头痛。但回过头再去看有关的教科书,经过一段时间的钻研,对与这些知识点的相关的背景,概念和解决方案理解得更透彻了,学习起来也越来越有兴趣,越来越轻松。熟悉了数据库设计的每一个过程。另外我还充分体会了从事软件开发工作需要特别严谨认真的态度和作风,一点都马虎不得。每一个细微的细节都必须十分的注意,如果不认真思考决策,就会出现或大或小的错误,如果早期的错误隐藏下来,对后面的工作影响就会很大,甚至有时要推倒很多前面做的工作重来。有时候,我自己觉得我写的程序非常的正确,但是就是编译通不过,在查找错误的过程中,面临着否认自己的过程,非常的痛苦,而且由于自己的经验及各方面的能力的不足,所以进展的速度非常的缓慢,往往几天的时间还没有一点进展。这时候,我一般是先自己通过书本,手册和资料找解决办法,实在没辙了才向老师或同学请教。尽管向别人请教解决问题比较快,自己钻研花的时间较多,但我强迫自己独立的思考对我的学习提高帮助非常大。在开始编写程序的时候,我看到别人的软件功能非常的完善,而且界面非常的漂亮,总希望自己的软件也非常的完善,但是,经过两个月的学习,发现编一个优秀的软件决不是一蹴而就的事情,需要长时间的积累和经验。我认清自己的能力后,我就特别注意在工作的过程中不贪图大而全,而是根据自己的能力,制定适当的目标。在反反复复的学习及积极询问之下,我的辛勤努力有了回报,终于做出了一个简单的软件,虽然这个软件的功能非常的简单,而且我想,在实际的运用中,还有些不足。因为教务管理牵涉的内容非常很多,我涉及到的仅仅是学生成绩管理的一部分简单内容,离实际的客户需求肯定还有一定的差距。由于我的知识浅薄,经验不足及阅历颇浅,因此,在该系统的设计方面还有很多不足,比如功能过少,界面不够美观等问题,我会在系统使用过程中,根据用户的具体要求不断地修改,完善,争取使该系统趋向完美。在本系统的设计过程和课程设计报告的编写过程中,老师和同学都给予了我许多无私的帮助,尤其是我的指导老师张银玲老师给我的系统设计提出了很多宝贵的修改意见,在这里,我向这些无私帮助我的人表示衷心的感谢。
展开阅读全文