用Python做命令行地址簿

用Python做命令行地址簿

阅读《简明Python教程》有一段时间了,书里提出一个小练习,实现了下。
问题:命令行地址簿程序,可以用来浏览、添加、编辑、删除联系人,需要有邮件地址、电话号码等多种信息。
程序设计
1、数据存储位置,程序主目录下address.data文件
存储方式:编号,,,姓名,,,年龄,,,地址,,,电话

2、功能: 浏览:查看所有信息
添加:添加一条信息
编辑:编辑指定的信息
删除:删除指定信息
3、实现代码

dao.py

# coding=UTF-8
#数据层

#数据库文件
datafile='address.data'
#连接符
contact=',,,'

__version__='1.0'

class AddressDao:
    '''地址簿数据层'''
    def __init__(self):
        self.addressMap={}
        self.number = '0'
    def readaddressMap(self):
        '''读取地址簿所有内容'''
        with open(datafile) as f:
            for line in f:
                address = line.split(contact)
                self.addressMap[address[0]]=address
                self.number=address[0]

    def saveAddress(self,name,age,mail,phone):
        '''保存一条记录'''
        newSeq = str(int(self.number)+1)
        addressNew = [newSeq,name,age,mail,phone]
        self.addressMap[newSeq]=addressNew
        self.saveAddressToFile()

    def saveAddressToFile(self):
        '''持久化到文件'''
        with open(datafile,'w') as f:
            keys = list(self.addressMap.keys())
            keys.sort(key=lambda i:i)
            for key in keys:
                f.writelines(contact.join(self.addressMap[key]))

    def updateAddress(self,code,name,age,mail,phone):
        '''修改一条记录'''
        addressNew = [code,name,age,mail,phone]
        self.addressMap[code]=addressNew
        self.saveAddressToFile()

    def delAddress(self,code):
        '''删除一条记录'''
        del(self.addressMap[code])
        self.saveAddressToFile()

service.py

# coding=UTF-8
import dao

__version__='1.0'

menumain = '''
******我的地址簿******

    1-浏览
    2-新建
    3-编辑
    4-删除

----------------------
'''
title=['序号','姓名','年龄','邮箱','电话']
class AddressService:
    '''地址簿服务层'''
    def __init__(self):
        '''程序加载时读取数据库现有的地址簿'''
        self.add = dao.AddressDao()
        self.add.readaddressMap()

    def showMainMenu(self):
        '''展示主菜单'''
        print(menumain)

    def inputCode(self):
        '''接收用户输入指令'''      
        try:
            code = input('请选择需要进行的操作:')
        except EOFError:
            print('谢谢使用,再见')
        except KeyboardInterrupt:
            print('谢谢使用,再见')
        else:
            if code=='1':
                self.readAddress()
            elif code=='2':
                self.newAddress()
            elif code=='3':
                self.editAddress()
            elif code=='4':
                self.delAddress()
            self.inputCode()

    def readAddress(self):
        '''浏览功能'''
        print('\n浏览\n')
        print('\t\t'.join(title))
        keys = list(self.add.addressMap.keys())
        keys.sort(key=lambda i:i)
        for key in keys:
            print('\t\t'.join(self.add.addressMap[key]).replace('\n',''))
        self.showMainMenu()

    def newAddress(self):
        '''新建功能'''
        print('\n新建\n')
        name = ""
        while name=="":
            name=input('请输入*姓名:')
        age = ""
        while age=="":
            age=input('请输入年龄:')
        mail = ""
        while mail=="":
            mail=input('请输入邮箱:')
        phone = ""
        while phone=="":
            phone=input('请输入电话')
        self.add.saveAddress(name,age,mail,phone)
        print('保存成功')
        self.showMainMenu()

    def editAddress(self):
        '''编辑功能'''
        print('\n编辑\n')
        willEdit = input('请输入想要编辑的序号:')
        if willEdit in self.add.addressMap:
            name = ""
            while name=="":
                name=input('请输入*姓名:')
            age = ""
            while age=="":
                age=input('请输入年龄:')
            mail = ""
            while mail=="":
                mail=input('请输入邮箱:')
            phone = ""
            while phone=="":
                phone=input('请输入电话:')
            self.add.updateAddress(willEdit,name,age,mail,phone)
            print('修改成功')           
        else:
            print('找不到要修改的序号')
        self.showMainMenu()

    def delAddress(self):
        '''删除功能'''
        print('\n删除\n')
        willDel = input('请输入想要删除的序号:')
        if willDel in self.add.addressMap:
            self.add.delAddress(willDel)
            print('删除成功')       
        else:
            print('找不到想要删除的序号')
        self.showMainMenu()

main.py

# coding=UTF-8
#程序入口
import service

ads=service.AddressService()
ads.showMainMenu()
ads.inputCode()

运行:–>python main.py

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值