本文目錄一覽:
- 1、用C語言建立一個鏈表實現一個通訊錄,
- 2、C語言關於鏈表的問題(通訊錄)
- 3、一道C語言鏈表通訊錄的題
- 4、數據結構通訊錄管理與鏈表(C語言)求指導.,本人菜鳥中的菜鳥
- 5、C語言數據結構:鏈表的應用–通訊錄管理
用C語言建立一個鏈表實現一個通訊錄,
#include stdio.h
#include stdlib.h
#include conio.h
#include string.h
typedef unsigned long ulong;
typedef struct _list {
char name[16];
char addr[64];
ulong phone;
ulong qq;
struct _list* next;
} *node, list;
/* insert a node */
node Insert( node* head, node pos, list* l )
{
node tmp;
tmp = ( node )malloc( sizeof( list ) );
strcpy( tmp-name, l-name );
strcpy( tmp-addr, l-addr );
tmp-phone = l-phone;
tmp-qq = l-qq;
tmp-next = pos ? pos-next : *head;
if ( pos ) {
pos-next = tmp;
} else {
*head = tmp;
}
return tmp;
}
/* create a list */
node Create( void )
{
node head, t;
list input;
head = t = NULL;
printf( “請按 [姓名] [地址] [家庭電話] [qq] 的順序輸入\n” );
printf( “每行一組數據,輸入空行結束:\n” );
while ( 1 ) {
if ( getchar() == ‘\n’ ) break;
scanf( “%s%s%lu%lu”, input.name, input.addr, input.phone, input.qq );
while ( getchar() != ‘\n’ );
t = Insert( head, t, input );
}
return head;
}
/* view list */
void Print( node head )
{
while ( head ) {
printf( “%s\t%s\t%lu\t%lu\n”, head-name, head-addr, head-phone, head-qq );
head = head-next;
}
putchar( ‘\n’ );
}
/* merge sort */
node msort( node* head, int n )
{
int i, m;
node l, r, p, *x, *y;
if ( n 2 ) return *head;
m = n/2;
p = l = r = *head;
for ( i = m; i 0; –i )
p = r, r = r-next;
p-next = NULL;
l = msort( l, m );
r = msort( r, n – m );
x = p;
while ( l r ) {
*x = l-qq r-qq ? (y = l, l) : (y = r, r);
*y = (*y)-next; x = (*x)-next;
}
l = l ? l : r ? r : NULL;
*x = l; *head = p;
return p;
}
/* sort wrapper */
void Sort( node* head )
{
int i;
node tmp = *head;
for ( i = 0; tmp; ++i, tmp = tmp-next );
msort( head, i );
}
int main( void )
{
node head = Create();
printf( “\n鏈表內容:\n” );
Print( head );
Sort( head );
printf( “\n排序之後:\n” );
Print( head );
getch();
return 0;
}
C語言關於鏈表的問題(通訊錄)
struct people *find(char *name) /*查找*/
{struct people *p1,*p2;
char c;
clrscr();
if(head==NULL) {printf(“\nlist null!\n”);}
p1=head;
while(strcmp(name,p1-name)!=0p1-next!=NULL)
{p2=p1;
p1=p1-next;}
if(strcmp(name,p1-name)==0) /*如果找到*/
{printf(“\tThe message of %s is:\n”,name);
printf(“\tName: %s\n\taddress: %s\n\tZip: %s\n\tPhone: %s\n”,p1-name,p1-adress,p1-zip,p1-phone);
do /*子止錄,對找到的信息操作*/
{
puts(“\tWhat’s you want to do!”);
puts(“\t1.Delect”); /*刪除*/
puts(“\t2.Reset”); /*修改*/
puts(“\t3.Return”); /*返回*/
c=getch();}while(c!=’1’c!=’2’c!=’3′);
if(c==’1′)
{if(p1==head) head=p1-next;
else p2-next=p1-next;
printf(“\tDelect: %s\n”,name);
sleep(1);
n–;}
else if(c==’2′)
{printf(” Please input new address:”);
scanf(“%s”,p1-adress);
printf(” Please input new zip:”);
scanf(“%s”,p1-zip);
printf(” Please input new phone:”);
scanf(“%s”,p1-phone);}
}
else printf(“%s not been found!\n”,name);
sleep(1);
}
main()
{
struct people *p1,*p;
char c,c1,s,name1[20],s1;
textbackground(GREEN); /*設置背景色*/
loop:
while(1) /*主目錄*/
{do{clrscr();
puts(“\t\tWELCOME”);
puts(“\t Please Select Key:”);
puts(“\t 1.Insert”); /*添加*/
puts(“\t 2.Find”); /*查找*/
puts(“\t 3.Del_All”); /*清空*/
puts(“\t 4.Exit”); /*退出*/
c=getch();
}while(c!=’1’c!=’2’c!=’3’c!=’4′);
while(c)
{if(c==’1′)
{clrscr();
puts(” Please input the messages about:”);
creat();
goto loop;
}
else if(c==’2′)
{clrscr();
printf(” Who you want to find:”);
gets(name1);
find(name1);
goto loop;}
else if(c==’3′)
{clrscr();
puts(” Are you sure to delect all?(y/n)”);
s=getch();
if(s==’y’||s==’Y’)
{head=NULL;
n=0;
puts(“\tDelect Over”);
sleep(1);}
goto loop;
}
else if(c==’4′)
{clrscr();
puts(“\tThank you for your using!”);
puts(“\t Good bye!”);
sleep(1);
exit(0);}
}
}
}
這是查找和主函數,哪出問題了?
一道C語言鏈表通訊錄的題
#include stdio.h
#includeiostream.h
#include string.h
#include conio.h
#include stdlib.h
#define null 0 ;
struct record
{
char name[20];
char phone[20];
char adress[40];
char postcode[10];
char e_mail[30];
}student[30];
struct LinkList
{
struct record US;
struct LinkList *next;
}a;
struct LinkList *head=null;
int num=0;
FILE *fp;
int menu_select();
int adduser();
int list();
int search();
int display();
int add();
int listbyname();
int dele();
int save();
int exit();
void main()
{
system(“cls”);
for(;;)
{
switch(menu_select())
{
case 0:
adduser();
break;
case 1:
list();
break;
case 2:
search();
break;
case 3:
display();
break;
case 4:
add();
break;
case 5:
listbyname();
break;
case 6:
dele();
break;
case 7:
save();
break;
case 8:
exit(0);
}
}
}
menu_select()
{
int s;
int a;
cout”*_* 按任意鍵進入菜單! *_* “endl;
getch();
system(“cls”);
cout”\t\t********************MENU*********************\n”endl;
cout”\t\t 0. 輸入記錄”endl;
cout”\t\t 1. 顯示記錄 “endl;
cout”\t\t 2. 按姓名查找”endl;
cout”\t\t 3. 按電話號碼查找”endl;
cout”\t\t 4. 增加用戶”endl;
cout”\t\t 5. 按姓名排序”endl;
cout”\t\t 6. 刪除記錄”endl;
cout”\t\t 7. 記錄保存文件”endl;
cout”\t\t 8. Quit”endl;
cout”\t\t***********************************************”endl;
do{
cout”\n 輸入你的選擇(0~8):”;
cins;
a=s;
}
while (a0||a8);
return a;
}
adduser()
{
cout”\n\t\t**************** 請輸入用戶信息 ****************”endl;
cout”\n\t\t輸入姓名:”;
cinstudent[num].name;
cout”\n\t\t輸入電話號碼:”;
cinstudent[num].phone;
cout”\n\t\t輸入地址:”;
cinstudent[num].adress;
cout”\n\t\t輸入郵編:”;
cinstudent[num].postcode;
cout”\n\t\t輸入e-mail:”;
cinstudent[num].e_mail;
num++;
cout”\n\t\t是否繼續添加?(Y/N):”;
char z;
cinz;
if((z==’y’)||(z==’Y’))
adduser();
return(0);
}
list()
{
int i;
system(“cls”);
if(num!=0)
{
cout”\n\t\t*************** 以下為通訊錄所有信息************”;
for(i=0;inum;i++)
{
cout”\n\t\t姓名:”student[i].name;
cout”\n\t\t電話: “student[i].phone;
cout”\n\t\t地址: “student[i].adress;
cout”\n\t\t郵編: “student[i].postcode;
cout”\n\t\te-mail:”student[i].e_mail;
cout”\t\t”;
if(i+1num)
{
cout”\n\t\t__________________________”;
system(“pause”);
}
}
cout”\n\t\t************************************************”;
}
else
cout”\n\t\t通訊錄中無任何紀錄”;
cout”\n\t\t按任意鍵返回主菜單:”;
getch();
return(0);
}
search()
{
int mark=0;
int i;
int a=0;
cout”\n\t\t***************** 按姓名查找 *******************”;
char name[20];
cout”\n\t\t請輸入姓名:”;
cinname;
for(i=a;inum;i++)
{
if(strcmp(student[i].name,name)==0)
{
cout”\n\t\t************* 以下是您查找的用戶信息 ***********”;
cout”\n\t\t姓名: “student[i].name;
cout”\n\t\t電話: “student[i].phone;
cout”\n\t\t地址: “student[i].adress;
cout”\n\t\te-mail:”student[i].e_mail;
cout”\n\t\t************************************************”;
mark++;
if((i+1)num)
{
cout”\n\t\t是否繼續查找相同名字的用戶信息:(y/n)”;
char y;ciny;
if((y==’y’)||(y==’Y’))
{
a=i;
continue;
}
else
return(0);
}
else
{
cout”\n\t\t按任意鍵返回主菜單”;
getch();
return(0);
}
}
}
if(mark==0)
{
cout”\n\t\t沒有相同姓名的用戶紀錄”;
cout”\n\t\t按任意鍵返回主菜單”;
getch();
return(0);
}
}
display()
{
int mark=0;
int i;
int a=0;
cout”\n\t\t****************** 按電話查找 ******************”;
char phone[10];
cout”\n\t\t請輸入電話號碼:”;
cinphone;
for(i=0;inum;i++)
{
if(strcmp(student[i].phone,phone)==0)
{
cout”\n\t\t************** 以下是您查找的用戶信息 **********”;
cout”\n\t\t姓名: “student[i].name;
cout”\n\t\t電話: “student[i].phone;
cout”\n\t\t地址: “student[i].adress;
cout”\n\t\te-mail:”student[i].e_mail;
cout”\n\t\t************************************************”;
cout”\n\t\t按任意鍵返回主菜單:”;
mark++;
getch();
return(0);
}
}
if(mark==0)
{
cout”\n\t\t沒有改用戶的信息”;
cout”\n\t\t按任意鍵返回主菜單”;
getch();
return(0);
}
return(0);
}
add()
{
int i;
if((fp=fopen(“student.bin”,”wb”))==NULL)
{
cout”\n\t\t文件打開失敗”;
}
for (i=0;inum;i++)
{
if (fwrite(student[i],sizeof(struct record),1,fp)!=1)
{
cout”\n\t\t寫入文件錯誤!\n”;
}
cout”\n\t\t**************** 請輸入用戶信息 ****************”endl;
cout”\n\t\t輸入姓名:”;
cinstudent[num].name;
cout”\n\t\t輸入電話號碼:”;
cinstudent[num].phone;
cout”\n\t\t輸入地址:”;
cinstudent[num].adress;
cout”\n\t\t輸入郵編:”;
cinstudent[num].postcode;
cout”\n\t\t輸入e-mail:”;
cinstudent[num].e_mail;
num++;
cout”\n\t\t是否繼續添加?(Y/N):”;
if(getch()==’y’)
adduser();
return(0);
}
fclose(fp);
cout”\n\t\t通訊錄文件已保存”;
cout”\n\t\t按任意鍵退出程序\n\t\t”;
exit(0);
return(0);
}
void deletebyphone()
{
int i,j;
int deletemark=0;
char phone[20];
cout”\n\t\t請輸入要刪除用戶電話號碼:”;
cinphone;
if(num==0)
{
cout”\n\t\t對不起,文件中無任何紀錄”;
cout”\n\t\t按任意鍵返回主菜單”;
getch();
return;
}
for (i=0;inum;i++)
{
if(strcmp(student[i].phone,phone)==NULL)
{
cout”\n\t\t以下是您要刪除的用戶紀錄:”;
cout”\n\t\t姓名: “student[i].name;
cout”\n\t\t電話: “student[i].phone;
cout”\n\t\t地址: “student[i].adress;
cout”\n\t\te-mail:”student[i].e_mail;
cout”\n\t\t是否刪除?(y/n)”;
char u;cinu;
if((u==’y’)||(u==’Y’))
{
for(j=i;jnum-1;j++)
student[j]=student[j+1];
num–;
deletemark++;
cout”\n\t\t刪除成功”;
cout”\n\t\t是否繼續刪除?(y/n)”;
char v;cinv;
if((v==’y’)||(v==’Y’))
deletebyphone();
return;
}
else
return;
}
continue;
}
if(deletemark==0)
{
cout”\n\t\t沒有該用戶的紀錄”;
cout”\n\t\t是否繼續刪除?(y/n)”;
char m;cinm;
if((m==’y’)||(m==’Y’))
deletebyphone();
return;
}
}
void deletebyname()
{
int a=0;
int findmark=0;
int j;
int deletemark=0;
int i;
char name[20];
cout”\n\t\t請輸入要刪除用戶姓名:”;
cinname;
for(i=a;inum;i++)
{
if(strcmp(student[i].name,name)==NULL)
{
cout”\n\t\t以下是您要刪除的用戶紀錄:”;
findmark++;
cout”\n\t\t________________________________”;
cout”\n\t\t姓名: “student[i].name;
cout”\n\t\t電話: “student[i].phone;
cout”\n\t\t地址: “student[i].adress;
cout”\n\t\te-mail:”student[i].e_mail;
cout”\n\t\t________________________________”;
cout”\n\t\t是否刪除?(y/n)”;
char n;cinn;
if((n==’y’)||(n==’Y’))
{
for(j=i;jnum-1;j++)
student[j]=student[j+1];
num–;
deletemark++;
cout”\n\t\t刪除成功”;
if((i+1)num)
{
cout”\n\t\t是否繼續刪除相同姓名的用戶信息?(y/n)”;
char l;cinl;
if((l==’y’)||(l==’Y’))
{
a=i;
continue;
}
}
cout”\n\t\t是否繼續刪除?(y/n)”;
char o;cino;
if((o==’y’)||(o==’Y’))
deletebyname();
return;
}
if((i+1)num)
{
cout”\n\t\t是否繼續刪除相同姓名的用戶信息?(y/n)”;
char p;cinp;
if((p==’y’)||(p==’Y’))
{
a=i;
continue;
}
}
}
else
continue;
}
if((deletemark==0)(findmark==0))
{
cout”\n\t\t沒有該用戶的紀錄”;
cout”\n\t\t是否繼續刪除?(y/n)”;
char q;cinq;
if((q==’y’)||(q==’Y’))
deletebyphone();
return;
return;
}
else if(findmark!=0)
{
cout”\n\t\t沒有重名信息”;
cout”\n\t\t沒有該用戶的紀錄”;
cout”\n\t\t是否繼續刪除?(y/n)”;
char r;cinr;
if((r==’y’)||(r==’Y’))
deletebyphone();
return;
return;
}
}
dele()
{
int choic;
cout”\n\t\t1-按電話號碼刪除 2-按姓名刪除”;
cout”\n\t\t請選擇:”;
cinchoic;
switch (choic)
{
case 1:
deletebyphone();
break;
case 2:
deletebyname();
break;
}
return(0);
}
listbyname()
{
int i,j;
struct record tmp;
for(i=1;inum;i++)
{
if(strcmp(student[i].name,student[i-1].name)0)
{
tmp=student[i];
j=i-1;
do
{
student[j+1]=student[j];
j–;
}while ((strcmp(tmp.name,student[j].name)0j=0));
student[j+1]=tmp;
}
}
cout”\n\t\t排序成功,是否顯示?(y/n)”;
char x;cinx;
if((x==’y’)||(x==’Y’))
list();
return(0);
}
save()
{
int j;
FILE*fp;
fp=fopen(“student.txt”,”w”);
if (fp==NULL)
cout”不能打開文件.”;
if(num!=0)
{
for(j=0;jnum;j++)
{
fwrite(student,sizeof(student),1,fp);
}
}
cout”保存成功!”;
fclose(fp);
return(0);
}
數據結構通訊錄管理與鏈表(C語言)求指導.,本人菜鳥中的菜鳥
完全基於用戶需求分析,系統設計分為六個子模塊:添加信息和查詢信息,刪除信息,信息,顯示所有信息,退出並保存信息。六個模塊之間緊密結合起來,共享信息資源,形成一個完美的聯繫人管理解決方案。該框架的整體設計如下:
?
開始
?
該文件將被自動添加
?
載入保存的文件的內容,創建新的鏈接列表
?
進入while循環
?
輸出菜單
?
輸入選擇開關語句被稱為
?
輸入是否是0
?
保存並退出
?
確定的關鍵
調用相關函數,
?
結束
?
是
?
沒有
C語言數據結構:鏈表的應用–通訊錄管理
/* HELLO.C — Hello, world */
#includestdio.h
struct person
{
char name[8];
char tel[15];
char addr[50];
};
char filename[20]=”E:\\txl.txt”;
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delete();
main( )
{
int m;
creat();
while(1)
{
printf(“\n\t\t*********歡迎使用通訊錄信息管理系統*********\n\n”);
printf(“\n\t\t添加,請按1”);
printf(“\n\t\t查找,請按2”);
printf(“\n\t\t修改,請按3”);
printf(“\n\t\t刪除,請按4”);
printf(“\n\t\t輸出,請按5”);
printf(“\n\t\t退出,請按0\n”);
printf(“\n\t\t********************************************\n\n”);
printf(“Please select(0–5):”);
scanf(“%d”,m);
if(m=0m=5)
{
switch(m)
{
case 1: append();
break;
case 2: search();
break;
case 3: modify();
break;
case 4: delete();
break;
case 5: output();
break;
case 0: exit();
}
printf(“\n\n操作完畢,請再次選擇!”);
}
else
printf(“\n\n選擇錯誤,請再次選擇!”);
}
}
/*輸入模塊creat( ): 創建通訊錄的子函數。*/
void creat()
{
struct person one;
long s1;
/*printf(“\n請輸入通訊錄文件名:”);
scanf(“%s”,filename); */
if((fp=fopen(filename,”at+”))==NULL)
{
printf(“\n不能建立通訊錄!”);
exit();
}
fprintf(fp,”%-10s%-20s%-50s\n”,”姓名”,”電話號碼”,”住址”);
printf(“\n請輸入姓名、電話號碼及住址(以0結束)\n”);
scanf(“%s”,one.name);
while(strcmp(one.name,”0″))
{
scanf(“%s%s”,one.tel,one.addr);
fprintf(fp,”%-10s%-20s%-50s\n”,one.name,one.tel,one.addr);
scanf(“%s”,one.name);
}
fclose(fp);
}
/*輸出模塊output( ):輸出通訊錄中聯繫人通訊信息的子函數*/
void output()
{
struct person one;
if((fp=fopen(filename,”r”))==NULL)
{
printf(“\n不能打開通訊錄!”);
exit();
}
printf(“\n\n%20s\n”,”通 訊 錄”);
while(!feof(fp))
{
fscanf(fp,”%s%s%s\n”,one.name,one.tel,one.addr);
printf(“%-10s%-20s%-50s”,one.name,one.tel,one.addr);
}
fclose(fp);
}
/*添加模塊append( ):向通訊錄中添加某人通訊信息的子函數*/
void append()
{
struct person one;
if((fp=fopen(filename,”a”))==NULL)
{
printf(“\n不能打開通訊錄!”);
exit();
}
printf(“\n請輸入添加的姓名、電話號碼及住址\n”);
scanf(“%s%s%s”,one.name,one.tel,one.addr);
fprintf(fp,”%-10s%-20s%-50s\n”,one.name,one.tel,one.addr);
fclose(fp);
}
/*查找模塊search( ):在通訊錄中查找某人通訊信息的子函數*/
void search()
{
int k=0;
char namekey[8];
struct person one;
printf(“\n請輸入姓名:”);
scanf(“%s”,namekey);
if((fp=fopen(filename,”rb”))==NULL)
{
printf(“\n不能打開通訊錄!”);
exit();
}
while(!feof(fp))
{
fscanf(fp,”%s%s%s\n”,one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf(“\n\n已查到,記錄為:”);
printf(“\n%-10s%-18s%-50s”,one.name,one.tel,one.addr);
k=1;
}
}
if(!k)
printf(“\n\n對不起,通訊簿中沒有此人的記錄。”);
fclose(fp);
}
/*修改模塊modify( ):在通訊錄中修改某人通訊信息的子函數*/
void modify()
{
int m,k=0;
long offset;
char namekey[8];
struct person one;
printf(“\n請輸入姓名:”);
scanf(“%s”,namekey);
if((fp=fopen(filename,”r+”))==NULL)
{
printf(“\n不能打開通訊錄!”);
exit();
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,”%s%s%s\n”,one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf(“\n已查到,記錄為:”);
printf(“\n%-10s%-18s%-50s”,one.name,one.tel,one.addr);
printf(“\n請輸入新姓名、電話號碼及住址:”);
scanf(“%s%s%s”,one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf(“%ld”,ftell(fp));
fprintf(fp,”%-10s%-20s%-50s\n”,one.name,one.tel,one.addr);
}
else
printf(“\n對不起,通訊錄中沒有此人的記錄。”);
fclose(fp);
}
/*刪除模塊delete( ):在通訊錄中刪除某人通訊信息的子函數*/
void delete()
{
int m,k=0,flag;
long offset1,offset2;
char namekey[8], valid[4];
struct person one;
printf(“\n請輸入姓名:”);
scanf(“%s”,namekey);
if((fp=fopen(filename,”r+”))==NULL)
{
printf(“\n不能打開通訊錄!”);
exit();
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,”%s%s%s\n”,one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
if(k)
{
printf(“\n已查到,記錄為”);
printf(“\n%-10s%-18s%-50s”,one.name,one.tel,one.addr);
printf(“\n確實要刪除,按1;不刪除,按0:”);
scanf(“%d”,m);
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,”%-10s%-20s%-50s\n”,””,””,””);
}
else
printf(“\n對不起,通訊錄中沒有此人的記錄。”);
fclose(fp);
}
}
}
}
PIXTEL_MMI_EBOOK_20051###########################################################/PIXTEL_MMI_EBOOK_2005
原創文章,作者:FTLM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/139405.html