如何用C语言做通讯录

如何用C语言做通讯录,第1张

剽窃代码即可。。

已经按照你的要求做了一个,VC6上运行确认了:

#include <stdio.h> 

#include <stdlib.h>

#include <string.h> 

typedef struct PersonalInfo

{

 char name[50]

 char address[30]

 char telno[30]

 char postcode[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

}

//显示菜单

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("    0.退出通讯录\n")

  printf("      请输入0~6     \n")

}

//创建通讯录

void Create()

{

     INFO *p1[100],*p2

     int  m,i

     printf("请输入创建个数:")

     scanf("%d",&m)

     for(i=1i<=mi++)

     {

        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)

        printf("邮编:\n")

        scanf("%s",&p1[i]->postcode)

        p1[i]->next=NULL

        if(head->next==NULL)

           head->next=p1[i]

        else

        {

            for(p2=headp2->next!=NULLp2=p2->next)       //找到结点尾

            p2->next=p1[i]

        }

     }

    printf("信息已添加!\n")

    return                                     //保存到链表

}

//添加通讯录信息

void Add()

{

     INFO *p,*q

     if((q=(INFO *)malloc(sizeof(INFO)))==NULL) exit(1)

     printf("请输入要添加的信息!\n")

     printf("姓名:\n")                             //添加信息

     scanf("%s",&q->name)

     printf("性别:\n")

     scanf("%s",q->address)

     printf("电话:\n")

     scanf("%s",q->telno)

     printf("城市:\n")

     scanf("%s",q->postcode)

     for(p=headp->next!=NULLp=p->next) 

        p->next=q

     q->next=NULL

     printf("此信息已添加!")

     return

}

//查找通讯录信息

void Find()

{

    INFO *p

    char name[50]

    if(head->next==NULL)

    {

      printf("此通讯录为空!\n")

      return

    }

    printf("请输入要查找的姓名:\n")

    scanf("%s",&name)

    for(p=head->nextp!=NULLp=p->next)

    {

       if(strcmp(p->name,name)==0)

       {

           printf("姓名\t地址\t邮编\t电话\n")

           printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)

       }

       else  if(p->next==NULL)

          printf("无此信息!\n")

    }

}

//修改通讯录信息

void Alter()

{

   char name[50]                                     //先查找 后删除

   INFO *p, *p1

   if (head->next == NULL)

   {

      printf("此通讯录为空!\n")

      return

   }

   printf("请输入要修改的姓名:\n")

   scanf("%s",name)

   for(p=head->nextp!=NULLp=p->next)

   {

       if(strcmp(p->name,name)==0)

          break

       else   if(p->next==NULL)

       {

           printf("无此信息!\n")

           return

       }

   }

   p1=(INFO *)malloc(sizeof(INFO))

   printf("姓名:\n")                             //添加信息

   scanf("%s",p1->name)

   strcpy(p->name,p1->name)

   printf("性别:\n")

   scanf("%s",p1->address)

   strcpy(p->address,p1->address)

   printf("电话:\n")

   scanf("%s",p1->telno)

   strcpy(p->telno,p1->telno)

   printf("城市:\n")

   scanf("%s",p1->postcode)

   strcpy(p->postcode,p1->postcode)

   printf("此信息已修改!\n")

   //显示修改的信息

   printf("姓名\t地址\t邮编\t电话\n")

   printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)

   free(p1)

}

//删除通讯录信息

void Delete()

{

   char  name[50]                                     //先查找 后删除

   INFO *p = head->next, *p1 =head->next,*p2

   if (head->next == NULL)

   {

     printf("此通讯录为空!\n")

     return

   }

   printf("请输入要删除的姓名:\n")

   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

       else  if(p==head->next&&p->next==NULL)

       {

           head->next=p->next

           printf("信息已删除,先此通讯录为空!!\n")

           return

       }

       else

         p1->next = p->next

   }

   else

   {

       printf("此信息不存在!!!\n")

       return

   }

   printf("此信息已删除!")

   printf("姓名\t地址\t邮编\t电话\n")

   for(p2=head->nextp2!=NULLp2=p2->next)

      printf("%s\t%s\t%s\t%s\n",p2->name,p2->address,p2->postcode,p2->telno)

}

//显示所有记录

void List()

{

   INFO *p

   if(head->next==NULL)

   {

       printf("此通讯录中无记录!\n")

       return

   }

   printf("姓名\t地址\t邮编\t电话\n")

   for(p=head->nextp!=NULLp=p->next)

      printf("%s\t%s\t%s\t%s\n",p->name,p->address,p->postcode,p->telno)

}

void main() 

   int  choice

   char  yes_no

   

   system("color a") 

   Initiate()

   do

   {

      Menu()

      printf("请选择0-6的数字\n")

      scanf("%d",&choice)

      printf("\n")

      switch(choice)

      {

          case 1:Create()

          break

          case 2:Add()

          break

          case 3:Find()

          break

          case 4:Alter()

          break

          case 5:Delete()

          break

          case 6:List()

          break

          case 0:

          printf("************感谢您的使用************\n")

          exit(0)

          break

          default:

          printf("输入有误!请重新输入\n")

          break

      }

      printf("是否继续  Y  or   N?  \n")

      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')

}

/*

* 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 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=0i<numi++)

{

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=0i<numi++)

{

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')

{


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7771464.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-09
下一篇 2023-04-09

发表评论

登录后才能评论

评论列表(0条)

保存