import json
import os
import tkinter as tk
from tkinter import *
from tkinter import messagebox, ttk, filedialog, simpledialog
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import seaborn as sns
import csv
from pylab import mpl
from tkinter.ttk import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
class CustomComboPicker(Frame):
def __init__(self, master, values=[], **kwargs):
super().__init__(master, **kwargs)
self.values = values
self.selected_values = []
self.combo_frame = Frame(self)
self.combo_frame.grid(row=0, column=3, padx=5, pady=5)
self.combo_button = Button(self.combo_frame, text="请选择", command=self.show_dropdown)
self.combo_button.grid(row=0, column=3, padx=5, pady=5)
self.combo_label = Label(self.combo_frame, text="")
# self.combo_label.pack(side=BOTTOM)
self.dropdown_window = None
def show_dropdown(self):
if self.dropdown_window:
self.hide_dropdown()
else:
self.dropdown_window = Toplevel(self)
self.dropdown_window.geometry("+%d+%d" % (self.winfo_rootx() + self.winfo_width() // 2 - 75,
self.winfo_rooty() + self.winfo_height() // 2 - 100))
self.dropdown_window.overrideredirect(True)
self.listbox = Listbox(self.dropdown_window, selectmode=MULTIPLE)
self.listbox.pack(fill=BOTH, expand=True)
for value in self.values:
self.listbox.insert(END, value)
self.listbox.bind("<FocusOut>", self.hide_dropdown)
def hide_dropdown(self, event=None):
if self.dropdown_window:
selected_indices = self.listbox.curselection()
if selected_indices:
selected_values = [self.listbox.get(index) for index in selected_indices]
self.selected_values = selected_values
self.combo_label.configure(text=", ".join(selected_values))
messagebox.showinfo("选中的数据", ", ".join(selected_values))
else:
self.selected_values = []
self.combo_label.configure(text="")
self.dropdown_window.destroy()
self.dropdown_window = None
def get_selected_values(self):
return self.selected_values
class LoginWindow(tk.Toplevel):
def __init__(self, master=None):
super().__init__(master)
self.title("登录")
self.geometry("250x150")
self.username_label = tk.Label(self, text="用户名:")
self.password_label = tk.Label(self, text="密码:")
self.username_entry = tk.Entry(self)
self.password_entry = tk.Entry(self, show="*")
self.login_button = tk.Button(self, text="登录", command=self.login)
self.register_button = tk.Button(self, text="注册", command=self.collect_phone)
self.forgot_password_button = tk.Button(self, text="找回密码", command=self.find)
self.username_label.grid(row=0, column=0, padx=5, pady=5)
self.password_label.grid(row=1, column=0, padx=5, pady=5)
self.username_entry.grid(row=0, column=1, padx=5, pady=5)
self.password_entry.grid(row=1, column=1, padx=5, pady=5)
self.login_button.grid(row=2, column=0, padx=5, pady=5)
self.register_button.grid(row=2, column=1, padx=5, pady=5)
self.forgot_password_button.grid(row=3, column=0, columnspan=2, padx=5, pady=5)
self.users_file = "users.txt"
if not os.path.exists(self.users_file):
with open(self.users_file, "w") as file:
file.write("{}")
self.protocol("WM_DELETE_WINDOW", self.close_app)
def login(self):
username = self.username_entry.get()
password = self.password_entry.get()
users = self.load_users()
if username in users and users[username]["password"] == password:
messagebox.showinfo("登录成功", "登录成功!")
self.destroy()
self.master.has_permission = True
elif username == "admin" and password == "admin":
messagebox.showinfo("登录成功", "登录成功!")
self.destroy()
self.master.has_permission = True
else:
messagebox.showerror("登录失败", "用户名或密码错误")
def load_users(self):
try:
with open(self.users_file, "r") as file:
users = json.load(file)
except (FileNotFoundError, json.JSONDecodeError):
users = {}
return users
def find(self):
username = simpledialog.askstring("找回密码", "请输入用户名:")
phone = simpledialog.askstring("找回密码", "请输入电话号码:")
users = self.load_users()
if username in users and users[username]["phone"] == phone:
password = users[username]["password"]
messagebox.showinfo("找回密码", f"您的密码是: {password}")
else:
messagebox.showerror("找回密码失败", "用户名或电话号码不匹配")
def save_users(self, users):
with open(self.users_file, "w") as file:
json.dump(users, file)
def collect_phone(self):
username = self.username_entry.get()
password = self.password_entry.get()
if not username or not password:
messagebox.showerror("注册失败", "请输入用户名和密码")
return
phone = simpledialog.askstring("输入电话号码", "请输入电话号码:")
self.register(phone)
def register(self, phone):
username = self.username_entry.get()
password = self.password_entry.get()
if not username or not password:
messagebox.showerror("注册失败", "请输入用户名和密码")
elif not phone:
messagebox.showerror("注册失败", "请输入电话号码")
else:
users = self.load_users()
if username in users:
messagebox.showerror("注册失败", "用户名已被注册")
else:
users[username] = {"password": password, "phone": phone}
self.save_users(users)
messagebox.showinfo("注册成功", "注册成功!")
def close_app(self):
self.master.destroy() # 关闭整个应用程序
class StudentAnalysisSystem(tk.Tk):
def __init__(self):
super().__init__()
self.title("学生成绩分析系统")
self.has_permission = False
self.tabControl = ttk.Notebook(self)
self.undo_stack = []
self.student_vars = [] # 用于存储学生选择的变量
self.subject_vars = []
self.colors = ['blue', 'green', 'red', 'cyan', 'magenta', 'yellow', 'black', 'purple', 'pink', 'brown']
self.colorss = ['orange', 'blue', 'red']
self.tab1 = ttk.Frame(self.tabControl)
self.tab2 = ttk.Frame(self.tabControl)
self.tab3 = ttk.Frame(self.tabControl)
self.tab4 = ttk.Frame(self.tabControl)
self.tabControl.add(self.tab1, text="数据操作区")
self.tabControl.add(self.tab2, text="分析图展示")
self.tabControl.add(self.tab3, text="成绩汇总分析")
self.tabControl.pack(expand=1, fill="both")
# Tab 1 - 数据操作
self.tree = ttk.Treeview(self.tab1, columns=[f"col{i}" for i in range(4)], show="headings", selectmode="browse")
self.tree.grid(row=0, column=0, columnspan=5, padx=5, pady=5)
self.tree.heading("#0", text="ID")
self.tree.heading("#1", text="姓名")
self.tree.heading("#2", text="语文")
self.tree.heading("#3",
没有合适的资源?快使用搜索试试~ 我知道了~
python数据分析系统 python文件
共4个文件
txt:2个
py:1个
csv:1个
需积分: 0 6 下载量 122 浏览量
2024-01-04
10:03:48
上传
评论 2
收藏 14KB ZIP 举报
温馨提示
本次开发基于python来做一个数据分析开发系统 ,前提是有一个data.csv文件,其他文件也可以自行修改 登录界面,可以登录,注册,通过电话号码找回密码等操作。账号密码自动会存在一个文本框里 进入系统后,有三个页面,第一个是数据操作区,分析图展示,成绩汇总分析。 第一个是用来读取数据后进行增删改查等操作,以及点击保存后才会保存和撤回删除这个操作。 第二部分就是把从文件读取学生的姓名和学科的姓名然后去根据下拉列表的多选去绘制柱状图 最后通过下拉选不同的学科和人去算平均分和最高分进而可以更精确的去数据分析每一个学生的成绩和班级情况
资源推荐
资源详情
资源评论
收起资源包目录
学生数据分析系统.zip (4个子文件)
python实训_陈阳升
代码部分.txt 28KB
users.txt 153B
text2.py 28KB
data.csv 195B
共 4 条
- 1
资源评论
小小哆
- 粉丝: 14
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功