From 80c1fefc0e5cdecbe5f8414a1f59e1e9342b5317 Mon Sep 17 00:00:00 2001 From: xnz233 Date: Thu, 11 Jul 2024 17:15:41 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E4=BA=86README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit chore: 移除了代码库中python缓存 chore: 添加了.gitignore文件 --- .gitignore | 5 ++ README.md | 98 ++++++++++++++++----------- __pycache__/functions.cpython-39.pyc | Bin 0 -> 1106 bytes __pycache__/main.cpython-39.pyc | Bin 0 -> 3680 bytes __pycache__/student.cpython-39.pyc | Bin 0 -> 844 bytes 5 files changed, 63 insertions(+), 40 deletions(-) create mode 100644 .gitignore create mode 100644 __pycache__/functions.cpython-39.pyc create mode 100644 __pycache__/main.cpython-39.pyc create mode 100644 __pycache__/student.cpython-39.pyc diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a4f93c8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +*.pyc +*.pyo +*.pyd +__pycache__/ +*.egg-info/ \ No newline at end of file diff --git a/README.md b/README.md index 3ad60d7..acd719f 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,58 @@ -# Student Manager -## 介绍 -### 前言 -这是一个极其简单且简陋的Python项目,是工作室成员用来练习Python的。 -**因此不要将此程序用于管理学生!**(~~也没人看的上~~) -开发者们都是**新手**,如果有任何方面的错误请指正 -### 运行 -项目其中有两个.py文件,分别是**main.py**和**gui.py**,二者运行其中一个皆可。 它们的区别在于: -* **main.py是在终端上显示输出结果并与用户交互;** -* **而gui.py则会显示独立窗口与用户交互。** - -因此我们建议运行**gui.py**,体验更佳 -### **!!!注意!!!由于main.py中使用了“f字符串”,故仅适用于Python3.6及以上的Python版本运行!** -*** -### 代码简述 -*** -#### main.py -**主要开发者:** Billts-noo -**运行原理(单独运行main.py时):** -1. 使用`print()`函数输出指定菜单,并标注各功能所对应的数字,用户通过在终端输入数字使用对应功能; - -2. 在“添加学生”(自定义函数`_add_student()`)中,用户将会依次输入学生信息,我们创建一个学生实例来存储单个学生的信息,再将实例存储到列表**stu_info_list**中。我们还会将学生的姓名单独存储到列表**stu_names_list**中,便于后续的查找工作。下面是部分代码; -```Python -def add_student(name, gender): - """添加学生到列表""" - new_student_info = Student(name, gender) - stu_info_list.append(new_student_info) - stu_names_list.append(name) - print("添加成功!") -``` -3. 在删除、查找以及后续会上线的更改功能中,我们都在对学生信息操作前遍历一次列表**stu_names_list**比对被操作的学生是否存在,再根据结果执行对应操作; - -4. 我们还使用pickle模块实现了**数据存储**的功能,**students info.json**和**students names.json**分别存储两个列表**stu_info_list**和**stu_names_list**,第一次保存时会自动创建。**用户需要执行在主菜单的操作“保存并退出”才能正常保存数据!** -5. **functions.py**将管理系统要用到的函数独立出来,为了函数能正常调用上述的两个列表,我们使用自定义函数`share_lists()`实现两个文件之间的列表传输。*(想法来自于工作室成员xnz233)* -*** -#### gui.py -**主要开发者:** xnz233 -**运行原理(单独运行gui.py时):** -1. -*** +# Student Manager +## 介绍 +### 前言 +这是一个极其简单且简陋的Python项目,是工作室成员用来练习Python的。 +**因此不要将此程序用于管理学生!**(~~也没人看的上~~) +开发者们都是**新手**,如果有任何方面的错误请指正 +### 运行 +项目其中有两个.py文件,分别是**main.py**和**gui.py**,二者运行其中一个皆可。 它们的区别在于: +* **main.py是在终端上显示输出结果并与用户交互;** +* **而gui.py则会显示独立窗口与用户交互。** + +因此我们建议运行**gui.py**,体验更佳 +### **!!!注意!!!由于main.py中使用了“f字符串”,故仅适用于Python3.6及以上的Python版本运行!** +*** +### 代码简述 +*** +#### main.py +**主要开发者:** [Billts-noo](https://github.com/Billts-noo) +**运行原理(单独运行main.py时):** +1. 使用`print()`函数输出指定菜单,并标注各功能所对应的数字,用户通过在终端输入数字使用对应功能; + +2. 在“添加学生”(自定义函数`_add_student()`)中,用户将会依次输入学生信息,我们创建一个学生实例来存储单个学生的信息,再将实例存储到列表**stu_info_list**中。我们还会将学生的姓名单独存储到列表**stu_names_list**中,便于后续的查找工作。下面是部分代码; +```Python +def add_student(name, gender): + """添加学生到列表""" + new_student_info = Student(name, gender) + stu_info_list.append(new_student_info) + stu_names_list.append(name) + print("添加成功!") +``` +3. 在删除、查找以及后续会上线的更改功能中,我们都在对学生信息操作前遍历一次列表**stu_names_list**比对被操作的学生是否存在,再根据结果执行对应操作; + +4. 我们还使用pickle模块实现了**数据存储**的功能,**students info.json**和**students names.json**分别存储两个列表**stu_info_list**和**stu_names_list**,第一次保存时会自动创建。**用户需要执行在主菜单的操作“保存并退出”才能正常保存数据!** +5. **functions.py**将管理系统要用到的函数独立出来,为了函数能正常调用上述的两个列表,我们使用自定义函数`share_lists()`实现两个文件之间的列表传输。*(想法来自于工作室成员xnz233)* +*** +#### gui.py +**主要开发者:** [xnz233](https://github.com/xnz233/) +**运行原理(单独运行gui.py时):** +1. 使用`tkinter`库进行窗口的绘制,并与主程序共用一部分函数;自定义了窗口的类,将图形界面部分的定义单独抽离出来,使得代码逻辑更加清晰,下面是部分代码: +```python +class StudentManagementGUI: +def __init__(self, root): +global screen_height, screen_width, root_width, root_height +self.root = root +self.root.title("学生管理系统") +screen_width = root.winfo_screenwidth() # 获取屏幕宽度 +screen_height = root.winfo_screenheight() # 获取屏幕高度 +root_width = 600 +root_height = 500 + +self.root.geometry( + +f"{root_width}x{root_height}+{int((screen_width-root_width)/2)}+{int((screen_height-root_height)/2)}" # 计算窗口位置,使其绘制在屏幕中央 +) +# more... +``` + +2. 使用`ttkbootstrap`库进行窗口美化,使图形化窗口更美观。 diff --git a/__pycache__/functions.cpython-39.pyc b/__pycache__/functions.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..83a9db734cc664921af9d4433f9e9464124b9dd3 GIT binary patch literal 1106 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 AJpcdz literal 0 HcmV?d00001