您好,登錄后才能下訂單哦!
名片管理系統(tǒng),供大家參考,具體內(nèi)容如下
環(huán)境要求:linux系統(tǒng)、python2.x或python3.x
資源地址:GitHub地址
寫在前面的話:筆者之前在初學(xué)C/C++時(shí),都曾寫過類似的管理系統(tǒng)。這次使用Python來書寫這個(gè)管理系統(tǒng),深刻地感受到python對(duì)程序員的友好。如果使用C來實(shí)現(xiàn),必然需要手寫一下鏈表;而使用C++,顯然需要使用STL中的vector或array以及map,語法都稍稍有些復(fù)雜。
基礎(chǔ)功能
1.循環(huán)顯示主菜單,顯示命令提示。
2.可以通過輸入命令來選擇新建名片、顯示所有名片、搜索名片。當(dāng)搜索到名片時(shí),可以對(duì)其進(jìn)行刪改。
3.附加功能。對(duì)數(shù)據(jù)進(jìn)行序列化,并且寫入文件。
代碼分析
一.程序入口cards_main.py
#! /usr/bin/python import cards_tools while True: cards_tools.show_menu() action_str = input("請(qǐng)下指令,主人\n") print("你的選項(xiàng)是 [%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("還不會(huì)鴨,請(qǐng)多調(diào)教")
1.這段代碼開頭shebang(#?。┖髽?biāo)注了解釋器,可以通過./cards_main.py來執(zhí)行本段代碼。如果執(zhí)行l(wèi)n -s cards_main.py /usr/bin/cards, 就可以在終端中用“cards”命令呼出這個(gè)簡易的名片存儲(chǔ)系統(tǒng)。
2.這個(gè)程序使用死循環(huán)的方式維持主程序的運(yùn)行,日后如果想增加上傳數(shù)據(jù)等功能時(shí),可以使用多線程、協(xié)程等來增加一個(gè)并發(fā),來實(shí)現(xiàn)。
3.通過判斷用戶輸入,分別調(diào)用不同的函數(shù)。實(shí)現(xiàn)了解耦合。
二.命令提示、新增名片、顯示名片
這部分代碼沒什么好說的,就不多贅述。需要注意的時(shí),在文件開頭,定義了個(gè)card_list的全局空列表。
card_list = [] def show_menu(): print("*" * 50) print("主人,讓我做點(diǎn)什么鴨:") print("1.新建名片") print("2.顯示全部") print("3.搜索名片") print("") print("0.退出系統(tǒng)") print("*" * 50) def new_card(): print("新建名片") print("-" * 50) name_str = input("輸入姓名:") phone_str = input("輸入手機(jī)號(hào):") qq_str = input("輸入QQ:") email_str = input("輸入郵箱:") card_dict = { "name": name_str, "phone": phone_str, "qq": qq_str, "email": email_str } card_list.append(card_dict) print("我記下%s咯!" % name_str) def show_all(): if card_list == []: print("還沒有名片喲,告訴我?guī)讉€(gè)叭~") 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"], "手機(jī)號(hào)[回車不修改]:") 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: 如果用戶輸入了內(nèi)容,則返回內(nèi)容;否則返回原有值 """ result_str = input(tip_message) if len(result_str) > 0: return result_str else: return dict_value
1.傳遞存儲(chǔ)搜索到的字典,對(duì)列表進(jìn)行修改。
2.為了讓用戶可以選擇用回車,避免需要重新輸入不需先修該的鍵值對(duì)兒,對(duì)內(nèi)置函數(shù)input進(jìn)行了封裝。
代碼不足
這段個(gè)玩具項(xiàng)目存在嚴(yán)重問題,其一數(shù)據(jù)都活在內(nèi)存之中,完全可以通過序列化的方式將字典存儲(chǔ)在文件中,甚至可以使用md5對(duì)數(shù)據(jù)進(jìn)行加密。
使用for循環(huán)使得效率低下、功能單一,完全可以使用多線程來增添新功能,不過鑒于本代碼只是個(gè)玩具,就不實(shí)現(xiàn)了。
可選手段
使用最基本的python列表真的時(shí)最好的方式嗎?列表的數(shù)據(jù)結(jié)構(gòu)實(shí)際上是隊(duì)列,由于名片對(duì)于順序要求不大,大可以使用C++的STL中unorder_map之類數(shù)據(jù)結(jié)構(gòu)來存儲(chǔ)數(shù)據(jù)信息。
另外使用字典并非唯一手段,C/C++、Go中的結(jié)構(gòu)體,或是使用類來封裝數(shù)據(jù),無疑都是可行的。在類中可以添加諸如打印函數(shù)等,簡化程序,在C++中可以重載流運(yùn)算符<<。
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。