广州大学学生实验报告
开课学院及实验室:计算机学院 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.大致的需求
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.创建数据库和表
新建一个数据库
建表:目前需要六张表,即:教师表、学生表、课程表、教师课程表、学生课程表、管理员表:
源代码:
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资源过滤的问题
<?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