Student-Manager/README.md
2024-07-12 19:39:21 +08:00

60 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Student Manager
[![releases](https://badgen.net/github/release/WisdomTech-Studio/Student-Manager)](https://github.com/WisdomTech-Studio/Student-Manager/releases)
## 介绍
### 前言
这是一个极其简单且简陋的Python项目是工作室成员用来练习Python的。
**因此不要将此程序用于管理学生!**~~也没人看的上~~
开发者们都是**新手**,如果有任何方面的意见或建议请向我们提出!
### 运行
项目其中有两个.py文件分别是**main.py**和**gui.py**,二者运行其中一个皆可。 它们的区别在于:
* **main.py是在终端上显示输出结果并与用户交互**
* **而gui.py则会显示独立窗口与用户交互。**
因此我们建议运行**gui.py**,体验更佳
### **<u>注意由于main.py中使用了“f字符串”故仅适用于Python3.6及以上的Python版本运行</u>**
***
### 代码简述
***
#### 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**,第一次保存时会自动创建。**<u>用户需要执行在主菜单的操作“保存并退出”才能正常保存数据!</u>**
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`库进行窗口美化,使图形化窗口更美观。