3 通讯录管理系统 1)实验内容 设有某学院学生各班通讯录文件data.txt,每位学生通讯记录包含班级(class)、学号(num)、姓名(num)、手机号-长号(phone_1)、手机号-短号(phone_2)、家庭地址(addr)和邮编(code),其中学号不能重复,要求从data.txt中读出学生通讯记录,之后对记录进行如下操作。 (1)显示所有记录 (2)添中记录。可添加一条或多条记录。 (3)修改记录。通过学号找到要修改的学生记录,若找到则修改相应记录中的内容,若不存在则不能被修改,显示不存在。 (4)插入记录。通过输入插入的记录的学号,来插入记录。插入前先检查学号是否已存在,当不存在时进行插入,如果 存在,则修改。 (5)删除。删除指定学号的记录。 (6)查找 (7)排序。按学号排序 (8)将结果保存到data.txt中。
时间: 2023-12-19 11:05:48 浏览: 95
2)代码实现
以下是一个简单的通讯录管理系统的代码实现,其中包含了读取文件、显示记录、添加记录、修改记录、插入记录、删除记录、查找记录、排序记录和保存记录到文件等功能。
```python
# -*- coding: utf-8 -*-
import os
# 定义学生类
class Student:
def __init__(self, class_, num, name, phone_1, phone_2, addr, code):
self.class_ = class_
self.num = num
self.name = name
self.phone_1 = phone_1
self.phone_2 = phone_2
self.addr = addr
self.code = code
# 重载 __str__ 方法,方便输出对象信息
def __str__(self):
return '{},{},{},{},{},{},{}'.format(
self.class_, self.num, self.name, self.phone_1, self.phone_2, self.addr, self.code)
# 定义通讯录管理类
class AddressBook:
def __init__(self, file_path):
self.file_path = file_path
self.students = []
self.load_data()
# 从文件中读取数据
def load_data(self):
if not os.path.exists(self.file_path):
return
with open(self.file_path, 'r') as f:
for line in f:
class_, num, name, phone_1, phone_2, addr, code = line.strip().split(',')
self.students.append(Student(class_, num, name, phone_1, phone_2, addr, code))
# 显示所有记录
def show_all(self):
for student in self.students:
print(student)
# 添加记录
def add(self):
while True:
class_ = input('请输入班级:')
num = input('请输入学号:')
name = input('请输入姓名:')
phone_1 = input('请输入手机号-长号:')
phone_2 = input('请输入手机号-短号:')
addr = input('请输入家庭地址:')
code = input('请输入邮编:')
if not self.find_by_num(num):
self.students.append(Student(class_, num, name, phone_1, phone_2, addr, code))
print('添加成功!')
else:
print('该学号已存在,请重新输入。')
choice = input('是否继续添加?(y/n)')
if choice.lower() != 'y':
break
# 修改记录
def modify(self):
num = input('请输入要修改的学生的学号:')
student = self.find_by_num(num)
if student:
class_ = input('请输入新的班级(原为{}):'.format(student.class_))
name = input('请输入新的姓名(原为{}):'.format(student.name))
phone_1 = input('请输入新的手机号-长号(原为{}):'.format(student.phone_1))
phone_2 = input('请输入新的手机号-短号(原为{}):'.format(student.phone_2))
addr = input('请输入新的家庭地址(原为{}):'.format(student.addr))
code = input('请输入新的邮编(原为{}):'.format(student.code))
student.class_ = class_ if class_ else student.class_
student.name = name if name else student.name
student.phone_1 = phone_1 if phone_1 else student.phone_1
student.phone_2 = phone_2 if phone_2 else student.phone_2
student.addr = addr if addr else student.addr
student.code = code if code else student.code
print('修改成功!')
else:
print('该学号不存在。')
# 插入记录
def insert(self):
num = input('请输入要插入的学生的学号:')
student = self.find_by_num(num)
if student:
print('该学号已存在,不能插入。')
else:
class_ = input('请输入班级:')
name = input('请输入姓名:')
phone_1 = input('请输入手机号-长号:')
phone_2 = input('请输入手机号-短号:')
addr = input('请输入家庭地址:')
code = input('请输入邮编:')
self.students.append(Student(class_, num, name, phone_1, phone_2, addr, code))
print('插入成功!')
# 删除记录
def delete(self):
num = input('请输入要删除的学生的学号:')
student = self.find_by_num(num)
if student:
self.students.remove(student)
print('删除成功!')
else:
print('该学号不存在。')
# 查找记录
def find(self):
num = input('请输入要查找的学生的学号:')
student = self.find_by_num(num)
if student:
print(student)
else:
print('该学号不存在。')
# 按学号排序
def sort(self):
self.students.sort(key=lambda x: x.num)
# 将数据保存到文件
def save_data(self):
with open(self.file_path, 'w') as f:
for student in self.students:
f.write(str(student) + '\n')
# 根据学号查找学生,返回学生对象或None
def find_by_num(self, num):
for student in self.students:
if student.num == num:
return student
return None
# 主函数
def main():
file_path = 'data.txt'
ab = AddressBook(file_path)
while True:
print('=' * 20)
print('1.显示所有记录')
print('2.添加记录')
print('3.修改记录')
print('4.插入记录')
print('5.删除记录')
print('6.查找记录')
print('7.排序记录')
print('8.保存记录到文件')
print('0.退出程序')
print('=' * 20)
choice = input('请输入您的选择:')
if choice == '1':
ab.show_all()
elif choice == '2':
ab.add()
elif choice == '3':
ab.modify()
elif choice == '4':
ab.insert()
elif choice == '5':
ab.delete()
elif choice == '6':
ab.find()
elif choice == '7':
ab.sort()
print('排序完成!')
elif choice == '8':
ab.save_data()
print('保存成功!')
elif choice == '0':
break
else:
print('输入错误,请重新输入。')
if __name__ == '__main__':
main()
```
3)使用方法
将上述代码保存为 address_book.py 文件,放置在工作目录下,执行以下命令即可启动通讯录管理系统:
```shell
python address_book.py
```
程序会首先读取 data.txt 中的数据,然后进入主菜单界面,用户可以选择不同的功能来对记录进行操作。修改、插入、删除、查找、排序和保存操作都会对 data.txt 文件进行相应的更新。
阅读全文