请选择 进入手机版 | 继续访问电脑版

数据库实验三 数据库系统设计综合实验报告——SSM框架实现

[复制链接]
太阳神鹰 发表于 2021-1-3 12:12:40 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
广州大学学生实验陈诉

开课学院及实验室:盘算机学院 2020年12月24日
学院盘算机学院年级、专业、班级网络192姓名林泽佳学号19062000**实验课程名称数据库原理实验效果实验项目名称数据库系统设计综合实验指导老师***一、预备知识

本实验的任务是设计并实现一个数据库系统。数据库设计的一般步调包罗:需求分析、概念布局设计、逻辑布局设计、物理布局设计、数据库实施、数据库运行和维护。
(1) 概念布局设计
相识概念布局设计的根本方法,根据需求分析的效果或实验题目给出的要求,可以大概准确地用实体接洽图来形貌实体和实体之间的接洽。
(2)逻辑布局设计
明白逻辑布局设计的根本方法,根据实体接洽图的设计,转换成公道的关系模式,每个关系模式至少应该满意第三范式的要求。
(3) 物理布局设计
明白物理布局设计的根本方法,选择公道的索引布局和存储布局,优化数据库的存取。
(4)数据库实施
选择一门熟悉的面向对象步伐设计语言,完成应用步伐的开发。
二、实验目的

通过实验,使学生掌握数据库系统设计和开发的一般方法,可以大概设计并实现简朴的数据库系统。
三、实验要求

熟悉实验室实验情况,掌握实验预备知识,相识实验中故障清除的根本方法。实验中根据实验内容和步调完成相应的任务,并独立完成实验陈诉。实验素材可选择数据库原理实验七素材,也可以自行选题,选题要求有一定的难度,设计的数据库系统至少要有5张表。
四、实验情况

利用系统:Windows10
数据库管理系统:MySQL 5.7
java库:JDK1.8
web服务器:Tomcat 9.0.37
项目布局:Maven 3.6.3
开发工具:Navicat、Intellij IDEA 2020.1
五、实验内容和步调

1.实验题目

假设有“西席”、“学生”、“课程”三个实体,西席的根本信息包罗:工号、姓名、职称、工资,课程的根本信息包罗:课程号、课程名、学分数,学生的根本信息包罗:学号、姓名、性别、年事。系统必须满意以下要求:
(1) 一门课程只能有一个西席任课,一个西席可以上多门课程;
(2) 一个学生可以选修多门课程,一门课程可以由多个学生来选修,纪录差别学生选修差别课程的效果;
(3) 设置一个管理员,用于维护(添加、删除和修改等根本任务)学生根本信息、西席根本信息和西席所授课程等工作,别的,管理员添加学生时,为其设置初始暗码;当学生选修了某门课程,课程效果由管理员录入;
(4) 学生可以使用学号和暗码登录系统,登岸系统后,可以举行选课、修改暗码和个人根本信息、查询自己的选课及总学分等利用;
(5) 可以大概统计差别职称的西席的数量、差别职称的西席的匀称工资,可以统计每门课程的匀称效果、最高分、最低分,统计每个学生选修课程的总学分;
根据上述形貌,解答下列问题:
(1) 设计并画出E-R 图,要求标注连通词(即接洽范例);
(2) 将E-R 图转化为关系模子,并指出各关系的主码和外码;
(3) 在MySql、SQL Server、Oracle 中选择一个数据库管理系统,并完成数据库的逻辑设计;
2.大抵的需求


3.数据库表的E-R图




关系模子

student(sid,sname,gender,age,uid,pwd)中sid为主码;
course(cid,cname,credit)中cid为主码
teacher(tid,tname,post,salary)中tid为主码
tc(tid,cid)中tid,cid为主码,tid为外码引用teacher的tid,cid为外码引用course的cid
sc(sid,cid)中sid,cid为主码,sid为外码引用student的sid,cid为外码引用course的cid
4.创建数据库和表

新建一个数据库

建表:现在需要六张表,即:西席表、学生表、课程表、西席课程表、学生课程表、管理员表:

源代码:
  1. CREATE TABLE teacher(                tid INT(16) PRIMARY KEY,                tname VARCHAR(11) NOT NULL,                post VARCHAR(11),#职位                salary DOUBLE(11, 3));CREATE TABLE student(                sid INT(16) PRIMARY KEY,                sname VARCHAR(11) NOT NULL,                gender VARCHAR(1),                age INT(2),                uid VARCHAR(20),                pwd VARCHAR(20)#暗码);CREATE TABLE course(                cid INT(16) PRIMARY KEY,                cname VARCHAR(11) NOT NULL,                credit DOUBLE(2,1)#学分);CREATE TABLE tc(                tid INT(16),                #一个课程只有一个老师,接纳UNIQUE约束                cid INT(16) UNIQUE,    FOREIGN KEY(tid) REFERENCES teacher(tid),    FOREIGN KEY(cid) REFERENCES course(cid),                                PRIMARY KEY(tid,cid));CREATE TABLE sc(                sid INT(16),                cid INT(16),                grade DOUBLE(4,1),#学生该课程的效果                FOREIGN KEY(sid) REFERENCES student(sid),                FOREIGN KEY(cid) REFERENCES course(cid),                PRIMARY KEY(sid,cid));CREATE TABLE manager(    mid INT(16) PRIMARY KEY,                pwd VARCHAR(20));
复制代码
5.创建SSM项目

1.创建Maven项目


添加web支持:

IDEA毗连数据库:

毗连乐成

6.项目布局

主要接纳MVC布局

根据该布局创建的目次:

7.相关设置文件的编写

依赖相关

首先是pom.xml导入相关依赖,以及办理Maven资源过滤的问题
  1.     4.0.0    org.example    DBProject    1.0-SNAPSHOT                                junit            junit            4.12                                    mysql            mysql-connector-java            5.1.47                                    com.mchange            c3p0            0.9.5.2                                    javax.servlet            servlet-api            2.5                            javax.servlet.jsp            jsp-api            2.2                            javax.servlet            jstl            1.2                                    org.mybatis            mybatis            3.5.2                            org.mybatis            mybatis-spring            2.0.2                                    org.springframework            spring-webmvc            5.1.9.RELEASE                            org.springframework            spring-jdbc            5.1.9.RELEASE                                                        src/main/java                                    **/*.properties                    **/*.xml                                false                                        src/main/resources                                    **/*.properties                    **/*.xml                                false                        
复制代码
Spring相关设置

spring-dao.xml
  1.                                                                                                                                                                                                                                 
复制代码
spring-mvc.xml
  1.                                                                
复制代码
spring-service.xml
  1.                                        
复制代码
整合三个文件applicationContext.xml
  1.             
复制代码
数据库相关的设置

毗连数据库jdbc.properties
  1. jdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://localhost:3306/student_systemjdbc.username=rootjdbc.password=073838
复制代码
MyBatis设置文件mybatis-config.xml
  1.                                                                                                                                                                                                            
复制代码
web相关

web.xml
  1.         DispatcherServlet    org.springframework.web.servlet.DispatcherServlet          contextConfigLocation      classpath:applicationContext.xml        1        DispatcherServlet    /            encodingFilter          org.springframework.web.filter.CharacterEncodingFilter              encoding      utf-8            encodingFilter    /*          15  
复制代码
日志相关设置

log4j.properties
  1. log4j.rootLogger=DEBUG, Console#Consolelog4j.appender.Console=org.apache.log4j.ConsoleAppenderlog4j.appender.Console.layout=org.apache.log4j.PatternLayoutlog4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%nlog4j.logger.java.sql.ResultSet=INFOlog4j.logger.org.apache=INFOlog4j.logger.java.sql.Connection=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG
复制代码
8.功能实现的过程

业务模子

主要体现为实体类怎么与数据库的表创建相应的接洽,我主要用三个类来对应student、course、teacher三张表,别的在统计数据时需要一个Data类来生存从数据库查出来的各种信息,映射到类的各个属性,而manager类仅仅是管理员登岸时的验证所用,影响不大

在类中级联关系的体现:学生类中应当有相关的已选课程的信息,因为是一对多的关系,所以用一个聚集list来存放课程信息:

而在Course类中除了根本属性外,也还要有该课程所传授老师的信息,因为是一对一关系,只需用一个Teacher属性来体现即可:

而Teacher类对应课程也是一对多的关系,除了根本属性同样需要list来存放课程信息:

最后是存放统计数据各种信息的类,方便mapper利用:

mapper的编写

主要是处理处罚各种需求需要利用数据库,同样三个mapper对应三个大功能

主要sql语句照旧写在了mapper设置里:

StudentMapper.xml
  1.             select * from student where uid = #{uid}                update student set pwd = #{pwd} where uid = #{uid}                update student set sname = #{sname},gender=#{gender},age=#{age} where sid = #{sid}                                                                                                                    SELECT s.sid sid,s.sname sname,c.*,sc.grade grade,t.tname tname        FROM student s LEFT JOIN sc ON s.sid = sc.sid        INNER JOIN course c ON c.cid = sc.cid        INNER JOIN tc ON c.cid = tc.cid        INNER JOIN teacher t ON t.tid = tc.tid        WHERE uid = #{uid}                SELECT SUM(credit) FROM course        INNER JOIN sc ON course.cid = sc.cid        INNER JOIN student ON sc.sid = student.sid        WHERE student.uid = #{uid}                                                                SELECT c.cid cid,c.cname cname,c.credit credit,t.tname tname,t.post post        FROM course c LEFT JOIN tc ON tc.cid = c.cid        INNER JOIN teacher t ON tc.tid = t.tid                INSERT INTO SC(sid,cid) VALUES(#{param1}, #{param2})   
复制代码
ManagerMapper.xml
  1.             select * from manager where mid = #{uid}                insert into student values(#{sid},#{sname},#{gender},#{age},#{uid},#{pwd})                select * from student where sid=#{sid}                update student set gender=#{gender},age=#{age},uid=#{uid},pwd=#{pwd} where sid = #{sid}                delete from student where sid=#{sid}                delete from sc where sid = #{sid};                insert into teacher values(#{tid},#{tname},#{post},#{salary})                select * from teacher where tid=#{tid};                update teacher set tname=#{tname},post=#{post},salary=#{salary} where tid=#{tid};                delete from tc where tid=#{tid}                delete from teacher where tid=#{tid}                insert into tc values(#{param1}, #{param2})                update tc set tid=#{param1} where cid=#{param2}                delete from tc where cid = #{cid}                update sc set grade=#{param3} where sid=#{param1} and cid=#{param2}   
复制代码
DataMapper.xml
  1.             SELECT post, COUNT(*) countPost FROM teacher GROUP BY post;                SELECT post, AVG(salary) avgSalary FROM teacher GROUP BY post;                SELECT cname, AVG(grade) avgGrade FROM sc        INNER JOIN course ON sc.cid = course.cid        GROUP BY sc.cid;                SELECT cname, MAX(grade) maxGrade FROM sc        INNER JOIN course ON sc.cid = course.cid        GROUP BY sc.cid;                SELECT cname, MIN(grade) minGrade FROM sc        INNER JOIN course ON sc.cid = course.cid        GROUP BY sc.cid;                SELECT sname, SUM(credit) sumCredit FROM course        INNER JOIN sc ON course.cid = sc.cid        INNER JOIN student ON sc.sid = student.sid        GROUP BY sname;   
复制代码
service层的编写

主要是把调用杂七杂八的mapper来处理处罚某个需求,详细代码很简朴,目次如下:

Controller控制器层的编写

用户在页面点击发送相应的请求需要在控制器中举行处理处罚,这里主要是用三个控制器对应三个大的功能:

StudentController
  1. package com.deserts.controller;import com.deserts.pojo.Course;import com.deserts.pojo.Student;import com.deserts.service.StudentService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;import java.util.List;/** * @ClassName StudentController * @Description TODO * @Author deserts * @Date 2020/12/28 22:00 */@Controller@RequestMapping("/student")public class StudentController {    @Autowired    private StudentService service;    @RequestMapping("/login")    public String login(@RequestParam("username")String username, @RequestParam("password")String password, HttpServletRequest request, HttpServletResponse response){        Student student = service.selectByUid(username);        if(student != null && student.getPwd().equals(password)){            request.getSession().setAttribute("username", username);            request.getSession().setAttribute("password", password);            return "/pages/student/main";        }else {            return "/fail";        }    }    @RequestMapping("/updatePwd")    public String updatePwd(@RequestParam("old")String oldP, @RequestParam("new")String newP,HttpServletRequest request, HttpServletResponse response){        String username = (String) request.getSession().getAttribute("username");        String password = (String) request.getSession().getAttribute("password");        Student student = service.selectByUid(username);        if(password.equals(oldP)){            student.setPwd(newP);            service.updatePwd(student);            request.getSession().setAttribute("password", newP);            return "/pages/student/success";        }else {            return "/fail";        }    }    @RequestMapping("/info")    public String info(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        String username = (String) request.getSession().getAttribute("username");        Student student = service.selectByUid(username);        request.setAttribute("student", student);        return "/pages/student/info";    }    @RequestMapping("/updateInfo")    public String updateInfo(@RequestParam(value = "name",required = false)String name,                             @RequestParam(value = "gender", required = false)String gender,                             @RequestParam(value = "age",required = false)String age,                             HttpServletRequest request){        String username = (String) request.getSession().getAttribute("username");        Student student = service.selectByUid(username);        if(name != null){            student.setSname(name);        }        if (gender!= null){            student.setGender(gender);        }        if(age != null){            student.setAge(Integer.parseInt(age));        }        service.updateInfo(student);        return "/pages/student/success";    }    @RequestMapping("/courseInfo")    public String courseInfo(HttpServletRequest request){        String username = (String) request.getSession().getAttribute("username");        Student student = service.findCourseInfoByUid(username);        Double credit = service.countCredit(username);        System.out.println(credit);        System.out.println(student);        request.setAttribute("studentInfo", student);        request.setAttribute("credit", credit);        return "/pages/student/courseInfo";    }    @RequestMapping("allCourse")    public String allCourse(HttpServletRequest request){        List courseList = service.findAllCourse();        request.setAttribute("courseList", courseList);        return "/pages/student/selectCourse";    }    @RequestMapping("selectCourse")    public String selectCourse(@RequestParam("cid")String cid, HttpServletRequest request){        String username = (String) request.getSession().getAttribute("username");        Student student = service.selectByUid(username);        Integer sid = student.getSid();        service.selectCourse(sid, Integer.parseInt(cid));        return "/pages/student/successSelect";    }}
复制代码
ManagerController
  1. package com.deserts.controller;import com.deserts.pojo.Manager;import com.deserts.pojo.Student;import com.deserts.pojo.Teacher;import com.deserts.service.ManagerService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * @ClassName ManagerController * @Description TODO * @Author deserts * @Date 2020/12/30 19:03 */@Controller@RequestMapping("/manager")public class ManagerController {    @Autowired    private ManagerService service;    @RequestMapping("/login")    public String login(@RequestParam("username")String username, @RequestParam("password")String password, HttpServletRequest request, HttpServletResponse response){        Manager manager = service.findByUid(username);        if(manager!=null && manager.getPwd().equals(password)){            return "/pages/manager/main";        }else {            return "/fail";        }    }    @RequestMapping("/addStudentInfo")    public String addStudentInfo(@RequestParam("sid")String sid,                                 @RequestParam("sname")String sname,                                 @RequestParam("gender")String gender,                                 @RequestParam("age")String age,                                 @RequestParam("uid")String uid,                                 @RequestParam("pwd")String pwd){        Student student = new Student(Integer.parseInt(sid), sname, gender, Integer.parseInt(age), uid, pwd);        service.addStudentInfo(student);        return "/success";    }    @RequestMapping("/selectStudentInfo")    public String selectStudentInfo(@RequestParam("sid") String sid, HttpServletRequest request){        Student student = service.selectStudentBySid(sid);        request.setAttribute("student", student);        request.getSession().setAttribute("sid", sid);        return "/pages/manager/updateStudentInfo";    }    @RequestMapping("/updateStudentInfo")    public String updateStudentInfo(@RequestParam("gender")String gender,                                    @RequestParam("age")String age,                                    @RequestParam("uid")String uid,                                    @RequestParam("pwd")String pwd,                                    HttpServletRequest request){        String sid = (String) request.getSession().getAttribute("sid");        Student student1 = new Student(Integer.parseInt(sid), null, gender, Integer.parseInt(age), uid, pwd);        service.updateStudentInfo(student1);        return "/pages/manager/updateSuccess";    }    @RequestMapping("/selectStudentInfo2")    public String selectStudentInfo2(@RequestParam("sid") String sid, HttpServletRequest request){        Student student = service.selectStudentBySid(sid);        request.setAttribute("student", student);        request.getSession().setAttribute("sid", sid);        return "/pages/manager/deleteStudentInfo";    }    @RequestMapping("/deleteStudent")    public String deleteStudent(HttpServletRequest request){        String sid = (String) request.getSession().getAttribute("sid");        service.deleteStudentInfo(sid);        return "/pages/manager/deleteSuccess";    }    @RequestMapping("/addTeacherInfo")    public String addTeacherInfo(@RequestParam("tid")String tid,                                 @RequestParam("tname")String tname,                                 @RequestParam("post")String post,                                 @RequestParam("salary")String salary){        Teacher teacher = new Teacher(Integer.parseInt(tid), tname, post, Double.parseDouble(salary));        service.addTeacherInfo(teacher);        return "/pages/manager/addSuccess";    }    @RequestMapping("/selectTeacherInfo")    public String selectTeacherInfo(@RequestParam("tid")String tid, HttpServletRequest request){        request.getSession().setAttribute("tid", tid);        Teacher teacher = service.selectTeacherInfo(tid);        request.setAttribute("teacher", teacher);        return "/pages/manager/updateTeacherInfo";    }    @RequestMapping("/updateTeacherInfo")    public String updateTeacherInfo(@RequestParam("tname")String tname,                                    @RequestParam("post")String post,                                    @RequestParam("salary")String salary,                                    HttpServletRequest request){        String tid = (String) request.getSession().getAttribute("tid");        Teacher teacher = new Teacher(Integer.parseInt(tid), tname, post, Double.parseDouble(salary));        service.updateTeacherInfo(teacher);        return "/pages/manager/updateSuccess";    }    @RequestMapping("/selectTeacherInfo2")    public String selectTeacherInfo2(@RequestParam("tid")String tid, HttpServletRequest request){        request.getSession().setAttribute("tid", tid);        Teacher teacher = service.selectTeacherInfo(tid);        request.setAttribute("teacher", teacher);        return "/pages/manager/deleteTeacherInfo";    }    @RequestMapping("/deleteTeacher")    public String deleteTeacher(HttpServletRequest request){        String tid = (String) request.getSession().getAttribute("tid");        service.deleteTeacherInfo(tid);        return "/pages/manager/deleteSuccess";    }    @RequestMapping("/addTC")    public String addTC(@RequestParam("tid")String tid, @RequestParam("cid")String cid){        service.addTC(tid,cid);        return "/pages/manager/addSuccess";    }    @RequestMapping("/updateTC")    public String updateTC(@RequestParam("tid")String tid, @RequestParam("cid")String cid){        service.updateTC(tid,cid);        return "/pages/manager/updateSuccess";    }    @RequestMapping("/deleteTC")    public String deleteTC(@RequestParam("cid")String cid){        service.deleteTC(cid);        return "/pages/manager/deleteSuccess";    }    @RequestMapping("/addGrade")    public String addGrade(@RequestParam("sid")String sid,                           @RequestParam("cid")String cid,                           @RequestParam("grade")String grade){        service.addGrade(sid, cid, grade);        return "/pages/manager/addSuccess";    }}
复制代码
DataController
  1. package com.deserts.controller;import com.deserts.pojo.Data;import com.deserts.service.DataService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;import java.util.List;/** * @ClassName DataController * @Description TODO * @Author deserts * @Date 2020/12/31 10:53 */@Controller@RequestMapping("/data")public class DataController {    @Autowired    private DataService service;    @RequestMapping("/selectCountPost")    public String selectCountPost(HttpServletRequest request){        List data = service.selectCountPost();        request.setAttribute("dataList", data);        return "/pages/data/selectCountPost";    }    @RequestMapping("/selectAVGSalary")    public String selectAVGSalary(HttpServletRequest request){        List data = service.selectAVGSalary();        request.setAttribute("dataList2", data);        return "/pages/data/selectAVGSalary";    }    @RequestMapping("/selectAVGGrade")    public String selectAVGGrade(HttpServletRequest request){        List data = service.selectAVGGrade();        request.setAttribute("dataList3", data);        return "/pages/data/selectAVGGrade";    }    @RequestMapping("/selectMAXGrade")    public String selectMAXGrade(HttpServletRequest request){        List data = service.selectMAXGrade();        request.setAttribute("dataList4", data);        return "/pages/data/selectMAXGrade";    }    @RequestMapping("/selectMINGrade")    public String selectMINGrade(HttpServletRequest request){        List data = service.selectMINGrade();        request.setAttribute("dataList5", data);        return "/pages/data/selectMINGrade";    }    @RequestMapping("/selectSUMCredit")    public String selectSUMCredit(HttpServletRequest request){        List data = service.selectSUMCredit();        request.setAttribute("dataList6", data);        return "/pages/data/selectSUMCredit";    }}
复制代码
页面的编写

页面十分大抵,主要由几个简朴的标签组成,详细目次如下:
主页:

学生相关功能:

管理员相关功能:

统计数据相关功能:

整体的目次布局:

9.功能展示

主页


学生相关功能

登录

登录后的主页

修改暗码:

修改乐成:

查察个人信息:

修改个人信息:

修改乐成:

修改后再查察:

查察选课信息及总学分:

选课:

选课乐成:

管理员功能展示

管理员登录

主页

添加学生信息:

修改学生信息:


删除学生信息


添加西席信息

修改西席信息


删除西席信息:


添加课程信息

修改课程信息:

删除课程信息:

学生课程录入:

统计数据

主页

各个数据统计






六、实验总结

涉及的知识

主要是Spring+SpringMVC+MyBatis+Mysql这几个部分的知识。
实验过程的问题

在实现删除学生信息功能时,刚开始只删除student表中的信息,会发现有错误,因为另有sc表的外码指向它,所以需要先删除sc表的相关学生信息,再去删除student表的信息;反面做删除西席信息的功能也是同理。
总结

通过本次实验,对数据库的综合应用有了一定的实践,对所学知识有了一定的巩固。整个项目也有许多可以改进的地方。
完整代码所在:https://gitee.com/desertslin/deserts.git

来源:https://blog.csdn.net/weixin_45834777/article/details/112059154
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )