附表2
漳州师范学院计算机科学与工程系
数据库课程设计总结报告
学生学号
姓名
学生管理系统数据库设计说明书
   
计算机科学与技术
 
12计师本
所属学期
2013-2014学年第 学期
1、项目介绍与设计目的
  1、项目介绍:
  1.1项目名称:学生选课管理系统
  1.2随着计算机的飞速发展,计算机应用的快速推广,计算机给我们的学习生活带来了极大的方便。本项目所开发的学生选课系统完成学校对学生的选课信息的统计与管理,减少数据漏掉的情况,同时也节约人力、物力和财力。告别以往的人工统计。
2、设计目的: 方便学生、老师、管理员使用,学生可以查看自己的选课信息,查询选课成绩,修改登入本系统的密码。教师可以,查看个人基本信息,查看所有学生的选课信息,可以查看指定学生的选课信息,为学生进行成绩的录入。管理员可以除具有教师的功能外,还具有添加或删除该学生、教师、以及课程的权限。    
2、项目环境要求
 
设备支持: 推荐配置:Windows Xp512内存
数据库:    Microsoft SQL Server 2005
3、项目功能模块
  数据字典
  学生信息表:学号、姓名、性别、班级号、出生年月、入学年份、用户名、密码
  教师信息表:职工号、姓名、所在院系、用户名、密码。
  选课信息表:学号、姓名、课程号、课程名、成绩。
  课程信息表:课程号、课程名、学分、职工号、教室号、课程容纳人数、上课时间、选修人数
  教室信息表:教室号、座位数。
  班级信息表:班级号、班级名。
  管理员信息表:工号、姓名、电话号码、密码.
    tb.student
字段名称
  数据类型
    说明
  是否为空
stno
    char(4)
    学号
  Not null
stname
    char(8)
  学生姓名
  Not null
stsex
    char(2)
    性别
  Not null
classno
    char(8)
    班级号
  Not null
stborndate
  smalldatetime
  出生年月
  Not null
stenyear
  smalldatetime
  入学时间
  Not null
stname1
    char(20)
  用户名
  Not null
stpassword
    char(6)
  密码
  Not null
     
                     
 
    USE xuankeDB
    CREATE TABLE student  --学生信息表
    ( 
      stno char(4) primary key, /*该列自动增长,由开始每次增加*/
      stname CHAR(8) NOT NULL,
      stsex  char(2) NOT NULL,
      CONSTRAINT sf_sex CHECK(stsex in ('','')),
      classno char(8),
      CONSTRAINT s_for FOREIGN KEY (classno)REFERENCES class(classno),
      stborndate datetime NOT NULL,
      stenyear datetime NOT NULL,
      stname1 CHAR(20) NOT NULL,
      stpassword CHAR(6) NOT NULL,
)
tb.teacher
字段名称
  数据类型
  说明
是否为空
tno
  char(5)
  职工号
Not null
tname
  char(8)
  姓名
Not null
tdepartment
  varchar(30)
  所在院系
Not null
tname1
  char(20)
  用户名
Not null
tpassword
  char(6)
  密码
Not null
  CREATE TABLE teacher
  (
      tno  char(5) primary key,
      tname  CHAR(8) NOT NULL,
      tdepartment VARCHAR(30) NOT NULL,
      tname1  CHAR(20) NOT NULL,
      tpassword CHAR(6) NOT NULL,
)
tb.course
字段名称
  数据类型
    说明
是否为空
  cno
  char(8)
  课程号
Not null
  cname
  char(30)
  课程名
Not null
  ccredit
  char(2)
  学分
Not null
  tno
  char(5)
  职工号
Not null
  clasroomno
  char(8)
  教室号
 
  cnum
  char(5)
课程容纳人数
Not null
  ctime
  char(12)
  上课时间
Not null
  coursenum
  int
  选课人数
  null
    CREATE TABLE course
    (
      cno char(8) primary key,
      cname CHAR(30) NOT NULL,
      ccredit CHAR(2)NOT NULL,
      tno char(5),
      CONSTRAINT c_for FOREIGN KEY (tno) REFERENCES teacher(tno),
      clasroomno char(8),
      cnum CHAR(5) NOT NULL,
      ctime CHAR(12) NOT NULL,
      coursenum int,
)
以下是创建其余各表的语句
    CREATE TABLE select_course
    (
      stno varchar(50),
      stname varchar(50),
      cno char(8),
      cname varchar(50),
      CONSTRAINT sc_is primary key(stno,cno),
      score INT
    )
      CREATE TABLE manager
      (
        ManagerNum char(8) primary key,
        ManagerName CHAR(8) NOT NULL,
        Managertelephone CHAR(11) NOT NULL,
        Managerpassword CHAR(6) NOT NULL, 
  ) 
E-R
 
 
 
关系模式
学生信息表(学号、姓名、性别、班级号、出生年月、入学年份、用户名、密码)
  教师信息表(职工号、姓名、所在院系、用户名、密码)
  选课信息表(学号、课程号、姓名、课程名、成绩)
  课程信息表(课程号、课程名、学分、职工号、教室号、课程容纳人数、上课时间、选修人数)
  教室信息表(教室号、座位数)
  班级信息表(班级号、班级名)
  管理员信息表(工号、姓名、电话号码、密码)
系统功能模块
 
创建约束
ALTER TABLE teacher
ADD CONSTRAINT tz_tno CHECK(tno LIKE '[0-9][0-9][0-9][0-9][0-9]'),
      CONSTRAINT th_psw CHECK(len(tpassword)=6),
      CONSTRAINT tK_pass CHECK(tpassword LIKE '[0-9][0-9][0-9][0-9][0-9][0-9]')
Go
ALTER  TABLE select_course
ADD CONSTRAINT sc_ch CHECK (score>=0 and score<=100)
插入数据
SET NOCOUNT ON  --不显示受影响的条数信息
INSERT INTO teacher(tno,tname,tdepartment,tname1,tpassword)
VALUES('10001','杜拉拉','计算机科学与工程系','dll','654321')
INSERT INTO teacher(tno,tname,tdepartment,tname1,tpassword)
VALUES('10002','陈小芳','计算机科学与工程系','cxf','121212')
创建视图
    create view 选课成绩
    AS
    select student.stno as 学号,student.stname as 学生姓名,course.cno as 课程号,
          course.cname as 课程名, select_course.score as 成绩
    from student,course,select_course
    where student.stno=select_course.stno
    and select_course.cno=course.cno
 
     
      create view 已选课信息
      AS
      select student.stno as 学号,student.stname as 学生姓名,
        teacher.tno as 教师职工号, teacher.tname as 教师姓名,
        course.cno as 课程号,course.cname as 课程名,course.ccredit as 学分,
        course.clasroomno as 上课地点,course.ctime as 上课时间
      from student,course,select_course,teacher
      where (student.stno=select_course.stno and course.cno=select_course.cno
            and teacher.tno=course.tno)
        create view 学生信息
        AS
        select stno as 学号,stname as 学生姓名,stsex as 性别,
              classno as 班级号, stborndate as 出生年月,
              stenyear as 入学时间, stname1 as 用户名, stpassword as 密码
        from student
创建触发器
  /*删除学生表的记录时,同时删除选课表中的选课信息*/
  create trigger tri_delestudent on student
  after delete
  as
    begin
    declare @xh char(10)
    select @xh=stno from deleted
    delete from select_course where select_course.stno=@xh
    end
    delete from student where stno='1002'
    select*from student
select*from select_course
  /*编写插入触发器,要求每位学生的选课门数不超过2*/
    create trigger check_num on select_course
    after insert
    as
    if(select count(1)from select_course where stno=(select stno from inserted ))>2
    begin
    rollback tran 
    raiserror 50001 N'不能超过2门选课'
    end
  /*创建课程选课人数限制的触发器*/
  create trigger tri_limitcourse on select_course
  after insert
  as
  if(select count(1) from course where cno=(select cno from inserted ))>50
  begin
  rollback tran
  raiserror 50001 N'所对应课程选课人数不能超过50!'
  End
  /*创建课程选课人数更新的触发器*/
  create trigger tri_sum on select_course
  after insert,delete
  as
  begin
  declare @t_sum int
  select @t_sum=sum(1) from select_course
  where cno=(select cno from inserted)
  update course set coursenum=@t_sum
  where cno=(select cno from inserted)
  end
  /*在插入、修改、删除教师数据时,会自动显示所有教师信息*/
  create trigger print_teacher on teacher for insert,update,delete
  as select *from teacher
  create trigger tri_teacher on teacher
  for insert,update,delete
  as
  update teacher set tpassword='120678'
  where tpassword in(select tpassword where tno='10001')
创建存储器
/*创建学生成绩录入的存储过程*/
  create procedure InsertResult  /*输入学号,课程号,分数*/
  @studentno1 char(7),
  @cno1 varchar(32),
  @score1 int
  as
  set  NOCOUNT ON
  declare @nCount int  SET @nCount=0
  declare @ncno  int SET @ncno=0
  declare @cno2 int set @cno2=0
  declare @nExistAchievement int set @nExistAchievement=0
  --判断学号是否存在
  select
  @nCount = COUNT(*)
  from student
  where student.stno=@studentno1
  if @nCount < 1
  begin
  print'学生基本信息表中不存在此学号,请检查后重新输入'
  return
  end
  select            /*判断选修课及成绩*/
  @cno1=count(*),
  @nExistAchievement=select_course.score
  from select_course
  Group by select_course.score,select_course.cno
  if @cno1<1
  begin
  print'该学生的选修中没有这门课'
  return
  end
  if @nExistAchievement>0
  begin
  print'此学生的这门课的成绩已经录入,请不要重复录入'
  return
  end
  update select_course set select_course.score=@score1
  where select_course.stno=@studentno1
  insert into select_course(stno,stname,cno,cname)
  values('1003','李芳','c03','教师礼仪')
  EXECUTE InsertResult'1003','c03','99'
  select*from select_course
  执行存储过程后的结果如下所示
 
 
  /*带参数的存储过程,查询某个同学的基本信息*/
    use xuankeDB
    GO
    create procedure Getstudent
    @number char(7)
    as
    select *from student
    where stno=@number
    GO
    EXECUTE getstudent'1001'
  /*添加课程信息*/
    create procedure insert_course
    @t_cno char(7),
    @t_cname char(8),
    @t_credit char(4),
    @t_tno char(8),
    @clasroomno char(8),
    @cnum char(4),
    @time char(8),
    @t_coursenum char(5),
    @rtn int output
  as
    set  NOCOUNT ON
  declare
  @cname1 char(20),
  @cno char(7)
  if exists(select * from course where cno=@t_cno)
  begin
  select @cname1=@t_cname from course where cno=@t_cno
  if(@cname1=@t_cname)
  begin
  set @rtn=/*有相同的数据*/
  end
  end
  else
  begin insert into course
  values(@t_cno,@t_cname,@t_credit,@t_tno,@clasroomno,@cnum,
      @time,@t_coursenum)
  set @rtn=/*没有相同的数据,请进行插入操作*/
  End
  调用存储过程的执行语句,以及结果
  declare @rtn int
  exec insert_course 'c04','java程序设计','4','10001','励志','50','5-16','0',@rtn output
  if @rtn=0
  print'已经存在相同的,不能重复输入'
  else if @rtn=1
  print'插入成功'
  /*创建删除教师的存储过程*/
  create procedure dele_teacher
  @t_no char(7)
  as
  set nocount on
  print'删除成功'
  delete from teacher
  where tno=@t_no
  Go
  EXECUTE dele_teacher'10003'
  /*创建修改教师个人信息的存储过程*/
  create procedure alter_teacher
  @t_no1 char(7)
  as
  update teacher set tpassword='201314'
  where tpassword in(select tpassword where tno='10003')
  EXECUTE alter_teacher'10003'
  /*按学生的学号查询学生所有课程的成绩*/
  create  procedure  che_score
  @st varchar(20)
  as
  select select_course.cno,select_course.cname,select_course.score
  from select_course
  where select_course.stno=@st
  EXECUTE che_score'1002'
四、小组成员名单及分工情况(要求包括小组成员名单、工作分配及小组各成员贡献度))
五、程序用户名及密码
管理员:王东成  密码:878787
教师:  杜拉拉  密码:120678
        陈小芳  密码:121212
        张烨星  密码:201314
学生:  张三    密码:123456
        李四    密码:111111
6、体会与感想
    这次的课程设计,可以说是毕业设计的一次预演。做起来的时候困难重重,去图书馆数据库系统开发的书籍,发现有许多我们没有接触过的知识。甚至有些代码都看不懂。在经过长时间的摸索,以及上网查资料,我学会了许多,也让我明白了数据库的应用性原来这么强。让我产生了进一步深入学习数据库编程的兴趣,同时,让我增强了自学能力。
七、指导教师意见
                                                  指导教师(签名)
                                                               
注:该表格由学生填写,内容采用小四号宋体。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。