python最强实训程序(增删改查)机房收费管理系统-基于tkinter的图形化界面(附详细代码)
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的图形化界面(附详细代码)相关推荐
- JAVA+SWING超市销售管理系统开发(JAVA实训作业增删改查)
一个非常简单的超市销售系统,只涉及增删改查. 1. 登录 两种方式登录系统,这里主要分享管理员登录 最简单的方法,指定账号密码 JButton button_login = new JButton(& ...
- java实现对HDFS增删改查(CRUD)等操作
实现对HDFS增删改查CRUD等操作 1 查找 列出某个目录下的文件名称,hdfs命令如下所示: hdfs dfs –ls/usr/app java代码片段: [plain] view plain c ...
- python操作postgre库,批量进行增删改查和计时比较效率,封装好的普通增删改查和批量增删改查类拿来即用
python操作postgre库,批量进行增删改查,封装类,拿来即用 1. 新建postgre.py文件,使用psycopg2封装普通增删改查和批量增删改查类 postgre.py import ps ...
- 用Python+Mysql+MDUI实现的数据库增删改查列表操作及单,多文件上传实例
用Python+Mysql+MDUI实现的数据库增删改查列表操作及单,多文件上传实例.web服务用flask框架,数据库操作用的pymysql框架.教程在我B站有的. 开源地址:https://git ...
- python新闻系统_干货 | Python 实现新闻系统内容的增删改查功能
点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 作者 程序人生 x 张涛 联合发布 主题 <Python追梦人> 前言 ...
- 四、Python第四课——Python中列表及其操作(增删改查)
目录 一.Python中的列表 1.列表的定义和赋值 2.列表的使用 二.列表的"增删改查" 1.列表中元素的增加 A.在列表尾添加元素 B.在列表中插入元素 2.列表中" ...
- python输入list_python学习(list增删改查、及常用方法)
1.Python多条件判断: 多条件判断 if: pass else: pass 循环 while for i = 0 while i > 1: print('hello') else: pri ...
- Python FastAPI 框架 操作Mysql数据库 增删改查
2 比 1 更容易理解,可以先看2(单文件级别) 1.FastAPI 框架 操作Mysql数据库(项目多文件级别) FastAPI 可以使用任何您想要的关系型数据库. 在这里,让我们看一个使用着SQL ...
- python连接mysql数据库并实现增删改查
2019独角兽企业重金招聘Python工程师标准>>> 服务器安装mysql sudo apt-get install mysql-sever 开启和停止mysql服务 sudo s ...
最新文章
- 文章已转移到“字符集编码与乱码”分类下
- 一款实用的前端截图工具
- SAP CRM 产品主数据搜索alternative ID type下拉菜单的渲染逻辑
- 第8篇:Flowable-Modeler集成之Flowable-modeler源码编译
- 喜庆传统中国红色纹理背景,吉庆节日必备!
- SQLServer-----SQLServer 2008 R2安装
- mongodb python 大于_菜鸟成长记--如何根据关键词爬取微博内容?(scrapy+mongodb)
- [求助] win7 x64 封装 出现 Administrator.xxxxx 的问题
- 《图论及其应用》学习笔记(匹配和因子分解)
- 使用PGP加密你的文件
- 阿里开源自研语音识别模型DFSMN
- Windows 2016 服务器安全配置和加固
- 阿里云国际站:阿里云服务器遇到了CC攻击怎么处理防护措施?
- http 301 302 303 307 308 傻傻分不清
- MATLAB多项式计算
- 如何判断横屏还是竖屏?
- 怎么用计算机算拔模斜度,拔模斜度怎么标注【带斜度CAD图形的标注方法详细步骤】...
- SAP实施案例之亨得利集团
- 【超详细】开源JZVideo饺子播放器播放器配置使用以及其自定义
- usb线序usb线的接法