数据库-MySQL 实战项目——学生选课系统数据库设计与实现(附源码)

本文详细介绍了如何用MySQL创建一个学生选课系统,包括E-R图设计、关系模式、数据表结构、SQL查询示例以及数据库操作,适合初学者学习数据库管理和SQL实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

        该项目非常适合MySQL入门学习的小伙伴,博主提供了源码、数据和一些查询语句,供大家学习和参考,代码和表设计有什么不恰当还请各位大佬多多指点。

所需环境

  1.  MySQL可视化工具:navicat;
  2.  数据库:MySql 5.7/8.0等版本均可;

需求: 

     学生选课系统主要完成某学校教务系统中选课功能:

  1. 学生信息管理
  2. 教师信息管理
  3. 课程信息管理
  4. 教室信息管理
  5. 选课管理 

备注:

  1. 每个学生可选多门课程,每门课程有多个学生。
  2. 每位教师教授一门课程。
  3. 每个班级有多个学生,每个学生对应一个班级。

        其中:

                学生包含以下属性:学号、学生姓名、学生性别。

                教师包含以下属性:教工号、教师姓名、教师职称。

                课程包含以下属性:课程号、课程名、课程学分。

                教室包含以下属性:班级编号、学生人数、班级名称。

                选课包含以下属性:学生成绩。

二、E-R图

eedbf2009cfb413a9326774d130c2956.png

三、关系模式

 课程(课程号、课程名、课程学分、教工号)

教师(教工号、教师姓名、教师职称)

选课(课程号学号、成绩)

学生(学号、学生姓名、学生性别、班级编号)

班级(班级编号、学生人数、班级名称)

 备注:

        下划线为主键,红色字为外键;

四、数据表的设计

表1:课程

字段

数据类型

长度

备注

 

课程号

varchar

50

主键

 

课程名

varchar

50

Not.null

 

课程学分

int

3

 

 

教工号

varchar

50

外键

 

 表2:教师

字段

数据类型

长度

备注

 

教工号

varchar

50

主键

 

教师姓名

varchar

50

Not.null

 

教师职称

varchar

50

 

 

 表3:学生

字段

数据类型

长度

备注

 

学号

varchar

50

主键

 

学生姓名

varchar

50

Not.null

 

学生性别

varchar

50

 

 

班级编号

varchar

50

外键

 

表4:班级

字段

数据类型

长度

备注

 

班级编号

varchar

50

主键

 

班级名称

varchar

50

Not.null

 

学生数量

int

5

 

 

表5:选课

字段

数据类型

长度

备注

 

学号

varchar

50

主键

 

课程号

varchar

50

主键

 

成绩

int

5

Not.null

 

五、创建数据库 

Create database 学生选课系统 character set utf8 collate utf8_general_ci
-- 在新建查询选择前选择数据库
use 学生选课系统  

 创建各实体表:

1. 老师

create table 老师
(
教工号 varchar(50) primary key,
教师姓名 varchar(50) not null,
教师职称 varchar(50)
)

2. 班级

create table 班级
(
班级编号 varchar(50) primary key,
班级名称 varchar(50) not null,
学生数量 int(5)
)

3. 课程

create table 课程
(
课程号 varchar(50) PRIMARY key,
课程名 varchar(50) not null,
课程学分 int(3),
教工号 char(5),
CONSTRAINT FK教工号 FOREIGN KEY (教工号) REFERENCES 老师(教工号)
)

4. 学生

create table 学生
(
学号 varchar(50) PRIMARY key,
学生姓名 varchar(50) not null,
学生性别 varchar(50),
班级编号 varchar(50),
CONSTRAINT FK 班级编号 FOREIGN KEY (班级编号) REFERENCES 班级(班级编号)
)

5. 选课

create table 选课
(
学号 varchar(50),
课程号 varchar(50),
成绩 int(5) not null,
PRIMARY KEY(学号, 课程号)
)

插入数据:

1. 老师 

INSERT INTO 老师 VALUES ('J001','wuping','教授');
INSERT INTO 老师 VALUES ('J002','zhangshuai','讲师');
INSERT INTO 老师 VALUES ('J003','liguoqiang','副教授');
INSERT INTO 老师 VALUES ('J004','wangni','讲师');
INSERT INTO 老师 VALUES ('J005','liubo','讲师');

2. 班级 

INSERT INTO 班级 VALUES ('B001','软件1班','30');
INSERT INTO 班级 VALUES ('B002','软件2班','29');
INSERT INTO 班级 VALUES ('B003','软件3班','31');
INSERT INTO 班级 VALUES ('B004','嵌入式1班','32');
INSERT INTO 班级 VALUES ('B005','嵌入式2班','33');
INSERT INTO 班级 VALUES ('B006','嵌入式3班','30');

3. 课程 

INSERT INTO 课程 VALUES ('K001','数据库','4','J002');
INSERT INTO 课程 VALUES ('K002','java','4','J003');
INSERT INTO 课程 VALUES ('K003','python','6','J001');
INSERT INTO 课程 VALUES ('K004','英语','2','J005');
INSERT INTO 课程 VALUES ('K005','数学','8','J004');

4. 学生 

INSERT INTO 学生 VALUES ('X005','zhangsan','男','B002');
INSERT INTO 学生 VALUES ('X004','lisi','女','B003');
INSERT INTO 学生 VALUES ('X003','wangwu','男','B004');
INSERT INTO 学生 VALUES ('X002','liuyu','男','B005');
INSERT INTO 学生 VALUES ('X001','chenqi','男','B001');
INSERT INTO 学生 VALUES ('X006','wangxin','女','B001');
INSERT INTO 学生 VALUES ('X007','yangli','男','B002');
INSERT INTO 学生 VALUES ('X008','qinyan','女','B006');

5. 选课 

INSERT INTO 选课 VALUES ('X001','K002','82');
INSERT INTO 选课 VALUES ('X001','K003','78');
INSERT INTO 选课 VALUES ('X002','K005','90');
INSERT INTO 选课 VALUES ('X002','K003','74');
INSERT INTO 选课 VALUES ('X003','K001','66');
INSERT INTO 选课 VALUES ('X003','K002','75');
INSERT INTO 选课 VALUES ('X004','K005','95');
INSERT INTO 选课 VALUES ('X004','K004','83');
INSERT INTO 选课 VALUES ('X005','K001','75');
INSERT INTO 选课 VALUES ('X005','K004','87');
INSERT INTO 选课 VALUES ('X007','K001','79');

六、基础查询命令

1. 查看xxx表所有信息:

   select * from xxxx  *表示全部,查看xxx的全部数据

select * from 老师

6070cacb904342cf826da15511cb7f34.png

2. 查询表的某个或多个字段:

  select field1,field2…… from tablenname(表名)

select 学号,学生姓名 from 学生

d90ce149f24343df85cf9dada136eedd.png

3. 查询满足条件的信息:

  and满足所有条件。or满足其中任何一个条件就可以

select * from 学生 where 学生性别 ='男' and 班级编号 ='B002' and 学生姓名 = 'yangli'
7e5806468eb74b0688dde76724199382.png

4. 区间查询:

  从选课中选取分数在80~90的(可取端点)

select * from 选课 where 成绩 between 80 and 90

03c159ed95c344f985fe01994d917eba.png

5. 模糊查询: 

  在选课中查询分数以9开头的信息,%9%是查询信息中含有9的。%表示模糊数据

select * from 选课 where 成绩 like '9%'

73da1f12138648b0875caf09e39cfd50.png

 6. count()统计函数:

  从学生表格中统计B002班的有几个

select count(*) from 学生 where 班级编号 ='B002'

0673d2bce977456ea8611c1875cab0c5.png

7. sum()求和函数 :

  从选课表格中计算分数和。

select sum(成绩) from 选课

903d878c05d843a496945bcc793ffbe7.png

8. avg()平均函数:

   求所有学生的平均成绩。

select avg(成绩) from 选课

a6fdc5a191364e9e88a1c3672f5810af.png

9. max()最大函数 :

  从选课表格中查询课程号K003课的最高分。

select max(成绩) from 选课 where 课程号 ='K003'

4e0ba256f64341c693ce46c763930d09.png

10. min()最小值函数:

  从选课表格中查询课程号K003课的最低分

select min(成绩) from 选课 where 课程号 ='K003'

ba23121e4e194c4f848d51fe952ff82d.png

七、答疑解惑 

        代码有问题或需要其他的查询语句,都可以随时评论留言或联系博主。

        还多请各位小伙伴多多点赞支持,你们的支持是我最大的动力。

博主V:18884281851

谢谢各位的支持~~

 

### 构建任务失败解决方案 当遇到 `Execution failed for task ':app:shrinkReleaseRes'` 错误时,这通常意味着资源压缩过程中出现了问题。此错误可能由多种原因引起,包括但不限于配置不正确、依赖冲突或特定于项目的其他因素。 #### 可能的原因分析 1. **ProGuard 或 R8 配置不当** ProGuard 和 R8 是用于优化和混淆代码以及减少 APK 大小的工具。如果这些工具的配置存在问题,可能会导致资源无法正常处理[^1]。 2. **重复资源** 如果项目中有多个模块定义了相同的资源名称,可能导致冲突并引发该错误。检查是否存在重名的 drawable、string 等资源文件[^2]。 3. **第三方库兼容性** 某些第三方库可能当前使用的 Gradle 插件版本或其他库存在兼容性问题,从而影响到资源打包过程中的行为[^3]。 4. **Gradle 缓存问题** 有时旧缓存数据会干扰新编译的结果,尝试清理本地仓库和重新同步项目可以帮助排除此类潜在障碍[^4]。 #### 推荐的操作方法 为了有效解决问题,建议按照以下步骤逐一排查: ```bash # 清理项目构建目录 ./gradlew clean # 删除 .gradle 文件夹下的所有内容以清除缓存 rm -rf ~/.gradle/caches/ ``` 调整 `build.gradle` 中的相关设置也是一个重要环节: ```groovy android { ... buildTypes { release { minifyEnabled true // 是否启用代码缩减 shrinkResources true // 是否开启资源压缩 proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' // 尝试禁用 shrinkResources 来测试是否为资源压缩引起的错误 // shrinkResources false } } } ``` 此外,在 `proguard-rules.pro` 文件内添加必要的保留规则,防止关键类被意外移除: ```text -keep class com.example.yourpackage.** { *; } # 替换为你自己的包路径 -dontwarn androidx.**,com.google.** # 忽略警告信息 ``` 最后,确保所使用的 Android Studio 版本是最新的稳定版,并且已经应用了所有的补丁更新。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花花´◡`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值