1、 培训学校信息管理系统软件需求说明书注:本说明书为虚构的简化版本【说明】培训学校需要一个全面的信息管理平台。需求分析结果如下。【需求分析】 学生参加培训课程前,先到培训学校报到,安排宿舍。新生报到的时候,需要将个人基本信息包括学号、姓名、出生日期、身份证号、性别输入系统,在系统中形成自己的数据项。报到后,由宿舍管理部门分配宿舍,宿舍信息包含房间号、容量、剩余容量、性别。分配的时候,按照性别不同依次安排在某个宿舍中,不存在男女同住的情况。每个宿舍可以容纳6名学生,每名学生只能住宿一个宿舍。 教职工分为教师和职员两类。教师负责授课,职员负责日常事务。教职工信息包含教职工工号、姓名、出生日期、身份证
2、号、性别、教职工类型,其中教师还包含职称信息。教师可以开设教学班,教学班信息包含教学班号、开课学期、上课起止时间、教室、人数、评价。一名教师可以开设多个教学班,一个教学班仅对应一名教师。一门课可以对应多个教学班,但一个教学班仅对应一门课程,课程信息包含课程号、课程名、学时。 学生选择教学班,一个学生可以选择多个教学班,一个教学班也包含多名学生。培训结束时,产生考试成绩。 每个月发放教职工工资,工资信息包含发工资年月、基本工资、课时费、扣税、应发工资。【任务1:概念模式设计】根据需求阶段收集的信息,画出实体联系图。【任务2:关系模式设计】根据实体联系图,设计关系模式,并给出每个关系中的主键和外键
3、。注:教职工工资记录每月1条;开课学期为XXXX-XX,表示学年第1(或2)学期,如2016学年第1学期表示为2016-01;学生学号以S打头,加上六位数字,前两位数字表示年份,后四位数字表示学号,学号从0001记起,如S160001表示16年入学,学号为0001的学生;房间号为XX-XXX,如11-321表示11栋321室;课程号以C打头,加上四位数字,课程号从0001记起;教职工号以T打头,加上四位数字,以0001记起;教学班号为TC-XXXX-XXX,如TC-2016-001表示2016年第一个教学班; 上课起止时间可表示如周三8:00-10:00等。【任务3:创建表】根据关系模式,使用
4、创建表语句在SQL SERVER中创建相应表,并为每张表插入适当记录。【任务4:写出SQL语句】(1)显示男同学的SQL SERVER课程的平均成绩。(2)将男同学和男教师的姓名、出身日期、身份证号合并显示出来。(3)创建视图显示女同学的姓名,出身日期,身份证号。(4)按性别分组统计每个组的学生人数。(5)按性别分组统计女同学的平均年龄,将平均年龄大于20岁的组显示出来。(6)显示S160002号学生选修的所有课程的课程名,成绩及任课教师姓名。(7)显示所有成绩都在90分以上的学生的学号,姓名。【任务5:完成存储过程】(1)学生查询成绩相关信息输入:学号、身份证号输出:选修总课程数、最好成绩、
5、最差成绩、平均分 (所有信息使用输出参数输出)。(2)学生查询某门课程成绩输入:学号、身份证号、教学班号输出:成绩 (3)工资信息查询写存储过程查询教职工工资输入:员工号、发放年月输出:应发工资是否正确,如正确,Return 1,不正确,Return 状态0,并输出正确的应发工资。注:根据输入的年月判断当前的学期,如输入2016-04,则为2016年第一学期(1-6月为当年第1学期,7-12月为当年第二学期),根据学期判断教学班中每位教师的授课时数来计算工资。工资计算公式如下:月工资 = 基本工资 + 课时费 扣税基本工资:讲师(1000),副教授(1500),教授(2000)课时费 = 每课
6、时工资 课时数每课时工资:讲师(80),副教授(90),教授(100)工资低于3500元不扣税,工资在3500-5000,超出部分按3%扣税,工资在5000以上,超出部分按10%扣税。如果是普通职员,则基本工资为3000,课时费为0。(4)任课教师了解课程考试情况输入:工号、身份证号、教学班号输出:平均分、90分以上人数、70-90之间人数、60-70人数以及不及格人数、最高分、最低分(输出参数)(5)为新生安排宿舍,由两个存储过程完成。存储过程1显示可选宿舍,存储过程2选定宿舍,为新生安排。存储过程1输入:学号存储过程1输出:显示符合条件的房间号注:适合的房间号含义为性别和该学号学生相同,同
7、时房间剩余容量大于零。存储过程2输入:学号、房间号存储过程2输出:为学生安排宿舍,同时相应宿舍剩余容量减1。(6)任课教师了解上课信息输入:教学班号输出:上课总人数、教师工号、课程号、学期、上课起止时间、教室 (7)转教学班允许学生转教学班,学生选课表中允许修改教学班号,对应的教学班表中,原教学班的总人数少1,新教学班的总人数加1。(提示:事务完成)输入:学号、新教学班号 (8)使用事务完成学生选课,学生选择教学班时,SC表应插入一条选课记录,同时教学班表对应的总人数加1,如果总人数超过50,则回滚事务。【任务6:触发器】使用触发器完成为学生表添加一条记录,则触发器触发,对应宿舍的剩余容量减1
8、,查询剩余容量值,如果剩余容量值0,则回滚事务。【任务7:并发处理】为学生提供定车票服务,车票信息包含车次、日期、起发时间、到达时间、剩余张数。写存储过程进行购票。CREATE PROC prcSellTicketTicketInfo varchar(20), -车次信息TicketNum int -售出张数ASBegin tranDeclare TicketLeaveNum intSelect TicketLeaveNum = TicketLeaveNum from TicketWhere TicketInfo = TicketInfo -waitfor delay 00:00:20.005Update Ticket set TicketLeaveNum = TicketLeaveNum - TicketNumWhere TicketInfo = TicketInfo -If(TicketLeaveNum TicketNum )beginrollback tranprint 售票失败endElse beginCommit tranprint 售票成功end上述存储过程是否会产生并发错误?如何解决?【任务8】结合本学期学习数据库课程,谈一谈对该课程的的建议和意见。