import time import os # 定一个列表,用来存储所有的学生信息(每个学生是一个字典) info_list = [] def print_menu(): print("---------------------------") print(" 学生管理系统 V1.0") print(" 1:添加学生") print(" 2:删除学生") print(" 3:修改学生") print(" 4:查询学生") print(" 5:显示所有学生") print(" 6:保存数据") print(" 7:退出系统") print("---------------------------") def add_new_info(): """添加学生信息""" global info_list new_name = input("请输入姓名:") new_tel = input("请输入手机号:") new_qq = input("请输入QQ:") for temp_info in info_list: if temp_info['name'] == new_name: print("此用户名已经被占用,请重新输入") return # 如果一个函数只有return就相当于让函数结束,没有返回值 # 定义一个字典,用来存储用户的学生信息(这是一个字典) info = {} # 向字典中添加数据 info["name"] = new_name info["tel"] = new_tel info["qq"] = new_qq # 向列表中添加这个字典 info_list.append(info) def del_info(): """删除学生信息""" global info_list del_num = int(input("请输入要删除的序号:")) if 0 <= del_num < len(info_list): del_flag = input("你确定要删除么?yes or no") if del_flag == "yes": del info_list[del_num] else: print("输入序号有误,请重新输入") def modify_info(): """修改学生信息""" global info_list modify_num = int(input("请输入要修改的序号:")) if 0 <= modify_num < len(info_list): print("你要修改的信息是:") print("name:%s, tel:%s, QQ:%s" % (info_list[modify_num]['name'], info_list[modify_num]['tel'],info_list[modify_num]['qq'])) info_list[modify_num]['name'] = input("请输入新的姓名:") info_list[modify_num]['tel'] = input("请输入新的手机号:") info_list[modify_num]['qq'] = input("请输入新QQ:") else: print("输入序号有误,请重新输入") def search_info(): """查询学生信息""" search_name = input("请输入要查询的学生姓名:") for temp_info in info_list: if temp_info['name'] == search_name: print("查询到的信息如下:") print("name:%s, tel:%s, QQ:%s" % (temp_info['name'], temp_info['tel'], temp_info['qq'])) break else: print("没有您要找的信息....") def print_all_info(): """遍历学生信息""" print("序号 姓名 手机号 QQ") i = 0 for temp in info_list: # temp是一个字典 print("%d %s %s %s" % (i, temp['name'], temp['tel'], temp['qq'])) i += 1 def save_data(): """加载之前存储的数据""" f = open("info_data.data", "w") f.write(str(info_list)) f.close() def load_data(): """加载之前存储的数据""" global info_list f = open("info_data.data") content = f.read() info_list = eval(content) f.close() def main(): """用来控制整个流程""" # 加载数据(1次即可) load_data() while True: # 1. 打印功能 print_menu() # 2. 获取用户的选择 num = input("请输入要进行的操作(数字):") # 3. 根据用户选择,做相应的事情 if num == "1": # 添加学生 add_new_info() elif num == "2": # 删除学生 del_info() elif num == "3": # 修改学生 modify_info() elif num == "4": # 查询学生 search_info() elif num == "5": # 遍历所有的信息 print_all_info() elif num == "6": # 保存数据到文件中 save_data() elif num == "7": # 退出系统 exit_flag = input("亲,你确定要退出么?~~~~(>_<)~~~~(yes or no) ") if exit_flag == "yes": break else: print("输入有误,请重新输入......") input(" 按回车键继续....") os.system("clear") # 调用Linux命令clear完成清屏 # 程序的开始 main()
注意:
- 以上程序,在运行之前请先建立info_data.data文件,并且写入一对中括号[]即可
- 等到后面讲解完
异常
之后就解决了这个问题
分析:
# 01: 分析保存数据(内存 -> 硬盘)-> (变量 -> 文件) # # 定义一个字典 # all_dict = {"小明": {"name": "小明", "age": "20"}} # # 字典-> 字符串 # all_dict_str = str(all_dict) # # 创建一个文件 # f = open("student.txt", "w", encoding="utf-8") # # 写入数据 # f.write(all_dict_str) # # 关闭文件 # f.close() # 02: 如果在第二次启动的时候 我们需要读取硬盘的数据(硬盘 -> 内存) -> (文件 -> 变量) # 打开一个文件 f = open("student.txt", "r", encoding="utf-8") # 读取数据 ret = f.read() # 关闭文件 f.close() # 类型转换 字符串 -> 字典 all_dict = eval(ret) print(all_dict) print(type(all_dict)) import os print("1111") os.system("clear")
实现:
import os # 定义一个全局变量 保存文件名 file_name = "student.txt" # 定义一个字典保存所有的学生信息 all_dict = {} # 显示菜单 def print_menu(): print("---------------------------") print(" 学生管理系统 V1.0") print(" 1:添加学生") print(" 2:删除学生") print(" 3:修改学生") print(" 4:查询学生") print(" 5:显示所有学生") print(" 6:保存数据") print(" 7:退出系统") print("---------------------------") return input("请选择:") # 定义一个函数打印成功的描述 def print_success(info): print("%s成功☺..." % info) # 错误描述 def print_error(): print("您输入的名字有误...") # 添加学生 def add_info(): # 引导用户输入 my_name = input("请输入学生的名字:") my_age = input("请输入学生的年龄:") # 构造一个字典 my_dict = {"name": my_name, "age": my_age} # 保存到all_dict中 all_dict[my_name] = my_dict print_success("保存数据") # 删除学生 def delete_info(): # 引导用户输入 my_name = input("请输入需要删除信息的学生名字:") # 判断 if my_name in all_dict: # 删除 del all_dict[my_name] print_success("删除数据") else: print_error() # 修改学生 def updata_info(): # 引导用户输入 my_name = input("请输入需要修改信息的学生名字:") # 判断 if my_name in all_dict: # 再次引导用户输入新的年龄 my_age = input("请输入学生新的年龄:") all_dict[my_name]["age"] = my_age print_success("修改数据") else: print_error() # 查询学生 def select_info(): # 引导用户输入 my_name = input("请输入需要查询信息的学生名字:") # 判断 if my_name in all_dict: print("姓名:%s, 年龄:%s" % (my_name, all_dict[my_name]["age"])) else: print_error() # 显示所有学生 def select_all_info(): print("python36期学生信息名单") for my_name, dict in all_dict.items(): print("姓名:%s, 年龄:%s" % (my_name, dict["age"])) print("="*30) # 读取文件中的数据 def load_data(): # 假如这是首次启动程序 # 如果文件存在 直接打开 如果文件不存在 要创建 flag = os.path.exists(file_name) if not flag: # 代表第一次登陆 f = open(file_name, "w", encoding="utf-8") # 写入一个{} f.write("{}") # 关闭文件 f.close() return # 代表不是第一次登陆 也就是文件存在 f = open(file_name, "r", encoding="utf-8") # 读取数据 ret = f.read() # 关闭文件 f.close() # 类型转换 str -> dict global all_dict # 对all_dict进行重新赋值 all_dict = eval(ret) print_success("硬盘 -> 内存 ") # 保存数据到文件中 def save_data(): # 打开文件 f = open(file_name, "w", encoding="utf-8") # 写入数据 f.write(str(all_dict)) # 关闭文件 f.close() print_success("内存->硬盘 ") # 负责整个程序正常执行 def main(): # 启动程序的时候 需要读取文件中的数据 load_data() while True: # 定义一个变量 记录用户的选择 index = print_menu() # 判断 if index == "1": add_info() elif index == "2": delete_info() elif index == "3": updata_info() elif index == "4": select_info() elif index == "5": select_all_info() elif index == "6": save_data() elif index == "7": print("欢迎下次使用...") break else: print("输入有误, 重新输入...") # 函数的调用 main()