Python实战-学生信息管理系统

学生信息管理系统

from os.path import exists

fileName='student.txt'

def main():
    while True:
        menu()
        try:
            choice=int(input('请选择:'))
            if choice in range(0,9):#[0,1,2,3,4,5,6,7,8]:
                if choice==0:
                    answer=input('您确定要退出吗?y/n:')
                    if answer=='y' or answer=='Y':
                        print('感谢您的使用!')
                        break
                    else:
                        continue
                elif choice==1:
                    insert()
                elif choice==2:
                    search()
                elif choice==3:
                    delete()
                elif choice==4:
                    modify()
                elif choice==5:
                    show_all()
                elif choice==6:
                    sort()
                elif choice==7:
                    total_num()
                elif choice==8:
                    del_all()
            else:
                print('输入有误!')
                continue
        except:
            print('输入有误!请重新输入')
            continue

def menu():
    print('=============================学生信息管理系统=============================')
    print('---------------------------------功能菜单---------------------------------')
    print('\t\t\t     1.添加学生信息')
    print('\t\t\t     2.查找学生信息')
    print('\t\t\t     3.删除学生信息')
    print('\t\t\t     4.修改学生信息')
    print('\t\t\t     5.显示所有学生信息')
    print('\t\t\t     6.排序')
    print('\t\t\t     7.统计学生总数')
    print('\t\t\t     8.清空所有学生信息')
    print('\t\t\t     0.退出')
    print('-------------------------------------------------------------------------')

def insert():
    stu_lst=[]
    while True:
        id=input('请输入学生id:')
        if not id:
            continue
        name=input('请输入学生姓名:')
        if not name:
            continue
        try:
            Python_score=int(input('请输入Python成绩:'))
            C_score=int(input('请输入C语言成绩:'))
            Cpp_score=int(input('请输入C++成绩:'))
        except:
            print('非整型数据,输入有误!')
            continue
        #将学生信息保存到字典中
        stu={'id':id,'name':name,'Python_score':Python_score,'C_score':C_score,'Cpp_score':Cpp_score}
        #将学生信息添加到列表中
        stu_lst.append(stu)
        #是否继续添加
        answer=input('是否继续添加?y/n:')
        if answer=='y' or answer=='Y':
            continue
        else:
            break
    save(stu_lst)
    print('学生信息添加完毕!\n')

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


def search():
    stu_query=[]
    while True:
        id=''
        name=''
        if exists(fileName):
            mode=input('请输入要查找的方式(1.按id查找。2.按姓名查找。):')
            if mode=='1':
                id=input('请输入学生id:')
            elif mode=='2':
                name=input('请输入学生姓名:')
            else:
                print('输入有误,请重新输入!')
                search()
            with open(fileName,'r',encoding='utf-8') as file:
                stu=file.readlines()
            if stu:
                for i in stu:
                    d=dict(eval(i))
                    if id!='':
                        if d['id']==id:
                            stu_query.append(d)
                    elif name!='':
                        if d['name']==name:
                            stu_query.append(d)
                show_stu(stu_query)
                stu_query.clear()

                answer=input('是否继续查找?y/n:')
                if answer=='y' or answer=='Y':
                    continue
                else:
                    break
            else:
                print('文件没有内容\n')
                return
        else:
            print('文件不存在\n')
            return

def delete():
    if exists(fileName):
        while True:
            del_id=input('请输入要删除的学生id:')
            if del_id!='':
                with open(fileName,'r',encoding='utf-8') as file:
                    stu_old=file.readlines()
            flag=False
            if stu_old:
                with open(fileName,'w',encoding='utf-8') as wfile:
                    d={}
                    for i in stu_old:
                        d=dict(eval(i))
                        if d['id']!=del_id:
                            wfile.write(str(d)+'\n')
                        else:
                            flag=True
                    if flag:
                        print(f'id为{del_id}的学生信息已被删除了')
                    else:
                        print(f'未找到id为{del_id}的学生信息')
            else:
                print('文件没有内容\n')
                break
            show_all()
            answer=input('是否继续删除?y/n:')
            if answer=='y' or answer=='Y':
                continue
            else:
                break
    else:
        print('文件不存在\n')
        return

def modify():
    show_all()
    if exists(fileName):
        with open(fileName,'r',encoding='utf-8') as file:
            stu_old=file.readlines()
            if stu_old:
                mod_id=input('请输入要修改的学生id:')
                flag=False
                with open(fileName,'w',encoding='utf-8') as wfile:
                    d={}
                    for i in stu_old:
                        d=dict(eval(i))
                        if d['id']==mod_id:
                            print(f'已找到id为{mod_id}的学生信息,可以开始修改了')
                            while True:
                                try:
                                    d['name']=input('请输入学生姓名:')
                                    d['Python_score']=int(input('请输入Python成绩:'))
                                    d['C_score']=int(input('请输入C语言成绩:'))
                                    d['Cpp_score']=int(input('请输入C++成绩:'))
                                except:
                                    print('输入有误,非整型数据,请重新输入')
                                else:
                                    break
                            flag=True
                            print('修改成功')
                        wfile.write(str(d)+'\n')
                if flag:
                    show_all()
                else:
                    print('修改失败,输入有误')
                answer=input('是否继续修改?y/n:')
                if answer=='y' or answer=='Y':
                    modify()
                else:
                    return
            else:
                print('文件没有内容\n')
                return
    else:
        print('文件不存在\n')
        return

def show_stu(lst):
    if len(lst)==0:
        print('未查询到该学生的信息\n')
        return
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('id','姓名','Python成绩','C语言成绩','C++成绩','总成绩'))
    format_data='{:^6}\t{:^12}\t{:^8}\t{:^12}\t{:^10}\t{:^11}'
    for i in lst:
        print(format_data.format(i.get('id'),
                                 i.get('name'),
                                 i.get('Python_score'),
                                 i.get('C_score'),
                                 i.get('Cpp_score'),
                                 int(i.get('Python_score'))+int(i.get('C_score'))+int(i.get('Cpp_score'))))
    print('\n')

def show_all():
    if exists(fileName):
        stu_show=[]
        with open(fileName,'r',encoding='utf-8') as file:
            stu=file.readlines()
        if stu:
            for i in stu:
                d=dict(eval(i))
                stu_show.append(d)
            show_stu(stu_show)
        else:
            print('文件没有内容\n')
            return
    else:
        print('文件不存在\n')
        return

def sort():
    if exists(fileName):
        with open(fileName,'r',encoding='utf-8') as file:
            stu=file.readlines()
        if stu:
            stu_new=[]
            d={}
            for i in stu:
                d=dict(eval(i))
                stu_new.append(d)
        else:
            print('文件没有内容\n')
            return
    else:
        print('文件不存在\n')
        return
    
    asc_or_desc=input('请选择要排序的方式(1.升序。2.降序。):')
    if asc_or_desc=='1':
        asc_or_desc_bool=False
    elif asc_or_desc=='2':
        asc_or_desc_bool=True
    else:
        print('输入有误,请重新输入!')
        sort()
    
    while True:
            mode=input('请选择要排序的内容(1.Python。2.C语言。3.C++。0.总成绩。):')
            if mode=='1':
                stu_new.sort(key=lambda stu_new:int(stu_new['Python_score']),reverse=asc_or_desc_bool)
                break
            elif mode=='2':
                stu_new.sort(key=lambda stu_new:int(stu_new['C_score']),reverse=asc_or_desc_bool)
                break
            elif mode=='3':
                stu_new.sort(key=lambda stu_new:int(stu_new['Cpp_score']),reverse=asc_or_desc_bool)
                break
            elif mode=='0':
                stu_new.sort(key=lambda stu_new:int(stu_new['Python_score'])+int(stu_new['C_score'])+int(stu_new['Cpp_score']),reverse=asc_or_desc_bool)
                break
            else:
                print('输入有误,请重新输入!')
    show_stu(stu_new)
    answer=input('是否保存排序?y/n:')
    if answer=='y' or answer=='Y':
        with open(fileName,'w',encoding='utf-8') as file:
            for i in stu_new:
                file.write(str(i)+'\n')
    else:
        return


def total_num():
    if exists(fileName):
        with open(fileName,'r',encoding='utf-8') as file:
            stu=file.readlines()
        if stu:
            print(f'一共有{len(stu)}名学生\n')
        else:
            print('文件没有内容\n')
            return
    else:
        print('文件不存在\n')
        return

def del_all():
    if exists(fileName):
        answer=input('是否删除全部信息?y/n:')
        if answer=='y' or answer=='Y':
            with open(fileName,'w',encoding='utf-8') as file:
                file.write('')
        else:
            return
    else:
        print('文件不存在\n')
        return

if __name__ =='__main__':
    main()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值