职工作业数量统计系统

这是一个使用Python的Tkinter库创建的GUI程序,用户可以输入职工工号和完成的产品数量,程序会累计多次输入的数据,并根据产品数量进行降序排序。排序后显示名次、数量、同名次人数及其工号。程序实现了数据的添加、查询和排序功能。
摘要由CSDN通过智能技术生成

要求:编写一个有 GUI 界面的程序,该程序输入职工工号和完成的产品数量,程序允许同一职
工有多次输入,由程序对其完成的产品数量实现累计.程序按完成数量对他们排序,并确定他
们的名次.按完成的产品数量由多到少的顺序,输出名次、数量,同一名次的职工人数及他们的工号。

代码段

from tkinter import *
#创建窗口
root = Tk()

root.title("测试")

u = StringVar()

p = StringVar()

frame = Frame(root)
#窗口大小
frame.pack(padx=80, pady=80, ipadx=40)
#id列表
link = []
#作业数量列表
link_num = []


# 输入框建立
def lab():
    lab1 = Label(frame, text="工号:")

    lab1.grid(row=0, column=0, padx=5, pady=5, sticky=W)

    lab2 = Label(frame, text="数量:")

    lab2.grid(row=1, column=0, padx=5, pady=5, sticky=W)

    ent1 = Entry(frame, textvariable=u)

    ent1.grid(row=0, column=1, sticky='ew', columnspan=2)

    ent2 = Entry(frame, textvariable=p)

    ent2.grid(row=1, column=1, sticky='ew', columnspan=2)


# 按钮创建
def bott():
    button = Button(frame, text="添加", command=submit, default='active')

    button.grid(row=2, column=1)

    lab3 = Label(frame, text="")

    lab3.grid(row=2, column=0, sticky=W)

    button2 = Button(frame, text="查询", command=submit1, default='active')

    button2.grid(row=2, column=2, padx=5, pady=5)

    button3 = Button(frame, text="退出", command=quit)

    button3.grid(row=4, column=4, padx=5, pady=5)


# 添加数据
def a(id, link, link_num, num):
    flag = -1

    for i in link:

        if i == id:
            flag = link.index(i)

    if flag != -1:

        link_num[flag] = link_num[flag] + num

    elif flag == -1:

        link.append(id)

        link_num.append(num)


# 计算数量相同的人数
def a_sort(link, link_num):
    count = []

    num = 0

    for i in range(len(link)):

        for x in link_num:

            if link_num[i] == x:
                num = num + 1

        count.append(num)

        num = 0
    #返回每个员工作业数量与其他人相同的次数
    return count


# 排序
def b_sort(link, link_num):
    #合并两个序列
    arr = list(zip(link_num, link))
    #降序排列
    arr.sort(key=lambda x: x[0],reverse=True)

    print(arr)
    #拆散合并序列
    l1, l2 = zip(*arr)

    print(link, link_num)
    #排序后的两个列表
    return l2, l1


def submit():
    #获取gui界面id
    id = u.get()

    if id == '':

        print("error")

    else:
        #获取gui界面num并强制转换为int类型
        num = int(p.get())
        #将其分别加入两个列表
        a(id, link, link_num, num)
        print(id," ",num)
    #将两个输入框设置为“ ”达到清除上次输入内容
    p.set("")
    u.set("")


# 排序结果
def sub(link, link_num):
    #得到相同人数列表
    count1 = a_sort(link, link_num)
    #验证
    print(count1)
    #将其合并然后按数量排序
    arr = list(zip(link_num, count1, link))
    link_nums = list(dict.fromkeys(arr))
    link_nums.sort(key=lambda x: x[0],reverse=True)
    #拆开序列
    c, d, e = zip(*link_nums)
    news_id = []
    #将其数量相同的id放在一起
    for nums in c:

        new_id = ''

        print(nums)

        for i in range(len(link_num)):

            if link_num[i] == nums:
                new_id = new_id + link[i] + ' '

        news_id.append(new_id)

        # print(news_id)
    #返回数量,人数,相同数量id
    return c, d, news_id


# 将结果显示到Gui上
def submit1():
    #创建查询结果窗口
    root1 = Tk()

    root1.title("查询结果")

    frame1 = Frame(root1)

    frame1.pack(padx=80, pady=160, ipadx=40)
    #将表的属性写入窗口
    Label(frame1, text='名次      数量     职工人数    工号', bg='yellow').pack()

    # listb = root1.Text(frame1)
    # listb.place(x=2, y=2, width=800, height=800)
    # listb.insert()

    result = []
    #再次排序
    l11, l21 = b_sort(link, link_num)

    print(link, link_num)
    #得到三个数据列表
    ss1, ss2, ss3 = sub(l11, l21)

    arr1s = list(zip(ss1, ss2, ss3))

    #按ss1降序排列
    arr1s.sort(key=lambda x: x[0],reverse=True)
    #去除重复项
    results = list(dict.fromkeys(arr1s))

    s1, s2, s3 = zip(*results)

    #控制台打印最终结果并加入名次项
    for i in range(len(s1)):
        print(s1, s2, s3)

        text = str(i + 1) + '        ' + str(s1[i]) + '          ' + str(s2[i]) + "          " + s3[i]

        result.append(text)

    #gui界面打印结果
    for item in result:
        Label(frame1, fg="red",text=item,anchor=W).pack()

    root1.mainloop()

#调用函数创建按钮和窗口达到gui界面操作
lab()
bott()

root.mainloop()

在测试窗口

 

分别输入了如下数据:

 点击查询便得到如下运行结果: 

 

 

 


 

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿垚啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值