【python入门】day20:学生信息管理系统CRUD,排序模块和项目打包中的业务流程、具体实现

CRUD,每个程序员都必须掌握的

录入C create

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

def save(lst):#保存信息
    try:												#保存成绩时有可能出错,所以使用try-except
        stu_txt=open(filename,'a',encoding='utf-8')
        #filename是个变量,所以不用写单引号
        #文件以追加模式打开
        #怕中文乱码,所以加上encoding='utf-8'
    except:#出错:没有该文件的话就以写入的方式来打开
        stu_txt=open(filename,'w',encoding='utf-8')
    for item in lst:									#可迭代对象,逐个写入
        stu_txt.write(str(item)+'\n')					#保存到文本文件,要转换成str类型
    stu_txt.close()										#使用完要关闭资源
def insert():
    student_list=[]
    while True:
        id = int(input("请输入学号如10101"))
        if not id:
            break
        try:
            chinese=int (input("请输入语文成绩"))
            java= int (input("请输入java成绩"))
            python=int (input("请输入python成绩"))
        except:
            print('成绩输入无效,请输入整数')
            continue
        student={'id':id,'name':name,'chinese':chinese,'java':java,'python':python}		#建立字典,有点像结构体
        student_list.append(student)
        answer=input('是否需要继续输入\n')
        if answer=='y' or answer=='Y':
            continue
        else:
            break
        save(student_list)
        print("录入完毕!!")

删除D delete

在这里插入图片描述
在这里插入图片描述

def delete():											#删除学生信息
    while True:
        student_id=input('请输入要删除的学生的ID:')
        if student_id!='':								#if student_id!=''与if not student_id功能相同-->如果字符串不为空
            if os.path.exists(filename):#判断文件是否存在
                with open(filename,'r',encoding='utf-8') as file:
                    student_old=file.readlines()		#读取所有的数据放在一个列表当中
            else:
                student_old=[]							#文件如果不存在,就定义一个列表为空即可,因为后面还要判断这个列表当中的内容
            flag=False  								#标记已删除,默认是删除的
            if student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                #如果有内容,以只写的方式打开文件,因为要将删除完后的内容,对原有的内容进行覆盖
                    d={}
                    for item in student_old:
                        d=dict(eval(item))				#将字符串转换成字典
                        								#eval()函数用于执行一个字符串表达式,并且返回该表达式的值
                        if d['id']!=student_id:
                            wfile.write(str(d)+'\n')	#删除完的字典写进磁盘文件中.写入文本时要转换成str类型
                        	#删除信息-->用一个新字典(没有要删除学生信息)覆盖原有字典,所以写新字典时,如果遇到要删除的信息就不写入新字典
                        else:
                            flag=True					#如果有相等的,就表示已经删除了,因为没写入到新字典中,设置标记为已删除
                    if flag:
                        print(f'id为{student_id}的学生信息已被删除')
                    else:
                        print(f'没有找到ID为{student_id}的学生信息')
            else:										#磁盘上没有数据(一条数据也没有)
                print('无学生信息')
                break
            show()    									#删除之后要重新显示所有学生信息
            answer=input('是否继续删除?y/b\n')
            if answer=='y':
                continue
            else:
                break

修改U update

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#修改学生信息
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)))#读取到的是字符串,用eval函数进行转换,转换成字典类型
            if d['id']==student_id:#只有找到信息才可以修改
                print('找到学生信息,可以修改他的相关信息了!')
                while True:
                    try:#修改的过程有可能出错,所以使用try-except
                        d['name']=input('请输入姓名:')
                        d['englist'] = input('请输入英语成绩:')
                        d['python'] = input('请输入Python成绩:')
                        d['java'] = input('请输入Java成绩:')
                    except:#输入有误就会循环while True
                        print('您的输入有误,请重新输入!!!')
                    else:#没有错误就执行else,退出循环
                        break
                wfile.write(str(d)+'\n')#修改完之后再写进文件中(现在是只修改了拿出来的字典的内容)
                print('修改成功!!!')
            else:
                wfile.write(str(d)+'\n')#不需要修改的学生信息继续写入文件
        answer=input('是否继续修改其他学生信息?y/n\n')
        if answer=='y':
            modify()#在函数中写while True,符合条件的一直循环,相当于在条件允许的情况下函数调用自身

查找、读取 R read

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
{0:^30}
0是一个序号,表示格式化输出的第0个字符,依次累加;
30表示输出宽度约束为30个字符;
^表示输出时右对齐,若宽度小于字符串的实际宽度,以实际宽度输出;

#查找学生信息
def search():
    student_query=[]
    while True:
        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 rfile:
                student=rfile.readlines()
                for item in student:
                    d=dict(eval(item))
                    if id!='':#如果ID不为空
                        if d['id']==id:
                            student_query.append(d)
                    elif name!='':#如果姓名不为空
                        if d['name']==name:
                            student_query.append(d)
            #显示查询结果
            show_student(student_query)
            #清空列表
            student_query.clear()#下次执行search()之前清空列表
            anwser=input('是否要继续查询?y/n\n')
            if anwser=='y':
                continue
            else:
                break
        else:#文件不存在
            print('暂未保存学生信息')
            return

#显示指定学生信息
def show_student(lst):
    if len(lst)==0:
        print('没有查询到学生信息,无数据显示!!!')
        return
    #定义标题显示格式
    format_title='{:^6}\t{:^12}\t{:^4}\t{:^9}\t{:^5}\t{:^5}'#{:^4}表示输出宽度约束为4个字符,右对齐;
    print(format_title.format('ID','姓名','英语成绩','Python成绩','Java成绩','总成绩'))
    #定义内容的显示格式
    format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(format_data.format(item.get('id'),#字典可以用get方法,也可以使用方括号
                                 item.get('name'),
                                 item.get('englist'),
                                 item.get('python'),
                                 item.get('java'),
                                 int(item.get('englist'))+int(item.get('python'))+int(item.get('java'))
                                 ))

统计学生总人数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

#统计学生总人数(判断列表长度)
def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            students=rfile.readlines()
            if students:#如果不为空
                print(f'一共有{len(students)}名学生')
            else:
                print('还没有录入学生信息')
    else:
        print('暂未保存数据信息....')

显示所有学生信息

在这里插入图片描述
在这里插入图片描述

#显示所有学生信息
def show():
    student_lst=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            students=rfile.readlines()
            for item in students:
                student_lst.append(eval(item))
            if student_lst:
                show_student(student_lst)
    else:
        print('暂未保存过数据!!!')

排序模块

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

lamada表达式:

add = lambda x, y: x + y

print(add(3, 5))
# Output: 8

排序

def sort():
    show()#先显示所有学生信息
    if os.path.exists(filename):#判断文件是否存在
        with open(filename,'r',encoding='utf-8') as rfile:
            student_list=rfile.readlines()#读出所有数据
        student_new=[]
        for item in student_list:
            d=dict(eval(item))
            student_new.append(d)
    else:
        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.按Python成绩排序 3.按Java成绩排序 4.按总成绩排序)')
    if mode=='1':
        student_new.sort(key=lambda x:int(x['englist']),reverse=asc_or_desc_bool)
        #x这个参数是一个字典,根据参数求值,做类型转换后排序
    elif mode=='2':
        student_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool)
    elif mode=='3':
        student_new.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool)
    elif mode=='4':
        student_new.sort(key=lambda x: int(x['englist'])+int(x['python'])+int(x['java']), reverse=asc_or_desc_bool)
    else:
        print('您的输入有误,请重新输入!!!')
        sort()
    show_student(student_new)#排序结束之后再显示一遍

项目打包

在这里插入图片描述
(-cmd中) 输入 pyinstaller -F 内存地址+文件名

Appending:打包文件的新内存地址(记得把原来的文本文件复制过来)
-F的意思是只剩成一个扩展名为.exe的可执行文件
在这里插入图片描述
结果可以得到exe文件的位置

找到文件位置在这里插入图片描述
在这里插入图片描述
把txt文件复制到此目录下
在这里插入图片描述
双击可以打开
在这里插入图片描述
注意事项
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目代码

见资源绑定。

Python实现CRUD操作 以上代码演示了如何使用Python库来实现CRUD操作。我们首先导入必要的库,然后连接到MySQL数据库。接下来定义了五个函数来执行不同的CRUD操作。Python是一种高级的面向对象编程语言,提供了丰富的库和框架来支持各种应用开发。本文将基于Python演示如何进行基本的CRUD(增删改查)操作。最后通过调用这些函数,我们成功地查询、插入、更新和删除了数据。Python实现CRUD操作。 阅读详情

相关推荐

Python操作MySQL数据库CRUD入门

本文还有配套的精品资源,点击获取 简介:在IT领域,Python与MySQL结合进行数据库管理非常常见。本项目“CRUD_MySql_Python”着重教授如何利用Python语言执行数据库的核心操作:创建(Create)、读取(Read)、更新(Update)、删除(Delete),即CRUD操作。通过安装和使用MySQL连接库如 pymysql 或 ...

weixin_42356162的博客 1377

Python高级:数据库CRUD操作

文章目录知识目标知识点①Python数据库接口②连接MySQL数据库③数据库的操作 知识目标 1、了解PyMySQL 2、掌握PyMySQL连接数据库 3、掌握PyMySQL操作数据库的步骤 4、掌握连接对象的常用方法 5、掌握游标对象的常用方法 知识点 ①Python数据库接口 数据库接口的模型图 数据库接口主要模块 数据库接口各模块作用 Python DB API 访问数据库流程 ②连接MySQL数据库 安装PyMysql pymysql 是在python3.x和2.x版本中用于连接M

Argonaut_的博客 1331

Python tkinter数据库CRUD操作项目实战

在软件开发中,用户界面(User Interface, UI)与数据库之间的交互是必不可少的一部分。Python语言因其简洁易读性以及强大的第三方库支持,在开发数据库交互程序时显得尤为方便。其中,tkinter是Python的标准GUI库,可以快速地构建桌面应用程序的界面。当tkinter与数据库进行结合时,可以实现用户友好的界面,同时执行数据库的各种操作,如数据的增删改查等。除了Entry控件,tkinter还提供了其他几种数据输入控件,以满足不同类型输入需求。

weixin_36304957的博客 1255

Python 进阶(一):Python连接MySQL数据库和CRUD操作

本文基于MySQL8.x版本的学习,python版本基于当前最新的3.xWindows MySQL8.0免安装版,配置多个安装实例。 在Python 3中,可以使用`mysql-connector-python`库来连接和进行CRUD(创建、读取、更新和删除)操作。以下是Python 3和MySQL 8.x版本的连接和基本操作的示例代码:

后端开发 2473

不止于算力:深入鲲鹏920的片上网络(NoC)与一致性协议HCCS,看华为如何优化数据流转

本文深入解析了鲲鹏920处理器的片上网络(NoC)架构和一致性协议HCCS,揭示了华为如何通过创新的环总线设计和私有协议优化数据流转效率。文章详细介绍了鲲鹏920在多die、多芯片环境下的高效协同机制,包括环总线架构、HCCS协议精妙设计及物理实现创新,为云服务场景提供了高性能解决方案。

weixin_30681121的博客 251

LabVIEW通过ActiveX控件实现与三菱FX5U PLC的高效数据交互

本文详细介绍了如何利用LabVIEW的ActiveX控件,通过三菱官方MX Component工具包实现与FX5U PLC的高效数据交互。文章从环境配置、控件插入到实战代码解析,系统讲解了连接建立、数据读写及资源释放的全流程,并提供了关键的避坑指南,帮助工程师快速构建稳定可靠的上位机通讯系统。

weixin_29197051的博客 373

Python3操作Redis最新版|CRUD基本操作(保姆级)

Python操作Redis增删改查(CRUD)

天涯芳草 1099

如何用 OBProxy 实现 OceanBase 的最佳路由策略

本文基于业务中一类常见的路由问题展开,对OceanBase的路由功能及对应配置项做详细介绍,指导用户在业务实践中如何正确的配置路由策略及快速排查路由问题

OceanBase分布式数据库的博客 1680

【大数据学习笔记】最全Python连接各种数据库及对应的CRUD操作

本文将详细探讨如何在Python中连接全种类数据库以及实现相应的CRUD(创建,读取,更新,删除)操作。我们将逐一解析连接MySQL,SQL Server,Oracle,PostgreSQL,MongoDB,SQLite,DB2,Redis,Cassandra,Microsoft Access,ElasticSearch,Neo4j,InfluxDB,Snowflake,Amazon DynamoDB,Microsoft Azure CosMos DB数据库的方法,并演示相应的CRUD操作。

一个老码农 1623

VS2019+EasyX图形库实战:手把手教你用C语言打造消消乐小游戏(附完整源码)

本文详细介绍了如何使用VS2019和EasyX图形库从零开始构建一个C语言消消乐小游戏。通过环境配置、数据结构设计、界面绘制、交互实现到游戏逻辑完善的完整流程,帮助开发者掌握图形编程和游戏开发的核心技巧,并附有完整源码供参考。

bush的博客 186

华为OD机考双机位C卷 - 斗地主之顺子 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 斗地主之顺子(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 9692

6个月Python学习计划 Day 6 - 综合实战:学生信息管理系统

这是一个基于Python的学生信息管理系统项目,主要功能包括:添加学生信息(姓名、年龄、成绩)、显示所有学生信息、查询特定学生、删除学生记录以及退出系统。系统采用字典存储学生数据,列表管理所有学生,通过while循环实现菜单交互界面。进阶版本还支持按成绩排序、多字段查询、修改信息和数据保存等功能。该项目适合初学者练习Python基础语法(列表、字典、条件判断、循环等)和模块化程序设计。用户可以通过数字选择不同功能,系统会给出相应的操作反馈,是一个完整的终端交互式应用示例。

FAN的博客 790

创建 Qt Quick 项目

来看看如何使用 Qt Creator 创建 Qt Quick 项目!

青春不老,奋斗不止! 1万+

Python Flask框架 -- ORM模型的CRUD操作(增删改查)

Python Flask框架 -- ORM模型的CRUD操作(增删改查) 示例代码

@Peixian Liang 1061

查找【优快云】- 人工客服

【代码】查找【优快云】- 人工客服。

👨‍💻 前端开发者 | 技术分享者 1401

五步教你用GPT-5画出国自然技术路线图!轻松节省80%画图时间(附AI提示词)

七哥给大家推荐的高校都在用的AI平台——高级学术版专业应用平台,集成了ChatGPT、Claude、Gemini、Grok等Al大模型的PLUS版本平台,包括 ChatGPT-5、4o、o3、4.1、4.5、Gemini 2.5 Pro、Claude 3.7、Claude 4、DeepSeek 满血版、Grok 3 、Grok 4等原生线路,还有国际主流的GPTs学术应用,可以辅助大家高效完成科研和学术写作任务,当然撰写硕博论文,课题、职称论文、国社科、国自然基金本子也是手拿把掐。

智能AI让学术科研更容易 1497

【Python】2022Python连接MySQL数据库之CRUD操作完整版(一看就懂,上手特别快)

目前而言,一般都用python3.x版本,所以连接MySQL数据库,我的建议是使用PyMySQL库,非常的好用。如果是Python2的版本,就使用mysqldb。当然我主要使用PyMySQL库,主要参考的代码也是官网上的,然后我再自己整合修改。

熊凯瑞的博客 1359

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Python 连接 Redis 进行增删改查(CRUD)操作

Redis 是一个开源的内存数据结构存储系统,支持多种数据结构(如字符串、哈希、列表、集合、有序集合等),广泛用于缓存、会话管理、消息队列等场景。本文将介绍如何在 Python 中使用redis-py库连接 Redis 数据库,并进行常见的增删改查操作。本文展示了如何在 Python 中使用redis-py库连接 Redis 并进行增删改查操作。Redis 的灵活性和高效性使其成为构建高性能应用的理想选择。

XMYX-0 1375

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

如何创建Python 中的第一个 CRUD

CREATE# READ# UPDATE# DELETE记住每个动作(执行),评论其他的,因为它会显示错误。我们可以添加错误处理,除了将每个动作放在一个函数中并在需要时调用它们,但这是 python 中 CRUD 的基础,希望你像我一样学习它。代码链接:https://hub.docker.com/_/mariadb。

weixin_39915649的博客 204

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python:封装CRUD操作

# 封装数据库操作 def SELECT(db, cursor, sql): try: # 执行SQL语句 db.ping(reconnect=True) cursor.execute(sql) # 获取所有记录列表 results = cursor.fetchall() logging.debug("select commit") except: logging.error(sq

hanhan的博客 1485

【第二周】第三节:Python基础数据结构的CRUD

第二周-第三节课 了解变量和引用 变量简单地说就是指向了一个实体 引用简单地说就是指向变量的变量 >>> a = 1 >>> b = a >>> id(a) 1778508560 >>> id(b) 1778508560 基础数据结构的CRUD操作 List(列表) list中存的元素是引用 create(增加) append 末尾添加元素 >>> l = [] >>> id

Super-Coding的博客 306

Python全栈:Django ORM模型实现CRUD、增删改查

文章目录1 什么是数据库的CRUD2 Django 定义ORM模型3 Django shell4 Django 使用ORM实现数据新增4.1 使用save()保存数据4.2 使用create()新增数据4.3 使用bulk_create()批量新增数据外键关联数据的插入5 Django 使用ORM实现简单查询使用all查询所有数据6 Django 使用ORM实现数据修改7 Django 使用ORM实现删除操作使用ORM物理删除数据逻辑删除vs物理删除 1 什么是数据库的CRUD Create——新增 R

超级大洋葱的博客 1450

Python SQLite CRUD 操作

在本教程中,您将学习如何使用 SQLite 数据库在 Python 中执行 CRUD 操作。Python 以 sqlite3 模块的形式内置了对 SQLite 的支持。该模块包含对 SQLite 数据库执行持久 CRUD 操作的函数。 Sqlite 数据库 SQLite 是一个独立的事务关系数据库引擎,不需要服务器配置,如 Oracle、MySQL 等。它是由 D. Richard Hipp 于 2000 年 8 月开发的开源和进程内库。整个 SQLite 数据库包含在一个文件中,该文件可以放在计算机文

allway2的博客 1196

掌握Blender边缘循环优化:EdgeFlow插件全面解析与实战指南

**EdgeFlow**作为Blender社区中备受推崇的边缘循环处理工具集,为3D建模师提供了强大的拓扑优化解决方案。无论是处理复杂的有机曲面还是精确的硬表面模型,这款插件都能显著提升边缘循环的质量和效率。本文将从核心理念到实战应用,为您全面解析EdgeFlow插件的核心功能和使用技巧。 ## 🔍 核心理念解析:理解边缘循环优化的本质 边缘循环在3D建模中扮演着至关重要的角色,它们决定了模

gitblog_00943的博客 747

Python基础:字典的增删改查操作全掌握

本文详细介绍了Python字典的增删改查(CRUD)操作。主要内容包括:添加数据(直接赋值、update()、setdefault()、字典合并)、删除数据(pop()、popitem()、del语句、clear())、修改数据(直接赋值、update())、查询数据(get()、setdefault())。文章通过实例代码展示了各种操作的用法和适用场景,并提供了常见问题的解决方案,如安全删除不存在的键、字典合并的不同方式等。这些操作是日常编程中使用字典的基础,掌握它们能有效提升数据处理能力。

输出倒逼输入,写作驱动成长。 3405

Python 连接数据库实现 CRUD(MySQL)

本指南将演示如何使用 Python 连接 MySQL 数据库,并实现 CRUD(创建、读取、更新、删除)操作。

qq_36807888的博客 719
上一篇: 【软考中级-软件设计师】day1:CPU、数据的表示、校验码
下一篇: 【软考中级-软件设计师】day2:cache、磁盘、指令等
Next2you
博客等级 码龄7年 1238粉丝 166原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Next2you

你真帅!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值