python實(shí)現(xiàn)簡(jiǎn)單通訊錄管理系統(tǒng)
本文實(shí)例為大家分享了python實(shí)現(xiàn)通訊錄管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
=====歡迎使用通訊錄管理系統(tǒng)=====
1.添加
2.修改
3.冊(cè)除
4.查詢
5.排序
6.退出
=========================
請(qǐng)選擇你要執(zhí)行的操作的序號(hào),具體要求:
1)通訊錄要以文件的形式存儲(chǔ)在硬盤(pán)上(比如D:\tongxunlu) ,每一條數(shù)據(jù)(聯(lián)系人姓名和手機(jī)號(hào)碼)存儲(chǔ)一行,如果一個(gè)聯(lián)系人有多個(gè)手機(jī)號(hào),則都存儲(chǔ)在同一行,即通訊錄中每個(gè)聯(lián)系入的數(shù)據(jù)占一行。
2)系統(tǒng)運(yùn)行時(shí)初始菜單如上,根據(jù)用戶選擇的序號(hào)執(zhí)行相應(yīng)的操作:
添加功能:提醒角戶輸入姓名和手機(jī)號(hào)碼,同時(shí)進(jìn)行手機(jī)號(hào)碼格式檢查,合法則該姓名和手機(jī)號(hào)碼插入到通訊錄最后一行。
修改功能:根據(jù)用戶指定的聯(lián)系人姓名修改其手機(jī)號(hào)碼,修改后保存文件。 刪除功能:根據(jù)用戶輸人的姓名刪除該條記錄。
查詢功能:可以根據(jù)聯(lián)系人姓名查詢其手機(jī)號(hào),也可以根據(jù)手機(jī)號(hào)查詢聯(lián)系人姓名。 排序功能:要求用戶選擇按聯(lián)系人姓名升序或降序,對(duì)通訊錄進(jìn)行排序。
退出功能:結(jié)束程序的運(yùn)行。 注意:只有選擇序號(hào)6(退出)時(shí),程序的運(yùn)行才會(huì)結(jié)束,否則一直循環(huán)等待用戶進(jìn)行增刪改查操作。
這里我利用openpyxl對(duì)Excel操作
源碼:
from openpyxl import load_workbook
fn = r'd:\tongxunlu.xlsx'
# 打印操作菜單
def showMenu():
? ? print("========歡迎使用通訊錄管理系統(tǒng)========")
? ? print(" ? ? 1.添加")
? ? print(" ? ? 2.修改")
? ? print(" ? ? 3.刪除")
? ? print(" ? ? 4.查詢")
? ? print(" ? ? 5.排序")
? ? print(" ? ? 6.退出")
? ? print("==================================")
# 打開(kāi)文件
def openFile():
? ? wb = load_workbook(fn)
? ? ws = wb.active
? ? return ws, wb
# 判斷手機(jī)號(hào)是否合法
def isLegal(s):
? ? if len(s) == 11 and s.isdigit():
? ? ? ? return True
? ? else:
? ? ? ? return False
# 添加手機(jī)號(hào)
def addData():
? ? data = input("輸入姓名和號(hào)碼(空格分開(kāi)):").split(" ")
? ? for i in range(len(data), 1, -1):?? ??? ??? ??? ?# 從最后一個(gè)手機(jī)號(hào)開(kāi)始
? ? ? ? s = isLegal(data[i - 1])
? ? if not s:
? ? ? ? print("手機(jī)號(hào)碼必須為11位數(shù)字!")
? ? ? ? addData()
? ? else:
? ? ? ? w1, w2 = openFile()
? ? ? ? w1.append(data)
? ? ? ? print("添加成功!")
? ? ? ? w2.save(fn)
# 更改手機(jī)號(hào)
def changeData():
? ? flag = False
? ? data = input("請(qǐng)輸入需要修改的姓名和新的手機(jī)號(hào)碼(空格分開(kāi)):").split(" ")
? ? if not isLegal(data[1]):
? ? ? ? print("手機(jī)號(hào)碼必須為11位數(shù)字!")
? ? ? ? changeData()
? ? else:
? ? ? ? w1, w2 = openFile()
? ? ? ? for row in w1.rows:
? ? ? ? ? ? if row[0].value == data[0]:
? ? ? ? ? ? ? ? flag = True
? ? ? ? ? ? ? ? row[1].value = data[1]
? ? ? ? if not flag:
? ? ? ? ? ? print("通訊錄中沒(méi)有此人!")
? ? ? ? ? ? changeData()
? ? ? ? else:
? ? ? ? ? ? print("修改成功!")
? ? ? ? ? ? w2.save(fn)
# 刪除人
def delete():
? ? flag = False
? ? x = 0
? ? name = input("請(qǐng)輸入要?jiǎng)h除的姓名:")
? ? w1, w2 = openFile()
? ? for row in w1.rows:
? ? ? ? x += 1
? ? ? ? if row[0].value == name:
? ? ? ? ? ? flag = True
? ? ? ? ? ? w1.delete_rows(x)
? ? if not flag:
? ? ? ? print("通訊錄中沒(méi)有此人!")
? ? else:
? ? ? ? print("刪除成功!")
? ? ? ? w2.save(fn)
# 查找手機(jī)號(hào)或者姓名
def search():
? ? flag = False
? ? data = input("請(qǐng)輸入姓名或手機(jī)號(hào)碼:")
? ? w1, w2 = openFile()
? ? for row in w1.rows:
? ? ? ? if row[0].value == data:
? ? ? ? ? ? flag = True
? ? ? ? ? ? print(row[1].value)
? ? ? ? ? ? if row[2].value is not None:
? ? ? ? ? ? ? ? print(row[2].value)
? ? ? ? elif row[1].value == data or row[2].value == data:
? ? ? ? ? ? flag = True
? ? ? ? ? ? print(row[0].value)
? ? if not flag:
? ? ? ? print("通訊錄中沒(méi)有此人或手機(jī)號(hào)!")
? ? ? ? search()
# 排序
def sort():
? ? s = input("請(qǐng)輸入正序或逆序(正序輸入F,逆序輸入T):")
? ? if s == "F":
? ? ? ? flag = False
? ? elif s == "T":
? ? ? ? flag = True
? ? data = []
? ? w1, w2 = openFile()
? ? for row in w1.rows:
? ? ? ? data1 = []
? ? ? ? for cell in row:
? ? ? ? ? ? data1.append(cell.value)
? ? ? ? data.append(data1)
? ? data.sort(key=lambda x: x[0], reverse=flag)
? ? w2.remove(w1)
? ? w1 = w2.create_sheet()
? ? for i in data:
? ? ? ? w1.append(i)
? ? w2.save(fn)
# 循環(huán)函數(shù)
while True:
? ? showMenu()
? ? num = int(input("請(qǐng)輸入操作序號(hào):"))
? ? if num == 1:
? ? ? ? addData()
? ? elif num == 2:
? ? ? ? changeData()
? ? elif num == 3:
? ? ? ? delete()
? ? elif num == 4:
? ? ? ? search()
? ? elif num == 5:
? ? ? ? sort()
? ? elif num == 6:
? ? ? ? print("再見(jiàn)!")
? ? ? ? break
? ? else:
? ? ? ? print("輸入的序號(hào)不在范圍內(nèi)!")以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python實(shí)現(xiàn)通訊錄管理系統(tǒng)
- python實(shí)現(xiàn)通訊錄系統(tǒng)
- 如何用Python寫(xiě)一個(gè)簡(jiǎn)單的通訊錄
- python實(shí)現(xiàn)學(xué)生通訊錄管理系統(tǒng)
- python數(shù)據(jù)庫(kù)編程 Mysql實(shí)現(xiàn)通訊錄
- python數(shù)據(jù)庫(kù)編程 ODBC方式實(shí)現(xiàn)通訊錄
- python實(shí)現(xiàn)手機(jī)通訊錄搜索功能
- Python實(shí)現(xiàn)通訊錄功能
- Python實(shí)現(xiàn)命令行通訊錄實(shí)例教程
- 一個(gè)簡(jiǎn)單的python程序?qū)嵗?通訊錄)
相關(guān)文章
基于python分享一款地理數(shù)據(jù)可視化神器keplergl
這篇文章主要介紹了分享一款地理數(shù)據(jù)可視化神器keplergl,keplergl是由Uber開(kāi)源的一款地理數(shù)據(jù)可視化工具,通過(guò)keplergl我們可以在Jupyter?notebook中使用,下文分享需要的小伙伴可以參考一下2022-02-02
python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實(shí)現(xiàn)
這篇文章主要介紹了python 遞歸深度優(yōu)先搜索與廣度優(yōu)先搜索算法模擬實(shí)現(xiàn) ,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-10-10
python帶參數(shù)裝飾器的兩種寫(xiě)法示例代碼
裝飾器是 Python 中非常有用的語(yǔ)法特性,可以用于包裝或者修改函數(shù)的行為,本文介紹了python帶參數(shù)裝飾器的兩種寫(xiě)法,需要的朋友可以參考下2023-08-08
python批量檢查兩個(gè)對(duì)應(yīng)的txt文件的行數(shù)是否一致的實(shí)例代碼
這篇文章主要介紹了python批量檢查兩個(gè)對(duì)應(yīng)的txt文件的行數(shù)是否一致,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能示例
這篇文章主要介紹了Python基于分析Ajax請(qǐng)求實(shí)現(xiàn)抓取今日頭條街拍圖集功能,涉及Python針對(duì)今日頭條URL請(qǐng)求與json數(shù)據(jù)處理相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
Python模擬百度自動(dòng)輸入搜索功能的實(shí)例
今天小編就為大家分享一篇Python模擬百度自動(dòng)輸入搜索功能的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-02-02

