python實現(xiàn)通訊錄管理系統(tǒng)
本文實例為大家分享了python實現(xiàn)通訊錄管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
題目
期末項目
一. 項目要求
利用函數(shù)實現(xiàn)通訊錄管理系統(tǒng),通訊錄的內(nèi)容包含姓名、聯(lián)系方式、微信號、電子郵箱等需要保存的信息。至少要包含姓名和聯(lián)系方式兩種。管理系統(tǒng)的功能包括信息的添加、刪除、修改、查詢、顯示、保存的功能。
二.項目步驟
1.使用自定義函數(shù)實現(xiàn)每個功能
(1)功能菜單:顯示項目應(yīng)該具有的功能
(2)添加:輸入要添加的信息
(3)刪除:輸入要刪除的聯(lián)系人姓名,刪除其所有的信息
(4)修改:輸入要修改的聯(lián)系人姓名,修改其信息
(5)查詢:輸入要查詢的聯(lián)系人姓名,遍歷列表,得到其信息
(6)顯示:顯示所有的聯(lián)系人信息
(7)保存:將數(shù)據(jù)保存到文件中
(8)主函數(shù):先顯示菜單,提示用戶輸入要進(jìn)行的操作代碼,調(diào)用相應(yīng)的函數(shù)
2. 當(dāng)添加、刪除、修改了信息后,要同步保存到文件中
用列表作為全局變量,當(dāng)列表信息發(fā)生變化,調(diào)用保存函數(shù)
3.編寫一個模塊,在主函數(shù)中調(diào)用該模塊,測試其功能。完成一個,測試一個,保證所有模塊能正確運(yùn)行,信息存儲在文本文件中。
4.可以用列表,元組,字典存儲通訊錄信息。假如,現(xiàn)在只存儲姓名和手機(jī)號,這里選擇字典,轉(zhuǎn)換為元組放在列表里保存。
5.初始時,先創(chuàng)建了一個文本文件,文件名為學(xué)生姓名,并輸入空列表[]。
三、項目代碼要求:
1. 代碼要有必要的注釋,說明其功能。
2. 要有每個模塊的測試結(jié)果。
3. 若有截圖,截圖要清晰。
代碼
1.代碼說明
題目要求從模塊中調(diào)用函數(shù),因此需要在同一個文件夾下建立兩個python文件:manage.py和main.py. 其中,manage.py中設(shè)計函數(shù),main.py中調(diào)用manage.py中的函數(shù)并實現(xiàn)功能。
2.manage.py
''' 注意: 1.要求輸入的姓名默認(rèn)全部為合理輸入,并未對輸入內(nèi)容進(jìn)行判斷和過濾 2.默認(rèn)打開的文件已經(jīng)存在,并沒對文件狀態(tài)進(jìn)行判斷,而是以列表信息中是否存在該學(xué)生為依據(jù) 3.沒有使用字典的任何操作 4.如果希望將所有學(xué)生信息保存在同一個txt文件中,只需將每個函數(shù)中file_name重新命名的部分注釋掉 5.修改信息采用的方法是:將原內(nèi)容刪除,并重新寫入新內(nèi)容,這么做的原因是電腦要沒電了,這個可以作為自己的測試板塊,重新設(shè)計編寫 6.實驗步驟的最后一步 不知道是什么目的,并所以沒有這樣做 7.因為都是采用列表來判斷學(xué)生內(nèi)容,所以文件保存成功后重新運(yùn)行程序列表清空,即不可再查詢到信息 8.打印所有信息可以采取文件夾下多文件讀取的方法,遍歷該目錄下的所有txt文件,讀出內(nèi)容并打印,請自行編寫 2021/6/16 新增注意: 1.修改文件內(nèi)容時,如果將姓名一同修改,則會出現(xiàn)文件名與文件內(nèi)容中的姓名不同的情況 2.修改文件內(nèi)容時,如果將該姓名修改為另一個已經(jīng)出現(xiàn)過的姓名,在列表中將會出現(xiàn)重名情況 3.先沒有處理重名情況的操作 4.同名情況下,如果修改該名字的信息,則將修改第一次出現(xiàn)該名稱的位置的信息 5.因此,如果錯誤1和錯誤2同時發(fā)生,文件就會,嗯...串了,就亂套了 ''' #d = {} ?#字典儲存信息 Student = [] path = "D:\\" ?#文件保存路徑 默認(rèn)為空即保存在當(dāng)前文件夾下 建議新建文件夾并修改路徑 file_name = path + "student.txt" #文件默認(rèn)保存位置 #顯示命令 def print_message(): ? ? print("**************************************") ? ? print(" ? ? **1.添加學(xué)生信息") ? ? print(" ? ? **2.刪除學(xué)生信息") ? ? print(" ? ? **3.修改學(xué)生信息") ? ? print(" ? ? **4.查找學(xué)生信息") ? ? print(" ? ? **5.查看所有信息") ? ? print(" ? ? **6.查看操作菜單") #添加信息 def add(): ? ? ? ? print("請輸入需要添加到姓名、手機(jī)號,以空格隔開:") ? ? ? ? #列表 ? ? ? ? A = input().split(" ") ? ? ? ? temp_str = "" ? ? ? ? for i in A: ? ? ? ? ? ? temp_str += i+" ?" ? ? ? ? if temp_str != '/n': #防止錯誤輸入 ? ? ? ? ? ? ?Student.append(A) ?#加入列表 ? ? ? ? ? ? ?file_name = path+A[0] +".txt" ? ? ? ? ? ? ?print(temp_str, file=open(file_name, 'w')) ?#創(chuàng)建文件,并寫入文件 ?如果存在同名文件,則原內(nèi)容會被覆蓋 ? ? ? ? #字典 ? ? ? ? # A = input().split(" ") ? ? ? ? # Name.append(A[0]) ? ? ? ? # d[A[0]] = A[1] ? ? ? ? # print("添加成功") ? ? ? ? # save(A[0]) ?# 更新學(xué)生信息 #刪除信息 def delete(): ? ? print("請輸入需要刪除的姓名:") ? ? name = input() ? ? #字典刪除 ? ? # del d[name] ? ? # Name.remove(name) ? ? #從文件中刪除學(xué)生信息 ? ? exist = 0 ? ? for i in range(len(Student)): ? ? ? ? #存在該學(xué)生 ? ? ? ? if Student[i].count(name) > 0: ? ? ? ? ? ? if name == Student[i][0]: ? ? ? ? ? ? ? ? file_name = path + name + ".txt" ? ? ? ? ? ? ? ? #刪除列表中的信息 ? ? ? ? ? ? ? ? Student.pop(i) ? ? ? ? ? ? ? ? #刪除文件中的信息 ? ? ? ? ? ? ? ? lines = [l for l in open(file_name, "r") if l.find(name, 0, len(name)) != 0] #暫時的刪除方式 ? ? ? ? ? ? ? ? fd = open(file_name, "w") ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?#如: 要刪除'張三‘,但‘張三四'也會被刪除 ? ? ? ? ? ? ? ? fd.writelines(lines) ? ? ? ? ? ? ? ? fd.close() ? ? ? ? ? ? ? ? print("刪除成功") ? ? ? ? ? ? ? ? exist = 1 ?#判斷學(xué)生是否存在的標(biāo)簽 ? ? ? ? ? ? ? ? break ? ? ? ? else : ? ? ? ? ? ? exist = 0 ? ? if exist == 0: ? ? ? ? ?print("未找到該學(xué)生的信息!") def delete_2(name,f_n): ? ? ? # 從列表里刪除該學(xué)生 ? ? ? ? for i in range(len(Student)): ? ? ? ? ? ? # 存在該學(xué)生 ? ? ? ? ? ? if Student[i].count(name) > 0: ? ? ? ? ? ? ? ? if name == Student[i][0]: ? ? ? ? ? ? ? ? ? ? del Student[i] ? ? ? ? ? ? ? ? ? ? break ? ? ? ? #從文件中刪除學(xué)生信息 ? ? ? ? lines = [l for l in open(f_n, "r") if l.find(name, 0, len(name)) != 0] ? ? ? ? fd = open(f_n, "w") ? ? ? ? fd.writelines(lines) ? ? ? ? fd.close() #查詢信息 def search(): ? ? print("請輸入需要查詢的姓名:") ? ? name ?= input() ? ? #字典查詢 ? ? #print("查詢結(jié)果:",name,d[name]) ? ? exist = 0 ? ? for i in range(len(Student)): ? ? ? ? #存在該學(xué)生 這一步判斷有點多余 但是為了簡化打印未找到的結(jié)果還是這樣做了 ? ? ? ? if Student[i].count(name) > 0: ? ? ? ? ? ? if name == Student[i][0]: ? ? ? ? ? ? ? ? print("查詢結(jié)果: ") ? ? ? ? ? ? ? ? for temp in Student[i]: ? ? ? ? ? ? ? ? ? ? print(temp,end=" ") ? ? ? ? ? ? ? ? print() ? ? ? ? ? ? ? ? exist = 1 ?# 判斷學(xué)生是否存在的標(biāo)簽 ? ? ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? ? ? exist = 0 ? ? if exist == 0: ? ? ? ? ? ? ? ? print("未找到該學(xué)生的信息!") #更改文件信息 def change_file(): ? ? print("輸入需要修改信息的學(xué)生姓名:") ? ? name = input() ? ? exist = 0 ? ? for i in range(len(Student)): ? ? ? ? #存在該學(xué)生 ? ? ? ? if Student[i].count(name) > 0: ? ? ? ? ? ? if name == Student[i][0]: ? ? ? ? ? ? ? ? # 找到了該學(xué)生 ? ? ? ? ? ? ? ? # 下面進(jìn)行修改信息的操作 ? ? ? ? ? ? ? ? file_name = path + name + ".txt" ? ? ? ? ? ? ? ? print("輸入修改后該學(xué)生的所有信息:") ? ? ? ? ? ? ? ? A = input().split(" ") ? ? ? ? ? ? ? ? temp_str = "" ? ? ? ? ? ? ? ? for i in A: ? ? ? ? ? ? ? ? ? ? temp_str += i + " ?" ? ? ? ? ? ? ? ? if temp_str != '/n': ?# 防止錯誤輸入 ? ? ? ? ? ? ? ? ? ? Student.append(A) ?# 加入列表 ? ? ? ? ? ? ? ? ? ? delete_2(name,file_name) # 先刪除該信息 ? ? ? ? ? ? ? ? ? ? print(temp_str, file=open(file_name, 'a')) ?# 創(chuàng)建文件,并重新寫入文件 ? ? ? ? ? ? ? ? print("修改成功") ? ? ? ? ? ? ? ? exist = 1 ?# 判斷學(xué)生是否存在的標(biāo)簽 ? ? ? ? ? ? ? ? break ? ? ? ? else: ? ? ? ? ? ? ? ? exist = 0 ? ? if exist == 0: ? ? ? ? ? ? ? ? print("未找到該學(xué)生的信息!") #顯示信息 def printf(): ? ? print("所有信息如下:") ? ? for i in Student: ? ? ? ? for j in i: ? ? ? ? ? ? print(j,end=" ") ? ? ? ? print()
3.main.py
import manage print("**************************************") print(" ? ?歡迎來到學(xué)生信息管理系統(tǒng)") manage.print_message() #打印命令指令 print("**************************************") while(True): ? ? print("請輸入需要執(zhí)行的操作(輸入'q‘退出程序):") ? ? choice = input() ? ? if choice == '1': ? ? ? ? manage.add() ? #增 ? ? if choice == '2': ? ? ? ?manage.delete() #刪 ? ? if choice == '3': ? ? ? ?manage.change_file() ?#改 ? ? if choice == '4': ? ? ? ?manage.search() ?#查 ? ? if choice == '5': ? ? ? ?manage.printf() ?#打印 ? ? if choice == '6': ? ? ? ? manage.print_message() ?# 打印命令指令 ? ? if choice == 'q': ? ? ? ? print("退出!") ? ? ? ? break
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
在Mac下使用python實現(xiàn)簡單的目錄樹展示方法
今天小編就為大家分享一篇在Mac下使用python實現(xiàn)簡單的目錄樹展示方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11教你用Django將前端的數(shù)據(jù)存入Mysql數(shù)據(jù)庫
這篇文章主要給大家介紹了關(guān)于如何用Django將前端的數(shù)據(jù)存入Mysql數(shù)據(jù)庫的相關(guān)資料,文中通過圖文以及示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Django具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2021-11-11Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建(各種包安裝保姆級教學(xué))
相信很多時候大家都會用到虛擬環(huán)境,他具有可以讓你快速切換不同的python版本,本文主要介紹了Anaconda+Pycharm+Pytorch虛擬環(huán)境創(chuàng)建,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10python 截取XML中bndbox的坐標(biāo)中的圖像,另存為jpg的實例
這篇文章主要介紹了python 截取XML中bndbox的坐標(biāo)中的圖像,另存為jpg的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03如何對csv文件數(shù)據(jù)分組,并用pyecharts展示
這篇文章主要介紹了如何對csv文件數(shù)據(jù)分組,并用pyecharts展示,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-11-11