基于python的学生信息管理系统的设计与实现

小白学python,做了一个基础小系统,给大家分享一下(欢迎大神指导)

目录


步骤

1.设计要求

创建一个简单的学生信息管理系统,要求实现对学生信息的增、删、改、查功能,数据存储以文件的形式进行存储。

2.设计步骤

(1)导入os模块,创建一个文件夹用于存储数据

具体代码:

import os.path
filename='students.txt'

 (2)定义一个菜单函数

实现状态:

具体代码:

def main():
    while True:
        print('********学生信息管理系统********')
        print('**----------菜 单-----------**')
        print('**-----1.【查询学生信息】-----**')
        print('**-----2.【添加学生信息】-----**')
        print('**-----3.【修改学生信息】-----**')
        print('**-----4.【删除学生信息】-----**')
        print('**-----5.【统计学生信息】-----**')
        print('**-----6.【学生信息排序】-----**')
        print('**-----7.【显示所有信息】-----**')
        print('**-----0.【退出管理系统】-----**')
        print('******************************')
        input_choose=input('请输入命令:')
        if input_choose=='1':
            select()
        elif input_choose=='2':
            insert()
        elif input_choose=='3':
            modify()
        elif input_choose=='4':
            delete()
        elif input_choose=='5':
            count()
        elif input_choose=='6':
            sort()
        elif input_choose=='7':
            show()
        elif input_choose=='0':
            print('系统已退出!')
            break

(3)实现学生信息的录入功能

实现状态:

具体代码:

def insert():
    stu_list=[]
    while True:
        print('-----正在添加学生信息-----')
        try:
            ID=int(input('请输入学号:'))
            name=input('请输入姓名:')
            gender=input('请输入性别:')
            age=int(input('请输入年龄:'))
            nation=input('名族:')
            address=input('省份:')
        except:
            print('输入不规范,请请重新输入')
            continue
        insert_student={'学号':ID,'姓名':name,'性别':gender,'年龄':age,'名族':nation,'省份':address}
        stu_list.append(insert_student)
        print('添加成功!')
        again_input=input('是否继续添加学生信息? Y(是)/N(否):')
        if again_input=='Y' or again_input=='y':
            continue
        else:
            break
    save(stu_list)

(4)定义了一个save函数用于录入功能的调用

具体代码:

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

(5)查询功能的实现

实现状态:

具体代码:

def select():
    while True:
        input_id=''
        input_name=''

        stus_list=[]
        print('-----正在查询学生信息-----')
        if os.path.exists(filename):
            input_choose=input('1.【按照姓名查找】2.【按照学号查找】0.【退出查询】')
            if input_choose=='1':
                input_name=input('请输入学生姓名:')
            elif input_choose=='2':
                input_id=int(input('请输入学生学号:'))
            elif input_choose=='0':
                break
            else:
                print('没有该选项,请重新选择')
                continue
            with open('students.txt', 'r', encoding='utf-8') as f:
                names_list = f.readlines()
                for i in names_list:
                    name_dict =dict(eval(i))
                    if input_name!='':
                        if name_dict["姓名"]==input_name:
                            stus_list.append(name_dict)
                    elif input_id!='':
                        if name_dict["学号"]==input_id:
                            stus_list.append(name_dict)
            show_student(stus_list)
            stus_list.clear()
            again_input=input('是否继续查询?Y/N:')
            if again_input=='Y' or again_input=='y':
                continue
            else:
                print('已退出查询')
                break
        else:
            print('暂未存储任何学生信息')
            return

(6)定义一个show_student函数,用于数据显示的调用

具体代码:

def show_student(lst):
    if len(lst)==0:
        print('没有学生信息')
        return
    #定义标题显示格式
    format_title='{:^6}\t{:^10}\t{:^6}\t{:^6}\t{:^6}\t{:^6}'
    print(format_title.format('学号','姓名','性别','年龄','民族','省份'))
    print('--------------------------------------------------')
    #定义内容显示格式
    format_data = '{:^6}\t{:^10}\t{:^6}\t{:^6}\t{:^6}\t{:^6}'
    for i in lst:
        print(format_data.format(i.get('学号'),
                                 i.get('姓名'),
                                 i.get('性别'),
                                 i.get('年龄'),
                                 i.get('名族'),
                                 i.get('省份')))

(7)学生信息修改功能

实现状态:

修改后查询:

具体代码:

def modify():
    sele_list=[]
    print('------正在修改学生信息------')
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as f:
            read_lists=f.readlines()
    else:
        return
    mod_student=int(input('请输入要修改的学生的ID:'))
    with open(filename,'w',encoding='utf-8')as wf:
        for i in read_lists:
            d=dict(eval(i))
            if d['学号']==mod_student:
                print('已找到该学生信息:')
                sele_list.append(d)
                show_student(sele_list)
                while True:
                    try:
                        d['学号']=int(input('请修改id:'))
                        d['姓名']=input('请修改姓名:')
                        d['性别']=input('请修改性别:')
                        d['年龄']=int(input('请修改年龄:'))
                        d['名族']=input('请修改民族:')
                        d['省份']=input('请修改省份:')
                    except:
                        print('输入不规范,请重新输入')
                    else:
                        break
                wf.write(str(d)+'\n')
            else:
                wf.write(str(d)+'\n')
        answer=input('是否继续修改?Y/N:')
        if answer=='Y' or answer=='y':
            modify()

(8)删除功能

实现状态:

具体代码:

def delete():
    while True:
        print('---------正在执行删除功能----------')
        dele_stu = int(input('请输入要删除的学生的ID:'))
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8')as rf:
                old_students=rf.readlines()
        else:
            old_students=[]
        flag=False
        if old_students:
            with open(filename,'w',encoding='utf-8')as wf:
                for i in old_students:
                    d=dict(eval(i))
                    if d['学号']!=dele_stu:
                        wf.write(str(d)+'\n')
                    else:
                        flag=True
                if flag:
                    print('删除成功!')
                else:
                    print(f'未找到ID为{dele_stu}的学生信息')
        else:
            print('系统暂无学生数据')
        result=input('是否还要删除学生信息?Y/N:')
        if result=='N'or result=='n':
            break

(9)数据统计功能

实现状态:(统计功能就简单做了个数量统计)

具体代码:

def count():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as f:
            students=f.readlines()
            if students:
                print(f'一共有【{format(len(students))}】名学生信息.')
            else:
                print('暂无学生信息')
    else:
        print('系统暂无数据信息')

(10)学生信息排序功能(这里可以按照ID和年龄进行升序和降序的排序)

实现状态:

具体代码:

def sort():
    while True:
        print('--------正在执行排序功能----------')
        if os.path.exists(filename):
            with open(filename,'r',encoding='utf-8')as rf:
                old_list=rf.readlines()
            new_list=[]
            for i in old_list:
                d=dict(eval(i))
                new_list.append(d)
        else:
            return
        choose_sort=input('请选择排序方式:1【升序】2.【降序】')
        if choose_sort=='1':
            choose_sort_bool=False
        elif choose_sort=='2':
            choose_sort_bool=True
        else:
            print('没有该选项')
            break
        mode=input('请选择排序方式:1.【按ID排序】2.【按年龄排序】')
        if mode=='1':
            new_list.sort(key=lambda new_list:new_list['学号'],reverse=choose_sort_bool)
        elif mode=='2':
            new_list.sort(key=lambda new_list:new_list['年龄'],reverse=choose_sort_bool)
        else:
            print('没有该选项')
            break
        show_student(new_list)
        result=input('是否重新排序?Y/N:')
        if result=='N'or result=='n':
            break

(11)显示所有学生信息

实现状态:

具体代码:

def show():
    all_list=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rf:
            students=rf.readlines()
        for i in students:
            all_list.append(eval(i))
        if students:
            show_student(all_list)
    else:
        print('系统暂无数据')

(12)再调用main()函数就可以啦

if __name__ == '__main__':
    main()

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
xiaoxingxing的头像xiaoxingxing管理团队
上一篇 2023年6月26日
下一篇 2023年6月26日

相关推荐