#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct PersonalInfo//定义一个结构体,名字是PersonalInfo,这样就可以使用struct PersonalInfo来定义变量。
{
char name[50];
char address[30];
char telno[30];
struct PersonalInfo *next;
}INFO;
INFO *head;
void Initiate();
void Menu();
void Create();//的功能是:创建新的通讯录。
void Add();// 在通讯录的末尾,写入新的信息,并返回选单
void Find();//查找记录
void Alter();//修改记录如果未找到要修改的人,则提示通讯录中没有此人的信息,并返回选单。
void Delete();//删除某人的信息,如果未找到要删的人,提示通讯录中没有此人的信息,并返回选单。
void List();//的功能是:显示通讯录中的所有记录。
//初始化
void Initiate()
{
if((head=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1);
head->next=NULL;//按照info这个变量划分出来的储存空间,由头指针head指向,如果这个指向info的指针为空,则退出,否则 head指向的下一个结点为空
}
//显示菜单
void Menu()
{
printf("**************欢迎使用通讯录系统**************");
printf("\n");
printf("\n");
printf(" 1.创建通讯录。\n");
printf(" 2.插入信息。\n");
printf(" 3.查询记录\n");
printf(" 4.修改记录\n");
printf(" 5.删除记录!\n");
printf(" 6.按联系人名称排序显示所有记录\n");
printf(" 7.保存通讯录!\n");
printf(" 0.退出通讯录\n");
printf(" 请输入0~7 \n");
}
//创建通讯录
void Create()
{
INFO *p1[100],*p2;
int m,i;
printf("请输入创建个数:");
scanf("%d",&m);
for(i=1;i<=m;i++)
{
p1[i]=(INFO *)malloc(sizeof(INFO));
printf("请输入第%d条信息!\n",i);
printf("姓名:\n");
scanf("%s",&p1[i]->name);
printf("地址:\n");
scanf("%s",&p1[i]->address);
printf("电话:\n");
scanf("%s",&p1[i]->telno);
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("信息已添加!\n");
return; //保存到链表
}
//显示所有记录
void List()
{
INFO *p;
if(head->next==NULL)
{
printf("此通讯录中无记录!\n");
return;
}
printf("姓名\t地址\t电话\n");
for(p=head->next;p!=NULL;p=p->next)
printf("%s\t%s\t%s\n",p->name,p->address,p->telno);
}
请问这个C语言通讯录怎么按名称排序显示
答案:4 悬赏:0 手机版
解决时间 2021-02-21 18:54
- 提问者网友:精神病院里
- 2021-02-20 18:57
最佳答案
- 五星知识达人网友:拾荒鲤
- 2021-02-20 19:05
用 strcmp(name一,name二) 作比较,name一 > name二 做交换。 当然 要把名字(字符串)全化成大写或全小写再比较。 假定都是小写: #include struct TXL { char name[二0]; char phone[二0]; char address[50]; // 你还可以添别的项,不一定是 char 型 }; #define N 四 // 例子里用 四 个人 int main() { struct TXL txl[N]={ "zhang","一二三四5","abcd", "wang","一二三四5","efg", "li","一二三四5","hijk", "zhao","一二三四5","xyz"}; // 声明结构数组,并初始化,当然你可以改用输入语句输入 struct TXL t; // t 用来 排队比较交换时,用作 工作单元 int i,j; for (i=0;i<N-一;i++) for (j=i;j 0){ // 比较 t=txl[i]; txl[i]=txl[j];txl[j]=t; // 交换 } } for (i=0;i<N;i++) printf("%s %s %s\n",txl[i].name,txl[i].phone,txl[i].address); //输出结果
全部回答
- 1楼网友:鱼忧
- 2021-02-20 21:26
鄙人求代码这个查询代码!
- 2楼网友:枭雄戏美人
- 2021-02-20 20:36
使用任意一种排序算法(如冒泡排序、快速排序、归并排序等)排序,排序元素为结构体,排序依据为姓名,比较两个字符串的大小可以用strcmp(str1,str2)函数,若str1>str2返回正数,若str1=str2返回0,若str1<str2返回负数。
- 3楼网友:鸽屿
- 2021-02-20 19:52
你个没出息的东西,你父母花了那么多钱供你上学,你看看你,都学了点什么!还来网上找人做作业!
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯