今天, 你加班了么

      程序员好像天生就是要加班一样。  干了10年程序员了, 但是好像没有这样的体会。 如果说写个程序都要加班, 那可以不要干这行了, 很累的。  看官们, 别生气啊, 等我慢慢说来。
==================================================================
      我是这个行业的新人, 学校里带来的知识真的很少, 很少。 少到你不知道如何写一句代码。 求知的欲望让窝窝如饥似渴的吸取知识。  对某个技术么, 可以上google上输入上百次的查询, 该死的google总是带我进一些无聊的网站流连忘反, 看完了, 继续看技术。  经过一天劳累的学习, 俺终于知道这活怎么作了, 吃了晚饭, 下定注意, 今天把老板吩咐的事情都做晚。  一行一行的扣代码, 发现, 你白天学到的知识还是非常有限制, 按下F1, 继续抠API Doc,  可是, 里面的说的都是一堆代码相互交织在一起, 很不容易看懂。 很快的, 夜深了。 周围静悄悄, 整个世界只有我一个人在干活, 似乎很舒坦。 心里想着初恋的女友, 笑了笑了, 继续坠入那些火星人才能看懂的东西。
    年复一年, 终于4年后, 我得道了。
    我渐渐的明白, 程序员不要去外包公司成为我最主要的选择。  疯狂变化的设计语言, 没有理性的项目充满了你的生活空间。在这儿, 没有质量的压力, 只有业务的压力。 便宜的劳动力市场让你无从选择。
    不要作电信行业, 整个电信行业是用程序员的血于汗水堆积起来的。无数的协议, 无数的接口, 无数的中国特色的业务, 无数的......
   
 等晚上继续修改。
<think>我们将创建一个更完整的加班费计算程序,允许用户输入加班小时数、加班类型(平日、周末、节假日)和计算基数(小时工资)。功能:1.输入:加班小时数、加班类型、小时工资基数2.计算:根据加班类型乘以相应的倍数(平日1.5,周末2,节假日3)3.输出:显示计算的加班费4.扩展:支持多段输入,并可以保存记录我们将使用Python编写,并考虑使用命令行交互界面。后续可以扩展为GUI或Web应用。代码结构:1.定义加班类型与倍数的映射2.获取用户输入(可以多段输入,直到用户选择退出)3.计算每一段的加班费4.显示每一段的结果和总结果5.保存记录到文件注意:输入验证(例如负数、非数字等)以下是代码实现:</think>### 加班费计算软件实现方案 下面是一个完整的加班费计算软件实现,支持输入加班小时数、加班类型和计算基数(小时工资)。该程序使用Python编写,具有命令行界面、输入验证和结果导出功能。 ```python import csv from datetime import datetime import os # 加班类型配置(可扩展) OVERTIME_TYPES = { "1": {"name": "平日加班", "multiplier": 1.5}, "2": {"name": "周末加班", "multiplier": 2.0}, "3": {"name": "法定节假日", "multiplier": 3.0}, "4": {"name": "深夜加班", "multiplier": 1.8} # 示例扩展类型 } def validate_input(value, value_type="float", min_value=0): """通用输入验证函数""" try: if value_type == "float": num = float(value) if num < min_value: raise ValueError(f"不能小于{min_value}") return num elif value_type == "int": num = int(value) if num < min_value: raise ValueError(f"不能小于{min_value}") return num elif value_type == "choice": if value not in OVERTIME_TYPES: raise ValueError("无效的加班类型") return value except ValueError as e: print(f"输入错误: {e}") return None def calculate_overtime_pay(base_wage, hours, multiplier): """计算加班费""" return base_wage * hours * multiplier def save_record(records): """保存加班记录到CSV文件""" filename = "overtime_records.csv" file_exists = os.path.isfile(filename) with open(filename, 'a', newline='', encoding='utf-8') as f: writer = csv.writer(f) # 如果文件不存在,写入表头 if not file_exists: writer.writerow(["日期", "基数(时薪)", "加班类型", "小时数", "倍数", "加班费", "计算时间"]) # 写入记录 for record in records: writer.writerow([ record['date'], record['base_wage'], OVERTIME_TYPES[record['ot_type']]['name'], record['hours'], record['multiplier'], record['pay'], record['calc_time'] ]) print(f"\n记录已保存到 {filename}") def display_summary(records): """显示计算结果汇总""" total_pay = sum(record['pay'] for record in records) print("\n===== 计算结果汇总 =====") print(f"记录条目数: {len(records)}") print(f"总加班费: {total_pay:.2f}元") # 按加班类型分类统计 type_summary = {} for record in records: type_name = OVERTIME_TYPES[record['ot_type']]['name'] type_summary.setdefault(type_name, {"hours": 0, "pay": 0}) type_summary[type_name]["hours"] += record['hours'] type_summary[type_name]["pay"] += record['pay'] print("\n===== 按类型统计 =====") for type_name, data in type_summary.items(): print(f"{type_name}: {data['hours']}小时, {data['pay']:.2f}元") def main(): """主程序""" records = [] print("===== 加班费计算软件 =====") print("支持以下加班类型:") for code, data in OVERTIME_TYPES.items(): print(f" {code}: {data['name']} ({data['multiplier']}倍)") while True: try: print("\n=== 输入加班信息 (输入q退出) ===") # 获取日期 date_str = input("加班日期(YYYY-MM-DD, 默认今天): ").strip() if date_str.lower() == 'q': break date = datetime.now().date() if not date_str else datetime.strptime(date_str, '%Y-%m-%d').date() # 获取基数(小时工资) base_wage = None while base_wage is None: wage_input = input("小时工资基数(元/小时): ").strip() if wage_input.lower() == 'q': break base_wage = validate_input(wage_input, "float", 0.01) # 获取加班类型 ot_type = None while ot_type is None: type_input = input("加班类型(输入代码): ").strip() if type_input.lower() == 'q': break ot_type = validate_input(type_input, "choice") # 获取加班小时数 hours = None while hours is None: hours_input = input("加班小时数: ").strip() if hours_input.lower() == 'q': break hours = validate_input(hours_input, "float", 0.01) # 计算加班费 multiplier = OVERTIME_TYPES[ot_type]['multiplier'] pay = calculate_overtime_pay(base_wage, hours, multiplier) calc_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S') # 存储记录 record = { 'date': date.strftime('%Y-%m-%d'), 'base_wage': base_wage, 'ot_type': ot_type, 'hours': hours, 'multiplier': multiplier, 'pay': pay, 'calc_time': calc_time } records.append(record) # 显示当前结果 print(f"\n本次加班费: {pay:.2f}元") print(f"计算详情: {base_wage}元 × {hours}小时 × {multiplier}倍") except KeyboardInterrupt: print("\n操作已取消") break except Exception as e: print(f"发生错误: {e}") # 显示汇总并保存结果 if records: display_summary(records) save_record(records) else: print("未输入有效数据,程序退出") if __name__ == "__main__": main() ``` ### 代码详解 #### 1. 加班类型配置系统 ```python OVERTIME_TYPES = { "1": {"name": "平日加班", "multiplier": 1.5}, "2": {"name": "周末加班", "multiplier": 2.0}, "3": {"name": "法定节假日", "multiplier": 3.0}, "4": {"name": "深夜加班", "multiplier": 1.8} } ``` - 使用字典存储加班类型配置,便于扩展 - 每个类型包含名称和倍数,支持灵活添加新类型 #### 2. 输入验证函数 ```python def validate_input(value, value_type="float", min_value=0): # 验证逻辑... ``` - 支持多种数据类型验证(浮点数、整数、选项) - 检查最小值限制 - 提供清晰的错误反馈 #### 3. 核心计算逻辑 ```python def calculate_overtime_pay(base_wage, hours, multiplier): return base_wage * hours * multiplier ``` - 简洁的计算公式:基数 × 小时数 × 倍数 - 可扩展为更复杂的计算规则(如分段计算) #### 4. 数据持久化 ```python def save_record(records): # 保存到CSV文件... ``` - 使用CSV格式存储记录 - 自动检测文件是否存在并添加表头 - 支持UTF-8编码,确保中文兼容 #### 5. 用户界面设计 ```python def main(): # 主循环... ``` - 清晰的命令行交互界面 - 支持连续输入多条记录 - 输入过程中可随时退出(输入q) - 提供实时计算结果反馈 ### 使用示例 ``` ===== 加班费计算软件 ===== 支持以下加班类型: 1: 平日加班 (1.5倍) 2: 周末加班 (2.0倍) 3: 法定节假日 (3.0倍) 4: 深夜加班 (1.8倍) === 输入加班信息 (输入q退出) === 加班日期(YYYY-MM-DD, 默认今天): 2023-08-15 小时工资基数(元/小时): 50 加班类型(输入代码): 1 加班小时数: 3 本次加班费: 225.00元 计算详情: 50.0元 × 3.0小时 × 1.5倍 === 输入加班信息 (输入q退出) === 加班日期(YYYY-MM-DD, 默认今天): 2023-08-19 小时工资基数(元/小时): 50 加班类型(输入代码): 2 加班小时数: 8 本次加班费: 800.00元 计算详情: 50.0元 × 8.0小时 × 2.0倍 === 输入加班信息 (输入q退出) === 加班日期(YYYY-MM-DD, 默认今天): q ===== 计算结果汇总 ===== 记录条目数: 2 总加班费: 1025.00元 ===== 按类型统计 ===== 平日加班: 3.0小时, 225.00元 周末加班: 8.0小时, 800.00元 记录已保存到 overtime_records.csv ``` ### 功能扩展建议 1. **图形用户界面(GUI)** - 使用PyQt或Tkinter创建桌面应用 - 添加日历控件选择日期 - 实现表格显示历史记录 2. **规则自定义系统** - 从配置文件加载加班规则 - 支持不同地区/公司的特殊计算规则 - 添加自定义加班类型功能 3. **高级计算功能** - 支持分段加班计算(不同时间段不同倍数) - 添加最低工资标准验证 - 实现加班费税收计算 4. **数据导入导出** - 支持Excel格式导入导出 - 添加数据库存储功能 - 实现PDF报告生成
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值