用MySQL、Navicat做一个学生成绩管理系统数据库内容包括 1、需求分析、系统分析、数据分析 2、建数据库和建表 3、设计并创建数据库,保存与学生及成绩有关的信息,包括:学生基本信息、课程基本信息、学生成绩信息等,设置各表的完整性约束条件(如主键、外键等)。录入以上信息。 4、创建存储过程,根据输入学号统计并显示该生成绩信息,包括总分、平均分、不及格门数等。 5、创建存储过程,根据输入课程名称统计并显小该课程的考试信息,包括考试人数、最高分、最低分、平均成绩等。 6、创建函数,根据学号和课程名得出该生该门课的名次。写出具体代码
时间: 2023-12-15 12:04:28 浏览: 119
好的,以下是基于您提供的需求的MySQL代码:
1. 需求分析、系统分析、数据分析:
这一部分需要根据您的具体需求进行定制,所以这里不提供具体代码。
2. 建数据库和建表:
创建数据库:
```
CREATE DATABASE student_score;
```
使用该数据库:
```
USE student_score;
```
创建学生基本信息表:
```
CREATE TABLE `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`gender` varchar(10) NOT NULL,
`birthday` date NOT NULL,
`enrollment_date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
创建课程基本信息表:
```
CREATE TABLE `course` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`credit` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
创建学生成绩信息表:
```
CREATE TABLE `score` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`score` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `student_id` (`student_id`),
KEY `course_id` (`course_id`),
CONSTRAINT `score_ibfk_1` FOREIGN KEY (`student_id`) REFERENCES `student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `score_ibfk_2` FOREIGN KEY (`course_id`) REFERENCES `course` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
```
3. 设计并创建数据库:
录入学生基本信息:
```
INSERT INTO `student` (`name`, `gender`, `birthday`, `enrollment_date`) VALUES
('张三', '男', '2000-01-01', '2019-09-01'),
('李四', '女', '2001-02-02', '2019-09-01'),
('王五', '男', '2002-03-03', '2019-09-01');
```
录入课程基本信息:
```
INSERT INTO `course` (`name`, `credit`) VALUES
('数学', 4),
('语文', 3),
('英语', 3);
```
录入学生成绩信息:
```
INSERT INTO `score` (`student_id`, `course_id`, `score`) VALUES
(1, 1, 90),
(1, 2, 85),
(1, 3, 92),
(2, 1, 88),
(2, 2, 92),
(2, 3, 90),
(3, 1, 85),
(3, 2, 90),
(3, 3, 88);
```
4. 创建存储过程,根据输入学号统计并显示该生成绩信息,包括总分、平均分、不及格门数等。
```
DELIMITER $$
CREATE PROCEDURE `get_score_by_student_id`(IN student_id INT)
BEGIN
SELECT COUNT(*) AS total_count, SUM(`score`) AS total_score, AVG(`score`) AS avg_score, COUNT(CASE WHEN `score` < 60 THEN 1 ELSE NULL END) AS fail_count
FROM `score`
WHERE `student_id` = student_id;
END$$
DELIMITER ;
```
5. 创建存储过程,根据输入课程名称统计并显小该课程的考试信息,包括考试人数、最高分、最低分、平均成绩等。
```
DELIMITER $$
CREATE PROCEDURE `get_score_by_course_name`(IN course_name VARCHAR(50))
BEGIN
SELECT COUNT(*) AS total_count, MAX(`score`) AS max_score, MIN(`score`) AS min_score, AVG(`score`) AS avg_score
FROM `score`
WHERE `course_id` = (SELECT `id` FROM `course` WHERE `name` = course_name);
END$$
DELIMITER ;
```
6. 创建函数,根据学号和课程名得出该生该门课的名次。
```
DELIMITER $$
CREATE FUNCTION `get_rank_by_student_id_and_course_name`(IN student_id INT, IN course_name VARCHAR(50))
RETURNS INT
BEGIN
DECLARE rank INT;
SET @rank := 0;
SELECT COUNT(*) + 1 INTO @rank
FROM (SELECT `score`, @rank := @rank + 1 AS `rank`
FROM (SELECT `score`
FROM `score`
WHERE `student_id` = student_id AND `course_id` = (SELECT `id` FROM `course` WHERE `name` = course_name)
ORDER BY `score` DESC) AS `tmp`) AS `tmp2`
WHERE `score` > (SELECT `score` FROM `score` WHERE `student_id` = student_id AND `course_id` = (SELECT `id` FROM `course` WHERE `name` = course_name));
RETURN @rank;
END$$
DELIMITER ;
```
以上是根据您提供的需求的MySQL代码,您可以根据自己的具体需求进行修改和优化。
阅读全文