Python 基于文件的简单学生信息管理系统

一、需求

完整文件:https://download.csdn.net/download/Promise_410/19764146

1. 系统要能记录学生的如下信息:

  • 学号
  • 姓名
  • 身份证号码
  • 联系电话
  • 宿舍
  • 籍贯

2. 本系统要求有以下功能:

  • 可以录入学员信息
  • 可以修改学员信息
  • 可以删除学员信息
  • 可以查询学员信息

3. 系统数据要永久保存

4. 系统管理界面如下:

------

=====================================================

学生信息管理系统 V1.0

  1. 查询学员信息
  2. 增加学员信息
  3. 修改学员信息
  4. 删除学员信息
  5. 显示所有信息
  6. 保存学员信息
  7. 退出系统

=====================================================

请输入操作序号:

二、过程

1. 定义列表

# 定义空列表,存储数据
student_info = []

2. 系统管理界面

# 打印菜单,提示序号及作用
def info():
    print("=" * 50)
    print("学生信息管理系统 V1.0")
    print("\t1.查询学员信息")
    print("\t2.增加学员信息")
    print("\t3.修改学员信息")
    print("\t4.删除学员信息")
    print("\t5.显示学员信息")
    print("\t6.保存学员信息")
    print("\t7.退出系统")
    print("=" * 50)

3. 添加学生信息

# 添加学生信息到列表(student_info)
def add_student():
    global student_info

    new_id = input("Please enter student student ID: ")
    new_name = input("Please enter student name: ")
    new_id_card = input("Please enter student ID card: ")
    new_phone = input("Please enter student phone: ")
    new_dormitory = input("Please enter student dormitory: ")
    new_addr = input("Please enter student address: ")

    new_info = {}
    new_info['student_id'] = new_id
    new_info['name'] = new_name
    new_info['id_card'] = new_id_card
    new_info['phone'] = new_phone
    new_info['dormitory'] = new_dormitory
    new_info['address'] = new_addr

    student_info.append(new_info)

4. 查找学生信息

# 查找指定学生信息,并格式化打印
def find_student():
    global student_info
    
    find_name = input("Please enter find student name: ")
    find_flag = 0

    for item in student_info:
        if find_name == item['name']:
            print('{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}'.format('学号', '姓名', '身份证', '电话', '宿舍', '籍贯'))
            print('{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}'.format(item['student_id'], item['name'], item['id_card'], item['phone'], \
item['dormitory'], item['address']))
            find_flag = 1
            break
        if find_flag == 0:
            print("Not find this student info!")

5. 增加学生信息

# 添加学生信息到列表
def add_student():
    global student_info

    new_id = input("Please enter student student ID: ")
    new_name = input("Please enter student name: ")
    new_id_card = input("Please enter student ID card: ")
    new_phone = input("Please enter student phone: ")
    new_dormitory = input("Please enter student dormitory: ")
    new_addr = input("Please enter student address: ")

    new_info = {}
    new_info['student_id'] = new_id
    new_info['name'] = new_name
    new_info['id_card'] = new_id_card
    new_info['phone'] = new_phone
    new_info['dormitory'] = new_dormitory
    new_info['address'] = new_addr

    student_info.append(new_info)

6. 保存学生信息

# 将学生信息保存到文件中
def save_student():
    global student_info

    with open("student_msg.txt", mode='w', encoding='utf-8') as f:
        f.write(str(student_info))

7. 修改学生信息

# 修改指定学生的信息
def modify_student():
    global student_info

    mod_flag = 0
    modify_name = input("Please enter modify student name: ")
    for item in student_info:
        modify_id = input("Please enter student student ID: ")
        modify_id_card = input("Please enter student ID card: ")
        modify_phone = input("Please enter student phone: ")
        modify_dormitory = input("Please enter student dormitory: ")
        modify_addr = input("Please enter student address: ")

        item['student_id'] = modify_id
        item['id_card'] = modify_id_card
        item['phone'] = modify_phone
        item['dormitory'] = modify_dormitory
        item['address'] = modify_addr

        mod_flag = 1
        break
    if mod_flag == 0:
        print("Please enter correct serial student name!")

8. 删除学生信息

# 删除指定学生的信息
def delete_student():
    global student_info

    del_flag = 0
    del_name = input("Please enter delete student name: ")

    for item in student_info:
        if del_name == item['name']:
            del student_info[student_info.index(item)]
            del_flag = 1

        if del_flag == 0:
            print("Please enter correct serial student name!")

9. 加载学生信息

# 将文件中存储的学生信息加载到列表(student_info)
def load_stu_info():

    global student_info

    try:
        f = open('student_msg.txt', mode='r', encoding='utf-8')
        student_info = eval(f.read())
        f.close()
    except Exception:
        pass

10. 显示学生信息

# 格式化输出列表中存储的所有学生信息
def display_student():
    global student_info

    print('{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}'.format('学号', '姓名', '身份证', '电话', '宿舍', '籍贯'))
    for item in student_info:
        print('{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}\t{:<20}'.format(item['student_id'], item['name'], item['id_card'], item['phone'], \
item['dormitory'], item['address']))

11. 把主控制程序变成主函数main

# 自定义控制程序,把主控制程序变成主函数main
def main():
	load_stu_info()
        
    while True:

        info()

        nums = int(input("请输入操作序号:"))

        if nums == 1:
            find_student()
        elif nums == 2:
            add_student()
        elif nums == 3:
            modify_student()
        elif nums == 4:
            delete_student()
        elif nums == 5:
            display_student()
        elif nums == 6:
            save_student()
        elif nums == 7:
            break
        else:
            print("Please enter the correct serial number!")

# 调用函数
if __name__ == '__main__':
    main()

三、总结

1. 知识点

1. 列表
2. 字典
3. 自定义模块
4. 作用域
5. 异常捕获
6. for 循环
7. if 判断
8. 字符串格式化
9. while 循环
10. list 便利
11. 编码
12. 文件操作

2. 流程

1. 信息存储:添加学生信息模块将信息添加到字典,然后添加到列表,通过保存模块保存到文件中,退出系统(删改操作类似)
2. 读学生信息:调用加载信息模块,将文件中学生信息导入到列表中,由查询、显示模块查询对应信息
3. 控制程序:利用死循环来循环进行操作,用户根据菜单,输入序号进行对应操作,操作完毕保存退出即可

3. if __name__ == ‘__main__’:

1.这个函数定义了一个main函数,我们执行一下该py文件发现结果是打印出”we are in __main__“,说明我们的if语句中的内容被执行了,调用了main():
2.但是如果我们从另我一个模块导入该模块,并调用一次main()函数会是怎样的结果呢?
3.其执行的结果是:we are in module
4.但是没有显示”we are in __main__“,也就是说模块__name__ = '__main__' 下面的函数没有执行。

	这样既可以让“模块”文件运行,也可以被其他模块引入,而且不会执行函数2次。这才是关键。
模块是对象,并且所有的模块都有一个内置属性 __name__。一个模块的 __name__ 的值取决于您如何应用模块。如果 import 一个模块,那么模块__name__ 的值通常为模块文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序样直接运行模块,在这 种情况下, __name__ 的值将是一个特别缺省"__main__"
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值