天天看点

python学习源码分享:简易学生信息成绩管理系统

作者:琴棋书画788
python学习源码分享:简易学生信息成绩管理系统
#coding:'utf-8'
#学生成绩管理系统
#Python练习
import os
import re
filename='student.txt'
def menu():
    #输入出菜单
    print('‘’※※※※※※※※※学生信息成绩管理系统 ※※※※※※※※※※※※\n'
          '  ╔════════════════════☆功能菜单☆═════════════════════╗\n'
          '  ║                   1.录入学生信息                    ║\n'
          '  ║                   2.查找学生信息                    ║\n'
          '  ║                   3.删除学生信息                    ║\n'
          '  ║                   4.修改学生信息                    ║\n'
          '  ║                   5.排       序                    ║\n'
          '  ║                   6.统计学生总数                    ║\n'
          '  ║                   7.显示学生信息                    ║\n'
          '  ║                   0.退 出 系 统                    ║\n'
          '  ╚═════════════════程序设计:琴棋书画═══════════════════╝''')


#主函数
def main():
    ctrl=True
    while ctrl:
        menu()
        option=input('请选择操作序号:')
        option_str=re.sub('\D','',option)
        s=['0','1','2','3','4','5','6','7']
        if option_str in s:
            option_int=int(option_str)
            if option_int==0:
                print('您已经退出学生信息成绩管理系统!')
                ctrl=False
            elif option_int==1:
                insert()
            elif option_int==2:
                search()
            elif option_int==3:
                delete()
            elif option_int==4:
                modify()
            elif option_int==5:
                 sort()
            elif option_int==6:
                 total()
            elif option_int==7:
                show()

#录入学生信息
def insert():
    studentlist=[]
    mark=True
    while mark:
        id=input('请输入学生ID(身份证号码):')
        if not id:
            break
        name=input('请输入学生姓名:')
        if not name:
            break
        sex = input('请输入学生性别:')
        phone = input('请输入联系电话:')
        try:
            chinese=input('请输入语文成绩:')
            math = input('请输入数学成绩:')
            english=input('请输入英语成绩:')
            zh = input('请输入综合成绩:')
        except:
            print('输入无效,不是整数型数值......重新录入信息')
            continue
        student={'ID':id,'姓名':name,'性别':sex,'电话':phone,'语文':chinese,'数学':math,'英语':english,'综合':zh}
        studentlist.append(student)
        inputmark=input('是否继续添加?(y/n)')
        if inputmark=='y'or inputmark=='Y':
            mark=True
        else:
            mark=False
    save(studentlist)
    print('学生信息录入完毕!!')
#保存学生信息到文件
def save(student):
    with open(filename,'a+',encoding='utf-8') as file:
        for info in student:
            file.write(str(info)+'\n')
#查找学生
def search():
    mark=True
    student_query=[] #保存查找到的学生信息至列表
    while mark:
        id=''
        name=''
        if os.path.exists(filename):
            mode=input('按ID查找输入1;按姓名查找输入2:')
            if mode=='1':
                    id=input('请输入要查找学生的id:')
            elif mode=='2':
                name=input('请输入要查找学生的姓名:')
            else:
                print('你的输入有误,请重新输入。')
                search()
            with open(filename,'r',encoding='utf-8') as file:
                student=file.readlines()
                for list in student:
                    d=dict(eval(list))
                    if id!='':
                        if d['ID']==id:
                            student_query.append(d)
                    elif name is not'':
                        if d['姓名']==name:
                            student_query.append(d)

                show_student(student_query)
                student_query.clear()
                inputMark=input('是否继续查询?y/n:')
                if inputMark=='y' or inputMark=='Y':
                    mark=True
                else:
                    mark=False
        else:
                print('暂未保存数据信息......')
                return
def delete():
    mark=True
    while mark:
        id=input('请输入你要删除学生的身份证号码:')
        if id is not '':
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf=8') as rfile:
                    student_old=rfile.readlines()
            else:
                student_old=[]
            ifdel=False
            if student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                    d={}
                    for list in student_old:
                        d=dict(eval(list))
                        if d['ID']!=id:
                            wfile.write(str(d)+'\n')
                        else:
                            ifdel=True
                    if ifdel==True:
                        print('ID是%s的学生信息已经被册除......'%id)
                    else:
                        print('没有找到ID为%s的学生信息......'%id)
            else:
                print('无学生信息.....')
                break
            show()
            inputmark=input('是否继续删除?(y/n):')
            if inputmark=='y' or inputmark=='Y':
                mark=True
            else:
                mark=False

def modify():
    while True:
        studentid = input('请输入要修改的学生ID(身份证号码):')
        if studentid:
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as rfile:
                    student_old=rfile.readlines()
            else:
                student_old=[]
            if student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                    d={}
                    for list in student_old:
                        d=dict(eval(list))
                        if studentid==d['ID']:
                            answer=input('已找到学生信息,确定要修改吗?y/n:')
                            flag=False
                            if answer:
                                d['ID']=input('请输入身份证号:')
                                d['姓名']=input('请输入姓名:')
                                d['性别']=input('请输入性别:')
                                d['电话']=input('请输入联系电话:')
                                d['语文'] = input('请输入语文成绩:')
                                d['数学'] = input('请输入数学成绩:')
                                d['英语'] = input('请输入英语成绩:')
                                d['综合'] = input('请输入综合成绩:')
                                list=str(d)
                                wfile.write(list+'\n')
                                flag=True
                            else:
                                wfile.write(str(d) + '\n')
                        else:
                            wfile.write(str(d) + "\n")
                    if flag:
                        print('修改成功!')
                    else:
                        print('修改失败......')
                    mark=input('是否继续修改其他学生信息?(Y/n)')
                    if mark=='y' and mark=='Y':
                        continue
                    else:
                        break
        else:
            print('输入错误......')


def sort():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_old=rfile.readlines()
            student_new=[]
            for list in student_old:
                d=dict(eval(list))
                student_new.append(d)
    else:
        return
    order=input('请选择(0、升序排序;1、降序排序:)')
    if order=='0':
        orderBool=False
    elif  order=='1':
        orderBool=True
    else:
        print('您的输入有误,请重新输入!')
        sort()
    mode=input('请选择排序方式(1按语文成绩排序;2按数学成绩排序;3按英语成绩排序;4按综合成绩排序;5按总成绩排序):')
    if mode=='1':
        student_new.sort(key=lambda x:x['语文'],reverse=orderBool)
    elif mode=='2':
        student_new.sort(key=lambda x: x['数学'], reverse=orderBool)
    elif mode=='3':
        student_new.sort(key=lambda x: x['英语'], reverse=orderBool)
    elif mode=='4':
        student_new.sort(key=lambda x: x['综合'], reverse=orderBool)
    elif mode=='5':
        student_new.sort(key=lambda x: x['语文']+x['数学']+x['英语']+x['综合'], reverse=orderBool)
    else:
        print('您的输入有误,请重新选择......')
        show()
    show_student(student_new)

def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_old=rfile.readlines()
            if student_old:
                print('一共有%d名学生!'%len(student_old))
            else:
                print('还没有录入学生信息!!')
    else:
        print('暂没有保存的数据信息.....')
def show():
    student_list=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_old=rfile.readlines()
        for list in student_old:
            d=dict(eval(list))
            student_list.append(d)
        if student_list:
            show_student(student_list)
    else:
        print('暂未保存数据信息......')

#保存到列表中的学生信息显示出来
def show_student(studentlist):
    if not studentlist:
        print('没有数据信息!!.......\n')
        return
    title='{:18}\t{:6}\t{:4}\t{:12}{:6}\t{:8}\t{:8}\t{:8}\t{:8}'
    print(title.format('ID'.center(18),'姓名','性别'.center(4),'联系电话','语文成绩','数学成绩','英语成绩','综合成绩','总成绩'))
    date='{:18}\t{:8}{:2}\t{:14}\t{:8}\t{:8}\t{:8}\t{:8}\t{:4}'
    for info in studentlist:
        print(date.format(info.get('ID'),
                          info.get('姓名'),
                          info.get('性别'),
                          info.get('电话'),
                          info.get('语文'),
                          info.get('数学'),
                          info.get('英语'),
                          info.get('综合'),
                          int(info.get('语文'))+int(info.get('数学'))+int(info.get('英语'))+int(info.get('综合'))))



if __name__=='__main__':
    main()