21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第十天)

之前的小項(xiàng)目已經(jīng)完成染突,如果大家有興趣可以繼續(xù)在細(xì)節(jié)方面優(yōu)化和改寫(xiě)。接下來(lái)我們會(huì)用幾個(gè)篇幅講解一個(gè)新的小項(xiàng)目,希望大家能夠跟著博主一步步地完成部默。

個(gè)人電話簿-圖片來(lái)自網(wǎng)絡(luò)

項(xiàng)目介紹

通過(guò)一個(gè)命令行程序,實(shí)現(xiàn)個(gè)人通訊錄管理功能造虎。

項(xiàng)目分析

命令行程序估計(jì)大家很少使用了傅蹂,通過(guò)命令行管理個(gè)人通訊錄自然也不如帶界面的Wndows程序方便,然而算凿,如果你能用C語(yǔ)言寫(xiě)出這個(gè)項(xiàng)目份蝴,那么開(kāi)發(fā)帶界面的Windows程序一定難不倒你。

通訊錄管理必不可少的功能是:

  • 通訊錄條目錄入
  • 通訊錄條目刪除
  • 通訊錄條目修改
  • 通訊錄條目查詢

這四個(gè)應(yīng)該是最基本的功能氓轰。

涉及知識(shí)點(diǎn)

這個(gè)項(xiàng)目比前面那個(gè)日歷的項(xiàng)目復(fù)雜了很多婚夫,但涉及的知識(shí)全是C語(yǔ)言的基本知識(shí)。

  • 字符串處理
  • 內(nèi)存管理
  • 簡(jiǎn)單數(shù)據(jù)結(jié)構(gòu)(結(jié)構(gòu)體數(shù)組)
  • 文件讀寫(xiě)

寫(xiě)出來(lái)也沒(méi)幾條署鸡,通過(guò)這個(gè)項(xiàng)目就讓大家看看使用最基礎(chǔ)的C語(yǔ)言知識(shí)能夠做出什么樣的東西案糙。

設(shè)計(jì)方法

從軟件開(kāi)發(fā)流程的角度說(shuō)限嫌,我們應(yīng)該按照需求分析、概要設(shè)計(jì)时捌、詳細(xì)設(shè)計(jì)怒医、代碼編寫(xiě)這樣的過(guò)程來(lái)進(jìn)行。但我們這里旨在教會(huì)大家如何一步步完成一個(gè)復(fù)雜功能的工程奢讨,所以我們從一個(gè)簡(jiǎn)單的功能開(kāi)始一步步完善稚叹,最終實(shí)現(xiàn)一個(gè)完整的軟件。

Menu設(shè)計(jì)

首先我們建立一個(gè)全新的工程拿诸,在main函數(shù)中實(shí)現(xiàn)程序的menu扒袖。命令行程序的menu一般是向?qū)J降模ㄟ^(guò)每一步輸入數(shù)字完成功能選擇佳镜。因此我們的main函數(shù)的基本框架應(yīng)該是這樣:

void CleanScreen();

int main()
{
    int nMenu = 0;
    
    while (1)
    {
        printf("==== 通訊錄 ====\n");
        printf("1. 錄入\n");
        printf("2. 查詢\n");
        printf("0. 退出\n");
        printf("----------------\n");
        printf("請(qǐng)輸入要使用的功能:");


        scanf("%d", &nMenu);

        switch (nMenu)
        {
        case 0:
            // 退出
            break;
        case 1:
            // 新增
            break;
        case 2:
            // 查詢
            break;
        default:
            break;
        }

        CleanScreen();
    }


    return 0;
}

void CleanScreen()
{
    system("cls");
}

這就是我們的程序框架僚稿,三個(gè)功能對(duì)應(yīng)三個(gè)數(shù)字。當(dāng)用戶輸入相應(yīng)的數(shù)字時(shí)就會(huì)調(diào)用相應(yīng)的函數(shù)來(lái)完成特定功能蟀伸。由于命令行程序是在屏幕上打印命令完成的蚀同,因此需要定期把沒(méi)有的信息清理掉,這就是我們定義的函數(shù)CleanScreen的作用啊掏。

接下來(lái)我們要做的就是三個(gè)case后面添加功能蠢络。退出程序我們采用exit()函數(shù)來(lái)實(shí)現(xiàn),新增和查詢是兩個(gè)主要功能迟蜜,我們分別定義一個(gè)函數(shù)來(lái)實(shí)現(xiàn)它刹孔。

數(shù)據(jù)結(jié)構(gòu)

在設(shè)計(jì)功能之前,我們需要一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)保存每條記錄娜睛,新建一個(gè)頭文件Record.h髓霞,內(nèi)容如下:

#ifndef __RECORD_H__
#define __RECORD_H__

#include "String.h"

typedef struct _tagRecord
{
    String* _pStrName;
    String* _pStrTel;
    String* _pStrPS;
}Record;

#endif

在Record結(jié)構(gòu)體中,我們使用到了之前項(xiàng)目中用到的一組文件String.h和String.c畦戒,我們只需要把這兩個(gè)文件復(fù)制過(guò)來(lái)方库,添加到工程中即可。別忘了在文件首部添加include引用障斋。

另外纵潦,我們這個(gè)struct中并沒(méi)有像之前一樣使用數(shù)組作為成員變量,而是使用了String指針垃环,這樣的好處是在需要的時(shí)候分配空間邀层,后面我們會(huì)具體講解。

這樣遂庄,我們就得到了一個(gè)最基本的項(xiàng)目框架寥院,后面我會(huì)帶著大家一步步擴(kuò)充這個(gè)工程,最終實(shí)現(xiàn)一個(gè)讓你自己不敢相信的小項(xiàng)目涛目。

我是天花板只磷,讓我們一起在軟件開(kāi)發(fā)中自我迭代经磅。
如有任何問(wèn)題,歡迎與我聯(lián)系钮追。


上一篇:21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第九天)
下一篇:21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第十一天)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末预厌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子元媚,更是在濱河造成了極大的恐慌轧叽,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件刊棕,死亡現(xiàn)場(chǎng)離奇詭異炭晒,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)甥角,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)网严,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嗤无,你說(shuō)我怎么就攤上這事震束。” “怎么了当犯?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,830評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵垢村,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我嚎卫,道長(zhǎng)嘉栓,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,957評(píng)論 1 295
  • 正文 為了忘掉前任拓诸,我火速辦了婚禮侵佃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘奠支。我一直安慰自己馋辈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布胚宦。 她就那樣靜靜地躺著首有,像睡著了一般燕垃。 火紅的嫁衣襯著肌膚如雪枢劝。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,754評(píng)論 1 307
  • 那天卜壕,我揣著相機(jī)與錄音您旁,去河邊找鬼。 笑死轴捎,一個(gè)胖子當(dāng)著我的面吹牛鹤盒,可吹牛的內(nèi)容都是我干的蚕脏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼侦锯,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼驼鞭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起尺碰,我...
    開(kāi)封第一講書(shū)人閱讀 39,357評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挣棕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后亲桥,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體洛心,經(jīng)...
    沈念sama閱讀 45,847評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評(píng)論 3 338
  • 正文 我和宋清朗相戀三年题篷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了词身。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡番枚,死狀恐怖法严,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情户辫,我是刑警寧澤渐夸,帶...
    沈念sama閱讀 35,819評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站渔欢,受9級(jí)特大地震影響墓塌,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奥额,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評(píng)論 3 331
  • 文/蒙蒙 一苫幢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧垫挨,春花似錦韩肝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,023評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哲泊,卻和暖如春剩蟀,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背切威。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,149評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工育特, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人先朦。 一個(gè)月前我還...
    沈念sama閱讀 48,409評(píng)論 3 373
  • 正文 我出身青樓缰冤,卻偏偏與公主長(zhǎng)得像犬缨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子棉浸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,185評(píng)論 25 707
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)怀薛、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,107評(píng)論 4 62
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器刨裆,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 陽(yáng)光開(kāi)始變得毒辣 灼燙我閉合的眼瞼 變成一片鮮艷的紅 還是不想看清嗎 躲避不堪入目的一切 蟬鳴還未變得聒噪 雷雨還...
    夕痕故閱讀 209評(píng)論 0 1
  • 問(wèn)題1 12345678 取三位數(shù)組成一個(gè)新數(shù)組扇住,可重復(fù),求所有組合 [[1,2,3],[4],[5,6],[7,...
    sMolc閱讀 357評(píng)論 1 1