一個6年的菜鳥,在4年之前做的一些功能(二)

来源:http://www.cnblogs.com/fourspace/archive/2016/08/30/5822918.html
-Advertisement-
Play Games

前戲:針對上一篇列出來的功能點,今天和大家分享下這個自定義的公式是怎麼設計的,由於我的第一篇博客在首頁被管理員移走了,大家可以點擊這裡來跳轉,看下第一篇的目錄結構。本人作為老菜鳥,和大家分享的也是一些老菜鳥的想法,大神千萬別噴我. 設計背景:當初為什麼要設計這個自定義的計算公式呢,原因就是,這個價格 ...


前戲:針對上一篇列出來的功能點,今天和大家分享下這個自定義的公式是怎麼設計的,由於我的第一篇博客在首頁被管理員移走了,大家可以點擊這裡來跳轉,看下第一篇的目錄結構。本人作為老菜鳥,和大家分享的也是一些老菜鳥的想法,大神千萬別噴我.

 

設計背景:當初為什麼要設計這個自定義的計算公式呢,原因就是,這個價格是不確定的,計算方式也是不確定的,那如果在代碼裡面寫死,那將來修改起來會比較麻煩,作為老菜鳥,我想偷懶了,也是為了省事。

 

如何設計:這對目前項目的情況,計算的過程應該是按照線性的方式來計算的,那麼問題就簡單了。

首先我們先要定義一個範圍控制項,這個控制項的目的就是,在某個區間之內,設置固定的金額或者單價,

 

 

 

一下我列出了部分代碼,供大家提供思路

    

  1 public partial class RolesUserControl :  UserControl
  2 
  3     {
  4 
  5         public delegate void DelLast(object o, DeleteEventArgs e);
  6 
  7  
  8 
  9         public event DelLast onLeftTextBox;
 10 
 11  
 12 
 13         public delegate void DeleteControl(object o, DeleteEventArgs e);
 14 
 15         public event DeleteControl onDelete;
 16 
 17  
 18 
 19         /// <summary>
 20 
 21         /// 控制項索引
 22 
 23         /// </summary>
 24 
 25         public int Index { get; set; }
 26 
 27  
 28 
 29         /// <summary>
 30 
 31         /// 是否驗證成功
 32 
 33         /// </summary>
 34 
 35         public bool isRegistOK { get; set; }
 36 
 37  
 38 
 39         /// <summary>
 40 
 41         /// 是否啟用關閉
 42 
 43         /// </summary>
 44 
 45         public bool ShowClose
 46 
 47         {
 48 
 49             set
 50 
 51             {
 52 
 53                 this.pictureBox1.Enabled = value;
 54 
 55             }
 56 
 57         }
 58 
 59  
 60 
 61         /// <summary>
 62 
 63         /// 是否顯示關閉
 64 
 65         /// </summary>
 66 
 67         public bool ShowCloseVisible
 68 
 69         {
 70 
 71             set
 72 
 73             {
 74 
 75                 this.pictureBox1.Visible = value;
 76 
 77             }
 78 
 79         }
 80 
 81  
 82 
 83         private int _dropDownListType = 2;
 84 
 85  
 86 
 87         /// <summary>
 88 
 89         /// 交易類型
 90 
 91         /// 1:金額
 92 
 93         /// 2:單價
 94 
 95         /// </summary>
 96 
 97         public int DropDownListType { get { return this._dropDownListType; } }
 98 
 99  
100 
101         public RolesUserControl()
102 
103         {
104 
105             InitializeComponent();
106 
107         }
108 
109  
110 
111         /// <summary>
112 
113         /// 構造
114 
115         /// </summary>
116 
117         /// <param name="strLast"></param>
118 
119         public RolesUserControl(string strLast)
120 
121         {
122 
123             InitializeComponent();
124 
125             this.tb_last1.Text = strLast;
126 
127         }
128 
129  
130 
131         /// <summary>
132 
133         /// 滑鼠移開TextBox
134 
135         /// </summary>
136 
137         /// <param name="sender"></param>
138 
139         /// <param name="e"></param>
140 
141         private void tb_last2_Leave(object sender, EventArgs e)
142 
143         {
144 
145             decimal d = 0.00m;
146 
147             if (!decimal.TryParse(this.tb_last2.Text, out d))
148 
149             {
150 
151                 isRegistOK = false;
152 
153                 this.tb_last2.Text = "請在這裡輸入格式為24.5的數據";
154 
155                 return;
156 
157             }
158 
159  
160 
161             if (decimal.Parse(this.tb_last1.Text.Trim()) >= d)
162 
163             {
164 
165                 isRegistOK = false;
166 
167                 this.tb_last2.Text = "下限數據應該大於上限數據";
168 
169                 return;
170 
171             }
172 
173  
174 
175             if (onLeftTextBox != null)
176 
177             {
178 
179                 DeleteEventArgs dea = new DeleteEventArgs();
180 
181                 dea.ControlName = this.Name;
182 
183                 dea.Index = this.Index;
184 
185                 dea.StrText = this.tb_last2.Text.Trim();
186 
187                 this.onLeftTextBox(sender, dea);
188 
189             }
190 
191             this.isRegistOK = true;
192 
193  
194 
195         }
196 
197  
198 
199         /// <summary>
200 
201         /// 點擊關閉
202 
203         /// </summary>
204 
205         /// <param name="sender"></param>
206 
207         /// <param name="e"></param>
208 
209         private void pictureBox1_Click(object sender, EventArgs e)
210 
211         {
212 
213             if (this.onDelete != null)
214 
215             {
216 
217                 DeleteEventArgs e1 = new DeleteEventArgs();
218 
219                 e1.ControlName = this.Name;
220 
221                 e1.Index = this.Index;
222 
223                 onDelete(sender, e1);
224 
225             }
226 
227         }
228 
229  
230 
231         /// <summary>
232 
233         /// 切換類型,是使用單價還是使用金額
234 
235         /// </summary>
236 
237         /// <param name="sender"></param>
238 
239         /// <param name="e"></param>
240 
241         private void ddl_type_SelectedIndexChanged(object sender, Telerik.WinControls.UI.Data.PositionChangedEventArgs e)
242 
243         {
244 
245             if (this.ddl_type.Text == "金額")
246 
247             {
248 
249                 radLabel1.Text = "噸   金額:";
250 
251                 tb_amount.Visible = true;
252 
253                 tb_amount.Text = "";
254 
255                 this._dropDownListType = 1;
256 
257             }
258 
259             else
260 
261             {
262 
263                 radLabel1.Text = "噸   單價:";
264 
265                 tb_amount.Visible = false;
266 
267                 tb_amount.Text = "";
268 
269                 this._dropDownListType = 2;
270 
271             }
272 
273         }
274 
275  
276 
277         /// <summary>
278 
279         /// 判斷是否滿足條件
280 
281         /// </summary>
282 
283         /// <param name="sender"></param>
284 
285         /// <param name="e"></param>
286 
287         private void tb_amount_Leave(object sender, EventArgs e)
288 
289         {
290 
291             decimal d = 0.00m;
292 
293             if (!decimal.TryParse(this.tb_amount.Text, out d))
294 
295             {
296 
297                 isRegistOK = false;
298 
299                 this.tb_amount.Text = "請在這裡輸入格式為24.5的數據";
300 
301                 return;
302 
303             }
304 
305  
306 
307             if (onLeftTextBox != null)
308 
309             {
310 
311                 DeleteEventArgs dea = new DeleteEventArgs();
312 
313                 dea.ControlName = this.Name;
314 
315                 dea.Index = this.Index;
316 
317                 dea.StrText = this.tb_last2.Text.Trim();
318 
319                 this.onLeftTextBox(sender, dea);
320 
321             }
322 
323             this.isRegistOK = true;
324 
325         }
326 
327  
328 
329         private void tb_amount_KeyPress(object sender, KeyPressEventArgs e)
330 
331         {
332 
333             if ((e.KeyChar >= 48 && e.KeyChar <= 57) || e.KeyChar == 190 || e.KeyChar == 110 || e.KeyChar == 13 || e.KeyChar == 8 || e.KeyChar == 46)
334 
335             { }
336 
337             else
338 
339             {
340 
341                 tb_amount.Text = "";
342 
343                 MessageBox.Show("請輸入數字");
344 
345                 return;
346 
347             }
348 
349         }
350 
351 }

 

 

 

那麼對於上限,其實他也是個線性的,那麼我們也來建立一個控制項

 

 

這個控制項用來計算最後臨界值。

下麵是重點代碼,供大家解讀

  1 /// <summary>
  2 
  3         /// 添加保存事件
  4 
  5         /// </summary>
  6 
  7         /// <param name="sender"></param>
  8 
  9         /// <param name="e"></param>
 10 
 11         private void radButton2_Click(object sender, EventArgs e)
 12 
 13         {
 14 
 15             if (this.tb_RoleName.Text.Trim() == "")
 16 
 17             {
 18 
 19                 this.MessageBoxShow("請輸入角色名稱");
 20 
 21                 return;
 22 
 23             }
 24 
 25  
 26 
 27             //解析界面數據
 28 
 29             Model.AutoWater_Sys_BaseRoles br = new Model.AutoWater_Sys_BaseRoles();
 30 
 31             br.RolesName = this.tb_RoleName.Text.Trim();
 32 
 33             br.CreateBy = this.CurrentUserName;
 34 
 35             br.CreateOn = DateTime.Now;
 36 
 37             br.IsUsing = true;
 38 
 39             br.IsDefault = false;
 40 
 41             br.RowState = 1;
 42 
 43             br.ID = Guid.NewGuid();
 44 
 45  
 46 
 47             List<Model.AutoWater_Sys_BaseRolesDetail> lbrd = new List<Model.AutoWater_Sys_BaseRolesDetail>();
 48 
 49  
 50 
 51             List<RolesUserControl> _List = new List<RolesUserControl>();
 52 
 53             //開始範圍
 54 
 55             //rolesUserControl1 ,校驗數據是否正確
 56 
 57             _List.Add(this.rolesUserControl1);
 58 
 59             string strMsg="";
 60 
 61             bool isVaild = this.VaildRolesUserControl(this.rolesUserControl1, ref strMsg);
 62 
 63             if (!isVaild)
 64 
 65             {
 66 
 67                 _List.Clear();
 68 
 69                 MessageBoxShow(strMsg);
 70 
 71                 return;
 72 
 73             }
 74 
 75             //遍歷Panel
 76 
 77             foreach (Control c in this.radPanel1.Controls)
 78 
 79             {
 80 
 81                 isVaild = this.VaildRolesUserControl(c as RolesUserControl, ref strMsg);
 82 
 83                 if (!isVaild)
 84 
 85                 {
 86 
 87                     _List.Clear();
 88 
 89                     MessageBoxShow(strMsg);
 90 
 91                     return;
 92 
 93                 }
 94 
 95                 _List.Add(c as RolesUserControl);
 96 
 97             }
 98 
 99             string strValue1,strValue2,strValue3,strValues4;
100 
101             _List.ForEach(t => {
102 
103                 //Last1
104 
105                 strValue1 = (t.Controls.Find("tb_last1", true)[0] as RadTextBox).Text;
106 
107                 //Last2
108 
109                 strValue2 = (t.Controls.Find("tb_last2", true)[0] as RadTextBox).Text;
110 
111                 //Price
112 
113                 if (t.DropDownListType == 1)
114 
115                 {
116 
117                     strValue3 = (t.Controls.Find("tb_amount", true)[0] as RadTextBox).Text;
118 
119                 }
120 
121                 else
122 
123                 {
124 
125                     strValue3 = (t.Controls.Find("ddl_price", true)[0] as RadDropDownList).Text;
126 
127                 }
128 
129  
130 
131                 lbrd.Add(new Model.AutoWater_Sys_BaseRolesDetail() {
132 
133                  BaseTablesID=br.ID,
134 
135                   ID=Guid.NewGuid(),
136 
137                    BetweenValue=decimal.Parse(strValue2)-decimal.Parse(strValue1),
138 
139                     CountType=t.DropDownListType,
140 
141                      CountTypeValue=decimal.Parse(strValue3),
142 
143                       CreateBy=this.CurrentUserName,
144 
145                        CreateOn=DateTime.Now,
146 
147                         DownValue=decimal.Parse(strValue1),//下限不低於
148 
149                          UpValue = decimal.Parse(strValue2),//上限不超過
150 
151                           SortID=t.Index,
152 
153                 });
154 
155             });
156 
157  
158 
159             //檢查範圍N
160 
161             //單價
162 
163             strValues4 = (this.userLastRolesControl1.Controls.Find("ddl_price", true)[0] as RadDropDownList).Text;
164 
165             //噸數範圍
166 
167             strValue3= (this.userLastRolesControl1.Controls.Find("tb_last2", true)[0] as RadTextBox).Text;
168 
169             if (strValues4 != "" && strValue3!="")
170 
171             {
172 
173                 lbrd.Add(new Model.AutoWater_Sys_BaseRolesDetail() {
174 
175                  BaseTablesID=br.ID,
176 
177                   SortID=9,
178 
179                    BetweenValue=decimal.Parse(strValue3),
180 
181                     UpValue=0.00m,
182 
183                       DownValue = decimal.Parse(strValue3),
184 
185                       CreateOn=DateTime.Now,
186 
187                        CreateBy=this.CurrentUserName,
188 
189                         ID=Guid.NewGuid(),
190 
191                          CountTypeValue=decimal.Parse(strValues4),
192 
193                           CountType=3,
194 
195                 });
196 
197             }
198 
199  
200 
201             Combin<Model.AutoWater_Sys_BaseRoles, List<Model.AutoWater_Sys_BaseRolesDetail>> combinList = new Combin<Model.AutoWater_Sys_BaseRoles, List<Model.AutoWater_Sys_BaseRolesDetail>>(br,lbrd);
202 
203             bool isAddOK=SettingHelper.Init.AddBaseRoles(combinList);
204 
205             if (isAddOK)
206 
207             {
208 
209                 this.MessageBoxShow("建立規則成功!");
210 
211                 combinList = null;
212 
213                 lbrd.Clear();
214 
215                 br = null;
216 
217                 lbrd = null;
218 
219                 this.Close();
220 
221             }
222 
223             else
224 
225             {
226 
227                 this.MessageBoxShow("建立規則失敗!");
228 
229             }
230 
231         }

 

 

到此以上就是設置了定義計算規則的邏輯,是不是很簡單,有了這些數據的規則之後,接下來就是解析這些數據了,有興趣的朋友可以自己設計下,然後自己解析,因為這些在老菜鳥看來這些都是兒科的玩意,好了今天就和大家分享到這裡,明天給大家分享下,我這個老菜鳥是如何開發發票設計器的,如何來動態設計發票模板,各位88


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 整理Apache+Mysql+PHP+PHPWind(Apache+PHP集成環境) 一、情況簡述: 1、虛擬機VM上面CentOS 2、全部yum安裝(yum安裝與源碼安裝的安裝路徑不同) 二、操作步驟簡述 安裝Apache(httpd) 安裝Mysql(mysqld) 安裝PHP(phpd-fd ...
  • 原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章、作者信息和本聲明,否則將追究法律責任。 最近一直在完善基於Busybox做的ARM Linux的根文件系統,由於busybox是一個精簡的指令集組成的簡單文件系統,其優點就是極精簡,滿足了Linux基本的啟動需求,由於它幾乎沒有什麼後臺服務,對於 ...
  • localhost + 埠可以正常訪問Manager APP,而IP + 埠不能訪問Manager APP,報403錯誤。(我的主機環境是Ubuntu16.04) 前提是你已經配好了tomcat_user.xml,server.xml,context.xml 前提是你已經配好了tomcat_us ...
  • 一、Linux目錄結構 你想知道為什麼某些程式位於/bin下,或者/sbin,或者/usr/bin,或/usr/sbin目錄下嗎?例如,less命令位於/usr/bin目錄下。為什麼沒在/bin中,或/sbin,或/usr/sbin目錄中?所有這些目錄之間有什麼不同? 在這篇文章中,讓我們回顧一下L ...
  • 最終的效果圖 下麵開始幹活:生成幫助文檔 一、創建 WebApi 項目 二、找到 HelpPageConfig.cs 並取消代碼註釋 三、對項目單擊右鍵,選擇屬性,按圖操作 四、啟動項目,輸入Url: localhost:{埠號}/help 【註】Description 沒有顯示內容是因為我們沒有 ...
  • 本次主要分享幾個場景的處理代碼,有更好處理方式多多交流,相互促進進步;代碼由來主要是這幾天使用前端Ace框架做後臺管理系統,這Ace是H5框架裡面的控制項效果挺多的,做相容也很好,有點遺憾是控制項效果基本都是寫一起的,分離起來挺麻煩的;這次主要說的是後端代碼,以後可以分享下這個框架的使用。 以上是個人的 ...
  • 本文版權歸博客園和作者本人共同所有,轉載和爬蟲請註明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之處,已經有所修改。 今天分享的是Hash散列數據類型操作,不過我也覺得有了前兩篇的基礎搭建後,你就能自己按照StackExch ...
  • Asp.Net MVC5+ EntityFramework6.0 db first + Autofac(IOC) + SqlServer2014還請大家多多指教啦 anneke.cn ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...