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