浙江大学城市学院实验报告
课程名称                       数据结构                           
实验项目名称     实验三  线性表的应用---通讯录管理系统的设计与实现   
实验成绩         指导老师(签名 )          日期               
一.实验目的和要求
1、掌握线性结构数据问题的应用方法;
2、掌握线性表的顺序存储结构及链表结构的综合应用与实现;
3、了解一般信息系统的设计方式方法;
二.实验内容
1、设计并实现日常生活中通讯录的管理系统。该系统需3位同学一组,按模块分工协作完成,系统具体功能基本需求描述如下:
1 输入数据建立通讯录表:在系统使用前先需要创建通讯录,可以一次输入(或文件导入)多个成员的通讯录信息,建立通讯录。要求此表为顺序(如列表list)存储结构
② 查看所有通讯录信息:显示通讯录表中所有成员的通讯录信息。
③ 查询通讯录中满足要求的信息:可以根据不同方式查询,如按姓名查询、按姓氏查询、按编号查询等。
④ 新增通讯录信息:每次可添加一个新成员的通讯录信息。
⑤ 修改通讯录信息:修改通讯录中已有成员的信息。
删除通讯录成员:删除通讯录表中已有的成员,但需要把删除的成员信息放到另一张被删成员表(回收站)中,以便错误操作后允许恢复。该被删成员表要求采用单链表存储
⑦恢复被删成员信息:一旦发现误删,则可以在被删成员表(回收站)中到该成员,重新加入到通讯录表中。
系统实现要求:
通讯录表必须使用顺序(列表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':