• 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="		")
    		print("")
    	
    		# 打印分割线
    		print("-" * 50)
    	
    		# 遍历名片依次输出字典信息
    		for card_dict in card_list:
    			for info in card_dict:
    				print("%s" % card_dict[info], end="		")
    			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="		")
    				print("")
    	
    				# 打印分割线
    				print("-" * 50)
    	
    				# 遍历名片依次输出字典信息
    				for info in card_dict:
    					print("%s" % card_dict[info], end="		")
    				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
    	欢迎再次使用【名片管理系统】
       
    
  • 相关阅读:
    activityalias 的使用
    关于淘宝直通车的那些事(二):关键词选词方法
    Laucher 九宫格风格 长按移动删除 宫格
    NSAutoReleasePool的理解
    类似人人网的侧滑动层叠窗口实现及代码
    从应用中启动另外的应用
    android应用 获取本地指定类型文件 的两种最优方法
    获取手机中安装的所有应用程序
    Spring事务配置的五种方式【转】
    [转]理解inode
  • 原文地址:https://www.cnblogs.com/xiaoqshuo/p/9480438.html
Copyright © 2020-2023  润新知