Python简单数据库系统-优惠券系统(含UI)

Python简单数据库系统-优惠券系统(含UI)

简介

疫情结束后各大企业尤其是饮食业都在想着法子用优惠券的方式吸引大众消费,于是对优惠券这个小型数据库系统产生了兴趣,简单介绍下优惠券系统需要具备什么基础功能。本设计基于n折优惠券。

需要的东西

设计一个系统的时候,需要明确自己需要什么,每一部分怎么实现。
在这里插入图片描述

函数主体

券号和密码

这里使用random库中的sample产生随机序列,券号使用纯数字而密码采用全小写字母。调用方法:random.sample(range,bit)

id = ''.join(str(o) for o in random.sample(range(1,9),id_width))
code = ''.join(chr((o)) for o in random.sample(range(97,122),code_width)) # 97-122对应小写字母

初始化状态

正如思维导图所示,系统只有券号和密码是远远不够的。
1.在创建数据库时要准备好思维导图呈现的状态变量
2.同时需要考虑券的生成模式,是随机折扣(如5~9折随机)还是指定折扣券。
3.将数据保存成字典

def create_code_dictionary(discount_sta):
    # 券号密码位宽
    id_width = 8
    code_width = 6
    control_dic = {}
    # 生成优惠券的数量
    numbers = 1000
    for i in range(numbers):
        # 使用状态,获取状态,消费单号,消费金额,折扣后金额
        use_sta = 0
        get_sta = 0
        series_num = ""
        cost = ""
        discount_num = ""
        # sample(seq, n) 从序列seq中选择n个随机且独立的元素;
        id = ''.join(str(o) for o in random.sample(range(1,9),id_width))
        code = ''.join(chr((o)) for o in random.sample(range(97,122),code_width)) # 97-122对应小写字母
        if int(discount_sta) == 0:
            # 5~9折优惠券
            discount = random.randint(5,9)
        else:
            discount = int(discount_sta)
        control_dic[id] = [code,use_sta,series_num,cost,get_sta,discount,discount_num]
    dic_into_csv(control_dic)

这里结尾利用了panda库先将字典转换成dataframe,再利用dataframe2csv保存成表格,具体操作如下:

def dic_into_csv(dic):
    csv_name = ["id", "code", "use_sta", "series_num", "cost","get_sta","discount","discount_num"]
    csv_data = zip(list(dic.keys()), [list(dic.values())[k][0] for k in range(len(dic))]
                   , [list(dic.values())[k][1] for k in range(len(dic))],
                   [list(dic.values())[k][2] for k in range(len(dic))],
                   [list(dic.values())[k][3] for k in range(len(dic))],
                   [list(dic.values())[k][4] for k in range(len(dic))],
                   [list(dic.values())[k][5] for k in range(len(dic))],
                   [list(dic.values())[k][6] for k in range(len(dic))])
    tickets_access = pd.DataFrame(columns=csv_name, data=csv_data)
    tickets_access.to_csv(path)

由此就得到了这样的数据表格
在这里插入图片描述

UI

针对这个题设,应该有一个出票系统用于出票派券,一个验证系统用于检验券码是否匹配,并记录消费详情。使用的是tkinter库做ui。

出票系统

在这里插入图片描述
ui部分代码不作过多展示,详情可以在页面最后前往开源界面获取资源。
其内核部分先判断是否需要指定折扣,若否则检查数据库并抽取第一个获取状态为0的折扣券;若是则还须检查票券的折扣是否对应。返回值是券号,密码以及折扣力度。

def get_tic(dic,discount_sta):
    if int(discount_sta) == 0: # 随机折扣出票
        for key in dic.keys():
       		 # 获取状态为0
            if dic[key][4] == 0:
                dic[key][4] = 1
                out = [key,dic[key][0],dic[key][5]]
                dic_into_csv(dic)
                return out
    else:
        for key in dic.keys():  # 指定折扣出票
            if dic[key][4] == 0 and dic[key][5] == int(discount_sta):
                dic[key][4] = 1
                out = [key,dic[key][0],dic[key][5]]
                dic_into_csv(dic)
                return out

验证系统

在这里插入图片描述
在验证系统中,面向的对象是管理员,在此界面中应含有前面提及的四项基本输入项,考虑到实际需求,还需一个刷新数据库的选项。在输入管理员密码后,可以按照设定来重置票券系统:
在这里插入图片描述
查验函数要求输入基本四项以及密码本字典以及一个str_var,该var用于在ui界面展示对应验证成功/失败的文字。
核心思想是先检查该券号的获取状态,然后验证券与密码是否匹配,然后检查券兑换状态,然后检查消费单号是否已被登记,前者都通过验证则进行记录,并在完成后将字典写入更新csv表格。

def check(quanhao,mima,danhao,jine,tickets_dic,var1):
    danhao_list = [tickets_dic[key][2] for key in tickets_dic.keys()]
    # 检查优惠券是否被获取
    if tickets_dic[quanhao][4] == 1:
        if mima == tickets_dic[quanhao][0]:
            # 检查优惠券是否已被使用
            if tickets_dic[quanhao][1] != 0:
                print("该优惠券已被使用!")
                var1.set("该优惠券已被使用!")
            # 消费单号是否已记录
            elif danhao in danhao_list:
                print("该消费单已被记录!")
                var1.set("该消费单已被记录!")
            else:
                tickets_dic[quanhao][1] = 1
                tickets_dic[quanhao][2] = danhao
                tickets_dic[quanhao][3] = jine
                temp_dis = float(0.1*float(jine)*tickets_dic[quanhao][5])
                tickets_dic[quanhao][6] = round(temp_dis,1)
                dic_into_csv(tickets_dic)
                print("验证成功!")
                var1.set("验证成功!优惠后金额为:"+str(tickets_dic[quanhao][6]))
        else:
            print("券号或密码不正确!")
            var1.set("券号或密码不正确!")
    else:
        var1.set("该优惠券尚未发出!")

在这里插入图片描述

总结

该系统可以根据需求创建n折优惠券,能够验证券码是否匹配并将消费数据记录下来。构建一个系统需要考虑到各方面的状态量,方便调用验证。本系统的ui设计细节没有过多展示,已经在github上开源,需要的朋友可以前去查看。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值