简易的学生管理系统(并将py文件打包成exe文件)

目录

项目背景:

项目目的和意义

项目环境:

项目功能:

项目功能模块的代码实现:

主函数模块

菜单模块

插入数据模块

删除数据模块

保存数据模块

修改数据模块

查看数据模块

对数据进行排序(按照不同成绩升序或者降序)

统计人数模块

将py文件转为exe可执行文件

所需要使用的库:

目的

具体流程

项目成果展示

首先打开上一步的可执行文件,如下图所示:

插入学生信息

查看学生信息

对学生信息进行排序

升序排序(这里是按照python进行升序的,数据量较少不太明显)

降序排序(这里按照英语成绩降序)

修改学生信息

 删除学生信息

统计学生人数

项目不足:

优化方向


项目背景:

每个学校都有自己的教学管理系统,其中关于学生而言,最关心的就是学生关系系统,因为一般每个学生都会在该系统中对自己的成绩进行查看,对于老师来说就可以对学生的成绩进行更改和填入,有时候需要对成绩或者人数进行统计,而整个系统是如何进行编写的呢?

项目目的和意义

制作一个简易的学生管理系统,来实现对数据的增删改查操作,加强对python的基础知识了解程度

项目环境:

Pycharm,python,windows操作系统,

项目功能:

对学生信息进行增删改查,以及排序和统计学生人数等

项目功能模块的代码实现:

主函数模块

说明:用于将多个函数模块综合起来,按照输入的数来确定执行的功能

代码实现:

def main():

    while True:

        menu()

        choice=int(input('请选择:'))

        if choice in [0, 1, 2, 3, 4, 5, 6]:

            if choice==0:

                answer=input('您确定要退出系统吗:y/n')

                if answer=='y' or answer=='Y':

                    print('感谢您的使用!')

                    break

                else:

                    continue

            elif choice==1:

                insert()

            elif choice==2:

                modify()

            elif choice==3:

                delete()

            elif choice==4:

                show()

            elif choice==5:

                sort()

            elif choice==6:

                total()

菜单模块

说明:提供一个可供使用者选择的菜单

代码实现:

def menu():

    print('-----------------------学生管理系统-----------------------')

    print('------------------------功能菜单--------------------------')

    print('\t\t\t\t\t 1.录入学生信息')

    print('\t\t\t\t\t 2.修改学生信息')

    print('\t\t\t\t\t 3.删除学生信息')

    print('\t\t\t\t\t 4.查看学生信息')

    print('\t\t\t\t\t 5.排序学生信息')

    print('\t\t\t\t\t 6.统计学生人数信息')

    print('\t\t\t\t\t 0.退出学生系统')

    print('---------------------------------------------------------')

插入数据模块

说明:插入数据即将数据按照一定的规则通过键盘输入到窗口,并最终保存到相应的文件或者数据库中(这里保存到文件中),为了知道是否插入成功,需要设置相应的提示信息

代码实现:

def insert():

    student_list=[]

    while True:

        id=input('请输入学生id(如1001):')

        if not id:

            break

        name=input('请输入学生姓名(如张三):')

        if not name:

            break

        try:

            java=int(input('请输入Java成绩:'))

            python = int(input('请输入python成绩:'))

            English = int(input('请输入English成绩:'))

        except:

            print('输入无效,请重新输入')

            continue

        #保存信息到学生字典中

        student={'id':id, 'name': name, 'java': java, 'python': python, 'english':English}

        #将信息添加到学生列表中

        student_list.append(student)

        answer=input('请问您还要继续添加吗:y/n')

        if answer=='y':

            continue

        else:

            break

    #调用save()函数

    save(student_list)

    print('学生信息录入完毕!')

删除数据模块

说明:按照一定的规则删除满足该规则的数据,为了知道是否删除成功,添加一些相应的提示信息

代码实现:

def delete():

    while True:

        student_id=input('请输入您要删除的id:')

        if student_id!='':     #判断输入的id是否为空,也可表示为not id

            if os.path.exists(filename):    #判断这个id是否在filename中

                with open(filename,'r', encoding='utf-8') as f:

                    student_info = f.readlines()

            else:

                student_info=[]

            flag=False  #标记是否删除  默认是没有删除的

            if student_info:

                with open(filename, 'w', encoding='utf-8') as file:

                    d={}

                    for item in student_info:

                        d=dict(eval(item))   #将字符串转换为字典

                        if d['id']!=student_id:

                            file.write(str(d)+'\n')

                        else:

                            flag=True

                    if flag:     #flag=True

                        print(f'id为{student_id}的学生已被删除')

                    else:

                        print(f'没有找到id为{student_id}的学生信息')

            else:

                print('无学生信息!')

                break

            show()

        answer=input('是否继续删除:y/n')

        if answer=='y':

            continue

        else:

            break

保存数据模块

说明:对插入的数据或者已经修改之后的数据进行保存(方式多种,如csv,mysql数据库等,我这里使用的是使用文件存储)

代码实现:

def save(lst):

    try:

        stu_txt=open(filename,'a',encoding='utf-8')

    except:

        stu_txt=open(filename,'w',encoding='utf-8')

    for item in lst:

        stu_txt.write(str(item)+'\n')

    stu_txt.close()

修改数据模块

说明:首先按照一定的规则,找到符合该规则的数据,再对其进行修改,修改之后将数据进行保存处理,同样需要设置相应的提示信息,来表示修改是否成功

代码实现:

def modify():

    show()

    if os.path.exists(filename):

        with open(filename,'r',encoding='utf-8') as rfile:

            student_old = rfile.readlines()

    else:

        return

    student_id = input("请输入你要修改的学生ID")

    with open(filename,'w',encoding='utf-8') as wfile:

        for item in student_old:

            d= dict(eval(item))

            if d['id']==student_id:

                print("找到学生信息可以修改该学生的相关信息")

                while True:

                    try:

                        d['name'] = input("请输入姓名:")

                        d['java'] = int(input("请输入java成绩:"))

                        d['python'] = int(input("请输入python成绩:"))

                        d['english'] = int(input("请输入English成绩:"))

                    except:

                        print("你输入的信息有误,请重新输入!!!")

                    else:

                        break

                wfile.write(str(d)+'\n')

                print("信息学修改完毕")

            else:

                wfile.write(str(d)+'\n')

        answer = input("你是否还要继续修改其他学生的信息y/n\n")

        if answer=='y' or answer=='Y':

                modify()

查看数据模块

说明:对文件中的数据进行读取,并按照一定的规则输出展示,便于了解数据内容

代码实现:

def show_student(lst):

    if len(lst)==0:

        print("没有查到学生信息,无数据显示!!!")

        return

    else:

        #定义输出的格式

        format_title = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'

        print(format_title.format('ID','姓名','英语成绩','java成绩','python成绩','总成绩'))

        #定义内容展示格式

        format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'

        for item in lst:

            print(format_data.format(item.get('id'),

                                     item.get('name'),

                                     item.get('english'),

                                     item.get('java'),

                                     item.get('python'),

                                    int(item.get('english'))+int(item.get('java'))+int(item.get('python'))))



def show():

    student_lst = []

    if os.path.exists(filename):

        with open(filename,'r',encoding="utf-8") as rfile:

            student_info = rfile.readlines()

            for item in student_info:

                student_lst.append(eval(item))

            if student_lst:

                show_student(student_lst)

    else:

        print("你读取的文件不存在,请检查。。。")

对数据进行排序(按照不同成绩升序或者降序)

说明:按照一定的规则(这里是按照三门课成绩或者总成绩)进行升序或者降序输出

代码实现:

def sort():

    show()

    studeng_data =[]

    if os.path.exists(filename):

        with open(filename,'r',encoding="utf-8")as rfile:

            student = rfile.readlines()

            for item in student:

                studeng_data.append(eval(item))

    else:

        return

    px_type = int(input('请选择排序方式(升序:0/降序:1)'))

    if px_type==0:

        asc_or_desc_bool = False

    elif px_type==1:

        asc_or_desc_bool = True

    else:

        print("你输入有误,请重新输入!!!")

        sort()



    mode = int(input("请选择排序方式(1.按英语成绩排序,2.按python成绩排序,3.按java成绩排序,0.按总成绩排序,)"))

    if mode==1:

        studeng_data.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)

    elif mode==2:

        studeng_data.sort(key=lambda x:int(x['python']),reverse=asc_or_desc_bool)

    elif mode==3:

        studeng_data.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool)

    elif mode==0:

        studeng_data.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool)

    else:

        print("你输入的数字有误请重新输入!!!")

        sort()

    show_student(studeng_data)

统计人数模块

说明:因为文件中的数据是按照一行为一个学生信息,所以按照行数来进行人数的统计,最终得到人数的多少

代码实现:

def total():

    if os.path.exists(filename):

        with open(filename,'r',encoding="utf-8") as rfile:

            student_info = rfile.readlines()

            if student_info:

                print(f'一共有{len(student_info)}个学生')

            else:

                print("没有录入学生信息,请录入后再尝试!!!")

    else:

        print("暂时未保存学生的信息,请检查文件是否存在!!!")

将py文件转为exe可执行文件

所需要使用的库:

pyinstaller

目的

将一个py文件可以在多台计算机上执行,并且不需要其安装有python环境也能够成功执行。

具体流程

检查自己是否已经下载了pyinstaller库(首先以管理员的身份进入到windows的命令提示符窗口中,然后输入pip list)

 

如果有可以直接使用命令进行转换,如果没有先进行下载(首先以管理员的身份进入到windows的命令提示符窗口中,然后使用pip install pyinstaller进行下载),这里我已经安装过了。

 

安装完成之后,使用pyinstaller -F  ‘py文件的路径位置‘,然后回车等待出现如下图所示,即表示将py文件打包成exe可执行文件。

 查看该路径下是否有student_sys.exe文件

后期添加了数据之后会自动生成一个student.txt文件,用于存储数据的 

 

项目成果展示

首先打开上一步的可执行文件,如下图所示:

插入学生信息

查看学生信息

对学生信息进行排序

升序排序(这里是按照python进行升序的,数据量较少不太明显)

降序排序(这里按照英语成绩降序)

修改学生信息

 

 删除学生信息

统计学生人数

 

项目不足:

只是创建多个不同的功能函数,对其进行调用实现,

保存方式单一,不具备良好的可读性

操作窗口的单一,没有很好的可观性

不能实现通过网络,对数据进行操作

优化方向

可以添加相应的UI界面,将输入方式改为点击触发

修改保存方式,使用数据库进行保存,个人建议使用MYSQL数据库

可以将网络应用到该项目,使其能够通过网络实现数据操作

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值