浙江大学城市学院实验报告
课程名称 数据结构
实验成绩 指导老师(签名 ) 日期
一.实验目的和要求
1、掌握线性结构数据问题的应用方法;
2、掌握线性表的顺序存储结构及链表结构的综合应用与实现;
3、了解一般信息系统的设计方式方法;
二.实验内容
1、设计并实现日常生活中通讯录的管理系统。该系统需3位同学一组,按模块分工协作完成,系统具体功能基本需求描述如下:
② 查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③ 查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④ 新增通讯录信息:每次可添加一个新成员的通讯录信息。
⑤ 修改通讯录信息:修改通讯录中已有成员的信息。
删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表(回收站)中,以便错误操作后允许恢复。该被删成员表要求采用单链表存储。
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表(回收站)中到该成员,重新加入到通讯录表中。
系统实现要求:
通讯录表必须使用顺序(列表list)存储结构,被删成员表(回收站)必须使用单链表存储结构。
②通讯录信息至少包括:编号、姓名、电话1、电话2、邮箱、......等,其他可自行设置。
2用菜单方式选择相应功能,且各功能的有关实现通过调用各函数来实现。
3给出系统数据类型的定义、存储结构定义以及各个函数之间的调用关系。
④ 实验内容中设置的功能要求必须实现,此外可自行增加合适的功能,可作为额外的实验成绩进行加分:
例如:
●通讯录和被删成员数据可用文件保存,程序运行时可从文件读入相应数据,程序结束时可写入文件保存。
●通讯录分组,可自行考虑把通讯录成员进行分组,如同学组、亲戚组、同事组等。
●……
三、实验分工
徐慧:实验构架设立、各个操作的定义、修改通讯录、实验报告填写
郑超:通讯录文本的建立、通讯录导入、删除通讯录、PPT制作
郑博思:新增通讯录、查询通讯录、恢复通讯录、PPT制作
三.代码与实验思路
实验思路:按照老师给的代码定义一个方法,实现通讯录的主界面的功能
def menu():
print("----------欢迎使用通讯录 V1.0----------")
print(" [1] 文件导入 ")
print(" [2] 新建通讯人 ")
print(" [3] 修改通讯人 ")
print(" [4] 删除通讯人 ")
print(" [5] 显示全部 ")
print(" [6] 查通讯人 ")
print(" [7] 恢复被删通讯人 ")
print(" [8] 保存写入文件")
print(" [0] 退出 ")
def menu3():
print("------------ 修改通讯人---------------")
print(" [1] 按姓名修改 ")
print(" [2] 按电话1修改 ")
print(" [3] 按电话2修改 ")
print(" [4] 按邮件修改 ")
print(" [5] 按编号修改 ")
print(" [0] 返回 ")
def menu6():
print("------------ 查通讯人---------------")
print(" [1] 按姓名查 ")小汽车增量调控管理信息系统
print(" [2] 按电话1查 ")
print(" [3] 按电话2查 ")
print(" [4] 按邮件查 ")
print(" [5] 按编号查 ")
print(" [0] 返回 ")
实验思路:定义一个空的字典,AddressList为通讯录的类,data内为通讯录的内容。
#mydic={}
class AddressList:
def __init__(self):
self.data = list()
def from_file(self, buf):
for line in buf[1:]:
line = line[:-1].split(' ')
self.data.append(line)
实验思路:显示出通讯录的内容
def show(self):
print('姓名 电话1 电话2 邮箱')
for line in self.data:
print(line)
实验思路:增加通讯录的内容
def add(self, data):
self.data.append(data)
实验思路:修改表中某个值的内容,i是第i个位置,m是第m个属性,例如第一个属性是姓名,第二个属性是电话1
def change(self, method, data):
if method == 'by_name':
m = 0
elif method == 'by_tel1':
m = 1
elif method == 'by_tel2':
m = 2
elif method == 'by_email':
m = 3
elif method == 'by_index':
self.data[data[0]] = data[1:]
return
for i in range(len(self.data)):
if self.data[i][m] == data[m]:
self.data[i] = data
实验思路:删除表中某个值的内容,循环中如果某个姓名在第i个位置就把这个内容删除
def delete(self, name):
for i in range(len(self.data)):
if self.data[i][0] == name:
to_del = self.data[i]
ve(to_del)
return to_del
实验思路:按照输入的序号各代表的方式(如姓名)查出该联系人所有信息
def search(self, method, arg):
if method == 'by_name':
m = 0
elif method == 'by_tel1':
发布评论