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上开源,需要的朋友可以前去查看。