尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Python库存盘点系统:while循环自动保存防丢失,新手库管1招搞定(附源码)

Python库存盘点系统:while循环自动保存防丢失,新手库管1招搞定(附源码) 阅读提示本文主要面向库管与台账业务人员包含Python语法、安装和使用Pycharm和Python.exe的讲解。如果您没有库存相关业务背景部分业务案例不容易看懂。库管避坑新手必看盘点致命雷退出时忘记保存数据全清零⚠️库管和Python新手在使用自动化盘点脚本盘点商品时常被更紧急的事务打断。情急之下直接退出忘了保存——之前盘好的数据就这样人间蒸发了。等处理完急事回来继续盘点数据发现数据已清零。还得重盘真是怒火中烧心里有一股怒火等待着要窜出来明明已经盘好的数据为什么退出后就没了呢还得重盘真的是太麻烦了总不能保证盘点数据过程中没有突发急事也不能保证每次都能记得先保存。还好我手工AI辅助写出了一个while循环自动化盘点数据脚本。它的特别之处在于退出时的自动化保存功能。Python新手和库管在盘点商品时即使因急事直接退出数据也不会丢。使用此while循环自动化盘点数据脚本这一招自救以防丢失。这能保证Python新手、库管在使用此while循环自动化盘点数据脚本时不用为未能即时保存盘点数据而烦恼大大提升效率。我把详细需求发给AI生成代码再根据实际需求修改。每消灭一个bug就像奥特曼打败小怪兽心里充满成就感。每次有成就感后就迫不及待地往下进行越有成就感越想试形成正向循环直到此脚本没有任何bug为止。新手零压力库管救星while循环退出即保存看完秒懂本章写的脚本要用到while循环语法如果你们不会的话请阅读以下文章。Python新手在PyCharm写while必踩5坑为什么退出自动保存要用 while 循环而不是 for 循环核心区别在于你是否事先知道要重复多少次。用户操作系统时点击多少次按钮、输入多少次数据是无法预先确定的——有人用三分钟就退出有人则用三小时。这种不确定循环次数直到满足某个条件才停止的场景正好对应 while 循环 的工作方式只要条件成立就一直执行条件不满足时才退出。相比之下for 循环更适合已知范围的任务比如处理前 10 个订单、“扫描这 5 箱货物”——在循环开始前就已经知道具体要执行多少次了。新手零踩坑库管省时间搞定Python环境不用复杂操作在复制粘贴修改运行本章的脚本之前需要安装和使用Pycharm和Python.exe。如果你们不会的话请阅读以下两篇文章。安装Pycharm配置python.exe0基础新手一次成功如何使用PyCharm0基础新手必看七大核心功能越用越有意思新手能抄码库管能落地退出自动化保存盘点系统直接复制粘贴修改代码需求拆解新手能看懂、库管能用到刚需功能一目了然开始↓加载 inventory_store_data.json↓读取成功→是→加载历史数据→否→新建空库存↓显示已加载商品数量↓输入操作员姓名↓记录开始时间↓设置库存预警阈值↓用户输入→空→是→默认10→否→尝试转数字↓数字合法→否→重新输入→是→负数→是→重新输入→否→阈值设置成功↓进入【主菜单循环】┌───────────────────────────────────┐│ 主菜单1保存 2查看修改 3盘点 4改阈值 q退出 │└───────────────────────────────────┘↓用户选择├─1→保存数据到文件→返回菜单├─2→显示所有库存│ ↓│ 逐个判断库存阈值→是→标缺货│ →否→标充足│ ↓│ 输入商品名→q→返回菜单│ →存在→输入新数量│ →不存在→提示未找到│ ↓│ 新数量→q→退出│ →数字→否→失败│ →是→负数→是→失败│ →否→更新库存│ ↓│ 再次判断是否低于阈值│ ↓│ 返回菜单├─3→进入盘点循环│ ↓│ 输入商品名→空→重新输│ →q→退出盘点│ →显示当前库存│ ↓│ 判断是否低于阈值→提示充足/缺货│ ↓│ 输入扫描数量→ok→完成当前商品│ →q→退出│ →数字→否→重新输│ →是→0→无变化│ →负数→错误│ →正数→库存 扫描数│ ↓│ 再次判断库存预警│ ↓│ 继续盘点循环├─4→显示当前阈值│ ↓│ 输入新阈值→q→退出│ →数字→否→失败│ →是→负数→失败│ →否→更新阈值│ ↓│ 扫描所有商品→列出缺货清单│ ↓│ 返回菜单└─q→退出循环↓自动保存数据↓计算耗时、总种类、总件数、缺货数量↓生成盘点报告↓列出缺货清单↓结束核心实战自动盘点退出即自动保存新手易上手、库管省人力importjsonfromdatetimeimportdatetimedefload_from_file(filenameinventory_store_data.json):启动时尝试读取上次数据try:withopen(filename,r,encodingutf-8)asf:returnjson.load(f)except:return{}defsave_to_file(store_data,filenameinventory_store_data.json):自动保存数据到文件withopen(filename,w,encodingutf-8)asf:json.dump(store_data,f,ensure_asciiFalse,indent2)print(f库存盘点数据已自动保存至{filename})returnfilename# 主程序print(智能盘点系统(附系统异常时即时保存))# 尝试读取历史数据没有就新建storeload_from_file()print(f已加载历史数据{len(store)}种商品)operatorinput(请输入操作员姓名)# 记录责任人start_timedatetime.now()# 设置库存预警阈值核心功能# 当商品库存低于这个数值时系统会提示需要进货whileTrue:try:threshold_inputinput(请设置库存预警阈值低于此数量将提示进货按回车默认10).strip()# 如果用户直接回车使用默认值10warning_thresholdint(threshold_input)ifthreshold_inputelse10ifwarning_threshold0:print(库存阈值不能为负数!)continuebreakexcept:print(输入错误请输入数字)print(f当前库存预警阈值设置为{warning_threshold}件)print(提示当商品库存低于此数值时系统会标记为【需要进货】)whileTrue:print(\n【主菜单】1-保存 2-查看/修改 3-开始盘点 4-修改库存预警阈值 q或Q-结束)select_commandinput().strip()# ---------------------- 选项1保存 --------------------------------ifselect_command1:save_to_file(store)# ---------------------- 选项2查看/修改商品数量 ---------------------elifselect_command2:# 查看与修改print(\n当前库存信息)forid,(good_name,quantity)inenumerate(sorted(store.items()),1):# 【核心改进】判断是否低于预警阈值给出进货提示print(f{id}.{good_name}:{quantity})ifquantitywarning_threshold:print(【库存不足建议进货】)# 红色警示else:print(【库存充足】)edit_good_store_quantityinput(\n如需修改输入商品名,按q或Q返回).strip()whileTrue:ifedit_good_store_quantity.lower()q:breakifedit_good_store_quantityinstore:new_good_store_quantityinput(f当前为{store[edit_good_store_quantity]}修改为按q或Q退出)ifnew_good_store_quantity.lower()q:breaktry:ifint(new_good_store_quantity)0:print(修改失败商品数量不能为负数。)continuestore[edit_good_store_quantity]int(new_good_store_quantity)print(修改完成。)# 修改后立即提示是否低于阈值ifstore[edit_good_store_quantity]warning_threshold:print(f⚠️注意该商品库存({store[edit_good_store_quantity]})低于预警阈值({warning_threshold})建议进货)breakexcept:print(修改失败商品数量必须是数字)continueelifedit_good_store_quantity!:print(未找到该商品)break# ---------------------- 选项3开始盘点商品 ---------------------elifselect_command3:# 盘点录入流程whileTrue:good_nameinput(输入商品名(按q或Q退出)).strip()ifnotgood_name:print(商品名不能为空!)continueifgood_name.lower()q:break# 显示该商品当前库存如果是第二次盘current_quantitystore.get(good_name,0)print(f该商品{good_name}当前已盘{current_quantity}件)# 盘点时实时提醒是否需要进货ifcurrent_quantitywarning_threshold:print(f警告当前库存({current_quantity})低于预警阈值({warning_threshold})建议立即进货)else:print(f当前库存充足超过预警线{current_quantity-warning_threshold}件)whileTrue:number_strinput(输入扫描数量(ok完成,按q或Q退出)).strip()ifnumber_str.lower()ok:breakifnumber_str.lower()q:break# 数据校验层重点try:numberint(number_str)exceptValueError:print(只能输入整数)continueifnumber0:print(数量无变化。)continueifnumber0:print(输入错误不能为负数)continue# 更新库存old_store_quantitystore.get(good_name,0)store[good_name]old_store_quantitynumberifnumber0:store_action增加print(f商品{good_name}{store_action}{number}件当前商品{good_name}{store[good_name]}件。)# 每次操作后都检查是否低于阈值ifstore[good_name]warning_threshold:print(f 注意库存已低于预警线({warning_threshold})请及时补货)else:remainingstore[good_name]-warning_thresholdprint(f当前库存充足超过预警线{remaining}件)# ---------------------- 选项4修改库存预警阈值 ---------------------elifselect_command4:print(f\n当前预警阈值{warning_threshold}件)whileTrue:try:new_thresholdinput(请输入新的预警阈值按q或Q直接退出).strip()ifnew_threshold.lower()q:breakifnew_threshold:new_valint(new_threshold)ifnew_val0:print(阈值不能为负数)continueelse:warning_thresholdnew_valprint(f预警阈值已更新为{warning_threshold}件)# 立即检查当前库存状态low_stock_items[(name,quantity)forname,quantityinstore.items()ifquantitywarning_threshold]iflow_stock_items:print(f\n⚠️预警以下{len(low_stock_items)}种商品库存不足)forname,quantityinlow_stock_items:print(f{name}:{quantity}件缺货{warning_threshold-quantity}件)else:print(所有商品库存充足)breakexcept:print(输入无效阈值未改变)# -------------------- 按q或Q退出程序 ------------------------------ifselect_command.lower()q:# 退出前强制保存save_to_file(store)break# 生成盘点报告end_timedatetime.now()duration_time(end_time-start_time).seconds//60# 统计低于阈值的商品数量low_stock_countsum(1forquantityinstore.values()ifquantitywarning_threshold)print(*8智能盘点报告*14)print(f操作员{operator})print(f耗时{duration_time}分钟)print(f商品种类{len(store)}种)print(f总件数{sum(store.values())}件)print(f⚠️需进货商品{low_stock_count}种阈值{warning_threshold}件)print(f\n)# 列出需要进货的商品清单iflow_stock_count0:print(\n【进货提醒清单】)forname,quantityinsorted(store.items()):ifquantitywarning_threshold:print(f{name}: 当前{quantity}件需补货{warning_threshold-quantity}件)print()运行结果按q或Q退出运行查看/修改商品库存功能盘点商品库存功能修改商品库存预警阈值功能保存名为inventory_store_data.json商品库存文件功能打开名为inventory_store_data.json商品库存文件截图总结本章将教你用while循环编写一个退出即自动化保存的智能盘点脚本。它能完美解决工作中的尴尬场景盘点中途被紧急事务打断处理完后却忘记保存就直接关掉了程序。无论你是刚学Python的新手还是一线库管人员都可以复制粘贴本章代码根据实际业务需求稍作修改即可使用。如果你能坚持读到这里已经相当了不起——这意味着你已经掌握了防止盘点数据丢失的核心思路向用技术改变工作的目标迈进了一大步。这份脚本就是送给想要靠技术翻身的你们的一份实用礼物。专栏下篇剧透本专栏下篇文章将带来while循环在解决更多库存实战场景的痛点中的妙用敬请期待如果觉得文章有用别忘了动动你们宝贵的手指点赞、收藏、关注也欢迎转发给更多朋友。关注后你会收到更多Python语法技巧、Python实战解决痛点、编程避坑指南及开发工具使用教程。如果你们有任何疑问或想法那么随时欢迎你们在评论区留言讨论资源下载文末提供Python单机版库存管理系统完整脚本下载包含全部功能的可运行源码下载即用。下载后可直接复制粘贴运行根据实际业务需求稍作调整即可投入使用。PythonTkinterSQLite 单机版商品库存管理系统源码
返回列表