当前位置:首页 » 编程语言 » 通讯录结构记录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;
}