Initial commit

This commit is contained in:
2025-11-06 09:53:12 +08:00
commit ea8d38c146
50 changed files with 1200 additions and 0 deletions

View File

@@ -0,0 +1,24 @@
CREATE TABLE Student(
Sno CHAR(8) PRIMARY KEY,
Sname NVARCHAR(20) NOT NULL,
Ssex CHAR(2),
Sage INT,
Sddpt NVARCHAR(20),
);
CREATE TABLE Course(
Cno CHAR(8) PRIMARY KEY,
Cname NVARCHAR(20) NOT NULL,
Cpno CHAR(8),
Ccredit INT,
);
CREATE TABLE SC(
Sno CHAR(8),
Cno CHAR(8),
Grade INT,
Class CHAR(1),
PRIMARY KEY (Sno, Cno),
FOREIGN KEY (Sno) REFERENCES Student(Sno),
FOREIGN KEY (Cno) REFERENCES Course(Cno)
);

View File

@@ -0,0 +1,63 @@
-- 1. 统计离散数学的成绩分布情况,即按照各分数段统计人数
CREATE PROCEDURE sp_GetDiscreteMathGradeDistribution
AS
BEGIN
DECLARE @CourseName NVARCHAR(20) = N'离散数学';
DECLARE @TargetCno CHAR(8);
SELECT @TargetCno = Cno
FROM Course
WHERE Cname = @CourseName;
SELECT GradeCategory AS N'成绩段',
COUNT(*) AS N'人数'
FROM (SELECT CASE
WHEN Grade >= 90 AND Grade <= 100 THEN N'90-100 (优秀)'
WHEN Grade >= 80 AND Grade < 90 THEN N'80-89 (良好)'
WHEN Grade >= 70 AND Grade < 80 THEN N'70-79 (中等)'
WHEN Grade >= 60 AND Grade < 70 THEN N'60-69 (及格)'
WHEN Grade >= 0 AND Grade < 60 THEN N'<60 (不及格)'
END AS GradeCategory
FROM SC
WHERE Cno = @TargetCno) AS GradeDistribution
GROUP BY GradeCategory
ORDER BY CASE GradeCategory
WHEN N'90-100 (优秀)' THEN 1
WHEN N'80-89 (良好)' THEN 2
WHEN N'70-79 (中等)' THEN 3
WHEN N'60-69 (及格)' THEN 4
WHEN N'<60 (不及格)' THEN 5
END;
END;
Go
-- 2. 统计任意一门课的平均成绩
CREATE FUNCTION fn_GetAverageCourseGrade(@InputCno CHAR(8))
RETURNS DECIMAL(5, 2)
AS
BEGIN
DECLARE @AverageGrade DECIMAL(5, 2);
SELECT @AverageGrade = AVG(CAST(Grade AS DECIMAL(5, 2)))
FROM SC
WHERE Cno = @InputCno
AND Grade IS NOT NULL;
RETURN @AverageGrade;
END;
Go
-- 3. 将学生选课成绩从百分制改为等级制即A、B、C、D、E
CREATE PROCEDURE sp_UpdateSCGradeToClass
AS
BEGIN
BEGIN TRANSACTION;
UPDATE SC
SET Class =
CASE
WHEN Grade >= 90 AND Grade <= 100 THEN 'A'
WHEN Grade >= 80 AND Grade < 90 THEN 'B'
WHEN Grade >= 70 AND Grade < 80 THEN 'C'
WHEN Grade >= 60 AND Grade < 70 THEN 'D'
WHEN Grade >= 0 AND Grade < 60 THEN 'E'
END
WHERE Grade IS NOT NULL;
COMMIT TRANSACTION;
END;
Go