企業編碼管理系統

  • 文件結構

 

  • 詳細代碼,pollcode.py
  1 import os
  2 import qrcode
  3 import random
  4 import time
  5 import tkinter
  6 from pystrich.ean13 import EAN13Encoder
  7 import tkinter.filedialog
  8 import tkinter.messagebox
  9 from string import digits
 10 
 11 root = tkinter.Tk()  # tkinter模4
 12 # 塊爲python的標準圖形界面接口。本代碼的目的是創建根窗口
 13 # 初始化數據
 14 number = "1234567890"
 15 letter = "ABCDEFGHIJKLMNPQRSTUVWXYZ1234567890"
 16 allis = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()_+"
 17 i = 0
 18 
 19 randstr = []
 20 fourth = []
 21 fifth = []
 22 randfir = ""
 23 randsec = ""
 24 randthr = ""
 25 str_one = ""
 26 strone = ""
 27 strtwo = ""
 28 nextcard = ""
 29 userput = ""
 30 nres_letter = ""
 31 
 32 
 33 # 建立文件夾函數
 34 def mkdir(path):
 35     isexists = os.path.exists(path)  # 判斷文件夾路徑是否存在
 36     if not isexists:      # 若是文件夾路徑不存在
 37         os.mkdir(path)     # 建立要建立的文件夾
 38 
 39 
 40 # 讀取文件內容函數
 41 def openfile(filename):
 42     f = open(filename)  # 打開指定文件
 43     fllist = f.read()   # 讀取文件內容
 44     f.close()           # 關閉文件
 45     return fllist      # 返回讀取的文件內容
 46 
 47 
 48 # 輸入驗證函數,showstr爲input函數提供動態輸入提示文字,showorder提供驗證方式,length提供要求輸入數據的長度
 49 def inputbox(showstr,showorder,length):
 50     instr = input(showstr)  # 使用input函數要求用戶輸入信息,showstr爲輸入提示文字
 51     if len(instr) != 0:     # 輸入數據的長度不爲零
 52         # 根據輸入數據的要求,分紅三種驗證方式驗證,1:數字,不限位數;2:字母;3:數字且有位數要求
 53         if showorder == 1:  # 驗證方式 ,數字格式,不限位數,大於零的整數
 54             if str.isdigit(instr):    # 驗證是否爲數字
 55                 if instr == 0:        # 驗證數字是否爲0,若是是,要求從新輸入,返回值爲0
 56                     print("\033[1;31;40m 輸入爲零,請從新輸入!!\033[0m") # 要求從新輸入,返回值爲「0」
 57                     return "0"   # 函數返回值爲「0」,爲何返回值爲「0」呢?讀者思考一下
 58                 else:  # 若是輸入正確,返回輸入的數據給返回值
 59                     return instr   #將輸入的數據傳給函數返回值
 60             else:      # 若是輸入不是數字,要求用戶從新輸入,函數返回值爲「0」
 61                 print("\033[1;31;40m輸入非法,請從新輸入!!\033[0m")  # 要求用戶從新輸入
 62                 return "0"  # 函數返回值爲「0」
 63         if showorder == 2:  # 驗證方式2 ,要求字母格式,且是三個字母
 64             if str.isalpha(instr): # 判斷輸入是否爲字母
 65                 if len(instr) != length:   # 判斷輸入的是否爲三個字母,若是不是,則要求從新輸入,返回值爲「0」
 66                     print("\033[1;31;40m必須輸入三個字母,請從新輸入!!\033[0m")  # 要求從新輸入
 67                     return "0"  # 返回值爲「0」
 68                 else:  # 若是輸入是三個字母,返回輸入的字母
 69                     return instr  # 將函數返回值設置爲輸入的字母
 70             else:  # 若是輸入不是字母
 71                 print("\033[1;31;40m輸入非法,請從新輸入!!\033[0m")   # 要求從新輸入
 72                 return "0"    # 返回值爲「0」
 73         if showorder == 3:   # 驗證方式3 ,要求數字格式,且輸入數字位數有要求
 74             if str.isdigit(instr):  # 驗證是否爲數字
 75                 if len(instr) != length:   # 驗證輸入數字是否爲要求長度位數,若是不是3位數字,則要求從新輸入
 76                     print("\033[1;31;40m必須輸入" + str(length) + "個數字,請從新輸入!!\033[0m") # 要求從新輸入
 77                     return "0"  # 返回值爲「0」
 78                 else:           # 輸入數字知足要求,設置函數返回值爲輸入信息
 79                     return instr  #設置函數返回值爲輸入信息
 80             else:  # 若是輸入不是數字
 81                 print("\033[1;31;40m輸入非法,請從新輸入!!\033[0m")  # 提示輸入非法,要求從新輸入
 82                 return "0"  # 函數返回值爲「0」
 83     else:   # 若是沒有輸入任何內容,即輸入爲空
 84         print("\033[1;31;40m輸入爲空,請從新輸入!!\033[0m")   # 提示輸入爲空,要求從新輸入
 85         return "0"    # 函數返回值爲「0」
 86 
 87 
 88 # 實現屏幕輸出和文件輸出編碼信息函數,# sstr參數爲輸出防僞碼數據, sfile爲輸出的文件名稱
 89 # typeis設置輸出完成後是否經過信息框提示, smsg爲信息提示框的提示文字,datapath 保存防僞碼的文件夾
 90 def wfile(sstr, sfile, typeis, smsg,datapath):
 91     mkdir(datapath)   #  調用該函數建立文件夾
 92     datafile = datapath + "\\" + sfile   # 設置保存防僞碼的文件(包含路徑)
 93     file = open(datafile, 'w')  # 打開保存防僞碼的文件,若是文件不存在,則建立該文件
 94     wrlist = sstr   # 將防僞碼信息賦值給wrlist
 95     pdata = ""      # 清空變量pdata,pdata存儲屏幕輸出的防僞碼信息
 96     wdata = ""      # 清空變量 wdata , wdata 存儲保存到文本文件的防僞碼信息
 97     for i in range(len(wrlist)):  # 按條循環讀取防僞碼數據
 98         wdata = str(wrlist[i].replace('[', '')).replace(']', '')   # 去掉字符的中括號
 99         wdata = wdata.replace(''''','').replace(''''', '')  # 去掉字符的引號
100         file.write(str(wdata))    # 寫入保存防僞碼的文件
101         pdata = pdata + wdata     # 將單條防僞碼存儲到pdata 變量
102     file.close()   # 關閉文件
103     print("\033[1;31m" + pdata + "\033[0m")   # 屏幕輸出生成的防僞碼信息
104     if typeis != "no":    # 是否顯示「輸出完成」的信息提示框。若是typeis的值爲「no」,不現顯示
105         # 顯示「輸出完成」的信息提示框。顯示信息包含方位信息碼的保存路徑
106         tkinter.messagebox.showinfo("提示", smsg + str(len(randstr)) + "\n 防僞碼文件存放位置:" + datafile)
107         root.withdraw()   # 關閉輔助窗口
108  # 實現屏幕輸出和文件輸出編碼信息,參數schoice設置輸出的文件名稱
109 
110 
111 def scode1( schoice):
112     # 調用inputbox函數對輸入數據進行非空、輸入合法性判斷
113     incount = inputbox("\033[1;32m     請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
114     while int(incount) == 0:  # 若是輸入爲字母或數字0,則要求從新輸入
115         incount = inputbox("\033[1;32m     請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
116     randstr.clear()       # 清空保存批量註冊碼信息的變量randstr
117     for j in range(int(incount)):   # 根據輸入的驗證碼數量循環批量生成註冊碼
118         randfir = ''       # 設置存儲單條註冊碼的變量爲空
119         for i in range(6):  # 循環生成單條註冊碼
120             randfir = randfir + random.choice(number)  # 產生數字隨機因子 
121         randfir = randfir + "\n"   # 在單條註冊碼後面添加轉義換行字符「\n」,使驗證碼單條列顯示 
122         randstr.append(randfir)    # 將單條註冊碼添加到保存批量驗證碼的變量randstr 
123     #調用函數wfile(),實現生成的防僞碼屏幕輸出和文件輸出
124     wfile(randstr,"scode" + str(schoice) + ".txt", "", "已生成6位防僞碼共計:","codepath")
125 
126 
127 # 生成9位系列產品數字防僞編碼函數,參數schoice設置輸出的文件名稱
128 def scode2(schoice):
129     ordstart = inputbox("\033[1;32m     請輸入系列產品的數字起始號(3位):\33[0m", 3, 3)
130     while int(ordstart) == 0: # 若是輸入非法(符號、字母或者數字0都認爲是非法輸入),從新輸入
131         ordstart = inputbox("\033[1;32m     請輸入系列產品的數字起始號(3位):\33[0m", 3, 3)
132     ordcount = inputbox("\033[1;32m     請輸入產品系列的數量:", 1, 0)
133     # 若是輸入的產品系列數量小於1或者大於9999,,則要求從新輸入
134     while int(ordcount) < 1 or int(ordcount) > 9999:
135         ordcount = inputbox("\033[1;32m     請輸入產品系列的數量:", 1, 0)
136     incount = inputbox("\033[1;32m     請輸入要生成的每一個系列產品的防僞碼數量:\33[0m", 1, 0)
137     while int(incount) == 0:  # 若是輸入爲字母或數字0,則要求從新輸入
138         incount = inputbox("\033[1;32m     請輸入您要生成驗證碼的數量:\33[0m", 1, 0)
139     randstr.clear()  # 清空保存批量註冊碼信息的變量randstr
140     for m in range(int(ordcount)):  # 分類產品編號
141         for j in range(int(incount)):  # 產品防僞碼編號
142             randfir = ''
143             for i in range(6):  # 生成一個不包含類別的產品防僞碼
144                 randfir = randfir + random.choice(number)  # 每次生成一個隨機因子
145             randstr.append(str(int(ordstart) + m) + randfir + "\n") # 將生成的單條防僞碼添加到防僞碼列表
146     #調用函數wfile(),實現生成的防僞碼屏幕輸出和文件輸出
147     wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成9位系列產品防僞碼共計:","codepath")
148 
149 
150 # 生成25位混合產品序列號函數,參數schoice設置輸出的文件名稱
151 def scode3(schoice):
152     # 輸入要生成的防僞碼數量
153     incount = inputbox("\033[1;32m     請輸入要生成的25位混合產品序列號數量:\33[0m", 1, 0)
154     while int(incount) == 0: # 若是輸入非法(符號、字母或者數字0都認爲是非法輸入),從新輸入
155         incount = inputbox("\033[1;32m     請輸入要生成的25位混合產品序列號數量:\33[0m", 1, 0)
156     randstr.clear()  # 清空保存批量註冊碼信息的變量randstr
157     for j in range(int(incount)):  # 按輸入數量生成防僞碼
158         strone = ''     # 保存生成的單條防僞碼,不帶橫線「-」,循環時清空
159         for i in range(25):
160             strone = strone + random.choice(letter)   #每次產生一個隨機因子,也就是每次產生單條防僞碼的一位
161         # 將生成的防僞碼每隔5位添加橫線「-」
162         strtwo = strone[:5] + "-" + strone[5:10] + "-" + strone[10:15] + "-" + strone[15:20] + "-" + strone[20:25] + "\n"
163         randstr.append(strtwo)   # 添加防僞碼到防僞碼列表
164     #調用函數wfile(),實現生成的防僞碼屏幕輸出和文件輸出
165     wfile(randstr, "scode" + str(schoice) + ".txt", "", "已生成25混合防僞序列碼共計:","codepath")
166 
167 
168 # 生成含數據分析功能防僞編碼函數,參數schoice設置輸出的文件名稱
169 def scode4(schoice):
170     intype = inputbox("\033[1;32m     請輸入數據分析編號(3位字母):\33[0m", 2, 3)
171     # 驗證輸入是不是三個字母,因此要判斷輸入是不是字母和輸入長度是否爲3
172     while not str.isalpha(intype) or len(intype) != 3:
173         intype = inputbox("\033[1;32m     請輸入數據分析編號(3位字母):\33[0m", 2, 3)
174     incount = inputbox("\033[1;32m     請輸入要生成的帶數據分析功能的驗證碼數量:\33[0m", 1, 0)  #
175     # 驗證輸入是不是大於零的整數,判斷輸入轉換爲整數值時是否大於零
176     while int(incount) == 0:    # 若是轉換爲整數時爲零,則要求從新輸入
177         incount = inputbox("\033[1;32m     請輸入要生成的帶數據分析功能的驗證碼數量:\33[0m", 1, 0)  #
178     ffcode(incount,intype,"",schoice)   # 調用 ffcode函數生成註冊信息
179 
180 
181 # 生成含數據分析功能防僞編碼函數,參數scount爲要生成的防僞碼數量,typestr爲數據分析字符
182 # 參數ismessage在輸出完成時是否顯示提示信息,爲「no」不顯示,爲其餘值顯示;參數schoice設置輸出的文件名稱
183 def ffcode(scount, typestr,ismessage, schoice):
184     randstr.clear()  # 清空保存批量註冊碼信息的變量randstr
185     # 按數量生成含數據分析功能註冊碼
186     for j in range(int(scount)):
187         strpro = typestr[0].upper()    # 取得三個字母中的第一個字母,並轉爲大寫,區域分析碼
188         strtype = typestr[1].upper()   # 取得三個字母中的第二個字母,並轉爲大寫,顏色分析碼
189         strclass = typestr[2].upper()  # 取得三個字母中的第三個字母,並轉爲大寫,版本分析碼
190         randfir = random.sample(number, 3)  # 隨機抽取防僞碼中的三個位置,不分前後
191         randsec = sorted(randfir)  # 對抽取的位置進行排序並存儲給randsec變量,以便按順序排列三個字母的位置
192         letterone = ""    # 清空存儲單條防僞碼的變量letterone
193         for i in range(9):  # 生成9位的數字防僞碼
194             letterone = letterone + random.choice(number)
195         # 將三個字母按randsec變量中存儲的位置值添加到數字防僞碼中,並放到sim變量中
196         sim = str(letterone[0:int(randsec[0])]) + strpro + str(
197             letterone[int(randsec[0]):int(randsec[1])]) + strtype + str(
198             letterone[int(randsec[1]):int(randsec[2])]) + strclass + str(letterone[int(randsec[2]):9]) + "\n"
199         randstr.append(sim)   # 將組合生成的新防僞碼添加到randstr變量
200     # 調用wfile()函數,實現生成的防僞碼屏幕輸出和文件輸出
201     wfile(randstr, typestr + "scode" + str(schoice) + ".txt", ismessage, "生成含數據分析防僞碼共計:","codepath")
202 
203 
204 # 生成含數據分析功能防僞編碼函數,參數schoice設置輸出的文件名稱
205 def scode5(schoice):
206     default_dir = r"mrsoft.mri"    # 設置默認打開的文件名稱
207 
208     # 打開文件選擇對話框,指定打開的文件名稱爲"mrsoft.mri" ,擴展名爲「mri」,可使用記事本打開和編輯
209     file_path = tkinter.filedialog.askopenfilename(filetypes=[("Text file","*.mri")],title=u"請選擇自動防僞碼智能批處理文件:",
210                                                    initialdir=(os.path.expanduser(default_dir)))
211     codelist = openfile(file_path)   # 讀取從文件選擇對話框選中的文件
212     print("前:",codelist)
213     codelist = codelist.split("\n")  # 把讀取的信息內容添加回車,以便列輸出顯示
214     print("後:",codelist)
215     for item in codelist:           # 按讀取的信息循環生成防僞碼
216         codea = item.split(",")[0]   # 每一行信息中用 ","分割,","前面的信息存儲防僞碼標準信息
217         codeb = item.split(",")[1]   # 每一行信息中用 ","分割,","後面的信息存儲防僞碼生成的數量
218         ffcode(codeb, codea,"no" ,schoice)  # 調用ffcode函數批量生成同一標識信息的防僞碼
219 
220 
221 #  後續補加生成防僞碼函數,防僞碼格式爲帶數據分析功能註冊碼
222 def scode6(schoice):
223     default_dir = r"c:\ABDscode5.txt"    # 設置默認打開的文件名稱
224     # 按默認的文件名稱打開文件選擇對話框,用於打開已經存在的防僞碼文件
225     file_path = tkinter.filedialog.askopenfilename(title=u"請選擇已經生成的防僞碼文件",initialdir=(os.path.expanduser(default_dir)))
226     codelist = openfile(file_path)      # 讀取從文件選擇對話框選中的文件
227     codelist = codelist.split("\n")     #  把讀取的信息內容添加回車,以便列輸出顯示
228     codelist.remove("")                 # 刪除列表中的空行
229     strset = codelist[0]                # 讀取一行數據,以便獲取原驗證碼的字母標誌信息
230     remove_digits = strset.maketrans("", "", digits)  # 用maketrans方法建立刪除數字的字符映射轉換表
231     res_letter = strset.translate(remove_digits)  # 根據字符映射轉換表刪除該條防僞碼中的數字,獲取字母標識信息
232     nres_letter = list(res_letter)   # 把信息用列表變量nres_letter存儲
233     strpro = nres_letter[0]    # 從列表變量中取得第一個字母,即區域分析碼
234     strtype = nres_letter[1]   # 從列表變量中取得第二個字母,即色彩分析碼
235     strclass = nres_letter[2]   # 從列表變量中取得第三個字母,即版次分析碼
236     # 去除信息中的括號和引號
237     nres_letter = strpro.replace(''''','').replace(''''', '') + strtype.replace(
238         ''''','').replace(''''', '') + strclass.replace(''''','').replace(''''', '')
239     print("sssssssssss",nres_letter)
240     card = set(codelist)   # 將原有防僞碼放到集合變量card中
241     # 利用tkinter的messagebox提示用戶以前生成的防僞碼數量
242     tkinter.messagebox.showinfo("提示", "以前的防僞碼共計:" + str(len(card)))
243     root.withdraw() # 關閉提示信息框
244     incount = inputbox("請輸入補充驗證碼生成的數量:", 1, 0)  # 讓用戶輸入新補充生成的防僞碼數量
245     # 最大值按輸入生成數量的2倍數量生成新防僞碼,防止新生成防僞碼與原有防僞碼重複形成新生成的防僞碼數量不夠,
246     for j in range(int(incount) * 2):
247         randfir = random.sample(number, 3)   # 隨機產生3位不重複的數字
248         randsec = sorted(randfir)            #對產生的數字排序
249         addcount = len(card)                  # 記錄集合中防僞碼的總數量
250         strone = ""                           # 清空存儲單條防僞碼的變量strone
251         for i in range(9):                    # 生成9位的數字防僞碼
252             strone = strone + random.choice(number)
253          # 將三個字母按randsec變量中存儲的位置值添加到數字防僞碼中,並放到sim變量中
254         sim = str(strone[0:int(randsec[0])]) + strpro + str(
255             strone[int(randsec[0]):int(randsec[1])]) + strtype + str(
256             strone[int(randsec[1]):int(randsec[2])]) + strclass + str(strone[int(randsec[2]):9]) + "\n"
257         card.add(sim)  # 添加新生成的防僞碼到集合
258         # 若是添加到集合,證實生成的防僞碼與原有的防僞碼沒有產生重複
259         if len(card) > addcount:
260             randstr.append(sim)   # 添加新生成的防僞碼到新防僞碼列表
261             addcount = len(card)  # 記錄最添加新生成防僞碼集合的防僞碼數量
262         if len(randstr) >= int(incount):   # 若是新防僞碼列表中的防僞碼數量達到輸入的防僞碼數量
263             print(len(randstr))            # 輸出已生成防僞碼的數量
264             break                          # 退出循環
265     # 調用函數wfile()函數,實現生成的防僞碼屏幕輸出和文件輸出
266     wfile(randstr, nres_letter + "ncode" + str(choice) + ".txt", nres_letter, "生成後補防僞碼共計:","codeadd")
267     # tkinter.messagebox.showinfo("提示", "已生成補充防僞碼共:" + str(len(randstr)))    # 提示
268     # root.withdraw()
269 
270 
271 #  條形碼EAN13批量生成函數
272 def scode7(schoice):
273     mainid = inputbox("\033[1;32m     請輸入EN13的國家代碼(3位) :\33[0m", 3, 3)  # 輸入3位國家代碼
274     # while int(mainid) < 1 or len(mainid) != 3:   # 驗證輸入是否爲3位數字(轉爲整數後小於1和長度不等於3,從新輸入)
275     #     mainid = inputbox("\033[1;32m     請輸入EAN13的國家代碼(3位)::\33[0m", 1, 0)
276     compid = inputbox("\033[1;32m     請輸入EAN13的企業代碼(4位):\33[0m", 3, 4)  # 輸入4位企業代碼
277     # while int(compid) < 1 or len(compid) != 4:   # 驗證輸入是否爲4位數字
278     #     compid = inputbox("\033[1;32m     請輸入EAN13的企業代碼(4位):\33[0m", 1, 0)
279     incount = inputbox("\033[1;32m     請輸入要生成的條形碼數量:\33[0m", 1, 0)   # 輸入要生成的條形碼數量
280     while int(incount) == 0:   # 輸入信息轉爲整數後等於0,從新輸入
281         incount = inputbox("\033[1;32m     請輸入要生成的條形碼數量:\33[0m", 1, 0)
282     mkdir("barcode")  # 判斷保存條形碼的文件夾是否存在,不存在,則建立該文件夾
283     for j in range(int(incount)):   # 批量生成條形碼
284         strone = ''  # 清空存儲單條條形碼的變量
285         for i in range(5):  # 生成條形碼的6位(除國家代碼、企業代碼和校驗位以外的6位)數字
286             strone = strone + str(random.choice(number))
287         barcode=mainid +compid +strone   # 把國家代碼、企業代碼和新生成的隨機碼進行組合
288         # 計算條形碼的校驗位
289         evensum = int(barcode[1])  + int(barcode[3])  + int(barcode[5]) + int(barcode[7])  + int(barcode[9])  +int(barcode[11]) # 偶數位
290         oddsum =int( barcode[0])+int(barcode[2])+int(barcode[4])+int(barcode[6])+int(barcode[8]) +int(barcode[10])
291         # checkbit=int(10-(evensum *3 + oddsum)%10)
292         checkbit = int((10 - (evensum * 3 + oddsum) %10)% 10)
293         barcode=barcode+str(checkbit)  # 組成完整的EAN13條形碼的13位數字
294         print (barcode)
295         encoder = EAN13Encoder(barcode)  # 調用EAN13Encoder生成條形碼
296         encoder.save("barcode\\" + barcode  + ".png")  # 保存條形碼信息圖片到文件
297 
298 
299 # 本函數生成固定的12位二維碼,讀者能夠根據實際須要修改爲按輸入位數進行生成的函數
300 def scode8(schoice):
301      # 輸入要生成的二維碼數量
302      incount = inputbox("\033[1;32m     請輸入要生成的12位數字二維碼數量:\33[0m", 1, 0)
303      while int(incount) == 0:  # 若是輸入不是大於0的數字,從新輸入
304         incount = inputbox("\033[1;32m     請輸入要生成的12位數字二維碼數量:\33[0m", 1, 0)
305      mkdir("qrcode")     # 判斷保存二維碼的文件夾是否存在,不存在,則建立該文件夾
306      for j in range(int(incount)):    # 批量生成二維碼
307         strone = ''   # 清空存儲單條二維碼的變量
308         for i in range(12):  # 生成單條二維碼數字
309             strone = strone + str(random.choice(number))
310         encoder =qrcode.make(strone)  # 生成二維碼
311         encoder.save("qrcode\\" + strone  + ".png") # 保存二維碼圖片到文件
312 
313 
314 #抽獎函數
315 def scode9(schoice):
316    default_dir = r"lottery.ini"    # 設置默認打開文件爲開發路徑下的"lottery.ini"
317    # 選擇包含用戶抽獎信息票號的文件,擴展名爲「*.ini」
318    file_path = tkinter.filedialog.askopenfilename(filetypes=[("Ini file","*.ini")],title=u"請選擇包含抽獎號碼的抽獎文件:",initialdir=(os.path.expanduser(default_dir)))
319    codelist = openfile(file_path)  # 調用 openfile()函數讀取剛打開的抽獎文件
320    codelist = codelist.split("\n")   # 經過回行轉義符把抽獎信息分割成抽獎數列
321    incount = inputbox("\033[1;32m     請輸入要生成的中獎數量:\33[0m", 1, 0)  # 要求用戶輸入中(抽)獎數量
322    while int(incount) == 0  or len(codelist)< int(incount):   # 若是輸入中(抽)獎數量等於0或超過抽獎數組數量,從新輸入
323        incount = inputbox("\033[1;32m     請輸入要生成的抽獎數量:\33[0m", 1, 0)
324    strone = random.sample(codelist,int(incount))  # 根據輸入的中獎數量進行抽獎
325 
326    print("\033[1;35m     抽獎信息名單發佈:   \33[0m")
327    for i in range(int(incount)):  # 循環將抽獎數列的引號和中括號去掉
328        wdata = str(strone[i].replace('[', '')).replace(']', '') # 將抽獎數列的中括號去掉
329        wdata = wdata.replace(''''','').replace(''''', '')  # 將抽獎數列的引號去掉
330        print("\033[1;32m         " +  wdata  + "\33[0m")      # 輸出中獎信息
331 
332 
333 # 輸入數字驗證,判斷輸入是否在0-9之間的整數
334 def input_validation(insel):
335     if str.isdigit(insel):
336         insel = int(insel)
337         # if insel == 0:
338         #     # print("\033[1;31;40m    輸入非法,請從新輸入!!\033[0m")
339         #     return 0
340         # else:
341         #     return insel
342         return insel
343     else:
344         print("\033[1;31;40m       輸入非法,請從新輸入!!\033[0m")
345         return 0
346 
347 # 企業編碼管理系統主菜單
348 def mainmenu():
349     # os.system("clear")
350     print("""\033[1;35m
351       ****************************************************************
352                             企業編碼生成系統
353       ****************************************************************
354           1.生成6位數字防僞編碼 (213563型)
355           2.生成9位系列產品數字防僞編碼(879-335439型)
356           3.生成25位混合產品序列號(B2R12-N7TE8-9IET2-FE35O-DW2K4型)
357           4.生成含數據分析功能的防僞編碼(5A61M0583D2)
358           5.智能批量生成帶數據分析功能的防僞碼
359           6.後續補加生成防僞碼(5A61M0583D2)
360           7.EAN-13條形碼批量生成
361           8.二維碼批量輸出          
362           9.企業粉絲防僞碼抽獎
363           0.退出系統
364       ================================================================
365       說明:經過數字鍵選擇菜單
366       ================================================================
367     \033[0m""")
368 
369 
370 def codeprint(cstr, cint):
371     str1 = cstr[0]
372     str2 = cstr[1]
373     str3 = cstr[2]
374     for i in range(int(cint)):
375         strbook = str1 + str2 + random.choice(letter) + random.choice(letter) + random.choice(letter) + str2 + str3
376         print(strbook)
377 
378 
379 # 經過循環控制用戶對程序功能的選擇
380 while i < 9:
381     # 調入程序主界面菜單
382     mainmenu()
383     # 鍵盤輸入須要操做的選項
384     choice = input("\033[1;32m     請輸入您要操做的菜單選項:\33[0m")
385     if len(choice) != 0:  # 輸入若是不爲空
386         choice = input_validation(choice)  # 驗證輸入是否爲數字
387         if choice == 1:
388            scode1( str(choice))      # 若是輸入大於零的整數,調用scode1()函數生成註冊碼
389         # 選擇菜單2,調用scode2()函數生成9位系列產品數字防僞編碼
390         if choice == 2:
391             scode2(choice)
392         # 選擇菜單3,調用scode3()函數生成25位混合產品序列號
393         if choice == 3:
394             scode3(choice)
395         # 選擇菜單4,調用scode4()函數生成含數據分析功能的防僞編碼
396         if choice == 4:
397             scode4(choice)
398         # 選擇菜單5,調用scode5()函數智能批量生成帶數據分析功能的防僞碼
399         if choice == 5:
400             scode5(choice)
401         # 選擇菜單6,調用scode6()函數後續補加生成防僞碼
402         if choice == 6:
403             scode6(choice)
404         # 選擇菜單7,調用scode7()函數批量生成條形碼
405         if choice == 7:
406           scode7( choice)
407         # 選擇菜單8,調用scode8()函數批量生成二維碼
408         if choice == 8:
409             scode8( choice)
410         # 選擇菜單9,調用scode9()函數生成企業粉絲抽獎程序
411         if choice == 9:
412             scode9( choice)
413         # 選擇菜單0,退出系統
414         if choice == 0:
415             i = 0
416             print("正在退出系統!!")
417             break
418     else:
419         print("\033[1;31;40m    輸入非法,請從新輸入!!\033[0m")
420         time.sleep(2)
相關文章
相關標籤/搜索