码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2020-05-11 00:45:22      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:引导   查询   style   错误   pat   linux   ems   调用   mod   

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("序号\t姓名\t\t手机号\t\tQQ")
    i = 0
    for temp in info_list:
        # temp是一个字典
        print("%d\t%s\t\t%s\t\t%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("\n\n\n按回车键继续....")
        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()

 

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

标签:引导   查询   style   错误   pat   linux   ems   调用   mod   

原文地址:https://www.cnblogs.com/kangwenju/p/12865966.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!