藥品進(jìn)銷(xiāo)存儲(chǔ)管理系統(tǒng)(二)
未知
涉及該模塊文件分別為:register.jsp、 RegisterAction.java以及UserDAO.java。
4.1.2 文件設(shè)計(jì) register.jsp文件:
按照下述內(nèi)容設(shè)計(jì)register.jsp文件。
表單名:form1。
表單執(zhí)行程序:register.jsp。
表單數(shù)據(jù)傳輸方法:post。
表單的要素如附錄一表1所示。
在structs-config.xml中actionMappings中配置如下:
type="my.action.RegisterAction" validate="true">
//帶表單驗(yàn)證類(lèi)的action,input參數(shù)為表單證錯(cuò)誤返回的頁(yè)面,name是接受頁(yè)面參數(shù)的表單類(lèi),path為頁(yè)面請(qǐng)求到服務(wù)器的路徑,type為處理請(qǐng)求的action類(lèi)的路徑,forward為驗(yàn)證成功與否的轉(zhuǎn)發(fā)路徑。
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;
//從表單類(lèi)中接過(guò)已驗(yàn)證過(guò)的表單信息
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());
//注冊(cè)之前檢查用戶(hù)名是否已經(jīng)存在,若存在則生成錯(cuò)誤信息,反饋到注冊(cè)頁(yè)面
if(database!=null){
request.setAttribute("login.error", "對(duì)不起,您的用戶(hù)名已經(jīng)被人使用,請(qǐng)重新輸入!");
return mapping.findForward("register.error");
}
//所有驗(yàn)證完成,將用戶(hù)信息入庫(kù),成功則將成功信息反饋到首頁(yè)
int n = new UserDAO().insertUser(user);
if (n == 0) {
return mapping.findForward("register.error");
} else {
request.setAttribute("login.error", "注冊(cè)成功,請(qǐng)等待審核!!");
return mapping.findForward("register.ok");
}
}
}
4.2 用戶(hù)登陸模塊 4.2.1 用戶(hù)登陸流程分析 用戶(hù)在正確注冊(cè)之后,在后臺(tái)經(jīng)管理員審批,正式獲得日志系統(tǒng)的使用權(quán)限。在首頁(yè)輸入用戶(hù)名和密碼登陸系統(tǒng)。若用戶(hù)名和密碼有誤,將返回登陸頁(yè),并顯示錯(cuò)誤提示。用戶(hù)名和密碼無(wú)誤則成功登入系統(tǒng)。后臺(tái)系統(tǒng)中管理員登陸模塊與該模塊實(shí)現(xiàn)類(lèi)似,本文不再敘述。用戶(hù)登陸過(guò)程活動(dòng)圖如下圖4-2。
圖4-2 用戶(hù)活動(dòng)過(guò)程
4.2.2 用戶(hù)登陸模塊文件設(shè)計(jì) 用戶(hù)登陸模塊主要有三個(gè)文件。負(fù)責(zé)視圖層的login.jsp和負(fù)責(zé)控制層的LoginAction.java和負(fù)責(zé)模型層的UserDAO.java和UserBean.java。
在structs-config.xml中actionMappings中配置如下:
type="my.action.LoginAction" validate="true">
其中模塊商業(yè)邏輯的主要部分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;
//獲取頁(yè)面表單信息
UserBean bean=null;
bean=new UserDAO().finduser(userform.getUsername(), userform.getPassword());
//將用戶(hù)從登陸頁(yè)面輸入的用戶(hù)名和密碼與user表中用戶(hù)名與密碼核對(duì),若不一致,生成錯(cuò)誤信息,返回到登陸頁(yè)面
if(bean==null){
request.setAttribute("login.error", "您還沒(méi)有注冊(cè),請(qǐng)先注冊(cè)!");
return mapping.findForward("login.error");
}else{
String status=bean.getStatus();
if(status.equals("0")){
request.setAttribute("login.error", "抱歉,您的帳戶(hù)正在審批中,暫時(shí)無(wú)法登陸!");
//若用戶(hù)名和密碼一致,再次核對(duì)用戶(hù)審批狀態(tài),未審批完成,生成提示信息并返回首頁(yè)
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 設(shè)計(jì)思想及特點(diǎn) 注冊(cè)用戶(hù)登陸后進(jìn)入日志管理頁(yè)面能對(duì)日志進(jìn)行相關(guān)操作。具體來(lái)說(shuō),若用戶(hù)是第一次登陸,在添加日志之前系統(tǒng)會(huì)提示用戶(hù)先添加日志分類(lèi),所有日志均建立在分類(lèi)之下的。在分類(lèi)添加完成之后,用戶(hù)就能進(jìn)入日志維護(hù)頁(yè)面對(duì)日志進(jìn)行添加,刪除,修改操作了。值得注意的是在刪除分類(lèi)時(shí),用戶(hù)在刪除類(lèi)別的同時(shí),也把該類(lèi)別下的所有日志刪除了。添加日志時(shí)用戶(hù)能夠通過(guò)設(shè)置日志狀態(tài)是否公開(kāi)來(lái)決定是否讓日志被他人瀏覽,這樣能將優(yōu)秀的文章進(jìn)行相互交流。
下面主要給出添加日志的活動(dòng)圖和文件設(shè)計(jì):
活動(dòng)圖如下圖4-4。
圖4-4 添加日志活動(dòng)圖
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");
}//驗(yàn)證用戶(hù)是否已經(jīng)登陸,若沒(méi)登陸則為非法登入,返回首頁(yè)
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");
}
//接表單信息,并封裝到j(luò)vabean中
int n=new DiaryDAO().addDiary(diary);
//調(diào)用數(shù)據(jù)操作對(duì)象的add方法,將信息入庫(kù),成功則返回到成功頁(yè)面
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 后臺(tái)用戶(hù)管理模塊 4.4.1 主要功能概述 該模塊主要是由查詢(xún)和顯示兩個(gè)子模塊組合而成。管理能通過(guò)在查詢(xún)模塊輸入用戶(hù)名、性別、聯(lián)系方式、真實(shí)姓名之后選擇操作進(jìn)行查詢(xún),在顯示模塊能根據(jù)用戶(hù)選擇的查詢(xún)方式和操作顯示不同的結(jié)果。管理員能在顯示頁(yè)面對(duì)用戶(hù)進(jìn)行相應(yīng)操作。
選擇“停用”后頁(yè)面顯示結(jié)果如下圖4-5。
圖4-5 選擇“停用”后頁(yè)面顯示結(jié)果
4.4.2 查詢(xún)與分頁(yè) 在此模塊中最為關(guān)鍵的就是查詢(xún)與分頁(yè)功能的實(shí)現(xiàn)。本系統(tǒng)在設(shè)計(jì)時(shí)將此過(guò)程分兩步來(lái)實(shí)現(xiàn)的。第一步用SearchUserAction.java來(lái)處理查詢(xún)要求;首先接受頁(yè)面查詢(xún)參數(shù)生成查詢(xún)所有記錄的SQL語(yǔ)句,然后運(yùn)用JAVA的String類(lèi)的相關(guān)方法將SQL語(yǔ)句字符串進(jìn)行處理,等到查詢(xún)總記錄數(shù)目的CountSQL語(yǔ)句,再次通過(guò)得到的記錄總數(shù)和每頁(yè)應(yīng)該顯示記錄條數(shù)計(jì)算得到顯示總頁(yè)數(shù),然后將SQL語(yǔ)句和頁(yè)數(shù)傳給第二步。第二步ShowUserAction.java負(fù)責(zé)顯示個(gè)分頁(yè)內(nèi)容。通過(guò)接受第一步所傳過(guò)來(lái)的SQL語(yǔ)句和總頁(yè)數(shù)生成新的光查該頁(yè)記錄數(shù)的SQL語(yǔ)句,再一次從數(shù)據(jù)庫(kù)中查詢(xún)出具體記錄并傳到j(luò)sp頁(yè)面將結(jié)果顯示出來(lái)。
該過(guò)程活動(dòng)圖如圖4-6。
圖4-6 過(guò)程活動(dòng)圖
在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");
}
//管理員登陸驗(yàn)證,若為非法登陸,則返回首頁(yè)
String sql = this.createSql(request, response);
//生成分頁(yè)之前的sql語(yǔ)句
String countSql = this.getCountSql(sql);
//生成統(tǒng)計(jì)所有記錄數(shù)的sql語(yǔ)句
int total = new UserDAO().getUserNum(countSql);
//調(diào)用數(shù)據(jù)操作對(duì)象,統(tǒng)計(jì)所有記錄數(shù)
int pageNumber = 1;
int perPageNumber = 7;
pageNumber = this.getPageNumber(total, perPageNumber);
//調(diào)用統(tǒng)計(jì)頁(yè)數(shù)方法,獲得總頁(yè)數(shù)
request.getSession().setAttribute("u.pageNumber", pageNumber);
request.getSession().setAttribute("u.perPageNumber", perPageNumber);
request.getSession().setAttribute("u.sql", sql);
return mapping.findForward("search.ok");
}
//將所有分頁(yè)信息放入session對(duì)象,并分發(fā)至顯示處理類(lèi)
//生成統(tǒng)計(jì)記錄數(shù)的sql語(yǔ)句的方法
private String getCountSql(String sql) {
String temp = sql.substring(sql.indexOf("from") - 1);
temp = "select count(*) " + temp;
return temp;
}
//生成頁(yè)數(shù)
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");
}