酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

编写一个程序实现大学的数据统计。某大学的组织结构如下表所示,该数据存放在文本文件txt中。 表1 某大学的组织结构 单位 下级单位或人数 单位 下级单位或人数 某大学 计算机学院 物联网 物联班 某大学 电信学院 物联班 38 计算机学院 计算机科学 电信学院 电子信息类 计算机学院 信息安全 电信学院 信息工程 计算机学院 物联网 电子信息类 电信1班 计算机科学 计科1班 电子信息类 电信2班 计算机科学 计科2班 电子信息类 电信3班 计算机科学 计科3班 电信1班 40 计科1班 32 电信2班 38 计科2班 35 电信3班 42 计科3班 33 信息工程 信息1班 信息安全 信安1班 信息工程 信息2班 信息安全 信安2班 信息1班 38 信安1班 36 信息2班 35 信安2班 38 要求采用树的链式存储结构存储它,并完成以下功能: 1.从txt文件读数据到r数组中。 2.由数组r创建树t的链式存储结构。 3.采用括号表示输出树t。 4.求各学院的专业数以及名称。 5.求各学院的班数以及名称。 6.统计各学院的学生人数。 7.修改指定信息点的数据,并更新txt文件。

为了实现上述功能,我们可以使用Python编写一个程序。以下是详细的步骤和代码实现: 1. 从txt文件读数据到r数组中 2. 由数组r创建树的链式存储结构 3. 采用括号表示输出树t 4. 求各学院的专业数以及名称 5. 求各学院的班数以及名称 6. 统计各学院的学生人数 7. 修改指定信息点的数据,并更新txt文件 首先,我们需要定义树节点类和树类,然后逐步实现各个功能。 ```python class TreeNode: def __init__(self, name): self.name = name self.children = [] class Tree: def __init__(self): self.root = None def add_node(self, parent_name, child_name): if not self.root: self.root = TreeNode(parent_name) self.root.children.append(TreeNode(child_name)) else: parent_node = self.find_node(self.root, parent_name) if parent_node: parent_node.children.append(TreeNode(child_name)) else: print(f"Parent node {parent_name} not found") def find_node(self, node, name): if node.name == name: return node for child in node.children: result = self.find_node(child, name) if result: return result return None def display(self, node=None, level=0): if node is None: node = self.root print(' ' * level * 2 + node.name) for child in node.children: self.display(child, level + 1) def count_professionals(self, node=None): if node is None: node = self.root professionals = {} for child in node.children: if child.name.endswith("学院"): professionals[child.name] = len(child.children) else: professionals[node.name] = len(node.children) return professionals def count_classes(self, node=None): if node is None: node = self.root classes = {} for child in node.children: if not child.name.endswith("学院"): classes[node.name] = len(node.children) return classes def count_students(self, node=None): if node is None: node = self.root students = {} for child in node.children: if not child.name.endswith("学院") and not child.name.endswith("班"): students[node.name] = sum([int(c.name) for c in child.children]) return students def update_data(self, parent_name, old_child_name, new_child_name): parent_node = self.find_node(self.root, parent_name) if parent_node: for i, child in enumerate(parent_node.children): if child.name == old_child_name: parent_node.children[i].name = new_child_name return True return False def read_data_from_file(filename): with open(filename, 'r', encoding='utf-8') as file: lines = file.readlines() data = [line.strip().split() for line in lines] return data def write_data_to_file(filename, tree): with open(filename, 'w', encoding='utf-8') as file: def write_node(node, level=0): for child in node.children: file.write('\t' * level + f"{node.name}\t{child.name}\n") write_node(child, level + 1) write_node(tree.root) # Example usage: filename = 'university_structure.txt' data = read_data_from_file(filename) tree = Tree() for entry in data: tree.add_node(entry[0], entry[1]) tree.display() print("Professionals Count:", tree.count_professionals()) print("Classes Count:", tree.count_classes()) print("Students Count:", tree.count_students()) tree.update_data('计算机学院', '物联网', '新物联网') write_data_to_file(filename, tree) ``` 说明: 1. TreeNode类:表示树的节点,每个节点有一个名字和一个子节点列表。 2. Tree类:表示整个树,包含添加节点、查找节点、显示树、统计专业、班级和学生人数的方法。 3. read_data_from_file函数:从文件中读取数据并返回一个二维列表。 4. write_data_to_file函数:将树的结构写回文件。 5. 示例用法:展示如何使用这些类和函数来完成任务。 [2024-10-27 14:13:29 | AI写代码神器 | 1247点数解答]

相关提问