【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯
【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯
今天我们来运用python进行实战,做一个学生管理系统项目,顺便对以前的知识点进行汇总和练习!
首先做一个项目不单单只是和我们以前一样,上去就打代码
而是需要我们对这个项目进行具体的分析以后,才去使用代码进行具体的实现
最后运用代码实现完毕以后,在对其项目进行调试更改才算完成
接下来就由鄙人带大家对这个学生管理系统项目进行逐步的实现.
需求分析
作用:
客户和开发人员双向的一个说明书
对于客户而言:
这个需求分析就是一个基本的说明书,和客户进行协商(产品经理主要就是和客户对接)
对于开发人员而言:
这个需求分析就是系统开发的一个核心思想路线,开发工作主要就是围绕着需求分析进行开展(关键字(变量、函数、类名称)之类)
学生信息
- 学号、姓名、年龄、Python成绩
系统的功能分析
系统功能
添加学生
删除学生
修改学生
查询学生
展现所有学生信息
统计平均分
统计及格率
退出程序
保存数据
数据的保存地址
我们都知道数据保存在什么地方?取决于数据的重要层次
学生信息显而易见是比较重要的信息,所以我们把这些信息保存在硬盘中的文件中
数据的保存方式
我们只能从元祖、列表、集合、字典中选择字典,其原因是方便我们对学生信息进行保存,记录
使用学号作为每个学生字典的键值,方便我们对信息进行查询和修改
系统架构搭建
- 将数据写入文件.分别定义功能函数、
- 显示操作菜单,并且监听用户的选择
- 通过用户的选择进行条件判断
- 按照需求分析实现功能
对项目分析完以后,然后就是使用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就算完成了.
***以后鄙人会定期为大家推送实战案例,希望大家对鄙人博客有什么意见和提议可以评论出来,一块学习进步,在此谢过!***
【名字无关紧要,实战才是唯一】——吾神·娜迦卡布洛斯相关推荐
- 启明医疗完成收购Cardiovalve公司股权;全球首个且唯一红细胞成熟剂利布洛泽中国获批治疗β-地中海贫血 | 医药健闻...
歌礼宣布第二款FASN抑制剂ASC60治疗晚期实体瘤的临床试验申请获中国国家药监局受理.歌礼制药有限公司宣布经与中国国家药品监督管理局沟通交流,歌礼第二款脂肪酸合成酶(FASN)抑制剂ASC60治疗晚 ...
- 唯独发奋,努力,勤奋做事才是唯一的出路 C#-患者实体类
您可能因为家事, 或者其他事情的拖累,导致如此功能的实现,都显得无比艰难的样子了! 只是不管怎么样,总会好起来的,熬过这段艰难,无比艰辛的日子后. 可能任何一个人都要经历的无比艰难,困难,困窘的日子, ...
- SpringBoot实战:设备唯一ID生成【雪花算法、分布式应用】
目录 SpringBoot实战:设备唯一ID生成[雪花算法.分布式应用] 背景: snowflake(雪花算法)方案: 实现: 雪花算法生成ID: 二维码打包: 多线程优化-批量插入: 二维码识别+扫 ...
- sklearn实战之逻辑回归与制作评分卡
sklearn实战系列: (1) sklearn实战之决策树 (2) sklearn实战之随机森林 (3) sklearn实战之数据预处理与特征工程 (4) sklearn实战之降维算法PCA与SVD ...
- java原神抽卡器(可查询版本)
原神官方给的概率: 5星基础:0.6%,5星保底:1.6%,90抽5星保底: 4星基础:5.1%,4星保底:13%,10抽4星保底. 一开始我也想着直接用官方给的概率设置直接写入,但发 ...
- 原神抽卡模拟器(java简易版)
原神抽卡机制 单抽概率: 5★物品:0.6% 4★物品:5.1% 保底机制: 5★保底:如果连续89发没出5星,第90抽必定5星,然后重新计数 4★保底:如果连续9发没出4星,第10抽触发4星保底:0 ...
- 我用java分析了原神抽卡记录
起因 我们都知道原神抽卡是有保底机制的,但是游戏里面只能按页查看抽卡记录,并没有各种数据统计,为了能够优化大家的游戏体验,本文就带大家用java爬虫来获取抽卡信息. 抽卡信息api解析 由于我用的是安 ...
- java 做的原神抽卡模拟小程序
java做的原神抽卡模拟小程序 难度不大,适合学完面向对象后做着玩. import java.util.ArrayList; import java.util.Calendar; import jav ...
- 原神抽卡模拟器,unity制作(由于没有获得作者的视频授权,不会发布软件,只展示算法与开发等,效果图在个人主页类有资源下载,不会上传视频)
五星效果图 以上为展示,没做优化 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...
最新文章
- Android 启动模式简介
- QT教程2:QT5的体系构架
- JAVA BIO与NIO、AIO的区别
- elasticsearch存储空间不足导致索引只读,不能创建
- win7电脑0x000007b蓝屏怎么办
- 提高国内访问 GitHub 的速度的方案
- 日首相:对韩日问题深感遗憾 将采取强硬应对措施
- java开发 网关_SpringCloud系列之网关(Gateway)应用篇
- 手把手教你用Python实现人脸识别,辨别真假!
- WebStorm介绍
- lisp画表盘刻度线_Lisp-Stat翻译 —— 第九章 统计绘图窗体
- matlab ldiv,MATLAB入门教程精选
- 【数论】范数(norm)
- 软件工程第二次作业--结对编程
- 微信公众号ID也可以修改了!
- 务实至上:“PHP之父”Rasmus Lerdorf访谈录
- main函数的argc与arg
- 求职经验丨应届毕业生,如何找到一份程序员工作呢?
- 操作系统—存储器管理
- Ubuntu 20安装 Qt5.9
热门文章
- WMS item与LPN的关系
- 脚本引流的震撼效果是真的么?脚本引流的话术真的重要?
- JVM面试题整理-Java内存区域与内存溢出异常、垃圾收集器和内存分配策略
- 基于华为鲲鹏云的c语言程序设计,华为DevRun第四讲,华为云鲲鹏云服务移植快速入门与实践...
- C++ string类和常用接口的实现
- 新浪微博Android客户端开发之OAuth认证篇
- 终于把python的所有库整理完毕了,现在一篇python库的字典诞生了
- 解决使用人人开源,搭建前端环境问题(renren-fast-vue)
- 计算机房七氟丙烷气体灭火系统设计 施工安,计算机房七氟丙烷气体灭火系统...
- MYSQL JDBC快速查询响应的方法,快速返回机制的实现