This is a small project to practice Python, not really managing students!
Go to file
2024-07-12 10:25:01 +08:00
__pycache__ docs: 修改了README 2024-07-11 17:19:19 +08:00
.gitignore docs: 修改了README 2024-07-11 17:19:19 +08:00
functions.py Add files via upload 2024-07-11 12:54:29 +08:00
gui.py Add files via upload 2024-07-11 12:54:29 +08:00
main.py Add files via upload 2024-07-11 12:54:29 +08:00
README.md Update README.md 2024-07-12 10:25:01 +08:00
student.py Add files via upload 2024-07-11 16:01:07 +08:00
students info.json Add files via upload 2024-07-11 12:54:29 +08:00
students names.json Add files via upload 2024-07-11 12:54:29 +08:00

Student Manager

介绍

前言

这是一个极其简单且简陋的Python项目是工作室成员用来练习Python的。
因此不要将此程序用于管理学生!也没人看的上
开发者们都是新手,如果有任何方面的意见或建议请向我们提出!

运行

项目其中有两个.py文件分别是main.pygui.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中,便于后续的查找工作。下面是部分代码;

def add_student(name, gender):
    """添加学生到列表"""
    new_student_info = Student(name, gender)
    stu_info_list.append(new_student_info)
    stu_names_list.append(name)
    print("添加成功!")
  1. 在删除、查找以及后续会上线的更改功能中,我们都在对学生信息操作前遍历一次列表stu_names_list比对被操作的学生是否存在,再根据结果执行对应操作;

  2. 我们还使用pickle模块实现了数据存储的功能,students info.jsonstudents names.json分别存储两个列表stu_info_liststu_names_list,第一次保存时会自动创建。用户需要执行在主菜单的操作“保存并退出”才能正常保存数据!

  3. functions.py将管理系统要用到的函数独立出来,为了函数能正常调用上述的两个列表,我们使用自定义函数share_lists()实现两个文件之间的列表传输。想法来自于工作室成员xnz233


gui.py

主要开发者: xnz233
运行原理单独运行gui.py时

  1. 使用tkinter库进行窗口的绘制,并与主程序共用一部分函数;自定义了窗口的类,将图形界面部分的定义单独抽离出来,使得代码逻辑更加清晰,下面是部分代码:
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...
  1. 使用ttkbootstrap库进行窗口美化,使图形化窗口更美观。