Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EXAMEN DE UNIDAD I
SISTEMA DE MATRÍCULAS
Implemente los scripts para la integridad de la base de datos del Sistema de matrículas de
la UNT, teniendo en cuenta los siguientes aspectos:
a) Verificar que la matrícula de un alumno en algún curso, se lleve a cabo sin problemas
siempre y cuando tenga el curso prerrequisito debidamente aprobado, en caso contrario
rechazar la matrícula.
b) Asimismo, verificar que el alumno no exceda el número de créditos permitido por ciclo
(máximo 22), en caso contrario, no permitir el registro de la matrícula.
c) También, verificar que el horario del curso no se cruce con el horario de otro curso,
caso contrario rechazar la matrícula en dicho curso.
Una matrícula solamente es posible en la lista de los cursos del plan de estudios
de la carrera profesional del alumno, así también, un alumno solamente se podrá
matricular en aquellos cursos que la escuela viene ofertando en el semestre actual.
Implemente el trigger que permita aceptar o rechazar el registro de la matrícula
según corresponda. Cuando una matrícula ha sido aceptada, actualizar la vacante
ocupada en cada curso, y la lista de alumnos matriculados por curso; para el
docente.
Elabore el diagrama de la base de datos en SQL.
Desarrolle su solución integral utilizando: Funciones, triggers, cursores, vistas,
procedimientos almacenados o lo necesario.
--Crear BD_Examen_I
GO
CREATE DATABASE BD_Examen_I
--Crear Tablas
USE BD_Examen_I
go
CREATE TABLE ALUMNO
(
alumno_id integer IDENTITY ( 1,1 ) ,
nombre varchar(60) NULL
)
go
-- Condiciones
GO
USE BD_Examen_I
GO
IF OBJECT_ID('SP_00_añadir_matricula') IS NOT NULL
DROP PROCEDURE SP_00_añadir_matricula
GO
-- RETORNA UNA CADENA DE ACUERDO A LA POSICION SOLICITADA
CREATE FUNCTION dbo.indexOf(@cadena VARCHAR(1000),@indice INTEGER)
RETURNS VARCHAR(50) AS
BEGIN
declare @posicion int
declare @valor varchar(100)
declare @contador integer
set @contador = 0
set @cadena = @cadena + ','
while patindex('%,%' , @cadena) <> 0
begin
set @posicion = patindex('%,%' , @cadena)
set @valor = left(@cadena, @posicion - 1)
if @contador = @indice
return @valor
set @cadena = stuff(@cadena, 1, @posicion, '')
set @contador = @contador + 1
end
return 'error'
END
GO
CREATE PROCEDURE SP_00_añadir_matricula
@alumno_id INTEGER, @cursos_id VARCHAR(100), @numeroCursos INTEGER,
@periodo VARCHAR(5), @año INTEGER AS
BEGIN
declare @cont integer
declare @idCurso integer
declare @existe integer
declare @idPrerrequisito integer
declare @idMatricula integer
declare @aproboPrerequisito VARCHAR(5)
declare @llevoPrerrequisito integer
declare @numeroCreditos integer
declare @numeroTemp integer
declare @cadenaHorario VARCHAR(50)
declare @cont2 integer
declare @idCursoTemp integer
declare @idHorario integer
set @cadenaHorario = ''
set @cont = 0
set @cont2 = 0
set @existe = 1
set @numeroCreditos = 0
while(@cont < @numeroCursos)
begin
set @idCurso = CONVERT(integer,dbo.indexOf(@cursos_id,@cont))
-- APROBO PRERREQUISITO
declare idPrerequisitosCursor CURSOR FOR SELECT curso_id FROM
PRERREQUISITOS WHERE curso_IDD = @idCurso
open idPrerequisitosCursor
while @@FETCH_STATUS = 0
begin
fetch next from idPrerequisitosCursor into @idPrerrequisito
-- TENGO EN @idPrerrequisito el cursoprerequisto del curso
seleccionado
if @idPrerrequisito is null
break
SELECT @llevoPrerrequisito = COUNT(*) FROM ALUMNO AS A
INNER JOIN MATRICULA AS M ON M.alumno_id = A.alumno_id
INNER JOIN CURSOS_MATRICULA AS CM ON CM.matricula_id =
M.matricula_id
WHERE(@idPrerrequisito = CM.curso_id)
if @llevoPrerrequisito = 0
begin
close idPrerequisitosCursor
deallocate idPrerequisitosCursor
RAISERROR('No se puede matricular no llevas un curso
de prerequisito',16,8)
return
end
else
begin
if @aproboPrerequisito = 'NA'
begin
close idPrerequisitosCursor
deallocate idPrerequisitosCursor
RAISERROR('No se puede matricular, no aprobo
prerequisito',16,8)
return
end
end
end
close idPrerequisitosCursor
deallocate idPrerequisitosCursor
end
set @cont = 0
INSERT INTO MATRICULA(alumno_id) VALUES(@alumno_id)
set @numeroTemp = @@IDENTITY
declare @idSemestre integer
SELECT @idSemestre = S.semestre_id FROM SEMESTRE AS S WHERE S.año =
@año AND S.periodo = @periodo
END
--Prueba
GO
USE BD_Examen_I
GO
BEGIN TRY
BEGIN TRANSACTION Transaccion
-- INSERTAR UN NUEVO SEMESTRE
INSERT INTO SEMESTRE(año,periodo) VALUES(YEAR(GETDATE()),'I')
-- INSERTAR CURSOS
INSERT INTO CURSO(nombre,creditos)
VALUES('Comunicacion',2),('Base de Datos',3),('Iso',3),('SISPOPE',22)
-- INSERTAR PREREQUISITOS
INSERT INTO PRERREQUISITOS(curso_IDD,curso_id) VALUES(1,2)
-- INSERTAR ALUMNO
INSERT INTO ALUMNO(nombre) VALUES('Jose Valverde'),('Alexis
Meregildo'),('Segundo Avila'),('Jorge Sosa')
-- CREAR HORARIO
INSERT INTO HORARIO(dias,hora)
VALUES('Lunes','8'),('Martes','8'),('Miercoles','8'),('Jueves','8')
-- INGRESAR SEMESTRE CURSO
INSERT INTO
SEMESTRE_CURSO(semestre_id,curso_id,horario_id,numero_vacantes)
VALUES(1,1,1,13),(1,2,2,0),(1,3,1,20),(1,4,3,10)