---------Python基础编程---------
Author : AI菌
【一、项目开发步骤】
1.学生管理系统-项目演示 2.学生管理系统-项目分析 3.学生管理系统-搭建主体框架 4.学生管理系统-添加学生 5.学生管理系统-显示全部 6.学生管理系统-查询一个学生 7.学生管理系统-修改一个学生 8.学生管理系统-删除一个学生 9.学生管理系统-把字典数据写到文件中 10.学生管理系统-从文件中读取数据存储到字典中
【1、项目演示】
输入对应数字,调用系统对应功能
【2、项目分析】
【3、搭建主体框架】
主要函数:
1、main.py #编写启动学生管理系统的代码 2、student.py # 定义学生类 3、student_manager.py # 实现学生管理系统的主要功能 4、student.txt # 存储内存中学生信息到txt文件,防止断电后信息丢失
student_manager.py框架:
# 1.显示菜单 # print("调用 显示菜单 的功能") # 2.提示录入菜单编号 # 3.判断菜单编号 # 4.根据判断的结果调用对应的功能 # print("调用 1.添加的学生 的功能") # 4.根据判断的结果调用对应的功能 # print("调用 2.显示全部 的功能") # 4.根据判断的结果调用对应的功能 # print("调用 3.查询学生 的功能") # 4.根据判断的结果调用对应的功能 # print("调用 4.修改学生 的功能") # 4.根据判断的结果调用对应的功能 # print("调用 5.删除学生 的功能") # 4.根据判断的结果调用对应的功能 # print("调用 0.退出系统 的功能") # 4.根据判断的结果调用对应的功能 # print("录入的菜单编号有误,请重新录入!!!") # 显示菜单 show_menu 函数 # 添加学生 add_student 函数 # 显示全部学生信息 show_all 函数 # 查询学生信息 find_student 函数 #修改学生信息 update_student 函数 # 删除学生信息 delete_student 函数 # 把字典中的学生的数据覆盖写到文件中 dict_to_file 函数 # 把文件中的学生的数据覆盖写到字典中 file_to_dict 函数
【4、添加学生】
def add_student(self): """ 添加学生 """ # 这段代码 控制不能录入重复的学号的 while True: # 1.提示录入一个学号 id = input("请输入学号:") # 2.判断学号是否重复,如果重复,需要重新录入 if id in self.student_dict: print("学号已经被占用,请使用一个不同的学号!!!") continue else: break # 3.提示录入姓名和分数 name = input("请输入姓名:") score = input("请输入分数:") # 4.使用录入的学号,姓名,分数创建一个学生对象 s = Student(id, name, score) # 5.把学号作为key,对象作为value,添加到字典 self.student_dict[id] = s # 6.提示添加成功 print(f"添加{id}成功!!!")
【5、显示全部学生信息】
def show_all(self): """ #显示全部学生信息 """ # 先判断系统中是否有学生信息,如果有: if len(self.student_dict) > 0: # 1.打印表头,和上面的那条线 print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15)) print("-" * 45) # 2.得到字典中所有的value组成的列表 student_list = self.student_dict.values() # 3.遍历列表,每个元素都是一个学生对象 for student in student_list: id = student.id name = student.name score = student.score # 4.在循环里面,得到学号,姓名,分数,打印成一行 print(id.ljust(15) + name.ljust(15) + score.ljust(15)) # 5.在循环结束后,打印下面那条线 print("-" * 45) else: # 如果系统中没有学生信息,就提示"系统中还没有学生信息!!!" print("系统中还没有学生信息!!!")
【6、查询一个学生】
def find_student(self): """ 根据学号查询一个学生 """ # 1.提示录入学号 id = input("请输入学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生!!!") else: # 4.如果存在: # 4.1 打印表头和那条线 print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15)) print("-" * 45) # 4.2 得到这个学号对应的学生对象 s = self.student_dict.get(id) id = s.id name = s.name score = s.score # 4.3 得到学号,姓名,分数,打印成一行 print(id.ljust(15) + name.ljust(15) + score.ljust(15)) # 4.4 打印出下面那条线 print("-" * 45)
【7、修改一个学生】
def update_student(self): """ 根据学号修改一个学生信息 """ # 1.提示录入学号 id = input("请录入要修改学生的学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生") else: # 4.如果有,提示录入新的姓名和分数 name = input("请录入新的姓名:") score = input("请录入新的分数:") # 5.根据学号从字典中得到学生对象 s = self.student_dict[id] # 6.使用新录入的姓名和分数,修改学生对象中的姓名和分数 s.name = name s.score = score # 7.提示修改成功 print("修改学生信息成功!!!")
【8、删除一个学生】
def delete_student(self): """ 根据学号删除一个学生信息 """ # 1.提示录入学号 id = input("请录入要修改学生的学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生") else: # 4.如果有,从字典中把该学号对应的键值对删除 self.student_dict.pop(id) # 5.提示删除成功 print(f"删除学生{id}成功!!!")
【9、把字典数据写到文件中】
def dict_to_file(self): """ 把字典中的学生的数据覆盖写到文件中 """ # 1.得到所有value对应的列表 student_list = self.student_dict.values() # 2.打开文件,以只写的方法打开文件,编码设置为UTF-8 f = open("student.txt", "w", encoding="UTF-8") # 3.遍历列表,每个元素都是一个对象 for student in student_list: # 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串 id = student.id name = student.name score = student.score line = id + "," + name + "," + score # 5.把这个字符串写入到文件中 f.write(line + " ") # 6.循环结束后,关闭文件 f.close()
【10、从文件中读取数据存储到字典中】
def file_to_dict(self): """ 读取文件中的数据,一行一行的读取. 从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象. 把对象作为value,把学号作为key,添加到字典中 """ # 1.以只读的方式打开文件 f = open("student.txt", "r", encoding="UTF-8") while True: # 2.循环着读取文件,一次读一行 line = f.readline() if line != "": # 如果数据不为空,去掉最后的换行符 line = line[0:len(line) - 1] # 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数 infos = line.split(",") id = infos[0] name = infos[1] score = infos[2] # 4.使用学号,姓名,分数创建一个学生对象 s = Student(id, name, score) # 5.把对象作为value,把学号作为key,添加到字典中 self.student_dict[id] = s else: # 如果本次没有读到数据,表示数据已经读完了,应该终止循环 break
【二、完整代码】
main.py
from student_manager import * # 编写启动学生管理系统的代码 sm = StudentManager() sm.start()
student.py
# 定义学生类 class Student: def __init__(self, id, name, score): self.id = id self.name = name self.score = score def __str__(self): return f"{self.id}, {self.name}, {self.score}"
student_manager.py
from student import * # 学生管理系统的主要功能 class StudentManager: def __init__(self): # 添加一个字典,用来存储所有的学生 # 学号作为key, 学生对象作为value self.student_dict = {} def start(self): """ 启动学生管理系统 """ # 在系统一启动的时候 ,就应该从文件中读取数据,存到字典中 self.file_to_dict() # 5.把以上4个步骤循环起来 while True: # 1.显示菜单 # print("调用 显示菜单 的功能") self.show_menu() # 2.提示录入菜单编号 menu_code = input("请录入菜单编号:") # 3.判断菜单编号 if menu_code == "1": # 4.根据判断的结果调用对应的功能 # print("调用 1.添加的学生 的功能") self.add_student() elif menu_code == "2": # 4.根据判断的结果调用对应的功能 # print("调用 2.显示全部 的功能") self.show_all() elif menu_code == "3": # 4.根据判断的结果调用对应的功能 # print("调用 3.查询学生 的功能") self.find_student() elif menu_code == "4": # 4.根据判断的结果调用对应的功能 # print("调用 4.修改学生 的功能") self.update_student() elif menu_code == "5": # 4.根据判断的结果调用对应的功能 # print("调用 5.删除学生 的功能") self.delete_student() elif menu_code == "0": # 4.根据判断的结果调用对应的功能 # print("调用 0.退出系统 的功能") # 退出系统之前把内存中的数据存入文件中 self.dict_to_file() break else: # 4.根据判断的结果调用对应的功能 print("录入的菜单编号有误,请重新录入!!!") def show_menu(self): """ 显示菜单 """ print("*" * 40) print("欢迎使用【学生管理系统】 V1.0") print("1.添加学生") print("2.显示全部") print("3.查询学生") print("4.修改学生") print("5.删除学生") print() print("0.退出系统") print("*" * 40) def add_student(self): """ 添加学生 """ # 这段代码 控制不能录入重复的学号的 while True: # 1.提示录入一个学号 id = input("请输入学号:") # 2.判断学号是否重复,如果重复,需要重新录入 if id in self.student_dict: print("学号已经被占用,请使用一个不同的学号!!!") continue else: break # 3.提示录入姓名和分数 name = input("请输入姓名:") score = input("请输入分数:") # 4.使用录入的学号,姓名,分数创建一个学生对象 s = Student(id, name, score) # 5.把学号作为key,对象作为value,添加到字典 self.student_dict[id] = s # 6.提示添加成功 print(f"添加{id}成功!!!") def show_all(self): """ #显示全部学生信息 """ # 先判断系统中是否有学生信息,如果有: if len(self.student_dict) > 0: # 1.打印表头,和上面的那条线 print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15)) print("-" * 45) # 2.得到字典中所有的value组成的列表 student_list = self.student_dict.values() # 3.遍历列表,每个元素都是一个学生对象 for student in student_list: id = student.id name = student.name score = student.score # 4.在循环里面,得到学号,姓名,分数,打印成一行 print(id.ljust(15) + name.ljust(15) + score.ljust(15)) # 5.在循环结束后,打印下面那条线 print("-" * 45) else: # 如果系统中没有学生信息,就提示"系统中还没有学生信息!!!" print("系统中还没有学生信息!!!") def find_student(self): """ 根据学号查询一个学生 """ # 1.提示录入学号 id = input("请输入学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生!!!") else: # 4.如果存在: # 4.1 打印表头和那条线 print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15)) print("-" * 45) # 4.2 得到这个学号对应的学生对象 s = self.student_dict.get(id) id = s.id name = s.name score = s.score # 4.3 得到学号,姓名,分数,打印成一行 print(id.ljust(15) + name.ljust(15) + score.ljust(15)) # 4.4 打印出下面那条线 print("-" * 45) def update_student(self): """ 根据学号修改一个学生信息 """ # 1.提示录入学号 id = input("请录入要修改学生的学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生") else: # 4.如果有,提示录入新的姓名和分数 name = input("请录入新的姓名:") score = input("请录入新的分数:") # 5.根据学号从字典中得到学生对象 s = self.student_dict[id] # 6.使用新录入的姓名和分数,修改学生对象中的姓名和分数 s.name = name s.score = score # 7.提示修改成功 print("修改学生信息成功!!!") def delete_student(self): """ 根据学号删除一个学生信息 """ # 1.提示录入学号 id = input("请录入要修改学生的学号:") # 2.查找学号在系统是否存在 if id not in self.student_dict: # 3.如果不存在,就提示系统中没有此学生 print(f"系统中没有学号为{id}的学生") else: # 4.如果有,从字典中把该学号对应的键值对删除 self.student_dict.pop(id) # 5.提示删除成功 print(f"删除学生{id}成功!!!") def dict_to_file(self): """ 把字典中的学生的数据覆盖写到文件中 """ # 1.得到所有value对应的列表 student_list = self.student_dict.values() # 2.打开文件,以只写的方法打开文件,编码设置为UTF-8 f = open("student.txt", "w", encoding="UTF-8") # 3.遍历列表,每个元素都是一个对象 for student in student_list: # 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串 id = student.id name = student.name score = student.score line = id + "," + name + "," + score # 5.把这个字符串写入到文件中 f.write(line + " ") # 6.循环结束后,关闭文件 f.close() def file_to_dict(self): """ 读取文件中的数据,一行一行的读取. 从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象. 把对象作为value,把学号作为key,添加到字典中 """ # 1.以只读的方式打开文件 f = open("student.txt", "r", encoding="UTF-8") while True: # 2.循环着读取文件,一次读一行 line = f.readline() if line != "": # 如果数据不为空,去掉最后的换行符 line = line[0:len(line) - 1] # 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数 infos = line.split(",") id = infos[0] name = infos[1] score = infos[2] # 4.使用学号,姓名,分数创建一个学生对象 s = Student(id, name, score) # 5.把对象作为value,把学号作为key,添加到字典中 self.student_dict[id] = s else: # 如果本次没有读到数据,表示数据已经读完了,应该终止循环 break
student.txt
1,小樱,100 2,千寻,100 3,小野,100
【往期精彩】
▷【Python基础编程196 ● 读取文件的4种方式】
▷【Python基础编程197 ● 读取文件的4种方式】
▷【Python基础编程198 ● 读取文件的4种方式】
▷【Python基础编程199 ● Python怎么读/写很大的文件】
▷【Python基础编程200 ● 读取文件的4种方式】
▷【Python基础编程201 ● 读取文件的4种方式】
▷【Python基础编程202 ● 读取文件的4种方式】
▷【Python基础编程203 ● 读取文件的4种方式】
【加群交流】