版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
PAGEPAGE1中國地質(zhì)大學(xué)本科生課程論文封面課程名稱C語言程序設(shè)計教師姓名本科生姓名本科生學(xué)號本科生專業(yè)所在院系類別:日期:課程設(shè)計評語對課程論文的評語:平時成績:課程論文成績:總成績:評閱人簽名:注:1、無評閱人簽名成績無效;2、必須用鋼筆或圓珠筆批閱,用鉛筆閱卷無效;3、如有平時成績,必須在上面評分表中標(biāo)出,并計算入總成績。目錄課程設(shè)計評語 2目錄 31.課程論文題目 42.程序設(shè)計思路 43.功能模塊圖 54.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計 55.算法設(shè)計 66.程序代碼 137.程序運行結(jié)果 218.編程中遇到的困難及解決方法 279.總結(jié)心得及良好建議 2810.致謝 281.課程論文題目通訊錄管理系統(tǒng)要求:設(shè)計具有數(shù)據(jù)插入、修改、刪除、顯示和查詢功能的電話簿管理系統(tǒng)。⑴數(shù)據(jù)包括:人名、工作單位、電話號碼和E-mail地址。⑵可對記錄中的姓名和電話號碼進行修改。⑶可增加或刪除記錄。⑷可顯示所有保存的記錄。⑸可按人名或電話號碼進行查詢。2.程序設(shè)計思路根據(jù)題目的要求,程序應(yīng)該采用結(jié)構(gòu)體數(shù)組和文件系統(tǒng)實現(xiàn)。應(yīng)該有動態(tài)的存儲空間和文件輸入、輸出等操作功能;在程序中應(yīng)該包括添加、顯示、刪除、查詢和修改以及保存和退出的功能;另外還應(yīng)提供鍵盤式選擇菜單實現(xiàn)功能選擇。3.功能模塊圖4.?dāng)?shù)據(jù)結(jié)構(gòu)設(shè)計整個程序中用到的數(shù)據(jù)主要是全局變量MAX100和字符變量name[10]、addr[20]、phnum[20]、email[20]。5.算法設(shè)計主函數(shù)主函數(shù)的設(shè)計一般比較的簡單,只提供輸入,功能處理和輸出部分的函數(shù)調(diào)用。其中個功能模塊用菜單方式選擇。菜單部分也可以寫成函數(shù)。[流程圖][程序]main()/*****************主函數(shù)*****************/{intn;/**********變量保存選擇菜單數(shù)子***************/creat();do{printf("\n\t***********************************************\n");printf("\n\n\t*************WELCOMETOUSE!***************\n");printf("\n\t**********************************************\n");printf("\n\n\t\t*****Pleasemakeachoicebelow*****\n");printf("\n\t\t1.Addapieceofmeg");printf("\n\t\t2.Listallthemeg");printf("\n\t\t3.Deleteapieceofmeg");printf("\n\t\t4.Findapieceofmeg");printf("\n\t\t5.Alterapieceofmeg");printf("\n\t\t6.SaveandQuit");printf("\n\t\t7.Createanaddressbook");printf("\n\n\n");printf("\t********InputYourChoice:****************\n");scanf("%d",&n);switch(n)/*****************輸入n的在1-6之間執(zhí)行switch************/{case1:Add();/*添加模塊*/break;case2:List();/*顯示模塊*/break;case3:Delete();/*刪除模塊*/break;case4:Find();/*查詢模塊:分為名字查詢(0)和電話號碼查詢(1)*/break;case5:Alter();/*修改模塊:分為修改名字(0)和修改電話號碼(1)*/break; case6:exit(0);/*退出模塊*/break;case7:creat();/*帶回鏈表起始地址*/fclose(fp);default:/**********輸入的n不在1-6之間執(zhí)行default************/printf("\n\t********************************************\n");printf("\n\tThenumshouldbe1-6!!!\n");printf("\n\t********************************************\n");break;}}while(1);}2.各功能模塊設(shè)計[數(shù)據(jù)結(jié)構(gòu)]通訊錄的數(shù)據(jù)信息:人名、工作單位、電話號碼、E-mail地址均可以采用字符型數(shù)組;可以采用結(jié)構(gòu)體的形式,把各信息作為結(jié)構(gòu)的成員,由于通訊錄要具有添加、查找、和刪除的功能,所以整個通訊錄采用鏈表比較容易的實現(xiàn)以上功能。用結(jié)構(gòu)體變量作為鏈表中的接點是最合適的。結(jié)構(gòu)體變量可以是指針類型,我們可以用這個指針類型的成員來存放下一個結(jié)點的地址。結(jié)構(gòu)體的類型如下:structpersons{typedefstructp{charname[10]charname[10];charaddr[20];charaddr[20];charphnum[20];charphnum[20];charemail[20];charemail[20];}persons[MAX];structp*next;}p,*linklist;structpersons類型為每個鏈表成員;typedefstructp為一個動態(tài)的結(jié)點,它的成員next存放下一個結(jié)點的地址。以下為各模塊分析時要用的指針:linklisthead=NULL,t=NULL;/**************定義頭指針和尾指針*************/p*s,*p0,*p1,*p2,*p3,*p4,*p5;inti;charname1[10],ch;charstr1[20];FILE*fp;/********************定義文件指針***********************/(1)輸入模塊[程序]voidcreat()/*將文件的信息讀入結(jié)構(gòu)體數(shù)組在轉(zhuǎn)存入鏈表中*/{intj;longk;fp=fopen("people.txt","r+");/****************打開文件**********************/if(fp!=NULL){for(i=1;i<MAX;i++){j=fgetc(fp);if(j==EOF)return;k=i-1;fseek(fp,k*sizeof(structpersons),0);/************讀取一個人的信息***************/fread(&persons[i],sizeof(structpersons),1,fp);s=(linklist)malloc(sizeof(p));/**************裝存入鏈表中***********/strcpy(s->name,persons[i].name);strcpy(s->addr,persons[i].addr);strcpy(s->phnum,persons[i].phnum);strcpy(s->email,persons[i].email);if(head==NULL)/***********用尾插法將其插入鏈表中**********/head=s;else{t->next=s;t=s;}}}else{fp=fopen("people.txt","w");i=1;/*****不能打開另開辟一個文件*****/}}⑵添加模塊由于運用的是鏈表的形式,且通訊錄只是按照輸入的先后循序排序,所以對添加的信息采用插入末端的方式,同時添加也使用于空通訊錄的信息輸入。[程序]voidAdd()/*******向通訊錄中添加(或輸入)一個人的信息*********/{s=(linklist)malloc(sizeof(p));s->next=NULL;printf("\n\n\t*********Pleaseinputthesb'smessage:**********");printf("\n\n\t\tname:");scanf("%s",s->name);printf("\n\n\t\tAddr:");scanf("%s",s->addr);printf("\n\n\t\tphnum:");scanf("%s",s->phnum);printf("\n\n\t\temai:");scanf("%s",s->email);if(head==NULL)head=s;/*******若通訊錄為空則添加在頭指針之后相當(dāng)于輸入信息*********/else{t->next=s;/***********添加到鏈表的末尾************/t=s;}}⑶顯示模塊鏈表的一大好處是只要定義了頭指針,則所有的信息就很容易的找到,指針會一環(huán)扣一環(huán)的找到每個信息,顯示出每個信息,直到最后到位指針結(jié)束。[程序]voidList()/*****************顯示所有的信息*******************/{p0=head;/**************p0指向頭指針*******************/while(p0!=NULL)/****************通訊錄不為空******************/{printf("\tname:%s",p0->name);printf("\taddr:%s",p0->addr);printf("\tphnum:%s",p0->phnum);printf("\temail:%s\n",p0->email);p0=p0->next;/**************p0向后移一個位置*****************/}}⑷刪除模塊刪除一個人的信息相當(dāng)于是刪除鏈表中的一個結(jié)點。在刪除后又要保證鏈表不間斷,如同手牽手排隊的小孩,一個離隊后,它兩側(cè)的小孩又自動地把手牽起來,保證不間斷即把結(jié)點從鏈表中分離開來,只要撤銷原來的鏈表關(guān)系即可。[流程圖]要刪除地信息p1->nexxtp1=p1->nextp2=p1p1->nexxtp1=p1->nextp2=p1[程序]voidDelete()/************定義一個刪除的函數(shù)***************/{charname0[10];p1=head;printf("\n\t**********Pleaseinputaname:*************\n");/*輸入要刪除人的姓名*/printf("\n\t\tname0:");gets(name0);scanf("%s",name0);while((strcmp(name0,p1->name)!=0)&&(p1!=NULL))/*根據(jù)各種情況判斷可能性*/{p2=p1;p1=p1->next;}/***************指針向后移一個位置****************/if(strcmp(name0,p1->name)==0)/******找到要刪除的位置*******/{if(p1==head)head=p1->next;elsep2->next=p1->next;printf("\n\t**************Deletesuccess!******************\n");}elseprintf("\n\t**************Deletefail!******************\n");/*沒找到要刪除的位置*/}⑸查詢模塊按照題目的要求查詢可以分為姓名查詢和電話號碼查詢[流程圖]選擇查詢方式查詢選擇查詢方式查詢輸入電話號碼:輸入姓名:輸入電話號碼:輸入姓名:找到找到找到找到未找到提示信息未找到提示信息找到的提示信息找到的提示信息未找到提示信息未找到提示信息找到的提示信息找到的提示信息[程序]voidFind()/***********定義一個查詢的函數(shù)**************/{intn;charphnum1[20],name1[10];printf("\n\t*******Searchbynameorphpnum?*****name(n=0)\phnum(n=1)*********\n");printf("*******Inputthenumberof'n':*************\n");scanf("%d",&n);/*******************選擇查詢方式******************/if(n==0)/****************姓名查詢***************/{printf("\n\tname:");p3=head;gets(name1);scanf("%s",&name1);/*****************輸入姓名***************/while((strcmp(name1,p3->name)!=0)&&(p3!=NULL))/*根據(jù)各種情況判斷可能性*/p3=p3->next;if(p3->name==NULL)/**************沒有找到**************/{printf("\n\t**************Cannotfindthemessage!**********");}elseif(strcmp(name1,p3->name)==0)/******找到信息并輸出******/{printf("\n\t*********Foundthemessage:**********\n");printf("\n\tname:%s",p3->name);printf("\taddress:%s",p3->addr);printf("\temail:%s",p3->email);printf("\tphnum:%s",p3->phnum);}}elseif(n==1)/***************電話號碼查詢***************/{printf("\n\tphnum1");p3=head;gets(phnum1);scanf("%s",&phnum1);/****************輸入電話號碼***************/while((strcmp(phnum1,p3->phnum)!=0)&&(p3!=NULL))/*根據(jù)各種情況判斷可能性*/p3=p3->next;if(p3->phnum==NULL)/***************沒有找到**************/{printf("\n\t************Cannotfindthemessage!***********");}elseif(strcmp(phnum1,p3->phnum)==0)/******找到信息并輸出******/{printf("\n\n\t**********Foundthemessage:*********");printf("\n\tname:%s",p3->name);⑹修改模塊按照題目的要求查詢可以分為修改姓名和修改電話號碼,修改模塊的設(shè)計思路和查詢模塊的思路基本上相同。[流程圖]修改修改修改失敗輸入新的電話號碼提示修改成功輸入新的姓名提示修改成功修改失敗找到信息找到信息未找到信息未找到輸入電話號碼:輸入姓名:修改內(nèi)容修改失敗輸入新的電話號碼提示修改成功輸入新的姓名提示修改成功修改失敗找到信息找到信息未找到信息未找到輸入電話號碼:輸入姓名:修改內(nèi)容 [程序]voidAlter()/***************定義一個修改的函數(shù)*****************/{intm;charphnum2[20],name2[10];printf("\n\n\t****Whichmessagedoyouwanttoalter?*******name(m=0)\phnum(m=1)*********\n");printf("************Inputthenumberof'm':******************\n");scanf("%d",&m);/*******************選擇修改內(nèi)容******************/if(m==0)/*********************修改姓名*********************/{printf("\n\tname:");scanf("%s",&name2);/**************輸入要修改的姓名***************/p4=head;while((strcmp(name2,p4->name)!=0)&&(p4!=NULL))/*根據(jù)各種情況判斷可能性*/p4=p4->next;if(p4==NULL){printf("\n\t*********Cannotfindthemame!**********\n");}elseif(strcmp(name2,p4->name)==0)/********找到要修改的姓名********/{printf("\n\n\t*********Inputthenewnessage:************\n");printf("\n\n\n\t\tname:");canf("%s",&name2);/**********輸入新的信息**********/strcpy(p4->name,name2);/*******新的姓名修改成功*******/printf("\n\n\t************Alteredsuccess!************\n");}}elseif(m==1)/***************修改電話號碼***************/{printf("\n\tphnum:");scanf("%s",&phnum2);/************輸入要修改的電話號碼***************/p4=head;while((strcmp(phnum2,p4->phnum)!=0)&&(p4!=NULL))/*根據(jù)各種情況判斷可能性*/p4=p4->next;if(p4==NULL){printf("\n\t************Cannotfindthephnum!*********\n");}elseif(strcmp(phnum2,p4->phnum)==0)/******找到要修改的電話號碼*****/{printf("\n\n\t**********Inputthenewnessage:*********\n");printf("\n\n\n\t\tphnum:");scanf("%s",&phnum2);/**********輸入新的信息**********/strcpy(p4->phnum,phnum2);/*******新的電話號碼修改成功*******/printf("\n\n\t************Alteredsuccess!************\n");}}}⑺保存模塊[程序]voidSave()/************定義一個保存信息的函數(shù)************/{intj;fp=fopen("people.txt","w");for(p5=head,j=0;p5!=NULL;j++,p5=p5->next)/*將信息裝出入結(jié)構(gòu)體數(shù)組在出入鏈表中*/{strcpy(persons[j].name,p5->name);strcpy(persons[j].addr,p5->addr);strcpy(persons[j].phnum,p5->phnum);strcpy(persons[j].email,p5->email);fwrite(&persons[j],sizeof(structpersons),1,fp);}}6.程序代碼#include<stdio.h>#include<stdlib.h>#include<string.h>#defineMAX100structpersons{charname[10];charaddr[20];charphnum[20];charemail[20];}persons[MAX];typedefstructp{charname[10];charaddr[20];charphnum[20];charemail[20];structp*next;}p,*linklist;linklisthead=NULL,t=NULL;p*s,*p0,*p1,*p2,*p3,*p4,*p5;inti;charname1[10],ch;charstr1[20];FILE*fp;voidcreat(){intj;longk;fp=fopen("people.txt","r+");if(fp!=NULL){for(i=1;i<MAX;i++){j=fgetc(fp);if(j==EOF)return;k=i-1;fseek(fp,k*sizeof(structpersons),0);fread(&persons[i],sizeof(structpersons),1,fp);s=(linklist)malloc(sizeof(p));strcpy(s->name,persons[i].name);strcpy(s->addr,persons[i].addr);strcpy(s->phnum,persons[i].phnum);strcpy(s->email,persons[i].email);if(head==NULL)head=s;else{t->next=s;t=s;}}}else{fp=fopen("people.txt","w");i=1;}}voidAdd(){s=(linklist)malloc(sizeof(p));s->next=NULL;printf("\n\n\t*********Pleaseinputthesb'smessage:**********");printf("\n\n\t\tname:");scanf("%s",s->name);printf("\n\n\t\tAddr:");scanf("%s",s->addr);printf("\n\n\t\tphnum:");scanf("%s",s->phnum);printf("\n\n\t\temai:");scanf("%s",s->email);if(head==NULL)head=s;else{t->next=s;t=s;}}voidList(){p0=head;while(p0!=NULL){printf("\tname:%s",p0->name);printf("\taddr:%s",p0->addr);printf("\tphnum:%s",p0->phnum);printf("\temail:%s\n",p0->email);p0=p0->next;}}voidDelete(){charname0[10];p1=head;printf("\n\t**********Pleaseinputaname:**************\n");printf("\n\t\tname0:");gets(name0);scanf("%s",name0);while((strcmp(name0,p1->name)!=0)&&(p1!=NULL)){p2=p1;p1=p1->next;}if(strcmp(name0,p1->name)==0){if(p1==head)head=p1->next;elsep2->next=p1->next;printf("\n\t**************Deletesuccess!******************\n");}elseprintf("\n\t**************Deletefail!******************\n");}voidFind(){intn;charphnum1[20],name1[10];printf("\n\t*******Searchbynameorphpnum?*****name(n=0)\phnum(n=1)*********\n");printf("*******Inputthenumberof'n':*************\n");scanf("%d",&n);if(n==0){printf("\n\tname:");p3=head;gets(name1);scanf("%s",&name1);while((strcmp(name1,p3->name)!=0)&&(p3!=NULL))p3=p3->next;if(p3->name==NULL){printf("\n\t**************Cannotfindthemessage!**********");}elseif(strcmp(name1,p3->name)==0){printf("\n\t*******Foundthemessage:**********************\n");printf("\n\tname:%s",p3->name);printf("\taddress:%s",p3->addr);printf("\temail:%s",p3->email);printf("\tphnum:%s",p3->phnum);}}elseif(n==1){printf("\n\tphnum1");p3=head;gets(phnum1);scanf("%s",&phnum1);while((strcmp(phnum1,p3->phnum)!=0)&&(p3!=NULL))p3=p3->next;if(p3->phnum==NULL){printf("\n\t************Cannotfindthemessage!*********");}elseif(strcmp(phnum1,p3->phnum)==0){printf("\n\n\t**********Foundthemessage:*********");printf("\n\tname:%s",p3->name);printf("\taddress:%s",p3->addr);printf("\temail:%s",p3->email);printf("\tphnum:%s",p3->phnum);}}}voidAlter(){intm;charphnum2[20],name2[10];printf("\n\n\t****Whichmessagedoyouwanttoalter?****name(m=0)\phnum(m=1)*********\n");printf("************Inputthenumberof'm':***********************\n");scanf("%d",&m);if(m==0){printf("\n\tname:");scanf("%s",&name2);p4=head;while((strcmp(name2,p4->name)!=0)&&(p4!=NULL))p4=p4->next;if(p4==NULL){printf("\n\t*********Cannotfindthemame!**********\n");}elseif(strcmp(name2,p4->name)==0){printf("\n\n\t*********Inputthenewnessage:************\n");printf("\n\n\n\t\tname:");scanf("%s",&name2);strcpy(p4->name,name2);printf("\n\n\t************Alteredsuccess!************\n");}}elseif(m==1){printf("\n\tphnum:");scanf("%s",&phnum2);p4=head;while((strcmp(phnum2,p4->phnum)!=0)&&(p4!=NULL))p4=p4->next;if(p4==NULL){printf("\n\t************Cannotfindthephnum!*********\n");}elseif(strcmp(phnum2,p4->phnum)==0){printf("\n\n\t**********Inputthenewnessage:*********\n");printf("\n\n\n\t\tphnum:");scanf("%s",&phnum2);strcpy(p4->phnum,phnum2);printf("\n\n\t************Alteredsuccess!************\n");}}}voidSave(){intj;fp=fopen("people.txt","w");for(p5=head,j=0;p5!=NULL;j++,p5=p5->next){strcpy(persons[j].name,p5->name);strcpy(persons[j].addr,p5->addr);strcpy(persons[j].phnum,p5->phnum);strcpy(persons[j].email,p5->email);fwrite(&persons[j],sizeof(structpersons),1,fp);}}main(){intn;creat();do{printf("\n\t***********************************************\n");printf("\n\n\t*************WELCOMETOUSE!***************\n");printf("\n\t**********************************
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鄭州2025年河南鄭州市中牟縣招聘中學(xué)教師筆試歷年參考題庫附帶答案詳解
- 菏澤2025年山東菏澤鄆城縣婦幼保健院引進急需緊缺人才7人筆試歷年參考題庫附帶答案詳解
- 淮安2025年江蘇淮安盱眙縣面向鄉(xiāng)村定向師范生招聘教師50人筆試歷年參考題庫附帶答案詳解
- 成都四川成都市新津區(qū)中醫(yī)醫(yī)院醫(yī)共體單位招聘編外衛(wèi)生專業(yè)技術(shù)人才18人筆試歷年參考題庫附帶答案詳解
- 山西2025年山西中醫(yī)藥大學(xué)附屬醫(yī)院招聘博士研究生筆試歷年參考題庫附帶答案詳解
- 2026年古典文學(xué)名著知識點解析試題
- 2026年航空航天材料性能與結(jié)構(gòu)安全檢測題庫
- 2026年宇宙探索與天文學(xué)知識測試題庫
- 職業(yè)性眼外傷的精準(zhǔn)康復(fù)方案個性化
- 公司內(nèi)部考核及培訓(xùn)制度
- 2025年秋季散學(xué)典禮校長講話:以四馬精神赴新程攜溫暖期許啟寒假
- 2026貴州省黔晟國有資產(chǎn)經(jīng)營有限責(zé)任公司面向社會招聘中層管理人員2人備考考試試題及答案解析
- 大中專高鐵乘務(wù)專業(yè)英語教學(xué)課件
- 吉林大學(xué)《電磁場與電磁波》2021-2022學(xué)年期末試卷
- 鮮花 高清鋼琴譜五線譜
- 安全生產(chǎn)標(biāo)準(zhǔn)化持續(xù)改進方案
- CJT511-2017 鑄鐵檢查井蓋
- 2024年高考語文考前專題訓(xùn)練:現(xiàn)代文閱讀Ⅱ(散文)(解析版)
- 第六節(jié)暫準(zhǔn)進出口貨物課件
- 中醫(yī)外科乳房疾病診療規(guī)范診療指南2023版
- 壓實瀝青混合料密度 表干法 自動計算
評論
0/150
提交評論