Python玩具專案 名片管理系統

2021-08-29 16:24:47 字數 4065 閱讀 5651

寫在前面的話:筆者之前在初學c/c++時,都曾寫過類似的管理系統。這次使用python來書寫這個管理系統,深刻地感受到python對程式設計師的友好。如果使用c來實現,必然需要手寫一下鍊錶;而使用c++,顯然需要使用stl中的vector或array以及map,語法都稍稍有些複雜。

1.迴圈顯示主選單,顯示命令提示。

2.可以通過輸入命令來選擇新建名片、顯示所有名片、搜尋名片。當搜尋到名片時,可以對其進行刪改。

3.附加功能。對資料進行序列化,並且寫入檔案。

一.程式入口cards_main.py

#! /usr/bin/python

import cards_tools

while true:

cards_tools.show_menu()

action_str = input("請下指令,主人\n")

print("你的選項是 [%s]" % action_str)

if action_str in ["1", "2", "3"]:

if action_str == "1":

cards_tools.new_card()

elif action_str == "2":

cards_tools.show_all()

elif action_str == "3":

cards_tools.search_card()

elif action_str == "0":

print("寨見了喲~主人sama")

break

else:

print("還不會鴨,請多調教")

這段**開頭shebang(#!)後標註了直譯器,可以通過./cards_main.py來執行本段**。如果執行ln -s  cards_main.py /usr/bin/cards, 就可以在終端中用「cards」命令呼出這個簡易的名片儲存系統。

這個程式使用死迴圈的方式維持主程式的執行,日後如果想增加上傳資料等功能時,可以使用多執行緒、協程等來增加乙個併發,來實現。

通過判斷使用者輸入,分別呼叫不同的函式。實現了解耦合。

二.命令提示、新增名片、顯示名片

這部分**沒什麼好說的,就不多贅述。需要注意的時,在檔案開頭,定義了個card_list的全域性空列表。

card_list = 

def show_menu():

print("*" * 50)

print("主人,讓我做點什麼鴨:")

print("1.新建名片")

print("2.顯示全部")

print("3.搜尋名片")

print("")

print("0.退出系統")

print("*" * 50)

def new_card():

print("新建名片")

print("-" * 50)

name_str = input("輸入姓名:")

phone_str = input("輸入手機號:")

card_dict =

print("我記下%s咯!" % name_str)

def show_all():

if card_list == :

print("還沒有名片喲,告訴我幾個叭~")

return

else:

print("顯示全部名片")

print("-" * 50)

for name in ["姓名", "**", "qq", "郵箱"]:

print(name, end="\t\t")

print("")

print("=" * 50)

for card_dict in card_list:

print("%s\t\t%s\t\t%s\t\t%s\t\t" %

(card_dict["name"],

card_dict["phone"],

card_dict["qq"],

card_dict["email"]))

三、搜尋名片

先貼**

def search_card():

print("找尋名片")

print("-" * 50)

search_name = input("查誰咧?")

for card_dict in card_list:

if card_dict["name"] == search_name:

for name in ["姓名", "**", "qq", "郵箱"]:

print(name, end="\t\t")

print("")

print("=" * 50)

print("%s\t\t%s\t\t%s\t\t%s\t\t" %

(card_dict["name"],

card_dict["phone"],

card_dict["qq"],

card_dict["email"]))

deal_card(card_dict)

break

else:

print("母雞呀!")

def deal_card(found_dict):

"""處理查詢到的名片

:param found_dict:傳遞找到的字典

:return:

"""action_str = input("我做啥咧 "

"[1]修改 [2]刪除 [0]返回")

if action_str == "1":

found_dict["name"] = input_card_info(found_dict["name"], "姓名[回車不修改]:")

found_dict["phone"] = input_card_info(found_dict["phone"], "手機號[回車不修改]:")

found_dict["qq"] = input_card_info(found_dict["qq"], "qq[回車不修改]:")

found_dict["email"] = input_card_info(found_dict["email"], "郵箱[回車不修改]:")

print("修改完成")

elif action_str == "2":

card_list.remove(found_dict)

print("吼,木有了")

else:

return

def input_card_info(dict_value, tip_message):

"""輸入名片資訊

:param dict_value:字典原有值

:param tip_message: 輸入提示文字

:return: 如果使用者輸入了內容,則返回內容;否則返回原有值

"""result_str = input(tip_message)

if len(result_str) > 0:

return result_str

else:

return dict_value

傳遞儲存搜尋到的字典,對列表進行修改。

為了讓使用者可以選擇用回車,避免需要重新輸入不需先修該的鍵值對兒,對內建函式input進行了封裝。

這段個玩具專案存在嚴重問題,其一資料都活在記憶體之中,完全可以通過序列化的方式將字典儲存在檔案中,甚至可以使用md5對資料進行加密。

使用for迴圈使得效率低下、功能單一,完全可以使用多執行緒來增添新功能,不過鑑於本**只是個玩具,就不實現了。

使用最基本的python列表真的時最好的方式嗎?列表的資料結構實際上是佇列,由於名片對於順序要求不大,大可以使用c++的stl中unorder_map之類資料結構來儲存資料資訊。

另外使用字典並非唯一手段,c/c++、go中的結構體,或是使用類來封裝資料,無疑都是可行的。在類中可以新增諸如列印函式等,簡化程式,在c++中可以過載流運算子<

python 名片管理系統

框架搭建 新增名片 顯示所有名片 查詢名片 查詢成功後修改 刪除名片 讓 python 程式能夠直接執行 main.py 一般寫業務邏輯 from tool import while true show menu operation int input 請輸入您的操作 print 您選擇的操作是 s...

python名片管理系統

cards main.py import cards tools import os import time while true time.sleep 1 os.system cls cards tools.show menu action str input 您希望執行的操作 print 您選擇...

python 名片管理系統

根據列表,元組和字典的特性進行編寫。card list while true print 名片管理系統 print print 新增名片1 print 修改名片2 print 刪除名片3 print 檢視名片4 print 檢視所有名片5 print 退出系統6 print command int ...