python-mysql期末实验:七、student_num(考生人数)表的增删改查界面以及数据可视化的制作

本专栏目录:

一、实验综述

二、基于MySQL进行的数据库的搭建

三、程序登录、注册界面的制作

四、数据导入界面的制作

五、collage(大学)表的增删改查界面的制作

六、province(省份)表的增删改查界面的制作

七、student_num(考生人数)表的增删改查界面以及数据可视化的制作(即本篇)

八、min_score_line(最低分数线)表的增删改查界面以及数据可视化的制作

九、collage_level(学校等级)表的增删改查界面的制作

十、enrollment_type(招生类型)表的增删改查界面的制作

十一、enrollment(招生人数)表的增删改查界面以及数据可视化的制作

十二、school_type(学校类型)表的增删改查界面的制作

十三、collage_school_level(各高校等级)表的增删改查界面的制作

十四、collage_province_enrollment_type(各高校招生类型)表的增删改查界面的制作

如果需要整个代码文件,以及数据库中的数据,或者有较为复杂的问题,请添加QQ:3095631599(CSDN-山河之书),添加时请备注:CSDN。

本部分将叙述考生人数增删改查函数(即本专栏第三篇文章中的student_num_use函数)的制作过程。

这部分主要包括一个界面:student_num表增删改查界面

可以实现的功能包括:支持关键词搜索,支持多元组查询,支持不完全关键词查询(即关键词有多个,可以只输入任意一个检索出符合其的全部结果),支持模糊关键词查询,支持无筛选条件的全表查询,支持单个元组的删除和插入,支持输入数据字符类型检查,支持插入或删除数据的完整性检查,支持查询数据的三维动态可视化。

接下来将舞台交给代码段,所有的解释都将以注释的形式呈现(注释是增量注释):

import tkinter as tk  # 本代码段需用
import pymysql as py  # 本代码段需用
import matplotlib.pyplot as plt  # 本代码段需用
from mpl_toolkits.mplot3d import Axes3D  # 本代码段需用
from tkinter import ttk  # 本代码段需用
from tkinter import messagebox  # 本代码段需用
import re  # 本代码段需用
import turtle
import random
import timeip = "127.0.0.1"  # 本地地址def student_num_use():student_num_window = tk.Tk()student_num_window.title("student_num表(考生人数表)操作界面")student_num_window.geometry("450x300")tk.Label(student_num_window, text="高校报考信息查询系统").place(x=300, y=20)tree = ttk.Treeview(student_num_window)tree["column"] = ("province_name", "year", "student_in_total")tree.column("province_name", width=120)tree.heading("province_name", text="省份名全称")tree.column("year", width=60)tree.heading("year", text="年份")tree.column("student_in_total", width=120)tree.heading("student_in_total", text="考生总人数")tree.grid(row=5, column=0, columnspan=20)province_name = tk.Label(student_num_window, text="省份名(关键字)")province_name.grid(row=1, column=0)province_name_str = tk.StringVar()province_name_input = tk.Entry(student_num_window, width=20, textvariable=province_name_str)province_name_input.grid(row=1, column=1)year = tk.Label(student_num_window, text="年份(关键字)")year.grid(row=2, column=0)year_str = tk.StringVar()year_input = tk.Entry(student_num_window, width=20, textvariable=year_str)year_input.grid(row=2, column=1)student_in_total = tk.Label(student_num_window, text="考生总人数")student_in_total.grid(row=3, column=0)student_in_total_str = tk.StringVar()student_in_total_input = tk.Entry(student_num_window, width=20, textvariable=student_in_total_str)student_in_total_input.grid(row=3, column=1)def select():province_name_info = province_name_input.get()year_info = year_input.get()conn = py.connect(host='%s' % ip, user='lzx', password='lzx', port=3306, database='dbms_report',charset='utf8')cursor = conn.cursor()if len(province_name_info) == 0 and len(year_info) != 0:cursor.execute("select * from student_num where year=%d" % int(year_info))elif len(province_name_info) != 0 and len(year_info) == 0:cursor.execute("select * from student_num where province_name like '%%%s%%'" % province_name_info)elif len(province_name_info) == 0 and len(year_info) == 0:cursor.execute("select * from student_num")else:cursor.execute("select * from student_num where province_name like '%%%s%%' and year=%d"% (province_name_info, int(year_info)))list_result = cursor.fetchall()x = tree.get_children()for item in x:tree.delete(item)a = []x = []y = []z = []for i in range(len(list_result)):tree.insert("", i, text=str(i), values=(list_result[i][0], list_result[i][1], list_result[i][2]))a.append(list_result[i][0])  # 数据预处理y.append(int(list_result[i][1]))  # 数据获取catch_z1 = list_result[i][2]catch_z2 = float(catch_z1[0:-1])  # 由于原数据中有单位万,这里删除此单位便于绘图z.append(catch_z2)for i in range(len(a)):x.append(i+1)  # 文字数据转成数字,便于绘制文字坐标轴picture = plt.figure(figsize=(200, 100))  # 建立坐标系并设置画布大小ax3d = Axes3D(picture)  # 建立三维绘图区plt.xticks(x, labels=a, fontfamily="SimHei")  # 坐标轴替换plt.yticks(y)ax3d.set_xlabel("省份名全称", fontfamily="SimHei")ax3d.set_ylabel("年份", fontfamily="SimHei")ax3d.set_zlabel("考生人数(单位:万人)", fontfamily="SimHei")  # 坐标轴设置ax3d.scatter(x, y, z, c='b', marker='*')  # 绘制点图plt.show()  # 展示图像conn.commit()conn.close()def insert():try:province_name_info = province_name_input.get()year_info = int(year_input.get())student_in_total_info = student_in_total_input.get()conn = py.connect(host='%s' % ip, user='lzx', password='lzx', port=3306, database='dbms_report',charset='utf8')cursor = conn.cursor()try:cursor.execute("insert into student_num values('%s',%d,'%s')"% (province_name_info, year_info, student_in_total_info))conn.commit()tk.messagebox.showinfo("正确", "数据插入成功")conn.close()except py.err.IntegrityError:tk.messagebox.showerror("错误", "受到完整性约束限制,数据插入失败,请重新检查数据,然后插入")except ValueError:tk.messagebox.showerror("错误", "年份需为整数")def delete():try:province_name_info = province_name_input.get()year_info = year_input.get()conn = py.connect(host='%s' % ip, user='lzx', password='lzx', port=3306, database='dbms_report',charset='utf8')cursor = conn.cursor()try:if len(province_name_info) == 0 or len(year_info) == 0:tk.messagebox.showerror("错误", "请输入两个执行删除的筛选条件")else:cursor.execute("delete from student_num where province_name='%s' and year=%d"% (province_name_info, int(year_info)))conn.commit()tk.messagebox.showinfo("正确", "删除数据成功")conn.close()except py.err.IntegrityError:tk.messagebox.showerror("错误", "受到完整性约束限制,数据删除失败,请先删除外键数据")except ValueError:tk.messagebox.showerror("错误", "年份需为整数")tk.Button(student_num_window, text="查询", command=select).grid(row=4, column=0)tk.Button(student_num_window, text="插入", command=insert).grid(row=4, column=1)tk.Button(student_num_window, text="删除", command=delete).grid(row=4, column=2)def quit_student_num_use():student_num_window.destroy()tk.Button(student_num_window, text="返回", command=quit_student_num_use).grid(row=4, column=3)

喜闻乐见的运行截图:

 

 

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部