新手编程第一个程序,历经一个月的完善,比其他都完整,保存一下。

重要知识点:

①json是用来输出一个列表,又读取一个列表的

----------输出一个列表到文件中,又在运行中读取这个文件,这样就可以反复运行啦

(不怕重复数据,因为我多加了重复就不允许的)

具体用法:https://www.cnblogs.com/xiaomingzaixian/p/7286793.html

②如果弄了main()这条式子,你用return时就会返回到这个主程序里

if __name__=='__main__': #以主程序形式运行 有这条就可以利用return,返回主程序main()

③格式化字符串,f不可或缺,不然就输出不了对应的数据了

print(f'ID为{student_id}的学生信息已修改') 

④程序里的注释都是知识点!

⑤基础知识学习指路

https://www.bilibili.com/video/BV1wD4y1o7AS

⑥其余基础知识笔记

网盘待补充

# 希望不久的未来能与更好的自己碰面
import os.path
import json
filename='student.txt' #文件名try:file = open('1.json','r',encoding='utf-8')#id1 = json.load(file)#读取json信息except:file = open('1.json', 'w', encoding='utf-8')  #try:id1 = json.load(file)  # 读取json信息except:id1=[]try:file1 = open('2.json','r',encoding='utf-8')#name1 = json.load(file1)#读取json信息
except:file1 = open('2.json', 'w', encoding='utf-8')  #try:name1 = json.load(file)  # 读取json信息except:name1=[]def main():while True:menu()try:choice=int(input('请选择:'))except:print('输入格式错误,请重新输入')continueif choice in range(0,8):if choice==0:answer=input('您确定要退出系统吗?y/n\n')if answer=='y' or answer=='Y':json_info = id1file = open('1.json', 'w', encoding='utf-8')json.dump(json_info, file)  # 将json写入文件json_info1 = name1file1 = open('2.json', 'w', encoding='utf-8')json.dump(json_info1,file1)  # 将json写入文件print('谢谢您的使用!')break #结束循环,退出系统else: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()#显示所有学生信息
def menu():print('''            ----------------------------学生信息管理系统------------------_____________________________功能菜单------------------------1.录入学生信息2.查找学生信息3.删除学生信息4.修改学生信息5.排序6.统计学生总人数7.显示所有学生信息0.退出系统-----------------------------------------------------------''')
def insert():student_list = []  # 用于inseretinsert1=Truewhile insert1==True:id=input('请输入ID(比如1001:')if not id:print('输入错误')continueif id in id1:print('ID已存在,请重新输入')continueid1.append(id)while insert1==True:     #这个缩进关系表示当姓名重复时,只重新输入姓名即可name=input('请输入姓名:')if not  name :print('输入错误')continueif name in name1:print('账号已存在,请重新输入')continuename1.append(name)break#跳出姓名的循环,继续id这个大循环while insert1==True:try:english=int(input('请输入英语成绩:'))except:print('输入无效,不是整数类型,请重新输入')continuewhile insert1==True:try:chinese=int(input('请输入语文成绩:'))except:print('输入无效,不是整数类型,请重新输入')continuewhile insert1==True:try:mathematics=int(input('请输入数学成绩:'))insert1=Falseexcept:print('输入无效,不是整数类型,请重新输入')continue#将录入的学生信息保存到字典中student={'id':id,'name':name,'english':english,'chinese':chinese,'mathematics':mathematics}#将学生信息添加到列表中student_list.append(student)save(student_list)answer=input('是否继续添加?y/n\n')if answer=='y':insert()else:print('学生信息录入完毕!')breakdef save(lst):try:stu_str=open(filename,'a',encoding='utf-8')#怕中文乱码加encodingexcept:stu_str = open(filename, 'w', encoding='utf-8') #没有就创建for item in lst:#遍历列表,因为可能一次性输入很多学生stu_str.write(str(item)+'\n')#write要用+号连接两个str,否则就相当于用两个write,这是不允许的stu_str.close()
def search():while True:student_query = []  # 相当于clear,放在循环里就不用clear了if os.path.exists(filename):id=''name=''  #先设为空mode=input('按ID查找请输入1,按姓名查找请输入2\n')if mode=='1':id=input('请输入学生ID:')elif mode=='2':name=input('请输入学生姓名:')else:print('您的输入有误,请重新输入')continuewith open(filename,'r',encoding='utf-8') as rfile:student=rfile.readlines() #student读取全部信息for item in student:#遍历studentd = dict(eval(item))if id!='':if d['id'] == id:student_query.append(d)if name!=' ':#以姓名查找if d['name']==name: #找到就加元素,找不到的在show里会统一输出查询不到student_query.append(d)#显示查询结果show_student(student_query)#请空列表answer=input('请问是否继续查询?y/n\n')if answer=='y':continue #while循环里有student_query=[] 相当于清空列表了else:print('查询结束。')returnelse:print('暂未保存学生信息,请先录入学生信息')return#返回主程序
def show_student(lst):if len(lst)==0:  #不满足前面if条件,所以还是空值,即长度为0,所以输出查询不到print('没有查询到学生信息,无数据显示!')return#定义标题显示格式format_title='{:^6}\t{:^8}\t{:^10}\t{:^10}\t{:^10}\t{:^10}'print(format_title.format('ID','姓名','英语成绩','语文成绩','数学成绩','总成绩'))#定义内容的显示格式format_data='{:^6}\t{:^8}\t{:^12}\t{:^12}\t{:^12}\t{:^12}'for item in lst:#遍历字典,把所有字典都读一遍,从而输出全部print(format_data.format(item.get('id'),item.get('name'),item.get('english'),item.get('chinese'),item.get('mathematics'),int(item.get('english'))+int(item.get('chinese'))+int(item.get('mathematics'))))def delete():while True:student_id=input('请输入需要删除的学生的id:')if student_id!=' ':#id不为空(正常输入就有下一步,不然就重复)if os.path.exists(filename):#判断filename文件会否存在,存在就进行下面with open(filename,'r',encoding='utf-8') as file:    #filename记做file   with open形式可以不用谢close(),自动关闭student_old=file.readlines()#读取多行学生信息,返回一个列表else:student_old=[]  #文件里没有学生信息#第一个if是为了引出student_old列表里的学生信息flag=False #标记是否删除if student_old:#有学生信息的话with open(filename,'w',encoding='utf-8') as wfile:#重写文件记做wfiled={}#空字典for item in student_old:#遍历列表 用于是否有相同的idd=dict(eval(item))#eval输出字符串,内置函数dict创建字典,将student_old存入字典dif d['id']!=student_id: #如果输入的id不相同,则写入wfilewfile.write(str(d)+'\n')else:#有相同id 的话不写入d=eval(item)  #字符串转字典c = list(d.values()) #字典取value值cc = c[0]id1.remove(cc)# delete_id(cc)ccc=c[1]name1.remove(ccc)# delete_name(ccc)flag=True #标记已删除if flag:print(f'id为{student_id}的学生信息已被删除')#有f才行else:print(f'没有找到ID为{student_id}的学生信息')else:print('无学生信息') #是完全没有show() #删除之后要重新显示所有学生信息answer=input('是否继续删除学生信息?y/n')if answer=='y':continueelse:print('删除操作已完成')break
def modify():while True:student_id=input('请输入需要修改的学生的id:')if student_id!=' ':#id不为空(正常输入就有下一步,不然就重复)if os.path.exists(filename):#判断filename文件会否存在,存在就进行下面with open(filename,'r',encoding='utf-8') as rfile:    #filename记做mfile   with open形式可以不用写close(),自动关闭student_old=rfile.readlines()#读取多行学生信息,返回一个列表else:print('无学生信息,请先录入学生信息')student_old=[]  #文件里没有学生信息return#第一个if是为了引出student_old列表里的学生信息flag=0if student_old:#有学生信息的话with open(filename,'w+',encoding='utf-8') as mfile:#重写文件记做mfiled={}#空字典for item in student_old:#遍历列表 用于是否有相同的idd=eval(item)#eval输出字符串,内置函数dict创建字典,将student_old存入字典dif d['id'] == student_id:print('找到学生信息,可以修改他的相关信息了!')aaa = list(d.values())aaaa = aaa[1]name1.remove(aaaa)# delete_namae(aaaa)  # 去掉遍历到的数据,把修改前的数据去掉,后面再增加新数据while True:  # 上面表示每一次都要全部遍历一遍,把文件重写(每一次)try:d['name'] = input('请输入姓名:')if d['name'] in name1:print('name已存在,请重新输入')continued['english'] = int(input('请输入英语成绩:'))d['chinese'] = int(input('请输入语文成绩:'))d['mathematics'] = int(input('请输入数学成绩:'))print(f'ID为{student_id}的学生信息已修改')  # 有f才行breakexcept:print('您的输入有误,请重新输入!!')continuea = list(d.values())bbbb = a[1]name1.append(bbbb)#以上5行用于将修改后的数据也放入列表,这样insert时就不会重复了flag=1mfile.write(str(d) + '\n')if flag!=1:#全部都没有经过if的才会输出这个print(f'没有找到ID为{student_id}的学生信息')print('现所有信息如下:')show()  # 修改之后要重新显示所有学生信息answer = input('是否继续修改学生信息?y/n')if answer == 'y':continueelse:print('修改完成')returnelse:print('输入格式错误,请重新输入')continue
'''def modify():show()if os.path.exists(filename):with open(filename,'r',encoding='utf-8') as rfile:#重写文件记做rfilestudent_old=rfile.readlines()  #读取fliename的多行信息,放在student_old中else:return #没有文件就返回菜单with open(filename,'w+',encoding='utf-8') as wfile:#可读写,重写文件while True:try:student_id = int(input('请输入需要修改学生信息的ID:'))breakexcept:print('输入非法符号,请重新输入')continuefor item in student_old:  # item遍历student_oldd = dict(eval(item))  # 将item存入字典dif d['id'] == student_id:  # 根据键获取值print('找到学生信息,可以修改他的相关信息了!')while True:  # 上面表示每一次都要全部遍历一遍,把文件重写(每一次)try:d['name'] = input('请输入姓名:')d['english'] = int(input('请输入英语成绩:'))d['chinese'] = int(input('请输入语文成绩:'))d['mathematics'] = int(input('请输入数学成绩:'))wfile.write(str(d) + '\n')  # 改好就继写入wfileprint('修改成功!!')breakexcept:print('您的输入有误,请重新输入!!')continueelse:wfile.write(str(d) + '\n')  # 遍历但是不等于输入的id 就直接写入wfile,不作任何修改# for 循环,将wfile循环填满for i in wfile:ii=dict(eval(i)) #将i存入字典iifor key,value in ii.items():aa.append(value)if student_id not in aa:#判断元素是否在列表内print('没有找到该名学生信息')answer=input('是否继续修改其他学生信息呢?y/n\n')if answer=='y':modify()  #也是循环的一种方法,不是y直接结束,是y就又重头运行else:print('修改完毕!')'''
def sort():show()#  在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:returnwhile True:asc_or_desc=input('请选择(0.升序 1.降序):')if asc_or_desc=='0':asc_or_desc_bool=False  #升序breakelif asc_or_desc == '1':asc_or_desc_bool = True  #降序.breakelse:print('您的输入有误,请重新输入')continuewhile True:mode = input('请选择排序方式(1.按英语成绩排序  2.按语文成绩排序  3.按数学成绩排序  4.按总成绩排序):')if mode=='1':student_new.sort(key=lambda x:int(x['english']),reverse=asc_or_desc_bool)#匿名函数lambdabreakelif mode =='2':student_new.sort(key=lambda x:int(x['chinese']),reverse=asc_or_desc_bool)breakelif mode == '3':student_new.sort(key=lambda x:int(x['mathematics']),reverse=asc_or_desc_bool)breakelif mode == '4':student_new.sort(key=lambda x:int(x['english'])+int(x['chinese'])+int(x['mathematics']),reverse=asc_or_desc_bool)breakelse:print('您的输入有误,请重新输入')continueshow_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(f'一共有{len(students)}名学生')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)) #把数据添加到列表 item变为字典if student_list:show_student(student_list)else:print('暂未保存书序信息!')#在别的函数里进行完这个判断,还会继续下面操作if __name__=='__main__': #以主程序形式运行 有这条就可以利用return,返回主程序main()

运行页面

相关资源:https://download.csdn.net/download/lue_dong/20678411?spm=1001.2014.3001.5503

学生管理系统(完整版)相关推荐

  1. c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx

    C语言 学生信息管理系统(完整版) 电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工 ...

  2. 学籍管理系统源代码java_java学籍管理系统完整版.zip

    [实例简介] 一个JAVA写的学籍管理系统Demo里面有完整的界面信息,和数据库连接代码.内容很完整 [实例截图] [核心代码] java学籍管理系统完整版 `-- java学籍管理系统完整版 |-- ...

  3. C# 学生成绩管理系统 完整版

    知识点 一种类似指针的数据结构? 文件的读取和写入 避免乱码 ansi 字符串读取后分割的bug 可能是因为编码问题导致的 为了解决这个bug 写入的时候直接用\r\n分割了 但是解决乱码问题之后可能 ...

  4. 学生成绩管理系统完整版

    学生成绩管理系统能够实现基本的录入.查找.插入.删除.修改.计算平均成绩.根据平均成绩排名和输出等功能. 学生成绩管理系统可以在VC++.Dev-c++等可视化环境中编译 录入(选择1):录入也是创建 ...

  5. C语言学生成绩管理系统文档版,C语言学生信息管理系统(完整版)总结.docx

    电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工程系 授课教师 杜娥 2015年12 ...

  6. ktv管理系统_7天撸完KTV点歌系统,含后台管理系统(完整版)

    最近手有点痒琢磨着做个啥,朝思暮想还是写个KTV点歌系统,模拟了一下KTV开户的思路,7天累死我了,不过技术点还挺多的,希望你可以看完(〜^㉨^)〜 用Node(Express)教你写KTV点歌系统, ...

  7. 7天撸完KTV点歌系统,含后台管理系统(完整版)

    最近手有点痒琢磨着做个啥,朝思暮想还是写个KTV点歌系统,模拟了一下KTV开户的思路,7天累死我了,不过技术点还挺多的,希望你可以看完(〜㉨)〜 用Node(Express)教你写KTV点歌系统,包括 ...

  8. 【C++】图书管理系统(完整版)

    图书管理系统功能概览: 登录,注册 学生,老师借书,查看自己当前借书情况,还书. 管理员增加书,查看当前借阅情况,查看当前所有借阅人,图书信息. 代码概览: 各个模块主要负责功能COperationM ...

  9. python学生管理系统教学_Python项目:学生信息管理系统(完整版)

    本文是基于上一篇(python项目:学生信息管理系统(初版))进行了完善,并添加了新的功能. 主要包括有: 学生信息管理系统(完整版) 学生信息管理项目,要求带操作界面,并完成每项操作: +----- ...

  10. 酒店管理与计算机技术结合,(定稿)某酒店内部管理系统的开发与应用(完整版)...

    <某酒店内部管理系统的开发与应用.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)某酒店内部管理系统的开发与应用(完整版)>相关文档资源请在帮帮文库(www.woc88 ...

最新文章

  1. centos7 python3.6升级到3.7_Centos7下把python 2.7升级到python 3.6(升级过程遇到的一些相关问题)...
  2. 计算机网络·物理层练习题
  3. http从发出请求到接收响应的旅行
  4. java监控对话框是否关闭_java – 检查是否可以安全地关闭对话框
  5. 在.net中读写XML方法的总结[转]
  6. (Object-C)学习笔记(一)--开发环境配置和与c语言的区别
  7. 学习笔记1-Linux1
  8. textView 父视图alpha设置不影响子视图
  9. 论文笔记_S2D.36_2017-CVPR_CNN-SLAM: 实时稠密单目SLAM与学习深度预测
  10. Android 系统签名(踩坑记)
  11. 《数字图像处理》第三版笔记(一)模糊处理
  12. 2019FME博客大赛——FME在室内地图数据构建中的应用
  13. 3dmax:3dmax三维VR渲染设置(V-Ray帧缓存、V-Ray全局开关、V-Ray图像采样器、自适应细分采样器、V-Ray环境、全局确定性蒙特卡、摄像机、颜色贴图)之详细攻略(切记收藏!)
  14. HTML5设计注册/登录界面
  15. 简单的 js 日历控件
  16. Android开发笔记01-TextView01
  17. Python+Vue计算机毕业设计H5的豫宛旅游网站v6giy(源码+程序+LW+部署)
  18. 微信公众平台 自动回复消息
  19. 百分点感知智能实验室:计算机视觉理论和应用研究
  20. LeetCode——1834. 单线程 CPU(Single-Threaded CPU)[中等]——分析及代码(Java)

热门文章

  1. 毕业设计 英雄联盟数据分析与预测 -大数据分析 可视化 机器学习
  2. 预览pdf 印章不显示问题
  3. 【邢不行|量化小讲堂系列45-实战篇】关于股票市值:99%投资者不知道的坑,你知道吗?
  4. FreeMind:简单粗暴完成一份思维导图
  5. 蓝桥杯:三羊献瑞(答案不唯一)
  6. 老调重弹:JDBC系列 之 驱动加载原理全面解析
  7. CatDriver 小米 猫盘 Boot Info
  8. JAVA课程设计——小学数学练习
  9. sw转cad映射文件_SolidWorks转CAD映射文件使用教程(附下载)
  10. SmartFoxServer(SFS) 是什么?