超市过期商品检索程序(二)——程序初步设计以及初步实现

该博客介绍了使用Python处理商品保质期的程序设计,包括计算商品保质期结束时间、临期商品开始时间,并根据不同的保质期范围生成大日期商品和过期商品的目录。程序读取Excel数据,根据输入的当前日期筛选出即将过期和已过期的商品信息。

这个程序每天用一个小时的空闲时间,一共花了我近一个星期进行初步设计,我的程序创作思路很简单,先做好程序要实现的初步目标然后再进行改进,下面是我的程序初步设计,要求如下:
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.Microseconds

f = '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 = 5
    elif save_day_pl < 3:
        big_time = 10
    elif save_day_pl < 6:
        big_time = 15
    elif save_day_pl < 7:
        big_time = 20
    elif save_day_pl <= 8:
        big_time = 45
    return big_time
        
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))
    
def read_code():
    wei1 = 1
    wei2 = 1
    rb = 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).value
        sa_day = sheet1.cell(i,7).value
        save_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 += 1
        if 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 += 1
    print(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])"""

设计代码并没有特别难,难的是整个设计流程,一不小心就容易跑偏,整个代码设计在半年之后的我看来非常差,但是半年前的时候设计出来非常开心,所以,我的代码仅供参考,如果说是有学习想法的人看到了我的分享代码,千万要记住,仅供参考,还是设计自己的代码更能学习到东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值