C語言簡易手機(jī)號(hào)碼管理系統(tǒng)_第1頁
C語言簡易手機(jī)號(hào)碼管理系統(tǒng)_第2頁
C語言簡易手機(jī)號(hào)碼管理系統(tǒng)_第3頁
C語言簡易手機(jī)號(hào)碼管理系統(tǒng)_第4頁
C語言簡易手機(jī)號(hào)碼管理系統(tǒng)_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、目 錄1 問題定義 .32 系統(tǒng)設(shè)計(jì) 321 總體設(shè)計(jì)422 詳細(xì)設(shè)計(jì)42.2.1 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì) 52.2.2 主控流程 62.2.3 輸入記錄模塊 62.2.4 查詢記錄模塊 .62.2.5 更新記錄模塊 62.2.6 輸出記錄模塊 .72.2.7 數(shù)據(jù)功能描述 .83 系統(tǒng)實(shí)現(xiàn) 83.1 編碼 83.1.1 程序預(yù)處理 . 93.1.2 主函數(shù)main() . 93.1.3 主菜單界面 .103.1.4 刪除用戶記錄.113.1.5 查詢用戶記錄 .123.1.6 插入用戶記錄.153.1.7 保存用戶數(shù)據(jù).173.1.8 從文件讀數(shù)據(jù).183.1.9 追加學(xué)生記錄.193.1.10 排序

2、用戶記錄.213.2 測(cè)試與調(diào)試 213.2.1 概述 .213.2.2 程序測(cè)試 .224 系統(tǒng)維護(hù) 245 歸納總結(jié) 255.1 開發(fā)經(jīng)驗(yàn) 255.2 實(shí)訓(xùn)中遇到的問題及解決方法 255.3 設(shè)計(jì)中的不足之處255.4 感想和心得體會(huì) 266 參考資料 26簡易手機(jī)號(hào)碼管理系統(tǒng)本題目設(shè)計(jì)目的是訓(xùn)練用戶的基本編程能力,了解管理信息系統(tǒng)的開發(fā)流程,熟悉c語言的文件和單鏈表的各種基本操作。本程序中涉及結(jié)構(gòu)體、單鏈表、文件及各種語句的運(yùn)用如for();switch();if.else等方面的知識(shí)。通過本程序的訓(xùn)練,使用戶能對(duì)c語言的文件操作有一個(gè)更深刻的了解,初步掌握鏈表的一些結(jié)構(gòu)及構(gòu)成。掌握利用

3、單鏈表存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)對(duì)用戶成績管理的原理,為進(jìn)一步開發(fā)出高質(zhì)量的管理信息系統(tǒng)打下堅(jiān)實(shí)的基礎(chǔ)。1、問題定義創(chuàng)建一個(gè)簡易手機(jī)號(hào)碼管理系統(tǒng)。假設(shè)系統(tǒng)中每個(gè)號(hào)碼記錄包括電話號(hào)碼,姓名,話費(fèi),地址,是否掛失。2,剩余金額3,手機(jī)繳費(fèi),掛失,發(fā)信息,注銷,保存。及用戶信息,課程信息,用戶信息的修改、刪除和查詢等程序的運(yùn)行效果如下圖所示,選擇任意菜單后,實(shí)現(xiàn)相應(yīng)功能。在問題定義階段要考慮題目的可行性和需求分析,接下來進(jìn)入開發(fā)階段,完成系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)的任務(wù)。2、系統(tǒng)設(shè)計(jì)21 總體設(shè)計(jì)采用模塊化的程序設(shè)計(jì)方法,即將較大的任務(wù)按照一定的原則分為一個(gè)個(gè)較小的任務(wù),然后分別設(shè)計(jì)各個(gè)小任務(wù)。需要注意的是劃分出來的模塊

4、應(yīng)該相對(duì)獨(dú)立但又相關(guān),且容易理解。可以用模塊化層次結(jié)構(gòu)圖(即模塊圖)來分析其任務(wù)的劃分,一般從上到下進(jìn)行,最上面一層是主模塊,下面各層是其上一層模塊的逐步細(xì)化描述。 簡易手機(jī)號(hào)碼管理系統(tǒng)輸入記錄模塊查詢記錄模塊更新記錄模塊輸出記錄模塊從文件讀入從鍵盤輸入按號(hào)碼查詢按姓名查詢追加記錄刪除記錄插入記錄排序記錄掛失記錄輸出至文件輸出至屏幕 圖2.1簡易手機(jī)號(hào)碼管理系統(tǒng)功能模塊圖本號(hào)碼管理系統(tǒng)要求采用單鏈表實(shí)現(xiàn),如圖2.1所示,它由如下四大功能模塊組成:l 輸入記錄模塊。完成將數(shù)據(jù)存入單鏈表的工作。記錄可以從以二進(jìn)制形式存儲(chǔ)的數(shù)據(jù)文件中讀入,也可從鍵盤逐個(gè)輸入客戶記錄??蛻粲涗浻煽蛻舻幕拘畔⒑驮捹M(fèi)使

5、用信息字段構(gòu)成。當(dāng)從數(shù)據(jù)文件中讀入記錄時(shí),也就是把在以記錄為單位存儲(chǔ)的數(shù)據(jù)文件中,將記錄逐條復(fù)制到單鏈表中。l 查詢記錄模塊。完成在單鏈表中查找滿足相關(guān)條件的客戶記錄。在此號(hào)碼管理系統(tǒng)中,用戶可以按照自己的號(hào)碼或姓名在單鏈表中進(jìn)行查找。若找到該用戶的記錄,則返回指向該用戶的記錄的指針。否則返回一個(gè)值為null的空指針,并打印出未找到該用戶記錄的提示信息。l 更新記錄模塊。完成對(duì)用戶記錄的維護(hù)。在此手機(jī)號(hào)碼管理系統(tǒng)中,它實(shí)現(xiàn)了對(duì)用戶記錄的追加、刪除、插入和排序操作,并將追加后的數(shù)據(jù)存入源數(shù)據(jù)文件。l 輸出記錄模塊。一是實(shí)現(xiàn)對(duì)用戶記錄的存盤,即將記錄寫入數(shù)據(jù)文件中;二是實(shí)現(xiàn)將記錄信息以表格的形式在

6、屏幕上打印出來。 22 詳細(xì)設(shè)計(jì)2.2.1數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)l 單鏈表node結(jié)構(gòu)體 struct arr /*定義數(shù)據(jù)結(jié)構(gòu)*/char phonenumber40;char name40; float telephonefare;char address40;int ok;int xinxi;caller100;這樣就定義了一個(gè)單鏈表的結(jié)構(gòu),結(jié)構(gòu)體struct arr 將用于存儲(chǔ)用戶的基本信息,它將作為單鏈表的數(shù)據(jù)結(jié)構(gòu)。2.2.2 主控main()函數(shù)執(zhí)行流程開始進(jìn)入主函數(shù)調(diào)用菜單函數(shù)進(jìn)入do-while主循環(huán)輸入06中的一個(gè)數(shù)值,選擇相應(yīng)操作調(diào)用函數(shù)save(),進(jìn)行存數(shù)據(jù)操作結(jié)束輸入是否為0

7、?是否已對(duì)追加進(jìn)行了存盤盤是是否否判斷鍵值,調(diào)用相應(yīng)函數(shù),完成相應(yīng)功能圖2.2 主控函數(shù)執(zhí)行流程圖本手機(jī)號(hào)碼管理系統(tǒng)執(zhí)行主流程如圖2.2所示。它先以可讀寫的方式打開數(shù)據(jù)文件,此文件默認(rèn)為“c:”,若該文件不存在,則新建此文件。當(dāng)打開文件操作成功后,從文件中一次讀出一條記錄,添加到新建的單薄鏈表中,然后執(zhí)行顯示主菜單和進(jìn)入主循環(huán)操作,調(diào)用dowhile函數(shù)。在判斷鍵值時(shí),有效的輸入為本0至6之間的任意數(shù)值,其他輸入都被視為錯(cuò)誤按鍵。若輸入為0,它會(huì)跳出系統(tǒng)操作。若選擇1,則調(diào)用input_message()函數(shù),執(zhí)行輸入用戶信息操作;若選擇2,則調(diào)用find_message(caller)函數(shù),

8、執(zhí)行查找用戶記錄操作;若選擇3,則調(diào)用delete_all(caller)函數(shù),執(zhí)行將用戶記錄全部刪除;若選擇4,則調(diào)用modify(caller)函數(shù),執(zhí)行查詢用戶記錄及修改信息,繳費(fèi),掛失等操作;若選擇5,則調(diào)用write(caller)函數(shù),執(zhí)行將用戶記錄存入數(shù)據(jù)文件的操作;若選擇6,則調(diào)用read1(caller)函數(shù),執(zhí)行讀文件操作,讀出用戶信息;2.2.3 輸入記錄模塊輸入記錄模塊主要實(shí)現(xiàn)將數(shù)據(jù)存入單鏈表中。當(dāng)從數(shù)據(jù)文件中讀出記錄時(shí),調(diào)用fread(p,sizeof(caller),1,fp)文件讀取函數(shù),執(zhí)行一次從文件中讀取一條用戶使用記錄信息存入指針變量p所指的節(jié)點(diǎn)中的操作,并

9、且該操作在main()函數(shù)中執(zhí)行,即當(dāng)手機(jī)號(hào)碼管理系統(tǒng)進(jìn)入顯示菜單界面時(shí),該操作已經(jīng)執(zhí)行了。若該文件中沒有數(shù)據(jù),系統(tǒng)會(huì)提示單鏈表為空,沒有任何用戶記錄可操作,此時(shí),用戶應(yīng)選擇1,調(diào)用input_message()函數(shù),進(jìn)行用戶記錄的輸入,即完成在單鏈表l中添加記錄的操作。值得一提的是,這里的字符串和數(shù)值的輸入分別采用了函數(shù)來實(shí)現(xiàn),在函數(shù)中完成輸入數(shù)據(jù)任務(wù),并對(duì)數(shù)據(jù)進(jìn)行條件判斷,直到滿足條件為止,這樣一來,大大減少了代碼的重復(fù)和冗余,符合模塊化程序設(shè)計(jì)的特點(diǎn)。2.2.4 查詢記錄模塊查詢記錄模塊主要實(shí)現(xiàn)了在單鏈表中按電話號(hào)碼或姓名查找滿足相關(guān)條件的用戶記錄。在用戶選擇2,調(diào)用查詢函數(shù)find_m

10、essage(caller)中,根據(jù)提示輸入,就可以查到信息,如果輸入錯(cuò)誤,小河會(huì)讓你從新輸入直到輸入正確為止,若找到該記錄,則返回指向該節(jié)點(diǎn)的指針;否則,返回一個(gè)空指針。2.2.5 更新記錄模塊此模塊主要實(shí)現(xiàn)了對(duì)用戶記錄的追加、刪除、插入和排序操作。因?yàn)橛脩粲涗浭且詥捂湵淼慕Y(jié)構(gòu)形式存儲(chǔ)的,所以這些操作都在單鏈表中完成。下面分別介紹著4個(gè)功能模塊。 追加記錄。該操作需要對(duì)單鏈表中目標(biāo)節(jié)點(diǎn)的數(shù)據(jù)域中的值進(jìn)行追加,它分兩步完成。第一步,追加要輸入的電話號(hào)碼,輸入后調(diào)用modify(caller)函數(shù),把該用戶的電話號(hào)碼和姓名及花費(fèi)金額輸入;第二步,若輸入該用戶記錄,追加除電話號(hào)碼字段之外的各字段值

11、,并將存盤標(biāo)記變量save(),表示已經(jīng)對(duì)記錄進(jìn)行了追加,但還未執(zhí)行存盤操作。 刪除記錄。該操作完成刪除指定電話號(hào)碼或姓名的用戶記錄,它也分兩步完成。第一步,輸入要?jiǎng)h除的電話號(hào)碼或姓名,輸入后調(diào)用刪除函數(shù)delete all(),在單鏈表中逐個(gè)對(duì)節(jié)點(diǎn)數(shù)據(jù)域中電話號(hào)碼或姓名字段的值進(jìn)行比較,直到找到該電話號(hào)碼或姓名的用戶記錄,則返回指向該用戶記錄的節(jié)點(diǎn)指針;第二步,若找到該用戶記錄,將該用戶記錄所在節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn)的指針域,指向目標(biāo)節(jié)點(diǎn)的后繼節(jié)點(diǎn),則系統(tǒng)會(huì)顯示你已成功刪除的電話號(hào)碼或姓名。 排序記錄。有關(guān)排序的算法很多,如冒泡排序、插入排序等。針對(duì)單鏈表結(jié)構(gòu)的特點(diǎn),我們采用插入排序算法實(shí)現(xiàn)按總分的

12、從高到低對(duì)用戶記錄進(jìn)行排序,排序完成之后,即可按順序給名次字段賦值。在單鏈表中,實(shí)現(xiàn)插入排序的基本步驟如下:1) 新建一個(gè)單鏈表l,用來保存排序結(jié)果,其初始值為待排序單鏈表中的頭節(jié)點(diǎn)。2) 從待排序單鏈表中取出下一個(gè)節(jié)點(diǎn),將其總分字段值與單鏈表l中的各節(jié)點(diǎn)中總分字段的值進(jìn)行比較,直到在鏈表l中找到總分小于它的節(jié)點(diǎn)。若找到此節(jié)點(diǎn),系統(tǒng)將待排序鏈表中取出的節(jié)點(diǎn)插入此節(jié)點(diǎn)前,作為其前驅(qū)。否則,將取出的節(jié)點(diǎn)放在單鏈表l的尾部。3) 重復(fù)第二步,直到從待排序鏈表中取出的節(jié)點(diǎn)的指針域?yàn)閚ull,即此節(jié)點(diǎn)為鏈表的尾部節(jié)點(diǎn),排序完成。2.2.6 輸出記錄模塊當(dāng)把記錄輸出至文件時(shí),調(diào)用file *fp;函數(shù),將

13、p指針?biāo)腹?jié)點(diǎn)中的各字段值,寫入文件指針fp所指的文件。當(dāng)把記錄輸出至屏幕時(shí),用戶記錄信息以表格的形式在屏幕上打印出來。2.2.7 函數(shù)功能描述 l void delete_all(struct arr f4)/*注銷手機(jī)用戶信息*/delete_all()函數(shù)用于先在單鏈表l中找到滿足條件的用戶記錄的節(jié)點(diǎn),然后刪除該節(jié)點(diǎn)。l save()函數(shù)原型:void save()save()函數(shù)用于將單鏈表l中的數(shù)據(jù)寫入磁盤中的數(shù)據(jù)文件。 l void read1(struct arr f6);函數(shù)原型:read1(;read1(struct arr f6);函數(shù)用于在單鏈表l中讀出用戶記錄。 l f

14、ind_message(struct arr f3) find_message(struct arr f3)函數(shù)用于菜單的查找。函數(shù)用于查找用戶的電話號(hào)碼或姓名,從而找到該用戶的信息。l void input_message(); input_message();函數(shù)用于用戶輸入信息。l 主函數(shù)main()整個(gè)手機(jī)號(hào)碼管理系統(tǒng)控制部分,其詳細(xì)說明可參考圖二。完成在上述系統(tǒng)設(shè)計(jì)后,即可著手進(jìn)行系統(tǒng)實(shí)現(xiàn)的工作,開始程序代碼的編寫。3、系統(tǒng)實(shí)現(xiàn)31 編碼3.1.1 程序預(yù)處理包括加載頭文件,定義結(jié)構(gòu)體、常量和變量,并對(duì)它們進(jìn)行初始化工作。#include/*主函數(shù)*/#include#include

15、int i,w,j=0;/*定義全局變量*/struct arrchar phonenumber40;char name40; float telephonefare;char address40;int ok;int xinxi;caller100; void input_message();/*添加手機(jī)用戶信息*/ void find_message(struct arr f3); /*查找信息*/ void delete_all(struct arr f4); /*注銷信息*/ void modify(struct arr f5); /*修改手機(jī)用戶信息及繳費(fèi)及掛失*/ void rea

16、d1(struct arr f6); /*/ void save();main() int a,z=1;/*int a為你要輸入的數(shù)字*/ do printf(t*n); printf(tttt手機(jī)用戶信息管理系統(tǒng)nn); printf(已有的客戶人數(shù):%d n,j); printf(t功能選擇:nttt1.添加手機(jī)用戶信息nttt2.查找手機(jī)用戶信息nttt3.注銷nttt4.手機(jī)繳費(fèi),信息修改,掛失,發(fā)信息nttt5.保存信息nttt6.讀入用戶信息nttt0.退出tn); printf(t*n); printf(nnn請(qǐng)輸入 0,1,2,3,4,5,6選擇:); scanf(%d,&a)

17、; switch (a) case 0: z=0;break;/*退出*/ case 1: input_message();break;/*添加手機(jī)用戶信息*/ case 2: find_message(caller);break;/*查找手機(jī)用戶信息*/ case 3: delete_all(caller);break;/*刪除手機(jī)用戶信息 */ case 4: modify(caller);break;/*修改手機(jī)用戶信息*/ case 5: write(caller);break; case 6: read1(caller);break; default: printf(你的輸入有誤,請(qǐng)

18、重新輸入!n); z=1; system(cls); while(z=1);3.1.2 主函數(shù)main()main()函數(shù)主要實(shí)現(xiàn)了對(duì)整個(gè)程序的運(yùn)行控制,以及相關(guān)功能模塊的調(diào)用。詳細(xì)分析可參考圖2。main() int a,z=1;/*int a為你要輸入的數(shù)字*/ do printf(t*n); printf(tttt手機(jī)用戶信息管理系統(tǒng)nn); printf(已有的客戶人數(shù):%d n,j); printf(t功能選擇:nttt1.添加手機(jī)用戶信息nttt2.查找手機(jī)用戶信息nttt3.注銷nttt4.手機(jī)繳費(fèi),信息修改,掛失,發(fā)信息nttt5.保存信息nttt6.讀入用戶信息nttt0.退

19、出tn); printf(t*n); printf(nnn請(qǐng)輸入 0,1,2,3,4,5,6選擇:); scanf(%d,&a); switch (a) case 0: z=0;break;/*退出*/ case 1: input_message();break;/*添加手機(jī)用戶信息*/ case 2: find_message(caller);break;/*查找手機(jī)用戶信息*/ case 3: delete_all(caller);break;/*刪除手機(jī)用戶信息 */ case 4: modify(caller);break;/*修改手機(jī)用戶信息*/ case 5: write(call

20、er);break; case 6: read1(caller);break; default: printf(你的輸入有誤,請(qǐng)重新輸入!n); z=1; system(cls); while(z=1);3.1.3 主菜單界面用戶進(jìn)入手機(jī)號(hào)碼管理系統(tǒng)時(shí),需要顯示主菜單,提示用戶進(jìn)行選擇,完成相應(yīng)任務(wù)。此代碼被main()函數(shù)調(diào)用。int i,w,j=0;/*定義全局變量*/struct arrchar phonenumber40;char name40; float telephonefare;char address40;int ok;int xinxi;caller100; void in

21、put_message();/*添加手機(jī)用戶信息*/ void find_message(struct arr f3); /*查找信息*/ void delete_all(struct arr f4); /*注銷信息*/ void modify(struct arr f5); /*修改手機(jī)用戶信息及繳費(fèi)及掛失*/ void read1(struct arr f6); /*/ void save();main() int a,z=1;/*int a為你要輸入的數(shù)字*/ do printf(t*n); printf(tttt手機(jī)用戶信息管理系統(tǒng)nn); printf(已有的客戶人數(shù):%d n,j)

22、; printf(t功能選擇:nttt1.添加手機(jī)用戶信息nttt2.查找手機(jī)用戶信息nttt3.注銷nttt4.手機(jī)繳費(fèi),信息修改,掛失,發(fā)信息nttt5.保存信息nttt6.讀入用戶信息nttt0.退出tn); printf(t*n); printf(nnn請(qǐng)輸入 0,1,2,3,4,5,6選擇:); scanf(%d,&a); switch (a) case 0: z=0;break;/*退出*/ case 1: input_message();break;/*添加手機(jī)用戶信息*/ case 2: find_message(caller);break;/*查找手機(jī)用戶信息*/ case

23、3: delete_all(caller);break;/*刪除手機(jī)用戶信息 */ case 4: modify(caller);break;/*修改手機(jī)用戶信息*/ case 5: write(caller);break; case 6: read1(caller);break; default: printf(你的輸入有誤,請(qǐng)重新輸入!n); z=1; system(cls); while(z=1);3.1.4 刪除用戶記錄在刪除操作中,系統(tǒng)會(huì)按用戶要求先找到該用戶記錄,然后從單鏈表中刪除該節(jié)點(diǎn)。void delete_all(struct arr f4)/*注銷手機(jī)用戶信息*/ int

24、h,z=0;/*int h對(duì)結(jié)構(gòu)體是作循環(huán)操作*/ char ch,xh215; printf(n請(qǐng)輸入你要注銷的手機(jī)號(hào)碼:); scanf(%s,xh2); for(i=0;ij;i+)/*通過查找循環(huán)整體賦值來進(jìn)行刪除 */ if(strcmp(xh2,f4i.phonenumber)=0) for(h=i;hj;h+) f4h=f4h+1; z=1; if(z=1) j-;/*刪除手機(jī)用戶數(shù)量減 1 */ printf(刪除完畢); if(z=0) printf(沒有查找到該手機(jī)用戶!nn); save(); printf(請(qǐng)按任意鍵返回!); fflush(stdin); getch(

25、);3.1.5 查詢用戶記錄當(dāng)用戶執(zhí)行此查詢?nèi)蝿?wù)時(shí),系統(tǒng)會(huì)提示用戶進(jìn)行查詢字段的選擇,即按電話號(hào)碼或姓名進(jìn)行查詢。若此用戶記錄存在,則會(huì)打印輸出此用戶記錄的信息。void find_message(struct arr f3)/*查找信息*/ char xm15,ch,xh15; int a,b=1,z=0; do printf(按姓名查找選擇1,按手機(jī)號(hào)碼查找選擇2n); printf(請(qǐng)選擇:); scanf(%d,&a);/*輸入查找方式 */ if(a!=1&a!=2) printf(你的輸入有錯(cuò)請(qǐng)重新選擇!n); continue; else break; while(b=1); s

26、witch (a) case 1: printf(查找手機(jī)用戶姓名姓名:); fflush(stdin); scanf(%s,&xm); printf(n手機(jī)號(hào)碼tt姓名tt話費(fèi)tt地址tt掛失tt信息數(shù)n); for(i=0;i=j;i+) if(strcmp(,xm)=0)/*比較查找到姓名相同的手機(jī)用戶 */ if(f3i.ok=0) printf(%-stt%-stt%.2ftt%-stt未掛失tt%dn,f3i.phonenumber,,f3i.telephonefare,f3i.address,f3i.xinxi); else printf(你的帳號(hào)

27、已經(jīng)掛失!); z=1; printf(n); if(z=0) printf(t沒有找到!nn); break; case 2: printf(查找手機(jī)用戶手機(jī)號(hào)碼:); fflush(stdin); scanf(%s,&xh); printf(n手機(jī)號(hào)碼tt姓名tt話費(fèi)tt地址tt掛失tt信息數(shù)n); for(i=0;i=j;i+) if(strcmp(calleri.phonenumber,xh)=0)/*比較查找到手機(jī)號(hào)碼相同的手機(jī)用戶 */ if(f3i.ok=0) printf(%-stt%-stt%-.2ftt%-stt未掛失tt%dn,f3i.phonenumber,f3i.na

28、me,f3i.telephonefare,f3i.address,f3i.xinxi); else printf(你的帳號(hào)已經(jīng)掛失!); z=1; printf(n); if(z=0) printf(t沒有找到!nn); break; save(); printf(請(qǐng)按任意鍵返回!); fflush(stdin); getch();3.1.6 插入用戶記錄在插入用戶記錄操作中,系統(tǒng)會(huì)先按電話號(hào)碼查找到要插入的節(jié)點(diǎn)的位置,然后在該電話號(hào)碼之后插入一個(gè)新節(jié)點(diǎn)。在此手機(jī)號(hào)碼管理系統(tǒng)中,若數(shù)據(jù)文件為空,則從單鏈表的頭部開始插入用戶記錄節(jié)點(diǎn);否則,將此生記錄節(jié)點(diǎn)添加在單鏈表的尾部。void modify

29、(struct arr f5)/*插入,修改手機(jī)用戶信息及繳費(fèi)及掛失*/ int b,z=0;/*定義z做為判斷 */ char xh315,ch,ch2; double money; do printf(請(qǐng)輸入要服務(wù)的手機(jī)用戶的手機(jī)號(hào)碼!nn輸入:); scanf(%s,&xh3); for(i=0;ij;i+) if(strcmp(xh3,f5i.phonenumber)=0)/*通過比較手機(jī)用戶的信息 */ if(f5i.telephonefare10); printf(你的花費(fèi)為 %f ,已經(jīng)小于10元,請(qǐng)迅速繳費(fèi),f5i.telephonefare); do printf(選擇所要進(jìn)

30、行所要的服務(wù):ntt1.更換手機(jī)號(hào)碼tt2.修改姓名信息tt3.繳費(fèi)nntt4.更改地址tt5.掛失tt6.發(fā)送信息n); fflush(stdin); printf(選擇:); fflush(stdin); scanf(%d,&b); switch (b) case 1: printf(更換手機(jī)號(hào)碼為:); fflush(stdin); scanf(%s,&f5i.phonenumber); printf(更換成功n); break; case 2: printf(修改姓名信息為:); fflush(stdin); scanf(%s,&); printf(修改成功n); br

31、eak; case 3: printf(繳納話費(fèi)數(shù)量:); fflush(stdin); scanf(%f,&money); f5i.telephonefare+=money; printf(繳費(fèi)成功,你現(xiàn)在的花費(fèi)為: %.2lfn,f5i.telephonefare); break; case 4: printf(更改地址為:); fflush(stdin); scanf(%s,&f5i.address); printf(更改成功n); break; case 5: printf(掛失:); fflush(stdin); f5i.ok=1; printf(掛失成功,你的帳號(hào)已經(jīng)被凍結(jié)n);

32、break; case 6: printf(發(fā)信息:); fflush(stdin); if(f5i.telephonefare=1) printf(你的花費(fèi)為 %.2lf ,已經(jīng)小于10元,請(qǐng)迅速繳費(fèi),f5i.telephonefare); else f5i.ok+=1; printf(發(fā)送成功n); break; default: printf(你的選擇有誤,請(qǐng)重新選擇!n); z=1; break; save(); if(z!=1) printf(n請(qǐng)問還要繼續(xù)本手機(jī)的服務(wù)嗎?(y/n); fflush(stdin); ch2=getchar(); while(z=1|ch2=y); p

33、rintf(n請(qǐng)問還要繼續(xù)其它服務(wù)嗎?(y/n); fflush(stdin); ch=getchar(); else printf(找不該手機(jī)用戶n); fflush(stdin); while(ch=y); save(); printf(請(qǐng)按任意鍵繼續(xù)!); ch=getchar();3.1.7保存用戶數(shù)據(jù)到文件在保存用戶記錄操作中,系統(tǒng)會(huì)將單鏈表中的數(shù)據(jù)寫入磁盤數(shù)據(jù)文件中,若用戶對(duì)數(shù)據(jù)已追加過但沒有專門進(jìn)行存盤操作,那么在退出系統(tǒng)時(shí),系統(tǒng)會(huì)提示用戶是否存盤。void save()/*將文件保存 */ char ch; file * fp; if(fp=fopen(record.txt,a

34、b+)=null) printf(cant open file); exit(1); for(i=w;ij;i+)/*j為已經(jīng)存在的手機(jī)用戶數(shù)量 */ fprintf(fp,%s %s %f %s %dn,calleri.phonenumber,,calleri.telephonefare,calleri.address,calleri.ok,calleri.xinxi); fclose(fp); printf(保存完畢!請(qǐng)按任意鍵繼續(xù)!); fflush(stdin); getch();3.1.8從文件讀用戶數(shù)據(jù)void read1(struct arr f6)/*對(duì)

35、手機(jī)用戶信息進(jìn)行從文件讀入,并排序顯示 */ int h; char ch; struct arr temp; file *fp; fp=fopen(record.txt,rb);/*打開文件 */ j=0; while(fscanf(fp,%s %s %s %f %d %d,&callerj.phonenumber,&,&callerj.telephonefare,&callerj.address,&callerj.ok,&callerj.xinxi)!=-1) j+; printf(n手機(jī)號(hào)碼ttt姓名ttt話費(fèi)ttt地址ttt掛失n); for(i=0;ij;i+) for(h=i+1;h0) temp=f6h; f6h=f6i; f6i=temp; for(i=0;ij;i+) printf(%-stt%-sttt%.2fttt%-sttt%dttt%dn,f6i.phonenumber,,f6i.telephonefare,f6i.address,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論