企業(yè)管理套表通訊錄管理系統(tǒng)C語言單鏈表_第1頁
企業(yè)管理套表通訊錄管理系統(tǒng)C語言單鏈表_第2頁
企業(yè)管理套表通訊錄管理系統(tǒng)C語言單鏈表_第3頁
企業(yè)管理套表通訊錄管理系統(tǒng)C語言單鏈表_第4頁
企業(yè)管理套表通訊錄管理系統(tǒng)C語言單鏈表_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

設(shè)計題目及需求:能按遞增的順序自動進行條目編號。調(diào)整后續(xù)條目的編號。2.刪除通訊人(刪除功能)3.保存通訊錄(保存功能)4.讀取通訊錄文件(讀取功能)5.查找通訊人(查找功能)6.添加通訊人(添加功能)7.修改通訊人信息(修改功能)8.退出通訊錄系統(tǒng)成功。2.按類型查找3.查看所有人先讀取通訊錄文件。進入添加功能以后,可以按提示添加通訊人信息。者先讀取通訊錄文件。修改功能是和刪除功能一樣,也是通過姓名進行查找的。#defineIDstructtel//宏定義,方便以后的使用structtel{chartele[15];//電話charstyle[15];//類型charmail[20];//郵箱ID*next;};{intchoice;//存放用戶的選擇intj=0;//這個j是用于功能之間的配合使用while(1){system("cls");//清屏printf("\n\n");printf("\t1.建立通訊錄\n");printf("\t2.刪除通訊人\n");printf("\t3.保存通訊錄\n");printf("\t4.讀取通訊錄文件\n");printf("\t5.查找通訊人\n");printf("\t6.添加通訊人\n");printf("\t7.修改通訊人信息\n");printf("\t8.退出通訊錄系統(tǒng)\n");printf("\t\t\t\t\tMadeby元達鵬\n");printf("\n\n");scanf("%d",&choice);//輸入功能getchar();//吸收回車鍵switch(choice){case1:j=1;//讓功能7可以進得去break;case2:break;case3:Save(head);//保存函數(shù)break;case4:j=2;//讓功能7可以進得去break;case5:Search(head);//查找break;case6:if((j==1)||(j==2))//當(dāng)你進入過創(chuàng)建或者讀取之后才可以進入添加{}else{printf("在你添加通訊人的時候請先創(chuàng)建通訊錄或者讀取通訊錄文件\n\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}break;case7:if((j==1)||(j==2))//當(dāng)你進入過創(chuàng)建或者讀取之后才可以進入添加{}else{printf("在你刪除通訊人的時候請先創(chuàng)建通訊錄或者讀取通訊錄文件\n\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}break;case8:exit(0);//退出break;default:printf("你輸入錯了吧,請你重新輸入\n");}}}<><>保存文件保存文件N輸入待刪除人的輸入待刪除人的Y保存保存312Y輸出該所有相同輸出該所有相同Y通訊錄中是否存在通訊錄中是否存在輸入待修改人的名修改該人的信息修改該人的信息#defineIDstructtel//宏定義,方便以后的使用structtel{chartele[15];//電話charstyle[15];//類型charmail[20];//郵箱ID*next;};inttotal=0;//通訊錄人數(shù)的統(tǒng)計/**********************************************************************************************/ID*Create(){total=0;intk=0;inti=0;ID*head,*p1,*p2,*p3;//創(chuàng)建一個頭指針和兩個可用于移動的指針charsaveflag;//這個字符用來接收是否保存的Yory的while(1)//這個循環(huán)可以實現(xiàn)多次添加通訊人{p1=(ID*)malloc(sizeof(ID));//給p1分配一個動態(tài)存儲空間printf("請輸入姓名,當(dāng)你不想錄入時,在姓名處輸入*,結(jié)束錄入\n");{if(total==0)//當(dāng)記錄人數(shù)為0時做以下事情{printf("你輸入了0條記錄,單鏈表沒有創(chuàng)建...\n");free(p1);//釋放p1空間}else{break;//跳出while循環(huán)}}printf("請輸入電話號碼:\n");scanf("%s",p1->tele);printf("請輸入類別:辦公類、個人類、商務(wù)類\n");scanf("%s",p1->style);printf("請輸入郵箱:\n");scanf("%s",p1->mail);if(k>0){{{free(p1);printf("你重復(fù)輸入了,這一條不保存。請按任意鍵返回主菜單\n");i=1;printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)break;}{i=0;break;//跳出第一個循環(huán)}}if(i==1){break;//跳出第二個循環(huán)}}{}else{}total++;//這是錄入一個人后,總數(shù)就加1}if(i==0){free(p1);printf("\n新建通訊錄成功,共有%d個聯(lián)系人,是否保存?(Y/N)\n",total);getchar();//這個getchar是吸收回車鍵的,十分重要scanf("%c",&saveflag);//寫入一個字符if(saveflag=='y'||saveflag=='Y')//判斷它是不是為YorySave(head);//進入到保存函數(shù)里面,保存到文件里面elseprintf("\n沒有保存到成功保存到文件,請在返回主菜單后輸入3保存通訊錄。\n");}returnhead;//返回一個頭指針,這個是最重要的,因為在后面的函數(shù)中,大部分都是要頭}/*************************************************************************************************/{FILE*fp;//定義一個文件指針,接收fopen的返回值,用于最后的關(guān)閉文件ID*t;//定義一個指針,從頭到尾遍歷一遍單鏈表,向文件中寫入if((fp=fopen("","w"))==NULL)//打開文件來寫入{printf("打開文件失??!\n");getch();//輸入任意鍵進入下一步exit(0);//退出}while(t!=NULL)//只要t指針不為空{(diào)fwrite(t,sizeof(ID),1,fp);//把鏈表的東西寫入文件中t=t->next;//把指針往后移}fclose(fp);//把文件關(guān)閉printf("文件保存成功\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}/*************************************************功能:讀取文件中的信息并將其放入單鏈表中*************************************************/{FILE*fp;//定義一個文件指針,接收fopen的返回值,用于最后的關(guān)閉文件針charch;//定義一個變量來存放文件的第一個字符,但在這個函數(shù)里面主要是用來判斷文件if((fp=fopen("","r"))==NULL)//這可以判斷有沒有文件給你去讀取{printf("打開文件失?。]有該文件\n\n");printf("請按任意鍵退出程序\n");getch();//一個在網(wǎng)上查到的函數(shù),用于你可以按任意鍵進入下一步exit(0);//退出程序}/******這是在網(wǎng)上查到的一段有關(guān)于文件的程序******/ch=fgetc(fp);//這是在網(wǎng)上查到的一個有關(guān)文件的函數(shù),返回值是文件的第一個字符,當(dāng){printf("文件為空,請重新建立一個通訊錄\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)return(head);//返回一個指針,因為這個函數(shù)要有一個返回值,所以把頭指針返回出去}else{rewind(fp);//這個函數(shù)是把一個文件的位置指針從新移至開頭,不然的話會出現(xiàn)一個組數(shù)}/*************************************************/t1=(ID*)malloc(sizeof(ID));//開始申請動態(tài)空間,用t1接著while(!feof(fp))//feof函數(shù)的功能是判斷這個文件是不是結(jié)束了,如果結(jié)束了,返回一個{if(fread(t1,sizeof(ID),1,fp)!=1)//根據(jù)書上的定義,fread函數(shù)的類型為int型,返回break;//如果沒有讀取的內(nèi)容,則結(jié)束total++;//人數(shù)加1t1->next=(ID*)malloc(sizeof(ID));//把在申請動態(tài)空間的同時,把t1的next指向下一t2=t1;//讓t2和t1指向同一個地方}free(t1);//把后來的t1申請多出來的空間清空掉fclose(fp);//關(guān)閉文件printf("文件已經(jīng)成功讀取\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)returnhead;//返回一個頭指針,因為在沒有創(chuàng)建一個單鏈表和文件的時候,就是靠這個頭}/*************************************************功能:可以通過姓名查詢,也可以通過類別查詢*************************************************/{ID*p;//定義一個結(jié)構(gòu)體變量,用來放頭指針intflag,searchflag=1;//變量flag是用來判斷是不是有符合要求的數(shù)據(jù),變量searchflagcharch[10];//數(shù)組ch用來放輸入的類型printf("請輸入你希望通過什么方式查詢:(請輸入序號)\n");printf("1.姓名\n");printf("2.類別\n");printf("3.所有人\n");getchar();//吸收回車鍵{case1:{flag=0;//初始化為0printf("\n請輸入待查找者的首字母,或者查找者的姓:\n");scanf("%c",&c);//存放你的要求,首字母或姓getchar();//吸收回車鍵{{printf("%d.",count);}}if(flag==0)//這表示為沒有找到相關(guān)數(shù)據(jù){printf("\n對不起,未能找到符合條件的記錄\n");}printf("\n查找完畢,是否需要重新查詢?Y/N\n");getchar();//吸收回車鍵{searchflag=1;//回到while繼續(xù)從頭開始}else{searchflag=0;//回到while并且退出system("cls");//為了美觀,在網(wǎng)上找了清屏函數(shù)}}break;case2:{flag=0;//初始化為0,scanf("%s",ch);//用字符數(shù)據(jù)接收字符串getchar();//吸收回車鍵{{printf("%d.",count);}}if(flag==0)//這表示為沒有找到相關(guān)數(shù)據(jù){printf("\n對不起,未能找到符合條件的記錄\n");}printf("\n查找完畢,是否需要重新查詢?Y/N\n");getchar();{searchflag=1;//回到while繼續(xù)從頭開始}else{searchflag=0;//回到while并且退出system("cls");//為了美觀,在網(wǎng)上找了清屏函數(shù)}}break;case3:{printf("%d.",count);}printf("查找完成!請按任意鍵返回主菜單\n");getch();//輸入任意鍵函數(shù)system("cls");//為了美觀,在網(wǎng)上找了清屏函數(shù)break;default:printf("你輸入錯了吧,請你輸入任意鍵返回主菜單...\n");getch();//一個在網(wǎng)上查到的函數(shù),用于你可以按任意鍵進入下一步}}/*************************************************************************************************/{charsaveflag;//存放是或者否inti;//i是這個函數(shù)的關(guān)鍵,因為我嘗試了很多種方法,都是有這樣那樣的問題,雖然這個chars[10];//存放輸入的名字system("cls");//清屏printf("請輸入要刪除的姓名:\n");scanf("%s",s);getchar();{{i=1;//當(dāng)存在一樣的名字時,i=1break;}{i=0;//不存在一樣的名字時,i=1break;}}if(i==1)//當(dāng)i=1時,開始找那個一樣名字的結(jié)點在哪里{{}}if(i==0)//當(dāng)i=0時,就是沒有這個名字的人,返回主菜單{printf("對不起,沒有找到要刪除的通訊名單,請檢查你要刪除的姓名是否正確\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}{printf("你要刪除的通訊錄人為:\n");printf("姓名:%s\t電話printf("請確定是否要刪除該記錄?Y/N?\n");scanf("%c",&saveflag);//輸入,存放YorNgetchar();//吸收回車鍵if(saveflag=='y'||saveflag=='Y')//當(dāng)輸入是的時候{elsefree(p1);//把p1結(jié)點的空間釋放printf("該電話記錄已刪除成功,是否存盤?Y/N?\n");getchar();//吸收回車鍵{Save(head);//調(diào)用保存函數(shù)total--;//人數(shù)減一}else{printf("請在退出系統(tǒng)之前返回主菜單按3進行保存\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}}else{printf("該通訊錄沒有被刪除\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}}return(head);//return一個已經(jīng)進行修改的鏈表的頭指針}/*************************************************************************************************/{charsaveflag;//存放是或者否intk=0;inti=0;add=(ID*)malloc(sizeof(ID));//申請動態(tài)存儲空間system("cls");//清屏{}printf("請輸入添加人的姓名:\n");printf("請輸入添加人的電話號碼:\n");scanf("%s",add->tele);printf("請輸入添加人的類型:\n");scanf("%s",add->style);printf("請輸入添加人的郵箱:\n");scanf("%s",add->mail);{{free(add);printf("你重復(fù)輸入了,這一條不保存。請按任意鍵返回主菜單\n");i=1;printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)break;}{i=0;break;//跳出第一個循環(huán)}}if(i==0){{}else{}total++;free(p1);printf("新添加電話號碼成功,是否存盤?(Y/N)\n");getchar();//吸收回車鍵scanf("%c",&saveflag);//輸入,存放YorNif(saveflag=='y'||saveflag=='Y')//當(dāng)輸入是的時候{Save(head);//調(diào)用保存函數(shù)total++;}else{printf("請在退出系統(tǒng)之前返回主菜單按3進行保存\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}}return(head);//return一個已經(jīng)進行修改的鏈表的頭指針}/*************************************************************************************************/{charsaveflag;//存放YorNcharn[10];//存放待修改人的姓名inti;//作用和刪除的一樣領(lǐng)導(dǎo)這個函數(shù)system("cls");//清屏printf("請輸入要修改的姓名:\n");scanf("%s",n);{{i=1;//當(dāng)存在一樣的名字時,i=1break;}else{i=0;//不存在一樣的名字時,i=1break;}}if(i==1)//當(dāng)i=1時,開始找那個一樣名字的結(jié)點在哪里{{}}if(i==0)//當(dāng)i=0時,就是沒有這個名字的人,返回主菜單{printf("對不起,沒有找到要刪除的通訊名單,請檢查你要刪除的姓名是否正確\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}{printf("你要修改的電話記錄為:\n");printf("請輸入修改后的號碼:\n");scanf("%s",p1->tele);printf("請輸入修改后的類型:\n");scanf("%s",p1->style);printf("請輸入修改后的郵箱:\n");scanf("%s",p1->mail);printf("該電話記錄已修改成功\n");printf("通訊人已經(jīng)新建成功,是否進行保存?(Y/N)\n");getchar();//吸收回車scanf("%c",&saveflag);if(saveflag=='y'||saveflag=='Y')//當(dāng)輸入是的時候Save(head);//調(diào)用保存函數(shù)elseprintf("請在退出系統(tǒng)之前返回主菜單按3進行保存\n");printf("請按任意鍵返回主菜單\n");getch();//按下任意鍵就進入下一條語句的函數(shù)}return(head);//return一個已經(jīng)進行修改的鏈表的頭指針}/*************************************************************************************************/{intchoice;//存放用戶的選擇intj=0;//這個j是用于功能之間的配合使用while(1){system("cls");//清屏printf("\n\n");pri

溫馨提示

  • 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)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論