Python ------ 实现学生管理器
欢迎各位大佬的到来,今天所要分享的文章是关于如何实现学生管理系统,有需要的朋友可以参考一下,希望可以帮到大家!
一、开始界面实现
1. 定义主函数
定义一个主函数main,在通过定义一个menu函数对学生管理系统的菜单进行打印。
# 定义menu()函数 def menu(): print(1. 新增学生) print(2. 显示学生) print(3. 查找学生) print(4. 删除学生) print(0. 退出程序) # 定义主函数 def main(): print(--------------------------------) print( 欢迎来到学生管理系统 ) print(-------------------------------) menu() main() 12345678910111213141516172. 运用循环,获取用户需求
1)使用 while True 循环:让菜单一直保持循环,直到用户选择退出操作时才结束循环操作。
2)变量 choice:获取到的用户需要实现的功能进行存储。
3)if 循环:使用多个分支循环语句,分别实现各个模块的功能。
def menu(): print(1. 新增学生) print(2. 显示学生) print(3. 查找学生) print(4. 删除学生) print(0. 退出程序) choice = input(请输入你的选择: ) return choice 12345678效果展示:
二、函数实现各个模块功能
1. 添加学生信息
1)studentId,name,gender,className:
分别用来存储学生的学号、姓名、性别、班级的信息。
2)student:定义一个字典,用来存储上述全部信息。
3)append():列表添加操作,将当前的字典存入列表,作为列表的一个元素。
4)students[ ]: 定义了一个列表用来存储所有的学生信息。该列表中的每个元素都属于一个"字典",而每个字典就分别表示一个同学! # 使用这个全局变量,来管理所有学生的信息. students = [] def insert(): print([新增学生] 开始!) studentId = input(请输入学生的学号:) name = input(请输入学生的姓名:) gender = input(请输入学生的性别:) if gender not in (男, 女): print(性别输入的内容不符合要求,新增失败!) return className = input(请输入学生的班级:) # 使用一个字典把上述的信息给聚合起来. student = { studentId: studentId, name: name, gender: gender, className: className } # 将上述信息添加到全局变量students列表中 global students students.append(student) print([新增学生] 完毕!) 1234567891011121314151617181920212223242. 展示学生信息
遍历全局变量这个列表,把每个学生的信息进行打印。
def show(): print([显示学生] 开始!) for s in students: print(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}") print(f[显示学生] 完毕! 共显示了{len(students)}条数据!) 123453. 查找学生信息
我们假设根据学生的姓名来进行查找。使用 count 变量完成计数功能操作。
def find(): # 根据学生姓名,来进行查找 print([查找学生] 开始!) name = input(请输入要查找的同学姓名:) count = 0 for s in students: if name == s[name]: print(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}") count += 1 print(f[查找学生] 完毕! 共找到了{count}个匹配的同学.) 123456789104. 删除学生信息
假设按照学生的学号进行删除操作。通过学号来确定该学生属于哪一个“字典”,然后把这个字典从列表中进行删除即完成该操作。
def delete(): print([删除学生] 开始!) # 按照学号进行删除 studentId = input(请输入要删除学生的学号:) # 看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除 for s in students: if studentId == s[studentId]: print(f"删除 {s[name]} 同学的信息!") students.remove(s) print([删除学生] 结束!) 123456789105. 退出程序
使用内建函数 sys.exit (0) 退出程序即可。
elif choice == 0: # 退出程序 print(GoodBye!) sys.exit(0) 1234三、 把信息存入文件中
由于上述的插入学生信息操作和删除学生信息操作都保存在内存中,一旦我们结束程序,我们插入或删除的信息就全都不见了。为了让我们插入的信息可以一直保存下去,我们就需要定义两个函数:save() 函数和 load() 函数。
1. save() 函数
这个函数是用于存档学生信息的。把信息存储在和当前文件同级的目录中。存档的文件定义为文本文件。
def save(): # 用于存档 # 此处的路径不是以d: 开头的"绝对路径",而是"相对路径" # 这个写法的含义就是让 record.txt 和当前的文件在同一个目录里. with open(record.txt, w, encoding=utf8) as f: for s in students: f.write(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}\n") print(f[存档成功] 共存储了 {len(students)} 条记录!) 12345678因此,每当我们修改一个数据时,就可以调用 save 函数对这个信息进行保存操作。
2. load() 函数
该函数是用于读取文档的操作。使用此函数,就可以实现当我们关闭程序再次运行程序时,可以读取到上次我们所保存的学生信息。
1)os.path.exists ():该内建函数用来判断某一个文件是否存在。
2)line.strIP ():该功能是去掉一个字符串开头和末尾的空白符。
空白符包括:空格,换行,回车,制表符等等。
3)line.split (): 用于将字符串按照指定的分隔符分割成若干个字符串。 def load(): # 用于读档 # 如果存档文件不存在,则直接跳过读档操作 if not os.path.exists(record.txt): return # 读档的时候要保证先把旧的数据先清理干净! global students students = [] with open(record.txt, r, encoding=utf8) as f: for line in f: # 针对这一行数据,按照 \t 对其进行切分操作! # 切分之前要去除末尾的换行 line = line.strIP() tokens = line.split(\t) if len(tokens) != 4: print(f当前行格式存在问题! line = {line}) continue student = { studentId: tokens[0], name: tokens[1], gender: tokens[2], className: tokens[3] } students.append(student) print(f[读档成功] 共读取了 {len(students)} 条记录!) 1234567891011121314151617181920212223242526四、整理代码
1. 代码展示
import os.path import sys # 使用这个全局变量,来管理所有学生的信息. # 这个列表的每个元素都是一个"字典",每个字典就分别表示一个同学! students = [] def save(): # 用于存档 with open(record.txt, w, encoding=utf8) as f: for s in students: f.write(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}\n") print(f[存档成功] 共存储了 {len(students)} 条记录!) def load(): # 用于读档 # 如果存档文件不存在,则直接跳过读档操作 if not os.path.exists(record.txt): return # 读档的时候要保证先把旧的数据先清理干净! global students students = [] with open(record.txt, r, encoding=utf8) as f: for line in f: # 针对这一行数据,按照 \t 对其进行切分操作! # 切分之前要去除末尾的换行 line = line.strIP() tokens = line.split(\t) if len(tokens) != 4: print(f当前行格式存在问题! line = {line}) continue student = { studentId: tokens[0], name: tokens[1], gender: tokens[2], className: tokens[3] } students.append(student) print(f[读档成功] 共读取了 {len(students)} 条记录!) def menu(): print(1. 新增学生) print(2. 显示学生) print(3. 查找学生) print(4. 删除学生) print(0. 退出程序) choice = input(请输入你的选择: ) return choice def insert(): print([新增学生] 开始!) studentId = input(请输入学生的学号:) name = input(请输入学生的姓名:) gender = input(请输入学生的性别:) if gender not in (男, 女): print(性别输入的内容不符合要求,新增失败!) return className = input(请输入学生的班级:) # 使用一个字典把上述的信息给聚合起来. student = { studentId: studentId, name: name, gender: gender, className: className } global students students.append(student) # 保存操作 save() print([新增学生] 完毕!) def show(): # 遍历全局变量这个列表,把每个学生的信息打印出来. print([显示学生] 开始!) for s in students: print(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}") print(f[显示学生] 完毕! 共显示了{len(students)}条数据!) def find(): # 根据学生姓名,来进行查找 print([查找学生] 开始!) name = input(请输入要查找的同学姓名:) count = 0 for s in students: if name == s[name]: print(f"{s[studentId]}\t{s[name]}\t{s[gender]}\t{s[className]}") count += 1 print(f[查找学生] 完毕! 共找到了{count}个匹配的同学.) def delete(): print([删除学生] 开始!) # 按照学号进行删除 studentId = input(请输入要删除学生的学号:) # 看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除 for s in students: if studentId == s[studentId]: print(f"删除 {s[name]} 同学的信息!") students.remove(s) # 增加保存操作 save() print([删除学生] 结束!) def main(): # 通过控制台和命令进行交互 print(--------------------------------) print( 欢迎来到学生管理系统 ) print(-------------------------------) load() while True: # 通过 menu 函数打印出菜单项 choice = menu() if choice == 1: # 新增学生 insert() elif choice == 2: # 显示学生 show() elif choice == 3: # 查找学生 find() elif choice == 4: # 删除学生 delete() elif choice == 0: # 退出程序 print(GoodBye!) sys.exit(0) else: print(您的输入有误,请重新输入!) # 需要进入下次循环,让用户输入 continue main() 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411422. 运行过程
以上就是今天所要分享的内容,如果感觉内容不错,记得一键三连噢。创作不易,感谢大家的支持,我们下次再见!ヾ( ̄▽ ̄)ByeBye
Ongwu博客 版权声明:以上内容未经允许不得转载!授权事宜或对内容有异议或投诉,请联系站长,将尽快回复您,谢谢合作!