计算餐补(go语言实现)

最近公司需要每月计算餐补(按工作日,每日15元),然后自己去弄发票。

遂写个程序帮助自己计算工作日和这个月的全勤餐补。

程序如下(公司的年假比国家的长,所以如果和我不是一家公司的话需要复用还需要自行修改holiday和specialday数组)。

package main

import (
    "os"
    "fmt"
    "time"
    "strconv"
)

func PrintUsage(){
    fmt.Println("Usage:./calMoney [month]. Exp: ./calMoney 2 ")
}

func calDays(curYear int64,curMonth int64) int64{
    if curMonth != 2{
        if curMonth == 4 || curMonth == 6 || curMonth == 9 || curMonth == 11{
            return 30
        }else{
            return 31
        }
    }else{
        if (curYear%4 == 0 && curYear%100 != 0) || curYear%400 == 0 {
            return 29
        }else{
            return 28
        }
    }
}

func isHoliday(curDate string) bool{
    //是2016年的节假日,其他年份需要相应调整
    var holiday []string = []string{
            "01-01","01-02","01-03",
            "02-03","02-04","02-05","02-06","02-07","02-08","02-09","02-10","02-11","02-12","02-13","02-14",
            "04-04","04-05","04-06",
            "05-01","05-02","05-03",
            "06-09","06-10","06-11",
            "09-15","09-16","09-17",
            "10-01","10-02","10-03","10-04","10-05","10-06","10-07",}
    for _,curHoliday := range holiday{
        if curHoliday == curDate{
            return true
        }
    }
    return false
}

func isSpecialday(curDate string) bool{
    //是2016年的调休【即星期六星期天需要上班的日子】,其他年份需要相应调整
    var specialday []string = []string{
            "06-12","09-18","10-08","10-09",}
    for _,curSpecialDay := range specialday{
        if curSpecialDay == curDate{
            return true
        }
    }
    return false
}

func CalMoney(curYear int64,curMonth int64){
    dayOfMonth := calDays(curYear,curMonth)
    workDay := 0

    var curDay int64

    for curDay=1; curDay<=dayOfMonth; curDay++{
        var curTimeStr string
        if curMonth < 10{
            if curDay < 10{
                curTimeStr = fmt.Sprintf("%d-0%d-0%d 00:00:00",curYear,curMonth,curDay)
            }else{
                curTimeStr = fmt.Sprintf("%d-0%d-%d 00:00:00",curYear,curMonth,curDay)
            }
            
        }else{
            if curDay < 10{
                curTimeStr = fmt.Sprintf("%d-%d-0%d 00:00:00",curYear,curMonth,curDay)
            }else{
                curTimeStr = fmt.Sprintf("%d-%d-%d 00:00:00",curYear,curMonth,curDay)
            }
        }
        loc, _ := time.LoadLocation("Local")
        curTime,_ := time.ParseInLocation("2006-01-02 15:04:05",curTimeStr,loc)

        if ((curTime.Weekday() == time.Saturday || curTime.Weekday() == time.Sunday) && !isSpecialday(curTimeStr[5:10])) || isHoliday(curTimeStr[5:10]){
            continue
        }else{
            fmt.Println(curTimeStr[0:10])
        }

        workDay += 1
    }

    //餐补一天15元
    moneyOfDay := 15
    //当月餐补
    fmt.Printf("total money:%d\n",workDay*moneyOfDay)
}

func main(){
    var curYear int64 = 2016

    if len(os.Args) != 2 {
        PrintUsage()
        return
    }

    curMonth,err := strconv.ParseInt(os.Args[1],10,64)
    if err != nil {
        PrintUsage()
        return
    }

    CalMoney(curYear,curMonth)
}

运行效果如下:


2月份的工作日和餐补如截图所示。

学生社团系统-学生社团“一站式”运营管理平台-学生社团管理系统-基于SSM的学生社团管理系统-springboot学生社团管理系统.zip-Java学生社团管理系统开发实战-源码 更多学生社团系统: SpringBoot+Vue学生社团“一站式”运营管理平台源码(活动管理+成员考核+经费审批) Java学生社团管理系统开发实战:SSM升级SpringBoot(招新报名+场地预约+数据看板) 基于SpringSecurity的社团管理APP(移动端签到+权限分级+消息推送) 企业级社团数字化平台解决方案(SpringBoot+Redis缓存+Elasticsearch活动搜索) 微信小程序社团服务系统开发(活动直播+社团文化墙+成员互动社区) SpringBoot社团核心源码(多角色支持+工作流引擎+API接口开放) AI赋能社团管理:智能匹配兴趣标签+活动热度预测+成员贡献度分析(附代码) 响应式社团管理平台开发(PC/移动端适配+暗黑模式+无障碍访问) 完整学生社团系统源码下载(SpringBoot3+Vue3+MySQL8+Docker部署) 高校垂直领域社团平台:百团大战系统+社团星级评定+跨校活动联盟 适用对象:本代码学习资料适用于计算机、电子信息工程、数学等专业正在做毕设的学生,需要项目实战练习的学习者,也适用于课程设计、期末大作业。 技术栈:前端是vue,后端是springboot,项目代码都经过严格调试,代码没有任何bug! 核心管理:社团注册、成员管理、权限分级 活动运营:活动发布、报名签到、场地预约 资源服务:经费申请、物资管理、文档共享 数据分析:成员活跃度、活动效果评估、社团影响力排名
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值