From ddc3ec0db145c67b695f300a96394c4ebd595ebc Mon Sep 17 00:00:00 2001
From: bettleChen <2207153529@qq.com>
Date: Thu, 11 Jan 2024 13:48:17 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
BaseWindow.py | 3 +-
README.md | 20 ++---
.../StuSys_X2_bootstrap.cpython-37.pyc | Bin 0 -> 7511 bytes
.../StuSys_X2_bootstrap.cpython-39.pyc | Bin 0 -> 7404 bytes
X5/StuSys_X5_14.py | 85 +++++++++---------
X5/basic.png | Bin 0 -> 223272 bytes
6 files changed, 53 insertions(+), 55 deletions(-)
create mode 100644 X2/__pycache__/StuSys_X2_bootstrap.cpython-37.pyc
create mode 100644 X2/__pycache__/StuSys_X2_bootstrap.cpython-39.pyc
create mode 100644 X5/basic.png
diff --git a/BaseWindow.py b/BaseWindow.py
index 8ad33e7..c0a66c7 100644
--- a/BaseWindow.py
+++ b/BaseWindow.py
@@ -13,5 +13,4 @@ class BaseWindow(Frame):
self.master = master
self.font_style = tkFont.Font(family="Lucida Grande", size=20)
self.button_font = tkFont.Font(family="Lucida Grande", size=10)
- self.conn = pymysql.connect(user="root", password="cyh0110", database="SCT", host="127.0.0.1", port=3306)
-
+ self.conn = pymysql.connect(user="root", password="123123", database="SCT", host="127.0.0.1", port=3306)
diff --git a/README.md b/README.md
index a5f2297..8ee0538 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,16 @@
-# 数据库思维与关系数据库系统仿真
+# 项目编程基本原则
-## 关系数据库系统项目介绍
-### 关系数据库系统项目开发的总体思路
+## 文档及代码编辑的注意事项
-
本章后续内容将以关系数据库的定义与操纵为目标,拟开发一个可交互式练习SQL语句构造与执行的系统,使读者更好地体验关系数据库系统管理大规模数据的基本思维。掌握SQL语言以及基于SQL语言的数据库应用程序的开发和运行。
+### 进度汇报
+**查文档和编程任务是否符合。**
-【目标系统说明】。可交互式练习SQL语句构造与执行的系统:(1)建立一个示例数据库SCT, 内中包含3个数据表(Student, SC和Course),注意本书是以SCT为例,读者做实验时可选择建立其他的数据库和数据表;(2)利用Insert、Delete、Update语句对示例数据库的各个表追加内容;(3)利用Select语句检索示例数据库,并显示检索结果;(4)编制应用程序使用户可以针对固定的表输入检索条件,系统自动构造SQL语句并执行该SQL语句完成检索并输出检索结果。(5)编制应用程序使用户可以对数据库中的任何表进行检索条件输入并构造SQL语句、执行SQL语句显示检索结果。
-【项目开发总体思路】。关系数据库系统项目开发的总体思路如图示意。分为5个层面的开发内容,难度由低到高的被区分为:
-- X1:数据的变化与基本控制【数据结构】
-- X2:屏幕元素及其显示输出【用户界面】
-- X3:问题求解相关算法设计与函数实现【算法】
-- X4:屏幕元素事件识别与控制【人机交互】
-- X5:问题求解相关的算法优化与系统功能拓展【完整系统】
-最终开发的程序可以由用户交互式操作(不用编写程序)来模拟体验数据库系统管理大规模结构化数据的过程。
+首先自查一遍文档,每个编程任务是否符合文档上编程任务的要求---请在进度表中标示【自查:符合 或 不符合】,是按编程任务,不是按X1,X2...
+**查命名问题,函数框架,函数名称,和变量名规范**
+
+(2)按我们前两天讨论的,主函数框架、函数关系调用图、函数名称与变量名称规范化等方面回复【已优化完成,未优化完成】
### 主函数框架示例:
diff --git a/X2/__pycache__/StuSys_X2_bootstrap.cpython-37.pyc b/X2/__pycache__/StuSys_X2_bootstrap.cpython-37.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..d8cb4a08978b4d5f8aaa86749fad03cb0beb3ff2
GIT binary patch
literal 7511
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
Z`MI>~Kr`8j7-xCt$?KXlN@;7#{9gyG@Du<5
literal 0
HcmV?d00001
diff --git a/X2/__pycache__/StuSys_X2_bootstrap.cpython-39.pyc b/X2/__pycache__/StuSys_X2_bootstrap.cpython-39.pyc
new file mode 100644
index 0000000000000000000000000000000000000000..87556c032f88fbeda01d9ec8d46642a616c5c1bd
GIT binary patch
literal 7404
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
literal 0
HcmV?d00001
diff --git a/X5/StuSys_X5_14.py b/X5/StuSys_X5_14.py
index bfc8f17..806ed9b 100644
--- a/X5/StuSys_X5_14.py
+++ b/X5/StuSys_X5_14.py
@@ -22,8 +22,9 @@ class LoadElement(Frame):
self.master = master
self.table_name = table_name
self.data = []
- self.conn = pymysql.connect(user="root", password="cyh0110", database="SCT", host="127.0.0.1", port=3306)
+ self.conn = pymysql.connect(user="root", password="123123", database="stu_sys", host="127.0.0.1", port=3306)
self.data_frame = pd.read_sql(f"select * from {self.table_name} limit 0", self.conn)
+ #左侧三框框数据
self.font_style = tkFont.Font(family="Lucida Grande", size=20)
self.button_font = tkFont.Font(family="Lucida Grande", size=10)
self.create_widget()
@@ -46,11 +47,11 @@ class LoadElement(Frame):
combo["values"] = tables
combo.bind('<>', self.select_value)
combo.grid(column=0, row=0)
- Button(self, text="装载", width=10, command=self.load).grid(column=1, row=0, padx=5)
+ Button(self, text="装载", width=9, command=self.load).grid(column=1, row=0, padx=5)
def create_tree_widget(self):
# 创建画布,用于展示装载后的数据
- frame = Frame(self, width=50, height=180)
+ frame = Frame(self, width=50, height=250)
frame.grid(row=1, column=0, columnspan=2, sticky=NSEW, pady=5)
frame.grid_columnconfigure(0, weight=1)
frame.grid_rowconfigure(0, weight=1)
@@ -83,12 +84,13 @@ class LoadElement(Frame):
self.create_tree_widget()
+
class FormElement(Frame):
def __init__(self, master, node):
super().__init__(master)
self.node = node
self.data = []
- self.conn = pymysql.connect(user="root", password="cyh0110", database="SCT", host="127.0.0.1", port=3306)
+ self.conn = pymysql.connect(user="root", password="123123", database="stu_sys", host="127.0.0.1", port=3306)
self.font_style = tkFont.Font(family="Lucida Grande", size=20)
self.button_font = tkFont.Font(family="Lucida Grande", size=10)
self.table_names = []
@@ -100,14 +102,6 @@ class FormElement(Frame):
self.select_table(None)
self.create_treeview(pd.read_sql(self.default_query_sql, con=self.conn))
- def get_table_names(self):
- """
- 获取该数据库下所有的表
- :return:
- """
- data_frame = pd.read_sql("show tables", self.conn)
- self.table_names = [i[0] for i in data_frame.values.tolist()]
-
def select_table(self, event):
"""
当下拉框选择表之后,触发该函数,并将tableName改为选择的tableName
@@ -124,13 +118,27 @@ class FormElement(Frame):
self.sql_text.delete(0.0, END)
self.sql_text.insert(1.0, f"SELECT * FROM {self.table_name}")
+ def get_table_names(self):
+ """
+ 获取该数据库下所有的表
+ :return:
+ """
+ data_frame = pd.read_sql("show tables", self.conn)
+ self.table_names = [i[0] for i in data_frame.values.tolist()]
+
def get_field_names(self):
"""
获取所有数据表的所有字段
:return: 返回表内的所有字段
"""
data_frame = pd.read_sql(f"desc {self.table_name}", self.conn)
- return data_frame["Field"].tolist()
+ """
+ field_names = []
+ for field in data_frame["Field"]:
+ field_names.append(f"{self.table_name}.{field}")
+ return field_names
+ """
+ return data_frame["Field"].values.tolist()
def create_form(self):
"""
@@ -139,7 +147,7 @@ class FormElement(Frame):
"""
self.select_table_name = StringVar()
self.select_table_name.set(self.table_name)
- combo = ttk.Combobox(self, width=10, height=1, textvariable=self.select_table_name, font=self.font_style,
+ combo = ttk.Combobox(self, width=8, height=1, textvariable=self.select_table_name, font=self.font_style,
style="TCombobox")
combo["values"] = self.table_names
combo.bind('<>', self.select_table)
@@ -158,7 +166,7 @@ class FormElement(Frame):
checkbutton_var = IntVar()
checkbutton = Checkbutton(self, text='', variable=checkbutton_var)
checkbutton.grid(row=i + 1, column=j * 2, padx=5, pady=5, sticky=E)
- entry = Entry(self, font=self.font_style)
+ entry = Entry(self, font=self.font_style,width=12)
entry.grid(row=i + 1, column=j * 2 + 1, padx=5, pady=5, sticky=W)
self.form_content[field_name] = (entry, checkbutton_var, label, checkbutton)
style = Style()
@@ -166,7 +174,7 @@ class FormElement(Frame):
Button(self, text="构造SQL", command=self.make_sql, width=8, style="custom.TButton"
).grid(column=8, row=0, rowspan=8)
- self.sql_text = Text(self, height=3, font=self.font_style, width=75)
+ self.sql_text = Text(self, height=3, font=self.font_style, width=46)
self.sql_text.grid(row=8, column=0, rowspan=2, columnspan=7, sticky=W)
Button(self, text="\n执行SQL\n", command=self.execute_sql, width=8,
).grid(column=8, row=8, rowspan=2, padx=10)
@@ -195,8 +203,11 @@ class FormElement(Frame):
frame.grid(row=10, column=0, columnspan=10, rowspan=5, sticky=NSEW, pady=10)
frame.grid_columnconfigure(0, weight=1)
frame.grid_rowconfigure(0, weight=1)
- columns = data_frame.keys().tolist()
- tree = ttk.Treeview(frame, columns=columns, show="headings", style="mystyle.Treeview", height=50, selectmode=BROWSE)
+ unique_columns = data_frame.columns[~data_frame.columns.duplicated()]
+ columns = unique_columns.tolist()
+ # 获取查询的列名,将其转换为列表
+ tree = ttk.Treeview(frame, columns=columns, show="headings", style="mystyle.Treeview", height=50,
+ selectmode=BROWSE)
style = ttk.Style()
style.configure("Treeview.Heading", font=self.font_style)
style.configure("Treeview", rowheight=30, font=self.font_style, borderwidth=1)
@@ -229,7 +240,6 @@ class FormElement(Frame):
self.sql_text.delete(0.0, END)
self.sql_text.insert(1.0, sql)
-
class StuSys_X4(BaseWindow):
def __init__(self, master, attr):
super().__init__(master, attr)
@@ -239,6 +249,8 @@ class StuSys_X4(BaseWindow):
def create_left_plate(self):
self.left_frame = Frame(self.master, height=self.attr["height"])
+ self.right_frame = Frame(self.master, height=self.attr["height"])
+ self.right_frame.pack(side=RIGHT, anchor=NW, pady=10, padx=10)
self.left_frame.pack(side=LEFT, anchor=NW, pady=10, padx=10)
load_element1 = LoadElement(self.left_frame, "student")
load_element1.pack(side=TOP, pady=10)
@@ -246,9 +258,9 @@ class StuSys_X4(BaseWindow):
load_element2.pack(side=TOP, pady=10)
load_element2 = LoadElement(self.left_frame, "sc")
load_element2.pack(side=TOP, pady=10)
- message_frame = Frame(self.left_frame, width=50, height=180)
+ message_frame = Frame(self.right_frame, width=50, height=180)
message_frame.pack(side=TOP, pady=10, fill=BOTH)
- self.canvas = Canvas(message_frame, width=50, height=180, bg="#f0f5fa")
+ self.canvas = Canvas(message_frame, width=280, height=1000, bg="#f0f5fa")
self.canvas.configure(background="#f0f5fa")
y_scrollbar = Scrollbar(message_frame, orient="vertical", command=self.canvas.yview)
x_scrollbar = Scrollbar(message_frame, orient="horizontal", command=self.canvas.xview)
@@ -263,7 +275,8 @@ class StuSys_X4(BaseWindow):
for message in self.message:
index = self.message.index(message)
self.canvas.create_text(0, 20 * index, anchor="nw",
- text=message.split("-")[0], font=("", 15), fill="black" if message.split("-")[-1] == "true" else "red")
+ text=message.split("-")[0], font=("", 15),
+ fill="black" if message.split("-")[-1] == "true" else "red")
self.canvas.update()
self.canvas.configure(scrollregion=self.canvas.bbox("all"))
@@ -273,16 +286,15 @@ class StuSys_X4(BaseWindow):
form_element = FormElement(self.right_frame, self)
form_element.pack(side=TOP, pady=10, anchor=NE)
-
if __name__ == '__main__':
"""
minty, lumen, sandstone, yeti, pulse, united, morph, journal, darkly, superhero, solar
cyborg, vapor, simplex, cerculean,
"""
- from pycallgraph2 import PyCallGraph
- from pycallgraph2.output import GraphvizOutput
- from pycallgraph2 import Config
- from pycallgraph2 import GlobbingFilter
+ # from pycallgraph2 import PyCallGraph
+ # from pycallgraph2.output import GraphvizOutput
+ # from pycallgraph2 import Config
+ # from pycallgraph2 import GlobbingFilter
style = "morph"
root = Window(themename=style)
screenwidth = root.winfo_screenwidth()
@@ -290,23 +302,14 @@ if __name__ == '__main__':
root.columnconfigure(0, weight=1)
root.rowconfigure(1, weight=1)
root_attr = {
- "width": screenwidth * 0.83,
- "height": screenheight * 0.85,
+ "width": screenwidth * 0.88,
+ "height": screenheight * 0.90,
}
alignstr = '%dx%d+%d+%d' % (root_attr['width'], root_attr['height'], (screenwidth - root_attr['width']) / 2,
(screenheight - root_attr['height']) / 2)
root.geometry(alignstr)
root.resizable(width=False, height=False)
- output = GraphvizOutput(font_size=30)
- output.output_file = "basic.png"
- output.group_font_size = 40
- config = Config()
- config.trace_filter = GlobbingFilter(include=[
- 'StuSys_X4.*',
- 'FormElement.*',
- 'LoadElement.*',
- ])
- with PyCallGraph(output=output, config=config):
- app = StuSys_X4(root, root_attr)
- ttk.Style().configure("TButton", font="-size 18")
+
+ app = StuSys_X4(root, root_attr)
+ ttk.Style().configure("TButton", font="-size 18")
root.mainloop()
diff --git a/X5/basic.png b/X5/basic.png
new file mode 100644
index 0000000000000000000000000000000000000000..c0012fe9b8c851a67a36f719c719d921dff5146e
GIT binary patch
literal 223272
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