企业代码生成系统的 Python 实现
最编程
2024-05-06 20:17:41
...
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import os, tkinter, random, string, time, qrcode
from pystrich.ean13 import EAN13Encoder
import tkinter.messagebox
import tkinter.filedialog
from tkinter import *
from string import digits
root = tkinter.Tk() # tkinter模块为python的标准图形界面接口。本代码的目的是建立根窗口
# 初始化数据
number = "1234567890"
letter = "ABCDEFGHIGKLMNOPQRSTUVWXYZ1234567890"
allis = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+"
i = 0
randstr = []
fourth = []
fifth = []
randfir = ""
randsec = ""
randthr = ""
str_one = ""
strone = ""
strtwo = ""
nextcard = ""
userput = ""
nres_letter = ""
# 验证输入是否非法
def input_validation(insel):
if str.isdigit(insel):
# if insel == 0:
# print("\033[1;31;40m 输入非法,请重新输入!!!\033[0m")
# return 0
# else:
# return insel
insel = int(insel)
return insel
else:
print("\033[1;31;40m 输入非法,请重新输入!!!\033[0m")
return 0
# 判断保存防伪码的文件夹是否存在,不存在则建立
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":
print("\033[1;31;40m 输入为零,请重新输入!!\033[0m")
return "0"
else:
return instr # 将输入的数据传给函数返回值
else:
print("\033[1;31;40m 输入为零,请重新输入!!\033[0m")
return
if showorder == 2:# 验证方式2 ,要求字母格式,且是三个字母
if str.isalpha(instr):
if len(instr) != length:# 判断输入的是否为三个字母,如果不是,则要求重新输入,返回值为“0”
print("\033[1;31;40m 必须输入" + str(length) + "个字母,请重新输入!!\033[0m")
return "0"
else:# 如果输入是三个字母,返回输入的字母
return instr
else:# 如果输入不是字母
print("\033[1;31;40m 输入非法,请重新输入!!\033[0m")
return "0"
if showorder == 3: # 验证方式3 ,要求数字格式,且输入数字位数有要求
if str.isdigit(instr):
if len(instr) != length:
print("\033[1;31;40m 必须输入" + str(length) + "个数字,请重新输入!!\033[0m")
return "0"
else: # 输入数字满足要求,设置函数返回值为输入信息
return instr
else:
print("\033[1;31;40m 输入非法,请重新输入!!\033[0m")
return "0"
else:
print("\033[1;31;40m 输入为空,请重新输入!!\033[0m")
return "0"
# 编码输出显示函数,通过屏幕输出和文件输出两种方式输出生成的防伪码信息
# sstr参数为输出防伪码数据, sfile为输出的文件名称
# typeis设置输出完成后是否通过信息框提示, smsg为信息提示框的提示文字,
# datapath 保存防伪码的文件夹
def wfile(sstr, sfile, typeis, smsg, datapath):
mkdir(datapath) # 创建文件夹
datafile = datapath + "\\" + sfile# 设置保存防伪码的文件(包含路径)
file = open(datafile, 'w')# 打开保存防伪码的文件,如果文件不存在,则创建该文件
wrlist = sstr# 将防伪码信息赋值给wrlist
pdata = ""# 清空变量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
file.close()
print("\033[1;31m" + pdata + "\033[0m")
if typeis != "no":
# 显示“输出完成”的信息提示框。显示信息包含方位信息码的保存路径
tkinter.messagebox.showinfo("提示", smsg + str(len(randstr)) + "\n 防伪码文件存放位置:" + datafile)
root.withdraw() # 关闭辅助窗口
# 生成6位数字防伪码
def scode1(schoice):
incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\33[0m", 1, 0)
while int(incount) == 0:
incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\33[0m", 1, 0)
randstr.clear()
for j in range(int(incount)):
randfir = ''
for i in range(6):
randfir = randfir + random.choice(number)
randfir = randfir + "\n"
randstr.append(randfir)
wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成6位防伪码共计:", "codepath")
# 生成9位系列产品数字防伪编码
def scode2(schoice):
ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位):\33[0m", 3, 3)
while int(ordstart) == 0:
ordstart = inputbox("\033[1;32m 请输入系列产品的数字起始号(3位):\33[0m", 1, 0)
ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0)
while int(ordcount) < 1 or int(ordcount) > 9999:
ordcount = inputbox("\033[1;32m 请输入产品系列的数量:", 1, 0)
incount = inputbox("\033[1;32m 请输入您要生成的每个系列产品的防伪码的数量:", 1, 0)
while int(incount) == 0:
incount = inputbox("\033[1;32m 请输入您要生成防伪码的数量:\\33[0m", 1, 0)
randstr.clear()
for 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(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:
incount = inputbox("\033[1;32m 请输入您要生成的25位混合产品序列号数量:\33[0m", 1, 0)
randstr.clear()
for j in range(int(incount)):
strone = ''
for i in range(25):
strone = strone + random.choice(letter)
strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[
20:25] + "\n"
randstr.append(strtwo)
wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成25混合防伪序列码共计:", "codepath")
# 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称
def scode4(schoice):
intype = inputbox("\033[1;32m 请输入数据分析编号(3位字母):\33[0m", 2, 3)
while 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()
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)
letterone = ""
for i in range(9):
letterone = letterone + random.choice(number)
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)
wfile(randstr, typestr + "scode" + str(schoice) + ".txt", ismessage, "生成含数据分析功能的防伪码共计:", "codepath")
# 生成含数据分析功能防伪编码函数,参数schoice设置输出的文件名称
def scode5(schoice):
default_dir = r"codeauto.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)
codelist = codelist.split("\n")
print(codelist)
for item in codelist:
codea = item.split(",")[0]
codeb = item.split(",")[1]
ffcode(codeb, codea, "no", schoice)
# 后续补加生成防伪码函数,防伪码格式为带数据分析功能注册码
def scode6(schoice):
default_dir = r""
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)
res_letter = strset.translate(remove_digits)
nres_letter = list(res_letter)
strpro = nres_letter[0]
strtype = nres_letter[1]
strclass = nres_letter[2]
nres_letter = strpro.replace("'", '').replace('(', '').replace(')', '') + \
strtype.replace("'", '').replace('(', '').replace(')', '') + strclass.replace("'", '').replace('(',
'').replace(
')', '')
print("sssssssssss", nres_letter)
card = set(codelist)
tkinter.messagebox.showinfo("提示", "之前的防伪码共计:" + str(len(card)))
root.withdraw()
incount = inputbox("请输入补充防伪码生成的数量:", 1, 0)
for j in range(int(incount) * 2):
randfir = random.sample(number, 3)
randsec = sorted(randfir)
addcount = len(card)
strone = ""
for i in range(9):
strone = strone + random.choice(number)
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(randstr, nres_letter + "ncode" + str(schoice) + ".txt", nres_letter, "生成后补防伪码共计:", "codeadd")
# 条形码EAN13批量生成函数
def scode7(schoice):
mainid = inputbox("\033[1;32m 请输入EN13的国家代码(3位):\33[0m", 3, 3)
while int(mainid) < 1 or len(mainid) != 3:
mainid = inputbox("\033[1;32m 请输入EN13的国家代码(3位):\33[0m", 3, 3)
compid = inputbox("\033[1;32m 请输入企业代码(4位):\33[0m", 3, 4)
while int(compid) < 1 or len(compid) != 4:
compid = inputbox("\033[1;32m 请输入企业代码(4位):\33[0m", 3, 4)
incount = inputbox("\033[1;32m 请输入要生成的条形码数量:\33[0m", 1, 0)
上一篇: SNMP 企业 OID 和应用
推荐阅读
-
企业代码生成系统的 Python 实现
-
企业代码生成系统
-
个人信息随机生成的 Python 实现
-
开发包含 100 多行 python 代码的 Java 代码生成器
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
云雨图的 python 数据分析(盒图 + 分布图 + 散点图) - 代码实现
-
客户关系管理系统(CRM)与巴特勒分销企业资源规划系统(ERP)的集成:无代码开发的互联解决方案
-
贪婪算法在 Python、JavaScript、Java、C++ 和 C# 中的多种实现及其在硬币变化、分数骑士、活动选择和使用哈夫曼编码的最小生成树问题中的应用实例
-
数字图像处理学习笔记 (XI) - 通过 Python 代码实现图像增强的线性变换、对数变换、幂律变换、分段线性变换、灰度分层、直方图均衡化、平滑滤波器、锐化滤波器
-
Linux 异步 epoll 代码的 Python 实现