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

广州大学学生实验报告

开课学院及实验室:计算机学院 2020年12月24日

学院 计算机学院 年级、专业、班级 网络192
姓名 zoea 学号 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.大致的需求

image-20201231223536872

3.数据库表的E-R图

image-20201231230817404

image-20201231230904924

image-20201231230942259

关系模型

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.创建数据库和表

新建一个数据库

image-20201226102846963

建表:目前需要六张表,即:教师表、学生表、课程表、教师课程表、学生课程表、管理员表:

image-20201226103039015

源代码:

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项目

image-20201226103624773

image-20201226103652332

添加web支持:

image-20201226105558465

IDEA连接数据库:

image-20201226162429255

连接成功

image-20201226162836580

6.项目结构

主要采用MVC结构

image-20201231232312886

根据该结构创建的目录:

image-20201231232423035

7.相关配置文件的编写

依赖相关

首先是pom.xml导入相关依赖,以及解决Maven资源过滤的问题

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>DBProject</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <!--Junit-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--数据库驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
        <!-- 数据库连接池 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <!--Servlet - JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!--Mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.0.2</version>
        </dependency>

        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.9.RELEASE</version>
        </dependency>
    </dependencies>

    <!--解决Maven资源过滤问题-->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>
</project>

Spring相关配置

spring-dao.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!-- 配置整合mybatis -->
    <!-- 1.关联数据库文件 -->
    <context:property-placeholder location="classpath:jdbc.properties"/>

    <!-- 2.数据库连接池 -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 配置连接池属性 -->
        <property name="driverClass" value="${jdbc.driver}"/>
        <property name="jdbcUrl" value="${jdbc.url}"/>
        <property name="user" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>

        <!-- c3p0连接池的私有属性 -->
        <property name="maxPoolSize" value="30"/>
        <property name="minPoolSize" value="10"/>
        <!-- 关闭连接后不自动commit -->
        <property name="autoCommitOnClose" value="false"/>
        <!-- 获取连接超时时间 -->
        <property name="checkoutTimeout" value="10000"/>
        <!-- 当获取连接失败重试次数 -->
        <property name="acquireRetryAttempts" value="2"/>
    </bean>

    <!-- 3.配置SqlSessionFactory对象 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="dataSource"/>
        <!-- 配置MyBaties全局配置文件:mybatis-config.xml -->
        <property name="configLoc
  • 10
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值