HIT暑假python作业一《学生信息管理系统》

这是一个使用Python实现的学生信息管理系统,具备录入、查找、删除、修改学生信息等功能,并能进行成绩排序及统计学生总数。系统通过文本文件存储数据。

HIT暑假python作业一《学生信息管理系统》


运行确保同目录下要有一个homework1.txt文件,
这样程序才有内容来源读取
初始化时homework1.txt中内容应为{}

本地运行效果
在这里插入图片描述
生成exe文件后运行效果
在这里插入图片描述

# -*- coding: utf-8 -*-
import json
def readin():
    global info
    with open('homework1.txt','r',encoding='utf-8-sig') as f:
        info = json.load(f)
def printmenu():
    print ("""
    ╔———————学生信息管理系统————————╗
    │                                              │
    │   =============== 功能菜单 ===============   │
    │                                              │
    │   1 录入学生信息                             │
    │   2 查找学生信息                             │
    │   3 删除学生信息                             │
    │   4 修改学生信息                             │
    │   5 排序                                     │
    │   6 统计学生总人数                           │
    │   7 显示所有学生信息                         │
    │   0 退出系统                                 │
    │  ==========================================  │
    │  说明:通过数字选择菜单                      │
    ╚———————————————————————╝
""")
    x = input('请选择: ')
    return x
def beforeexit():
    with open('homework1.txt','w',encoding='utf-8') as f:
        json.dump(info, f, ensure_ascii=False)
def insert(x,y):
    circle = 'y'
    while circle == 'y':
        while True:
            if y==0:
                x = input('请输入ID(如1001):')
                x1 = input('请输入名字:')
                x2 = input('请输入英语成绩:')
                if not x2.isnumeric():
                    print("输入无效,不是整型数值....重新录入信息")
                    continue
                x3 = input('请输入Python成绩:')
                if not x3.isnumeric():
                    print("输入无效,不是整型数值....重新录入信息")
                    continue
                x4 = input('请输入C语言成绩:')
                if not x4.isnumeric():
                    print("输入无效,不是整型数值....重新录入信息")
                    continue
            break
        info[x] = [x1,x2,x3,x4,str(int(x2)+int(x3)+int(x4))]
        circle=input("是否继续添加?(y/n): ")
    else:
        print('学生信息录入完毕!!!')
        beforeexit()
def find():
    circle = 'y'  # 判断是否需要继续查询
    while (circle == 'y'):
        x = input('按ID查找输入1;按姓名查找输入2: ')
        k = 0
        if x=='1':
            y = input('请输入学生ID: ')
            try:
                show([(y,info[y])])
                k = 1
            except:
                pass
        elif x=='2':
            y = input('输入名字:')
            for z in info.items():
                if z[1][0] == y:
                    show([(z[0], z[1])])
                    k = 1
        if k == 0:
            print('(o@.@o) 无数据信息 (o@.@o)')
        circle = input("是否继续查询?(y/n): ")
def delete():
    a = 'y'
    while a == 'y':
        x= input('请输入要删除的学生ID: ')
        try:
          del info[x]
          print('ID为 {} 的学生信息已经被删除...'.format(x))
        except:
            print('没有找到ID为{}的学生信息'.format(x))
        show(info.items())
        a = input('是否继续删除?(y/n): ')
    else:
        beforeexit()
def change():
    show(list(info.items()))
    a = 'y'
    while a == 'y':
        x = input('请输入要修改的学生ID: ')
        if x in info.keys():
            print('找到了这名学生,可以修改他的信息!')
            x1 = input('请输入名字:')
            x2 = input('请输入英语成绩:')
            if not x2.isnumeric():
                print("输入无效,不是整型数值....重新录入信息")
                continue
            x3 = input('请输入Python成绩:')
            if not x3.isnumeric():
                print("输入无效,不是整型数值....重新录入信息")
                continue
            x4 = input('请输入C语言成绩:')
            if not x4.isnumeric():
                print("输入无效,不是整型数值....重新录入信息")
            info[x] = [x1, x2, x3, x4, str(int(x2) + int(x3) + int(x4))]
        else:
            print('未查询到该学生')
        a = input('是否继续修改其他学生信息?(y/n): ')
    else:
        beforeexit()
def mysort():
    show(list(info.items()))
    x = input('请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序): ')
    y = input('请选择(0升序;1降序): ')
    if x == '0' :
        x = '4'
    z = sorted(info.items(),key = lambda t:int(t[1][int(x)]),reverse=int(y))
    show(z)
def shownum():
    print("一共有 %d 名学生!"%len(info))
def show(preinfo):#preinfo是列表的,每个元素是元组(ID,[名字,成绩1,成绩2,成绩3,总成绩])
    print('\t'+'ID'.ljust(7," ")+'\t'+'名字'.ljust(9," ")+'英语成绩'+'\t'+'    Python成绩'+'\t'+'    C语言成绩'+'\t'+'      总成绩')
    for i in preinfo:
        print('\t'+i[0].ljust(7," ")+'\t'+i[1][0].ljust(10," ")+i[1][1].ljust(12," ")+'\t'+i[1][2].ljust(12," ")+'\t'+i[1][3].ljust(12," ")+'\t'+i[1][4])
if __name__ == '__main__':
    readin()
    # for i in info.items():
    #     info[i[0]][4]=str(int(info[i[0]][1])+int(info[i[0]][2])+int(info[i[0]][3]))
    while(True):
        select = printmenu()
        if select == '0':
            print('您已退出学生成绩管理系统!')
            break
        elif select == '1':
            insert(0,0)
        elif select =='2':
            find()
        elif select =='3':
            delete()
        elif select =='4':
            change()
        elif select =='5':
            mysort()
        elif select =='6':
            shownum()
        elif select =='7':
            show(list(info.items()))
        else:
            pass


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

for-nothing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值