通訊錄的源代碼(用鏈表實現)

#include <stdio.h>

#include <stdlib.h> /*與malloc.h差不多*/

#include <string.h>

#define maxlen 100

strUCt persons

{ char name[10]; /*定義結構體數組用于緩存數據*/

char addr[20];

char phnum[10];

}persons[maxlen];

;

;

;

typedef struct lnode{ /*通訊錄結構中結點的定義*/

char name[10]; /*姓名*/

char addr[20]; /*地址*/

char phnum[10]; /*電話*/

struct lnode *next;

}listnode,*linklist;

;

;

;

linklist head=NULL,r=NULL; /*定義頭指針和尾指針*/

listnode *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7;

int i;

char name1[10],ch;

char str1[20];

FILE *fp; /*定義文件指針*/

;

;

void creat() /*將文件的信息讀入結構體數組在轉存入鏈表中*/

{ int j;

long k;

fp=fopen("people.txt","r+t"); /*打開文件*/

if(fp!=NULL)

{for(i=1;i<maxlen;i++)

{ j=fgetc(fp);

if(j==EOF)

return;

k=i-1;

fseek(fp,k*sizeof(struct persons),0); /*讀取一個人的信息*/

fread(&persons[i],sizeof(struct persons),1,fp);

s=(linklist)malloc(sizeof(listnode)); /*裝存入鏈表中*/

strcpy(s->name,persons[i].name);

strcpy(s->addr,persons[i].addr);

strcpy(s->phnum,persons[i].phnum);

if(head==NULL) /*用尾插法將其插入鏈表中*/

head=s;

else

r->next=s;

r=s;}

}

else

{ fp=fopen("people.txt","w"); /*不能打開另開辟一個文件*/

i=1;

}

}

;

;

;

void Show() /*顯示所有的信息*/

{ p1=head;

while(p1!=NULL)

{ printf(" name:%s ",p1->name);

printf(" addr:%s",p1->addr);

printf(" phnum:%s",p1->phnum);

p1=p1->next;

}

}

;

;

;

void Delete() /*定義一個刪除的函數*/

{ printf(" please input the name:");

gets(name1); /*輸入要刪除人的姓名*/

p4=head;

if(strcmp(p4->name,name1)==0)

{ p4=p4->next; /*根據各種情況判定可能性*/

head=p4;

}

else

{ while(strcmp(p4->next->name,name1)!=0)

p4=p4->next;

p5=p4->next;

p4->next=p5->next;

free(p5);

}

}

;

;

;

void Find() /*查找的函數定義*/

{ printf(" please input the name:");

p0=head;

gets(name1); /*查找人的姓名輸入*/

while(strcmp(name1,p0->name)!=0&&p0!=NULL)

p0=p0->next;

if(p0==NULL)

printf(" It is not exit in the addr-book!");

else

{ printf(" name:%s ",p0->name);

printf(" addr:%s",p0->addr);

printf(" phnum:%s",p0->phnum);

}

}

;

;

;

void Input() /*向通訊錄中輸入一個人的信息*/

{ s=(linklist)malloc(sizeof(listnode));

printf(" please input the sb's meg:");

printf(" name:");

scanf("%s",s->name);

printf(" Addr:");

scanf("%s",s->addr);

printf(" phnum:");

scanf("%s",s->phnum);

if(head==NULL)

head=s;

else

r->next=s;

r=s;

}

;

;

;

void Alter() /*改變一個人的信息*/

{

int j;

printf(" Please input the name:");

gets(name1); /*輸入要人的姓名*/

p3=head;

while(strcmp(name1,p3->name)!=0&&p3!=NULL)

p3=p3->next;

if(p3==NULL)

printf(" It is not exit in the addr-book!");

else

{ printf(" please input the new meg!"); /*輸入要改人的新信息*/

printf(" name:");

scanf("%s",name1);

strcpy(p3->name,name1);

printf(" Addr:");

scanf("%s",name1);

strcpy(p3->addr,name1);

printf(" phnum:");

scanf("%s",name1);

strcpy(p3->phnum,name1);

}

}

;

;

;

void Save() /*保存信息*/

{ int j;

fp=fopen("people.txt","w");

for(p2=head,j=0;p2!=NULL;j++,p2=p2->next)/*將信息裝出入結構體數組在出入鏈表中*/

{ /*避免地址的出入,造成亂碼文件*/

strcpy(persons[j].name,p2->name);

strcpy(persons[j].addr,p2->addr);

strcpy(persons[j].phnum,p2->phnum);

fwrite(&persons[j],sizeof(struct persons),1,fp);

}

}

;

;

;

void main()

{ creat();

do

{ printf(" WELCOME TO USE Pan Weifeng's Address book");/*顯示提示的信息*/

printf(" Please make a choice below:");

printf(" 1.Show all the meg");

printf(" 2.Delete a piece of meg");

printf(" 3.Find a piece of meg");

printf(" 4.Insert a piece of meg");

printf(" 5.Alter a piece of meg");

printf(" 6.Save and Exit");

printf(" ");

printf(" Input Your Choice:");

ch=getche();

switch(ch)

{ case '1': Show(); /*用單條件多選擇語句實現調用與循環*/

break;

case '2': Delete();

break;

case '3': Find();

break;

case '4': Input();

break;

case '5': Alter();

break;

case '6': Save();

fclose(fp);

exit(0);

break;

default:

printf(" ********************************* ");

printf(" The num should 1-4!!! ");

printf(" **********************************");

break;

}

}while(1);

}

另辟蹊徑實現通訊錄的“查找”功能
小三的通訊錄沒有查找功能,真得讓我很受傷,當條目超過兩三百的時候,常常找一個人需要按幾十下方向鍵。爲此,我以前曾寫過一篇東西,將此功能的缺失稱爲小三最大的缺陷,也引起了許多機友的共鳴。今天琢磨出一個方...查看完整版>>另辟蹊徑實現通訊錄的“查找”功能
 
用記事本通過T39的紅外線、藍牙實現通訊錄的編輯設定
事先申明,如果這種方法以以前有那位朋友提到過,這篇文章就請在審核的時候cut掉。通訊錄:將以下內容copy至一新建NotePad中,不包括上下兩行“-----”內容:-------------------------BEGIN:VCARDVERSION:2.1N;CHAR...查看完整版>>用記事本通過T39的紅外線、藍牙實現通訊錄的編輯設定
 
用TTreeview實現的一個通訊錄的組別設置,
回複人: Adayuer([±0℃]) ( ) 信譽:96 2002-04-01 09:40:17Z 得分:0 看看我的一段代碼吧。用TTreeview實現的一個通訊錄的組別設置,聯系人用Tlistview。/--------------------------------------------...查看完整版>>用TTreeview實現的一個通訊錄的組別設置,
 
Gmail 導入通訊錄的經驗分享-應用技巧
  自己好不容易總結出來的經驗哦!也許大家都知道了,可我在網上找了好久都沒找到,今天終于找到方法了!  登入Gmail→通訊錄導出→選"Outlook CSV 格式(適用于導入到 Outlook 或其他應用程序)" 切記,只能選這...查看完整版>>Gmail 導入通訊錄的經驗分享-應用技巧
 
索愛手機通訊錄的備份
最近索愛論壇有很多網友提出備份通訊錄的困惑。其實索愛手機通訊錄備份從來就不是一個難題。 用過索愛的老人一般都用過愛立信,其實不管愛立信還是索愛,手機的軟件內核都沒有變。因爲索、愛手機終端合並後,索尼...查看完整版>>索愛手機通訊錄的備份
 
諾基亞6120c通訊錄的導入技巧
用了QD好多年了,感謝小Q帶給我的快樂的日子,有你相伴的日子裏我從了沒有感覺到無聊,但是現在工作了,要經常出差實在是有點不合適,讓我放棄s60我又不習慣,不放棄吧沒那麽多銀子,就是在這時6120c走進了我的視線,...查看完整版>>諾基亞6120c通訊錄的導入技巧
 
總結一下6688和outlook同步通訊錄的方法
搞定自己的通訊錄,順便總結一下6688和outlook同步通訊錄的方法 本人的聯系人全部存在office outlook裏,今天搞定了自己的通訊錄,將office outlook(不是windows自帶的Outlook Express)的聯系人全部同步到西門子...查看完整版>>總結一下6688和outlook同步通訊錄的方法
 
E1進不了通訊錄的解決辦法
昨晚拿E1手機胡亂玩,由于是剛買的所以比較好奇,當翻到通訊錄時試著把設置裏面的排列方式有拼音改到了筆畫,一改不要緊,手機通訊錄直接打不開了,急了我個滿頭大汗,想到了所有的辦法就是打不開,關機重起___郁...查看完整版>>E1進不了通訊錄的解決辦法
 
小靈通UT-718+的可搜索通訊錄的同步
  由于 718 沒有與電腦連接的條件,所以往通訊錄中輸入電話比較費事。並且手機一旦出現故障,通訊錄的資料將全部丟失,本人經曆一次這樣的事情,耽誤了很多事情,大罵手機質量不好。經過免費保修主板以後,手機中的...查看完整版>>小靈通UT-718+的可搜索通訊錄的同步
 
 
回到王朝網路移動版首頁