當前位置:首頁 » 編程語言 » 通訊錄結構記錄C語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

通訊錄結構記錄C語言

發布時間: 2022-08-20 02:58:21

『壹』 用c語言設計一個通訊錄系統

/*
* main_tongxunlu.c
*
* Created on: 2011-6-21
* Author: zhanglujin
*/

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
struct record
{
char name[20]; //姓名
char phone[12]; //電話
char adress[50]; //地址
char postcode[8]; //郵政編碼
char e_mail[20]; //電子郵件。
}student[100]; //假設最大數為100.
//定義全局變數num,表示已經輸入的人數 。
int num; //這里使用數組解決通訊錄的問題,實際上使用鏈表更好。
int menu_select()
{
char s[80];
int a;/*定義整形變數*/
system("cls");
printf("\t\t***********歡迎進入通訊管理界面********\n\n");
printf("\t\t\t0. 輸入記錄\n");
printf("\t\t\t1. 顯示記錄\n");
printf("\t\t\t2. 按姓名查找\n");
printf("\t\t\t3. 按電話號碼查找\n");
printf("\t\t\t4. 插入記錄 \n");
printf("\t\t\t5. 按姓名排序\n");
printf("\t\t\t6. 刪除記錄\n");
printf("\t\t\t7. Quit\n");
printf("\t\t***********************************************\n\n");
do{
printf("Enter you choice(0~7):");
scanf("%s",s);
a=atoi(s);
}
while (a<0 || a>7);
return a;
}
int adser()
{
printf("\t\t\t**************** 請輸入用戶信息 ****************\n");
printf("\t\t\t輸入姓名:\n");
scanf("%s",student[num].name);
printf("\t\t\t輸入電話號碼:\n");
scanf("%s",student[num].phone);
printf("\t\t\t輸入地址:\n");
scanf("%s",student[num].adress);
printf("\t\t\t輸入郵編:\n");
scanf("%s",student[num].postcode);
printf("\t\t\t輸入e-mail:\n");
scanf("%s",student[num].e_mail);
num++;
printf("\t\t\t是否繼續添加?(Y/N):\n");
if(getch()=='y' || getch()=='Y')
adser();
return(0);
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t*************** 以下為通訊錄所有信息************\n");
for (i=0;i<num;i++)
{
printf("\t\t\t姓名:%s\n",student[i].name);
printf("\t\t\t電話:%s\n",student[i].phone);
printf("\t\t\t地址:%s\n",student[i].adress);
printf("\t\t\t郵編:%s\n",student[i].postcode);
printf("\t\t\te-mail:%s\n",student[i].e_mail);
if(i+1<num)
{
system("pause");
}
}
printf("\t\t\t************************************************\n");
}
else
printf("\t\t\t通訊錄中無任何紀錄\n");
printf("\t\t\t按任意鍵返回主菜單:\n");
getch(); //這里是無回顯的輸入字元,你輸入的字元不會顯示在屏幕上。
return;
}
int searchbyname()
{
int mark=0;
int i;
printf("\t\t\t***************** 按姓名查找 *******************\n");
char name[20];
printf("\t\t\t請輸入姓名:\n");
scanf("%s",name);
for(i=0;i<num;i++)
{
if (strcmp(student[i].name,name)==0)
{
printf("\t\t\t************* 以下是您查找的用戶信息 ***********\n");
printf("\t\t\t姓名: %s",student[i].name);
printf("\t\t\t電話: %s",student[i].phone);
printf("\t\t\t地址: %s",student[i].adress);
printf("\t\t\te-mail:%s",student[i].e_mail);
printf("\t\t\t************************************************\n");
mark++;
if((i+1)<num)
{
printf("\t\t\t是否繼續查找相同名字的用戶信息:(y/n)\n");
if(getch()=='y' || getch()=='Y')
{

『貳』 如何用C語言做通訊錄

剽竊代碼即可。。


已經按照你的要求做了一個,VC6上運行確認了:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructPersonalInfo
{
charname[50];
charaddress[30];
chartelno[30];
charpostcode[30];
structPersonalInfo*next;
}INFO;
INFO*head;
voidInitiate();
voidMenu();
voidCreate();//的功能是:創建新的通訊錄。
voidAdd();//在通訊錄的末尾,寫入新的信息,並返回選單
voidFind();//查找記錄
voidAlter();//修改記錄如果未找到要修改的人,則提示通訊錄中沒有此人的信息,並返回選單。
voidDelete();//刪除某人的信息,如果未找到要刪的人,提示通訊錄中沒有此人的信息,並返回選單。
voidList();//的功能是:顯示通訊錄中的所有記錄。
//初始化
voidInitiate()
{
if((head=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
head->next=NULL;
}
//顯示菜單
voidMenu()
{
printf("**************歡迎使用通訊錄系統**************");
printf(" ");
printf(" ");
printf("1.創建通訊錄。 ");
printf("2.插入信息。 ");
printf("3.查詢記錄 ");
printf("4.修改記錄 ");
printf("5.刪除記錄! ");
printf("6.顯示所有記錄 ");
printf("0.退出通訊錄 ");
printf("請輸入0~6 ");
}
//創建通訊錄
voidCreate()
{
INFO*p1[100],*p2;
intm,i;
printf("請輸入創建個數:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO*)malloc(sizeof(INFO));
printf("請輸入第%d條信息! ",i);
printf("姓名: ");
scanf("%s",&p1[i]->name);
printf("地址: ");
scanf("%s",&p1[i]->address);
printf("電話: ");
scanf("%s",&p1[i]->telno);
printf("郵編: ");
scanf("%s",&p1[i]->postcode);
p1[i]->next=NULL;
if(head->next==NULL)
head->next=p1[i];
else
{
for(p2=head;p2->next!=NULL;p2=p2->next);//找到結點尾
p2->next=p1[i];
}
}
printf("信息已添加! ");
return;//保存到鏈表
}
//添加通訊錄信息
voidAdd()
{
INFO*p,*q;
if((q=(INFO*)malloc(sizeof(INFO)))==NULL)exit(1);
printf("請輸入要添加的信息! ");
printf("姓名: ");//添加信息
scanf("%s",&q->name);
printf("性別: ");
scanf("%s",q->address);
printf("電話: ");
scanf("%s",q->telno);
printf("城市: ");
scanf("%s",q->postcode);
for(p=head;p->next!=NULL;p=p->next);
p->next=q;
q->next=NULL;
printf("此信息已添加!");
return;
}
//查找通訊錄信息
voidFind()
{
INFO*p;
charname[50];
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要查找的姓名: ");
scanf("%s",&name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
{
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
elseif(p->next==NULL)
printf("無此信息! ");
}
}
//修改通訊錄信息
voidAlter()
{
charname[50];//先查找後刪除
INFO*p,*p1;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要修改的姓名: ");
scanf("%s",name);
for(p=head->next;p!=NULL;p=p->next)
{
if(strcmp(p->name,name)==0)
break;
elseif(p->next==NULL)
{
printf("無此信息! ");
return;
}
}
p1=(INFO*)malloc(sizeof(INFO));
printf("姓名: ");//添加信息
scanf("%s",p1->name);
strcpy(p->name,p1->name);
printf("性別: ");
scanf("%s",p1->address);
strcpy(p->address,p1->address);
printf("電話: ");
scanf("%s",p1->telno);
strcpy(p->telno,p1->telno);
printf("城市: ");
scanf("%s",p1->postcode);
strcpy(p->postcode,p1->postcode);
printf("此信息已修改! ");
//顯示修改的信息
printf("姓名 地址 郵編 電話 ");
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
free(p1);
}
//刪除通訊錄信息
voidDelete()
{
charname[50];//先查找後刪除
INFO*p=head->next,*p1=head->next,*p2;
if(head->next==NULL)
{
printf("此通訊錄為空! ");
return;
}
printf("請輸入要刪除的姓名: ");
scanf("%s",name);
while((strcmp(p->name,name)!=0)&&p->next!=NULL)
{
p1=p;
p=p->next;
}
if(strcmp(name,p->name)==0)//輸出刪除信息
{
if(p==head->next&&p->next!=NULL)
head->next=p->next;
elseif(p==head->next&&p->next==NULL)
{
head->next=p->next;
printf("信息已刪除,先此通訊錄為空!! ");
return;
}
else
p1->next=p->next;
}
else
{
printf("此信息不存在!!! ");
return;
}
printf("此信息已刪除!");
printf("姓名 地址 郵編 電話 ");
for(p2=head->next;p2!=NULL;p2=p2->next)
printf("%s %s %s %s ",p2->name,p2->address,p2->postcode,p2->telno);
}
//顯示所有記錄
voidList()
{
INFO*p;
if(head->next==NULL)
{
printf("此通訊錄中無記錄! ");
return;
}
printf("姓名 地址 郵編 電話 ");
for(p=head->next;p!=NULL;p=p->next)
printf("%s %s %s %s ",p->name,p->address,p->postcode,p->telno);
}
voidmain()
{
intchoice;
charyes_no;

system("colora");
Initiate();
do
{
Menu();
printf("請選擇0-6的數字 ");
scanf("%d",&choice);
printf(" ");
switch(choice)
{
case1:Create();
break;
case2:Add();
break;
case3:Find();
break;
case4:Alter();
break;
case5:Delete();
break;
case6:List();
break;
case0:
printf("************感謝您的使用************ ");
exit(0);
break;
default:
printf("輸入有誤!請重新輸入 ");
break;
}
printf("是否繼續YorN? ");
do
{
scanf("%c",&yes_no);
}while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');
}while(yes_no=='Y'||yes_no=='y');
}

『叄』 c語言編寫通信錄

/*編程建立一通訊簿,存放有姓名、電話號碼、住址,然後對通信簿進行查找、添加、修改及刪除。*/
#include<stdio.h>
struct person
{
char name[8];
char tel[15];
char addr[50];
};
char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delete();
main()
{
int m;

creat();
while(1)
{
printf("\n\n添加,請按1");
printf("\n查找,請按2");
printf("\n修改,請按3");
printf("\n刪除,請按4");
printf("\n輸出,請按5");
printf("\n退出,請按0\n");
scanf("%d",&m);
if(m>=0&&m<=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選擇錯誤,請再次選擇!");
}
}
void creat()
{
struct person one;
long s1;
printf("\n請輸入通訊簿名:");
scanf("%s",filename);
if((fp=fopen(filename,"w"))==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);
}
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);
}
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);
}
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);
}
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);
}
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);
}

『肆』 c語言結構體通訊錄顯示記錄不行

問題很多,你先理清概念0 0。
Person是結構體的類型,PointerPerson是結構體的指針,即地址。
per是這個類型的變數,相當於int i,per就是i一樣的普通變數,他裡麵包含了5個結構體成員。
又因為你用了數組,所以不要用「->」,那是指針的成員,用「.」。
同時定義了char類型就要用%s輸入輸出,字元串包括數字的,用d輸出字元串就可能亂碼。
菜單那裡是return c返回一個字元,你幹嘛加一個橫崗........
還有數不清的錯誤.....強烈建議你發源碼,,不然只有你自己來處理......另外,這個星期我也做了一個通訊錄,可以給你看看= =!不過是用單鏈表做的,內容較長但有條理和注釋!

『伍』 c語言通訊錄

關於這道題的基本思路,我可以告訴你:
通訊錄一般由如下幾個信息組成:姓名、性別、通訊地址、電話號碼、郵編等組成。
如果想編寫一個20個人的通訊錄程序,那麼就可以定義一個大小為 20 的結構數組。C 語言詳細代碼如下:
#include <stdio.h>
#define ADDRESS_LEN 100 /* 通訊地址長度宏定義,可以根據需要進行修改 */
#define PHONENUM_LEN 20 /* 電話號碼長度宏定義,可以自行修改 */
#define NUMBER 20 /* 20 個人的通訊錄,可以自行修改 */
struct address /* 定義一個通訊錄的結構數組 */

{
char name[20] ; /* 姓名 */

char sex[5] ; /* 性別 */

char address[ADDRESS_LEN] ; /* 通訊地址 */

char telepone_num[PHONENUM_LEN] ; /* 電話號碼 */

char zip[10 ] ; /* 郵政編碼 */

} ;
void main( )
{
int i = 0 ;

struct address my_address[NUMBER] ;

for( i = 0 ; i < NUMBER ; i ++ )
{

gets(my_address[i].name) ;

gets(my_address[i].sex) ;

gets(my_address[i].address);

gets(my_address[i].telephone_num);

gets(my_address[i].zip);

}

for( i = 0 ; i < NUMBER ; i ++ )
printf("%s\t%s\t%s\t%s\t%s\n", my_address[i].name,my_address[i].sex,my_address[i].address,my_address[i].telephone_num,my_address[i].zip);

}
你可以將該程序輸入到電腦中,上機編譯、鏈接、並運行試一試。

『陸』 編寫C語言一個通訊錄程序

這是我以前寫的課程設計,
電子通訊錄功能如下:
Function choose
1.Read
2.Append
3.Delete
4.Search
5.Save and exit
6.Quit
說明:上圖是電子通訊錄的主菜單,利用它,將能夠輕松地錄入一個朋友的電話號
碼,通訊地址和出生日期,而且它還提供了檢索和刪除功能。在後面還將提供按生
日先後排序的功能,這些都有助於該通訊錄的管理。
電子通訊錄是採用線性表作為程序的基本結構的。
設計思想:
1。用順序表設計電子通訊錄的結構
為了表示較為復雜的數據內容,一般用結構這種數據類型,第一步就是在結構中定
義所需要的各項信息。
一般的通訊錄都包括姓名,性別,出生年月,通訊地址和聯系電話這幾項,而
在這幾項中,出生年月又包括年份,月份和日期三項,通訊地址包括郵編和家庭地
址二項,我們把這些聯系較為緊密的內容又用單獨的結構表示,這樣就產生了電子
通訊錄的基本結構:
struct addr /*通訊地址結構定義*/
{ char post_num[10]; /*郵編*/
char addr[40]; /*家庭地址*/
};
struct birth /*出生年月結構定義*/
{ int year; /*年份*/
int month; /*月份*/
int day; /*日期*/
};
struct friend /*電子通訊錄結構定義*/
{ int number; /*序號*/
char name[20] /*姓名*/
char sex; /*性別*/
struct birth birth; /*出生年月*/
struct addr addr; /*通信地址*/
char telephone[13]; /*聯系電話*/
};

定義的主結構friend包含了前述的五項內容 name,sex,和telephone分別代表
了姓名,性別和聯系電話。為了讓結構中的各項組分更加清晰,定義了二個
小結構birth 和addr分別代表出生年月和通訊地址,因此實際上friend包含了
8項內容。
有了結構定義後,我們可以很輕松地構造出電子通訊錄的主體:
stryct friend friends[50];
採用一維數組 friends[50],正是用到了順序表這種最簡單的數據結構來表示
問題。
2.增添電子通訊錄中的內容
對於電子通訊錄這樣一張順序表來說,內容的錄入是必不可少的操作。由
於採用的是順序存儲結構。這項工作很簡單,只需要在把輸入的信息按順序放
在空的friends數組元素中即可。函數Data_Input完成了信息的錄入工作:

void Data_input(int j)
{
friends[j].number=j;
printf("\n\n\n\tNo %d record",j);
printf("\n\n\tName:"); /*讀入姓名*/
scanf("%s",friends[j].name);
printf("\n\tSex(m/f):"); /*讀入姓別*/
scanf("%c",&friends[j].sex);
printf("\n\tbirthday:"); /*讀入出生年月*/
printf("\n\t\tyear:");
scanf("%d",&friends[j].birth.year);
printf("\n\t\tmonth");
scanf("%d",&friends[j].birth.month);
printf("\n\t\tday");
scanf("%d",&friends[j].birth.day);

printf("\n\tPost number:"); /*讀入郵編*/
scanf("%s",friends[j].addr.post_num);
printf("\n\tAddress:"); /*讀入家庭地址*/
scanf("%s",friends[j].addr.addr);
printf("\n\ttelephone:"); /*讀入聯系電話*/
scanf("%s",friends[j].telephone);
}

『柒』 c語言手機通訊錄 重謝

#include<stdio.h> struct Class { char *cname; //名字 char *cphon; //電話號碼 char *cuphon; //單位電話 char *cmphon; //手機號碼 char *cqq; //qq號碼 char *cbday; //生日日期 struct Class *node; //其餘的自己可以加***** }; typedef struct Class Students; //通訊錄結構 typedef Students *Ps; Ps TcraseClsSt(Ps lina); // 催的操作Ps CraseClsSt(Ps lina,char *cname,char *cphon,char *cuphon,char *cmphon,char *cqq,char *cbday); //存過程void OutSmary(Ps lina); //輸出結果 void main() { Ps lina=NULL; lina=TcraseClsSt(lina); if(lina!=NULL) //如果lina為NULL是錯誤內存非配失敗 { OutSmary(lina); } else printf("Error"); getch(); } Ps TcraseClsSt(Ps lina) { int Cmd=0; char cname[100]; char cphon[100]; char cuphon[100]; char cmphon[100]; char cqq[100]; char cbday[100]; do { printf("Please enter a name:"); scanf("%s",cname); //提示並輸入數據 printf("Enter the phone number:"); scanf("%s",cphon); printf("Enter the unit telephone:"); scanf("%s",cuphon); printf("Enter phone number:"); scanf("%s",cmphon); printf("Enter the number qq:"); scanf("%s",cqq); printf("Enter your date of birth:"); scanf("%s",cbday); lina=CraseClsSt(lina,cname,cphon,cuphon,cmphon,cqq,cbday);//把數據存入鏈表 printf("Enter -1 to exit any exit:"); scanf("%d",&Cmd); } while(Cmd!=-1&&lina!=NULL); return lina; } Ps CraseClsSt(Ps lina,char *cname,char *cphon,char *cuphon,char *cmphon,char *cqq,char *cbday) //鏈表存入函數 { Ps merory; Ps linb; merory=(Ps)malloc(sizeof(Students)); if(!merory) { return NULL; //merory為NULL是返回零 NULL } merory->node=NULL; strcpy(merory->cname,cname); //用字元創拷貝函數 段錯午 在turbo c 編譯器可以通過 gcc可以用別的方法處理 strcpy(merory->cphon,cphon); strcpy(merory->cuphon,cuphon); strcpy(merory->cmphon,cmphon); strcpy(merory->cqq,cqq); strcpy(merory->cbday,cbday); if(lina==NULL) return merory; linb=lina; while(linb->node!=NULL) linb=linb->node; linb->node=merory; return lina; } void OutSmary(Ps lina) //鏈表輸出函數 { while(lina!=NULL) { printf("name:%s,Phone:%s,Unit Number:%s,Phone number:%s,qq No:%s,Date of Birth:%s\n", lina->cname,lina->cphon,lina->cuphon,lina->cmphon,lina->cqq,lina->cbday); lina=lina->node; } }

『捌』 用c語言建通訊錄(數據結構課程設計)

我懸賞200分,沒人回答呢!

『玖』 用c語言編寫通訊錄程序

這個屬於基本的結構體數組和文件讀寫操作。

『拾』 20. 通訊錄的製作 數據結構題目 用c或類c語言編寫 並寫出每句含義 謝啦!!!!

#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE_NAME 10#define SIZE_ID 20#define SIZE_PHONE 20int Record = 0;

typedef struct {
char name[SIZE_NAME];
char id[SIZE_ID];
char phone[SIZE_PHONE];
}pInfo;

typedef struct node{
pInfo people;
struct node *next;
}linkList;int menu();int create(linkList *head);int display(linkList *head);int search(linkList *head, char *info);int modify(linkList *head, char *pid);int add2(linkList *head, char *pid);int delt(linkList *head, char *info);int compare(char *str1, char *str2);int sort_id(linkList *head, int boolean);//1升序 0降序
int sort_name(linkList *head, int boolean);//1升序 0降序int main()
{
linkList head, *p;
char info[SIZE_ID]; int temp, chus, i;
head.next = NULL; while (1) {
switch (menu()) {
case 1:
create(&head); break;
case 2:
display(&head); break;
case 3: printf("請輸入需要查詢的學號或姓名: ");
scanf("%s", info);
p = &head;
p = p->next; for (i = 0; i < search(&head, info); i++) {
p = p->next;
} printf("搜索到: "); printf(" 聯系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 學號 姓名 電話 "); printf("-------------------------------------------------------------------------------- "); printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
search(&head, info); break;
case 4: printf("請輸入需要修改的學號: ");
scanf("%s", info);
modify(&head, info); break;
case 5: printf("請輸入需要添加的學號: ");
scanf("%s", info);
add2(&head, info); break;
case 6: printf("請輸入需要刪除的學號或姓名: ");
scanf("%s", info);
delt(&head, info); break;
case 7: printf("請選擇排序方式: 1.按學號排序 2.按姓名排序 ");
scanf("%d", &chus);
switch (chus) {
case 1: printf("請輸入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_id(&head, temp); break;
case 2: printf("請輸入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_name(&head, temp); break;
} break;
case 8: exit(0); break;
default: printf("輸錯了,再來一次 ");
} system("pause"); system("cls");
} system("pause"); return 0;
}int menu()
{ int chus; printf(" 通訊錄 "); printf("請輸入(1 -- 8): "); printf(" 1.創建通訊錄 "); printf(" 2.顯示通訊錄 "); printf(" 3.查詢通訊錄 "); printf(" 4.修改通訊錄 "); printf(" 5.添加通訊錄 "); printf(" 6.刪除通訊錄 "); printf(" 7.排序通訊錄 "); printf(" 8.退出 ");
scanf("%d", &chus); return chus;
}int create(linkList *head)
{
linkList *s, *p;
p = head; printf("請輸入學號 姓名 電話,輸入end結束 "); while (1) { s = (linkList*)malloc(sizeof(linkList));
scanf("%s", s->people.id); if (!strcmp(s->people.id,"end")){ return 0;
}
scanf("%s", s->people.name);
scanf("%s", s->people.phone); s->next = p->next;
p->next = s;
p = s;
Record++;
} return 0;
}int display(linkList *head)
{ int i;
linkList *p;
p = head;
p = p->next; printf(" 聯系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 學號 姓名 電話 "); printf("-------------------------------------------------------------------------------- "); for (i = 0; i < Record; i++, p = p->next) { printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
} return 0;
}int search(linkList *head, char *info)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < Record; i++, p = p->next) { if ((!strcmp(p->people.id, info)) || (!strcmp(info,p->people.name))){ return i;
}
} return -1;
}int modify(linkList *head, char *pid)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < search(head, pid); i++) {
p = p->next;
} printf("請輸入新信息: ");
scanf("%s", p->people.id);
scanf("%s", p->people.name);
scanf("%s", p->people.phone); return 0;
}int add2(linkList *head, char *pid)
{ int i;
linkList *p, *s;
p = head;
p = p->next; s = (linkList*)malloc(sizeof(linkList)); while( p->next!= NULL){
p = p->next;
} printf("請輸入需要添加的姓名和電話: ");
strcpy(s->people.id, pid);
scanf("%s", s->people.name);
scanf("%s", s->people.phone); if (search(head, s->people.id) == -1) { s->next = p->next;
p->next = s;
Record++;
} else { printf("學號重復了 ");
} return 0;
}int delt(linkList *head, char *info)
{ int i, n;
linkList *p, *s;
p = head;
n = search(head, info); if (-1 == n) { printf("沒有找到 "); return 0;
} for (i = 0; i < n; i++) {
p = p->next;
}
p->next = p->next->next;
Record--; return 0;
}int compare(char *str1, char *str2)
{ int i; for (i = 0; i < strlen(str1); i++) { if (str1[i] < str2[i]) { return 1;
}
} return 0;
}int sort_id(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}int sort_name(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}#include<stdio.h>#include<stdlib.h>#include<string.h>#define SIZE_NAME 10#define SIZE_ID 20#define SIZE_PHONE 20int Record = 0;

typedef struct {
char name[SIZE_NAME];
char id[SIZE_ID];
char phone[SIZE_PHONE];
}pInfo;

typedef struct node{
pInfo people;
struct node *next;
}linkList;int menu();int create(linkList *head);int display(linkList *head);int search(linkList *head, char *info);int modify(linkList *head, char *pid);int add2(linkList *head, char *pid);int delt(linkList *head, char *info);int compare(char *str1, char *str2);int sort_id(linkList *head, int boolean);//1升序 0降序
int sort_name(linkList *head, int boolean);//1升序 0降序int main()
{
linkList head, *p;
char info[SIZE_ID]; int temp, chus, i;
head.next = NULL; while (1) {
switch (menu()) {
case 1:
create(&head); break;
case 2:
display(&head); break;
case 3: printf("請輸入需要查詢的學號或姓名: ");
scanf("%s", info);
p = &head;
p = p->next; for (i = 0; i < search(&head, info); i++) {
p = p->next;
} printf("搜索到: "); printf(" 聯系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 學號 姓名 電話 "); printf("-------------------------------------------------------------------------------- "); printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
search(&head, info); break;
case 4: printf("請輸入需要修改的學號: ");
scanf("%s", info);
modify(&head, info); break;
case 5: printf("請輸入需要添加的學號: ");
scanf("%s", info);
add2(&head, info); break;
case 6: printf("請輸入需要刪除的學號或姓名: ");
scanf("%s", info);
delt(&head, info); break;
case 7: printf("請選擇排序方式: 1.按學號排序 2.按姓名排序 ");
scanf("%d", &chus);
switch (chus) {
case 1: printf("請輸入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_id(&head, temp); break;
case 2: printf("請輸入1或0: 1:升序 0:降序 ");
scanf("%d", &temp);
sort_name(&head, temp); break;
} break;
case 8: exit(0); break;
default: printf("輸錯了,再來一次 ");
} system("pause"); system("cls");
} system("pause"); return 0;
}int menu()
{ int chus; printf(" 通訊錄 "); printf("請輸入(1 -- 8): "); printf(" 1.創建通訊錄 "); printf(" 2.顯示通訊錄 "); printf(" 3.查詢通訊錄 "); printf(" 4.修改通訊錄 "); printf(" 5.添加通訊錄 "); printf(" 6.刪除通訊錄 "); printf(" 7.排序通訊錄 "); printf(" 8.退出 ");
scanf("%d", &chus); return chus;
}int create(linkList *head)
{
linkList *s, *p;
p = head; printf("請輸入學號 姓名 電話,輸入end結束 "); while (1) { s = (linkList*)malloc(sizeof(linkList));
scanf("%s", s->people.id); if (!strcmp(s->people.id,"end")){ return 0;
}
scanf("%s", s->people.name);
scanf("%s", s->people.phone); s->next = p->next;
p->next = s;
p = s;
Record++;
} return 0;
}int display(linkList *head)
{ int i;
linkList *p;
p = head;
p = p->next; printf(" 聯系人 "); printf("-------------------------------------------------------------------------------- "); printf(" 學號 姓名 電話 "); printf("-------------------------------------------------------------------------------- "); for (i = 0; i < Record; i++, p = p->next) { printf("%20s ", p->people.id); printf("%10s ", p->people.name); printf("%20s ", p->people.phone);
} return 0;
}int search(linkList *head, char *info)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < Record; i++, p = p->next) { if ((!strcmp(p->people.id, info)) || (!strcmp(info,p->people.name))){ return i;
}
} return -1;
}int modify(linkList *head, char *pid)
{ int i;
linkList *p;
p = head;
p = p->next; for (i = 0; i < search(head, pid); i++) {
p = p->next;
} printf("請輸入新信息: ");
scanf("%s", p->people.id);
scanf("%s", p->people.name);
scanf("%s", p->people.phone); return 0;
}int add2(linkList *head, char *pid)
{ int i;
linkList *p, *s;
p = head;
p = p->next; s = (linkList*)malloc(sizeof(linkList)); while( p->next!= NULL){
p = p->next;
} printf("請輸入需要添加的姓名和電話: ");
strcpy(s->people.id, pid);
scanf("%s", s->people.name);
scanf("%s", s->people.phone); if (search(head, s->people.id) == -1) { s->next = p->next;
p->next = s;
Record++;
} else { printf("學號重復了 ");
} return 0;
}int delt(linkList *head, char *info)
{ int i, n;
linkList *p, *s;
p = head;
n = search(head, info); if (-1 == n) { printf("沒有找到 "); return 0;
} for (i = 0; i < n; i++) {
p = p->next;
}
p->next = p->next->next;
Record--; return 0;
}int compare(char *str1, char *str2)
{ int i; for (i = 0; i < strlen(str1); i++) { if (str1[i] < str2[i]) { return 1;
}
} return 0;
}int sort_id(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.id, pre->people.id)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}int sort_name(linkList *head, int boolean)
{
linkList *p, *pre;
pInfo temp; if (boolean) { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (0 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} else { for (p = head->next; p != NULL; p = p->next) { for (pre = p->next; pre != NULL; pre = pre->next) { if (1 == compare(p->people.name, pre->people.name)) {
temp = p->people;
p->people = pre->people;
pre->people = temp;
}
}
}
} return 0;
}