資料庫表設計

迎面有風吹過來發表於2015-06-14

 資料庫表設計

分析上述各實體的屬性集,從中找出關係的主鍵,然後用關係式來表示實體(其中下劃線的屬性為主鍵)。表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());

}%>

相關文章