• 73.综合应用:学生管理系统(文件版)


    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()
  • 相关阅读:
    C# PC版微信消息监听自动回复
    http ContentLength 为0 下载问题
    linq to entity不识别方法"System.String ToString()"
    android 环境搭建
    已备份数据库的磁盘上结构版本为 661。服务器支持版本 539,无法还原或升级此数据库
    android 百度地图 团队开发及正式apk发布
    Jquery UI Autocomplete 在mvc中应用
    <input type="image">表单提交2次 重复插入数据问题
    仿腾讯新闻时间轴效果
    项目管理笔记
  • 原文地址:https://www.cnblogs.com/kangwenju/p/12865966.html
Copyright © 2020-2023  润新知