版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、課題名稱簡(jiǎn)易手機(jī)通訊錄管理系統(tǒng)(線性表、查找、排序)二、主要內(nèi)容簡(jiǎn)易手機(jī)通訊錄管理系統(tǒng)的設(shè)計(jì)主要是實(shí)現(xiàn)對(duì)手機(jī)通訊錄的管理和相關(guān)操作?;竟δ苋缦拢海?)聯(lián)系人信息錄入、添加功能:包括手機(jī)號(hào)(此處用短號(hào),5位,不能重復(fù))、姓名、家庭住址的錄入和添加。(2)聯(lián)系人信息查詢功能:能①按手機(jī)號(hào)進(jìn)行查詢。②按聯(lián)系人姓名進(jìn)行查詢。(3)排序:①能按手機(jī)號(hào)升序進(jìn)行排序;②能按姓名進(jìn)行升序排序,姓名相同時(shí)按手機(jī)號(hào)從小到大進(jìn)行排序(4)聯(lián)系人信息的修改、刪除功能:①按手機(jī)號(hào)進(jìn)行聯(lián)系人信息的修改和刪除。②按姓名進(jìn)行聯(lián)系人信息的修改和刪除,多個(gè)姓名時(shí),再指定具體的號(hào)碼。(5)統(tǒng)計(jì)功能:統(tǒng)計(jì)自己的聯(lián)系人有多少個(gè)。三、課題設(shè)計(jì)的基本思想,原理和算法描述本次課程設(shè)計(jì)題目為簡(jiǎn)易手機(jī)通訊錄管理系統(tǒng),主要運(yùn)用到線性表中順序表的相關(guān)知識(shí),以及順序查找的思想和冒泡排序算法。界面設(shè)計(jì)//菜單函數(shù)intmenu(){ intc; printf("\n\n\t☆☆☆☆☆☆☆手機(jī)通訊錄信息管理系統(tǒng)☆☆☆☆☆☆☆☆\n\n"); printf("**********************************************************************\n"); printf(" 1.添加聯(lián)系人信息\n"); printf(" 2.查詢聯(lián)系人信息\n"); printf(" 3.對(duì)聯(lián)系人信息進(jìn)行排序\n"); printf(" 4.修改聯(lián)系人信息\n"); printf(" 5.刪除聯(lián)系人信息\n"); printf(" 6.統(tǒng)計(jì)聯(lián)系人個(gè)數(shù)\n"); printf(" 0.退出信息管理系統(tǒng)\n"); printf("**********************************************************************\n\n"); printf("★請(qǐng)輸入您的選擇(0-6):"); while(1) { scanf("%d",&c); if(c<0||c>6) printf("\n▲輸入錯(cuò)誤!請(qǐng)重新選擇:"); else break; } returnc;}//主函數(shù)voidmain(){ SqList*L; InitList(L); system("color3f"); while(1) { switch(menu()) { case1:system("cls");printf("\n\t\t\t信息的增加\n");ListAdd(L);break; case2:system("cls");printf("\n\t\t\t信息的查詢\n");Search(L);break; case3:system("cls");printf("\n\t\t\t對(duì)信息進(jìn)行排序\n");Paixu(L);break; case4:system("cls");printf("\n\t\t\t信息的修改\n");ListModify(L);break; case5:system("cls");printf("\n\t\t\t信息的刪除\n");Delete(L);break; case6:system("cls");printf("\n\t\t\t統(tǒng)計(jì)聯(lián)系人個(gè)數(shù)\n");ListLength(L);break; case0:printf("再見(jiàn)!\n");return; default:printf("\n▲輸入錯(cuò)誤!請(qǐng)重新選擇:");break; } }}功能模塊的實(shí)現(xiàn)初始化順序表voidInitList(SqList*&L){ L=(SqList*)malloc(sizeof(SqList)); L->length=0;}增加信息函數(shù)。定義變量a起標(biāo)記作用,用于判斷輸入信息是否與已有信息重復(fù)voidListAdd(SqList*&L)//增加函數(shù){ inta=0;//標(biāo)記 printf("1.號(hào)碼(五位數(shù)字!):");scanf("%s",L->data[L->length].num); printf("2.姓名:");scanf("%s",L->data[L->length].name); printf("3.性別:");scanf("%s",L->data[L->length].sex); printf("4.家庭住址:");scanf("%s",L->data[L->length].add); for(inti=0;i<L->length;i++)//判斷是否重號(hào) { if(strcmp(L->data[i].num,L->data[L->length].num)==0) { printf("該號(hào)碼已經(jīng)存在\n"); a=1;break; } } if(a==0) L->length++;}查找符合條件的信息的下標(biāo)并返回到需要調(diào)用的函數(shù)體中intFindNum(SqList*&L){ printf("★輸入需要進(jìn)行操作的號(hào)碼:"); charnum[10]; scanf("%s",num); inti=0; while(i<L->length&&strcmp(L->data[i].num,num)!=0)i++; if(i>=L->length) { printf("不存在該聯(lián)系人!\n"); } returni;}=4\*GB3④查詢信息函數(shù)分兩種情況:按號(hào)碼查找與按姓名查找。由于號(hào)碼唯一所以可以直接調(diào)用之前的查找下標(biāo)函數(shù)。按姓名查找時(shí)則需要考慮到重名的情況,所以用一個(gè)for循環(huán)將所有符合條件的信息全部輸出。voidSearch(SqList*&L){ if(L->length==0) { printf("通訊錄此時(shí)為空,無(wú)法進(jìn)行查找!\n"); } else { intm,i; printf("***************************************************************\n"); printf("\t\t1.按聯(lián)系人號(hào)碼進(jìn)行查詢\n"); printf("\t\t2.按聯(lián)系人姓名進(jìn)行查詢\n"); printf("***************************************************************\n"); inta; printf("★請(qǐng)輸入您的選擇(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { printf("您查詢的信息如下\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); } break; case2: printf("★輸入需要進(jìn)行操作的姓名:"); charname[20]; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } else { printf("不存在該聯(lián)系人\n"); } } break; default: printf("輸入錯(cuò)誤!"); break; } }}=5\*GB3⑤修改函數(shù)按號(hào)碼修改時(shí)先調(diào)用之前查找下標(biāo)的函數(shù),找到符合條件的信息后直接輸入信息將原有信息覆蓋。按姓名修改時(shí)當(dāng)只有一個(gè)信息符合條件時(shí)與按號(hào)碼修改算法一樣,當(dāng)出現(xiàn)重名情況時(shí)提示用戶選擇相應(yīng)的號(hào)碼再調(diào)用按號(hào)碼修改的算法。每一次修改都進(jìn)行一次判斷,判斷修改后的信息是否與表中已有信息重復(fù)。voidListModify(SqList*&L){ if(L->length==0) { printf("通訊錄此時(shí)為空,無(wú)法進(jìn)行信息的修改!\n"); } else { intm,n; intb=0; printf("***************************************************************\n"); printf("\t\t1.按聯(lián)系人號(hào)碼進(jìn)行修改\n"); printf("\t\t2.按聯(lián)系人姓名進(jìn)行修改\n"); printf("***************************************************************\n"); inta; printf("★請(qǐng)輸入您的選擇(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { Telphonep; printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); printf("輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",p.num,,p.sex,p.add); for(intj=0;j<L->length;j++)//判斷是否重號(hào) { if(strcmp(L->data[j].num,p.num)==0) { printf("修改失?。。ㄔ撎?hào)碼已經(jīng)存在)\n"); printf("重新輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",L->data[m].num,L->data[m].name,L->data[m].sex,L->data[m].add); printf("\n"); break; } else { L->data[m]=p; } } } break; case2: printf("★輸入需要進(jìn)行操作的姓名:"); charname[20]; inti; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { b++; } } if(b==0) { printf("不存在該聯(lián)系人!\n"); } if(b==1) { for(inti=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { Telphoneq; printf("再次確認(rèn)需要修改的信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); printf("★輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",q.num,,q.sex,q.add); for(intj=0;j<L->length;j++)//判斷是否重號(hào) { if(strcmp(L->data[j].num,q.num)==0) { printf("修改失?。。ㄔ撎?hào)碼已經(jīng)存在)\n"); printf("重新輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); printf("\n"); break; } else { L->data[i]=q; } } } } } if(b>1) { printf("符合條件的聯(lián)系人有%d個(gè)!詳細(xì)信息如下:\n",b); for(inti=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } } printf("請(qǐng)根據(jù)以上顯示出的信息選擇對(duì)應(yīng)的號(hào)碼進(jìn)行修改!\n"); n=FindNum(L); if(n<L->length) { Telphonet; printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[n].num,L->data[n].name,L->data[n].sex,L->data[n].add); printf("輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",t.num,,t.sex,t.add); for(inti=0;i<L->length;i++)//判斷是否重號(hào) { if(strcmp(L->data[i].num,t.num)==0) { printf("修改失?。。ㄔ撎?hào)碼已經(jīng)存在)\n"); printf("重新輸入修改后的聯(lián)系人信息:\n"); printf("號(hào)碼 姓名 性別 家庭住址\n"); scanf("%s %s %s %s",L->data[n].num,L->data[n].name,L->data[n].sex,L->data[n].add); printf("\n"); break; } else { L->data[n]=t; } } } } break; default: printf("輸入錯(cuò)誤!"); break; } }}=6\*GB3⑥刪除函數(shù)按號(hào)碼刪除時(shí)先查找到符合條件的信息,再用for循環(huán)將該信息后面的信息依次向前覆蓋達(dá)到刪除功能。按姓名刪除信息時(shí)當(dāng)出現(xiàn)重名情況時(shí)提示用戶選擇相應(yīng)的號(hào)碼再調(diào)用按號(hào)碼刪除的算法。voidDelete(SqList*&L)//刪除函數(shù){ if(L->length==0) { printf("通訊錄此時(shí)為空,無(wú)法進(jìn)行信息的刪除!\n"); } else { intm,n; printf("***************************************************************\n"); printf("\t\t1.按聯(lián)系人號(hào)碼進(jìn)行刪除\n"); printf("\t\t2.按聯(lián)系人姓名進(jìn)行刪除\n"); printf("***************************************************************\n"); inta;intb=0; printf("★請(qǐng)輸入您的選擇(1or2):"); scanf("%d",&a); switch(a) { case1: m=FindNum(L); if(m<L->length) { for(intj=m;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已刪除\n"); L->length--; } break; case2: printf("★輸入需要進(jìn)行操作的姓名:"); charname[20]; inti; scanf("%s",name); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { b++; } } if(b==0) { printf("不存在該聯(lián)系人!\n"); } if(b==1) { for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); if(i<L->length) { for(intj=i;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已刪除\n"); L->length--; } } } } if(b>1) { printf("符合條件的聯(lián)系人有%d個(gè)!詳細(xì)信息如下:\n",b); for(i=0;i<L->length;i++) { if(strcmp(L->data[i].name,name)==0) { printf("號(hào)碼 姓名 性別 家庭住址\n"); printf("%s %s %s %s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } } printf("請(qǐng)根據(jù)以上顯示出的信息選擇對(duì)應(yīng)的號(hào)碼進(jìn)行刪除!\n"); n=FindNum(L); if(n<L->length) { for(intj=n;j<L->length-1;j++) { L->data[j]=L->data[j+1]; } printf("信息已刪除\n"); L->length--; } } break; default: printf("輸入錯(cuò)誤!"); break; } }}=7\*GB3⑦排序函數(shù)采用冒泡排序的思想對(duì)號(hào)碼進(jìn)行排序。按姓名排序時(shí)若出現(xiàn)重名則按號(hào)碼排序,算法體現(xiàn)在PaixuName函數(shù)中,先進(jìn)行號(hào)碼排序再進(jìn)行姓名排序。voidPaixuNum(SqList*&L){ if(L->length==0) { printf("通訊錄為空\(chéng)n"); } else { inti,j; Telphonet; for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].num,L->data[j-1].num)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } printf("按號(hào)碼排序?yàn)椋篭n"); printf("號(hào)碼\t姓名\t性別\t家庭住址\n"); for(i=0;i<L->length;i++) { printf("%s\t%s\t%s\t%s\n",L->data[i].num,L->data[i].name,L->data[i].sex,L->data[i].add); } }}voidPaixuName(SqList*&L){ if(L->length==0) printf("通訊錄為空\(chéng)n"); else { inti,j; Telphonet; for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].num,L->data[j-1].num)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } for(i=0;i<L->length-1;i++) { for(j=L->length-1;j>i;j--) { if(strcmp(L->data[j].name,L->data[j-1].name)<0) { t=L->data[j]; L->data[j]=L->data[j-1]; L->data[j-1]=t; } } } printf("按聯(lián)系人姓名排序?yàn)椋篭n");printf("姓名\t號(hào)碼\t性別\t家庭地址\n"); for(i=0;i<L->length;i++) { printf("%s\t%s\t%s\t%s\n",L->data[i].name,L->data[i].num,L->data[i].sex,L->data[i].add); } }}voidPaixu(SqList*&L){ if(L->length==0) { printf("通訊錄此時(shí)為空,無(wú)法進(jìn)行信息的排序!\n"); } else { inta; printf("***************************************************************\n"); printf("\t\t1.按聯(lián)系人號(hào)碼進(jìn)行排序\n"); printf("\t\t2.按聯(lián)系人姓名進(jìn)行排序\n"); printf("***************************************************************\n"); printf("★請(qǐng)輸入您的選擇(1or2):"); scanf("%d",&a); switch(a) { case1:PaixuNum(L);break; case2:PaixuName(L);break; default:printf("輸入錯(cuò)誤!");break; } }}=8\*GB3⑧統(tǒng)計(jì)函數(shù)直接返回順序表的長(zhǎng)度voidListLength(SqList*&L){ printf("聯(lián)系人總數(shù)為:%d\n",L->length);}(4)流程圖初始化順序表初始化順序表添加信息按姓名查詢按姓名刪除按姓名修改按號(hào)碼刪除按號(hào)碼修改按姓名排序按號(hào)碼排序按號(hào)碼查詢統(tǒng)計(jì)信息刪除信息修改信息信息排序查詢信息按姓名查詢按姓名刪除按姓名修改按號(hào)碼刪除按號(hào)碼修改按姓名排序按號(hào)碼排序按號(hào)碼查詢統(tǒng)計(jì)信息刪除信息修改信息信息排序查詢信息圖1設(shè)計(jì)框架圖四、運(yùn)行示例及結(jié)果分析圖2主界面圖3增加信息界面圖4姓名不唯一出現(xiàn)錯(cuò)誤提示圖5按號(hào)碼查詢界面圖6重名查詢界面圖7按姓名查詢界面圖8按號(hào)碼進(jìn)行排序界面圖9按姓名進(jìn)行排序界面圖10按號(hào)碼進(jìn)行修改界面圖11按姓名進(jìn)行修改界面圖12修改時(shí)出現(xiàn)重名情況再選擇號(hào)碼修改圖13修改出現(xiàn)錯(cuò)誤時(shí)的界面圖14按號(hào)碼進(jìn)行刪除界面圖15按號(hào)碼進(jìn)行刪除界面圖16出現(xiàn)重名選擇號(hào)碼進(jìn)行刪除界面圖17統(tǒng)計(jì)聯(lián)系人個(gè)數(shù)界面五、調(diào)試和運(yùn)行程序過(guò)程中產(chǎn)生的問(wèn)題及采取的措施問(wèn)題1:查找不能運(yùn)行解決:查找函數(shù)體沒(méi)有出錯(cuò),而是定義變量num時(shí)所給的空間過(guò)小,以為輸入5個(gè)數(shù)字則定義為num[5],忽略數(shù)組本身自帶’\0’占據(jù)一個(gè)位置,將數(shù)組大小改為10問(wèn)題就解決了。問(wèn)題2:出現(xiàn)重名情況時(shí)不能輸出所有符合條件的信息解決:開(kāi)始時(shí)和按號(hào)碼查找一樣是先定義一個(gè)函數(shù)查找符合條件的信息并返回該信息的下標(biāo)。但這樣只能返回一個(gè)符合條件的信息,當(dāng)出現(xiàn)重名情況時(shí)不能全部輸出,所以我改在
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金屬鉻還原工操作規(guī)程能力考核試卷含答案
- 拍賣運(yùn)營(yíng)師崗前工藝控制考核試卷含答案
- 飛機(jī)雷達(dá)安裝調(diào)試工變更管理競(jìng)賽考核試卷含答案
- 鍛件切邊工道德強(qiáng)化考核試卷含答案
- 圓機(jī)操作工安全綜合評(píng)優(yōu)考核試卷含答案
- 自來(lái)水生產(chǎn)工崗前理論水平考核試卷含答案
- 冷鏈物流員安全素養(yǎng)知識(shí)考核試卷含答案
- 化學(xué)農(nóng)藥生產(chǎn)工誠(chéng)信品質(zhì)能力考核試卷含答案
- 塑料熱合工安全意識(shí)競(jìng)賽考核試卷含答案
- 礦山安全設(shè)備監(jiān)測(cè)檢修工安全知識(shí)宣貫?zāi)M考核試卷含答案
- 2025年三級(jí)教育安全考試試題及答案
- GB/T 38235-2025工程用鋼絲環(huán)形網(wǎng)
- 西醫(yī)基礎(chǔ)知識(shí)培訓(xùn)課件
- 《電磁發(fā)射滅火炮技術(shù)規(guī)范》
- 風(fēng)機(jī)攀爬安全培訓(xùn)課件
- 陜西西安遠(yuǎn)東二中學(xué)2026屆九年級(jí)數(shù)學(xué)第一學(xué)期期末考試模擬試題含解析
- 以人工智能賦能新質(zhì)生產(chǎn)力發(fā)展
- 資產(chǎn)管理部2025年工作總結(jié)與2025年工作計(jì)劃
- 公建工程交付指南(第四冊(cè))
- 2025年貴州省法院書(shū)記員招聘筆試題庫(kù)附答案
- 過(guò)氧化氫氣體低溫等離子滅菌測(cè)試題(附答案)
評(píng)論
0/150
提交評(píng)論