企業辦公軟件設計文檔
1引言
1.1編寫目的
OA辦公自動化系統詳細設計是設計的第三個階段,這個階段的主要任務是在OA辦公自動化系統概要設計書基礎上,對概要設計中產生的功能模塊進行過程描述,設計功能模塊的內部細節,包括算法和詳細數據結構,為編寫源代碼提供必要的說明。
概要設計解決了軟件系統總體結構設計的問題,包括整個軟件系統的結構、模塊划分、模塊功能和模塊間的聯系等。詳細設計則要解決如何實現各個模塊的內部功能,即模塊設計。具體的說,模塊設計就是要為已經產生的OA辦公自動化各子系統設計詳細的算法。但這並不等同於系統實現階段用具體的語言編碼,它只是對實現細節作精確的描述,這樣編碼階段就可以將詳細設計中對功能實現的描述,直接翻譯、轉化為用某種程序設計語言書寫的程序。
1.2背景
為了能跟上現代社會社會生活中高效率的工作節奏,根據企業需求編寫了OA辦公自動化系統,以達到提高企業工作效率的目的。
2程序系統的結構
3程序登錄功能設計
3.1程序描述
改程序時OA辦公自動化的入口,體現了程序的安全性
(1)功能類型:查詢數據
(2)功能描述:提高系統的安全性
(3)前提業務:無
(4)后繼業務:04(日程管理)
(5)功能約束:權限約束(6)操作權限:系統管理員,登錄用戶。
3.2功能
(1)錄入項檢測使用javascript和后台代碼實現(各項必須非空)(2)在Login.aspx.cs中只提交用戶名和密碼;
數據處理:1.登錄驗證,2.記錄登錄用戶信息
3.3性能
確保系統能正確運行和進行高效訪問。
3.4輸入項
3.5輸出項
頁面能正確的跳轉到日程管理模塊下的個人便簽頁面下。
3.6算法
1.登錄驗證
1 UserInfo user; 2 LoginLog log = new LoginLog(); 3 log.UserId = txtUserId.Value; 4 log.LoginTime = DateTime.Now; 5 log.LoginUserIp = Request.UserHostAddress.ToString(); 6 if (this.txtUserId.Value.Trim().Length == 0) 7 { 8 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('用戶名不能為空!');</script>"); 9 txtUserId.Focus(); 10 return; 11 } 12 if (this.txtPassword.Value.Trim().Length == 0) 13 { 14 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('密碼不能為空!');</script>"); 15 txtPassword.Focus(); 16 return; 17 } 18 19 string login = this.txtUserId.Value.ToString(); 20 bool yes = UserInfoManager.IsUserIdExist(login); 21 if (yes) 22 { 23 log.LoginDesc = "用戶登錄失敗,用戶名或密碼不正確。"; 24 log.IfSuccess = 0; 25 LoginLogManager.AddLoginLog(log); 26 27 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('用戶名或密碼不正確!');</script>"); 28 } 29 else 30 { 31 this.Page.ClientScript.RegisterStartupScript(this.GetType(), "", "<script>alert('您輸入的用戶名不存在,請重新輸入!');</script>"); 32 this.txtUserId.Value = ""; 33 this.txtUserId.Focus(); 34 }
2.記錄登錄用戶信息
1 UserInfo user; 2 LoginLog log = new LoginLog(); 3 //獲取用戶登錄名 4 log.UserId = txtUserId.Value; 5 //獲取登錄時間 6 log.LoginTime = DateTime.Now; 7 log.LoginUserIp = Request.UserHostAddress.ToString(); 8 log.LoginDesc = "用戶登錄成功"; 9 log.IfSuccess = 1; 10 //數據驗證成功着將數據傳入查詢方法進行數據操作 11 LoginLogManager.AddLoginLog(log); 12 //獲取當前登錄用戶 13 Session["CurrentUser"] = user; 14 //判斷用戶角色進行頁面轉換 15 if (user.RoleInfo.RoleId == 1) 16 { 17 Response.Redirect("~/ManualSign/ManualSign.aspx"); 18 } 19 else 20 { 21 Response.Redirect("~/ScheduleManage/PersonNote/PersonNote.aspx"); 22 }
3.7流程邏輯
3.8接口
本模塊式系統的啟動模塊,他需要用戶交互輸入用戶ID、密碼;它調用系統的主控制模塊。
3.9存儲分配
3.10注釋設計
模塊首部的注釋:用戶驗證程序。對調用函數的注釋:調用加密函數MD5
3.11限制條件
當系統第一次使用時,具有統一的用戶ID和密碼;管理員賬號和*******。在三次驗證錯誤后,系統將自動關閉。
3.12測試計划
初次安裝該系統后,測試初始用戶ID和密碼能否正確登錄到系統;正確登陸后,對用戶名和密碼進行更改;采用剛修改過的用戶ID和密碼登陸,應該能夠正確登錄。
4.程序主頁設計
4.1程序描述
(1)功能類型:查詢、添加、修改數據
(2)功能描述:按照要求對數據進行查找、添加、修改
(3)前提業務:登錄用戶為系統管理員
(4)后繼業務:密碼修改、重新登錄、
(5)功能約束:權限約束
(6)操作權限:登錄用戶
4.2功能
1.重新登錄,回轉到登錄頁面進行重新輸入數據進行登錄;
2.修改密碼,通過Session獲取當前登錄用戶信息,根據用戶信息進行密碼修改;
3.個人便簽盒添加便簽在日程管理有講解;
4.3性能
能進行數據的高效訪問
4.4輸入項
注:添加便簽和修改便簽輸入項在日程管理中有說明
4.5輸出項
個人日程信息
4.6 流程邏輯
1.重新登錄
圖3重新登錄
2.修改密碼
圖4修改密碼
注:添加和修改便簽在日程管理中有說明;
4.7接口
圖5接口
4.8存儲分配
4.9注釋設計
1.加在模塊首部的注釋;
2.加在各分枝點處的注釋;
3.對各變量的功能、范圍、缺省條件等所加的注釋;
4.對使用的邏輯所加的注釋
4.10限制條件
修改密碼時,需先輸入原始的密碼,驗證正確后方可進行重新設置密碼的操作。
4.11測試計划
主要對主頁設計的幾個模塊進行測試,用戶界面測試:測試對象控件或訪問入口正確,符合用戶需求;界面風格統一,界面美觀,直觀。操作有好,人性化,易操作。
5程序日程管理設計
5.1程序描述
(1)功能類型:查看、添加、修改、刪除數據
(2)功能描述:按照要求對數據進行查查看、添加、修改並刪除
(3)前提業務:登錄用戶為系統管理員
(4)后繼業務:031(我的日程)032(部門日程)033(我的便簽)
(5)功能約束:權限約束
(6)操作權限:系統管理員、一般登錄用戶,
5.2功能
1.利用樹形控件加載出功能頁面的鏈接
2.在我的日程子模塊中添加日程是在時間列表控件中點擊鏈接進行跳轉
5.3性能
確保系統能高效的進行數據訪問
5.4輸入項
表5添加我的日程安排
5.5輸出項
查看:顯示數據庫中存在的數據
刪除:顯示刪除后數據庫中存在的數據
添加:將數據天津啊進入數據庫在顯示添加后的數據信息
修改:對數據庫中原本存在的某條數據進行修改后在進行展示
5.6算法
1 HyperLink link = new HyperLink(); 2 link.ImageUrl = "~/images/add_Schedule.gif"; 3 link.ToolTip = "新增個人日程"; 4 link.NavigateUrl = "SaveMySchedule.aspx?userid=" + user.UserId + "&today=" +day.Date.ToShortDateString(); 5 tc.Controls.Add(link);
5.7流程邏輯
1.部門日程
圖6部門日程
2.我的日程
圖7我的日程
3.我的便簽
圖8我的便簽
5.8接口
圖9接口
5.9存儲分配
表8日程信息表
5.10注釋設計
1.加在模塊首部的注釋;
2.加在各分枝點處的注釋;
3.對各變量的功能、范圍、缺省條件等所加的注釋;
4.對使用的邏輯所加的注釋
5.11限制條件
在界面上控制輸入輸出,服務器端如果出錯也會也會返回出錯信息
5.12測試計划
對日程設計進行項目跟蹤測試,對輸入信息和輸出信息進行對比,找出其中可能出現的異常,對此進行改善。
6程序4系統管理設計
6.1程序描述
(1)功能類型:查看、添加、修改、刪除數據(2)功能描述:按照要求對數據進行查查看、添加、修改並刪除(3)前提業務:登錄用戶為系統管理員
(4)后繼業務:051 角色管理 052 登陸日志 053操作日志 054 菜單排序
(5)功能約束:權限約束
(6)操作權限:系統管理員
6.2功能
圖10功能圖
組織機構部門設置、用戶管理、流程管理、表單管理、公文模版管理、角色管理、系統設置、系統日志、數據備份和恢復管理
6.3性能
系統能高效的進行數據訪問和各項操作的更改
6.4輸入項
表9輸入功能圖
6.5輸出項
角色管理:輸出角色信息;登錄日志:輸出相應時間內的登錄日志
操作日志:輸出相應時間內的操作日志
菜單排序:輸出通過上下移動后的樹形菜單排序情況
6.6算法
1.分配角色權限中關於復選框選擇的問題,怎樣處理好選擇一個模塊時選擇其下的子模塊而不選中其他模塊的子模塊,需要使用用戶自定義控件來完成,在后台代碼顯示方法中這樣寫
//得到所有父級點信息
IList sysFuns = SysFunManager.GetAllParentNodeInfo();
//根據父節點得到對應子節點生成用戶控件,然后循環插入到PlaceHolder容器中
1 foreach (SysFun sysFun in sysFuns) 2 { 3 //得到父節點Id 4 string nodeId = sysFun.NodeId.ToString(); 5 //得到父節點名稱 6 string displayName = sysFun.DisplayName; 7 //實例化用戶控件 8 SysManage_RoleManage_WebUserControl roleCotrol = (SysManage_RoleManage_WebUserControl)LoadControl(@"RoleUserControl.ascx"); 9 //實例化隱藏區域,用以存父節點Id 10 HtmlInputHidden hidParentMeu = (HtmlInputHidden)roleCotrol.FindControl("hidParentMenu"); 11 hidParentMeu.Value = nodeId; 12 //實例化隱藏區域,用以存儲角色Id 13 HtmlInputHidden hidRoleId = (HtmlInputHidden)roleCotrol.FindControl("hidRoleId"); 14 hidRoleId.Value = roleId.ToString(); 15 16 //實例化用戶控件中的CheckBox 17 CheckBox chkParentMenu = (CheckBox)roleCotrol.FindControl("chkParentMenu"); 18 19 //顯示父菜單名稱 20 chkParentMenu.Text = displayName; 21 22 if (arrRoleParentNodes.Contains(nodeId)) 23 { 24 chkParentMenu.Checked = true; 25 } 26 //把父節點生成的用戶控件追加打破PlaceHolder容器中 27 phRoleDistribute.Controls.Add(roleCotrol); 28 }
2.查看登錄日志和操作日志時,開始時間和結束時間的獲取使用javascript代碼來實現
1 function fillstring(str) 2 { 3 if(str.length==1) 4 { 5 str = "0" + str; 6 } 7 return(str); 8 } 9 function quickseldate(type) 10 { 11 var begintime,endtime; 12 var oneminute = 60*1000; 13 var onehour = 60*oneminute; 14 var oneday = 24*onehour; 15 var oneweek = 7*oneday; 16 17 var todayDate = new Date(); 18 var date = todayDate.getDate(); 19 var month= todayDate.getMonth() +1; 20 var year= todayDate.getYear(); 21 var day = todayDate.getDay(); 22 if(navigator.appName == "Netscape") 23 { 24 year = 1900 + year; 25 } 26 27 //--> 28 29 if(type=="day") 30 { 31 begintime = year.toString() + "-" + fillstring(month.toString()) + "-" + 32 33 fillstring(date.toString()); 34 endtime = begintime; 35 } 36 else if(type=="week") 37 { 38 var daytoMon = day-1; 39 if(day==0) 40 daytoMon = 6; 41 42 todayDate.setTime(todayDate.getTime()-daytoMon*oneday); 43 date = todayDate.getDate(); 44 month= todayDate.getMonth() +1; 45 year= todayDate.getYear(); 46 day = todayDate.getDay(); 47 48 begintime = year.toString() + "-" + fillstring(month.toString()) + "-" + 49 50 fillstring(date.toString()); 51 52 todayDate.setTime(todayDate.getTime()+6*oneday); 53 54 date = todayDate.getDate(); 55 month= todayDate.getMonth() +1; 56 year= todayDate.getYear(); 57 58 endtime = year.toString() + "-" + fillstring(month.toString()) + "-" + 59 60 fillstring(date.toString()); 61 } 62 else if(type=="month") 63 { 64 var dateto1 = date-1; 65 66 todayDate.setTime(todayDate.getTime()-dateto1*oneday); 67 date = todayDate.getDate(); 68 month= todayDate.getMonth() +1; 69 year= todayDate.getYear(); 70 day = todayDate.getDay(); 71 72 begintime = year.toString() + "-" + fillstring(month.toString()) + "-" + 73 74 fillstring(date.toString()); 75 76 todayDate.setMonth(month); 77 todayDate.setTime(todayDate.getTime()-oneday); 78 79 date = todayDate.getDate(); 80 month= todayDate.getMonth() +1; 81 year= todayDate.getYear(); 82 83 endtime = year.toString() + "-" + fillstring(month.toString()) + "-" + 84 85 fillstring(date.toString()); 86 87 } 88 89 document.getElementById("<% =txtBeginTime.ClientID %>").value = begintime; 90 document.getElementById("<% =txtEndTime.ClientID %>").value = endtime;
6.7流程邏輯
1.角色管理
圖11角色管理圖
2.登錄日志
圖12登錄日志圖
3.操作日志
圖13操作日志
4.菜單排序
圖14菜單排序
6.8接口
圖15接口圖形
6.9存儲分配
表10登錄日志信息表
6.10注釋設計
1.加在模塊首部的注釋;
2.加在各分枝點處的注釋;
3.對各變量的功能、范圍、缺省條件等所加的注釋;
4.對使用的邏輯所加的注釋
6.11限制條件
所有用戶的權限都經過嚴格的設置,不能進行權限外的操作。用戶組分為三組:管理員,用戶,游客。
6.12測試計划
系統集成測試,各個單元模塊合並的接口測試,對整個產品進行全面的測試,要符合客戶的需求,包括軟件,硬件。
七.結語
本次文檔編寫企業管理的主要功能的設計與實現。