项目实践-家谱系统实现(数据结构+Python)
1.源代码
class FamilyMember:
def __init__(self, name, birth_date, married, address, alive, role, generation):
self.name = name
self.birth_date = birth_date
self.married = married
self.address = address
self.alive = alive
self.role = role
self.generation = generation
self.children = []
def __str__(self):
alive_status = "是" if self.alive else "否"
married_status = "已婚" if self.married else "未婚"
return f"姓名: {self.name}, 出生日期: {self.birth_date}, 婚否: {married_status}, 地址: {self.address}, 健在: {alive_status}, 角色: {self.role}, 代数: {self.generation}"
class FamilyTree:
def __init__(self):
self.members = []
def add_member(self, member):
self.members.append(member)
def display_family_tree(self):
print("\n家谱成员信息:")
for member in self.members:
print(member)
if member.children:
print(" 孩子:")
for child in member.children:
print(f" {child.name}")
def find_member_by_name(self, name):
for member in self.members:
if member.name == name:
return member
return None
def find_members_by_birth_date(self, birth_date):
return [member for member in self.members if member.birth_date == birth_date]
def add_child(self, parent_name, child):
parent = self.find_member_by_name(parent_name)
if parent:
parent.children.append(child)
child.parent = parent # 更新孩子对象中的parent属性
print(f"成功添加孩子: {child.name} 到 {parent.name}")
else:
print("未找到该父母成员。")
def delete_member(self, name):
member = self.find_member_by_name(name)
if member:
self.members.remove(member)
for m in self.members: # 更新其他成员的孩子列表
if member in m.children:
m.children.remove(member)
print(f"成功删除成员: {name}")
else:
print("未找到该成员。")
def modify_member(self, name, **kwargs):
member = self.find_member_by_name(name)
if member:
for key, value in kwargs.items():
if hasattr(member, key): # 确保属性存在
setattr(member, key, value)
print(f"成功修改成员: {name}")
else:
print("未找到该成员。")
def print_menu():
print("$-----------------家谱管理系统--------------------$")
print("$\t\t\t\t 1. 添加成员\t\t\t\t\t\t$")
print("$\t\t\t\t 2. 显示家谱\t\t\t\t\t\t$")
print("$\t\t\t\t 3. 按姓名查询成员\t\t\t\t\t$")
print("$\t\t\t\t 4. 按出生日期查询成员\t\t\t\t$")
print("$\t\t\t\t 5. 添加孩子\t\t\t\t\t\t$")
print("$\t\t\t\t 6. 删除成员\t\t\t\t\t\t$")
print("$\t\t\t\t 7. 修改成员信息\t\t\t\t\t$")
print("$\t\t\t\t 8. 退出\t\t\t\t\t\t\t$")
print("$-----------------------------------------------$")
def main():
family_tree = FamilyTree()
while True:
print_menu()
choice = input("请选择一个操作: ")
if choice == '1':
name = input("姓名: ")
birth_date = input("出生日期: ")
married = input("婚否 (是/否): ") == "是"
address = input("地址: ")
alive = input("健在否 (是/否): ") == "是"
role = input("角色: ")
try:
generation = int(input("代数: "))
except ValueError:
print("代数必须是整数,请重新输入。")
continue
new_member = FamilyMember(name, birth_date, married, address, alive, role, generation)
family_tree.add_member(new_member)
print("成员添加成功!")
elif choice == '2':
family_tree.display_family_tree()
elif choice == '3':
name = input("输入姓名查询: ")
member = family_tree.find_member_by_name(name)
if member:
print(member)
else:
print("未找到该成员。")
elif choice == '4':
birth_date = input("输入出生日期查询: ")
members = family_tree.find_members_by_birth_date(birth_date)
if members:
print("找到的成员:")
for member in members:
print(member)
else:
print("未找到该出生日期的成员。")
elif choice == '5':
parent_name = input("输入父母姓名: ")
name = input("孩子姓名: ")
birth_date = input("出生日期: ")
married = False # 孩子默认未婚
address = input("地址: ")
alive = True # 孩子默认健在
role = "孩子"
try:
generation = int(input("代数: "))
except ValueError:
print("代数必须是整数,请重新输入。")
continue
child = FamilyMember(name, birth_date, married, address, alive, role, generation)
family_tree.add_child(parent_name, child)
elif choice == '6':
name = input("输入要删除的成员姓名: ")
family_tree.delete_member(name)
elif choice == '7':
name = input("输入要修改的成员姓名: ")
print("输入新的信息(不修改的字段留空):")
birth_date = input("新的出生日期(留空则不修改): ")
married = input("新的婚否(留空则不修改,输入'是'或'否'): ")
married = True if married == "是" else False if married == "否" else None
address = input("新的地址(留空则不修改): ")
alive = input("新的健在否(留空则不修改,输入'是'或'否'): ")
alive = True if alive == "是" else False if alive == "否" else None
role = input("新的角色(留空则不修改): ")
generation_input = input("新的代数(留空则不修改): ")
generation = int(generation_input) if generation_input else None
updates = {}
if birth_date:
updates['birth_date'] = birth_date
if married is not None:
updates['married'] = married
if address:
updates['address'] = address
if alive is not None:
updates['alive'] = alive
if role:
updates['role'] = role
if generation is not None:
updates['generation'] = generation
family_tree.modify_member(name, **updates)
elif choice == '8':
print("感谢使用家谱管理系统,程序即将退出。")
break
else:
print("无效的选择,请重新输入。")
if __name__ == "__main__":
main()
2.核心代码的提炼
2.1 完整体的解释
这个Python脚本实现了一个简单的家谱管理系统。下面是核心代码的提炼和解释:
1.
FamilyMember
类这个类用于表示家谱中的一个成员。• 属性: •
name
:成员的名字。•
birth_date
:出生日期。•
married
:是否已婚。•
address
:地址。•
alive
:是否健在。•
role
:角色(例如:父亲、母亲、孩子等)。•
generation
:代数。•
children
:孩子列表。• 方法:
•
__str__
:返回成员的详细信息。•
__init__
:初始化成员信息。
2.
FamilyTree
类这个类用于管理整个家谱。• 属性: •
members
:家谱成员列表。• 方法: •
add_member
:添加一个新成员到家谱。•
display_family_tree
:显示整个家谱。•
find_member_by_name
:通过名字查找成员。•
find_members_by_birth_date
:通过出生日期查找成员。•
add_child
:为某个成员添加孩子。•
delete_member
:删除一个成员。•
modify_member
:修改成员信息。
3.
print_menu
函数显示操作菜单。
4.
main
函数程序的主入口,实现了一个循环,让用户可以选择不同的操作来管理家谱。• 操作:
• 添加成员。
• 显示家谱。
• 按姓名查询成员。
• 按出生日期查询成员。
• 添加孩子。 • 删除成员。
• 修改成员信息。
• 退出程序。
代码流程解释
• 初始化家谱:创建一个
FamilyTree
实例。• 显示菜单:循环显示操作菜单。
• 用户输入:根据用户的选择执行不同的操作。
• 执行操作:根据用户输入执行相应的家谱管理操作。
• 退出程序:当用户选择退出时,结束循环并退出程序。
这个脚本通过命令行交互,
允许用户管理一个家谱,包括添加、查询、修改和删除成员信息。
2.2 功能1: 添加成员的实现
2.2.1 代码如下:
class FamilyMember:
def __init__(self, name, birth_date, married, address, alive, role, generation):
self.name = name
self.birth_date = birth_date
self.married = married
self.address = address
self.alive = alive
self.role = role
self.generation = generation
self.children = []
def __str__(self):
alive_status = "是" if self.alive else "否"
married_status = "已婚" if self.married else "未婚"
return f"姓名: {self.name}, 出生日期: {self.birth_date}, 婚否: {married_status}, 地址: {self.address}, 健在: {alive_status}, 角色: {self.role}, 代数: {self.generation}"
2.2.2 测试结果如下:
2.3 功能2:显示家谱的实现
2.3.1 代码如下:
class FamilyTree:
def __init__(self):
self.members = []
def add_member(self, member):
self.members.append(member)
def display_family_tree(self):
print("\n家谱成员信息:")
for member in self.members:
print(member)
if member.children:
print(" 孩子:")
for child in member.children:
print(f" {child.name}")
2.3.2 测试结果如下:
2.4 功能3,4:按姓名/出生日期查询成员的实现
2.4.1 代码如下:
def find_member_by_name(self, name):
for member in self.members:
if member.name == name:
return member
return None
def find_members_by_birth_date(self, birth_date):
return [member for member in self.members if member.birth_date == birth_date]
2.4.2 测试结果如下:
2.5 功能5:添加孩子的实现
2.5.1 代码如下:
def add_child(self, parent_name, child):
parent = self.find_member_by_name(parent_name)
if parent:
parent.children.append(child)
child.parent = parent # 更新孩子对象中的parent属性
print(f"成功添加孩子: {child.name} 到 {parent.name}")
else:
print("未找到该父母成员。")
2.5.2 测试结果如下:
2.6 功能6,7:删除成员/修改成员信息的实现
2.6.1 代码如下:
def delete_member(self, name):
member = self.find_member_by_name(name)
if member:
self.members.remove(member)
for m in self.members: # 更新其他成员的孩子列表
if member in m.children:
m.children.remove(member)
print(f"成功删除成员: {name}")
else:
print("未找到该成员。")
def modify_member(self, name, **kwargs):
member = self.find_member_by_name(name)
if member:
for key, value in kwargs.items():
if hasattr(member, key): # 确保属性存在
setattr(member, key, value)
print(f"成功修改成员: {name}")
else:
print("未找到该成员。")
2.6.2 测试结果如下:
2.7 print_menu(菜单栏)的实现
2.7.1 代码如下:
def print_menu():
print("$-----------------家谱管理系统--------------------$")
print("$\t\t\t\t 1. 添加成员\t\t\t\t\t\t$")
print("$\t\t\t\t 2. 显示家谱\t\t\t\t\t\t$")
print("$\t\t\t\t 3. 按姓名查询成员\t\t\t\t\t$")
print("$\t\t\t\t 4. 按出生日期查询成员\t\t\t\t$")
print("$\t\t\t\t 5. 添加孩子\t\t\t\t\t\t$")
print("$\t\t\t\t 6. 删除成员\t\t\t\t\t\t$")
print("$\t\t\t\t 7. 修改成员信息\t\t\t\t\t$")
print("$\t\t\t\t 8. 退出\t\t\t\t\t\t\t$")
print("$-----------------------------------------------$")
2.7.2 测试结果如下:
2.8 main函数程序的入口
2.8.1 代码如下:
def main():
family_tree = FamilyTree()
while True:
print_menu()
choice = input("请选择一个操作: ")
if choice == '1':
name = input("姓名: ")
birth_date = input("出生日期: ")
married = input("婚否 (是/否): ") == "是"
address = input("地址: ")
alive = input("健在否 (是/否): ") == "是"
role = input("角色: ")
try:
generation = int(input("代数: "))
except ValueError:
print("代数必须是整数,请重新输入。")
continue
new_member = FamilyMember(name, birth_date, married, address, alive, role, generation)
family_tree.add_member(new_member)
print("成员添加成功!")
elif choice == '2':
family_tree.display_family_tree()
elif choice == '3':
name = input("输入姓名查询: ")
member = family_tree.find_member_by_name(name)
if member:
print(member)
else:
print("未找到该成员。")
elif choice == '4':
birth_date = input("输入出生日期查询: ")
members = family_tree.find_members_by_birth_date(birth_date)
if members:
print("找到的成员:")
for member in members:
print(member)
else:
print("未找到该出生日期的成员。")
elif choice == '5':
parent_name = input("输入父母姓名: ")
name = input("孩子姓名: ")
birth_date = input("出生日期: ")
married = False # 孩子默认未婚
address = input("地址: ")
alive = True # 孩子默认健在
role = "孩子"
try:
generation = int(input("代数: "))
except ValueError:
print("代数必须是整数,请重新输入。")
continue
child = FamilyMember(name, birth_date, married, address, alive, role, generation)
family_tree.add_child(parent_name, child)
elif choice == '6':
name = input("输入要删除的成员姓名: ")
family_tree.delete_member(name)
elif choice == '7':
name = input("输入要修改的成员姓名: ")
print("输入新的信息(不修改的字段留空):")
birth_date = input("新的出生日期(留空则不修改): ")
married = input("新的婚否(留空则不修改,输入'是'或'否'): ")
married = True if married == "是" else False if married == "否" else None
address = input("新的地址(留空则不修改): ")
alive = input("新的健在否(留空则不修改,输入'是'或'否'): ")
alive = True if alive == "是" else False if alive == "否" else None
role = input("新的角色(留空则不修改): ")
generation_input = input("新的代数(留空则不修改): ")
generation = int(generation_input) if generation_input else None
updates = {}
if birth_date:
updates['birth_date'] = birth_date
if married is not None:
updates['married'] = married
if address:
updates['address'] = address
if alive is not None:
updates['alive'] = alive
if role:
updates['role'] = role
if generation is not None:
updates['generation'] = generation
family_tree.modify_member(name, **updates)
elif choice == '8':
print("感谢使用家谱管理系统,程序即将退出。")
break
else:
print("无效的选择,请重新输入。")
if __name__ == "__main__":
main()
作者:Cyber_4K