简单学生信息管理系统(python)

简单学生信息管理系统(python)

一、由于作者刚开始学习python,该代码的编写离不开教学视频的帮助,感谢视频制作者提供的思路和方法,在此附上链接供大家一起学习:https://www.bilibili.com/video/BV1wD4y1o7AS?p=1

二、个人思路:

首先我的想法是制作一个可以管理学生信息的系统,可以包括学号、姓名、户籍、联系方式、学业成绩等等信息,由于这些信息可以通过相同操作添加字典键值对来实现,所以我的系统中只录入了学号、姓名、户籍、联系方式。
其次系统中功能不仅包括有“增删改查”四部分,还有查看总信息表和退出系统六个功能。接下来我会依次介绍这六个功能的特点:
1.查找学生信息:这里我将查找方式定为先选定标签,即先选定id,name,home,numb,再将信息填入进行查找。这种方式利于用片段信息查找到该学生信息。查询后,系统会将查找到的所有信息都列出来(如果用名字和户籍查询,学生存在同名,同户籍现象,所以需要将所有信息列出来)。
2.修改学生信息:修改信息需要确定修改学生的学号,利用学号先查询是否存在该学生,存在的话会要求输入需要更改的信息,新home和新numb(学号和名字一般固定,所以不提供更改^^)
3.添加学生信息:选择该功能后根据系统提示添加信息即可,本系统每个功能都有一个比较人性化的设计(自己认为的)可以连续操作,在完成一次操作后系统会提示你是否要退出或者再一次操作等等…
4.删除学生信息:输入想要删除的学生学号即可删除(除了被劝退,基本上用不到嗷)
5.展示全部信息:选择该功能就可以非常清晰看到所有学生信息列成的表格,附带排序功能
6.退出系统:非常体贴的问一下你是不是误触了,要是确定退出的话就直接return 0了,没有特别的
通过以上思路造就了以下的代码:
import os

filename = 'student.txt'


def main():
    while True:
        menu()
        n = int(input("*请输入菜单功能前对应的数字:"))
        if n == 1:
            search()
        elif n == 2:
            change()
        elif n == 3:
            add()
        elif n == 4:
            delete()
        elif n == 5:
            show()
        elif n == 0:
            flag = 0
            print("*您确定要退出系统吗?(yes/no)")
            choice = input()
            while flag == 0:
                if choice == "yes":
                    print("\n*欢迎您的下一次使用!")
                    return 0
                elif choice == "no":
                    flag = 1
                else:
                    choice = input("*请输入yes或者no:")
            if flag == 1:
                continue
        else:
            print("\n*请输入菜单功能对应的数字,跳转到相应功能!\n")


def menu():
    print("\n============欢迎使用学生信息管理系统===============")
    print("********************主菜单*********************")
    print("               1.查找学生信息")
    print("               2.修改学生信息")
    print("               3.添加学生信息")
    print("               4.删除学生信息")
    print("               5.展示所有学生信息")
    print("               0.退出系统")
    print("*********************************************")


def search():
    while True:
        print("\n=============================================")
        label = input("*请输入您想要检索的标签(id,name,home,numb):")
        key = input("*请输入您想要检索的学生信息:")
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as file:
                stu_old = file.readlines()
        else:
            stu_old = []
        if stu_old:
            flag = 0
            for i in stu_old:
                d = dict(eval(i))
                if d[label] == key:
                    flag = flag + 1
                    if flag == 1:
                        print("\n=====================================================================")
                    print("%s:%-16s %s:%-10s %s:%-10s %s:%-20s" % (
                        'id', d['id'], 'name', d['name'], 'home', d['home'], 'numb', d['numb']))
            if not flag:
                print("\n*抱歉,系统没有查询到相关学生信息")
            else:
                print("=====================================================================")
        else:
            print("\n*暂无学生信息!")

        ans = input("\n*是否继续查询学生信息?(yes/no)")
        flag = 0
        while flag == 0:
            if ans == 'yes':
                flag = 1
            elif ans == 'no':
                flag = 2
            else:
                ans = input("*请输入yes或者no:")
        if flag == 1:
            continue
        else:
            break


def change():
    while True:
        key = input("*请输入您想要修改学生的id(输入0则退出修改):")
        if key:
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8') as file:
                    stu_lst = file.readlines()
            else:
                stu_lst = []
            if stu_lst:
                flag = False
                new_name = ''
                for i in stu_lst:
                    d = dict(eval(i))
                    if d['id'] == key:
                        new_name = d['name']
                        flag = True
                        break
                if flag:
                    new_home = input("*请输入该学生户籍:")
                    new_numb = input("*请输入该学生手机号:")
                    new_d = {'id': key, 'name': new_name, 'home': new_home, 'numb': new_numb}
                    wfile = open(filename, 'w', encoding='utf-8')
                    for i in stu_lst:
                        d = dict(eval(i))
                        if d['id'] != key:
                            wfile.write(str(i))
                        else:
                            wfile.write(str(new_d) + '\n')
                    print("\n*修改完成!")
                    wfile.close()
                else:
                    print("\n*抱歉,未查询到该学生!")
            else:
                print("\n*抱歉,未查询到该学生!")
        elif not key or key == '0':
            break

        ans = input("\n*是否要继续修改学生信息?(yes/no)")
        flag = 0
        while flag == 0:
            if ans == 'yes':
                flag = 1
            elif ans == 'no':
                flag = 2
            else:
                ans = input("*请输入yes或者no:")
        if flag == 1:
            continue
        else:
            break


def add():
    student_list = []
    while True:
        print("\n=============================================")
        id1 = input("*请输入学生的学号(结束输入请输入0):")
        if not id1 or id1 == '0':
            break
        name = input("*请输入学生的姓名:")
        if not name:
            break
        try:
            home = input("*请输入学生的户籍:")
            numb = input("*请输入学生的手机号:")
        except:
            print("*输入格式错误,请重新输入:")
            continue

        student = {'id': id1, 'name': name, 'home': home, 'numb': numb}
        student_list.append(student)
        save(student_list)
        student_list = []
        print("\n*学生信息添加成功!\n")

        ans = input("*是否继续添加学生信息?(yes/no)")
        flag = 0
        while flag == 0:
            if ans == 'yes':
                flag = 1
            elif ans == 'no':
                flag = 2
            else:
                ans = input("*请输入yes或者no:")
        if flag == 1:
            continue
        else:
            break


def save(lst):
    try:
        stu = open(filename, 'a', encoding='utf-8')
    except:
        stu = open(filename, 'w', encoding='utf-8')
    for i in lst:
        stu.write(str(i) + '\n')
    stu.close()


def delete():
    while True:
        stu_id = input("*请输入要删除学生的学号:")
        if stu_id:
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8') as file:
                    stu_lst = file.readlines()
            else:
                stu_lst = []
            flag = False
            if stu_lst:
                with open(filename, 'w', encoding='utf-8') as wfile:
                    for i in stu_lst:
                        d = dict(eval(i))
                        if d['id'] != stu_id:
                            wfile.write(str(d) + '\n')
                        else:
                            flag = True
                    if flag:
                        print('\n*该学生信息已被删除!')
                    else:
                        print('\n*该学生信息不存在!')
            else:
                print("\n*暂无学生信息!")

            ans = input("\n*是否要继续删除学生信息?(yes/no)")
            flag = 0
            while flag == 0:
                if ans == 'yes':
                    flag = 1
                elif ans == 'no':
                    flag = 2
                else:
                    ans = input("*请输入yes或者no:")
            if flag == 1:
                continue
            else:
                break


# def show():
#     while True:
#         stu_sum = 0
#         if os.path.exists(filename):
#             with open(filename, 'r', encoding='utf-8') as file:
#                 stu_lst = file.readlines()
#         else:
#             stu_lst = []
#         if stu_lst:
#             print("\n=====================================================================")
#             for i in stu_lst:
#                 stu_sum = stu_sum + 1
#                 d = dict(eval(i))
#                 print("%s:%-16s %s:%-10s %s:%-10s %s:%-20s" % (
#                     'id', d['id'], 'name', d['name'], 'home', d['home'], 'numb', d['numb']))
#             print("=====================================================================")
#             print("                                                           总人数:%d" % stu_sum)
#
#         else:
#             print("\n*暂无学生信息!")
#         ans = input("\n*请输入back返回主菜单,remake重新查询:")
#         flag = 0
#         while flag == 0:
#             if ans == 'remake':
#                 flag = 1
#             elif ans == 'back':
#                 flag = 2
#             else:
#                 ans = input("*请输入back或者remake:")
#         if flag == 1:
#             continue
#         else:
#             break


def show():
    while True:
        if os.path.exists(filename):
            stu_new = []
            stu_sum = 0
            with open(filename, 'r', encoding='utf-8') as file:
                stu_lst = file.readlines()
                if stu_lst:
                    choice = input("*请输入排序方式(0为升序,1为降序):")
                    while True:
                        if choice == '0' or choice == '1':
                            break
                        else:
                            choice = input("*请输入0或者1:")
                    if choice == '1':
                        flag = True
                    elif choice == '0':
                        flag = False
                    stu_new = []
                    for i in stu_lst:
                        d = dict(eval(i))
                        stu_new.append(d)
                    stu_new.sort(key=lambda x: int(x['id']), reverse=flag)
                    print("\n=====================================================================")
                    for i in stu_new:
                        d = dict(i)
                        stu_sum = stu_sum + 1
                        print("%s:%-16s %s:%-10s %s:%-10s %s:%-20s" % (
                            'id', d['id'], 'name', d['name'], 'home', d['home'], 'numb', d['numb']))
                    print("=====================================================================")
                    print("                                                           总人数:%d" % stu_sum)
                else:
                    print("\n*抱歉,暂无学生信息!")
                    break
        else:
            print("\n*抱歉,暂无学生信息!")
        ans = input("\n*请输入back返回主菜单,remake重新查询:")
        flag = 0
        while flag == 0:
            if ans == 'remake':
                flag = 1
            elif ans == 'back':
                flag = 2
            else:
                ans = input("*请输入back或者remake:")
        if flag == 1:
            continue
        else:
            break


if __name__ == '__main__':
    main()



码后感言:在敲这段码的时候出现过两个搞心态的bug来跟大家分享一下,在一开始录入信息的时候,即add函数中,输入numb时我把input转成int型,导致后来查信息时只能用id,name,home来查,一用numb查询时就会查不到该学生,自己设计的回复快把自己气死,最后在机缘巧合下看了一眼文本,发现是数据类型的问题,search函数中直接用key(字符串)存要查的数据,d[‘numb’]和key数据类型不同根本不会相等所以导致一直查询不到。第二个bug就是修改信息时,当时文件写入函数我写成了wfile.write(str(d) + ‘\n’)会导致文件写入时多一个换行符,再进行查询时会导致程序报错,我把后面的’\n’删掉后就解决了。这两个bug属实搞到心态了,不过最终都能解决还是很令人开心的。
OK,感谢你能看到最后。see you~
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值