python第五天学习

Python学习

学生管理系统

  • 学生管理系统功能
    • 录入学生信息模块
    • 查找学生信息模块
    • 删除学生信息模块
    • 修改学生信息模块
    • 学生成绩排名模块
    • 统计学生总人数模块
    • 显示全部学生信息模块

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Nccxv5yT-1654696772160)(D:\Typora笔记\Python学习\第五天学习\功能模块.png)]

  • 系统开发环境
    • 操作系统:win10
    • Python解释器版本:Python3.8
    • 开发工具:pycharm
    • Python内置模块:os,re

整体代码:

# author:wwj
# time:2022/6/8 10:42
import time
import os.path

filename = r'studentInformation.txt'


def main():
    while True:
        menu()
        try:
            choice = int(input('请输入你想要使用的功能:\t'))
            if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
                if choice == 0:  # 退出系统
                    answer = input('确定要退出系统吗? y/n')
                    if answer.lower() == 'y':
                        print('谢谢你的使用')
                        break
                    else:
                        continue
                elif choice == 1:  # 录入学生信息
                    insert()
                elif choice == 2:  # 查找学生信息
                    search()
                elif choice == 3:  # 删除学生信息
                    delete()
                elif choice == 4:  # 修改学生信息
                    modify()
                elif choice == 5:  # 排序
                    sort()
                elif choice == 6:  # 统计学生总人数
                    total()
                elif choice == 7:  # 显示所有学生信息
                    show()
            else:
                print('输入的功能模块数字错误,请重新输入!')
                time.sleep(1)
                continue

        except:
            print('输入的字符非数字,请重新输入!')
            time.sleep(1)
            continue


# 功能菜单 函数
def menu():
    print('\t\t=================学生信息管理系统=================\t\t')
    print('\t\t-------------------功能菜单-------------------\t\t')
    print('\t\t\t\t\t\t1.录入学生信息')
    print('\t\t\t\t\t\t2.查找学生信息')
    print('\t\t\t\t\t\t3.删除学生信息')
    print('\t\t\t\t\t\t4.修改学生信息')
    print('\t\t\t\t\t\t5.排序')
    print('\t\t\t\t\t\t6.统计学生总人数')
    print('\t\t\t\t\t\t7.显示所有学生信息')
    print('\t\t\t\t\t\t0.退出系统')


# 录入学生信息 函数
def insert():
    student_list = []
    while True:
        ID = input('请输入学生的ID(如10001):\t')
        if not ID:  # ID 为空
            break
        name = input('请输入学生的姓名:\t')
        if not name:  # 姓名为空
            break
        try:
            english = int(input('请输入英语成绩:\t'))
            java = int(input('请输入java成绩:\t'))
            python = int(input('请输入python成绩:\t'))
        except:
            print('输入的成绩有误,不是整数,请重新输入!')
            time.sleep(1)  # 休眠1秒
            continue
        # 将录入的学生 保存到 字典中
        student = {'id': ID, 'name': name, 'english': english, 'java': java, 'python': python}
        # 将学生字典信息 添加到 学生列表中
        student_list.append(student)
        answer = input('是否继续添加学生信息 y/n \n')
        if answer.lower() == 'y':
            continue
        else:
            break

    # 将学生列表信息保存到 文件 当中
    save(student_list)
    print('学生信息录入完毕!!!')


def save(list1):
    with open(filename, 'a+', encoding='utf-8') as file:
        # file.write(list1)  这种写入不换行
        for item in list1:
            file.write(str(item) + '\n')


# 查找学生信息 函数
def search():
    while True:
        print('欢迎使用查找学生信息的功能模块')
        with open(filename, 'r', encoding='utf-8') as file:
            flag = False  # 标记是否查询到了,初始值为 False,表明还未查询到
            student_list = file.readlines()

        if not student_list:
            print('无学生信息')
            time.sleep(1)
            break
        else:
            print('模式1 表示 按学生ID 查询')
            print('模式2 表示 按学生姓名 查询')
            mode = input('请输入按哪种模式进行查询 输入 1 或 2')
            if mode == '1':
                ID = input('请输入你要查询的学生的ID\t')
                if ID != '':
                    if os.path.exists(filename):
                        for item in student_list:
                            temp = eval(item)
                            if temp['id'] == ID:
                                flag = True  # 表示已经查询到了
                                break  # 找到了就立马退出循环,不用再读文件了
                        if flag:
                            print(f'ID为{ID}的学生的信息为:\n')
                            print('该学生的ID为:{0}'.format(temp['id']))
                            print('该学生的姓名为:{0}'.format(temp['name']))
                            print('该学生的英语成绩为:{0}'.format(temp['english']))
                            print('该学生的java成绩为:{0}'.format(temp['java']))
                            print('该学生的python成绩为:{0}'.format(temp['python']))
                            print('该学生的总成绩为:{0}'.format(int(temp['english']) + int(temp['java']) + int(temp['python'])))
                        else:
                            print(f'没有找到ID为{ID}的学生信息\n')
                else:
                    print('不允许为空,请输入学生的ID:\t')
                    time.sleep(1)
            elif mode == '2':
                name = input('请输入你要查询的学生的姓名\t')
                if name != '':
                    if os.path.exists(filename):
                        for item in student_list:
                            temp = eval(item)
                            if temp['name'] == name:
                                flag = True  # 表示已经查询到了
                                break  # 找到了就立马退出循环,不用再读文件了
                        if flag:
                            print(f'姓名为{name}的学生的信息为:\n')
                            print('该学生的ID为:{0}'.format(temp['id']))
                            print('该学生的姓名为:{0}'.format(temp['name']))
                            print('该学生的英语成绩为:{0}'.format(temp['english']))
                            print('该学生的java成绩为:{0}'.format(temp['java']))
                            print('该学生的python成绩为:{0}'.format(temp['python']))
                            print('该学生的总成绩为:{0}'.format(int(temp['english']) + int(temp['java']) + int(temp['python'])))
                        else:
                            print(f'没有找到姓名为{name}的学生信息\n')
                else:
                    print('不允许为空,请输入学生的姓名:\t')
                    time.sleep(1)
            else:
                print('输入的模式有误,请重新输入!!')

        answer = input('是否继续查找学生信息 y/n \n')
        if answer.lower() == 'y':
            continue
        else:
            break


# 删除学生信息 函数
def delete():
    while True:
        ID = input('请输入你要删除的学生的ID\t')
        if ID != '':
            if os.path.exists(filename):
                with open(filename, 'r', encoding='utf-8') as file:
                    student_list = file.readlines()
            else:
                student_list = []
            flag = False  # 标记是否删除,初始值为 False,表明还未删除
            if student_list:
                with open(filename, 'w', encoding='utf-8') as wfile:
                    temp = {}
                    for item in student_list:  # in 后面不能接 wfile.readlines() ,这是以 w 的方式打开的
                        temp = eval(item)
                        if temp['id'] != ID:
                            wfile.write(str(temp) + '\n')
                        else:
                            flag = True  # 表示已经删除
                    if flag:
                        print(f'ID为{ID}的学生的信息已被删除')
                    else:
                        print(f'没有找到ID为{ID}的学生信息')
            else:
                print('无学生信息')
                time.sleep(1)
                break
            show()  # 删除之后重新显示学生信息
            answer = input('是否继续删除学生信息 y/n \n')
            if answer.lower() == 'y':
                continue
            else:
                break


# 修改学生信息 函数  这个函数没有按照 杨老师 视频中的来,根据自己的思路 写的
def modify():
    while True:
        try:
            with open(filename, 'r', encoding='utf-8') as rfile:
                student_list = rfile.readlines()  # 读取所有的学生信息
        except:
            print('不存在记录学生信息的文件!!!')
            time.sleep(1)
            break
        if student_list:
            show()  # 显示学生信息
            flag = False  # 记录学生信息是否已经修改
            ID = input('请输入要修改学生信息的ID:\t')
            with open(filename, 'w', encoding='utf-8') as wfile:
                for item in student_list:
                    temp = eval(item)
                    if temp['id'] == ID:
                        temp['name'] = input('请输入要修改学生信息的姓名:\t')
                        try:
                            temp['english'] = int(input('请输入该学生的英语成绩\t'))
                            temp['java'] = int(input('请输入该学生的java成绩\t'))
                            temp['python'] = int(input('请输入该学生的python成绩\t'))
                        except:
                            print('你输入的成绩不是整数,请重新输入!')
                            time.sleep(1)
                            break
                        wfile.write(str(temp) + '\n')
                        flag = True
                    else:
                        wfile.write(str(temp) + '\n')
            if flag:
                print('该学生的信息已经修改完成!!!')
                show()
                answer = input('是否还需要修改学生的信息 y/n \n')
                if answer.lower() == 'y':
                    continue
                else:
                    break
            else:
                print('没有找到该学生的信息!!!')
                continue
        else:
            print('无学生信息')
            time.sleep(1)
            break


# 排序 函数
def sort():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            student_list=file.readlines()
        student_new=[]
        for item in student_list:
            temp = eval(item)
            student_new.append(temp)
    else:
        print('没有相关记录学生信息的文件!!')
        return
    asc_or_desc=input("请选择升序还是降序 0表示升序 1表示降序")
    if asc_or_desc == '0':
        asc_or_desc_bool=False
    elif asc_or_desc=='1':
        asc_or_desc_bool=True
    else:
        print('你输入的方式有误,请重新输入!!')
        sort()
    mode = input('请选择排序方式:(1 按英语成绩排序 ; 2 按 java 成绩排序 ; 3 按 python 成绩排序 ; 4 按 总成绩 排序)')
    if mode=='1':
        student_new.sort(key= lambda x : int(x['english']),reverse=asc_or_desc_bool)
    elif mode=='2':
        student_new.sort(key= lambda x : int(x['java']),reverse=asc_or_desc_bool)
    elif mode=='3':
        student_new.sort(key= lambda x : int(x['python']),reverse=asc_or_desc_bool)
    elif mode=='4':
        student_new.sort(key= lambda x : (int(x['english']+int(x['java']+int(x['python'])),reverse=asc_or_desc_bool)))
    else:
        print('你输入的方式有误,请重新输入!!')
        sort()
    print('\tID\t\t姓名\t\t英语成绩\t\tjava成绩\t\tpython成绩\t\t总成绩')
    for item in student_new:
        print(
            '\t{0}\t{1}\t\t\t{2}\t\t\t{3}\t\t\t{4}\t\t\t{5}'.format(item['id'], item['name'], item['english'],
                                                                    item['java'],
                                                                    item['python'], (int(item['english']) + int(
                    item['java']) + int(item['python']))))
    time.sleep(1)# 休眠一秒,用于观察结果
# 统计学生总人数 函数
def total():
    with open(filename, 'r', encoding='utf-8') as file:
        student_list = file.readlines()
    if student_list:
        print('一共有{0}名学生'.format(len(student_list)))
        time.sleep(2)
    else:
        print('无学生信息')


# 显示所有学生信息 函数
def show():
    with open(filename, 'r', encoding='utf-8') as file:
        student_list = file.readlines()
        print('\tID\t\t姓名\t\t英语成绩\t\tjava成绩\t\tpython成绩\t\t总成绩')
        for item in student_list:
            # print(item) <class 'str'>
            # print(type(item))
            temp = eval(item)  # eval() 是用来 将 str 转换成 dict 类型的方法
            # dict 内置函数 是这样用的 dict(name='wwj', age=20) 这样子才能转换 形成一个字典
            # print(temp)
            # print(type(temp))
            # print(temp['python'])
            print(
                '\t{0}\t{1}\t\t\t{2}\t\t\t{3}\t\t\t{4}\t\t\t{5}'.format(temp['id'], temp['name'], temp['english'],
                                                                        temp['java'],
                                                                        temp['python'], (int(temp['english']) + int(
                        temp['java']) + int(temp['python']))))
    time.sleep(1)


if __name__ == '__main__':
    main()

代码压缩包地址:

链接:https://pan.baidu.com/s/1gmh7ezKOccMst_s9D1JbwA
提取码:rn76

打包成exe文件

  • 即使对方没有安装python环境,也能运行你用python代码打包好的exe文件

  • 首先安装PyInstaller模块

    • 建议使用清华源
    • 格式:pip install PyInstaller -i https://pypi.tuna.tsinghua.edu.cn/simple
    • 打包成exe方法:pyinstaller -F py文件的路径

exe文件地址:

链接:https://pan.baidu.com/s/1TiXkqsvPWLi_szwduxoTQw
提取码:vh2m

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值