📄 在线考试系统.sql
字号:
CREATE DATABASE 在线考试系统
ON PRIMARY
(NAME =examol_dat,
FILENAME ='e:\mssql\data\examoll.mdf',
SIZE = 10,
MAXSIZE =50,
FILEGROWTH =5)
LOG ON
(NAME=examol_log,
FILENAME ='e:\mssql\log\examoll.ldf',
SIZE = 10MB,
MAXSIZE =25MB,
FILEGROWTH =5MB)
use 在线考试系统
CREATE TABLE 考生信息表(
考生号 CHAR(8) NOT NULL PRIMARY KEY CHECK(ISNUMERIC(考生号)=1),
姓名 CHAR(10),
班级 VARCHAR(8) CHECK(ISNUMERIC(班级)=1),
系别 VARCHAR(10),
分数 FLOAT NULL )
CREATE TABLE 题库表1(
出题时间 DATETIME,
考试时间 DATETIME,
题库号 int,
科目 varchar(10)primary key,
题号 INT CHECK(ISNUMERIC(题号)=1),
题型 CHAR(10),
题目 VARCHAR(100) NOT NULL,
此题分数 FLOAT CHECK(ISNUMERIC(此题分数)=1),
正确答案 CHAR(10))
CREATE TABLE 题库表2(
出题时间 DATETIME,
考试时间 DATETIME,
题库号 int,
科目 varchar(10)primary key,
题号 INT CHECK(ISNUMERIC(题号)=1),
题型 CHAR(10),
题目 VARCHAR(100) NOT NULL,
此题分数 FLOAT CHECK(ISNUMERIC(此题分数)=1),
正确答案 CHAR(10))
CREATE TABLE 考试试题表(
题库号 int,
科目 varchar(10),
题号 INT CHECK(ISNUMERIC(题号)=1),
题型 CHAR(10),
题目 VARCHAR(100) NOT NULL,
此题分数 FLOAT CHECK(ISNUMERIC(此题分数)=1),
考生答案 CHAR(10))
ALTER TABLE 题库表1 ADD 考生答案 CHAR(10)
ALTER TABLE 题库表2 ADD 考生答案 CHAR(10)
ALTER TABLE 考生信息表 ADD 考试总时间 INT
ALTER TABLE 考生信息表 DROP COLUMN 考试总时间
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112301','ding','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112302','dong','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112303','fan','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112304','hu','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112305','huang','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112306','jiang','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112307','jin','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112308','li','051123','软件')
INSERT INTO 考生信息表(考生号,姓名,班级,系别)values('05112320','zhang','051123','软件')
create view v_s1 as
select 考生号,姓名,班级,系别,分数
from 考生信息表
select *
from v_s1
create view v_s2 as
select 科目,题号,题型,题目,此题分数,正确答案
from 题库表1
select *
from v_s2
create view v_s3 as
select 科目,题号,题型,题目,此题分数,正确答案
from 题库表2
select *
from v_s3
create view v_s4 as
select 科目,题号,题型,题目,此题分数,考生答案
from 考试试题表
select *
from v_s4
create trigger NEWSTUDENT
on 考生信息表
for insert
as print'插入一个考生信息!'
insert into 考生信息表(考生号,姓名,班级,系别)values('05112313','din','051123','软件')
create trigger NEWSUBJECT1
on 题库表1
for insert
as print'插入一个新题目!'
create trigger NEWSUBJECT2
on 题库表2
for insert
as print'插入一个新题目!'
create trigger 考生号管理
on 考生信息表 for insert
as
if not exists(select*from 考生信息表 where 考生号=(select 考生号 from inserted))
begin
raiserror('不能重复学号!',1,1)
rollback transaction
end
create trigger 题号管理1
on 题库表1 for insert
as
if not exists(select*from 题库信息 where 题号=(select 题号 from inserted))
begin
raiserror('不能重复题号!',1,1)
rollback transaction
end
create trigger 题号管理2
on 题库表2 for insert
as
if not exists(select*from 题库信息 where 题号=(select 题号 from inserted))
begin
raiserror('不能重复题号!',1,1)
rollback transaction
end
/*------------------------------------------------------------------------------------*/
CREATE PROCedure 考生信息核对_登陆;1
(@number int=null)
as
IF @number IS NULL
BEGIN
PRINT'您必须填写考生号,否则无法进入在线考试系统!'
RETURN 13
END
IF NOT EXISTS(SELECT * FROM 考生信息表 WHERE 考生号=@number)
BEGIN
PRINT'无此考生!'
RETURN -103
END
IF EXISTS (SELECT * FROM 考生信息表 WHERE 考生号=@number)
BEGIN
PRINT'顺利进入在线考试系统!'
END
execute 考生信息核对_登陆;1 05112316
execute 考生信息核对_登陆;1 05112320
/*--------------------------------------------------------------------------------*/
create procedure 选择科目;1
(@sub varchar(10)=null)
as
if @sub=null
begin
print '请输入您要考试的科目!'
return 13
end
if not exists (select * from 题库1
where 科目=@sub)
begin
print'请输入正确的考试科目!'
return -103
end
update 考试试题表 set 科目=(@sub)
execute 试题发配 @sub
begin
print '选择成功...现在开始考试!'
select top 1 题号,科目,题型,题目 from 考试试题表 where 考生答案 is null order by 题型,题号
return 14
end
return 0
/*----------------------------------------------------------------------------------*/
create procedure 试题发配;1
(@sub2 varchar(10)=null)
as
declare @i int,@j int,@k int
set @k=1
set @i=1
while(@i<=15)
begin
set @j=(select top 1 题号 from 题库1
where 科目=@sub2
order by newid())
if not exists (select*from 考试试题表 where 题号=@j )
begin
insert into 考试试题表(题库号,题号,科目,题型,题目,此题分数,考生答案)
select 题库号,题号,科目,题型,题目,此题分数,考生答案 from 题库1 where 题号=@j
update 考试试题表
set 题库号 =@k
set @i=@i+1
end
else
continue
end
declare @m int,@n int
set @m=1
while(@m<=15)
begin
set @n=(select top 1 试题号 from 题库2
where 科目=@sub2
order by newid())
if not exists (select*from 考试试题表 where 题号=@n )
begin
insert into 考试试题表(题库号,题号,科目,题型,题目,此题分数,考生答案)
select 题库号,题号,科目,题型,题目,此题分数,考生答案 from 题库2 where 题号=@n
update 考试试题表
set 题库号 =@k
set @m=@m+1
end
else
continue
end
set @k=@k+1
return 0
/*---------------------------------------------------------------------------------*/
CREATE PROCedure 考生信息;1
AS
IF EXISTS(SELECT * FROM 考生信息表 WHERE 考生号='05112320')
BEGIN
PRINT '该考生已经进入考试系统,不能退出再次进入系统!'
RETURN 13
END
execute 考生信息;1
/*------------------------------------------------------------------------------------*/
CREATE PROCedure 考试时间管理;1
(@timer1 DATETIME=NULL,@timer2 DATETIME=NULL)
AS
IF EXISTS(SELECT * FROM 考生信息表 WHERE 考试总时间<= DATEDIFF(HOUR,@timer1,@timer2))
BEGIN
PRINT'时间已经到了,必须交卷。不能再做啦!'
RETURN -103
END
execute 考试时间管理;1 '10:00:00.000','12:00:00.000 '
/*------------------------------------------------------------------------------------*/
CREATE PROCedure 考卷管理;1
AS
IF EXISTS(SELECT * FROM 考试试题表)
BEGIN
PRINT '该考生已经得到考卷,不能重发!'
RETURN 13
END
PRINT '打开考试试题,可以开始答卷啦!'
execute 考卷管理;1
/*------------------------------------------------------------------------------------*/
create procedure 答题要求;1
as
if exists ( select* from 考试试题表 where 考生答案 != 'A' or 考生答案 != 'B'or 考生答案 != 'C' or 考生答案 != 'D' )
begin
raiserror('请重新选择ABCD之一',1,1)
end
execute 答题要求;1
/*--------------------------------------------------------------------------------*/
create procedure 答题;1
(@ans varchar(5)=null)
as
begin
update 试卷
set 考生作答答案=@ans
where 题号=(select top 1 题号 from 考试试题表 where 考生答案 is null order by 题型,题号)
select 题号,科目,题型,题目,考生答案 from 考试试题表 where 考生答案 is not null order by 题型,题号
select top 1 题号,科目,题型,题目 from 考试试题表 where 考生答案 is null order by 题型,题号
end
return 0
/*---------------------------------------------------------------------------------*/
CREATE PROCedure 评分系统;1
AS
DECLARE @i INT,@totalmarks INT
SELECT @i=1
SELECT @totalmarks=0
WHILE(@i<=100)
BEGIN
IF EXISTS(SELECT * FROM 考试试题表 WHERE 题号=@i)
BEGIN
IF EXISTS(SELECT * FROM 题库信息表 WHERE 题号=@i and 正确答案 IN(SELECT 考生答案 FROM 考试试题表 WHERE 题号=@i))
BEGIN
SELECT @totalmarks=@totalmarks+2
END
end
SELECT @i=@i+1
END
PRINT'此学生的总分为:'
PRINT @totalmarks
UPDATE 考生信息表
SET 分数=@totalmarks
WHERE 考生号='05112301'
SELECT * FROM 考生信息表
execute 评分系统;1
--备份整个数据库
create PROCEDURE 在线考试系统back_up;1
as
backup database 在线考试系统
to disk='e:\mssql\db在线考试.bak'
--增量备份
backup database 在线考试系统
to disk='e:\mssql\add_db在线考试.bak'
with differential
execute 在线考试系统back_up;1
--恢复数据库,存储过程
create PROCEDURE db_recovery;1
as
--全备份的恢复
restore database 在线考试系统
from disk='e:\mssql\db在线考试.bak'
with norecovery
--增量备份恢复
restore database 在线考试系统
from disk='e:\mssql\add_db在线考试.bak'
with norecovery
execute db_recovery;1
/*-------------------------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -