python:六天让你学会 ”系统开发“
本篇文章主要讲解系统开发的基本流程,以及控制台实现 ——x x x学生管理系统 ——的实战开发,如果说你还不会或者或还没想好学习哪种编程语言,强烈推荐==>>一定要看完本篇文章,一定会让你收益匪浅,并且让你对python语言产生一定程度的兴趣,一起来瞧瞧吧==>>>>
一、了解系统需求分析
什么系统需求分析,它有什么作用?
系统需求分析是给客户和开发人员一个双向的说明书,就像你买的什么产品,它不仅面向客户:你,还面向售卖店,
双向的解释说明。
**对于客户而言:**这个需求分析就是和用户协商的结论,有一些可实现的客户的需求,比如讲产品什么样子,实现什么功能等等……
**对于开发人员:**这个需求分析就是你系统开发时的一个基本准则或者说你实现的核心思想,也就是说你都开发都要围绕这个系统需求分析展开。
二、x x x学生管理系统
系统需求分析
1、系统功能
(1)添加学生
1、数据唯一值(标识列):学号(stu_id)
2、如果存在: 提示用户==>>继续输入
3、如果不存在: 引导用户输入数据/信息==>>保存数据
4、提示用户:是否返回主菜单
(2)删除学生
1、如果存在: 引导用户删除==>>删除数据==>>提示删除成功
2、如果不存在: 提示用户==>>继续输入
3、提示用户:是否返回主菜单
(3)修改学生信息
1、如果存在: 引导用户修改==>>更新数据==>>提示修改成功
2、如果不存在: 提示用户==>>继续输入
3、提示用户:是否返回主菜单
(4)查询某个学生信息
1、如果存在: 将该学生所有信息罗列
2、如果不存在: 提示用户==>>继续输入
3、提示用户:是否返回主菜单
(5)展示所有学生信息
1、将容器中的所有学生所有信息罗列
2、展示:平均分、总人数、及格人数、及格率
2、提示用户:是否返回主菜单
(6)退出系统
2、系统分析
(1)学生信息:
stu_id | stu_name | stu_sex | stu_age | stu_score |
---|---|---|---|---|
学号 | 姓名 | 性别 | 年龄 | 成绩 |
(2)数据的保存方式
1.我们目前学了变量、列表、元组、字典、集合等临的时性的变量
2.但是变量、元组、集合不适合,因为变量只能存储一个,元组是不可变数据类型,集合不能存储可变数据类型,所以淘汰
3、那么只剩下列表和字典,但是列表使用太过于笨重,开发效率低,只能选择字典
# 【0】首先排除元组和集合,元组是不可变数据类型,不能赠、删、改数据,集合不能存储可变数据类型
# 【1】使用列表嵌套
stu_list = [{"stu_id": "000000001", "stu_name": "张三", "stu_sex": "男", "stu_age": 18}]
# 获取:必须通过循环遍历
# 结论:不能直接获取学生的基本信息,操作麻烦,开发效率低
# 【2】使用字典嵌套
stu_dict = {"000000001":{"stu_id": "000000001", "stu_name": "张三", "stu_sex": "男", "stu_age": 18}}
# 获取:通过key键就可直接获取学生的全部信息
# 结论:可直接获取学生的基本信息,操作简单,大大提高了开发效率
(3)搭建系统架构
1. 因为我们目前学到函数,所以定义函数,显示操作菜单,并且同步用户的选择
2. 通过用户的不同选择,判断执行那种功能
(4)按需求分析是实现功能
**注意:**首先,我们目前学到控制台,还没有学到组件等,所以使用控制台
1、版面设计:**引导用户,所以需要导航栏,使用一切办法美化控制它输出导航栏
# 【1】首先需要一个导航栏,引导客户
def navigation_Bar():
# 为了美观,使用符号搭建一对导航条
print("=====================学生管理系统=====================")
# 1.添加新同学
print(" 添加新同学:1")
# 2.删除同学信息
print(" 删除同学信息:2")
# 3.修改同学信息
print(" 修改同学信息:3")
# 4.查询单个同学信息
print(" 查询学生信息:4")
# 5.展示所有同学信息
print(" 展示所有学生信息:5")
# .退出系统
print(" 退出系统:6")
print("======================================================")
**2、数据存储:**字典嵌套
# 【0】创建存储学生信息的容器——字典,并录入一些学生的信息
# 1、因为全局变量会在程序结束完毕时释放内存,所以下一次运行将没有数据,为了保证程序的正常运行,所以一定要给字典存入数据,这样不管那一次执行,都会有数据存在
# 2、因为唯一值是学号,那么我们就将学号设置为外键,键值为子字典,这个子字典存储了学生的全部信息,也就是说一个学号对应一个字典,那么当我们取数据的时候就可以直接通过唯一值学号直接访问数据
stu_dict = {
"000": {"stu_id": "000", "stu_name": "张三", "stu_sex": "男", "stu_age": 18, "stu_score": 100},
"001": {"stu_id": "001", "stu_name": "李四", "stu_sex": "男", "stu_age": 19, "stu_score": 98},
"002": {"stu_id": "002", "stu_name": "王五", "stu_sex": "男", "stu_age": 17, "stu_score": 80},
"003": {"stu_id": "003", "stu_name": "赵六", "stu_sex": "男", "stu_age": 20, "stu_score": 45},
"004": {"stu_id": "004", "stu_name": "小明", "stu_sex": "男", "stu_age": 18, "stu_score": 78},
"005": {"stu_id": "005", "stu_name": "小梅", "stu_sex": "女", "stu_age": 18, "stu_score": 58},
"006": {"stu_id": "006", "stu_name": "小花", "stu_sex": "女", "stu_age": 20, "stu_score": 25},
"007": {"stu_id": "007", "stu_name": "小刚", "stu_sex": "男", "stu_age": 18, "stu_score": 65},
"008": {"stu_id": "008", "stu_name": "小丽", "stu_sex": "女", "stu_age": 18, "stu_score": 70},
"009": {"stu_id": "009", "stu_name": "小华", "stu_sex": "男", "stu_age": 20, "stu_score": 60},
"010": {"stu_id": "010", "stu_name": "小萍", "stu_sex": "女", "stu_age": 16, "stu_score": 45},
}
**3、功能 ① :**添加新学生信息 ,并调试
def add_stu():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
# 1.首先让用户输入学号,判断该学生是否存在
stu_id = input("请输入学号:")
# 2.判断学生学号是否该字典中
if stu_id not in stu_dict and len(stu_id) == 3 :
# 1.如果不在,那么就能添加
stu_name = input("姓名:")
stu_sex = input("性别:")
stu_age = int(input("年龄:"))
stu_score = int(input("成绩:"))
# 2.创建一个子字典来存入录入的学生信息
singleness_dict = {
"stu_id": stu_id, "stu_name": stu_name, "stu_sex": stu_sex, "stu_age": stu_age,
"stu_core": stu_score
}
# 3.将子字典存入学生字典
stu_dict[stu_id] = singleness_dict
# 3.提示用户录入成功
print("录入成功!")
print(stu_dict)
else:
# 如果在,就不能添加,并提示客户
print("该学号已被注册...")
# 执行完后,引导用户退出
go_back = input("返回主菜单请输入0,否则按任意键:")
# 如果退出就输入0,否则将继续添加
if go_back == '0':
# 判断是0后结束该函数
print("")
print("")
# 是就结束该函数
return
**3、功能 ②:**删除学生信息
# 【4】功能② :删除学生信息
def remove():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
# 1.首先让用户输入学号,判断该学生是否存在
stu_id = input("学号:")
# 2.如果该学号存在于字典中,那么就删除
if stu_id in stu_dict:
# 1.删除学生信息
del stu_dict[stu_id]
# 2.提示用户删除成功
print("删除成功!")
# 3.如果输入的学号不存在,那么就提示用户
else:
print("该学号学生不存在,请重新输入...")
go_back = input("返回主菜单请输入0,否则请按任意键:")
# 判断用户是否返回主菜单
if go_back == '0':
print("")
print("")
# 是就结束该函数
return
4、功能 ③:修改学生数据
# 【5】功能 ③ :修改学生信息
def amend():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
# 1.首先让用户输入学号,判断该学生是否存在
stu_id = input("请输入学号:")
# 2.如果该学号存在于字典中,那么就修改
if stu_id in stu_dict:
# 注意:在这里修改的本质:实际上就是说将你原本的信息删除,再重新将新的数据导入
# 但是,我们使用的是字典存储的数据,那么就可以直接替换掉
# 1.先让用户输入新的数据
new_name = input("姓名:")
new_sex = input("性别:")
new_age = int(input("年龄:"))
new_score = int(input("成绩:"))
# 2.将学生信息放入新的字典
new_dict = {"stu_id": stu_id, "stu_name": new_name, "stu_sex": new_sex,
"stu_age": new_age, "stu_score": new_score
}
# 3.将这个新的字典存入学生字典
stu_dict[stu_id] = new_dict
print(stu_dict)
# 如果该学生不在,那么就提示用户
else:
print("抱歉,该学号学生不存在,请重新输入...")
go_back = input("返回主菜单请输入0,否则请按任意键:")
# 判断用户是否返回主菜单
if go_back == '0':
print("")
print("")
# 是就结束该函数
return
**5、功能 ④:**查询单个学生信息
# 【6】功能 ④ :查询某个学生信息
def inquire():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
# 1.首先让用户输入学号,判断该学生是否存在
stu_id = input("请输入学号:")
# 2.如果学生存在那么就查询
if stu_id in stu_dict:
# 问题: 因为我们要的数据再子字典中,而现在是字典嵌套
# 解决:所以我们先用学号键找到对应的键值字典,再通过找到的这个字典再通过姓名、性别这样的键找到我们想要的值
print("| 学号:%s | 姓名:%s | 性别:%s | 年龄:%d | 成绩:%d "
% (stu_dict[stu_id]["stu_id"], stu_dict[stu_id]["stu_name"], stu_dict[stu_id]["stu_sex"],
stu_dict[stu_id]["stu_age"], stu_dict[stu_id]["stu_score"]))
# 不存在就提示
else:
print("该学号学生不存在,请重新输入……")
go_back = input("返回主菜单请输入0,否则请按任意键:")
# 判断用户是否返回主菜单
if go_back == '0':
print("")
print("")
# 是就结束该函数
return
**6、功能 ⑤ :**展示所有学生信息,以及平均分、总人数、及格人数、及格率
# 【7】功能 ⑤ :展示所有学生信息
def show_all():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
# 3.定义一个变量,来存入总分、几个人数、总人数
score_sum = 0
pass_people = 0
all_people = 0
# 问题:如何拿到里面的值?
# 思路:可以先将所有键值子字典遍历出来,键值遍历出来以后再通过对应的键取出数据
for values in stu_dict.values():
# 3.此时已经拿到了子字典values
# 4.再通过键拿到子字典中的键值
print("| 学号:%s | 姓名:%s | 性别:%s | 年龄:%d | 成绩:%d "
% (values["stu_id"], values["stu_name"], values["stu_sex"],
values["stu_age"], values["stu_score"]))
# 5.将每个人都成绩存入变量,计算总成绩
score_sum += values["stu_score"]
# 每次循环就证明有多少个人,那么人数就每次+1
all_people += 1
# 当成绩>=60的时候说明及格了,那么人数就+1
if values["stu_score"] >= 60:
pass_people += 1
# 计算平均分
average = score_sum / len(stu_dict)
# 计算及格率
pass_rete = pass_people / all_people * 100
print("==================================================================")
print("平均分:%.1f分" % average )
print("及格人数:%d人" % pass_people)
print("总人数:%d人" % all_people)
print("及格率:%.1f%%" % pass_rete)
print("==================================================================")
go_back = input("返回主菜单请输入0,否则按任意键:")
# 判断用户是否返回主菜单
if go_back == '0':
print("")
print("")
# 是就结束该函数
return
**8、定义主函数:**main,串联整个整个应用程序
# 【2】主函数,与整个程序共存亡
def main():
# 由于该程序是一次性的,所以为了不让一次性执行完,那么就采用死循环
while True:
navigation_Bar()
# 【3】录入用户输入的信息
choose = input("请输入要选择的数字:")
# 【4】判断输出的是什么选项
# 1.添加新同学
if choose == '1':
# 调用添加新同学函数
add_stu()
# 2.删除同学信息
elif choose == '2':
# 删除学生信息
remove()
# 3.修改同学信息
elif choose == '3':
# 修改学生信息
amend()
# 4.查询某个同学信息
elif choose == '4':
# 查询某个学生信息
inquire()
# 5.展示所有同学信息
elif choose == '5':
# 展示所有学生信息
show_all()
# 功能: 6 .退出系统
elif choose == '6':
print("您已安全退出!")
# 在这里return表示结束程序
return
# 如果没有输入1-6之间的数字,则提示用户输入错误,并重新输入
else:
print("抱歉,输入错误,请重新输入...")
三、总结
以上均为开发该项目(学生管理系统)的基本流程,因为本人是学习python基础第五天,第六天开发的此项目,所用的知识点均为基础知识,但是已经实现了该项目的基本功能。在此本人已深深体会到python的强大,处理数据更是一绝,如果说你还不知道要学习哪种编程语言的话,本人建议还是先学python吧,python不仅语法简单,而且容易上手。今天就总结到这里吧,敬请关注本人下一篇实战博客!