C#月数计算器(主要用于社保、医保缴费月数计算)

1、为什么做这个?

  工作中,经常需要计算参保人社保、医保缴费月数,之前都是在Excel中写一个DATEDIF公式,修改单元格中的日期,计算间隔的月数,公式如下:

=DATEDIF(起始日期, 终止日期, 返回类型) 

4bda0c55042e414a8f294d58690afc28.jpeg

或者

a44fb3d1c74447f5a65e0a7a9b4154cf.jpeg

   看起来,这样做也挺方便,但每次录入前,需要用鼠标点击相应单元格,清除内容,录入……计算得多了,仍然感觉很麻烦,于是,决心做一个“计算器”。

2、制作思路

  这个计算器,主打一个“方便”,所以界面要简洁,功能要强大,功能主要做2个:

  • 根据2个日期,计算相距的月数
  • 根据1个日期,计算其之前或之后n个月的日期

  在这里,我设置了3种计算方式:共计、相差、间隔,在工作中,“共计”模式用的最多。

  • 共计:从年月a数到年月b,一共有多少个月,例如从2008年1月至2008年9月,计算结果为9;
  • 相差:从年月a到年月b,差着几个月,例如从2008年1月至2008年9月,计算结果为8;
  • 间隔:从年月a到年月b,中间隔着几个月,例如从2008年1月至2008年9月,计算结果为7。

  为方便使用,年月a和年月b自动比较大小,录入时无需考虑哪个在前哪个在后。

  日期格式:yyyyMM,例如2009年5月,输入为200905。

3、绘制界面

27fdb3d683f1489aae5b58efab6c7e92.jpeg

  界面分为上下两部分,上面是按2个【年月】计算【月数】,下面是按【年月一】+【月数】计算【年月二】。

  计算方式那里用了ComboBox,下拉选择,年月输入框使用的TextBox,后续计算时要对有效性进行校验。

  为方便操作,对控件的OnKeyPress事件进行了设置,实现用回车键切换文本框,对窗体的CancelButton进行了设置,实现用ESC键清空内容。

4、功能实现

直接粘上用到的2个方法

        /// /// 按【年月一】+【月数】计算【年月二】/// /// 【年月一】/// 【月数】/// 计算方式/// 存放错误信息/// 【年月二】private DateTime calMonth(DateTime ym1, int monthsCount, string jisuanfangshi, out string Msg){DateTime dtResult = new DateTime();try{dtResult = ym1.AddMonths(monthsCount);Msg = "";}catch(Exception ex){Msg = ex.Message;}return dtResult;}/// /// 按2个【年月】计算【月数】/// /// 【年月一】/// 【年月二】/// 计算方式/// 存放说明信息</// 【月数】private int cal(DateTime start, DateTime end, string jisuanfangshi, out string Msg){int result = -1;Msg = "";if (start > end){DateTime tmpDT = end;end = start;start = tmpDT;}int endMonth = end.Month;int startMonth = start.Month;int endYear = end.Year;int startYear = start.Year;if (endMonth < startMonth){endYear -= 1;endMonth += 12;}result = 12 * (endYear - startYear) + endMonth - startMonth;switch (jisuanfangshi){case "共计":result += 1;break;case "间隔":result -= 1;if (result < 0){result = 0;}break;case "相差":break;}if (result > 12){Msg = (result / 12).ToString() + "年" + (result % 12).ToString() + "个月";}return result;}

按日期计算月数

        private void btnCal_Click(object sender, EventArgs e){if (!Regex.IsMatch(txtStart.Text, @"^\d{6}$")){MessageBox.Show("起始年月格式{yyyyMM}录入有误!请检查!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);txtStart.Focus();return;}if (!Regex.IsMatch(txtEnd.Text, @"^\d{6}$")){MessageBox.Show("截止年月格式{yyyyMM}录入有误!请检查!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);txtEnd.Focus();return;}try{DateTime dt1 = new DateTime(int.Parse(txtStart.Text.Substring(0, 4)), int.Parse(txtStart.Text.Substring(4, 2)), 1);DateTime dt2 = new DateTime(int.Parse(txtEnd.Text.Substring(0, 4)), int.Parse(txtEnd.Text.Substring(4, 2)), 1);string info = "";txtResult.Text = cal(dt1, dt2, cmbCal.Text,out info).ToString();if (info.Length > 0){lblInfo.Text = "个月 即 " + info;}else{lblInfo.Text = "个月";}}catch{MessageBox.Show("日期转换出错,请检查!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);return;}}

按一个日期+月数计算另一个日期

        private void btnCalMonth_Click(object sender, EventArgs e){DateTime dtFirst;try{dtFirst = new DateTime(int.Parse(txtYMA.Text.Substring(0, 4)),int.Parse(txtYMA.Text.Substring(4, 2)),1);}catch{MessageBox.Show("【起始年月】填写有误!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);txtYMA.Focus();return;}if (txtNumYear.Text.Length == 0 && txtNumMonth.Text.Length == 0){MessageBox.Show(cmbCountMonth.Text+"【月数】未填写!", "消息", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);txtNumYear.Focus();return;}int monthCount = 1;if (cmbCalMonth.Text == "间隔"){monthCount = -1;}if (cmbCalMonth.Text == "相差"){monthCount = 0;}if(Regex.IsMatch(txtNumYear.Text,@"^\d+$")){monthCount-=int.Parse(txtNumYear.Text)*12;}if(Regex.IsMatch(txtNumMonth.Text,@"^\d+$")){monthCount-=int.Parse(txtNumMonth.Text);}if (cmbCountMonth.Text == "后"){monthCount *= -1;}DateTime dtResult = dtFirst.AddMonths(monthCount);txtResultCount.Text = dtResult.ToString("yyyyMM");}

感兴趣的朋友可以动手做一个,试一下!
下载源码https://download.csdn.net/download/W2KExp/88094039

d452f57f3f57477f82a758431bfbe905.gif

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部