2021-06-04

关于图书馆无聊的时候写的Python程序设计

就写网上都比较爱写的学生成绩管理系统

  • 前提
    • 不导入额外的第三方库
    • 我使用的是Vsc来编写的
    • 建议使用Pycharm,毕竟需要输入的时候,Vsc只能在终端输入

导入对应的库,设置简易小动画

# 设置小动画,便于加载美观
def ani(info,start,end):
    for  x in '--------->>>':
        time.sleep(random.uniform(start,end))
        print(x,end='')
    else:
        time.sleep(0.2)
        print(f"{info}成功!",end="")   
    
    print("\n")
  • 不得不说,是由一点点的粗糙….
  • 如果你有好的简易小动画可以交流交流

设置函数

  1. 设置小菜单
menu_ls = """
                ************************
                **  学生成绩管理系统  **
                **      作者:一远.       **
                **                               **
                **  增加学生信息 ---1 **
                **  查询学生信息 ---2 **
                **  输出学生信息 ---3 **
                **  退出管理系统 ---0 **
                """
print(menu_ls)
#菜单
def menu():

    while 1:
        ipt = input("请输入对应的功能键(数字):")
        try:
            if ipt in "1 2 3 4 5 0".split(" "):
                return int(ipt)
            else:
                print("输入超出范围!请重新输入!")
        except:
            print("输入错误,重新输入")
  1. 对于主函数
#主函数1
def main():
    # 进行菜单选择0-5
    ipt=1
    while ipt:
        ipt = menu()
        if ipt == 0:
            return 0
        elif ipt == 1:
            end_file()
        elif ipt == 2:
            read_file(2)
        elif ipt == 3:
            read_file(1)

        ipt=int(input("是否继续运行Y:1/n:0-->"))
if __name__ == '__main__':
    main()
  1. 设置end_file的小函数
#提交
def write_file():
    print("-->增加学生信息")
    infos=[]
    for i in ['学号','姓名','性别','语文成绩','数学成绩','英语成绩']:
        infos.append(input(f"请输入{i}-->"))
    #如果想删除
    check=input("确认成功-->(q为销毁数据/其余按键均为确认成功):")
    if check=="q" or check=="Q":
        del infos
        ani("数据销毁",0.1,0.2)
    else:
        infos.append(str(sum([int(i) for i in infos[3:]])))  # 添加数据总和
        ani("数据提交",0.2,0.4)
        return infos
#写入文件
def end_file():
    with open("StdInfo.txt",'a+',encoding='utf-8')as fp:
        infos=write_file()
        fp.write('\n'+' '.join(infos))
        fp.write("\n")

        ani("数据写入",0.2,0.26)
  1. 设置读取的函数,考虑到设置查考函数时候,可以代码复用
#读取
def read_file(num):#输入姓名和代码
    with open("StdInfo.txt", 'r', encoding='utf-8')as fp:
        info_list=[]
        for x in fp.read().split('\n'):
            ls=tuple(x.split(' '))

            if ls[0]!='':#为了避免换行出现的split分割错误,引起的报错所以进行一个数据判断
                info_list.append(ls)
        #对于数据排序处理
        infos=sorted(info_list, key=lambda x: x[-1], reverse=True)

        if num==1:       
            #调用排名函数
            ranking=rank01(infos)
            rank(ranking,infos,"all")     #输出排名时候name默认为all 内容长度为全输出或者是前列输出,有内容长度决定的内容,所有数据
        else:
            #进行数据查找
            name=input("输入需要查询的学生姓名:")
            rank(len(infos),infos,name) #输出排名时候默认三个条件是 内容长度 ,内容,要查找的姓名

#数据排列,是否使用优先排名
def rank01(infos):
    #如果人数超过五人,则只输出前五名成绩;
    #如果人数小于五人,则只输出人数-1人的成绩
    #如果人数为1,则只输出这一人的成绩
    while 1:
        result = input("全部数据:a/前列排行:q-->:")
        if result == "a" or result == 'A':
                ranking = len(infos)
                break
        elif result == "q" or result == 'Q':
            if len(infos) >= 5:
                ranking = 5
            elif len(infos) < 5:
                ranking = len(infos)-1
            elif len(infos) == 1:
                ranking = 1
            break
        else:
            print("输入错误,请重新输入!")
    return ranking
    
# 定义排名函数,在查3找中寻找
def rank(ranking,infos,name):#可能会出现报错,删除后面的文本文件后的空行即可
    #格式化输出信息
    ani("数据准备", 0.2, 0.4)
    print("{:^5}{:<4}{:4}{:4}{:4}{:4}{:4}{:4}".format(
    "学号", '姓名', '性别', '语文', '数学', '英语', "总分", '排名'))
    count=0
    for r in range(ranking):
        #对于数据的查找
        # print(r,name,infos)
        if name == infos[r][1]:
            print("{:<7}{:5}{:^4}{:>4} {:^6} {:^4} {:^6} ".format(
        infos[r][0],infos[r][1], infos[r][2], infos[r][3], infos[r][4], infos[r][5], infos[r][-1]),r+1)
        count+=1

        #如果仅仅是输出排名
        if name=="all":
            print("{:<7}{:5}{:^4}{:>4} {:^6} {:^4} {:^6} ".format(
                infos[r][0], infos[r][1], infos[r][2], infos[r][3], infos[r][4], infos[r][5], infos[r][-1]), r+1)

    #对于数据的汇总
    print(f"总共{count}条数据")

这便是基础逻辑,但不得不说:做下来还有点费时间!

  • 主要是纠正了很多错误
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值