Python 高级变量类型 --- 综合应用 - 名片管理系统

综合应用 - 名片管理系统

目标

综合应用已经学习过的知识点

  • 变量
  • 流程控制
  • 函数
  • 模块

开发 名片管理系统

系统需求

  • 1,程序启动,显示名片管理系统欢迎界面,并显示功能菜单
*********************************************************************
欢迎使用【名片管理系统】v1.0

1,新建名片
2,显示全部   
3,查询名片

0,退出系统
*********************************************************************
  • 2,用户用数字选择不同的功能
  • 3,根据功能选择,执行不同的功能
  • 4,用户名片需要记录用户的 姓名、绰号、能力、出身、地位、悬赏金
  • 5,如果查询到指定的名片,用户可以选择 修改 或者 删除 名片

步骤

1,框架搭建
2,新增名片
3,显示所有名片
4,查询名片
5,查询成功后修改、删除名片
6,让python程序能够直接运行

1,框架搭建

目标

  • 搭建 名片管理系统 框架结构

    1,准备文件,确定文件名,保证能够 在需要的位置 编写代码
    2,编写 主运行循环,实现基本的 用户输入和判断

1.1 文件准备

1,新建cards_main.py保存 主程序功能代码

  • 程序入口
  • 每一次启动名片管理系统通过main这个文件启动

2,新建cards_tools.py保存 所有名片功能函数

  • 将对名片的 新增、查询、修改、删除 等功能封装在不同的函数中

1.2 编写主运行循环

  • cards_main 中添加一个无限循环

	while True:
		# TODO(作者/邮件) 显示系统菜单
		action_str = input("请选择操作功能:")
	
		print("您选择的操作是: %s" % action_str)
	
		# 根据用户输入决定后续的操作
		if action_str in ["1", "2", "3"]:
			pass

			# 1,新建名片
			if action_str == "1":
				pass

			# 2,显示全部
			if action_str == "2":
				pass

			# 3,搜索名片
			if action_str == "3":
				pass

		elif action_str == "0":
			# 0,退出系统
			print("欢迎再次使用【名片管理系统】")
			break

		else:
			print("输入错误,请重新输入")
	
    
    # 结果呈现	
	请选择操作功能:6
	您选择的操作是: 6
	输入错误,请重新输入
	请选择操作功能:1
	您选择的操作是: 1
	请选择操作功能:0
	您选择的操作是: 0
	欢迎再次使用【名片管理系统】

字符串判断


if action in ["1", "2", "3"]:


if action == "1" or action == "2" or action == "3":

1,使用 in 针对 列表 判断,避免使用 or 拼接复杂的逻辑条件
2,没有使用 int 转换用户输入,可以避免 一旦用户输入的不是数字 ,导致程序运行报错

pass

  • pass 就是一个空语句,不做任何事情,一般用做占位语句
  • 是为了保持程序结构的完整性

无限循环

  • 在开发软件时,如果 不希望程序执行后 立即退出
  • 可以在程序增加一个 无限循环
  • 由用户来决定 退出程序的时机

TODO注释

  • # 后跟上 TODO,用于标记需要去做 工作

    # TODO(作者/邮件) 显示系统菜单

1.3 编写函数集合文件


	def show_menu():
	
		"""显示菜单"""
		print("*" * 50)
		print("欢迎使用【名片管理系统】v1.0")
		print("")
		print("1,新建名片")
		print("2,显示全部")
		print("3,查询名片")
		print("")
		print("0,退出系统")
		print("*" * 50)
	
	def new_card():
	
		"""新增名片"""
		print("-" * 50)
		print("新增名片")
	
	def show_all():
	
		"""显示全部"""
		print("-" * 50)
		print("显示全部")
	
	def search_card():
	
		"""搜索名片"""
		print("-" * 50)
		print("搜索名片")

2,保存名片数据的结构

程序就是用来处理数据的,而变量就是用来存储数据的

  • 使用 字典 记录 每一张名片 的详细信息
  • 使用 列表 统一所有的 名片字典

定义名片列表变量

  • cards_tools 文件的顶部增加了一个 列表变量

# 所有名片记录的列表
card_list = []

注意
1,所有名片相关操作 ,都需要使用这个列表,所以应该 定义在程序的顶部
2,程序刚运行时,没有数据 ,所以是个 空列表

完善cards_tools 函数脚本


	# 记录所有的名片字典
	card_list = []
	
	def show_menu():
		"""显示菜单"""
		print("*" * 50)
		print("欢迎使用【名片管理系统】v1.0")
		print("")
		print("1,新建名片")
		print("2,显示全部")
		print("3,查询名片")
		print("")
		print("0,退出系统")
		print("*" * 50)
	
	
	def new_card():
		"""新增名片"""
		print("-" * 50)
		print("新增名片")
		# 1,提示用户输入名片的详细信息
		name_str = input("请输入姓名:")
		nickname_str = input("请输入绰号:")
		ability_str = input("请输入能力:")
		origin_str = input("请输入出身:")
		status_str = input("请输入地位:")
		reward_str = input("请输入悬赏金:")
	
		# 2,使用用户提供的信息创建一个字典
		card_dict = {
			"name": name_str,
			"nickname": nickname_str,
			"ability": ability_str,
			"origin": origin_str,
			"status": status_str,
			"reward": reward_str
		}
	
		# 3,将名片字典添加到列表中
		card_list.append(card_dict)
	
		# 4,提示用户添加成功
		print("添加成功 %s" % name_str)
	
	
	def show_all():
		"""显示全部"""
		print("-" * 50)
		print("显示全部")
	
		# 判断是否存在名片记录,如果不存在,则提示用户并返回信息
		if len(card_list) == 0:
			print("当前没有任何名片记录,请使用新增功能添加名片")
	
			# return 可以返回一个函数的执行结果
			# 下方的代码不会被执行
			# 如果 return 后面没有任何的内容,表示返回到调用函数的位置
			# 并且不会返回任何的结果
			return
		# 打印表头
		for n in ["姓名", "绰号", "能力", "出身", "地位", "悬赏金"]:
			print(n, end="\t\t")
		print("")
	
		# 打印分割线
		print("-" * 50)
	
		# 遍历名片依次输出字典信息
		for card_dict in card_list:
			for info in card_dict:
				print("%s" % card_dict[info], end="\t\t")
			print("")
			print("-" * 50)
	
	
	def search_card():
		"""搜索名片"""
		print("-" * 50)
		print("搜索名片")
	
		search_name = input("搜索的名字:")
	
		for card_dict in card_list:
			if search_name == card_dict["name"]:
				# 打印表头
				for n in ["姓名", "绰号", "能力", "出身", "地位", "悬赏金"]:
					print(n, end="\t\t")
				print("")
	
				# 打印分割线
				print("-" * 50)
	
				# 遍历名片依次输出字典信息
				for info in card_dict:
					print("%s" % card_dict[info], end="\t\t")
				print("")
				print("-" * 50)
	
				# 针对找到的名片记录执行修改和删除操作
				deal_card(card_dict)
	
				break
	
		else:
			print("抱歉,没有找到:%s" % search_name)
	
	
	def deal_card(find_dict):
		"""处理查找到的名片
		:param find_dict: 查找到的名片
		"""
		# print(find_dict)
		action_str = input("请选择要执行的操作 "
						"[1] 修改   [2] 删除   [0] 返回上级菜单,请选择: ")
	
		if action_str == "1":
			# find_dict["name"] = input("请修改姓名:")
			# find_dict["nickname"] = input("请修改绰号:")
			# find_dict["ability"] = input("请修改能力:")
			# find_dict["origin"] = input("请修改出身:")
			# find_dict["status"] = input("请修改出身:")
			# find_dict["reward"] = input("请修改悬赏金:")
	
			for info in find_dict:
				temp_dict = {"name": "姓名",
							"nickname": "绰号",
							"ability": "能力",
							"origin": "出身",
							"status": "地位",
							"reward": "悬赏金"}
				for n in temp_dict:
					if n == info:
						find_dict[info] = input_card_info(find_dict[info], "请输入要修改的%s:" % temp_dict[n])
				# break
			print("修改名片")
	
		if action_str == "2":
			card_list.remove(find_dict)
			print("删除名片")
	
	
	def input_card_info(dict_value, tip_message):
		"""输入名片信息
		:param dict_value: 字典中原有的值
		:param tip_message: 输入的提示文字
		:return:如果用户输入了内容,就返回tip_message,否则返回dict_value
		"""
		# 1,提示用户输入内容
		result_str = input(tip_message)
	
		# 2,针对用户的输入进行判断,如果用户输入了内容,直接返回结果
		if len(result_str) > 0:
	
			return result_str
	
		# 3,如果用户没有输入内容,返回`字典原有的值`
		else:
	
			return dict_value

     # 结果呈现
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:1
	您选择的操作是: 1
	--------------------------------------------------
	新增名片
	请输入姓名:娜美
	请输入绰号:小贼猫
	请输入能力:武器天候棒
	请输入出身:东海-可可亚西村
	请输入地位:航海士
	请输入悬赏金:六千六百万
	添加成功 娜美
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:2
	您选择的操作是: 2
	--------------------------------------------------
	显示全部
	姓名		绰号		能力		出身		地位		悬赏金		
	--------------------------------------------------
	娜美		小贼猫		武器天候棒		东海-可可亚西村		航海士		六千六百万		
	--------------------------------------------------
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:3
	您选择的操作是: 3
	--------------------------------------------------
	搜索名片
	搜索的名字:娜美
	姓名		绰号		能力		出身		地位		悬赏金		
	--------------------------------------------------
	娜美		小贼猫		武器天候棒		东海-可可亚西村		航海士		六千六百万		
	--------------------------------------------------
	请选择要执行的操作 [1] 修改   [2] 删除   [0] 返回上级菜单,请选择: 1
	请输入要修改的姓名:
	请输入要修改的绰号:
	请输入要修改的能力:
	请输入要修改的出身:
	请输入要修改的地位:
	请输入要修改的悬赏金:六千六百六十六万
	修改名片
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:2
	您选择的操作是: 2
	--------------------------------------------------
	显示全部
	姓名		绰号		能力		出身		地位		悬赏金		
	--------------------------------------------------
	娜美		小贼猫		武器天候棒		东海-可可亚西村		航海士		六千六百六十六万		
	--------------------------------------------------
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:3
	您选择的操作是: 3
	--------------------------------------------------
	搜索名片
	搜索的名字:娜美
	姓名		绰号		能力		出身		地位		悬赏金		
	--------------------------------------------------
	娜美		小贼猫		武器天候棒		东海-可可亚西村		航海士		六千六百六十六万		
	--------------------------------------------------
	请选择要执行的操作 [1] 修改   [2] 删除   [0] 返回上级菜单,请选择: 2
	删除名片
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:2
	您选择的操作是: 2
	--------------------------------------------------
	显示全部
	当前没有任何名片记录,请使用新增功能添加名片
	**************************************************
	欢迎使用【名片管理系统】v1.0
	
	1,新建名片
	2,显示全部
	3,查询名片
	
	0,退出系统
	**************************************************
	请选择操作功能:0
	您选择的操作是: 0
	欢迎再次使用【名片管理系统】
   
posted @ 2018-08-15 11:30  小Q渺晓  阅读(194)  评论(0编辑  收藏  举报