【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯

今天我们来运用python进行实战,做一个学生管理系统项目,顺便对以前的知识点进行汇总和练习!

  • 首先做一个项目不单单只是和我们以前一样,上去就打代码

  • 而是需要我们对这个项目进行具体的分析以后,才去使用代码进行具体的实现

  • 最后运用代码实现完毕以后,在对其项目进行调试更改才算完成

接下来就由鄙人带大家对这个学生管理系统项目进行逐步的实现.

需求分析

作用:

客户和开发人员双向的一个说明书

对于客户而言:

这个需求分析就是一个基本的说明书,和客户进行协商(产品经理主要就是和客户对接)

对于开发人员而言:

这个需求分析就是系统开发的一个核心思想路线开发工作主要就是围绕着需求分析进行开展(关键字(变量、函数、类名称)之类)

学生信息

  • 学号、姓名、年龄、Python成绩

系统的功能分析

系统功能

  1. 添加学生

  2. 删除学生

  3. 修改学生

  4. 查询学生

  5. 展现所有学生信息

  6. 统计平均分

  7. 统计及格率

  8. 退出程序

  9. 保存数据

数据的保存地址

我们都知道数据保存在什么地方?取决于数据的重要层次

学生信息显而易见是比较重要的信息,所以我们把这些信息保存在硬盘中的文件中

数据的保存方式

我们只能从元祖、列表、集合、字典中选择字典,其原因是方便我们对学生信息进行保存,记录

使用学号作为每个学生字典的键值,方便我们对信息进行查询和修改

系统架构搭建

  1. 将数据写入文件.分别定义功能函数、
  2. 显示操作菜单,并且监听用户的选择
  3. 通过用户的选择进行条件判断
  4. 按照需求分析实现功能

项目分析完以后,然后就是使用Python去实现学生管理系统.

实践

写入初始数据

# 导入os模块包
import os# 创建一个字典,在其中放入初始数据,以学号做为学生信息的键
# all_dict = {"123": {"num": 123, "name": "张三", "age": 15, "python": 98},
#             "223": {"num": 223, "name": "李四", "age": 78, "python": 2}}
# 将初始字典中已有的数据进行写入到硬盘的文件中进行保存
# 如果文件夹中没有我们目标文件的话,w操作可以创建一个
# with open("学生管理系统.txt","w",encoding="utf-8") as fing:
#     fing.write(str(all_dict))

读取到字典中

# 再定义一个新的空字典
all_dict = {}# 定义一个函数,将文件中的数据读取到定义的新的空字典中
def fangfa():# os.path.exists的意思是判断括号里的文件是否存在if os.path.exists("学生管理系统.txt"):# 将文件中的数据读取到新的字典中,使用utf-8进行读取with open("学生管理系统.txt", "r", encoding="utf-8") as file:ret = file.read()# 由于新的字典是在函数外部,我们要对其进行更改的话# 需要使用global函数  对其更改global all_dict# 将数据读取到以后,用eval函数返回到原来的类型.# 将数据存到新的字典中all_dict = eval(ret)print("数据加载完成")

定义添加学生功能函数

def add_func():# while循环可以使用户操作完本功能以后,选择是否继续进行操作本功能while True:# 引导用户输入学号little_put = input("请输入你的学号: ")if little_put in all_dict:# 如果已经存在,则无法添加print("该用户已存在,无法添加")else:# 如果不存在的话,就引导用户进行注册print("该用户不存在,请注册一个用户")num_put = input("请输入你的学号: ")name_put = input("请输入你的姓名: ")age_put = input("请输入你的年龄: ")python_put = input("请输入你的成绩: ")# 输入完信息以后将信息添加到新的字典中all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}# 然后把添加以后的字典写入到文件中,w操作会对文件中的数据进行重新书写# 刚好完成我们的添加功能with open("学生管理系统.txt", "w", encoding="utf-8") as fing:fing.write(str(all_dict))print("上传信息成功")re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")if re_minu == "1":returnelse:continue

定义删除学生功能函数

def del_func():while True:little_put = input("请输入你的学号: ")if little_put in all_dict:# 如果学号存在的话,删除该学生信息del all_dict[little_put]print("该用户已删除")# 并且同步文件中的数据with open("学生管理系统.txt", "w", encoding="utf-8") as fing:fing.write(str(all_dict))print("上传信息成功")else:# 如果不存在的话,那么则显示已经删除print("该用户已经删了")re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")if re_minu == "1":returnelse:continue

定义修改学生功能函数

def revise_func():while True:little_put = input("请输入你的学号: ")if little_put in all_dict:# 如果学号存在的话# 那么就继续输入信息name_put = input("请输入你的姓名: ")age_put = input("请输入你的年龄: ")python_put = input("请输入你的成绩: ")new_dict = {'no': little_put, 'name': name_put, 'age': age_put, 'score': python_put}# 修改字典中的值all_dict[little_put] = new_dictprint("修改学员信息成功!")with open("学生管理系统.txt", "w", encoding="utf-8") as fing:fing.write(str(all_dict))print("上传信息成功")else:# 如果不存在的话,就引导用户添加一个print("该用户还不存在,请添加一个")num_put = input("请输入你的学号: ")name_put = input("请输入你的姓名: ")age_put = input("请输入你的年龄: ")python_put = input("请输入你的成绩: ")all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}with open("学生管理系统.txt", "w", encoding="utf-8") as fing:fing.write(str(all_dict))print("上传信息成功")re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")if re_minu == "1":returnelse:continue

定义查询学生功能函数和展现所有学生信息功能函数

def query_func():while True:little_put = input("请输入你的学号: ")if little_put in all_dict:# 如果存在直接输出信息print("该用户的信息如下: ")print(all_dict[little_put])else:# 不存在的话,无法查询,引导用户注册print("该用户不存在无法查询")print("请先注册!")num_put = input("请输入你的学号: ")name_put = input("请输入你的姓名: ")age_put = input("请输入你的年龄: ")python_put = input("请输入你的成绩: ")all_dict[num_put] = {"num": num_put, "name": name_put, "age": age_put, "python": python_put}print(all_dict)re_minu = input("是否返回主菜单?是的话请输入1不返回的话输入任意值")if re_minu == "1":returnelse:continuedef look_func():print("-------所有学员的信息----------")for idx in all_dict.values():print("学号:%s|姓名:%s|年龄:%d|成绩:%d" % (idx["num"], idx["name"], idx["age"], idx["python"]))print("****************************************************")

定义统计平均分功能函数

def avg_func():# 定义一个变量cc = 0print("-------所有学员的平均分----------")# for循环遍历字典中的所有的值for idx in all_dict.values():# 用变量c和python成绩相加求出总成绩c += int(idx["python"])# 然后用a来储存平均分# 总成绩c整除字典中学生的人数得出平均分a = c // len(all_dict)print(a)print("班级的平均分是%d" % a)

定义统计及格率功能函数

def pr_func():# 定义一个变量cc = 0# for循环遍历字典中的所有的值for idx in all_dict.values():# 用if判断遍历的该学生的成绩是否及格if int(idx["python"]) >= 60:# 如果及格的话c+1c += 1# 最后用a来储存最后的及格率# 及格的人数除于总人数乘以100加%%就是及格率a = c / len(all_dict) * 100print("班的及格率是%.f%%" % a)

程序运行主程序

# 调用读取文件中数据功能函数
fangfa()
# while循环进行反复操作
while True:# 学生管理系统菜单print("*******************************")print("**********学生管理系统**********")print("1:添加学生")print("2:删除学生")print("3:修改学生")print("4:查询学生")print("5:显示所有学生信息")print("6:统计平均分")print("7:统计及格率")print("8:退出程序")print("9:保存数据")print("*******************************")main_put = int(input("请按照序号进行你需要执行的操作: "))# 根据菜单输入指定的操作功能,用if判断进行调用相应的函数if main_put == 1:add_func()print("添加成功")print(all_dict)elif main_put == 2:del_func()print("删除成功")print(all_dict)elif main_put == 3:revise_func()print("修改成功")print(all_dict)elif main_put == 4:query_func()print("查询成功")elif main_put == 5:look_func()print("查看所有学员的信息成功")elif main_put == 6:avg_func()print("平均分计算成功")elif main_put == 7:pr_func()print("及格率计算成功")elif main_put == 8:# 退出程序使用breakprint("程序已退出!")breakelif main_put == 9:# 保存数据就是把新的字典中的数据写到文件中with open("学生管理系统.txt", "w", encoding="utf-8") as fing:fing.write(str(all_dict))print("保存信息成功")break

最后调式完毕以后,我们的实战Python就算完成了.

***以后鄙人会定期为大家推送实战案例,希望大家对鄙人博客有什么意见和提议可以评论出来,一块学习进步,在此谢过!***

【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯相关推荐

  1. 启明医疗完成收购Cardiovalve公司股权;全球首个且唯一红细胞成熟剂利布洛泽中国获批治疗β-地中海贫血 | 医药健闻...

    歌礼宣布第二款FASN抑制剂ASC60治疗晚期实体瘤的临床试验申请获中国国家药监局受理.歌礼制药有限公司宣布经与中国国家药品监督管理局沟通交流,歌礼第二款脂肪酸合成酶(FASN)抑制剂ASC60治疗晚 ...

  2. 唯独发奋,努力,勤奋做事才是唯一的出路 C#-患者实体类

    您可能因为家事, 或者其他事情的拖累,导致如此功能的实现,都显得无比艰难的样子了! 只是不管怎么样,总会好起来的,熬过这段艰难,无比艰辛的日子后. 可能任何一个人都要经历的无比艰难,困难,困窘的日子, ...

  3. SpringBoot实战:设备唯一ID生成【雪花算法、分布式应用】

    目录 SpringBoot实战:设备唯一ID生成[雪花算法.分布式应用] 背景: snowflake(雪花算法)方案: 实现: 雪花算法生成ID: 二维码打包: 多线程优化-批量插入: 二维码识别+扫 ...

  4. sklearn实战之逻辑回归与制作评分卡

    sklearn实战系列: (1) sklearn实战之决策树 (2) sklearn实战之随机森林 (3) sklearn实战之数据预处理与特征工程 (4) sklearn实战之降维算法PCA与SVD ...

  5. java原神抽卡器(可查询版本)

    原神官方给的概率: 5星基础:0.6%,5星保底:1.6%,90抽5星保底:         4星基础:5.1%,4星保底:13%,10抽4星保底. 一开始我也想着直接用官方给的概率设置直接写入,但发 ...

  6. 原神抽卡模拟器(java简易版)

    原神抽卡机制 单抽概率: 5★物品:0.6% 4★物品:5.1% 保底机制: 5★保底:如果连续89发没出5星,第90抽必定5星,然后重新计数 4★保底:如果连续9发没出4星,第10抽触发4星保底:0 ...

  7. 我用java分析了原神抽卡记录

    起因 我们都知道原神抽卡是有保底机制的,但是游戏里面只能按页查看抽卡记录,并没有各种数据统计,为了能够优化大家的游戏体验,本文就带大家用java爬虫来获取抽卡信息. 抽卡信息api解析 由于我用的是安 ...

  8. java 做的原神抽卡模拟小程序

    java做的原神抽卡模拟小程序 难度不大,适合学完面向对象后做着玩. import java.util.ArrayList; import java.util.Calendar; import jav ...

  9. 原神抽卡模拟器,unity制作(由于没有获得作者的视频授权,不会发布软件,只展示算法与开发等,效果图在个人主页类有资源下载,不会上传视频)

    五星效果图 以上为展示,没做优化 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...

最新文章

  1. Android 启动模式简介
  2. QT教程2:QT5的体系构架
  3. JAVA BIO与NIO、AIO的区别
  4. elasticsearch存储空间不足导致索引只读,不能创建
  5. win7电脑0x000007b蓝屏怎么办
  6. 提高国内访问 GitHub 的速度的方案
  7. 日首相:对韩日问题深感遗憾 将采取强硬应对措施
  8. java开发 网关_SpringCloud系列之网关(Gateway)应用篇
  9. 手把手教你用Python实现人脸识别,辨别真假!
  10. WebStorm介绍
  11. lisp画表盘刻度线_Lisp-Stat翻译 —— 第九章 统计绘图窗体
  12. matlab ldiv,MATLAB入门教程精选
  13. 【数论】范数(norm)
  14. 软件工程第二次作业--结对编程
  15. 微信公众号ID也可以修改了!
  16. 务实至上:“PHP之父”Rasmus Lerdorf访谈录
  17. main函数的argc与arg
  18. 求职经验丨应届毕业生,如何找到一份程序员工作呢?
  19. 操作系统—存储器管理
  20. Ubuntu 20安装 Qt5.9

热门文章

  1. WMS item与LPN的关系
  2. 脚本引流的震撼效果是真的么?脚本引流的话术真的重要?
  3. JVM面试题整理-Java内存区域与内存溢出异常、垃圾收集器和内存分配策略
  4. 基于华为鲲鹏云的c语言程序设计,华为DevRun第四讲,华为云鲲鹏云服务移植快速入门与实践...
  5. C++ string类和常用接口的实现
  6. 新浪微博Android客户端开发之OAuth认证篇
  7. 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了
  8. 解决使用人人开源,搭建前端环境问题(renren-fast-vue)
  9. 计算机房七氟丙烷气体灭火系统设计 施工安,计算机房七氟丙烷气体灭火系统...
  10. MYSQL JDBC快速查询响应的方法,快速返回机制的实现