永发信息网

用C语言写一个通讯录

答案:2  悬赏:50  手机版
解决时间 2021-02-28 10:40
这是要求:1、通讯录管理,包括单通讯链表的建立、通讯者的插入、通讯者的删除、通讯者的查询以及通讯录表的输出等;2、数据必须按照链表的规定进行存储,具体的存储格式自行选定;3、程序要给出用户能够做出选择的界面,比如数据录入、数据查询、该界面还要给出可以查询全部数据的功能。
最佳答案


#include
#include
#include
#include
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 adduser()
{
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')
adduser();
return(0);
}
void list()
{
int i;
system("cls");
if(num!=0)
{
printf("\t\t\t*************** 以下为通讯录所有信息************\n");
for (i=0;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 {
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 {
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) {
printf("\t\t\t是否继续查找相同名字的用户信息:(y/n)\n");
if(getch()=='y' || getch()=='y')
{
全部回答
#include "stdio.h" #include "string.h" #include "stdlib.h" typedef struct { //通讯录结点类型 char num[5]; //编号 char name[9]; //姓名 char sex[3]; //性别 char phone[13]; //电话 char addr[31]; //地址 } DataType; typedef struct node { //结点类型定义 DataType data; //结点数据域 struct node *next; //结点指针域 } ListNode; typedef ListNode *LinkList; LinkList head; ListNode *p; //函数说明 int menu_select(); LinkList CreateList(void); void InsertNode(LinkList head,ListNode *p); ListNode *ListFind(LinkList head); void DelNode(LinkList head); void printList(LinkList head); //主函数 void main() { for( ; ; ){ switch(menu_select( ) ) { case 1: printf("**********************************\n"); printf("* 通 讯 录 链 表 的 建 立 *\n"); printf("**********************************\n"); head=CreateList( ); break; case 2: printf("**********************************\n"); printf("* 通 讯 者 信 息 的 添 加 *\n"); printf("**********************************\n"); printf("编号(4) 姓名(8) 性别(3) 电话(11) 地址(31)\n"); printf("************************************* \n"); p=(ListNode *)malloc(sizeof(ListNode)); //申请新结点 scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex, p->data.phone,p->data.addr); InsertNode(head,p); break; case 3: printf("***********************************\n"); printf("* 通 讯 录 信 息 的 查 询 *\n"); printf("***********************************\n"); p=ListFind(head); if (p!=NULL) { printf("编号 姓 名 性别 联系电话 地址 \n"); printf("--------------------------------------------------\n"); printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name, p->data.sex,p->data.phone,p->data.addr); printf("---------------------------------------------------\n"); } else printf("没有查到要查询的通讯者!\n"); break; case 4: printf("***********************************\n"); printf("* 通 讯 录 信 息 的 删 除 *\n"); printf("***********************************\n"); DelNode(head); //删除结点 break; case 5: printf("************************************\n"); printf("* 通 讯 录 链 表 的 输 出 *\n"); printf("************************************\n"); printList(head); break; case 0: printf("\t 再 见! \n"); return; } } } int menu_select( ) { int sn; printf(" 通讯录管理系统 \n"); printf("===================\n"); printf(" 1.通讯链表的建立\n"); printf(" 2.通讯者结点的插入\n"); printf(" 3.通讯者结点的查询\n"); printf(" 4.通讯者结点的删除\n"); printf(" 5.通讯录链表的输出\n"); printf(" 0.退出管理系统\n"); printf("==========================\n"); printf(" 请 选 择 0-5: "); for( ; ; ) { scanf("%d",&sn); if (sn<0||sn>5) printf("\n\t输入错误,重选0-5:"); else break; } return sn; } LinkList CreateList(void) {//尾插法建立带头结点的通讯录链表算法 LinkList head=(ListNode *)malloc(sizeof(ListNode)); //申请头结点 ListNode *p,*rear; int flag=0; //结束标志置0 rear=head; //尾指针初始指向头结点 while (flag==0) { p=(ListNode *)malloc(sizeof(ListNode)); //申新结点 printf("编号(4) 姓名(8) 性别 电话(11) 地址(31)\n"); printf("--------------------------------------------------------------------------------------\n"); scanf("%s%s%s%s%s",p->data.num,p->data.name,p->data.sex,p->data.phone, p->data.addr); rear->next=p; //新结点连接到尾结点之后 rear=p; //尾指针指向新结点 printf("结束建表吗?(1/0):"); scanf("%d",&flag); } rear->next=NULL; //终端结点指针置空 return head; //返回链表头指针 } void InsertNode(LinkList head,ListNode *p) { ListNode *p1,*p2; p1=head; p2=p1->next; while(p2!=NULL && strcmp(p2->data.num,p->data.num)<0) { p1=p2; //p1指向刚访问过的结点 p2=p2->next; //p2指向表的下一个结点 } p1->next=p; //插入p所指向的结点 p->next=p2; //连接表中剩余的结点 } ListNode *ListFind(LinkList head) {// 有序通讯录链表上的查找 ListNode *p; char num[5]; char name[9]; int xz; printf("==================\n"); printf(" 1. 按编号查询 \n"); printf(" 2. 按姓名查询 \n"); printf("==================\n"); printf(" 请 选 择: "); p=head->next; //假定通讯 录表带头结点 scanf("%d",&xz); if (xz==1) { printf("请输入要查找者的编号:"); scanf("%s",num); while (p&&strcmp(p->data.num,num)<0) p=p->next; if ((p==NULL)||strcmp(p->data.num,num))0; p=NULL; //没有查到要查找的通讯者 } else if (xz==2) { printf(" 请输入要查找者的姓名:"); scanf("%s",name); while(p&&strcmp(p->data.name,name)!=0) p=p->next; } return p; } void DelNode(LinkList head) { char jx; ListNode *p,*q; p=ListFind(head); //调用查找函数 if (p==NULL) { printf("没有查到要删除的通讯者!\n"); return; } printf("真的要删除该结点吗?(y/n):"); scanf("%c",&jx); if (jx=='y'||jx=='Y') { q=head; while ((q!=NULL) &&(q->next!=p)) q=q->next; q->next=p->next; //删除结点 free(p); //释放被删结点空间 printf("通讯者已被删除!\n"); } } void printList(LinkList head) { ListNode *p; p=head->next; printf("编号 姓 名 性别 联系电话 地址 \n"); printf("--------------------------------------------------------------------------------\n"); while (p!=NULL) { printf("%s,%s,%s,%s,%s\n",p->data.num,p->data.name,p->data.sex, p->data.phone,p->data.addr); printf("---------------------------------------------------------------------------------\n"); p=p->next; //后移一个结点 } }
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
这个剑灵天族。的导入图在哪里能准确找到
要去北京玩,从北京南站出发,谁给安排一下路
笑向檀郎唾是什么感觉
有个女生叫我傻狍子,请问这是啥意思? 20分
海涂工业区地址在什么地方,想过去办事
尿道感染要注意什么
三生三世十里桃花11 12集全集说的是什么?电
检验检测的区别?
湛江市吴川市梅碌镇王村港有什么快递公司
华为销售店地址在什么地方,想过去办事
丝绸之路巨型石雕矗立在什么省
乐嘉是从哪一期开始不在非诚勿扰的?
英语翻译70、80后的朋友都吃过吧?粉红色的,大
汉武帝时期和汉元帝时期,对匈奴采取哪两种不
职务侵占20万自首退4万怎么判
推荐资讯
大豆根毛细胞所含有的核酸中,分别含有碱基A
有12盒饼干,其中11盒质量相同,另一盒少几块,
恒宇精密薄板有限公司地址在什么地方,想过去
时尚儿童生活馆在什么地方啊,我要过去处理事
圆明园是什么时候建立的
上海黄金交易所的白银能买到吗?,怎么样买
某旅行团56人要租出租车。有AB两个车队。全租
超越血缘的爱作文450字
威司特汽车用品有限公司地址有知道的么?有点
瑶家地址在什么地方,想过去办事
什么旋什么转
奔野484拖拉机和奔野554拖拉机的后桥一样大吗
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?