費用登記系統(小結)

本文目錄:

  一)項目背景

  二)項目需求說明

  三)項目開發過程

  四)項目成果演示

  五)項目補充說明

正文:

一)項目背景

     由於某公司實行新的費用制度,涉及部門的年終考覈事項,考覈部門需要根據各個部門的費用實際使用情況做預算,分析,統計,指標評估,作爲公司降本節支的重要依據,最大限度的降低公司的運營成本。費用分攤項目應運而生,由於人力不足,一切簡單從簡,以滿足最基本的需求爲目標,遵循流程簡化,界面簡潔,操作簡單爲基本原則,進行小型系統開發。

二)項目需求說明

      項目需求主要來源於XXX部的實際工作需要,簡單介紹如下:

      1)總體需要:能登記各個部門的實際發生的費用明細,具體如:商品的基本資料(名稱,規格,品牌,單價,數量,金額,承擔部門等等);招待費用,車輛派遣(車牌號,車型,司機,公里數,費用發生額等);錄入時指定特定部門或者人員,可以查詢,需要經過相關審覈(部門審覈,上級領導審覈)。

      2)費用錄入要求如下:

wKiom1NXUWTy40F6AAMcnn_Oky4508.jpg

表 2-1 費用錄入說明

  說明:公司費用大致分爲這四大類,即:日常費用,招待費用,物流日常費用(指物流部門的日常費用),商務車費用,錄入時根據此分類對應錄入系統即可。

      3)費用分類資料細則說明:(部分,樣式表)

wKiom1NXUiaR2WJlAAJnqEFYbMU601.jpg

表 2-2 費用分類資料細則


           說明:費用分類統一編號由錄入部門決定,例如:人力資源部錄入費用編號以10開頭,財務部錄入費用編號以20開頭……等。

      4)費用明細如下:

wKioL1NXUjWTPT93AAGOuopKN_k819.jpg

表 2-3 費用細則說明

說明:錄入的時候,需要存儲,如:人力資源部登記福利費的時候需要說明是什麼?婦女節,生日福利,……做查詢的時候,只需要看到福利費,以費用編號爲最小單位統計依據,不再進行細分。

   5)錄入和審覈需求如下:

wKiom1NXVQvx2JfnAANcu2t_eeE521.jpg

表 2-4 錄入與審覈要求說明

    說明:任何費用必須由部門領導審覈,分管領導審覈需要滿足一定條件,如某筆費用發生額超過規定額時,才需要上級領導審覈。有些費用需要指定某部門某專員錄入,如商務車費用只能由物流事業部相關人士錄入等。


三)項目開發過程

    分析相關需求,與提供相關需要的人員進行多次多次溝通,進行簡單的相關的設計。

1)邏輯分析:

      哪些人屬於哪個部門,是否擁有系統的使用權限,系統的權限分哪些等級?==>人員,部門,人員與部門關係等基礎資料;可以在給人員分配部門的同時分配系統使用權限;

      哪些費用有哪些部門哪些人錄入,需要什麼相關審覈?==>費用明細的基礎資料,費用錄入生成相關單據,審覈流水確定需要考慮部門的相關負責人等。

      生成的單據的編號,新增用戶,部門的相關編號怎麼產生?單據審覈節點判斷?==>存儲過程,標量值函數實現。
      哪些人可以查詢什麼費用?==>費用的相關查詢,暫定只能普通用戶看到本部門的費用信息。

2 )數據庫設計:有邏輯分析不難得出本系統需要的基礎表及其相關存儲過程,函數。

wKiom1NXXMbSmZ0zAAGCWEDmjn8434.jpg

圖 3-1 數據庫設計

詳細說明,此處略去。

3)模塊設計,如圖所示:

wKioL1NXXMrR1RQvAAFmV0af2oI114.jpg

圖 3-2 模塊設計

相關說明:基礎資料維護(1)包括:

人員維護:新增,查詢,保存,修改,修改用戶密碼,刪除,關閉等基本功能;

部門維護:新增,查詢,保存,修改,刪除,關閉等基本功能;

人員部門維護:新增,查詢,保存,修改,刪除,關閉等基本功能;

費用項目維護:新增,查詢,保存,修改,刪除,關閉等基本功能;

費用項目登記(2)包括:

日常費用錄入:新增,保存,修改,刪除,關閉等基本功能;

招待費用錄入:新增,保存,修改,刪除,關閉等基本功能;

物流日常費用錄入:新增,保存,修改,刪除,關閉等基本功能;

商務車費用錄入:新增,保存,修改,刪除,關閉等基本功能;

特別說明所有單據一旦被審覈,均不能被修改或者刪除。

費用審覈審覈流程(3)包括:

部門審覈:查詢,審覈通過,審覈不通過,退出等基本功能;

分管領導審覈:查詢,審覈通過,審覈不通過,退出等基本功能;

總經理審覈:查詢,審覈通過,審覈不通過,退出等基本功能;

費用查詢(4),主要用於查詢,可以看到費用明細,審覈進度等,有待進一步細分,本系統只是初稿,後期會有擴充。

退出(5):退出本系統並關閉;

關於(6):計算器功能,屬於輔助功能擴展。

說明:本系統分四個角色,分別擁有不同的模塊,介紹如下:

a)管理員:權限最大,擁有系統的全部功能(1)--(6);(說明:(1)代表模塊基礎資料維護)

b)審覈:擁有模塊(2)(3)(4)(5)(6);

c)錄入:擁有模塊(2)(4)(5)(6);

d)查詢:權限最小,擁有模塊(4)(5)(6);

總體設計圖如下:

wKioL1NXUGSwY3J9AAcCazad8G4197.jpg

圖 3-3 總體設計


4)代碼設計(略)(列幾個比較常用的,希望對初學者有所幫助)

   SQL基本操作:(SQLHelper.cs)

   參見:http://zhangbc.blog.51cto.com/6066576/1401228

   EXEel導出功能:(untCommon.cs)

   參見:http://zhangbc.blog.51cto.com/6066576/1401234

   treeNode相關用法(這是本次寫代碼的一次重要收穫):

private void getBm(TreeNode treenode)
   {
       treenode.Text = "組織機構       ";
       treenode.NodeFont = new Font("楷體", 14, FontStyle.Underline | FontStyle.Bold);
       DataSet ds = new DataSet();
       jc_bmdoc bm = new jc_bmdoc();
       ds = bm.getList(" and beactive='是'");
       DataTable dt=ds.Tables[0];
       for (int i = 0; i < dt.Rows.Count; i++)
       {
           treenode.Nodes.Add(dt.Rows[i][2].ToString().Trim());
       }
   }
   private void hr_Bmzhygw_Load(object sender, EventArgs e)
   {
       this.tvBM.LabelEdit = true;
       TreeNode node = new TreeNode();
       getBm(node);
       tvBM.Nodes.Add(node);
       tvBM.ExpandAll();
   }
   private void tvBM_AfterSelect(object sender, TreeViewEventArgs e)
   {
       jc_bmzhygx bmzg = new jc_bmzhygx();
       DataSet ds = new DataSet();
       dvZhiydoc.DataSource = null;
       ds = bmzg.getList(e.Node.Text.ToString().Trim(),1);
       //MessageBox.Show(e.Node.Text);//獲取選擇中節點的內容
       dvZhiydoc.DataSource = ds.Tables[0];
   }

   獲得漢字的助記碼:(SQL標量值函數)  

   參見:http://zhangbc.blog.51cto.com/6066576/1401258

   單據錄入功能:(事務處理,這是本次寫代碼的又一次重要收穫)

private void djSave_Click(object sender, EventArgs e)
        {
            using (System.Transactions.TransactionScope TranSop
                = new System.Transactions.TransactionScope())//開始事務
            {
                try
                {
                    getDjhz();
                    try
                    {
                        for (int i = 0; i < dvRcfy.Rows.Count - 1; i++)
                        {
                            #region
                            djmx.djbh = djhz.djbh;
                            djmx.dj_sort = dvRcfy.Rows[i].Cells["dj_sort"].Value.ToString();
                            djmx.fylx = "";
                            djmx.is_zx = "否";
                            try
                            {
                                djmx.fybh = dvRcfy.Rows[i].Cells["fybh"].Value.ToString();
                            }
                            catch
                            {
                                ut.InfoMsg("費用編號不能爲空!");
                                return;
                            }
                            try
                            {
                                djmx.fymch = dvRcfy.Rows[i].Cells["fymch"].Value.ToString();
                            }
                            catch
                            {
                                ut.InfoMsg(dvRcfy.Rows[i].Cells["fymch"].Value.ToString() + "費用名稱不能爲空!");
                                return;
                            }
                            try
                            {
                                djmx.shpgg = dvRcfy.Rows[i].Cells["shpgg"].Value.ToString();
                            }
                            catch
                            {
                                ut.InfoMsg("規格不能爲空!");
                                return;
                            }
                            try
                            {
                                djmx.zrbm = dvRcfy.Rows[i].Cells["zrbm"].Value.ToString();
                            }
                            catch
                            {
                                ut.InfoMsg("費用承擔部門不能爲空!");
                                return;
                            }
                            if ((decimal)dvRcfy.Rows[i].Cells["dj"].Value == 0)
                            {
                                ut.InfoMsg("單價不能爲0!");
                                return;
                            }
                            else
                            {
                                djmx.dj = (decimal)dvRcfy.Rows[i].Cells["dj"].Value;
                            }
                            if ((decimal)dvRcfy.Rows[i].Cells["shl"].Value == 0)
                            {
                                ut.InfoMsg("數量不能爲0!");
                                return;
                            }
                            else
                            {
                                djmx.shl = (decimal)dvRcfy.Rows[i].Cells["shl"].Value;
                            }
                            djmx.je = (decimal)dvRcfy.Rows[i].Cells["je"].Value;
                            try
                            {
                                djmx.pinp = dvRcfy.Rows[i].Cells["pinp"].Value.ToString();
                            }
                            catch
                            {
                                djmx.pinp = "";
                            }
                            djmx.chph = "";
                            djmx.chex = "";
                            djmx.yongt = "";
                            djmx.days = 0;
                            djmx.distance = 0;
                            djmx.chlr = "";
                            djmx.gangw = "";
                            try
                            {
                                djmx.beizhu = dvRcfy.Rows[i].Cells["beizhu"].Value.ToString();
                            }
                            catch
                            {
                                djmx.beizhu = "";
                            }
                            #endregion
                            dj_mx.Insert(djmx);
                        }
                        if(djhz.app_bm==""||djhz.shenqr==""||djhz.lyr=="")
                        {
                            ut.InfoMsg("擡頭不能有空項!");
                            return;
                        }
                        if (dvRcfy.Rows.Count <= 1 || dj_hz.Insert(djhz) == 0)
                        {
                            ut.InfoMsg("保存失敗!");
                            return;
                        }
                        dj_hz.Insert(djhz);
                        ut.InfoMsg("保存成功!");
                    }
                    catch (Exception ex)
                    {
                        ut.ErrorMsg("新增失敗,請檢查!" + ex.ToString());
                    }
                    TranSop.Complete();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("錯誤原因:\n"+ex.ToString());
                    TranSop.Dispose();
                }
            }
            clear();
        }


四)項目成果

       1)系統登陸界面相關:

wKioL1NXSCHiuzYPAAD2LCX8fPc455.jpg

圖 4-1 登陸入口


wKioL1NXR-2C-IpZAAD2LCX8fPc298.jpg

圖 4-2 登陸信息

      2)系統主界面相關:

wKiom1NXYACj_GfWAASfV0cbUrM345.jpg

圖 4-3 部門職員信息維護


wKiom1NXXwaw5le7AAMSiVIVavY538.jpg

圖 4-4 單據錄入界面


wKiom1NXYXuSHs3TAAUGiwes5aM464.jpg

圖 4-5 單據審覈

wKiom1NXcnXAprRxAATMg0SpvbQ134.jpg

圖 4-6 費用查詢

五)項目補充說明

            本小系統基本達到預定目標,新手上路,歷時將近一個月,收穫頗多,後期將有許多需求都很在此基礎擴展(如統計報表等),但仍有很多有待改進之處,歡迎各位指正,不甚感激!

       完整demo及其代碼不便分享,敬請諒解!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章