学生信息系统(python实现)

#coding=utf-8
import os.path
filename='student.txt'def menm():#菜单界面print('===========================学生管理系统===========================')print('-----------------------------功能菜单-----------------------------')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.退出')print('----------------------------------------------------------------')def insert():#录入学生信息student_list=[]#创建一个新列表while True:id=input('请输入ID(如1001):')if not id:breakname=input('请输入姓名:')if not name:breaktry:english=int(input('请输入英语成绩:'))python=int(input('请输入Python成绩:'))java=int(input('请输入Java成绩:'))except:print('输入无效,不是整数类型,请重新输入')continue#将录入的学生信息保存到字典里student={'id':id,'name':name,'english':english,'python':python,'java':java}#将学生信息添加到列表中student_list.append(student)answer=input('是否继续添加?y/n')if answer=='y' or answer=='Y':continueelse:breaksave(student_list)#将学生信息保存到磁盘文件print('学生信息录入完毕')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 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:#将每个内容转换成字典存入dd=dict(eval(item))if id!='':if d['id']==id:student_query.append(d)#以id查找,相同id的存入列表elif name!='':if d['name']==name:student_query.append(d)#以姓名查找,相同名字存入列表#显示查询结果show_student(student_query)#清空列表student_query.clear()answer=input('是否继续查询?y/n\n')if answer=='y' or answer=='Y':continueelse:breakelse:print('暂未保存学生信息')returndef show_student(lst):#展示学生信息if len(lst)==0:#列表为空,说明没有学生信息print('没有查询到学生信息,无法显示!!!')return#定义标题显示格式format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'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'),item.get('name'),item.get('english'),item.get('python'),item.get('java'),int(item.get('english'))+int(item.get('python'))+int(item.get('java'))))def delete():#删除学生信息while True:student_id=input('请输入要删除的学生ID:')if student_id!='':#ID不为空if os.path.exists(filename):#文件存在with open(filename,'r',encoding='utf-8') as file:student_old=file.readlines()#将内容逐行读入else:student_old=[]#文件不存在,则为空列表flag=Falseif student_old:#列表不为空with open(filename,'w',encoding='utf-8') as wfile:#以只写模式 打开文件夹 覆盖原先内容d={}#创建一个空字典for item in student_old:#将列表中的内容逐行读入d=dict(eval(item)) #将字符串转为字典if d['id']!=student_id:#若该id不为所查id,则重新写入wfile.write(str(d)+'\n')else:#若id为所查id则不写入,且flag改为Trueflag=Trueif flag:print(f'ID为{student_id}的学生信息已被删除')else:print(f'没有找到ID为{student_id}的学生信息')else:print('无学生信息')breakanswer=input('是否继续删除y/n')if answer=='y' or answer=='Y':continueelse:breakdef modify():#修改学生信息show()#先展示所有学生信息if os.path.exists(filename):#文件存在with open(filename,'r',encoding='utf-8',) as rfile:#以只读方式打开文件夹student_old=rfile.readlines()#逐行读入文件else:returnstudent_id=input('请输入要修改的学生ID:')#需要修改的学生IDwith open(filename,'w',encoding='utf-8') as wfile:#以只写方式 打开文件夹 覆盖内容for item in student_old:#将列表内容逐个读入d=dict(eval(item))#转换成字典if  d['id']==student_id:#该id为所要修改的学生idprint('找到学生信息,可以修改其相关信息!')try:d['name']=input('请输入姓名:')d['english']=input('请输入英语成绩:')d['python']=input('请输入Python成绩:')d['java']=input('请输入java成绩:')except:print('您输入有误,请重新输入!!!')wfile.write(str(d)+'\n')#将其写入文件print('修改成功!!!')else:wfile.write(str(d)+'\n')#id不为所要修改的学生idanswer=input('是否继续修改其它学生信息?y/n\n')if answer=='y' or answer=='Y':modify()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:returnasc_or_desc=input('请选择(0.升序 1.降序):')if asc_or_desc=='0':asc_or_desc_bool=False#升序bool值为Falseelif asc_or_desc=='1':asc_or_desc_bool=True#降序bool值为Trueelse:print('您的输入有误,请重新输入')sort()mode=input('请选择排序方式(1.按英语成绩排序 2.按Python成绩排序 3.按Java成绩排序 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['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['english'])+int(x['python'])+int(x['java']), reverse=asc_or_desc_bool)else:print('输入有误,请重新输入')sort()show_student(student_new)#展示排序后的学生信息def total():#统计学生个数if os.path.exists(filename):#文件存在with open(filename,'r',encoding='utf-8') as rfile:#以只读方式 打开文件夹students=rfile.readlines()#逐行读入if students:print('一共有{}名学生'.format(len(students)))#用len内置函数else:print('还没有录入学生信息')else:print('暂未保存数据信息...')def show():student_list=[]#创建空列表if os.path.exists(filename):#文件存在with open(filename,'r',encoding='utf-8') as rfile:#以只读模式 打开文件students=rfile.readlines()#逐行读入for item in students:#将列表内容逐个读入student_list.append(eval(item))#后接入列表if student_list:#列表不为空show_student(student_list)#展示信息def main():#主函数while True:menm()choice=int(input('请选择'))if choice in [0,1,2,3,4,5,6,7]:if choice==0:answer=input('您确认要退出系统吗?y/n')if answer=='y' or answer== 'Y':print('谢谢您的使用!!!')breakelse:continueelif 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()if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/130707.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

超越代码行数!如何看待Python在大型项目中的真正价值?

在软件开发的世界里,Python是一门备受喜爱的编程语言,它以其简洁、易读和强大的特性而闻名。然而,就像所有备受关注的事物一样,Python也有其争议性话题。其中之一是关于Python在大型项目中的表现。有些人认为Python并不适合处理大…

探索珠宝商城小程序:商家如何实现线上卖珠宝

近期,微信小程序的发展势头强劲,各行各业都在积极开发自己的小程序,以适应这个数字化的时代。珠宝行业也不例外,许多珠宝品牌都已经推出了自己的小程序,为用户提供了更加便捷、个性化的购物体验。因此,制作…

K8s 多集群实践思考和探索

作者:vivo 互联网容器团队 - Zhang Rong 本文主要讲述了一些对于K8s多集群管理的思考,包括为什么需要多集群、多集群的优势以及现有的一些基于Kubernetes衍生出的多集群管理架构实践。 一、为什么需要多集群 随着K8s和云原生技术的快速发展&#xff0c…

error:03000086:digital envelope routines::initialization error

项目背景 前端vue项目启动突然报错error:03000086:digital envelope routines::initialization error 我用的开发工具是vscode,node版本是v18.17.0 前端项目版本如下↓ 具体报错如下↓ 报错原因 node版本过高 解决方法 1输入命令 $env:NODE_OPTIONS"--op…

安卓绘制原理之 MeasureCache优化了什么?

安卓绘制原理概览_油炸板蓝根的博客-CSDN博客 搜了一下,全网居然没有人提过 measureCache。 在前文中提到过,measure的时候,如果命中了 measureCache,会跳过 onMeasure,同时会设置 PFLAG3_MEASURE_NEEDED_BEFORE_LAYOU…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql,root账…

c语言练习题52:写一个函数判断当前机器是大端还是小端

代码&#xff1a; #include<stdio.h> int check_sys() {int a 1;return *(char*)&a;//小端retrun 1 大端return 0&#xff1b; } int main() {if (check_sys() 1) {printf("小端\n");}elseprintf("大端\n"); } 这里首先取a的地址&#xff0c…

喜讯连连!疆程重磅发布全球独家3.6 TFT- LCD AR-HUD及CMS产品及解决方案,并斩获年度TOP10供应商

9月7日至8日&#xff0c;2023世界显示产业大会在成都盛大启幕&#xff0c;同期由BOE&#xff08;京东方&#xff09;承办的“Define the Future 智能座舱生态论坛”&#xff0c;合肥疆程技术有限公司创始人兼总经理康栋受邀出席并发布两款重磅座舱解决方案。 本次论坛以“智能座…

【css | loading】好看的loading特效

示例&#xff1a; https://code.juejin.cn/pen/7277764394618978365 html <div class"pl"><div class"pl__dot"></div><div class"pl__dot"></div><div class"pl__dot"></div><div c…

前端面试经典题--页面布局

题目 假设高度已知&#xff0c;请写出三栏布局&#xff0c;其中左、右栏宽度各为300px&#xff0c;中间自适应。 五种解决方式代码 浮动解决方式 绝对定位解决方式 flexbox解决方式 表格布局 网格布局 源代码 <!DOCTYPE html> <html lang"en"> <…

数据结构算法-分而治之算法

引言 在茫茫人海中找寻那个特定的身影&#xff0c;犹如在浩瀚的星海中寻找那一颗独特的星辰。小森&#xff0c;一个平凡而真实的男孩&#xff0c;此时正在人群中寻找他的朋友&#xff0c;温迪。 小森运用了一种“分而治之”的算法策略&#xff0c;将周围的人群分成两组&#…

c++day4

仿照string类&#xff0c;完成myString 类 #include <iostream> #include<cstring>using namespace std; class myString {private:char *str; //记录c风格的字符串int size; //记录字符串的实际长度public://无参构造myString():size(10){str…

mysql技术文档--之与redo log(重做日志)庖丁解析-超级探索!!!

阿丹&#xff1a; 在刚开始写本文章的是还不太清楚要如何去细啃下这两个体系&#xff0c;在查阅资料的过程中。发现大厂阿里的庖丁解InnoDB系列&#xff0c;详细了的写了很多底层知识&#xff0c;于是基于这个这两个文章才有了阿丹的这篇文章。 整体认知&#xff1a; 在 MySQ…

nVisual光纤资源管理软件,亮相第24届光博会

第24届中国国际光电博览会&#xff08;CIOE&#xff09;于9月6日至8日在深圳国际会展中心盛大开幕。作为行业领先的网络基础设施管理软件供应商&#xff0c;耐威迪携nVisual光纤资源管理软件亮相9号馆C001、C002展位&#xff0c;全方位展示室外网络基础设施管理、光纤资源管理、…

2022年全国研究生数学建模竞赛华为杯E题草原放牧策略研究求解全过程文档及程序

2022年全国研究生数学建模竞赛华为杯 E题 草原放牧策略研究 原题再现&#xff1a; 一、背景介绍   草原作为世界上分布最广的重要的陆地植被类型之一&#xff0c;分布面积广泛。中国的草原面积为3.55亿公顷&#xff0c;是世界草原总面积的6%~8%&#xff0c;居世界第二。此外…

CSP-J初赛复习大题整理笔记

本篇全是整理&#xff0c;为比赛准备. 在这里插入代码片 #include<cstdio> using namespace std; int n, m; int a[100], b[100];int main() {scanf_s("%d%d", &n, &m);for (int i 1; i < n; i)a[i] b[i] 0;//将两个数组清0&#xff0c;这…

MySQL与ES数据同步的四种方案及实践演示

文章目录 一、同步双写优点缺点双写失败风险项目演示 二、异步双写&#xff08;MQ方式&#xff09;优点缺点项目演示 三、基于Datax同步核心组件架构图支持的数据源及操作项目演示 四、基于Binlog实时同步实现原理优点缺点项目演示 一、同步双写 也就是同步调用&#xff0c;这…

切分支解决切不走因为未合并的路径如何解决

改代码的时候改做分支了&#xff0c;本来是在另一个分支上面改代码&#xff0c;结果改到另一个放置上面&#xff0c;然后想着使用git stash进行保存&#xff0c;然后切到另外一个分支再pop&#xff0c;结果不行。 报这个错误&#xff0c;导致切不过去&#xff0c;因为我这边pop…

TCP的滑动窗口与拥塞控制

客户端每发送的一个包&#xff0c;服务器端都应该有个回复&#xff0c;如果服务器端超过一定的时间没有回复&#xff0c;客户端就会重新发送这个包&#xff0c;直到有回复。 为了保证顺序性&#xff0c;每一个包都有一个 ID。在建立连接的时候&#xff0c;会商定起始的 ID 是什…

3D虚拟数字人定制,推动传统文化传播新高度

“数字人”成为“汉语盘点2022”年度十大新词语。伴随着科技发展成长的年轻人逐渐成为消费主力军&#xff0c;如何在虚拟世界与年轻一代用户互动以抓住95后年轻人受众&#xff0c;成为不少传统文化品牌发力的重点。 数字人“天妤”&#xff0c;在3D虚拟数字人定制中&#xff0…