数据库课程设计<网上选课系统>
从老七那找的代码,自己改的,运行。然后加上报告。
CREATE DATABASE 学生选课系统 USE 学生选课系统 CREATE TABLE 系别表 ( 系别号 char(20) PRIMARY KEY NOT NULL, 系别名 char(20) NOT NULL, ) INSERT INTO 系别表 VALUES('a01','软件系') INSERT INTO 系别表 VALUES('b01','资环系') INSERT INTO 系别表 VALUES('c01','外法系') INSERT INTO 系别表 VALUES('d01','机电系') CREATE TABLE 专业表 ( 专业号 char(20) PRIMARY KEY NOT NULL, 专业名 char(20) NOT NULL, ) INSERT INTO 专业表 VALUES('s01','软件工程') INSERT INTO 专业表 VALUES('s02','网络工程') INSERT INTO 专业表 VALUES('s06','英语') INSERT INTO 专业表 VALUES('s10','资源与环境工程') INSERT INTO 专业表 VALUES('s14','德语') INSERT INTO 专业表 VALUES('s18','自动化') CREATE TABLE 职称表 ( 职称号 char(20) PRIMARY KEY NOT NULL, 职称名 char(20) NOT NULL ) <span id="more-184"></span>
INSERT INTO 职称表 VALUES('z01','讲师') INSERT INTO 职称表 VALUES('z02','助教') INSERT INTO 职称表 VALUES('z03','副教授') INSERT INTO 职称表 VALUES('z04','教授') CREATE TABLE 学生表 ( 学号 char(20) PRIMARY KEY NOT NULL, 姓名 varchar(20) NOT NULL, 年龄 int NOT NULL, 性别 char(5) NOT NULL, 年级 char(10) NOT NULL, 班级 char(20) NOT NULL, 系别号 char(20) FOREIGN KEY REFERENCES 系别表(系别号) NOT NULL , 专业号 char(20) FOREIGN KEY REFERENCES 专业表(专业号) NOT NULL ) INSERT INTO 学生表 VALUES('07112421','张三','20','男','三年级','071124','a01','s02') INSERT INTO 学生表 VALUES('08113201','李世','18','男','二年级','081132','a01','s01') INSERT INTO 学生表 VALUES('07113526','王武','22','男','三年级','071135','b01','s10') INSERT INTO 学生表 VALUES('07113401','王倩','21','女','三年级','071134','c01','s06') INSERT INTO 学生表 VALUES('08114513','刘伟','20','男','二年级','081145','d01','s18') CREATE TABLE 教师表 ( 教师号 char(5) PRIMARY KEY NOT NULL, 姓名 char(10) NOT NULL, 性别 char(2) NOT NULL , 职称号 char(20) FOREIGN KEY REFERENCES 职称表(职称号) NOT NULL, 系别号 char(20) FOREIGN KEY REFERENCES 系别表(系别号) NOT NULL ) INSERT INTO 教师表 VALUES('t01','王刚','男','z03','c01') INSERT INTO 教师表 VALUES('t02','李云','女','z01','a01') INSERT INTO 教师表 VALUES('t01','李忠','男','z04','a01') INSERT INTO 教师表 VALUES('t01','费明','男','z02','d01') CREATE TABLE 课程表 ( 课程号 char(5) PRIMARY KEY NOT NULL, 课程名 char(12) NOT NULL, 学分 float NOT NULL, 学时 int NOT NULL, 已选人数 int NOT NULL CHECK(已选人数>=0) DEFAULT 0, 限选人数 int NOT NULL CHECK(限选人数>=0 AND 限选人数<=120) DEFAULT 50 ) INSERT INTO 课程表 VALUES('c01','电影欣赏','1','20','','') INSERT INTO 课程表 VALUES('c02','德语','1.5','45','','') INSERT INTO 课程表 VALUES('c01','桥牌','1','32','','') INSERT INTO 课程表 VALUES('c01','中国象棋','1','24','','') INSERT INTO 课程表 VALUES('c01','化学与人类','1','40','','') CREATE TABLE 选课表 ( 学号 char(20) FOREIGN KEY REFERENCES 学生表(学号) NOT NULL , 课程号 char(5) FOREIGN KEY REFERENCES 课程表(课程号) ON DELETE cascade NOT NULL , 成绩 float CHECK(成绩 >=0 AND 成绩<=100) , PRIMARY KEY(学号,课程号) ) INSERT INTO 选课表 VALUES('07112421') CREATE TABLE 授课表 ( 课程号 char(5) FOREIGN KEY REFERENCES 课程表(课程号) ON DELETE cascade NOT NULL , 教师号 char(5) FOREIGN KEY REFERENCES 教师表(教师号) NOT NULL , PRIMARY KEY(教师号,课程号) ) /*选课存储过程*/ CREATE procedure sp_add (@学号 char(20),@课程号 char(5), @成绩 float) AS IF NOT EXISTS(SELECT * FROM 学生表 WHERE 学号=@学号)/*检验学号*/ begin print '该学号不存在!' RETURN -1 end IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@课程号)/*检验课程号*/ begin print '该课程号不存在!' RETURN -1 end IF NOT EXISTS(SELECT * FROM 选课表 WHERE (课程号=@课程号 AND 学号=@学号))/*检验课程号*/ begin print '该课程号已经选过一次!' RETURN -1 end begin INSERT 选课表 VALUES (@学号,@课程号,@成绩) UPDATE 课程表 SET 已选人数=已选人数+1 WHERE 课程号=@课程号 end /*实施开始选课*/ execute sp_add '07114301','001',78/*执行存储过程*/ execute sp_add '07114302','002' execute sp_add '07114303','003' execute sp_add '07114304','004' execute sp_add '07114305','005' DROP procedure sp_add /*删除开始选课存储过程*/ /*退课存储过程*/ CREATE procedure sp_delete (@学号 char(20),@课程号 char(5) ) AS IF NOT EXISTS(SELECT * FROM 学生表 WHERE 学号=@学号)/*检验学号*/ begin print '该学号不存在!' RETURN -1 end IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@课程号)/*检验课程号*/ begin print '该课程号不存在!' RETURN -1 end IF NOT EXISTS(SELECT * FROM 选课表 WHERE (学号=@学号 AND 课程号=@课程号)) /*检验是否已经选课*/ begin print '您还未选该课!' RETURN -1 end begin DELETE FROM 选课表 WHERE (学号=@学号 AND 课程号=@课程号 ) UPDATE 课程表 SET 已选人数=已选人数-1 WHERE 课程号=@课程号 end /*改课存储过程*/ CREATE procedure sp_update (@学号 char(20),@原课程号 char(5),@现课程号 char(5)) AS IF NOT EXISTS(SELECT * FROM 学生表 WHERE 学号=@学号)/*检验学号*/ begin print '该学号不存在!' RETURN -1 end else IF NOT EXISTS(SELECT * FROM 选课表 WHERE 学号=@学号) /*检验是否已经选课*/ begin print '您还未选课!' RETURN -1 end else IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@原课程号)/*检验课程号*/ begin print '该课程号不存在!' RETURN -1 end else IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@现课程号)/*检验课程号*/ begin print '该课程号不存在!' RETURN -1 end else IF NOT EXISTS(SELECT * FROM 选课表 WHERE (课程号=@原课程号 AND 学号=@学号)) begin print '您未选该原选课程!' RETURN end else begin UPDATE 课程表 SET 已选人数=已选人数-1 WHERE 课程号=@原课程号 UPDATE 课程表 SET 已选人数=已选人数+1 WHERE 课程号=@现课程号 UPDATE 选课表 SET 课程号=@现课程号 WHERE (学号=@学号 AND 课程号=@原课程号) end execute 开始改选 '07110502','001','003'/*执行开始改选存储过程*/ execute 开始改选 '07110502','002','004' execute 开始改选 '07110502','004','002' DROP procedure sp_update/*删除开始改选存储过程*/ /*向选课表中添加选课信息触发器*/ CREATE TRIGGER tr_add ON 选课表 FOR INSERT AS declare @选课数 int declare @已选人数 int declare @限选人数 int SELECT @选课数=count(*) FROM 选课表 WHERE 学号=(SELECT 学号 FROM inserted) SELECT @已选人数=count(*) FROM 选课表 WHERE 课程号=(SELECT 课程号 FROM inserted) SELECT @限选人数=限选人数 FROM 课程表 WHERE 课程号=(SELECT 课程号 FROM inserted) IF(@已选人数>=@限选人数) /*选课筛选:该课程人数满。*/ begin /*raiserror:返回用户定义的错误信息并设系统标志,记录发生错误。通过使用 RAISERROR 语句,客户端可以从 sysmessages 表中检索条目,或者使用用户指定的严重度和状态信息动态地生成一条消息。这条消息在定义后就作为服务器错误信息返回给客户端。*/ raiserror('该课程人数已满!',16,1) /*raiserror('返回错误内容',严重度(0-18),state(默认值为1))*/ rollback transaction /*清除自事务的起点或到某个保存点所做的所有数据修改*/ end else IF (@选课数>1) /*选课筛选:最多只能选3门。*/ begin raiserror('最多只能选1门课!',16,1) rollback transaction end else /*选课成功*/ begin UPDATE 课程表 SET 已选人数=已选人数+1 WHERE 课程号=(SELECT 课程号 FROM inserted) print '选课成功!' end DROP TRIGGER tr_add /*删除触发器*/ /*向选课表中删除选课信息触发器*/ CREATE TRIGGER tr_delete ON 选课表 FOR DELETE AS begin UPDATE 课程表 SET 已选人数=已选人数-1 WHERE 课程号=(SELECT 课程号 FROM deleted) print '删除选课成功!' end DROP TRIGGER tr_delete/*删除触发器*/ /*增加课程*/ CREATE procedure sp_addcourse (@课程号 char(5) , @课程名 char(12) , @学分 float , @学时 int , @已选人数 int , @限选人数 int ) AS IF EXISTS(SELECT * FROM 课程表 WHERE 课程号=@课程号)/*检验学号*/ begin print '该课程号已经存在!' RETURN -1 end else IF EXISTS(SELECT * FROM 课程表 WHERE 课程名=@课程名)/*检验课程号*/ begin print '该课程名已经存在!' RETURN -1 end else begin INSERT 课程表 VALUES (@课程号,@课程名,@学分,@学时,@已选人数,@限选人数)/*添加选课内容到选课表*/ end /*删除课程*/ CREATE procedure sp_deletecourse (@课程号 char(5) ) AS IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@课程号)/*检验学号*/ begin print '该课程号不存在!' RETURN -1 end else begin DELETE FROM 课程表 WHERE 课程号=@课程号 DELETE FROM 选课表 WHERE 课程号=@课程号 DELETE FROM 授课表 WHERE 课程号=@课程号 end CREATE TRIGGER tr_deletecourse ON 课程表 FOR DELETE AS declare @课程号 char(5) SELECT @课程号=课程号 FROM deleted IF NOT EXISTS(SELECT * FROM 课程表 WHERE 课程号=@课程号)/*检验学号*/ begin print '该课程号不存在!' RETURN end begin DELETE FROM 课程表 WHERE 课程号=@课程号 DELETE FROM 选课表 WHERE 课程号=@课程号 DELETE FROM 授课表 WHERE 课程号=@课程号 end DROP TRIGGER tr_deletecourse/*删除触发器*/ CREATE procedure sp_select (@学号 char(20)) AS IF NOT EXISTS(SELECT * FROM 选课表 WHERE 学号=@学号) /*检验是否选课*/ begin print '您还未选课!' RETURN -1 end else begin /*列出该学生所选课程的全部内容*/ SELECT 课程名,姓名 ,教师,学分,学时 FROM 选课表 ,教师表 ,授课表 ,student ,课程表 WHERE (授课表.教师号=教师表.教师号 AND 选课表.课程号=课程表.课程号 AND student.学号=@学号) end execute sp_select '07110502' DROP procedure sp_select /*对选该课程的学生进行查询*/ CREATE procedure sp_student (@课程号 char(5)) AS IF NOT EXISTS(SELECT * FROM 选课表 WHERE 课程号=@课程号) begin print '该课程号不存在!' RETURN -1 end else begin /*列出选该课程的学生的部分信息*/ SELECT 学号,姓名,性别,系别名,专业名 FROM 系别表,专业表,学生表 WHERE (学号 IN(SELECT 学号 FROM 选课表 WHERE 课程号=@课程号)AND 专业表.专业号=学生表.专业号 AND 系别表.系别号=学生表.系别号) end execute 选课名单 '001' /*执行选课名单存储过程更*/ execute 选课名单 '003' DROP procedure sp_student /*删除选课名单存储过程*/ /*通过学号删除一个学生所有选课系统中的全部信息的存储过程*/ CREATE procedure sp_deletestudent (@学号 char(20)) AS IF NOT EXISTS(SELECT @学号 FROM 学生表) /*检验学号是否存在*/ begin print '该学号不存在!' RETURN -1 end else /*删除该学号学生的全部信息成功*/ begin UPDATE 课程表 SET 已选人数=已选人数-1 WHERE 课程号 IN (SELECT 课程号 FROM 选课表 WHERE 学号=@学号) DELETE FROM 选课表 WHERE 学号=@学号 DELETE FROM 学生表 WHERE 学号=@学号 end execute 删除学生 '07110502'/*执行删除学生存储过程*/ DROP procedure sp_deletestudent /*删除删除学生存储过程*/




SQL SERVER啊,这个对事物的支持比MYSQL好多了..
@liupeng
是啊。
终于答辩完了,以全胜战绩结束本学期,大学结束了。
你什么时候回家?
你们都答完辩了?
@crossyou 本学期的课程设计答辩,毕业设计还没开始。
老七 这么牛叉叉……!