版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序設(shè)計報告一.課題通訊錄管理系統(tǒng)二.設(shè)計方案簡介為了幫助廣大人群解決筆記通訊錄所帶來的諸多不便,本人利用所學(xué)的專業(yè)知識,設(shè)計了一個簡單,便利的系統(tǒng)供大家在線存儲眾多聯(lián)系人信息。這樣做一來可以將自己的知識生活化,運用自己所學(xué)為他人做點事,二來,在完成這項任務(wù)的過程中,通過克服一道又一道難題,我鞏固了自己的知識,發(fā)現(xiàn)了自己的不足,進而提升了自己的能力。該方案從整體出發(fā),化整為零。各個功能都是通過獨立函數(shù)實現(xiàn)。其中設(shè)計了信息錄入,信息查詢,信息修改,信息刪除,信息保存,信息顯示等功能。方案的結(jié)構(gòu)一目了然,便于用戶操作。經(jīng)過在MicrosoftVisualC++6.0中多次測試,結(jié)果均與預(yù)期相符。加上該程序要求的平臺不是很高,一般用戶均可方便使用。三.算法與數(shù)據(jù)結(jié)構(gòu)<一>運用的數(shù)據(jù)類型有:int,char,file,.<二>主要功能模塊的算法設(shè)計思路如下:1、添加信息函數(shù)(voidAdd(Linkl))(1)定義指向結(jié)構(gòu)體變量的指針;(2)移動指針,找到插入結(jié)點;(3)在要插入的結(jié)點輸入信息;(4)調(diào)用保存函數(shù),打開文件,保存輸入信息。2、修改信息函數(shù)(voidModify(Linkl))(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號查找對應(yīng)結(jié)點;(4)修改信息;(5)打開文件,保存修改記錄。3、刪除信息函數(shù)(voidDel(Linkl))(1)定義指向結(jié)構(gòu)體變量的指針;(2)用指針檢驗鏈表中是否有記錄,若沒記錄,返回主函數(shù);(3)根據(jù)要修改的編號查找要刪除的結(jié)點;(4)修改鏈表,刪除對應(yīng)結(jié)點。4、顯示記錄函數(shù)(voidDisp(Linkl))(1)打開文件;(2)用指針檢驗是否有記錄;(3)若無記錄,輸出提示信息,返回主函數(shù);若有記錄,移動指針,依次輸出記錄;(4)關(guān)閉文件。5、查詢通訊錄信息(voidFind(Linkl))(1)選擇查詢方式(按姓名、編號或地址);(2)輸入查詢關(guān)鍵字:(3)在鏈表中尋找相應(yīng)結(jié)點;(4)調(diào)用輸出函數(shù),輸出結(jié)點信息。以上各個函數(shù)的流程圖如下:(添加信息)FILE*p,打開該磁盤文件 從鍵盤輸入數(shù)據(jù)是 鏈表為空 否插入表頭插入表尾輸出數(shù)據(jù),存入磁盤文件關(guān)閉文件(顯示信息)FILE*fp,打開該文件p=head,使p指向第一個結(jié)點 P指向的不是尾結(jié)點真 假輸出p所指向的結(jié)點P指向下一個結(jié)點關(guān)閉文件關(guān)閉文件(按姓名查找)打開磁盤文件是鏈表為空否輸出“尚無記錄信息”p=head當name2=p->name是 P是要找的結(jié)點否 輸出此結(jié)點輸出“查無此人“的信息關(guān)閉文件(按編號查找)打開磁盤文件是鏈表為空否輸出“尚無記錄信息”p=head當num2=p->nun是 P是要找的結(jié)點否 輸出此結(jié)點輸出“查無此人“的信息關(guān)閉文件(按地址查找)打開磁盤文件是鏈表為空否輸出“尚無記錄信息”p=head當address2=p->address是 P是要找的結(jié)點否 輸出此結(jié)點輸出“查無此人“的信息關(guān)閉文件四.總體框架通訊錄管理系統(tǒng):錄入通訊錄信息修改通訊錄信息查詢通訊錄信息瀏覽通訊錄信息增加通訊錄信息推出系通訊錄統(tǒng)五.模塊設(shè)計模塊一:頭文件,變量定義,函數(shù)的聲明對系統(tǒng)所使用的變量進行定義,對函數(shù)進行聲明模塊二:界面菜單通過switch(c)調(diào)用,以上各函數(shù),實現(xiàn)功能模塊三:錄入通訊錄信息先用voidload()加載數(shù)據(jù),說明一個文件指針FILE*fp打開文件"D:\\Contactbook"模塊四:通訊錄信息的查找聲明voidmodify()的前半部分為查找函數(shù),通過switch(item)設(shè)定用電話號碼查找,用姓名查找兩個分支模塊五:通訊錄信息的修改聲明voidmodify()為學(xué)生信息修改函數(shù),通過switch(item)設(shè)定所要修改的項目模塊六:加通訊錄信息聲明voidinsert()插入通訊錄信息,先通過判斷通訊錄是否存在,若否則繼續(xù)輸入,若是跳出,重新循環(huán)模塊七:通訊錄信息聲明voiddel()實現(xiàn)通訊錄信息刪除,通過學(xué)號對比確定要刪除的信息,然后用后一個替換掉。模塊八:示學(xué)生信息通過disp()函數(shù)輸出通訊錄信息模塊九;存信息通過voidsave()函數(shù)保存信息到文件。設(shè)計詳情1.主函數(shù)主函數(shù)設(shè)計要求簡潔,只提供部分提示語和函數(shù)的調(diào)顯示一系列功能選項顯示一系列功能選項輸入n,判斷n是否是0~6?根據(jù)n的值調(diào)用各功能模塊函數(shù)結(jié)束開始N圖1.主函數(shù)流程圖七.源代碼#include"stdio.h"#include"stdlib.h"#include"string.h"#defineHEADER1"\n"#defineHEADER2"編號姓名電話號碼地址郵箱\n"#defineFORMAT"%-6s%-15s%-12s%-10s%-20s\n"#defineDATAp->data.num,p->,p->data.phone,p->data.address,p->data.email#defineEND"\n"intsave=0;//定義與聯(lián)系人有關(guān)的數(shù)據(jù)結(jié)構(gòu)structperson{ charnum[6]; charname[15]; charphone[12]; charaddress[10]; charemail[20];};//定義每條記錄或結(jié)點的數(shù)據(jù)結(jié)構(gòu)typedefstructnode{ structpersondata; structnode*next;}Node,*Link; //Node為node類型的結(jié)構(gòu)變量,*Link為node類型的指針變量voidmenu()//主菜單{ printf("\n");printf("本系統(tǒng)可以實現(xiàn)以下功能:\n"); printf("\n"); printf("1添加記錄2刪除記錄3修改記錄\n"); printf("\n"); printf("4查詢記錄5顯示記錄6保存記錄\n"); printf("\n"); printf("0退出系統(tǒng)\n"); printf("\n"); }voidprinthead()//格式化輸出表頭{ printf(HEADER1);printf(HEADER2);}voidprintdata(Node*pp)//格式化輸出表中數(shù)據(jù){ Node*p; p=pp; printf(FORMAT,DATA);}//顯示單鏈表l中存儲的聯(lián)系人記錄,內(nèi)容為person結(jié)構(gòu)中定義的內(nèi)容voidDisp(Linkl){ Node*p; p=l->next;//存儲的是單鏈表中頭結(jié)點的指針 if(!p)//p==NULL,NUll在stdlib中定義為0 { printf("\n=====>沒有記錄!\n"); return; } printf("\n\n"); printhead();//輸出表格頭部 //逐條輸出鏈表中存儲的聯(lián)系人信息 while(p) { printdata(p); p=p->next;//移動到下一個結(jié)點 } }Node*Locate(Linkl,charfindness[],charnameornum[]){ Node*r; if(strcmp(nameornum,"num")==0)//按編號查詢 { r=l->next; while(r) { if(strcmp(r->data.num,findness)==0)//若找到findmess值的學(xué)號 returnr; r=r->next; } } elseif(strcmp(nameornum,"name")==0)//按姓名查詢 { r=l->next; while(r) { if(strcmp(r->,findness)==0)//若找到findmess值的聯(lián)系人姓名 returnr; r=r->next; } } elseif(strcmp(nameornum,"address")==0)//按地址查詢 { r=l->next; while(r) { if(strcmp(r->data.address,findness)==0)//若找到findmess值的聯(lián)系人地址 returnr; r=r->next; } } return0;//若未找到,返回一個空指針}//輸入字符串voidstringinput(char*t,intlengths,char*attention){charn[255];do{printf(attention);//顯示提示信息scanf("%s",n);//輸入字符串if((int)strlen(n)>lengths) printf("\n超過設(shè)定長度!\n");//進行長度校驗,超過lengths值重新輸入}while((int)strlen(n)>lengths);strcpy(t,n);//將輸入的字符串拷貝到字符串t中}intnumberinput(char*attention){ intt=0; printf(attention); scanf("%d",&t); returnt;}//增加聯(lián)系人記錄voidAdd(Linkl){ Node*p,*r,*s; charflag=0,num[6]; r=l; s=l->next; Disp(l);//先打印出已有的聯(lián)系人信息 while(r->next!=NULL)r=r->next;//將指針移至于鏈表最末尾 while(l) { while(l) { stringinput(num,6,"輸入編號(按'0'返回主菜單):");//格式化輸入編號并檢驗 flag=0; if(strcmp(num,"0")==0)//輸入為0,則退出添加操作,返回主界面 {return;} s=l->next; //查詢該編號是否已經(jīng)存在,若存在則要求重新輸入一個未被占用的學(xué)號 while(s) { if(strcmp(s->data.num,num)==0) { flag=1; break; } s=s->next; } if(flag==1)//提示用戶是否重新輸入 { printf("=====>編號%s已經(jīng)存在,是否重試?",num); } else {break;} } p=(Node*)malloc(sizeof(Node));//申請內(nèi)存空間 if(!p) { printf("\n申請內(nèi)存空間失敗");//如沒有申請到,打印提示信息 return;//返回主界面 } strcpy(p->data.num,num);//將字符串num拷貝到p->data.num中 stringinput(p->,15,"Name:");stringinput(p->data.phone,12,"Phone:"); stringinput(p->data.address,10,"Address:"); stringinput(p->data.email,20,"email:"); p->next=NULL;//表明這是鏈表的尾部結(jié)點 r->next=p;//將新建的結(jié)點加入鏈表尾部 r=p; save=1; } return;}//查詢記錄voidFind(Linkl)//按編號或姓名,查詢電話記錄{ intselect;//1:按編號查,2:按姓名查,3:按地址查找,其他:返回主界面(菜單) charsearchinput[20];//保存用戶輸入的查詢內(nèi)容 Node*p; if(!l->next)//若鏈表為空 { printf("\n=====>無!\n"); return; } printf("\n=====>1按編號查詢=====>2按姓名查詢=====>3按地址查詢\n"); printf("請選擇[1,2,3]:"); scanf("%d",&select); if(select==1)//按編號查詢 { stringinput(searchinput,6,"請輸入已存在的編號:"); p=Locate(l,searchinput,"num");//在l中查找學(xué)號為searchinput值的節(jié)點,并返回節(jié)點的指針 if(p)//若p!=NULL { printhead(); printdata(p); printf("按任意鍵返回"); } else printf("\n=====>找不到此人!\n"); } else if(select==2)//按姓名查詢 { stringinput(searchinput,15,"請輸入已存在的姓名:"); p=Locate(l,searchinput,"name"); if(p) { printhead(); printdata(p); printf(END); printf("按任意鍵返回"); } else printf("\n=====>找不到此人!\n"); } if(select==3)//按地址查詢 { stringinput(searchinput,15,"請輸入已存在的地址:"); p=Locate(l,searchinput,"address"); if(p) { printhead(); printdata(p); printf(END); printf("按任意鍵返回"); } else printf("\n=====>找不到此人!\n"); }elseprintf("\n**Error:輸入錯誤!按任意鍵繼續(xù)**\n");}//按姓名刪除學(xué)生記錄voidDel(Linkl){ Node*p,*r; charfindmess[20]; if(!l->next) { printf("\n=====>找不到此人的記錄!\n"); return; } stringinput(findmess,15,"inputtheexistingpersonname"); p=Locate(l,findmess,"name"); if(p) { r=l; while(r->next!=p) r=r->next; r->next=p->next; free(p); printf("\n=====>deletesuccess!\n"); save=1; } else printf("\n=====>Notfindthisperson!\n"); }//修改電話記錄,編號不能修改.voidModify(Linkl){ Node*p; charfindmess[20]; if(!l->next) { printf("\n=====>Nopersonrecord!\n"); return; }printf("modifypersonrecorder"); Disp(l); stringinput(findmess,6,"inputtheexistingpersonnumber:");//輸入并檢驗該學(xué)號 p=Locate(l,findmess,"num");//查詢到該節(jié)點 if(p) { printf("Number:%s,\n",p->data.num); printf("Name:%s,",p->); stringinput(p->,15,"inputnewname:"); stringinput(p->data.phone,12,"inputnewphonenumber:"); stringinput(p->data.address,10,"inputnewaddress:"); stringinput(p->data.email,20,"Email:"); printf("\n=====>modifysuccess!\n"); Disp(l); save=1; } else printf("\n=====>Notfindthisperson!\n"); }//數(shù)據(jù)存盤voidSave(Linkl){ FILE*fp; Node*p; fp=fopen("D:\\Contactbook","wb");//以只寫方式打開二進制文件 if(fp==NULL)//打開文件失敗 { printf("\n=====>openfileerror!\n"); return; } p=l->next; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1)//每次寫一條記錄或一個節(jié)點信息至文件 { p=p->next; } else {break;} } save=0; fclose(fp);//關(guān)閉此文件}//主函數(shù)voidmain(){ Linkk;//定義鏈表FILE*fp1; intselect1;charch1;Node*p1,*r1;//定義記錄指針變量k=(Node*)malloc(sizeof(Node)); if(!k) { printf("\napplyformemoryfailure");//如沒有申請到,打印提示信息 return;//返回主界面 } k->next=NULL;r1=k; //以追加方式打開一個二進制文件,可讀可寫,若此文件不存在,會創(chuàng)建此文件 fp1=fopen("D:\\Contactbook","ab+");if(fp1==NULL) { printf("\n=====>cannotopenfile!\n"); exit(0); } while(!feof(fp1)) { p1=(Node*)malloc(s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度木材原材料供應(yīng)與加工合作框架合同4篇
- 2025年度祠堂修繕與維護承包服務(wù)合同4篇
- 2025版打印機租賃及耗材供應(yīng)合同范本3篇
- 2025年度二零二五年度存量房買賣居間合同綠色建筑認證服務(wù)2025版4篇
- 二零二五年度船舶貨運合同船舶燃油供應(yīng)合同范本4篇
- 二零二四年度展覽展示設(shè)計與施工后期維護保養(yǎng)合同3篇
- 2025年度廠房租賃押金托管服務(wù)合同4篇
- 2025年度木材行業(yè)節(jié)能減排技術(shù)研發(fā)合同范本4篇
- 二零二五智能交通設(shè)施代理采購合同范本4篇
- 二零二五版特色主題酒店承包經(jīng)營合同規(guī)范范本3篇
- 山東鐵投集團招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
- 2025年天津市政集團公司招聘筆試參考題庫含答案解析
- GB/T 44953-2024雷電災(zāi)害調(diào)查技術(shù)規(guī)范
- 2024-2025學(xué)年度第一學(xué)期三年級語文寒假作業(yè)第三天
- 心律失常介入治療
- 6S精益實戰(zhàn)手冊
- 展會場館保潔管理服務(wù)方案
- 監(jiān)理從業(yè)水平培訓(xùn)課件
- 廣東省惠州市實驗中學(xué)2025屆物理高二第一學(xué)期期末綜合測試試題含解析
- 搞笑朗誦我愛上班臺詞
評論
0/150
提交評論