超市过期商品检索程序(二)——程序初步设计以及初步实现
这个程序每天用一个小时的空闲时间,一共花了我近一个星期进行初步设计,我的程序创作思路很简单,先做好程序要实现的初步目标然后再进行改进,下面是我的程序初步设计,要求如下:
1.求取商品的保质期
2.求取商品的大日期范围
3.求取商品大日期开始时间
4.求出过期商品的条形目录
这里,需要了解一点知识,什么是商品的大日期?大日期的时间该如何确定?从网上搜索,我获得了以下信息:
- 食品 保质 期 为 一 年 以 上 的 , 期 满 之 日 前 45 天 ;
- 保质 期 为 半年 以 上 不 足 一 年 的 , 期 满 之 日 前 20 天 ;
- 保质 期 90 天 以 上 不 足 半 年 的 , 期 满 之 日 前 15 天 ;
- 保质 期 30 天 以 上 不 足 90 天 的 , 期 满 之 日 前 10 天 ;
- 保质 期 16 天 以 上 不 足 30 天 的 , 期 满 之 日 前 5 天 ;
- 保质 期 少 于 15 天 的 , 期 满 之 日 前 1 至 4 天 。
然后,enmmm,非常抱歉,到这里有点失去节奏了,因为这篇文章与之前相隔近半年,上面的内容是之前村的草稿,所以我就长话短说,思路简略了,对于步骤一,就是在做加减法,这个其实很简单,只需要好好运用python的库文件,就可以轻松的解决日期的加减问题,我选择的是datetime和dateutil的相关库文件,然后按照步骤先计算保质期,再计算临期商品开始的时间,相关信息再写入表格当中,相关操作代码如下:
def end_time(date_date,save_day_pl):#保质期至date1 = parse(date_date)if save_day_pl == 0 or save_day_pl == 2:return (date1 + relativedelta(days = save_day[save_day_pl]))else:return (date1 + relativedelta(months = save_day[save_day_pl]))def begin_time(hand_time,end_t):#临期商品开始时间return (end_t - relativedelta(days = hand_time))
第四步就很好实现了,完整代码如下:
#大日期商品输出
#食品 保质 期 为 一 年 以 上 的 , 期 满 之 日 前 45 天 ;
#保质 期 为 半年 以 上 不 足 一 年 的 , 期 满 之 日 前 20 天 ;
#保质 期 90 天 以 上 不 足 半 年 的 , 期 满 之 日 前 15 天 ;
#保质 期 30 天 以 上 不 足 90 天 的 , 期 满 之 日 前 10 天 ;
#保质 期 16 天 以 上 不 足 30 天 的 , 期 满 之 日 前 5 天 ;
#保质 期 少 于 15 天 的 , 期 满 之 日 前 1 至 4 天 。
from random import randint
from xlutils.copy import copy
import xlrd
import time
import datetime
from dateutil.parser import *
from dateutil.relativedelta import *#1Year2.Month3.Day4.Hours5.Minutes6.Seconds7.Microsecondsf = 'F:/python_text/商品日期报告项目/超市商品条码库.xlsx'
save_day = {0:15, 1:1, 2:45, 3:2, 4:3, 5:4, 6:6, 7:12, 8:36}
sday_name = ['15天', '一个月', '45天', '两个月', '三个月', '四个月', '半年', '一年', '三年']
big_thing = {0:"商品条码 商品名称 库存量 上架货物"}
over_thing = {0:"商品条码 商品名称 库存量 上架货物"}def handle_time(save_day_pl):#大日期范围if save_day_pl == 0:big_time = 4#elif save_day_pl == 1:# big_time = 5elif save_day_pl < 3:big_time = 10elif save_day_pl < 6:big_time = 15elif save_day_pl < 7:big_time = 20elif save_day_pl <= 8:big_time = 45return big_timedef end_time(date_date,save_day_pl):#保质期至date1 = parse(date_date)if save_day_pl == 0 or save_day_pl == 2:return (date1 + relativedelta(days = save_day[save_day_pl]))else:return (date1 + relativedelta(months = save_day[save_day_pl]))def begin_time(hand_time,end_t):#临期商品开始时间return (end_t - relativedelta(days = hand_time))def read_code():wei1 = 1wei2 = 1rb = xlrd.open_workbook(f)sheet1 = rb.sheet_by_index(0)wb = copy(rb)ws = wb.get_sheet(0)now_time = input("请输入日期(如;2020-1-1):\n")now_time = parse(now_time)for i in range(1,12134):date_date = sheet1.cell(i,6).valuesa_day = sheet1.cell(i,7).valuesave_day_pl = sday_name.index(sa_day)hand_time = handle_time(save_day_pl)ws.write(i,8,hand_time)end_t = end_time(date_date,save_day_pl)ws.write(i,9,end_t.strftime("%Y-%m-%d"))b_time = begin_time(hand_time,end_t)ws.write(i,10,b_time.strftime("%Y-%m-%d"))if now_time >= b_time and now_time <= end_t:big_thing[wei1] = (str(int(sheet1.cell(i,0).value)) + " "+ str(sheet1.cell(i,1).value) + " "+ str(int(sheet1.cell(i,11).value)) + " "+ str(int(sheet1.cell(i,12).value)))wei1 += 1if now_time > end_t:over_thing[wei2] = (str(int(sheet1.cell(i,0).value)) + " "+ str(sheet1.cell(i,1).value) + " "+ str(int(sheet1.cell(i,11).value)) + " "+ str(int(sheet1.cell(i,12).value)))wei2 += 1print(big_thing[wei1-1])print(wei1,wei2,len(big_thing))wb.save(f)read_code()
"""print("大日期商品如下:")
for i in big_thing:print(big_thing[i])
print("过期商品如下:")
for i in over_thing:print(over_thing[i])"""
设计代码并没有特别难,难的是整个设计流程,一不小心就容易跑偏,整个代码设计在半年之后的我看来非常差,但是半年前的时候设计出来非常开心,所以,我的代码仅供参考,如果说是有学习想法的人看到了我的分享代码,千万要记住,仅供参考,还是设计自己的代码更能学习到东西。
超市过期商品检索程序(二)——程序初步设计以及初步实现相关推荐
- 小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈
小程序之 保存canvas生成商品图片附加小程序二维码 分享到朋友圈 一.概述 需要用到的生成二维码组件(可自行下载添加到小程序根目录utils里):https://github.com/demi52 ...
- Java生成微信小程序二维码,5种实现方式,一个比一个简单
文章目录 前言 先看官网 一.JDK自带的URLConnection方式 二.Apache的HttpClient方式 三.okhttp3方式 四.Unirest方式 五.RestTemplate方式 ...
- Java生成微信小程序二维码、上传至阿里云OSS
依赖 <!-- 阿里云oss依赖 --><dependency><groupId>com.aliyun.oss</groupId><artifac ...
- 【java】Java生成微信小程序二维码
文章目录 前言 应用场景 微信小程序官网 1.RestTemplate方式 核心代码 getAccessToken 2. Unirest方式 Maven依赖 核心代码 3. okhttp3方式 Mav ...
- 获取小程序二维码携带的参数
小程序获取二维码参数 生成二维码的时候使用的是 wxacode.getUnlimited,接口 B(数量不受限制,参数较短) 文档的截图如下: 可以看到生成的二维码的参数需要放在 scene 中 假设 ...
- 微信小程序二维码图片的宣传方法都有哪些
在小程序非常发达的今天,很多的商家都是会有自己的小程序,小程序二维码也是非常常见的,对于每一个朋友们而言,要想让自己的小程序得到更多的朋友们的关注,那么是需要做好对其的宣传工作的.通过小程序二维码图片 ...
- “程序”二字的五笔字根
"程序"二字的五笔字根:tkyc 转载于:https://blog.51cto.com/wubizigen2009/161526
- 二级c语言上机程序填空,浙江省计算机二级c语言上机考试真题(二)程序填空
浙江省计算机二级c语言上机考试真题 (二)程序填空 1,求最大公约数 ,下面程序中"____ N ____"是根据程序功能需要填充部分,请完成程序填充(注意:不得加行.减行.加句. ...
- 实现微信小程序和支付宝小程序二维码合并
实现微信小程序和支付宝小程序二维码合并,这样用户就可以通过同一个二维码进入微信或者支付宝啦 1.需要准备可以通过公网访问的服务器 2.微信小程序 打开微信小程序后台->开发(左边)->开发 ...
最新文章
- python装饰器改变命运
- ORACLE 11g 数据库 java jdk版本匹配
- Hibernate中使用未映射为主键的“id”字段进行查询的场景分析
- 怎样检查计算机的网络配置,如何检查计算机内存和配置?(3种方法教你检查计算机的真实配置)...
- java 蓝桥杯算法训练 水仙花(题解)
- Activiti Workflow HelloWorld 示例与测试环境搭建
- Got error ‘parentheses not balanced‘ from regexp
- 前W3C顾问Klaus Birkenbihl谈HTML5与万维网未来
- anaconda 虚拟环境
- 一文读懂华为智能网联汽车产业链布局
- openwrt 南京电信 PPPOE IPv6 dhcpv6 client设置方法
- Unity3D插件之FingerGestures:手势插件
- @JsonProperty
- 视频基础知识 720P、1080i、1080P
- Python算法教程第三章知识点:求和式、递归式、侏儒排序法和并归排序法
- 带你快速看完9.8分神作《Effective Java》—— 序列化篇(所有RPC框架的基石)
- 编写python 函数,实现冒泡排序算法。
- libsvm安装使用及网格搜索法参数寻优
- Mac苹果电脑怎样输入表情符号?
- C++之路进阶——codevs2313(星际竞速)