版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE1數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告設(shè)計題目通訊錄管理專業(yè)軟件工程班級姓名學(xué)號完成日期目錄1.問題描述………………32.系統(tǒng)設(shè)計………………33.數(shù)據(jù)結(jié)構(gòu)與算法描述…………………74.測試結(jié)果與分析………105.總結(jié)…………………106.參考文獻(xiàn)………………10附錄程序源代碼…………10通訊錄管理問題描述本課程設(shè)計是設(shè)計一個實用的小型通訊錄系統(tǒng),具有輸入,查詢和刪除等功能,設(shè)計合理、操作方便、運行穩(wěn)定、功能完備,具有較高的實用價值。2.系統(tǒng)設(shè)計2.1設(shè)計目標(biāo)完成通訊錄的一般性管理工作:記錄的增加、修改、刪除和輸出等功能。每個記錄包含姓名、電話號碼、住址等個人信息。要求將建立的通訊錄以磁盤文件的形式存儲,所有的通訊錄管理活動均以文件操作的方式進(jìn)行。在查找時,以記錄的“姓名”或者以“學(xué)號”為關(guān)鍵字進(jìn)行查找,刪除時也以記錄的“學(xué)號”和“姓名”進(jìn)行刪除。2.2設(shè)計思想使用單向鏈表保存數(shù)據(jù)的底層數(shù)據(jù)結(jié)構(gòu),并使用C++標(biāo)準(zhǔn)庫提供的list來實現(xiàn)這個鏈表的結(jié)構(gòu)。2.3系統(tǒng)模塊劃分菜單內(nèi)容:1.通訊錄鏈表的建立2.通訊錄結(jié)點的插入3.通訊錄結(jié)點的查詢4.通訊錄結(jié)點的刪除5.通訊錄鏈表的輸出退出管理系統(tǒng)2.3.1通訊錄的建立直接錄入輸入信息并保存。2.3.2通訊錄的插入2.3.3通訊錄的查詢1可以按“姓名”或“電話”方式查詢記錄。2能給出查詢記錄的信息。3如果查詢的信息不存在,輸出“沒有找到”的信息。2.3.4通訊錄的刪除1可以按“姓名”和“學(xué)號”方式刪除記錄并更新內(nèi)存鏈表內(nèi)容。2能給出被刪除記錄的信息。3如果沒有要刪除的信息,輸出沒有找到的信息。4刪除操作僅限于內(nèi)存,只有執(zhí)行存記錄時,才能覆蓋原記錄。2.3.5通訊錄的輸出可以隨時顯示錄入的全部內(nèi)容。2.3.6整體性能1應(yīng)可以隨時檢索,刪除或增加新記錄,也可以保存或消除新的記錄。2姓名可以由字符和數(shù)字混合編碼。3電話號碼可由字符和數(shù)字組成。5應(yīng)當(dāng)注意,輸入電話號碼的時候要改成英文輸入。6使用菜單實現(xiàn)功能的正確選擇3.數(shù)據(jù)結(jié)構(gòu)與算法描述3.1數(shù)據(jù)結(jié)構(gòu)列名數(shù)據(jù)類型長度可否為空編號char4Notnull姓名char10Notnull性別char10Notnull電話號碼char11Null地址char31NotNull3.2流程圖總體結(jié)構(gòu)框架圖主菜單主菜單通訊錄的建立通訊錄的插入入通訊錄的查詢通訊錄的刪除退出系統(tǒng)通訊錄的輸出按學(xué)號進(jìn)行查詢按姓名進(jìn)行查詢按學(xué)號進(jìn)行刪除按姓名進(jìn)行刪除流程圖主菜單(菜單函數(shù);主函數(shù))主菜單(菜單函數(shù);主函數(shù))輸入記錄(輸入函數(shù))查詢記錄(查詢菜單)刪除記錄(刪除函數(shù))插入記錄(插入函數(shù))顯示記錄(顯示函數(shù))保存文件(文件保存函數(shù))退出系統(tǒng)(推出指令)按姓名查詢按學(xué)號查詢按電話號碼查詢按電話號碼刪除按姓名刪除3.3算法描述(1)typedefstructLNode{intnumber;inttelenum;charname[20];charaddr[30];structLNode*next;}LNode,*LinkList;//用于通訊錄結(jié)點(2)voidprintList(LinkListL){//打印頭結(jié)點地址為L的通訊錄(3)LinkListprior(LinkListL,LinkListp){if(L->next==NULL)return(L);LinkListp_prior=L;While(p_prior->next!=p){p_prior=p_prior->next;}return(p_prior);}//找到位于當(dāng)前地址元素的前一元素的地址(4)intdeleteElem(LinkListL,inti)//從通訊錄中刪除第i個元素{LinkListp=L;intj=0;while(p->next&&j<i-1){p=p->next;j++;}if(!(p->next)||j>i-1){printf("第%d個元素刪除失敗\n",i);return0;}//判斷i是否合法,i既不能大于元素的個數(shù),也不能小于等于0LinkListq=p->next;p->next=q->next;free(q);//釋放刪除的結(jié)點return1;}(5)intsearchName(LinkListL,charn[]){//按姓名查找通訊者(6)intdelNum(LinkListL,intn){//按學(xué)號刪除通訊者4.測試結(jié)果與分析經(jīng)過修改后,程序能夠編譯,但執(zhí)行時出現(xiàn)了問題,程序設(shè)置的是當(dāng)一個人的信息輸完時,在輸?shù)诙€人的第一條信息時輸入-1即可結(jié)束,但是執(zhí)行時卻在輸入第二個人的全部信息都為-1時才結(jié)束,調(diào)試時發(fā)現(xiàn)是while循環(huán)的條件不正確,其條件由于設(shè)置的是number>=0,由于是while循環(huán)在結(jié)束時多讀造成該錯誤,把該條件設(shè)置為true,并在該循環(huán)之中加入if-break終止語句,使其達(dá)到了預(yù)期效果。5.總結(jié)在此次的課程設(shè)計中,我充分意識到了自己的不足之處,雖然去年的數(shù)據(jù)結(jié)構(gòu)學(xué)的不錯,但真正編起程序來,還是覺得很多地方無從下手,以前真是眼高手低,和其他人的程序比起來,這個通訊錄管理只是一個很小的系統(tǒng),也很簡單,但完成它我也煞費苦心,至于改進(jìn)之處,我想不起來通訊錄其他的功能了,我本來打算將其按名字進(jìn)行排序的,但由于能力有限,最終沒有完成,這是我的遺憾,我想我最大的收獲就是知道自己還需要更進(jìn)一步的努力,并會在以后的學(xué)習(xí)中引以為鑒,在此次課程設(shè)計中,一下幾點是我的體會:(1).編程序前,要清楚自己的目標(biāo)是什么,把設(shè)計思想理順了再開始添加代碼,否則就事倍功半。(2).對出現(xiàn)的錯誤要認(rèn)真修改,增長經(jīng)驗,為以后的編程打下基礎(chǔ)。(3).另外,編程過程中出現(xiàn)的許多問題都是經(jīng)過域同學(xué)們商討得出來的,讓我意識到了團(tuán)隊精神的重要性。在此,非常感謝譚慶老師一年來的教育,作為一個很負(fù)責(zé)任的老師,他教會我們的不僅僅是知識,還有對待事情的態(tài)度,這些都是對我影響很大的。6.參考文獻(xiàn)[1]蘇仕華等.《數(shù)據(jù)結(jié)構(gòu)課程設(shè)計》.北京:機械工業(yè)出版社,2007.12[2]劉振安等.《C++程序設(shè)計課程設(shè)計》.北京:機械工業(yè)出版社,2004.12.附錄程序源代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#include<windows.h>#defineNULL0#defineLENsizeof(LNode)intlength;intseat;typedefstructLNode{intnumber;inttelenum;charname[20];charaddr[30];structLNode*next;}LNode,*LinkList;//用于通訊錄結(jié)點voidprintList(LinkListL){//打印頭結(jié)點地址為L的通訊錄printf("\n\n");printf("NumberNameTelephoneNoAddr.\n");printf("\n");LinkListp=L;intn=1;if(L->next==NULL)printf("該鏈表中沒有元素\n");elsewhile(p->next!=NULL){printf("%d%d",n,p->next->number);printf("%s%d%s\n",p->next->name,p->next->telenum,p->next->addr);p=p->next;n++;}printf("\n");return;}LinkListprior(LinkListL,LinkListp){if(L->next==NULL)return(L);LinkListp_prior=L;while(p_prior->next!=p){p_prior=p_prior->next;}return(p_prior);}//找到位于當(dāng)前地址元素的前一元素的地址voidinsertYouXu(LinkListL,LinkListElem){//插入一個元素,使原有序表仍為有序LinkListp=L->next;while(p!=NULL&&Elem->number>=p->number){if(p->number==Elem->number){ printf("重復(fù)輸入??!\n"); return;}p=p->next;}//確定Elem插入的位置if(p==NULL){ p=prior(L,p); Elem->next=NULL; p->next=Elem;}else//若為空表,插到頭結(jié)點之后{ p=prior(L,p); Elem->next=p->next; p->next=Elem;}}LinkListcreatIncreLink()//創(chuàng)建一個非遞減有序表,返回頭結(jié)點地址{LinkListL=(LinkList)malloc(LEN);//頭結(jié)點L->next=NULL;LinkListp;intnum=1;intnumber,telenum;charname[20];charaddr[30];printf("請輸入學(xué)生學(xué)號、姓名、電話號碼、家庭住址,建立通訊錄,以'-1'為輸入結(jié)束標(biāo)志\n");printf("Inputnumber%d:",num);scanf("%d",&number);printf("Inputname%d:",num);chartemp=getchar();gets(name);printf("Inputthetelephonenumber%d:",num);scanf("%d",&telenum);printf("Inputaddr%d:",num);chartemp1=getchar();gets(addr);while(true){p=(LinkList)malloc(LEN);//新結(jié)點p->number=number;p->telenum=telenum;strcpy(p->name,name);strcpy(p->addr,addr);insertYouXu(L,p);//有序的插入新結(jié)點num++;printf("Inputnumber%d:",num);scanf("%d",&number);if(number==-1)break;printf("Inputname%d:",num);temp=getchar();gets(name);printf("Inputthetelephonenumber%d:",num);scanf("%d",&telenum);printf("Inputaddr%d:",num);temp1=getchar();gets(addr);}return(L);}intdeleteElem(LinkListL,inti)//從通訊錄中刪除第i個元素{LinkListp=L;intj=0;while(p->next&&j<i-1){p=p->next;j++;}if(!(p->next)||j>i-1){printf("第%d個元素刪除失敗\n",i);return0;}//判斷i是否合法,i既不能大于元素的個數(shù),也不能小于等于0LinkListq=p->next;p->next=q->next;free(q);//釋放刪除的結(jié)點return1;}intsearchNum(LinkListL,intn){//按學(xué)號查找通訊者intflag=0;LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(p->number<=n)if(p->number==n){flag=1;printf("要查找的是第%d位通訊者:\n",seat);printf("Number:%dName:%sTeleNo.:%d\n",p->number,p->name,p->telenum);}p=p->next;seat++;//!!!!}}returnflag;}intsearchName(LinkListL,charn[]){//按姓名查找通訊者intflag=0;LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(!strcmp(p->name,n)){flag=1;printf("要查找的是第%d位通訊者:\n",seat);printf("Number:%dName:%sTeleNo:%dAddr.:%s\n",p->number,p->name,p->telenum,p->addr);}p=p->next;seat++;//!!!!!}}returnflag;}intdelNum(LinkListL,intn){//按學(xué)號刪除通訊者intflag=0;LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,刪除失敗\n");else{while(p!=NULL){if(p->number<=n){if(p->number==n){flag=1;printf("%d",p->number);p=p->next;deleteElem(L,seat);//seat++;}}else{p=p->next;seat++;}//!!!!}printf("被刪除\n");}returnflag;}intdelName(LinkListL,charn[]){//按姓名查找通訊者intflag=0;LinkListp=L->next;seat=1;if(L->next==NULL)printf("該鏈表中沒有元素,查找失敗\n");else{while(p!=NULL){if(!strcmp(p->name,n)){flag=1;printf("%s",p->name);p=p->next;deleteElem(L,seat);//seat++;}else{p=p->next;seat++;}//!!!!!}if(flag)printf("被刪除\n");}returnflag;}voidmain(){ system("colorf0"); LinkListL;printf("\n#######______________________^@^_welcome____________________________#####\n");printf("以下為功能菜單,請鍵入數(shù)字,選擇算法:(2,3,4,5功能建立在1的基礎(chǔ)上)\n");printf("功能1通訊錄鏈表的建立:\n");printf("功能2通訊者結(jié)點的插入:\n");printf("功能3通訊者結(jié)點的查詢:\n");printf("功能4通訊者結(jié)點的刪除\n");printf("功能5通訊錄鏈表的輸出\n");printf("功能0退出管理系統(tǒng)\n");intflag=0;intmenu;printf("請選擇0-5:");scanf("%d",&menu);while(menu!=0){switch(menu){case1:{L=creatIncreLink();printf("建立通訊錄:");printList(L);flag=1;break;}case2:{if(flag==1){intnumber,telenum;charname[20];charaddr[30];printf("請輸入通訊者的學(xué)號和姓名:\n");printf("Inputthenumber:");scanf("%d",&number);printf("Inputthename:");chartemp=getchar();gets(name);printf("Inputthetelephonenumber:");scanf("%d",&telenum);printf("Inputaddr:");chartemp1=getchar();gets(addr);LinkListp=(LinkList)malloc(LEN);//新結(jié)點p->number=number;strcpy(p->name,name);p->telenum=telenum;strcpy(p->addr,addr);insertYouXu(L,p);//有序的插入新結(jié)點printf("插入后:");printList(L);}elseprintf("\nERROR:通訊錄還沒有建立,請先建立通訊錄\n");break;}case3:{intway,n;charna[20];ints;if(flag){printf("選擇查找方式:\n");printf("1.按學(xué)號2.按姓名");printf("\nInputtheway:");scanf("%d",&way);if(way==1){printf("\nInputthenumber:");scanf("%d",&n);s=searchNum(L,n);if(s==0)printf("無此通訊者,查找失敗!\n");}els
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度創(chuàng)新金融產(chǎn)品民間借貸抵押合同范本4篇
- 隨機過程應(yīng)用-洞察分析
- 2025年滬教版三年級英語上冊月考試卷
- 2025年人教新課標(biāo)九年級科學(xué)上冊月考試卷含答案
- 2025年度智能駕駛技術(shù)研發(fā)合作合同書4篇
- 瘀血證預(yù)防策略探討-洞察分析
- 2025年外研版三年級起點七年級科學(xué)下冊階段測試試卷
- 2025年滬科版七年級化學(xué)下冊階段測試試卷
- 2025年人教A版九年級地理下冊月考試卷含答案
- 部編人教版初中語文七年級上冊《課外古詩詞誦讀》教學(xué)設(shè)計
- 河北省大學(xué)生調(diào)研河北社會調(diào)查活動項目申請書
- GB/T 20920-2007電子水平儀
- 如何提高教師的課程領(lǐng)導(dǎo)力
- 企業(yè)人員組織結(jié)構(gòu)圖
- 日本疾病診斷分組(DPC)定額支付方式課件
- 兩段焙燒除砷技術(shù)簡介 - 文字版(1)(2)課件
- 實習(xí)證明模板免費下載【8篇】
- 復(fù)旦大學(xué)用經(jīng)濟(jì)學(xué)智慧解讀中國課件03用大歷史觀看中國社會轉(zhuǎn)型
- 案件受理登記表模版
- 2022年浙江省嘉興市中考數(shù)學(xué)試題(Word版)
- 最新焊接工藝評定表格
評論
0/150
提交評論