python:DIY字符画的程序使用说明.doc
目录
- 开发环境要求
- 运行方法
- 具体的操作步骤如下:
- 代码示例
- 源码及运行程序下载地址
开发环境要求
本系统的软件开发及运行环境具体如下。
操作系统:Windows 7、Windows 10。
Python版本:Python 3.7.0。
开发工具:Python IDLE。
Python内置模块:os、re。
运行方法
在项目文件studentsystem.py上单击鼠标右键,在弹出快捷菜单中选择“Edit with IDLE\Edit with IDLE 3.7(64-bit)”菜单项,如图1所示。
在打开的Python Shell窗口中,按下F5键运行程序即可。运行效果如图2所示。
具体的操作步骤如下:
(1)录入学生信息。在“请选择:”右侧光标所在位置,输入数字1,并按下键,系统将分别提示输入学生编号、学生名字、英语成绩、Python成绩和C语言成绩,输入正确的信息后,系统会提示是否继续添加,如下图所示。输入y,系统将会再次提示用户输入用户信息,输入n,则将录入学生信息保存到文件中。
录入一条学生信息
(2)查找学生信息。在功能菜单上输入功能编号2,并且按下键,系统将要求用户选择是按学生编号查询还是按学生姓名查询,如果用户输入1,则要求用户输入学生ID,表示按学生编号查询,输入想要查询的学生编号,系统查找该学生信息,如果找到则显示,效果如图3所示,否则显示“(o@.@o) 无数据信息 (o@.@o)”,效果如图所示。最后提示是否继续查找输入y,系统将再次提示用户选择查找方式,输入n,则退出查找学生信息功能。
通过学生ID查找学生信息
未找到符合条件的学生信息
(3)删除学生信息。在功能菜单上输入功能编号3,并且按下键,系统将提示输入要删除学生的编号,输入相应的学生ID后,系统会直接从文件中删除该学生信息,并且提示是否继续删除,如下图所示。输入y,系统将会再次提示用户输入要删除的学生编号,输入n,则退出删除功能。
(4)修改学生信息。在功能菜单上输入功能编号4,并且按下键,系统首先显示全部学生信息列表,再提示输入要修改学生的编号,输入相应的学生ID后,系统会在文件中查找该学生信息,如果找到,则提示修改相应的信息,否则不修改。最后提示是否继续修改,如下图所示。输入y,系统将会再次提示用户输入要修改的学生编号,输入n,则退出修改功能。
(5)排序。在功能菜单上输入功能编号5,并且按下键,系统将先显示不排序的全部学生信息,然后提示选择排序方式,这里输入2,再选择降序排列“1”,将对学生信息按Python成绩降序排列并显示,如下图所示。
(6)统计学生总人数。在功能菜单上选择“6 统计学生总人数”菜单项,并且按下键,系统将自动统计出学生总人数并显示,如下图所示。
(7)显示所有学生信息。在功能菜单上选择“7 显示所有学生信息”菜单项,并且按下键,系统将获取并显示全部学生信息,如下图所示。
(8)退出系统。在功能菜单上输入功能编号5,并且按下键即可退出系统,如下图所示。
代码示例
# _*_ coding:utf-8 _*_
# 开发人员:Administrator
# 开发时间:2022/11/22 12:53
# 文件名称:studentsystem.py
# 开发工具:PyCharm
import re # 导入正则表达式模块
import os # 导入操作系统模块filename = "students.txt" # 定义保存学生信息的文件名def menu():# 输出菜单print('''╔———————学生信息管理系统————————╗│ ││ =============== 功能菜单 =============== ││ ││ 1 录入学生信息 ││ 2 查找学生信息 ││ 3 删除学生信息 ││ 4 修改学生信息 ││ 5 排序 ││ 6 统计学生总人数 ││ 7 显示所有学生信息 ││ 0 退出系统 ││ ========================================== ││ 说明:通过数字或↑↓方向键选择菜单 │╚———————————————————————╝''')def main():ctrl = True # 标记是否退出系统while (ctrl):menu() # 显示菜单option = input("请选择:") # 选择菜单项option_str = re.sub("\D", "", option) # 提取数字if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:option_int = int(option_str)if option_int == 0: # 退出系统print('您已退出学生成绩管理系统!')ctrl = Falseelif 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()'''1 录入学生信息'''def insert():stdentList = [] # 保存学生信息的列表mark = True # 是否继续添加while mark:id = input("请输入ID(如 1001):")if not id: # ID为空,跳出循环breakname = input("请输入名字:")if not name: # 名字为空,跳出循环breaktry:english = int(input("请输入英语成绩:"))python = int(input("请输入Python成绩:"))c = int(input("请输入C语言成绩:"))except:print("输入无效,不是整型数值....重新录入信息")continuestdent = {"id": id, "name": name, "english": english, "python": python, "c": c} # 将输入的学生信息保存到字典stdentList.append(stdent) # 将学生字典添加到列表中inputMark = input("是否继续添加?(y/n):")if inputMark == "y": # 继续添加mark = Trueelse: # 不继续添加mark = Falsesave(stdentList) # 将学生信息保存到文件print("学生信息录入完毕!!!")# 将学生信息保存到文件
def save(student):try:students_txt = open(filename, "a") # 以追加模式打开except Exception as e:students_txt = open(filename, "w") # 文件不存在,创建文件并打开for info in student:students_txt.write(str(info) + "\n") # 按行存储,添加换行符students_txt.close() # 关闭文件'''2 查找学生成绩信息'''def search():mark = Truestudent_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') as file: # 打开文件student = file.readlines() # 读取全部内容for list in student:d = dict(eval(list)) # 字符串转字典if id is not "": # 判断是否按ID查if d['id'] == id:student_query.append(d) # 将找到的学生信息保存到列表中elif name is not "": # 判断是否按姓名查if d['name'] == name:student_query.append(d) # 将找到的学生信息保存到列表中show_student(student_query) # 显示查询结果student_query.clear() # 清空列表inputMark = input("是否继续查询?(y/n):")if inputMark == "y":mark = Trueelse:mark = Falseelse:print("暂未保存数据信息...")return'''3 删除学生成绩信息'''def delete():mark = True # 标记是否循环while mark:studentId = input("请输入要删除的学生ID:")if studentId is not "": # 判断要删除的学生是否存在if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容else:student_old = []ifdel = False # 标记是否删除if student_old: # 如果存在学生信息with open(filename, 'w') as wfile: # 以写方式打开文件d = {} # 定义空字典for list in student_old:d = dict(eval(list)) # 字符串转字典if d['id'] != studentId:wfile.write(str(d) + "\n") # 将一条学生信息写入文件else:ifdel = True # 标记已经删除if ifdel:print("ID为 %s 的学生信息已经被删除..." % studentId)else:print("没有找到ID为 %s 的学生信息..." % studentId)else: # 不存在学生信息print("无学生信息...")break # 退出循环show() # 显示全部学生信息inputMark = input("是否继续删除?(y/n):")if inputMark == "y":mark = True # 继续删除else:mark = False # 退出删除学生信息功能'''4 修改学生成绩信息'''def modify():show() # 显示全部学生信息if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容else:returnstudentid = input("请输入要修改的学生ID:")with open(filename, "w") as wfile: # 以写模式打开文件for student in student_old:d = dict(eval(student)) # 字符串转字典if d["id"] == studentid: # 是否为要修改的学生print("找到了这名学生,可以修改他的信息!")while True: # 输入要修改的信息try:d["name"] = input("请输入姓名:")d["english"] = int(input("请输入英语成绩:"))d["python"] = int(input("请输入Python成绩:"))d["c"] = int(input("请输入C语言成绩:"))except:print("您的输入有误,请重新输入。")else:break # 跳出循环student = str(d) # 将字典转换为字符串wfile.write(student + "\n") # 将修改的信息写入到文件print("修改成功!")else:wfile.write(student) # 将未修改的信息写入到文件mark = input("是否继续修改其他学生信息?(y/n):")if mark == "y":modify() # 重新执行修改操作'''5 排序'''def sort():show() # 显示全部学生信息if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as file: # 打开文件student_old = file.readlines() # 读取全部内容student_new = []for list in student_old:d = dict(eval(list)) # 字符串转字典student_new.append(d) # 将转换后的字典添加到列表中else:returnascORdesc = input("请选择(0升序;1降序):")if ascORdesc == "0": # 按升序排序ascORdescBool = False # 标记变量,为False表示升序排序elif ascORdesc == "1": # 按降序排序ascORdescBool = True # 标记变量,为True表示降序排序else:print("您的输入有误,请重新输入!")sort() mode = input("请选择排序方式(1按英语成绩排序;2按Python成绩排序;3按C语言成绩排序;0按总成绩排序):")if mode == "1": # 按英语成绩排序student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)elif mode == "2": # 按Python成绩排序student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)elif mode == "3": # 按C语言成绩排序student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)elif mode == "0": # 按总成绩排序student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)else:print("您的输入有误,请重新输入!")sort()show_student(student_new) # 显示排序结果''' 6 统计学生总数'''def total():if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容if student_old:print("一共有 %d 名学生!" % len(student_old))else:print("还没有录入学生信息!")else:print("暂未保存数据信息...")''' 7 显示所有学生信息 '''def show():student_new = []if os.path.exists(filename): # 判断文件是否存在with open(filename, 'r') as rfile: # 打开文件student_old = rfile.readlines() # 读取全部内容for list in student_old:student_new.append(eval(list)) # 将找到的学生信息保存到列表中if student_new:show_student(student_new)else:print("暂未保存数据信息...")# 将保存在列表中的学生信息显示出来
def show_student(studentList):if not studentList:print("(o@.@o) 无数据信息 (o@.@o) \n")returnformat_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^10}"print(format_title.format("ID", "名字", "英语成绩", "Python成绩", "C语言成绩", "总成绩"))format_data = "{:^6}{:^12}\t{:^12}\t{:^12}\t{:^12}\t{:^12}"for info in studentList:print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),str(info.get("c")),str(info.get("english") + info.get("python") + info.get("c")).center(12)))if __name__ == "__main__":main()
源码及运行程序下载地址
学生管理系统的程序-python源码
https://download.csdn.net/download/duck251/87503040
相关文章:

python:DIY字符画的程序使用说明.doc
目录开发环境要求运行方法具体的操作步骤如下:代码示例源码及运行程序下载地址开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统:Windows 7、Windows 10。 Python版本:Python 3.7.0。 开发工具:Python IDLE。 …...

【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解
【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解 文章目录【Python/Opencv】图像权重加法函数:cv2.addWeighted()详解1. 介绍2. API3. 代码示例与效果3.1 代码3.2 效果4. 参考1. 介绍 在OpenCV图像加法cv2.add函数详解详细介绍了图像的加法运…...
容器的老祖宗LXC和Docker的关系
一、什么是LXC? LXC(Linux Container的缩写)是一个基于Linux内核的容器虚拟化技术,它提供了一种轻量级、快速、简便的方式来创建和管理系统容器。与传统虚拟化技术不同,LXC并不会模拟硬件,而是利用Linux内…...
Webpack迁移Rspack速攻实战教程(前瞻版)
前言 rspack 即将开源,但社区中不乏有已经落地的 case ,比如 rspack-migration-showcase 、 modern.js 等。 基于此,本文将介绍如何迁移一个近似于 CRA( create-react-app ) 的项目到 rspack 。 在阅读本文前&#…...

一行代码“黑”掉任意网站
文章目录只需一行代码,轻轻一点就可以把任意网站变成暗黑模式。 首先我们先做一个实验,在任意网站中,打开浏览器开发者工具(F12),在 C1onsole 控制台输入如下代码并回车: document.documentElement.style.filterinve…...

51单片机入门 -驱动 8x8 LED 点阵屏
硬件型号、软件版本、以及烧录流程 操作系统:Windows 10 x84-64单片机:STC89C52RC编译器:SDCC烧录软件:stcgal 1.6开发板:普中51单片机开发板A2套件(2022) 在 VS Code 中新建项目到烧录的过程…...

Xinlinx zynq7045国产替代 FMQL45T900全国产化 ARM 核心板+扩展板
TES745D 是一款基于 FMQL45T900 的全国产化 ARM 核心板。该核心板将 FMQL45T900(与XC7Z045-2FFG900I 兼容)的最小系统集成在了一个 87*117mm 的核心板上,可以作为一个核心模块,进行功能性扩展,能够快速的搭建起一个信号…...

硬刚ChatGPT!文心一言能否为百度止颓?中国版ChatGPT“狂飙”的机会在哪儿?
文章目录目录产品背景发展历程科技简介主要功能合作伙伴结语文心一言 (英文名:ERNIE Bot) *是百度基于文心大模型技术推出的生成式对话产品,被外界誉为“中国版ChatGPT”,将于2023年3月份面向公众开放。 [40] 百度在人…...

Python 异步: 在非阻塞子进程中运行命令(19)
动动发财的小手,点个赞吧! 我们可以从 asyncio 执行命令。该命令将在我们可以使用非阻塞 I/O 写入和读取的子进程中运行。 1. 什么是 asyncio.subprocess.Process asyncio.subprocess.Process 类提供了由 asyncio 运行的子进程的表示。它在 asyncio 程序…...

蓝桥杯嵌入式第五课--输入捕获
前言输入捕获的考题十分明确,就是测量输入脉冲波形的占空比和频率,对我们的板子而言,就是检测板载的两个信号发生器产生的信号:具体来说就是使用PA15和PB4来做输入捕获。输入捕获原理简介输入捕获能够对输入信号的上升沿和下降沿进…...

Spring事务和事务传播机制
目录 Spring中事务的实现 1、通过代码的方式手动实现事务 2、通过注解的方式实现声明式事务 2.1、Transactional作用范围 2.2、Transactional参数说明 2.3、注意事项 2.4、Transactional工作原理 事务隔离级别 1、事务特性 2、Spring中设置事务隔离级别 2.1、MySQL事…...

基于OpenCV+CUDA实时视频抠绿、背景合成以及抠绿算法小结
一、关于抠绿 百度百科上描述抠绿“抠绿是指在摄影或摄像时,以绿色为背景进行拍摄,在后期制作时使用特技机的“色键”将绿色背景抠去,改换其他更理想的背景的技术。”绿幕的使用已经非常普遍,大到好莱坞大片,小到自媒体的节目,一些商业娱乐场景,几乎都用使用。但是很多非…...

MySQL 中的 UNION 语句
文章目录一、数据准备一、UNION 和 UNION ALL二、UNION 的执行顺序(UNION 和其他语句一同出现)三、MySQL 使用 UNION(ALL) ORDER 导致排序失效四、UNION 报错语法一、数据准备 -- 创建表 CREATE TABLE test_user (ID int(11) NO…...

高完整性系统工程(三): Logic Intro Formal Specification
目录 1. Propositions 命题 2.1 Propositional Connectives 命题连接词 2.2 Variables 变量 2.3 Sets 2.3.1 Set Operations 2.4 Predicates 2.5 Quantification 量化 2.6 Relations 2.6.1 What Is A Relation? 2.6.2 Relations as Sets 2.6.3 Binary Relations as…...

【linux】多线程概念详述
文章目录一、线程基本概念1.1 进程地址空间与页表1.2 页表结构1.3 线程的理解1.3.1 如何描述线程1.4 再谈进程1.5 代码理解1.5.1 原生库提供线程pthread_create1.6 资源共享问题1.7 资源私有问题二、总结2.1 什么是线程2.2 并行与并发2.3 线程的优点2.4 线程的缺点2.5 线程异常…...
【Java】P8 面向对象(3)方法 基本知识
面向对象 方法方法方法的声明权限修饰符返回值类型方法名形参列表方法体简单案例方法 方法 是对类或对象行为特征的抽象,用来完成某个功能的操作。方法的目的 是为了实现代码复用,减少冗余,简化代码;方法不能独立存在,…...
js中null和undefined的区别
js中null和undefined的区别?这也是一个常见的js面试题 相同点 1,都是基本类型。 2,做判断值都是false。 !!null false // true !!undefined false // true不同点 1,诞生时间null在前,undefined在后。因为js作者Brendan-Eic…...

【Linux】linux中的c++怎么调试?gdb的介绍和使用。
背景1.1.前提知识程序的发布方式有两种,debug模式和release模式Linux gcc/g出来的二进制程序,默认是release模式 要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项windows上的调试方法有区别吗?1.调试思路是一样的2…...

提升Python代码性能的六个技巧
文章目录前言为什么要写本文?1、代码性能检测1.1、使用 timeit 库1.2、使用 memory_profiler 库1.3、使用 line_profiler 库2、使用内置函数和库3、使用内插字符串 f-string4、使用列表推导式5、使用 lru_cache 装饰器缓存数据6、针对循环结构的优化7、选择合适算法…...
VI的常用命令
VI的常用命令 文章目录VI的常用命令vi/vim是什么?VI普通模式命令VI编辑模式命令VI指令模式vi/vim是什么? VI是Unix操作系统和类Unix操作系统中最通用的文本编辑器 VIM编辑器是从VI发展出来的一个性能更强大的文本编辑器。可以主动的将字体颜色辨别语法…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...

以太网PHY布局布线指南
1. 简介 对于以太网布局布线遵循以下准则很重要,因为这将有助于减少信号发射,最大程度地减少噪声,确保器件作用,最大程度地减少泄漏并提高信号质量。 2. PHY设计准则 2.1 DRC错误检查 首先检查DRC规则是否设置正确,然…...

轻量安全的密码管理工具Vaultwarden
一、Vaultwarden概述 Vaultwarden主要作用是提供一个自托管的密码管理器服务。它是Bitwarden密码管理器的第三方轻量版,由国外开发者在Bitwarden的基础上,采用Rust语言重写而成。 (一)Vaultwarden镜像的作用及特点 轻量级与高性…...

5. TypeScript 类型缩小
在 TypeScript 中,类型缩小(Narrowing)是指根据特定条件将变量的类型细化为更具体的过程。它帮助开发者编写更精确、更准确的代码,确保变量在运行时只以符合其类型的方式进行处理。 一、instanceof 缩小类型 TypeScript 中的 in…...