1、問題定義
創(chuàng)建一個通訊錄系統(tǒng)。假設(shè)系統(tǒng)中每個聯(lián)系人記錄只包括姓名,年齡,性別,電話號碼,QQ、住址及生日等信息。程序的運行效果如下圖所示,選擇任意菜單后,實現(xiàn)相應(yīng)功能。
圖1.1? 通訊錄系統(tǒng)功能需求
2、系統(tǒng)設(shè)計
2.1 總體設(shè)計
采用模塊化的程序設(shè)計方法,即將較大的任務(wù)按照一定的原則分為一個個較小的任務(wù),然后分別設(shè)計各個小任務(wù)。需要注意的是劃分出來的模塊應(yīng)該相對獨立但又相關(guān),且容易理解??梢杂媚K化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細化描述。
圖2.1?? 通訊錄系統(tǒng)功能模塊圖
本通訊錄系統(tǒng)要求采用數(shù)組實現(xiàn),如圖2.1所示,它由如下五大功能模塊組成:
- 輸入記錄模塊。完成將數(shù)據(jù)存入數(shù)組的工作。記錄可以從通過記錄函數(shù)存儲的數(shù)據(jù)文件中讀入,也可從鍵盤逐個輸入聯(lián)系人記錄。聯(lián)系人記錄由聯(lián)系人的基本信息字段構(gòu)成。
- 查詢記錄模塊。完成在數(shù)組中查找滿足相關(guān)條件的聯(lián)系人記錄。在此通訊錄系統(tǒng)中,用戶可以按照聯(lián)系人的姓名或電話號碼在數(shù)組中進行查找。
- 更新記錄模塊。完成對聯(lián)系人記錄的維護。在此通訊錄系統(tǒng)中,它實現(xiàn)了對聯(lián)系人記錄的增加、刪除及修改操作,并將修改后的數(shù)據(jù)存入源數(shù)據(jù)文件。
- 輸出記錄模塊。一是實現(xiàn)對聯(lián)系人記錄的存盤,即將記錄寫入數(shù)據(jù)文件中;二是實現(xiàn)將記錄信息以表格的形式在屏幕上打印出來。
2.2 詳細設(shè)計
2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計
}per[N];
注:per[N]中的N為記錄的總個數(shù),程序中用宏定義的方式,可以隨時在源程序宏定義中修改。本程序的宏定義為#define N 100。
.2.2 主控main()函數(shù)執(zhí)行流程
圖2.2? 主控函數(shù)執(zhí)行流程圖
本通訊錄系統(tǒng)執(zhí)行主流程如圖2.2所示。它先以目錄形式顯示一系列功能選項,接著由用戶通過鍵盤輸入數(shù)值。
在判斷鍵值時,有效的輸入為0至6之間的任意數(shù)值,其他輸入都被視為錯誤按鍵。
若選擇1,則調(diào)用append()函數(shù),執(zhí)行增加聯(lián)系人記錄操作;若選擇2,則調(diào)用del()函數(shù),執(zhí)行刪除聯(lián)系人記錄操作;若選擇3,則調(diào)用alt()函數(shù),執(zhí)行修改聯(lián)系人記錄操作;若選擇4,則調(diào)用search()函數(shù),執(zhí)行查找聯(lián)系人記錄操作;若選擇5,則調(diào)用print()函數(shù),執(zhí)行打印聯(lián)系人記錄操作;若選擇6,則退出該程序。若輸入為0~9之外的值,則提示“輸入有誤,請重新輸入”。
2.2.3輸入記錄模塊
輸入記錄模塊主要實現(xiàn)將數(shù)據(jù)存入數(shù)組中。若數(shù)據(jù)文件中無記錄,則無法從文件中讀取數(shù)據(jù)輸入到數(shù)組中。此時,用戶應(yīng)選擇1,調(diào)用add()函數(shù),進行聯(lián)系人記錄的輸入,即完成在數(shù)組中添加記錄的操作。
2.2.4查詢記錄模塊
查詢記錄模塊主要實現(xiàn)了在數(shù)組中按姓名或電話號碼查找滿足相關(guān)條件的聯(lián)系人記錄。在查詢函數(shù)search()
中,通過判斷鍵入號碼是否存在于通訊錄中而判斷函數(shù)常量是否被賦值。若存在,則表示已被賦值,將其輸出。否
則,進行錯誤提示。
2.2.5更新記錄模塊
此模塊主要實現(xiàn)了對聯(lián)系人記錄的增加、刪除及修改操作。因為聯(lián)系人記錄是以數(shù)組的結(jié)構(gòu)形式存儲的,所以這些操作都在數(shù)組中完成。下面分別介紹這3個功能模塊。
- 增加記錄。該操作完成增加聯(lián)系人記錄。
輸入要增加的聯(lián)系人姓名,回車;輸入要增加的聯(lián)系人年齡,回車;輸入要增加的聯(lián)系人性別,回車;輸入要增加的聯(lián)系人電話,回車;輸入要增加的聯(lián)系人QQ,回車;輸入要增加的聯(lián)系人住址,回車;輸入要增加的聯(lián)系人生日,回車。完成后,系統(tǒng)提示“保存成功”。
- 刪除記錄。該操作完成刪除指定姓名的聯(lián)系人記錄。
選擇“刪除聯(lián)系人”選項后屏幕上將自動打印出通訊錄所有記錄信息,輸入要刪除的聯(lián)系人姓名,回車,則現(xiàn)實系統(tǒng)提示“刪除成功”。
- ?修改記錄。該操作完成修改制定姓名的聯(lián)系人記錄。
選擇“修改聯(lián)系人”選項后屏幕將自動打印出通訊錄所有記錄信息,輸入要修改的聯(lián)系人姓名,回車,選擇要修改的項目,輸入修改后的記錄,回車,退出程序。
2.2.6輸出記錄模塊
當(dāng)把記錄輸出至文件時,調(diào)用記錄函數(shù),將程序所保存的數(shù)據(jù)寫入文件指針fp所指的文件。當(dāng)把記錄輸出至屏幕時,調(diào)用print函數(shù),將數(shù)組中的聯(lián)系人記錄信息以表格的形式在屏幕上打印出來。
2.2.7函數(shù)功能描述
- menu()
menu()函數(shù)用于展示功能項,供用戶完成任務(wù)。
- append()
append()函數(shù)用于增加聯(lián)系人記錄。
- del()
del()函數(shù)用于刪除聯(lián)系人記錄。
- alt()
alt()函數(shù)用于修改單個記錄。
- search()
search()函數(shù)用于搜索聯(lián)系人記錄。
- print()
print()函數(shù)用于打印聯(lián)系人記錄。
- back()
back()函數(shù)作為公告函數(shù),提供從各個子模塊返回主菜單或者退出。