企业编码生成程序Python毕业设计

(1)生成6位数字防伪编码。当用户在主程序界面中输入数字“1”菜单项时,将进入“生成6位数字防伪编码 (213563型)”的功能执行任务。此时要求输入生成防伪码的数量,可以根据需要输入生成防伪码的数量。按下<Enter>键,开始批量生成防伪码,生成后系统将提示用户生成了多少个注册码和生成文件的位置信息等。单击“确定”按钮,关闭提示信息。在屏幕上可以看到生成的防伪码信息。生成的文件在程序所在目录下的“codepath”文件夹下,名称为“scode1.txt”。

(2)生成9位系列产品数字防伪编码。在主程序界面中输入数字“2”菜单项时,将进入“生成9位系列产品数字防伪编码”的功能执行。在产品系列其实编码输入中输入235,在系列产品数量中输入5,在每个系列生成数量中输入10000按下<Enter>键,开始生成防伪码。

(3)生成25位混合产品序列号。在主程序界面中输入数字“3”菜单项时,将进入“生成25位混合产品序列码”的功能执行。在输入要生成的数量中输入30000,如图9所示,并且按下<Enter>键,将生成30000个25位防伪码。

(4)生成含数据分析功能的防伪编码。在主程序界面中输入数字“4”菜单项时,将进入“生成含数据分析功能的防伪编码”的功能执行。在输入要生成的带数据分析功能的验证码数量中输入300,并且按下<Enter>键;在输入数据分析编号(3位字母)中输入ABS,并按下<Enter>键,将生成30000的25位防伪码

(5)智能批量生成带数据分析功能的防伪码。当用户在功能选择界面中输入数字“5”时,进入智能批量生成带数据分析功能的防伪码功能选项,在弹出的对话框中,选择保存批量生成防伪码信息的文件(扩展名为.mri的文件,其中前面的3位字母是数据分析码,后面的数值是防伪码的个数

(6)后续补加生成防伪码。在功能选择界面中输入数字“6”时,将进入补充防伪码生成功能选项。首先在打开的对话框中选择已经生成的防伪码的文件(需要使用前4步中生成的防伪码文件)。系统将自动分析已经生成的防伪码数量,并给出提示对话框,要求用户输入补充防伪码的数量,根据要求的防伪码数量循环生成新防伪码,完成后将提醒防伪码已经完成,并提示新生成的防伪码文件的保存位置

(7)EAN-13条形码批量生成。在功能选择界面中输入数字“7”时,将进入EAN-13条形码批量生成功能选项。在请输入EN13的国家代码(3位)中输入692;在请输入EAN13的企业代码(4位)中输入1000;在请输入要生成的条形码数量中输入条形码的数量,这里输入2,并按下<Enter>键,将自动生成条形码。生成后的文件保存在项目根目录下的barcode目录中。

(8)二维码批量输出。在功能选择界面中输入数字“8”时,将进入二维码批量输出功能选项。在请输入要生成的12位数字二维码数量中输入二维码的数量,这里输入5,并按下<Enter>键,将自动生成二维码。生成后的文件保存在项目根目录下的barcode目录中

import os
import qrcode
import random
import time
import tkinter
from pystrich.ean13 import EAN13Encoder
import tkinter.filedialog
import tkinter.messagebox
from string import digitsroot = tkinter.Tk()  # tkinter模4
# 块为python的标准图形界面接口。本代码的目的是建立根窗口
# 初始化数据
number = "1234567890"
letter = "ABCDEFGHIJKLMNPQRSTUVWXYZ1234567890"
allis = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+"
i = 0randstr = []
fourth = []
fifth = []
randfir = ""
randsec = ""
randthr = ""
str_one = ""
strone = ""
strtwo = ""
nextcard = ""
userput = ""
nres_letter = ""# 创建文件夹函数
def mkdir(path):isexists = os.path.exists(path)  # 判断文件夹路径是否存在if not isexists:      # 如果文件夹路径不存在os.mkdir(path)     # 创建要创建的文件夹# 读取文件内容函数
def openfile(filename):f = open(filename)  # 打开指定文件fllist = f.read()   # 读取文件内容f.close()           # 关闭文件return fllist      # 返回读取的文件内容# 输入验证函数,showstr为input函数提供动态输入提示文字,showorder提供验证方式,length提供要求输入数据的长度
def inputbox(showstr,showorder,length):instr = input(showstr)  # 使用input函数要求用户输入信息,showstr为输入提示文字if len(instr) != 0:     # 输入数据的长度不为零# 根据输入数据的要求,分成三种验证方式验证,1:数字,不限位数;2:字母;3:数字且有位数要求if showorder == 1:  # 验证方式 ,数字格式,不限位数,大于零的整数if str.isdigit(instr):    # 验证是否为数字if instr == 0:        # 验证数字是否为0,如果是,要求重新输入,返回值为0print("\033[1;31;40m 输入为零,请重新输入!!\033[0m") # 要求重新输入,返回值为“0”return "0"   # 函数返回值为“0”,为什么返回值为“0”呢?读者思考一下else:  # 如果输入正确,返回输入的数据给返回值return instr   #将输入的数据传给函数返回值else:      # 如果输入不是数字,要求用户重新输入,函数返回值为“0”print("\033[1;31;40m输入非法,请重新输入!!\033[0m")  # 要求用户重新输入return "0"  # 函数返回值为“0”if showorder == 2:  # 验证方式2 ,要求字母格式,且是三个字母if str.isalpha(instr): # 判断输入是否为字母if len(instr) != length:   # 判断输入的是否为三个字母,如果不是,则要求重新输入,返回值为“0”print("\033[1;31;40m必须输入三个字母,请重新输入!!\033[0m")  # 要求重新输入return "0"  # 返回值为“0”else:  # 如果输入是三个字母,返回输入的字母return instr  # 将函数返回值设置为输入的字母else:  # 如果输入不是字母print("\033[1;31;40m输入非法,请重新输入!!\033[0m")   # 要求重新输入return "0"    # 返回值为“0”if showorder == 3:   # 验证方式3 ,要求数字格式,且输入数字位数有要求if str.isdigit(instr):  # 验证是否为数字if len(instr) != length:   # 验证输入数字是否为要求长度位数,如果不是3位数字,则要求重新输入print("\033[1;31;40m必须输入" + str(length) + "个数字,请重新输入!!\033[0m") # 要求重新输入return "0"  # 返回值为“0”else:           # 输入数字满足要求,设置函数返回值为输入信息return instr  #设置函数返回值为输入信息else:  # 如果输入不是数字print("\033[1;31;40m输入非法,请重新输入!!\033[0m")  # 提示输入非法,要求重新输入return "0"  # 函数返回值为“0”else:   # 如果没有输入任何内容,即输入为空print("\033[1;31;40m输入为空,请重新输入!!\033[0m")   # 提示输入为空,要求重新输入return "0"    # 函数返回值为“0”# 实现屏幕输出和文件输出编码信息函数,# sstr参数为输出防伪码数据, sfile为输出的文件名称
# typeis设置输出完成后是否通过信息框提示, smsg为信息提示框的提示文字,datapath 保存防伪码的文件夹
def wfile(sstr, sfile, typeis, smsg,datapath):mkdir(datapath)   #  调用该函数创建文件夹datafile = datapath + "\\" + sfile   # 设置保存防伪码的文件(包含路径)file = open(datafile, 'w')  # 打开保存防伪码的文件,如果文件不存在,则创建该文件wrlist = sstr   # 将防伪码信息赋值给wrlistpdata = ""      # 清空变量pdata,pdata存储屏幕输出的防伪码信息wdata = ""      # 清空变量 wdata , wdata 存储保存到文本文件的防伪码信息for i in range(len(wrlist)):  # 按条循环读取防伪码数据wdata = str(wrlist[i].replace('[', '')).replace(']', '')   # 去掉字符的中括号wdata = wdata.replace(''''','').replace(''''', '')  # 去掉字符的引号file.write(str(wdata))    # 写入保存防伪码的文件pdata = pdata + wdata     # 将单条防伪码存储到pdata 变量file.close()   # 关闭文件print("\033[1;31m" + pdata + "\033[0m")   # 屏幕输出生成的防伪码信息if typeis != "no":    # 是否显示“输出完成”的信息提示框。如果typeis的值为“no”,不现显示# 显示“输出完成”的信息提示框。显示信息包含方位信息码的保存路径tkinter.messagebox.showinfo("提示", smsg + str(len(randstr)) + "\n 防伪码文件存放位置:" + datafile)root.withdraw()   # 关闭辅助窗口# 实现屏幕输出和文件输出编码信息,参数schoice设置输出的文件名称def scode1( schoice):# 调用inputbox函数对输入数据进行非空、输入合法性判断incount = inputbox("\033[1;32m     请输入您要生成验证码的数量:\33[0m", 1, 0)while int(incount) == 0:  # 如果输入为字母或数字0,则要求重新输入incount = inputbox("\033[1;32m     请输入您要生成验证码的数量:\33[0m", 1, 0)randstr.clear()       # 清空保存批量注册码信息的变量randstrfor j in range(int(incount)):   # 根据输入的验证码数量循环批量生成注册码randfir = ''       # 设置存储单条注册码的变量为空for i in range(6):  # 循环生成单条注册码randfir = randfir + random.choice(number)  # 产生数字随机因子 randfir = randfir + "\n"   # 在单条注册码后面添加转义换行字符“\n”,使验证码单条列显示 randstr.append(randfir)    # 将单条注册码添加到保存批量验证码的变量randstr #调用函数wfile(),实现生成的防伪码屏幕输出和文件输出wfile(randstr,"scode" + str(schoice) + ".txt", "", "已生成6位防伪码共计:","codepath")# 生成9位系列产品数字防伪编码函数,参数schoice设置输出的文件名称
def scode2(schoice):ordstart = inputbox("\033[1;32m     请输入系列产品的数字起始号(3位):\33[0m", 3, 3)while int(ordstart) == 0: # 如果输入非法(符号、字母或者数字0都认为是非法输入),重新输入ordstart = inputbox("\033[1;32m     请输入系列产品的数字起始号(3位):\33[0m", 3, 3)ordcount = inputbox("\033[1;32m     请输入产品系列的数量:", 1, 0)# 如果输入的产品系列数量小于1或者大于9999,,则要求重新输入while int(ordcount) < 1 or int(ordcount) > 9999:ordcount = inputbox("\033[1;32m     请输入产品系列的数量:", 1, 0)incount = inputbox("\033[1;32m     请输入要生成的每个系列产品的防伪码数量:\33[0m", 1, 0)while int(incount) == 0:  # 如果输入为字母或数字0,则要求重新输入incount = inputbox("\033[1;32m     请输入您要生成验证码的数量:\33[0m", 1, 0)randstr.clear()  # 清空保存批量注册码信息的变量randstrfor m in range(int(ordcount)):  # 分类产品编号for j in range(int(incount)):  # 产品防伪码编号randfir = ''for i in range(6):  # 生成一个不包含类别的产品防伪码randfir = randfir + random.choice(number)  # 每次生成一个随机因子randstr.append(str(int(ordstart) + m) + randfir + "\n") # 将生成的单条防伪码添加到防伪码列表#调用函数wfile(),实现生成的防伪码屏幕输出和文件输出wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成9位系列产品防伪码共计:","codepath")# 生成25位混合产品序列号函数,参数schoice设置输出的文件名称
def scode3(schoice):# 输入要生成的防伪码数量incount = inputbox("\033[1;32m     请输入要生成的25位混合产品序列号数量:\33[0m", 1, 0)while int(incount) == 0: # 如果输入非法(符号、字母或者数字0都认为是非法输入),重新输入incount = inputbox("\033[1;32m     请输入要生成的25位混合产品序列号数量:\33[0m", 1, 0)randstr.clear()  # 清空保存批量注册码信息的变量randstrfor j in range(int(incount)):  # 按输入数量生成防伪码strone = ''     # 保存生成的单条防伪码,不带横线“-”,循环时清空for i in range(25):strone = strone + random.choice(letter)   #每次产生一个随机因子,也就是每次产生单条防伪码的一位# 将生成的防伪码每隔5位添加横线“-”strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[20:25] + "\n"randstr.append(strtwo)   # 添加防伪码到防伪码列表#调用函数wfile(),实现生成的防伪码屏幕输出和文件输出wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成25混合防伪序列码共计:","codepath")# 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称
def scode4(schoice):intype = inputbox("\033[1;32m     请输入数据分析编号(3位字母):\33[0m", 2, 3)# 验证输入是否是三个字母,所以要判断输入是否是字母和输入长度是否为3while not str.isalpha(intype) or len(intype) != 3:intype = inputbox("\033[1;32m     请输入数据分析编号(3位字母):\33[0m", 2, 3)incount = inputbox("\033[1;32m     请输入要生成的带数据分析功能的验证码数量:\33[0m", 1, 0)  ## 验证输入是否是大于零的整数,判断输入转换为整数值时是否大于零while int(incount) == 0:    # 如果转换为整数时为零,则要求重新输入incount = inputbox("\033[1;32m     请输入要生成的带数据分析功能的验证码数量:\33[0m", 1, 0)  #ffcode(incount,intype,"",schoice)   # 调用 ffcode函数生成注册信息# 生成含数据分析功能防伪编码函数,参数scount为要生成的防伪码数量,typestr为数据分析字符
# 参数ismessage在输出完成时是否显示提示信息,为“no”不显示,为其他值显示;参数schoice设置输出的文件名称
def ffcode(scount, typestr,ismessage, schoice):randstr.clear()  # 清空保存批量注册码信息的变量randstr# 按数量生成含数据分析功能注册码for j in range(int(scount)):strpro = typestr[0].upper()    # 取得三个字母中的第一个字母,并转为大写,区域分析码strtype = typestr[1].upper()   # 取得三个字母中的第二个字母,并转为大写,颜色分析码strclass = typestr[2].upper()  # 取得三个字母中的第三个字母,并转为大写,版本分析码randfir = random.sample(number, 3)  # 随机抽取防伪码中的三个位置,不分先后randsec = sorted(randfir)  # 对抽取的位置进行排序并存储给randsec变量,以便按顺序排列三个字母的位置letterone = ""    # 清空存储单条防伪码的变量letteronefor i in range(9):  # 生成9位的数字防伪码letterone = letterone + random.choice(number)# 将三个字母按randsec变量中存储的位置值添加到数字防伪码中,并放到sim变量中sim = str(letterone[0:int(randsec[0])]) + strpro + str(letterone[int(randsec[0]):int(randsec[1])]) + strtype + str(letterone[int(randsec[1]):int(randsec[2])]) + strclass + str(letterone[int(randsec[2]):9]) + "\n"randstr.append(sim)   # 将组合生成的新防伪码添加到randstr变量# 调用wfile()函数,实现生成的防伪码屏幕输出和文件输出wfile(randstr, typestr + "scode" + str(schoice) + ".txt", ismessage, "生成含数据分析防伪码共计:","codepath")# 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称
def scode5(schoice):default_dir = r"mrsoft.mri"    # 设置默认打开的文件名称# 打开文件选择对话框,指定打开的文件名称为"mrsoft.mri" ,扩展名为“mri”,可以使用记事本打开和编辑file_path = tkinter.filedialog.askopenfilename(filetypes=[("Text file","*.mri")],title=u"请选择自动防伪码智能批处理文件:",initialdir=(os.path.expanduser(default_dir)))codelist = openfile(file_path)   # 读取从文件选择对话框选中的文件print("前:",codelist)codelist = codelist.split("\n")  # 把读取的信息内容添加回车,以便列输出显示print("后:",codelist)for item in codelist:           # 按读取的信息循环生成防伪码codea = item.split(",")[0]   # 每一行信息中用 ","分割,","前面的信息存储防伪码标准信息codeb = item.split(",")[1]   # 每一行信息中用 ","分割,","后面的信息存储防伪码生成的数量ffcode(codeb, codea,"no" ,schoice)  # 调用ffcode函数批量生成同一标识信息的防伪码#  后续补加生成防伪码函数,防伪码格式为带数据分析功能注册码
def scode6(schoice):default_dir = r"c:\ABDscode5.txt"    # 设置默认打开的文件名称# 按默认的文件名称打开文件选择对话框,用于打开已经存在的防伪码文件file_path = tkinter.filedialog.askopenfilename(title=u"请选择已经生成的防伪码文件",initialdir=(os.path.expanduser(default_dir)))codelist = openfile(file_path)      # 读取从文件选择对话框选中的文件codelist = codelist.split("\n")     #  把读取的信息内容添加回车,以便列输出显示codelist.remove("")                 # 删除列表中的空行strset = codelist[0]                # 读取一行数据,以便获取原验证码的字母标志信息remove_digits = strset.maketrans("", "", digits)  # 用maketrans方法创建删除数字的字符映射转换表res_letter = strset.translate(remove_digits)  # 根据字符映射转换表删除该条防伪码中的数字,获取字母标识信息nres_letter = list(res_letter)   # 把信息用列表变量nres_letter存储strpro = nres_letter[0]    # 从列表变量中取得第一个字母,即区域分析码strtype = nres_letter[1]   # 从列表变量中取得第二个字母,即色彩分析码strclass = nres_letter[2]   # 从列表变量中取得第三个字母,即版次分析码# 去除信息中的括号和引号nres_letter = strpro.replace(''''','').replace(''''', '') + strtype.replace(''''','').replace(''''', '') + strclass.replace(''''','').replace(''''', '')print("sssssssssss",nres_letter)card = set(codelist)   # 将原有防伪码放到集合变量card中# 利用tkinter的messagebox提示用户之前生成的防伪码数量tkinter.messagebox.showinfo("提示", "之前的防伪码共计:" + str(len(card)))root.withdraw() # 关闭提示信息框incount = inputbox("请输入补充验证码生成的数量:", 1, 0)  # 让用户输入新补充生成的防伪码数量# 最大值按输入生成数量的2倍数量生成新防伪码,防止新生成防伪码与原有防伪码重复造成新生成的防伪码数量不够,for j in range(int(incount) * 2):randfir = random.sample(number, 3)   # 随机产生3位不重复的数字randsec = sorted(randfir)            #对产生的数字排序addcount = len(card)                  # 记录集合中防伪码的总数量strone = ""                           # 清空存储单条防伪码的变量stronefor i in range(9):                    # 生成9位的数字防伪码strone = strone + random.choice(number)# 将三个字母按randsec变量中存储的位置值添加到数字防伪码中,并放到sim变量中sim = str(strone[0:int(randsec[0])]) + strpro + str(strone[int(randsec[0]):int(randsec[1])]) + strtype + str(strone[int(randsec[1]):int(randsec[2])]) + strclass + str(strone[int(randsec[2]):9]) + "\n"card.add(sim)  # 添加新生成的防伪码到集合# 如果添加到集合,证明生成的防伪码与原有的防伪码没有产生重复if len(card) > addcount:randstr.append(sim)   # 添加新生成的防伪码到新防伪码列表addcount = len(card)  # 记录最添加新生成防伪码集合的防伪码数量if len(randstr) >= int(incount):   # 如果新防伪码列表中的防伪码数量达到输入的防伪码数量print(len(randstr))            # 输出已生成防伪码的数量break                          # 退出循环# 调用函数wfile()函数,实现生成的防伪码屏幕输出和文件输出wfile(randstr, nres_letter + "ncode" + str(choice) + ".txt", nres_letter, "生成后补防伪码共计:","codeadd")# tkinter.messagebox.showinfo("提示", "已生成补充防伪码共:" + str(len(randstr)))    # 提示# root.withdraw()#  条形码EAN13批量生成函数
def scode7(schoice):mainid = inputbox("\033[1;32m     请输入EN13的国家代码(3位) :\33[0m", 3, 3)  # 输入3位国家代码# while int(mainid) < 1 or len(mainid) != 3:   # 验证输入是否为3位数字(转为整数后小于1和长度不等于3,重新输入)#     mainid = inputbox("\033[1;32m     请输入EAN13的国家代码(3位)::\33[0m", 1, 0)compid = inputbox("\033[1;32m     请输入EAN13的企业代码(4位):\33[0m", 3, 4)  # 输入4位企业代码# while int(compid) < 1 or len(compid) != 4:   # 验证输入是否为4位数字#     compid = inputbox("\033[1;32m     请输入EAN13的企业代码(4位):\33[0m", 1, 0)incount = inputbox("\033[1;32m     请输入要生成的条形码数量:\33[0m", 1, 0)   # 输入要生成的条形码数量while int(incount) == 0:   # 输入信息转为整数后等于0,重新输入incount = inputbox("\033[1;32m     请输入要生成的条形码数量:\33[0m", 1, 0)mkdir("barcode")  # 判断保存条形码的文件夹是否存在,不存在,则创建该文件夹for j in range(int(incount)):   # 批量生成条形码strone = ''  # 清空存储单条条形码的变量for i in range(5):  # 生成条形码的6位(除国家代码、企业代码和校验位之外的6位)数字strone = strone + str(random.choice(number))barcode=mainid +compid +strone   # 把国家代码、企业代码和新生成的随机码进行组合# 计算条形码的校验位evensum = int(barcode[1])  + int(barcode[3])  + int(barcode[5]) + int(barcode[7])  + int(barcode[9])  +int(barcode[11]) # 偶数位oddsum =int( barcode[0])+int(barcode[2])+int(barcode[4])+int(barcode[6])+int(barcode[8]) +int(barcode[10])# checkbit=int(10-(evensum *3 + oddsum)%10)checkbit = int((10 - (evensum * 3 + oddsum) %10)% 10)barcode=barcode+str(checkbit)  # 组成完整的EAN13条形码的13位数字print (barcode)encoder = EAN13Encoder(barcode)  # 调用EAN13Encoder生成条形码encoder.save("barcode\\" + barcode  + ".png")  # 保存条形码信息图片到文件# 本函数生成固定的12位二维码,读者可以根据实际需要修改成按输入位数进行生成的函数
def scode8(schoice):# 输入要生成的二维码数量incount = inputbox("\033[1;32m     请输入要生成的12位数字二维码数量:\33[0m", 1, 0)while int(incount) == 0:  # 如果输入不是大于0的数字,重新输入incount = inputbox("\033[1;32m     请输入要生成的12位数字二维码数量:\33[0m", 1, 0)mkdir("qrcode")     # 判断保存二维码的文件夹是否存在,不存在,则创建该文件夹for j in range(int(incount)):    # 批量生成二维码strone = ''   # 清空存储单条二维码的变量for i in range(12):  # 生成单条二维码数字strone = strone + str(random.choice(number))encoder =qrcode.make(strone)  # 生成二维码encoder.save("qrcode\\" + strone  + ".png") # 保存二维码图片到文件#抽奖函数
def scode9(schoice):default_dir = r"lottery.ini"    # 设置默认打开文件为开发路径下的"lottery.ini"# 选择包含用户抽奖信息票号的文件,扩展名为“*.ini”file_path = tkinter.filedialog.askopenfilename(filetypes=[("Ini file","*.ini")],title=u"请选择包含抽奖号码的抽奖文件:",initialdir=(os.path.expanduser(default_dir)))codelist = openfile(file_path)  # 调用 openfile()函数读取刚打开的抽奖文件codelist = codelist.split("\n")   # 通过回行转义符把抽奖信息分割成抽奖数列incount = inputbox("\033[1;32m     请输入要生成的中奖数量:\33[0m", 1, 0)  # 要求用户输入中(抽)奖数量while int(incount) == 0  or len(codelist)< int(incount):   # 如果输入中(抽)奖数量等于0或超过抽奖数组数量,重新输入incount = inputbox("\033[1;32m     请输入要生成的抽奖数量:\33[0m", 1, 0)strone = random.sample(codelist,int(incount))  # 根据输入的中奖数量进行抽奖print("\033[1;35m     抽奖信息名单发布:   \33[0m")for i in range(int(incount)):  # 循环将抽奖数列的引号和中括号去掉wdata = str(strone[i].replace('[', '')).replace(']', '') # 将抽奖数列的中括号去掉wdata = wdata.replace(''''','').replace(''''', '')  # 将抽奖数列的引号去掉print("\033[1;32m         " +  wdata  + "\33[0m")      # 输出中奖信息# 输入数字验证,判断输入是否在0-9之间的整数
def input_validation(insel):if str.isdigit(insel):insel = int(insel)# if insel == 0:#     # print("\033[1;31;40m    输入非法,请重新输入!!\033[0m")#     return 0# else:#     return inselreturn inselelse:print("\033[1;31;40m       输入非法,请重新输入!!\033[0m")return 0# 企业编码管理系统主菜单
def mainmenu():# os.system("clear")print("""\033[1;35m****************************************************************企业编码生成系统****************************************************************1.生成6位数字防伪编码 (213563型)2.生成9位系列产品数字防伪编码(879-335439型)3.生成25位混合产品序列号(B2R12-N7TE8-9IET2-FE35O-DW2K4型)4.生成含数据分析功能的防伪编码(5A61M0583D2)5.智能批量生成带数据分析功能的防伪码6.后续补加生成防伪码(5A61M0583D2)7.EAN-13条形码批量生成8.二维码批量输出          9.企业粉丝防伪码抽奖0.退出系统================================================================说明:通过数字键选择菜单================================================================\033[0m""")def codeprint(cstr, cint):str1 = cstr[0]str2 = cstr[1]str3 = cstr[2]for i in range(int(cint)):strbook = str1 + str2 + random.choice(letter) + random.choice(letter) + random.choice(letter) + str2 + str3print(strbook)# 通过循环控制用户对程序功能的选择
while i < 9:# 调入程序主界面菜单mainmenu()# 键盘输入需要操作的选项choice = input("\033[1;32m     请输入您要操作的菜单选项:\33[0m")if len(choice) != 0:  # 输入如果不为空choice = input_validation(choice)  # 验证输入是否为数字if choice == 1:scode1( str(choice))      # 如果输入大于零的整数,调用scode1()函数生成注册码# 选择菜单2,调用scode2()函数生成9位系列产品数字防伪编码if choice == 2:scode2(choice)# 选择菜单3,调用scode3()函数生成25位混合产品序列号if choice == 3:scode3(choice)# 选择菜单4,调用scode4()函数生成含数据分析功能的防伪编码if choice == 4:scode4(choice)# 选择菜单5,调用scode5()函数智能批量生成带数据分析功能的防伪码if choice == 5:scode5(choice)# 选择菜单6,调用scode6()函数后续补加生成防伪码if choice == 6:scode6(choice)# 选择菜单7,调用scode7()函数批量生成条形码if choice == 7:scode7( choice)# 选择菜单8,调用scode8()函数批量生成二维码if choice == 8:scode8( choice)# 选择菜单9,调用scode9()函数生成企业粉丝抽奖程序if choice == 9:scode9( choice)# 选择菜单0,退出系统if choice == 0:i = 0print("正在退出系统!!")breakelse:print("\033[1;31;40m    输入非法,请重新输入!!\033[0m")time.sleep(2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/171041.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

范围查询 range级别 继续优化思路

问题&#xff1a; 这几天工作遇到了一个问题。千万级别的表&#xff0c;每秒钟产生很多数据&#xff0c;select count(id) from table where flag 1 and create_time < 2023.11.07;分区表&#xff0c;range级别&#xff0c;已经是走create_time列上的索引&#xff0c;flag…

springboot宠物店管理系统-计算机毕设 附源码 32041

SpringBoot宠物店管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;宠物行业当然也不例外。宠物店管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理…

python pdf转txt文本、pdf转json

文章目录 一、前言二、实现方法1. 目录结构2. 代码 一、前言 此方法只能转文本格式的pdf&#xff0c;如果是图片格式的pdf需要用到ocr包&#xff0c;以后如果有这方面需求再加这个方法 二、实现方法 1. 目录结构 2. 代码 pdf2txt.py 代码如下 #!/usr/bin/env python # -*- …

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…

C语言从入门到精通之【表达式和语句】

1 表达式 表达式由运算符和运算对象组成&#xff0c;最简单的表达式一个单独的运算对象。每个表达式都有一个值&#xff0c;并且是根据运算符优先级规定的顺序来执行&#xff0c;以下是一些表达式&#xff1a; 4 -6 421 a*(b c/d)/20 q 5*2 x q % 3 #q > 3 2 语句 语句…

yolov5从英伟达平台移植到华为昇腾开发板上的思路

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近需要将yolov5代码从英伟达平台移植到华为昇腾开发板上。搜了一些代码和资料&#xff0c;大致明白了二者的差别。 1.二者使用的模型文件不一样 yolov…

【unity实战】实现一个放置3d物品建造装修系统(附项目源码)

文章目录 最终效果前言绘制开始场景素材开始放置旋转物体扩展优化1. 绘制地图边界&#xff0c;确保放置物品在指定区域内工作2. 让模型所占面积大小更加准确3. 隐藏白色瓦片指示区域 最终效果其他源码参考完结 最终效果 前言 其实3d物品建造装修系统之前就已经做过了&#xff…

2024年天津天狮学院食品质量与安全专业《普通化学》考试大纲

2024年天津天狮学院食品质量与安全专业高职升本入学考试《普通化学》考试大纲 一、考试性质 《普通化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…

[计算机网络]运输层概述

虽然我自己也不知道写在前面和前言有什么区别..... 这个系列其实是针对<深入浅出计算机网络>的简单总结,加入了一点个人的理解和浅薄见识,如果您有一些更好的意见和见解,欢迎随时协助我改正,感激不尽啦. 最近心态平和了不少, 和过去也完全做了个割舍吧,既然痛苦和压力的…

记录华为云服务器(Linux 可视化 宝塔面板)-- 安全组篇

文章目录 前言安全组说明安全组的特性安全组的应用场景 进入安全组添加基本规则添加自定义规则如有启发&#xff0c;可点赞收藏哟~ 前言 和windows防火墙类似&#xff0c;安全组是一种虚拟防火墙&#xff0c;具备状态检测和数据包过滤功能&#xff0c;可以对进出云服务器的流量…

typeof,instanceof

1.typeof typeof运算符返回的结果是以小写的字符串表示的变量的类型 2.instanceof instanceof运算符用于判断右边构造函数的原型对象是否在左边对象的原型链上 let arr[]let obj{}let datenew Dateconsole.log(arr instanceof Array)console.log(arr instanceof Object)conso…

Maven 简单配置阿里云镜像

配置步骤&#xff1a; 1、找到 maven 的安装目录&#xff0c;修改settings.xml 2、在文件中找到<mirrors>标签&#xff0c;然后再标签中添加阿里云配置即可 <mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共…

巧妙之中见真章:深入解析常用的创建型设计模式

设计模式之创建型设计模式详解 一、设计模式是什么&#xff1f;二、模板方法2.1、代码结构2.2、符合的设计原则2.3、如何扩展代码2.4、小结 三、观察者模式3.1、代码结构3.2、符合的设计原则3.3、如何扩展代码3.4、小结 四、策略模式4.1、代码结构4.2、符合的设计原则4.3、如何…

Pinctrl子系统和GPIO子系统

Pinctrl子系统&#xff1a; 借助Princtr子系统来设置一个Pin的复用和电气属性&#xff1b; pinctrl子系统主要做的工作是&#xff1a;1. 获取设备树中的PIN信息&#xff1b;2.根据获取到的pin信息来设置的Pin的复用功能&#xff1b;3.根据获取到的pin信息去设置pin的电气特性…

【机器学习 | 聚类】关于聚类最全评价方法大全,确定不收藏?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

访谈 破风之人毛京波,选择难而正确的路

“无论是在燃油时代还是电动时代&#xff0c;我们所做的一切&#xff0c;只为回归纯粹的驾驶乐趣。”履新路特斯中国总裁整整一年的毛京波&#xff0c;从不放过任何一个展示路特斯品牌驾驭精神的机会。 11月17日&#xff0c;广州车展开幕首日&#xff0c;位于5.2馆的路特斯“冠…

【理解ARM架构】 散列文件 | 重定位

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《理解ARM架构》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3d3;引出重定位&#x1f3d3;散列文件&#x1f3d3;可读可写数据段重定位&#…

OSG编程指南<十一>:OSG几何体操作及三维地形创建

1、简化几何体 在 OSG 中&#xff0c;场景都是由基本的绘图基元构成的&#xff0c;基本的绘图基元构成简单的几何体&#xff0c;简单的几何体构成复杂的几何体&#xff0c;复杂的几何体最终构造成复杂的场景。当多个几何体组合时&#xff0c;可能 存在多种降低场景渲染效率的原…

JAVA小游戏“简易版王者荣耀”

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt;import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; im…