学生管理系统

def main():
    while True:
        menu()
        choice = int(input('请输入你要选择的功能:'))
        if choice == 1:
            insert()
        elif choice == 2:
            search()
        elif choice == 3:
            delete()
        elif choice == 4:
            modify()
        elif choice == 5:
            total()
        elif choice == 6:
            show()
        elif choice == 0:
            ans = input('请问你是否要真的退出系统y/n:')
            if ans == 'y':
                break
            else:
                continue
def menu():
    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 0.退出')
    print('=============================================')

def insert():
    pass
def search():
    pass
def delete():
    pass
def modify():
    pass
def total():
    pass
def show():
    pass

if __name__ == "__main__":
    main()
  • insert

#思路:1、先循环插入数据(每个学生的成绩用字典存储,所有的数据又用列表lst[dict]) 2、插入完以后将数据存入txt文件,如果存在直接a追加,不存在w新建写入
def insert():
    student_list = []
    while True:
        id = input('请输入学生的id:')
        if id == '':
            break
        name = input('请输入学生的姓名:')
        if name == '':
            break
        try:
            english = input('请输入英语成绩:')
            python = input('请输入python成绩:')
            java = input('请输入java成绩:')
        except:
            print('输入格式有误请重新输入\n')
            continue
        student = {'id':id,'name':name,'english':english,'python':python,'java':java}
        student_list.append(student)
        #询问是否插入新的学生
        ans = input('请问是否继续插入学生信息y/n:')
        if ans == 'y':
            continue
        else:
            break
    #将stulist中的数据存入txt文件中
    save(student_list)
    print('学生信息插入完毕')
    
#思路:先判断文件是否存在,如果存在直接a追加,否则w新建
def save(lst):
    if os.path.exists(filename):
        with open(filename,'a',encoding='utf-8') as wfile:
            for item in lst:
                wfile.write(str(item)+'\n')
    else:
        with open(filename,'w',encoding='utf-8') as wfile:
            for item in lst:
                wfile.write(str(item)+'\n')
save函数还可以这么写
def save(lst):
    try:
        fp = open(filename,'a',encoding='utf-8')
    except:
        fp = open(filename,'w',encoding='utf-8')
    for i in lst:#遍历lst中所存的字典(字典中包含学生信息)
        fp.write(str(i)+'\n')
    fp.close()
  • search

#思路:1、先判断文件是否存在且有内容 2、如果有的话遍历学生信息然后把它转成字典形式 3、采用不同的模式进行匹配判断
def search():
    student_query = []#通过姓名查找有可能有多个人,因此需要列表
    while True:#查找是一个多次的功能,应该设置成循环
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8') as rfile:
                student = rfile.readlines()
                if student:#如果文件里面有内容进行判断
                    choice = input('请输入你的选择:0-用id查询,1-用姓名查询:')
                    if choice == '0':
                        id = input('请输入要查询的id:')
                    elif choice == '1':
                        name = input('请输入要查询的name:')
                    else:
                        print('输入有误请重新输入:')
                        continue
                    for item in student:
                        d = dict(eval(item))
                        if choice == '0':
                            if d['id'] == id:
                                student_query.append(d)
                        else:
                            if d['name'] == name:
                                student_query.append(d)
                    #显示查询到的结果
                    for item in student_query:
                        print(item)
                    #清空列表询问是否继续查询
                    student_query.clear()
                    ans = input('请问是否继续查询y/n:')
                    if ans == 'y':
                        continue
                    else:
                        break
                else:
                    print('文件内容为空')
                    return
        else:
            print('文件不存在')
            return
  • insert

#思路:删除的思路就是依次把内容拿出来进行遍历,如果不是要删除的元素就重新写入
def delete():
    while True:
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8') as rfile:
                student = rfile.readlines()
                flag = False
                if student:
                    with open(filename,'w',encoding='utf-8') as wfile:
                        id = input('请输入你要删除的id:')
                        for item in student:
                            d = dict(eval(item))
                            if d['id'] == id:
                                flag = True
                            else:#如果不是要删除的元素,重新写入文件即可
                                wfile.write(str(d)+'\n')
                else:
                    print('文件内容为空')
                    break
                if flag:
                    print('找到该生信息,已经删除')
                else:
                    print('未找到该生信息')
                #删除后看是否继续删除
                ans = input('请问是否继续删除y/n:')
                if ans == 'y':
                    continue
                else:
                    break    
        else:
            print('文件不存在')
            return
  • modify

#思路:和删除思路相似对内容进行遍历,如果找到了要修改的id就修改完写入文件,如果没找到直接写入
def modify():
    while True:
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8') as rfile:
                student = rfile.readlines()
                flag = False
                if student:
                    with open(filename,'w',encoding='utf-8') as wfile:
                        id = input('请输入你要修改的id:')
                        for item in student:
                            d = dict(eval(item))
                            if d['id'] == id:#找到了则对内容进行相应修改(修改后也要插入)
                                d['name'] = input('请输入新的名字:')
                                d['python'] = input('请输入新的py成绩:')
                                d['english'] = input('请输入新的english成绩:')
                                d['java'] = input('请输入新的java成绩:')
                                flag = True
                            #如果id相等说明找到了对内容修改完插入,否则直接插入
                            wfile.write(str(d)+'\n')
                else:
                    print('文件内容为空')
                    break
                if flag:
                    print('id={0}的学生信息已经修改成功'.format(id))
                else:
                    print('未找到学生id,请重新输入')
                    continue
                #删除后看是否继续修改
                ans = input('请问是否继续修改y/n:')
                if ans == 'y':
                    continue
                else:
                    break    
        else:
            print('文件不存在')
            return
  • total

#思路:把其按字典的格式存入列表,然后统计列表中元素的个数
def total():
    student_query = []
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            studen = rfile.readlines()
            if studen:
                for item in studen:#将学生转为字典格式存入列表中
                    student_query.append(eval(item))
            else:
                print('文件内容为空')
        print('共计学生{0}个'.format(len(student_query)))
        show()
    else:
        print('文件不存在')
        return
  • sort

#思路:1、首先应该把所有的数据读出来,以字典的形式放入列表中 2、选择排序的方式 
def sort():
    show()
    while True:
        student_quety = []
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8') as rfile:
                student = rfile.readlines()
                if student:
                    for i in student:#遍历文件将数据以字典的形式存入列表中
                        student_quety.append(eval(i))
                else:
                    print('文件内容未空,请插入数据')
                    break
                mode = input('请输入排序的模式:0-按英语,1-按python,2-按java,3-按总成绩排')
                choice = input('请选择:0代表升序,1代表降序:')
                if choice == '0':
                    choice_bool = False
                elif choice == '1':
                    choice_bool = True                

                if mode == '0':
                    student_quety.sort(key = lambda x:int(x['english']),reverse=choice_bool)
                elif mode =='1':
                    student_quety.sort(key = lambda x:int(x['python']),reverse=choice_bool)
                elif mode =='2':
                    student_quety.sort(key = lambda x:int(x['java']),reverse=choice_bool)
                elif mode =='3':
                    student_quety.sort(key = lambda x:int(x['java'])+int(x['python'])+int(x['english']),reverse=choice_bool)
        else:
            print('文件不存在')
            return
        #打印排序后的内容
        for i in student_quety:
            print(i)
        #删除后看是否继续排序
        ans = input('请问是否继续排序y/n:')
        if ans == 'y':
            continue
        else:
            break    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值