发布时间:2025-12-10 11:19:39 浏览次数:13
目 录
一、 题目概述
二、 总体设计思想
三、 需求分析
四、 系统设计 2
五、概念结构设计
数据模型(E-R图)
六、逻辑结构设计
关系模型
七、物理结构设计
八、数据库实施
内容及要求:高校学生就业管理系统实现院系、专业、毕业生信息管理(设有就业标志,初值为“待业”);实现职业类型、职业信息(职业号、类型号、需求数量、聘用数量、用人单位)登记; 实现毕业生就业登记(学号、职业号),自动修改相应学生的就业标志和职业的聘用数量,并保证聘用数量不大于需求数量;创建存储过程查询毕业生的人数、待业人数、就业人数和就业率; 创建存储过程查询各专业的毕业生就业率;创建 check 约束限制毕业生性别必须为‘男’或‘女’; 建立表间关系。
在本次设计中,先进行小组集体分析了要完成的项目,在纸上进行了初步规划,为了后续小组合作SQL语句及其他方面的合作,小组集体讨论先对数据库和各个表的建立命名以及主键等约束性条件进行了统一,小组在完成SQL语句的编写后,进行了自我编写数据的硕写,并做了数据的表格,详细数据的建立可见附录。随后进行小组画ER图的统一,小组每个成员按照自己的理解各自画了ER图,最后在集体讨论后,确定了最终ER图的设计,用visio进行了实现。最后完成了关系模型的编写。在合作过程中,充分发挥了集体的作用,并对一系列相关知识点进行了复习。
3.1 信息要求
高校就业管理系统可以完成对学生信息的修改、查询(毕业生的人数、待业人数、就业人数和就业率以及各专业的毕业生就业率)、添加(学生基本信息、院系信息、公司信息等)。初步完成了对高校学生就业信息的管理,使用简单。
3.2 处理功能及要求
3.3 安全性和完整性
安全性:系统安全性要求体现在数据库安全性,信息安全性和系统平台的安全性等方面。安全性通过分配权限、设置权限级别来区别对待不同操作者对数据库的操作,来提高数据库的安全性。
完整性:系统完整性要求系统中数据的正确性以及相容性,通过建立主键、外键、check约束,并且使用触发器和级联操作。
四、系统设计
能够存储一定数量的学生信息、职业信息等,并方便有效的进行相应的学生数据操作和管理,这主要包括:
能够提供一定的安全机制,提供数据信息访问权限,防止随意更改。对查询、统计的结果能够列表显示出来。
五、概念结构设计
数据模型(E-R图)
院系分ER图
专业分ER图
职业信息分ER图
学生信息分ER图
职业类型分ER图
就业信息分ER图
合并ER图
六、逻辑结构设计
关系模型
tb_College(CollegeId,CollegeName)
规则:实体转换成关系。
tb_Sdept(SdeptId,SdeptName,CollegeId)
规则:实体转换成关系。1:n的联系合并到n,在n方加一个外键:学院号。
tb_Employment(Sno,JobId)
tb_JobInformation(JobId,TypeId,DemandNum,HireNum,Company)
tb_Student(Sno,Name,Sex,BirthDate,SdeptId,CollegeId,EmploymentSign,TypeId)
规则:实体转换成关系。1:n的联系合并到n方,在n方加两个外键:专业号、职业类型号。
tb_JobType(TypeId,TypeName,JobId)
规则:实体转换成关系。1:n的联系合并到n,在n方加一个外键:职业号。
七、物理结构设计
数据库名称:db_Graduation
表格 1 tb_College
| 列名 | 数据类型 | 是否为空 | 说明 |
| CollegeId | char(4) | Not null | Primary key |
| CollegeName | varchar(20) | Null |
表格 2 tb_Sdept
| 列名 | 数据类型 | 是否为空 | 说明 |
| SdeptId | char(4) | Not null | Primary |
| SdeptName | varchar(20) | null | |
| CollegeId | Char(4) | Foreign key |
表格 3 tb_Employment
| 列名 | 数据类型 | 是否为空 | 说明 |
| Sno | Char(11) | Nut null | Primary key |
| JobId | Char(4) | null |
表格 4 tb_JobInformation
| 列名 | 数据类型 | 是否为空 | 说明 |
| JobId | Char(4) | Nut null | Primary key |
| TypeId | Char(2) | Foreign key | |
| DemandNum | int | null | |
| HireNum | Int | null | |
| Company | Varchar(20) | null |
表格 5 tb_Student
| 列名 | 数据类型 | 是否为空 | 说明 |
| Sno | Char(11) | Nut null | Primary |
| Name | Varchar(10) | null | |
| Sex | Char(2) | Nut null | Check(男,女) |
| BirthDate | datetime | Null | |
| SdeptId | Char(4) | Nut null | Foreign key |
| CollegeId | Char(4) | Nut null | Foreign key |
| EmploymentSign | Varchar(6) | 初值为’待业’ |
表格 6 tb_JobType
| 列名 | 数据类型 | 是否为空 | 说明 |
| TypeId | Char(4) | Nut null | Primary key |
| TypeName | Varchar(10) | Null |
八、数据库实施
CREATE database db_Graduation
on primary
(
name=db_Graduation_data,
filename='D:\高校学生就业管理系统\db_Graduation_data.mdf',
size=10MB,
MAXSIZE=300MB,
filegrowth=10%
)
LOG ON
(
name=db_Graduation_log,
filename='D:\高校学生就业管理系统\db_Graduation_data.ldf',
size=5MB,
MAXSIZE=200MB,
filegrowth=2MB
)
use
db_Graduation
go
--创建学院信息表
create table tb_College
(
CollegeId char(4) primary key,
CollegeName varchar(20)
)
--创建专业信息表
create table tb_Sdept
(
SdeptId char(4) primary key,
SdeptName varchar(24),
CollegeId char(4),
foreign key(CollegeId)references tb_College(CollegeId)
)
--创建职业类型表
create table tb_JobType
(
TypeId char(2) primary key,
TypeName varchar(20)
)
--创建学生信息表
create table tb_Student
(
Sno char(11) primary key,
Name varchar(10),
Sex varchar(2),
BirthDate datetime,
SdeptId char(4),
CollegeId char(4),
EmploymentSign varchar(6),
foreign key(SdeptId)references tb_Sdept(SdeptId),
foreign key(CollegeId)references tb_College(CollegeId),
constraint C1 check(Sex='男' or Sex='女')
)
--创建就业信息表
create table tb_Employment
(
Sno char(11) primary key,
JobId char(4),
foreign key(Sno)references tb_Student(Sno)
)
--创建职业信息表
create table tb_JobInformation
(
JobId char(4) primary key,
TypeId char(2),
DemandNum int,
HireNum int,
Company varchar(20),
foreign key(TypeId)references tb_JobType(TypeId)
)
创建完表之后截图
图 2
--验证插入性别不为男女时
insert
into tb_Student(Sno,Sex)
values('20164051112','王')
验证插入学生表性别不为“男或女时”
图 3
--创建毕业生信息视图
go
create view 毕业生信息_VIEW(学号,姓名,性别,出生年月,专业,学院,就业标志)
as
select Sno,Name,Sex,BirthDate,SdeptName,CollegeName,EmploymentSign
from tb_Student,tb_Sdept,tb_College
where tb_Student.SdeptId=tb_Sdept.SdeptId and tb_Student.CollegeId=tb_College.CollegeId
创建视图的原因:学生表中无专业名称与学院名称,而设置了专业编号与学院编号,为了使数据库存储数据不冗余。
图 4
视图打开后:
图 5
--创建毕业生就业登记触发器
go
create trigger 毕业生就业登记插入_TRIG
on tb_Employment
after insert
as
begin
declare @DemandNum int,@Sno char(11),@JobId char(4)
select @DemandNum=DemandNum,@Sno=Sno,@JobId=tb_JobInformation.JobId
from tb_Employment,tb_JobInformation
where tb_Employment.JobId=tb_JobInformation.JobId
update tb_Student
set EmploymentSign='就业'
where Sno=@Sno
if(@DemandNum>0)
begin
update tb_JobInformation
set DemandNum=DemandNum-1
where JobId=@JobId
end
else
begin
rollback
end
End
在tb_Employment表中插入信息创建触发器
图 6
--验证触发器
insert
into tb_Employment
values('20164051109','0210')
插入之前:tb_JobInformation表
图 7
tb_Employment表
图 8
Tb_Student
图 9
验证之后:
图 10
tb_JobInformation表
图 11
tb_Employment表
图 12
Tb_Student
图 13
--创建存储过程
--查询毕业生的人数、待业人数、就业人数和就业率
GO
Create Proc proc_就业情况
@allstudents int out,
@unemployed int out,
@employed int out
as
begin
select @allstudents=COUNT(*)
from tb_Student
select @unemployed=COUNT(*)
from tb_Student
where EmploymentSign='待业'
select @employed=COUNT(*)
from tb_Student
where EmploymentSign='就业'
end
GO
Declare @allstudents1 int,@unemployed1 int,@employed1 int,@employeementRate varchar(6)
exec proc_就业情况 @allstudents1 output,@unemployed1 output,@employed1 output
select @employeementRate=@employed1/@allstudents1*100
print'毕业生中人数为'+convert(char,@allstudents1)
print'毕业生待业人数为'+convert(char,@unemployed1)
print'毕业生就业人数为'+convert(char,@employed1)
print'毕业生就业率为'+convert(varchar,convert(decimal(10,2),@employed1*1.0/@allstudents1*100))+'%'
存储过程方式一:
毕业学生信息:
图 14
各个专业学生信息:
图 15
--各专业毕业生就业率
Go
create Proc proc_本专业学生就业率
@sdept varchar(24),
@allstudents int out,
@employed int out
as
begin
select @allstudents=COUNT(*)
from tb_Student,tb_Sdept
where tb_Student.SdeptId=tb_Sdept.SdeptId and SdeptName=@sdept
select @employed=COUNT(*)
from tb_Student,tb_Sdept
where EmploymentSign='就业' and tb_Student.SdeptId=tb_Sdept.SdeptId and SdeptName=@sdept
end
GO
Declare @allstudents2 int,@employed2 int,@employeementRate1 varchar(6)
exec proc_本专业学生就业率 '财务管理',@allstudents2 output,@employed2 output
select @employeementRate1=@employed2/@allstudents2*100
print'该专业的毕业生就业率为'+convert(varchar,convert(decimal(10,2),@employed2*1.0/@allstudents2*100))+'%'
毕业学生信息:
图 16
GO
Create Proc proc_就业情况
@allstudents int out,
@unemployed int out,
@employed int out
as
begin
select @allstudents=COUNT(*)
from tb_Student
select @unemployed=COUNT(*)
from tb_Student
where EmploymentSign='待业'
select @employed=COUNT(*)
from tb_Student
where EmploymentSign='就业'
end
GO
Declare @allstudents1 int,@unemployed1 int,@employed1 int,@employeementRate1 varchar(6)
exec proc_就业情况 @allstudents1 output,@unemployed1 output,@employed1 output
select @employeementRate1=convert(varchar,convert(decimal(10,2),@employed1*1.0/@allstudents1*100))+'%'
select @allstudents1 毕业生人数,@unemployed1 待业人数,@employed1 就业人数,@employeementRate1 就业率
--创建存储过程
--查询各专业的毕业生就业率
Go
create Proc proc_本专业学生就业率
@sdept varchar(24),
@sdept1 varchar(24) out,
@allstudents int out,
@employed int out
as
begin
select @sdept1=@sdept
select @allstudents=COUNT(*)
from tb_Student,tb_Sdept
where tb_Student.SdeptId=tb_Sdept.SdeptId and SdeptName=@sdept
select @employed=COUNT(*)
from tb_Student,tb_Sdept
where EmploymentSign='就业' and tb_Student.SdeptId=tb_Sdept.SdeptId and SdeptName=@sdept
end
GO
Declare @allstudents2 int,@employed2 int,@sdeptemployeementRate1 varchar(6),@sdept2 varchar(24)
exec proc_本专业学生就业率 '财务管理',@sdept2 output,@allstudents2 output,@employed2 output
select @sdeptemployeementRate1=convert(varchar,convert(decimal(10,2),@employed2*1.0/@allstudents2*100))+'%'
select @sdept2 专业,@allstudents2 总人数,@employed2 就业人数,@sdeptemployeementRate1 就业率
各个专业学生信息: