藥品進銷存儲管理系統(二)
未知
涉及該模塊文件分別為:register.jsp、 RegisterAction.java以及UserDAO.java。
4.1.2 文件設計 register.jsp文件:
按照下述內容設計register.jsp文件。
表單名:form1。
表單執行程序:register.jsp。
表單數據傳輸方法:post。
表單的要素如附錄一表1所示。
在structs-config.xml中actionMappings中配置如下:
type="my.action.RegisterAction" validate="true">
//帶表單驗證類的action,input參數為表單證錯誤返回的頁面,name是接受頁面參數的表單類,path為頁面請求到服務器的路徑,type為處理請求的action類的路徑,forward為驗證成功與否的轉發路徑。
RegisterAction.java代碼如下:
package my.action;
public class RegisterAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
UserBean user = new UserBean();
//聲明JavaBean
RegisterForm rform = (RegisterForm) form;
//從表單類中接過已驗證過的表單信息
user.setUsername(rform.getUsername());
user.setPassword(rform.getPassword());
user.setSex(rform.getSex());
user.setBorntime(rform.getYear() + "-" + rform.getMonth() + "-"
+ rform.getDay());
user.setEmail(rform.getEmail());
user.setIntroduce(rform.getIntroduce());
user.setRealname(rform.getRealname());
user.setTelNumber(rform.getTelNumber());
user.setStatus("0");
//賦值Bean中所有屬性
UserBean database=new UserDAO().findOne(user.getUsername());
//注冊之前檢查用戶名是否已經存在,若存在則生成錯誤信息,反饋到注冊頁面
if(database!=null){
request.setAttribute("login.error", "對不起,您的用戶名已經被人使用,請重新輸入!");
return mapping.findForward("register.error");
}
//所有驗證完成,將用戶信息入庫,成功則將成功信息反饋到首頁
int n = new UserDAO().insertUser(user);
if (n == 0) {
return mapping.findForward("register.error");
} else {
request.setAttribute("login.error", "注冊成功,請等待審核!!");
return mapping.findForward("register.ok");
}
}
}
4.2 用戶登陸模塊 4.2.1 用戶登陸流程分析 用戶在正確注冊之后,在后臺經管理員審批,正式獲得日志系統的使用權限。在首頁輸入用戶名和密碼登陸系統。若用戶名和密碼有誤,將返回登陸頁,并顯示錯誤提示。用戶名和密碼無誤則成功登入系統。后臺系統中管理員登陸模塊與該模塊實現類似,本文不再敘述。用戶登陸過程活動圖如下圖4-2。
圖4-2 用戶活動過程
4.2.2 用戶登陸模塊文件設計 用戶登陸模塊主要有三個文件。負責視圖層的login.jsp和負責控制層的LoginAction.java和負責模型層的UserDAO.java和UserBean.java。
在structs-config.xml中actionMappings中配置如下:
type="my.action.LoginAction" validate="true">
其中模塊商業邏輯的主要部分LoginAction.java的代碼如下:
package my.action;
public class LoginAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
LoginForm userform=(LoginForm)form;
//獲取頁面表單信息
UserBean bean=null;
bean=new UserDAO().finduser(userform.getUsername(), userform.getPassword());
//將用戶從登陸頁面輸入的用戶名和密碼與user表中用戶名與密碼核對,若不一致,生成錯誤信息,返回到登陸頁面
if(bean==null){
request.setAttribute("login.error", "您還沒有注冊,請先注冊!");
return mapping.findForward("login.error");
}else{
String status=bean.getStatus();
if(status.equals("0")){
request.setAttribute("login.error", "抱歉,您的帳戶正在審批中,暫時無法登陸!");
//若用戶名和密碼一致,再次核對用戶審批狀態,未審批完成,生成提示信息并返回首頁
return mapping.findForward("login.error");
}
List kind=new KindDAO().findKind(userform.getUsername());
List diary=new DiaryDAO().findDiaryByUser(bean.getUsername());
request.setAttribute("diary", diary);
request.getSession().setAttribute("kind", kind);
request.getSession().setAttribute("user", bean);
return mapping.findForward("login.ok");
}
}
}
4.3 日志管理模塊 4.3.1 日志管理功能模塊圖
4.3.2 設計思想及特點 注冊用戶登陸后進入日志管理頁面能對日志進行相關操作。具體來說,若用戶是第一次登陸,在添加日志之前系統會提示用戶先添加日志分類,所有日志均建立在分類之下的。在分類添加完成之后,用戶就能進入日志維護頁面對日志進行添加,刪除,修改操作了。值得注意的是在刪除分類時,用戶在刪除類別的同時,也把該類別下的所有日志刪除了。添加日志時用戶能夠通過設置日志狀態是否公開來決定是否讓日志被他人瀏覽,這樣能將優秀的文章進行相互交流。
下面主要給出添加日志的活動圖和文件設計:
活動圖如下圖4-4。
圖4-4 添加日志活動圖
type="my.action.AddDiaryAction" validate="true">
控制器層主要文件AddDiaryAction.java源代碼如下:
package my.action;
public class AddDiaryAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HttpSession session=request.getSession();
UserBean user=(UserBean)session.getAttribute("user");
if(user==null){
return mapping.findForward("tohome.do");
}//驗證用戶是否已經登陸,若沒登陸則為非法登入,返回首頁
AddDiaryForm aform=(AddDiaryForm)form;
DiaryBean diary=new DiaryBean();
diary.setDiaryTitle(aform.getTitle());
diary.setContent(aform.getContent());
diary.setKindID(aform.getKind());
diary.setUserID(user.getUsername());
diary.setIsOpen(aform.getIsopen());
if(aform.getIsopen().equals("0")){
diary.setStatus("2");
}else{
diary.setStatus("0");
}
//接表單信息,并封裝到jvabean中
int n=new DiaryDAO().addDiary(diary);
//調用數據操作對象的add方法,將信息入庫,成功則返回到成功頁面
if(n!=0){
List list=new DiaryDAO().findDiary(diary.getKindID());
request.setAttribute("diary", list);
return mapping.findForward("addDiary.ok");
}else{
return mapping.findForward("addDiary.error");
}
}
}
4.4 后臺用戶管理模塊 4.4.1 主要功能概述 該模塊主要是由查詢和顯示兩個子模塊組合而成。管理能通過在查詢模塊輸入用戶名、性別、聯系方式、真實姓名之后選擇操作進行查詢,在顯示模塊能根據用戶選擇的查詢方式和操作顯示不同的結果。管理員能在顯示頁面對用戶進行相應操作。
選擇“停用”后頁面顯示結果如下圖4-5。
圖4-5 選擇“停用”后頁面顯示結果
4.4.2 查詢與分頁 在此模塊中最為關鍵的就是查詢與分頁功能的實現。本系統在設計時將此過程分兩步來實現的。第一步用SearchUserAction.java來處理查詢要求;首先接受頁面查詢參數生成查詢所有記錄的SQL語句,然后運用JAVA的String類的相關方法將SQL語句字符串進行處理,等到查詢總記錄數目的CountSQL語句,再次通過得到的記錄總數和每頁應該顯示記錄條數計算得到顯示總頁數,然后將SQL語句和頁數傳給第二步。第二步ShowUserAction.java負責顯示個分頁內容。通過接受第一步所傳過來的SQL語句和總頁數生成新的光查該頁記錄數的SQL語句,再一次從數據庫中查詢出具體記錄并傳到jsp頁面將結果顯示出來。
該過程活動圖如圖4-6。
圖4-6 過程活動圖
在structs-config.xml中actionMappings中配置如下:
SearchUserAction.java源代碼:
package my.action;
public class SearchUserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HttpSession session=request.getSession();
AdminBean admin=(AdminBean)session.getAttribute("admin");
if(admin==null){
return mapping.findForward("tohome.do");
}
//管理員登陸驗證,若為非法登陸,則返回首頁
String sql = this.createSql(request, response);
//生成分頁之前的sql語句
String countSql = this.getCountSql(sql);
//生成統計所有記錄數的sql語句
int total = new UserDAO().getUserNum(countSql);
//調用數據操作對象,統計所有記錄數
int pageNumber = 1;
int perPageNumber = 7;
pageNumber = this.getPageNumber(total, perPageNumber);
//調用統計頁數方法,獲得總頁數
request.getSession().setAttribute("u.pageNumber", pageNumber);
request.getSession().setAttribute("u.perPageNumber", perPageNumber);
request.getSession().setAttribute("u.sql", sql);
return mapping.findForward("search.ok");
}
//將所有分頁信息放入session對象,并分發至顯示處理類
//生成統計記錄數的sql語句的方法
private String getCountSql(String sql) {
String temp = sql.substring(sql.indexOf("from") - 1);
temp = "select count(*) " + temp;
return temp;
}
//生成頁數
private int getPageNumber(int total, int numPerPage) {
int pageNumber = 0;
if (total % numPerPage == 0) {
pageNumber = total / numPerPage;
} else {
pageNumber = (total / numPerPage) + 1;
}
return pageNumber;
}
}
ShowUserAction.java的源代碼:
package my.action;
public class ShowUserAction extends Action {
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) {
HttpSession session=request.getSession();
AdminBean admin=(AdminBean)session.getAttribute("admin");
if(admin==null){
return mapping.findForward("tohome.do");
}