python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)

最近学校实训,用两天时间做了一个python小程序*机房收费管理系统*,一款基于tkinter使用pandas库的dataframe处理数据的实训小程序,先来看效果图:

开发过程中最难搞的应该就是时间差算法,其它的增删改查都是对dataframe的基本操作,着手先用基本python语法写完整个流程以及涉及到的数据处理算法,之后再带入dataframe代码实例化,再加之tkinter的点缀,打完收工!!!(运行时记得安装对应的库)

下面是 文件地址
链接:https://pan.baidu.com/s/1V18TFfhbZYGbw05qoeczYQ
提取码:icah

下面是 详细代码

代码比较简单,学过tkinter和pandas的都能看懂

from tkinter import *
from tkinter import messagebox
import pandas as pd
import numpy as np
from datetime import datetime, datedf = pd.DataFrame(index=range(20), columns=["学号", "班级", "姓名", "上机时间", "下机时间"])
df.loc[0:] = pd.read_csv(r'test01.csv', index_col=0, dtype=object)
df = df.dropna(how='all')class Application(Frame):def __init__(self, master=None):super().__init__(master)self.master = masterroot.iconbitmap('1.ico')root.attributes('-alpha', '0.9')self.pack()self.createWidget()def createWidget(self):# 创建用户名框self.label01 = Label(self, text="用户名")self.label01.pack()v1 = StringVar()self.entry01 = Entry(self, textvariable=v1)self.entry01.pack()# self.btn01 = Button(self, text="登陆", command=self.login)# self.btn01.pack()# 创建密码框self.label02 = Label(self, text="密码")self.label02.pack()v2 = StringVar()self.entry02 = Entry(self, textvariable=v2, show="*")self.entry02.pack()self.btn01 = Button(self, text="登陆", command=self.login, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn01.pack()global photophoto = PhotoImage(file="login.gif")self.btn07 = Button(root, image=photo,relief="groove")self.btn07.pack()# self.btn07.config(state="disabled")  # 设置按钮禁用def login(self):username = self.entry01.get()pwd = self.entry02.get()if username == "admin" and pwd == "123456":self.label01.destroy()self.entry01.destroy()self.label02.destroy()self.entry02.destroy()self.btn01.destroy()root.geometry("1165x150+400+300")messagebox.showinfo("机房收费管理系统", "欢迎登陆机房收费管理系统")Button(self, text="用户登记", command=self.denji, width=35, font="黑体", activeforeground="green", activebackground="pink", bg="grey").grid(row=0, column=0)Button(self, text="结算下机", command=self.jiesuan, width=35, font="黑体", activeforeground="green", activebackground="pink", bg="grey").grid(row=0, column=1)Button(self, text="信息修改", command=self.xiugai, width=35, font="黑体", activeforeground="green", activebackground="pink", bg="grey").grid(row=0, column=2)Button(self, text="信息查询", command=self.chaxun, width=35, font="黑体", activeforeground="green", activebackground="pink", bg="grey").grid(row=0, column=3)else:messagebox.showinfo("机房收费管理系统", "您输入的密码或者账号有误,请重试!")def denji(self):top = Toplevel()top.title("用户登记")top.geometry("235x175+400+400")self.label01 = Label(top, text="学号")self.label01.grid(row=0, column=1)v1 = StringVar()self.entry01 = Entry(top, textvariable=v1)self.entry01.grid(row=0, column=2)self.label02 = Label(top, text="班级")self.label02.grid(row=1, column=1)v1 = StringVar()self.entry02 = Entry(top, textvariable=v1)self.entry02.grid(row=1, column=2)self.label03 = Label(top, text="姓名")self.label03.grid(row=2, column=1)v1 = StringVar()self.entry03 = Entry(top, textvariable=v1)self.entry03.grid(row=2, column=2)self.label04 = Label(top, text="上机时间")self.label04.grid(row=3, column=1)v1 = StringVar()self.entry04 = Entry(top, textvariable=v1)self.entry04.grid(row=3, column=2)self.label05 = Label(top, text="下机时间")self.label05.grid(row=4, column=1)v1 = StringVar()self.entry05 = Entry(top, textvariable=v1)self.entry05.grid(row=4, column=2)self.label19 = Label(top, text="机器号(1-20):")self.label19.grid(row=5, column=1)v1 = StringVar()self.entry19 = Entry(top, textvariable=v1)self.entry19.grid(row=5, column=2)self.btn02 = Button(top, text='登记', command=self.denji_data, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn02.grid(row=6, column=2, sticky=E)def denji_data(self):global dfnumber = self.entry19.get()data_one = self.entry01.get()data_two = self.entry02.get()data_three = self.entry03.get()data_four = self.entry04.get()data_five = self.entry05.get()if number != '':if int(number) <= len(df):df1 = df.loc[:int(number)].copy()df2 = df.loc[int(number):].copy()df1.loc[df1.index.max() + 1] = [data_one, data_two, data_three, data_four, data_five]df = pd.concat([df1,df2])print(df)else:messagebox.showinfo('提示', "无此机器")else:df.loc[df.index.max() + 1] = [data_one, data_two, data_three, data_four, data_five]def insert(df, i, df_add):# 指定第i行插入一行数据df1 = df.iloc[:i, :]df2 = df.iloc[i:, :]df_new = pd.concat([df1, df_add, df2], ignore_index=True)return df_newdef jiesuan(self):top = Toplevel()top.title("结算下机")top.geometry("240x80+400+400")self.label06 = Label(top, text="姓名")self.label06.grid(row=0, column=0)v1 = StringVar()self.entry06 = Entry(top, textvariable=v1)self.entry06.grid(row=0, column=1)self.label07 = Label(top, text="当前费率(元):")self.label07.grid(row=1, column=0)v1 = StringVar()self.entry07 = Entry(top, textvariable=v1)self.entry07.grid(row=1, column=1)self.btn02 = Button(top, text='结算', command=self.jiesuan_data, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn02.grid(row=2, column=1, sticky=E)def jiesuan_data(self):global df_name = self.entry06.get()  # 结算人姓名_rate = self.entry07.get()  # 结算费率if _rate != '' and _name != '':num_index = df[(df["姓名"] == str(_name))].index.tolist()num_time = pd.DataFrame((pd.to_datetime(df['下机时间'][num_index]) - pd.to_datetime(df['上机时间'][num_index])) / pd.Timedelta(1,'H')).fillna(0).astype(float)cost = float(_rate) * float(num_time.loc[num_index[0]][0])  # 结算费用messagebox.showinfo("谢谢使用", "上机时长:" + str((pd.DataFrame(pd.to_datetime(df['下机时间'][num_index]) - pd.to_datetime(df['上机时间'][num_index]))).loc[num_index[0]][0]) + "\n本次消费:" + str("%.2f" % cost) + "元\n欢迎下次使用")df = df.drop(num_index[0])else:messagebox.showinfo("通知", "请输入姓名和费率")def xiugai(self):top = Toplevel()top.title("结算下机")top.geometry("1200x80+400+400")self.label12 = Label(top, text="请输入所需修改(删除)信息使用者的机器号:")self.label12.grid(row=0, column=0)v1 = StringVar()self.entry12 = Entry(top, textvariable=v1)self.entry12.grid(row=0, column=1)self.btn04 = Button(top, text="确定修改", command=self.xiugai_data, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn04.grid(row=0, column=2)self.btn05 = Button(top, text="确定删除", command=self.shanchu_data, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn05.grid(row=0, column=3, sticky=W)self.label18 = Label(top, text="请输入修改后的信息:")self.label18.grid(row=1, column=0)self.label13 = Label(top, text="学号")self.label13.grid(row=2, column=0, sticky=E)v1 = StringVar()self.entry13 = Entry(top, textvariable=v1)self.entry13.grid(row=2, column=1)self.label14 = Label(top, text="班级")self.label14.grid(row=2, column=2)v1 = StringVar()self.entry14 = Entry(top, textvariable=v1)self.entry14.grid(row=2, column=3)self.label15 = Label(top, text="姓名")self.label15.grid(row=2, column=4)v1 = StringVar()self.entry15 = Entry(top, textvariable=v1)self.entry15.grid(row=2, column=5)self.label16 = Label(top, text="上机时间")self.label16.grid(row=2, column=6)v1 = StringVar()self.entry16 = Entry(top, textvariable=v1)self.entry16.grid(row=2, column=7)self.label17 = Label(top, text="下机时间")self.label17.grid(row=2, column=8)v1 = StringVar()self.entry17 = Entry(top, textvariable=v1)self.entry17.grid(row=2, column=9)def xiugai_data(self):number = self.entry12.get()data_one = self.entry13.get()data_two = self.entry14.get()data_three = self.entry15.get()data_four = self.entry16.get()data_five = self.entry17.get()if int(number) <= len(df):if data_one != "":df.loc[int(number)]['学号'] = data_oneif data_two != "":df.loc[int(number)]['班级'] = data_twoif data_three != "":df.loc[int(number)]['姓名'] = data_threeif data_four != "":df.loc[int(number)]['上机时间'] = data_fourif data_five != "":df.loc[int(number)]['下机时间'] = data_fiveprint(123)messagebox.showinfo("修改结果","修改成功")else:messagebox.showinfo("修改结果", "该机器无信息")def shanchu_data(self):global dfnumber = self.entry12.get()if int(number) <= len(df):df = df.drop(int(number))messagebox.showinfo("删除结果", "删除成功")else:messagebox.showinfo("删除结果", "该机器无信息")def chaxun(self):top = Toplevel()top.title("信息查询")top.geometry("775x100+400+400")self.label08 = Label(top, text="您可以按以下信息查询(任选一项):")self.label08.grid(row=0, column=0)self.label09 = Label(top, text="学号")self.label09.grid(row=1, column=0, sticky=E)v1 = StringVar()self.entry09 = Entry(top, textvariable=v1)self.entry09.grid(row=1, column=1)self.label10 = Label(top, text="班级")self.label10.grid(row=1, column=2)v1 = StringVar()self.entry10 = Entry(top, textvariable=v1)self.entry10.grid(row=1, column=3)self.label11 = Label(top, text="姓名")self.label11.grid(row=1, column=4)v1 = StringVar()self.entry11 = Entry(top, textvariable=v1)self.entry11.grid(row=1, column=5)self.btn03 = Button(top,text="开始查询", command=self.chaxun_data, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn03.grid(row=1, column=6)self.btn06 = Button(top, text="显示所有", command=self.show_all, font="黑体", activeforeground="green", activebackground="pink", bg="grey")self.btn06.grid(row=2, column=0)def show_all(self):messagebox.showinfo("查询结果", str(df))def chaxun_data(self):data_one = self.entry09.get()data_two = self.entry10.get()data_three = self.entry11.get()result = ""if data_one != "":result = df.loc[df[(df["学号"] == str(data_one))].index.tolist()]if len(result) == 0:messagebox.showinfo("查询结果", "抱歉没有查到!")else:messagebox.showinfo("查询结果", str(result))elif data_two != "":result = df.loc[df[(df["班级"] == str(data_two))].index.tolist()]if len(result) == 0:messagebox.showinfo("查询结果", "抱歉没有查到!")else:messagebox.showinfo("查询结果", str(result))elif data_three != "":result = df.loc[df[(df["姓名"] == str(data_three))].index.tolist()]if len(result) == 0:messagebox.showinfo("查询结果", "抱歉没有查到!")else:messagebox.showinfo("查询结果", str(result))else:messagebox.showinfo("查询结果", "请输入相关信息")
if __name__ == '__main__':root = Tk()root.geometry("400x220+400+400")root.title("机房收费管理系统")app = Application(master=root)root.mainloop()

python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)相关推荐

  1. JAVA+SWING超市销售管理系统开发(JAVA实训作业增删改查)

    一个非常简单的超市销售系统,只涉及增删改查. 1. 登录 两种方式登录系统,这里主要分享管理员登录 最简单的方法,指定账号密码 JButton button_login = new JButton(& ...

  2. java实现对HDFS增删改查(CRUD)等操作

    实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...

  3. python操作postgre库,批量进行增删改查和计时比较效率,封装好的普通增删改查和批量增删改查类拿来即用

    python操作postgre库,批量进行增删改查,封装类,拿来即用 1. 新建postgre.py文件,使用psycopg2封装普通增删改查和批量增删改查类 postgre.py import ps ...

  4. 用Python+Mysql+MDUI实现的数据库增删改查列表操作及单,多文件上传实例

    用Python+Mysql+MDUI实现的数据库增删改查列表操作及单,多文件上传实例.web服务用flask框架,数据库操作用的pymysql框架.教程在我B站有的. 开源地址:https://git ...

  5. python新闻系统_干货 | Python 实现新闻系统内容的增删改查功能

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 作者 程序人生 x 张涛 联合发布 主题 <Python追梦人> 前言 ...

  6. 四、Python第四课——Python中列表及其操作(增删改查)

    目录 一.Python中的列表 1.列表的定义和赋值 2.列表的使用 二.列表的"增删改查" 1.列表中元素的增加 A.在列表尾添加元素 B.在列表中插入元素 2.列表中" ...

  7. python输入list_python学习(list增删改查、及常用方法)

    1.Python多条件判断: 多条件判断 if: pass else: pass 循环 while for i = 0 while i > 1: print('hello') else: pri ...

  8. Python FastAPI 框架 操作Mysql数据库 增删改查

    2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...

  9. python连接mysql数据库并实现增删改查

    2019独角兽企业重金招聘Python工程师标准>>> 服务器安装mysql sudo apt-get install mysql-sever 开启和停止mysql服务 sudo s ...

最新文章

  1. 文章已转移到“字符集编码与乱码”分类下
  2. 一款实用的前端截图工具
  3. SAP CRM 产品主数据搜索alternative ID type下拉菜单的渲染逻辑
  4. 第8篇:Flowable-Modeler集成之Flowable-modeler源码编译
  5. 喜庆传统中国红色纹理背景,吉庆节日必备!
  6. SQLServer-----SQLServer 2008 R2安装
  7. mongodb python 大于_菜鸟成长记--如何根据关键词爬取微博内容?(scrapy+mongodb)
  8. [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
  9. 《图论及其应用》学习笔记(匹配和因子分解)
  10. 使用PGP加密你的文件
  11. 阿里开源自研语音识别模型DFSMN
  12. Windows 2016 服务器安全配置和加固
  13. 阿里云国际站:阿里云服务器遇到了CC攻击怎么处理防护措施?
  14. http 301 302 303 307 308 傻傻分不清
  15. MATLAB多项式计算
  16. 如何判断横屏还是竖屏?
  17. 怎么用计算机算拔模斜度,拔模斜度怎么标注【带斜度CAD图形的标注方法详细步骤】...
  18. SAP实施案例之亨得利集团
  19. 【超详细】开源JZVideo饺子播放器播放器配置使用以及其自定义
  20. usb线序usb线的接法

热门文章

  1. 中国电信网优测试软件,退CDMA时机已成熟,网友亲身测试验证中国电信网优真实原因!...
  2. 决胜移动互联网 网址导航迎来新曙光
  3. 升级Centos内核
  4. php微信上传视频文件在哪里,微信小程序中实现上传视频的开发代码
  5. nodejs爬虫puppeteer框架设计思想与应用
  6. 记一篇IT培训日记017-测试中
  7. 2019网易校招内推笔试题--苹果属于哪一堆
  8. js 通过contentWindow调用子页面方法报 not a function
  9. 搭建ISCSI服务器
  10. 前端三剑客之 JavaScript - javaEE初阶 - 细节狂魔