代码改变世界

数据库表设计

2015-06-14 22:59  迎面有风吹过来  阅读(737)  评论(5编辑  收藏  举报

 数据库表设计

分析上述各实体的属性集,从中找出关系的主键,然后用关系式来表示实体(其中下划线的属性为主键)。表4-1至表4-5分别给出了主要表结构各实体的属性如下:

表4-1  admin

表名称 

主要字段

数据类型

长度

属性

输入方式

描述

备注

管理员表

Id

字符串

10

NN

输入

用户名(主键)

 

Name

字符串

50

NN

输入

管理员名字

 

Password

字符串

10

NN

输入

密码

 

备注

用于定义登录系统的管理员,只有获得权限的管理员才能登录。

表4-2  Checkin

表名称 

主要字段

数据类型

长度

属性

输入方式

描述

备注

用户表

Id

字符串

10

NN

输入

用户名(主键)

 

Name

字符串

50

NN

输入

姓名

 

Password

字符串

10

NN

输入

密码

 

备注

用于学生的登录信息,只有注册的学生才能登录系统选课。

表4-3 select_course

表名称 

主要字段

数据类型

长度

属性

输入方式

描述

备注

选课表

ID

字符串

50

NN

生成

用户名(主键)

 

CID

字符串

50

NN

 

课程号(主键)

 

Teacher

字符串

50

NN

 

教师

 

备注

用于定义学生所选的课程,可以存储学生选择的所有课程

表4-4 student_infor

表名称 

主要字段

数据类型

长度

属性

输入方式

描述

备注

学生表

S_id

字符串

8

NN

输入

用户名(主键)

 

S_name

字符串

50

NN

输入

姓名

 

major

字符串

50

NN

选择

专业

 

grade

字符串

50

NN

输入

年级

 

College

字符串

50

NN

输入

学院

 

备注

用于存储学生的基本信息

表4-5 Course

表名称 

主要字段

数据类型

长度

属性

输入方式

描述

备注

课程表

Id

bigint

10

NN

生成

编号(主键)

系统自动生成

CID

字符串

200

NN

输入

课程号

 

Cname

字符串

150

NN

选择

课程名

 

Teacher

字符串

150

NN

选择

教师

 

Place

字符串

150

NN

选择

教室

 

Time

字符串

150

NN

选择

时间

 

Sum

Int

10

NN

输入

总人数

 

Spare

Int

10

NN

输入

剩余人数

 

备注

存储所有开设课程的基本信息

 详细设计

用户公共模块流程图如下图所示:

 

                                            用户流程图

(2)密码修改流程图如下图所示:

 

                         密码修改流程图

密码修改JSP页面,用户选择密码修改连接进入密码修改JSP页面。

          管理员模块

           管理模块主要实现了管理学生信息,课程信息以及对学生选课情况进行统计输出的功能。在此模块中使用了一个框架[17]页面manager.jsp,其代码如下:

<frameset rows="240,*,80" frameborder="no" border="0" framespacing="0">

<frame src="manager/top.jsp" name="top" scrolling="No" noresize="noresize" id="topFrame" />

<frameset cols="*,955,*" frameborder="no" border="0" framespacing="0">

<frame src="manager/main.jsp" name="main" noresize="noresize" id="main" />

</frameset>

<frame src="manager/bottom.jsp" name="bottom" scrolling="No"

noresize="noresize" id="bottomFrame" />

</frameset>

其中topFrame部分用于显示管理模块的主菜单页面top.jsp。

(1)学生管理流程如下图所示:

                                           学生管理流程图

 在top.jsp页面中单击“学生管理”超链接,将进入dis_student.jsp页面,其中显示了所有的学生信息。

在dis_student.jsp页面中单击“新增”超链接,将进入addstudent.jsp页面。

 

主要代码

try

{

ResultSet rt=stmt.executeQuery("select * from student_infor where ID='"+ID+"'");

if(rt.next()){%>

      <script language="javascript">

      alert("数据库库中已有该学生信息,请查询后再添加!");

    location.assign("dis_student.jsp");

    </script>

   

<%}else{

        String sql="insert into student_infor values('"+college+"','"+profession+"','"+class_infor+"','"+ID+"','"+name+"')";

   int result = stmt.executeUpdate(sql); 

String sql1="insert into checkin values('"+ID+"','"+password+"','"+name+"')";

int result1 = stmt.executeUpdate(sql1);

if(result!=0&&result!=0){

     %>

<script language="javascript">      

    location.assign("dis_student.jsp");

    </script>

<%

} }

}

catch(Exception e){out.print(e);

  System.err.println(e.getMessage());

}

(2)课程管理流程如下所示:

 

                                             课程管理流程

在top.jsp页面中单击“课程管理”超链接,将进入dis_Course.jsp页面,其中显示了所有的课程信息信息。

 

在该页面中单击“新增”按钮,将进入到addCourse.jsp页面,此页面主要用于创建新的课程。

 

主要代码

try

{

          String sql="select * from course where time='"+time+"' and place='"+place+"'"; //相同时间里一个教室只能开设一门课程

          ResultSet rt=stmt.executeQuery(sql);

          if(rt.next()){

%>

        <script language="javascript">

      alert("相同时间里此教室已经有课程安排了!");

    location.assign("addcourse.jsp");

    </script>

<%

}else{

        String sql2="insert into course(CID,Cname,teacher,place,time,Sum,spare) values('"+CID+"','"+Cname+"','"+teacher+"','"+place+"','"+time+"','"+Sum+"','"+spare+"')";

int result = stmt.executeUpdate(sql2); 

%>

    <script language="javascript">

      alert("插入课程信息成功!");

    location.assign("dis_course.jsp");

    </script>

<%

}

}

catch(Exception e){out.print(e);

  System.err.println(e.getMessage());

}

%>

(3)退出系统

退出系统是在exit.jsp页面中完成,在该页面中只需将当前的用户会话销毁,并跳出框架返回到项目的首页即可。

学生模块

学生模块中的大部分功能都是由StuUserAction类来完成的,StuUserAction继承了DispatchAction类,是一个Struts的控制器。在StuUserAction类中编写insert()方法,用于向数据库插入学生的基本信息;编写welcome()方法此方法将根据学生编号查询出学生的基本信息,然后返回到学生模块的首页——student.jsp页面;编写exit()方法,该方法将对于退出系统的请求,在该方法中首先将用户会话对象销毁,然后返回项目首页;编写selected()方法,用于查询学生已经选过的课程;编写select()方法,用于查询学生可选的所有课程;编写selctting()方法,用于执行学生选课操作,将学生标号与所选的课程编号关联起来;编写courseInfo()方法,用于查询课程的详细信息。

(2)学生选课页面

在学生模块页面中单击“选课”超链接,程序将调用学生模块控制器类StuUserAction中的select方法将此学生可以选择的所有课程查询出来,然后显示在select.jsp页面中。

 

主要代码:

try

{       ...

   String sql="select * from select_course where ID='"+ID+"' and CID='"+CID+"'";//检查是否选过该课程

    ResultSet rs=stmt.executeQuery(sql);

    String sql3="select * from course where CID='"+CID+"' and teacher='"+teacher+"' and spare>0";//列出还有剩余学生的课程

    ResultSet rst=st.executeQuery(sql3);

if(!rs.next()&&rst.next()){

    String sql1="insert into select_course values('"+ID+"','"+CID+"','"+teacher+"')";

stmt.executeUpdate(sql1);

String sql2="update course set spare=spare-1 where CID='"+CID+"' and teacher='"+teacher+"'";

stmt.executeUpdate(sql2);%>

<script language="javascript">

    alert("恭喜您,选课成功!");

  location.assign("select_course.jsp");

        </script>

<% }else{%>

<script language="javascript">

    alert("你已经选过此课,或者此课没有空余名额,请查询后再选!");

  location.assign("select_course.jsp");

        </script>

<% }

}

catch(Exception e){out.print(e);

  System.err.println(e.getMessage());

}

(3)课程查询及退选页面

Selected.jsp页面用于显示学生已选过的课程信息,学生可以从中查询到自己已经学过哪些课程,正在学习哪些课程及选择退选课程。

 

主要代码

try

{       ......

    String sql1="delete from  select_course where CID='"+CID+"' and ID='"+ID+"'";

stmt.executeUpdate(sql1);

String sql2="update course set spare=spare+1 where CID='"+CID+"' and teacher='"+teacher+"'";//退选的课程人数加1

stmt.executeUpdate(sql2);%>

<script language="javascript">

    alert("恭喜您,退课成功!");

  location.assign("display.jsp");

        </script>

<%}

catch(Exception e){out.print(e);

  System.err.println(e.getMessage());

}

(4)修改密码页面

在登录修改密码页面stuUpdate.jsp中,学生可以修改自己的登录密码,只要输入正确的原始密码即可进行密码修改。密码修改操作通过updatePwd.do请求调用用户模块中的密码修改控制器类UpdatePwdAction进行身份验证以及更新数据库中的旧密码。:

 

主要代码:

try{    ......

if(!(user.ChkLogin(username,oldpassword)))

{%>

<script>

alert("旧密码输入错误,请重新输入.");

window.history.back();

</script>

<% }

else{

       if(user.ModifyPassword(username,newpassword))

          { 

             IsSucceed = "1";

          }

     }

}

catch(Exception e){

out.println("error:"+e.getMessage());

}%>