家康粮油蔬菜水果超市--用户管理系统

from tkinter import *
from tkinter import ttk
import time
from tkinter import messagebox
win = Tk()
win.title('家康粮油蔬菜水果超市--用户管理系统')
win.geometry('800x600+400+200')
win.resizable(width=False,height=False)
#win.attributes('-topmost',-1)
#会员查询
group1 = LabelFrame(win,text='查询',font=(None ,10),padx=5,pady=5)
group1.grid(row=0,column = 0,padx=20,pady=3)
Label(group1,text = '请输入用户姓名/卡号/手机号:',font=(None ,10)).grid(row=0,column = 0,padx=10,pady=10)
Id = StringVar()
Id.set('')
user = Entry(group1,textvariable = Id,width = 35)
user.grid(row=0,column = 1,padx=10,pady=10)


    
def clean():
    user.delete(0,END)

#会员信息
group2 = LabelFrame(win,text='会员信息',font=(None ,10),padx=5,pady=5)
group2.grid(row=1,column = 0,padx=10,pady=3)

Label(group2,text = '卡号:',font=(None ,10)).grid(row=1,column = 0,padx=5,pady=5)
varSid = StringVar()
varSid.set('')
sid = Entry(group2,width=10,state='disabled',textvariable = varSid)
sid.grid(row=1,column = 1,padx=5,pady=5)
Label(group2,text = '姓名:',font=(None ,10)).grid(row=1,column = 2,padx=5,pady=5)
varName = StringVar()
varName.set('')
name = Entry(group2,width=10,state='disabled',textvariable = varName)
name.grid(row=1,column = 3,padx=5,pady=5)
Label(group2,text = '电话:',font=(None ,10)).grid(row=1,column = 4,padx=5,pady=5)
varTel = StringVar()
varTel.set('')
tel = Entry(group2,width=20,state='disabled',textvariable = varTel)
tel.grid(row=1,column = 5,padx=5,pady=5)
Label(group2,text = '地址:',font=(None ,10)).grid(row=1,column = 6,padx=5,pady=5)
varAdd = StringVar()
varAdd.set('')
adress = Entry(group2,width=30,state='disabled',textvariable = varAdd)
adress.grid(row=1,column = 7,padx=5,pady=5)



#消费记录

group3 = LabelFrame(win,text='客户消费明细',font=(None ,10),padx=5,pady=5)
group3.grid(row=3,column = 0,columnspan=3,padx=10,pady=1)

tree = ttk.Treeview(group3,show='headings',columns=('col1','col2','col3','col4',\
                                                    'col5','col6','col7','col8',))
tree.column('col1',width=70,anchor='center')
tree.heading('col1',text='卡号')
tree.column('col2',width=80,anchor='center')
tree.heading('col2',text='姓名')
tree.column('col3',width=110,anchor='center')
tree.heading('col3',text='最近消费金额')
tree.column('col4',width=120,anchor='center')
tree.heading('col4',text='最近消费时间')
tree.column('col5',width=140,anchor='center')
tree.heading('col5',text='消费总额')
tree.column('col6',width=80,anchor='center')
tree.heading('col6',text='可兑换次数')
tree.column('col7',width=80,anchor='center')
tree.heading('col7',text='已兑换次数')
tree.column('col8',width=60,anchor='center')
tree.heading('col8',text='备注')
#加滚动条
vbar = Scrollbar(group3, orient=VERTICAL)
vbar.config(command = tree.yview)
tree.configure(yscrollcommand=vbar.set)
tree.grid(row=3)
vbar.grid(row=3, column=1,sticky=NS)

tree.grid()
#积分兑换
group4 = LabelFrame(win,text='积分兑换',font=(None ,10),padx=5,pady=5)
group4.grid(row=2,column =0,padx=20,pady=3)
Label(group4,text = '消费总额:',font=(None ,10)).grid(row=0,column = 0,padx=5,pady=5)
varTot = StringVar()
varTot.set('')
total = Entry(group4,width=10,state='disabled',textvariable = varTot)
total.grid(row=0,column = 1,padx=5,pady=5)
Label(group4,text = '可兑换次数:',font=(None ,10)).grid(row=0,column = 2,padx=5,pady=5)
varKe = StringVar()
varKe.set('')
total = Entry(group4,width=10,state='disabled',textvariable = varKe)
total.grid(row=0,column = 3,padx=5,pady=5)
Label(group4,text = '已兑换次数:',font=(None ,10)).grid(row=0,column = 4,padx=5,pady=5)
varYi = StringVar()
varYi.set('')
total = Entry(group4,width=10,state='disabled',textvariable = varYi)
total.grid(row=0,column = 5,padx=5,pady=5)

#查询
def chaXun():
    userList = []
    tag = False
    file = open('Data.cyp','r')
    for j in file:
        userDict = {}
        temp = []
        temp.append(j.split('|'))
        userDict['卡号'] = temp[0][0]
        userDict['姓名'] = temp[0][1]
        userDict['最近消费金额'] = temp[0][2]
        userDict['最近消费时间'] = temp[0][3]
        userDict['消费总额'] = temp[0][4]
        userDict['可兑换次数'] = temp[0][5]
        userDict['已兑换次数'] = temp[0][6]
        userDict['备注'] = temp[0][7]
        userDict['电话'] = temp[0][8]
        userDict['地址'] = temp[0][9][:-1]
        userList.append(userDict)
        #print(userList)
        #print(len(Id.get()))
    if Id.get()!='':
        #加卡号和电话号
        for i in range(len(userList)):
            if Id.get() == userList[i]['电话']:
                varSid.set(userList[i]['卡号'])
                varName.set(userList[i]['姓名'])
                varTel.set(userList[i]['电话'])
                varAdd.set(userList[i]['地址'])
                varTot.set(userList[i]['消费总额'])
                varKe.set(userList[i]['可兑换次数'])
                varYi.set(userList[i]['已兑换次数'])
                tag = True
                break
        for i in range(len(userList)):
            #Id.get() == userList[i]['姓名']
            if Id.get() == userList[i]['姓名']:
                varSid.set(userList[i]['卡号'])
                varName.set(userList[i]['姓名'])
                varTel.set(userList[i]['电话'])
                varAdd.set(userList[i]['地址'])
                varTot.set(userList[i]['消费总额'])
                varKe.set(userList[i]['可兑换次数'])
                varYi.set(userList[i]['已兑换次数'])
                tag = True
                break            
         #加电话号
        
            #print(userList)
        for i in range(len(userList)):
            if Id.get() == userList[i]['卡号']:
                varSid.set(userList[i]['卡号'])
                varName.set(userList[i]['姓名'])
                varTel.set(userList[i]['电话'])
                varAdd.set(userList[i]['地址'])
                varTot.set(userList[i]['消费总额'])
                varKe.set(userList[i]['可兑换次数'])
                varYi.set(userList[i]['已兑换次数'])
                tag = True
                break  
                
        if tag == False: 
            messagebox.showinfo('提示','没有发现此用户!!')
       
    else:
        messagebox.showinfo('提示','请先输入卡号再继续操作!')
            
    return userList


Button(group1,text='查询',width = 15,command = chaXun).grid(row=0,column = 2,padx=10,pady=10)

#相关操作
group5 = LabelFrame(win,text='操作管理',font=(None ,10),padx=5,pady=5)
group5.grid(row=4,column =0,padx=20,pady=5)
#添加用户
def add():
    addWin = Tk()
    addWin.geometry('300x350+500+250')
    addWin.title('添加用户')
    addWin.resizable(width=False,height=False)
    #addWin.attributes('-topmost',-1)
    Label(addWin,text = '卡号:',font=(None ,10)).grid(row=0,column = 0,padx=15,pady=15)
    addId = Entry(addWin,width=30)
    addId.grid(row=0,column = 1,padx=5,pady=5)
    Label(addWin,text = '姓名:',font=(None ,10)).grid(row=1,column = 0,padx=15,pady=15)
    addName = Entry(addWin,width=30)
    addName.grid(row=1,column = 1,padx=5,pady=5)
    Label(addWin,text = '手机:',font=(None ,10)).grid(row=2,column = 0,padx=15,pady=15)
    addTel = Entry(addWin,width=30)
    addTel.grid(row=2,column = 1,padx=5,pady=5)
    Label(addWin,text = '地址:',font=(None ,10)).grid(row=3,column = 0,padx=15,pady=15)
    addAdress = Entry(addWin,width=30)
    addAdress.grid(row=3,column = 1,padx=5,pady=5)
    Label(addWin,text = '备注:',font=(None ,10)).grid(row=4,column = 0,padx=15,pady=15)
    addRemarks = Entry(addWin,width=30)
    addRemarks.grid(row=4,column = 1,padx=5,pady=5)
    def addUser():
        resList = []
        file = open('Data.cyp','r')
        for j in file:
            userDict = {}
            temp = []
            j = j.strip('\n')
            temp.append(j.split('|'))
            if temp[0][0]!='\n':
                userDict['卡号'] = temp[0][0]
                userDict['姓名'] = temp[0][1]
                userDict['最近消费金额'] = temp[0][2]
                userDict['最近消费时间'] = temp[0][3]
                userDict['消费总额'] = temp[0][4]
                userDict['可兑换次数'] = temp[0][5]
                userDict['已兑换次数'] = temp[0][6]
                userDict['备注'] = temp[0][7]
                userDict['电话'] = temp[0][8]
                userDict['地址'] = temp[0][9]
                
                resList.append(userDict)
        file.close()
        atg = False
        for i in range(len(resList)):
            if addId.get() == resList[i]['卡号']:
                atg = True
        if atg == True:
            messagebox.showinfo('警告','你输入的卡号已经存在!!!')
            addWin.destroy()
        else:
            r = messagebox.askyesno('提示','确定添加该用户吗?')
            if addId.get()==''or addName.get()==''or addTel.get()==''or addAdress.get()==''or addRemarks=='':
                messagebox.showinfo('提示','您输入的信息不完整!')
                addWin.destroy() 
            elif r == True:
                file = open('Data.cyp','a+')
                file.write(addId.get()+'|')
                file.write(addName.get()+'|')
                file.write('0'+'|')#最近消费金额
                file.write(str(time.strftime('%d/%m/%Y'))+'|')#最近消费时间
                file.write('0'+'|')#消费总额
                file.write('0'+'|')#可兑换次数
                file.write('0'+'|')#已兑换次数
                file.write(addRemarks.get()+'|')
                file.write(addTel.get()+'|')
                file.write(addAdress.get())
                        
                file.write('\n')
                file.close()
                messagebox.showinfo('提示','添加成功!')
                addWin.destroy()
            else:
                addWin.destroy()
            
    Button(addWin,text='添加',width = 20,command = addUser).grid(row=5,column = 0,columnspan=2,padx=15,pady=15)
#浏览用户
def infoView():
    items = tree.get_children()
    for item in items:
        tree.delete(item)
    file = open('Data.cyp','r')
    userList = []
    
    for i in file:
        t = i.split('|')
        userList.append(t)
    userList.sort(key=lambda x:x[4])

    
    for i in range(len(userList)):
        tree.insert('',0,values=(userList[i][0],userList[i][1],userList[i][2],userList[i][3],\
                                 userList[i][4],userList[i][5],userList[i][6],userList[i][7]))

    file.close()
#读取文件

def read():
    resList = []
    file = open('Data.cyp','r')
    for j in file:
        userDict = {}
        temp = []
        j = j.strip('\n')
        temp.append(j.split('|'))
        if temp[0][0]!='\n':
            userDict['卡号'] = temp[0][0]
            userDict['姓名'] = temp[0][1]
            userDict['最近消费金额'] = temp[0][2]
            userDict['最近消费时间'] = temp[0][3]
            userDict['消费总额'] = temp[0][4]
            userDict['可兑换次数'] = temp[0][5]
            userDict['已兑换次数'] = temp[0][6]
            userDict['备注'] = temp[0][7]
            userDict['电话'] = temp[0][8]
            userDict['地址'] = temp[0][9]
            
            resList.append(userDict)
    file.close()
    return resList

def delUser(): 
    iids = tree.selection()
    name = tree.item(iids,'values')
    resList = read()
    #print(resList)
    '''
    #读取文件
    resList = []
    file = open('Data.cyp','r')

    for j in file:
        userDict = {}
        temp = []
        temp.append(j.split('|'))
        userDict['序号'] = temp[0][0]
        userDict['姓名'] = temp[0][1]
        userDict['最近消费金额'] = temp[0][2]
        userDict['最近消费时间'] = temp[0][3]
        userDict['消费总额'] = temp[0][4]
        userDict['可兑换次数'] = temp[0][5]
        userDict['已兑换次数'] = temp[0][6]
        userDict['备注'] = temp[0][7]
        userDict['电话'] = temp[0][8]
        userDict['地址'] = temp[0][9][:-1]
        resList.append(userDict)
    file.close()
    '''
    if iids == '':
        messagebox.showinfo('提示','请先选中您所要删除的用户!')
    else:
        r = messagebox.askyesno('提示','确定删除该用户吗?')
        if r == True:
            for i in range(len(resList)):
                if name[1] == resList[i]['姓名']:
                    del resList[i]
                    tree.delete(iids)
                    messagebox.showinfo('提示','删除成功')
                    break
        
            #写入文件
            file = open('Data.cyp','w')
            for j in range(len(resList)):
                file.write( resList[j]['卡号']+'|')
                file.write( resList[j]['姓名']+'|')
                file.write( resList[j]['最近消费金额']+'|')
                file.write(resList[j]['最近消费时间']+'|')
                file.write( resList[j]['消费总额']+'|')
                file.write( resList[j]['可兑换次数']+'|')
                 #file.write( resList[j]['可兑换次数']+'|')
                file.write( resList[j]['已兑换次数']+'|')
                file.write( resList[j]['备注']+'|')
                file.write( resList[j]['电话']+'|')
                file.write( resList[j]['地址'])
                file.write('\n')
            file.close()
    infoView()
    
def helpme():
    messagebox.showinfo('提示','寒江独钓\nQQ:35959248!\n电话:13630622588')
def winExit():
    win.destroy()

#消费记录
def buy():
    if Id.get()=='':
        messagebox.showinfo('提示','请先输入姓名再继续操作!')
    else:
        chaXun()
        r = messagebox.askyesno('提示','确定是该用户吗?')
        if r == True:
            
            buyWin = Tk()
            buyWin.geometry('250x200+500+350')
            buyWin.title('添加购物记录')
            varTime = str(time.strftime('%d/%m/%Y'))
            Label(buyWin,text = '购物时间:',font=(None ,10)).grid(row=0,column = 0,padx=10,pady=30)
            Label(buyWin,text=varTime,font=(None ,10)).grid(row=0,column = 1,padx=10,pady=10)
            Label(buyWin,text = '消费金额:',font=(None ,10)).grid(row=1,column = 0,padx=10,pady=10)
            varTot = StringVar()
            buyNum = Entry(buyWin,width=15,textvariable = varTot)
            buyNum.grid(row=1,column = 1,padx=10,pady=10)
            #更新购物金额
            def update():
                resList = chaXun()
                #print(resList)
                for i in range(len(resList)):
                    if varSid.get() == resList[i]['卡号']:
                        resList[i]['最近消费金额']=buyNum.get()
                        resList[i]['消费总额']=str(int(resList[i]['消费总额'])+int(resList[i]['最近消费金额']))
                        messagebox.showinfo('提示','更新成功')
                        #写入文件
                        file = open('Data.cyp','w')
                        for j in range(len(resList)):
                            #print(resDict)
                            file.write( resList[j]['卡号']+'|')
                            file.write( resList[j]['姓名']+'|')
                            file.write( resList[j]['最近消费金额']+'|')
                            file.write(str(time.strftime('%d/%m/%Y'))+'|')
                            file.write( resList[j]['消费总额']+'|')
                            if ((int(resList[i]['消费总额'])-int(resList[i]['已兑换次数'])*500)/500) >=1:
                                resList[i]['可兑换次数'] = str(int((int(resList[i]['消费总额'])-int(resList[i]['已兑换次数'])*500)/500))
                            else:
                               resList[i]['可兑换次数'] = '0'
                            #file.write( str(int(resList[j]['消费总额'])//500)+'|')
                            file.write( resList[j]['可兑换次数']+'|')
                            file.write( resList[j]['已兑换次数']+'|')
                            file.write( resList[j]['备注']+'|')
                            file.write( resList[j]['电话']+'|')
                            file.write( resList[j]['地址'])
                            file.write('\n')
                        #print( resList[i])
                            
                        file.close()
                        buyWin.destroy()
            infoView()
            Button(buyWin,text='确定',width = 11,command = update).grid(row=2,column = 0,padx=10,pady=10)
            Button(buyWin,text='取消',width = 11,command = lambda:buyWin.destroy()).grid(row=2,column = 1,padx=10,pady=10)
def zzz():
    messagebox.showinfo('提示','功能开发中')
Button(group1,text='消费记录',width = 15,command = buy).grid(row=0,column = 3,padx=10,pady=10)
#Button(group1,text='自定义',width = 7,command = zzz).grid(row=0,column = 4,padx=10,pady=10)
def clean():
    infoView()
    Id.set('')
    varSid.set('')
    varName.set('')
    varTel.set('')
    varAdd.set('')
    varTot.set('')
    varKe.set('')
    varYi.set('')
    
def menoyTotal():
    menoySum = 0
    resList = read()
    for i in range(len(resList)):
        menoySum = menoySum  + int(resList[i]['消费总额'])
    messagebox.showinfo('恭喜','一共赚了'+str(menoySum)+'')
Button(group5,text='刷新数据',width = 11,command = clean).grid(row=4,column = 0,padx=10,pady=10)
Button(group5,text='添加用户',width = 11,command = add).grid(row=4,column = 1,padx=10,pady=10)
Button(group5,text='浏览用户',width = 11,command = infoView).grid(row=4,column = 2,padx=10,pady=10)
Button(group5,text='删除用户',width = 11,command = delUser).grid(row=4,column = 3,padx=10,pady=10)
Button(group5,text='销售总额',width = 11,command = menoyTotal).grid(row=4,column = 4,padx=10,pady=10)
Button(group5,text='帮助',width = 11,command = helpme).grid(row=4,column = 5,padx=10,pady=10)
Button(group5,text='退出',width = 11,command = winExit).grid(row=4,column = 6,padx=10,pady=10)

def duihuan():
    resList = read()
    if Id.get()=='':
        messagebox.showinfo('提示','请先输入姓名再继续操作!')
    else:
        r = messagebox.askyesno('提示','确定要兑换吗?')
        if r == True:
            for i in range(len(resList)):
                if varSid.get() == resList[i]['卡号']:# and resList[i]['可兑换次数'] > 0:
                    if int(resList[i]['可兑换次数']) > 0:
                        resList[i]['已兑换次数'] = str(int(resList[i]['已兑换次数']) + 1)
                        if ((int(resList[i]['消费总额'])-int(resList[i]['已兑换次数'])*500)/500) >=1:
                            resList[i]['可兑换次数'] = str(int((int(resList[i]['消费总额'])-int(resList[i]['已兑换次数'])*500)/500))
                        else:
                            resList[i]['可兑换次数'] = '0'
                        break
                    else:
                       messagebox.showinfo('提示','你的兑换次数已用完!')
                       break
                
                    
                    
                   
            #写入文件
            file = open('Data.cyp','w')
            for j in range(len(resList)):
                file.write( resList[j]['卡号']+'|')
                file.write( resList[j]['姓名']+'|')
                file.write( resList[j]['最近消费金额']+'|')
                file.write(resList[j]['最近消费时间']+'|')
                file.write( resList[j]['消费总额']+'|')
                #file.write( str(int(resList[j]['可兑换次数'])//500)+'|')
                file.write( resList[j]['可兑换次数']+'|')
                file.write( resList[j]['已兑换次数']+'|')
                file.write( resList[j]['备注']+'|')
                file.write( resList[j]['电话']+'|')
                file.write( resList[j]['地址'])
                file.write('\n')
            file.close()
    infoView()
    
Button(group4,text='申请兑换',width = 13,command = duihuan).grid(row=0,column = 6,padx=10,pady=10)
Button(group4,text='自定义',width = 12,command = duihuan).grid(row=0,column = 7,padx=10,pady=10)




mainloop()

 

posted @ 2016-09-04 15:14  疯陈演义  阅读(496)  评论(0编辑  收藏  举报