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