如何用C语言做通讯录

Python020

如何用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')

}

建立同学通讯录

#include"stdio.h"

#define NUM 3

struct mem

{

char name[20]

char phone[10]

}

main()

{

struct mem man[NUM]

int i

for(i=0i<NUMi++)

{

printf("input name:\n")

gets(man[i].name)

printf("input phone:\n")

gets(man[i].phone)

}

printf("name\t\t\tphone\n\n")

for(i=0i<NUMi++)

printf("%s\t\t\t%s\n",man[i].name,man[i].phone)

}

#define N 100

#define SIZE 30

#include <stdio.h>

#include <string.h>

#include <conio.h>

struct student{

 char num[SIZE]

char name[SIZE]

 char tel[SIZE]

}

/*函数声明*/

void myprint()/*显示菜单*/

int mycreat(struct student*p,int n)/*输入通讯录*/void mydisplay(struct student*p,int n)/*显示通讯录*/void mysearch(struct student*p,int n)/*查找*/

void mymodify(struct student*p,int n)/*修改通讯录*/int myadd(struct student*p,int n)/*增加通讯录*/int mydelete(struct student*p,int n)/*删除*/void mysort(struct student*p,int n)/*排序*/

void sch_num(struct student*p,int n)/*按学号查找*/void sch_name(struct student*p,int n)/*按姓名查找*/

int loadinfo(struct student*p,int n)/*载入通讯录信息*/int saveinfo(struct student*p,int n)/*保存通讯录信息*/void main(){

/*文件定义*/char choose,yes_no

struct studentrecord[N]/*存放通讯录信息,共100条*/int total=0,flag/*通讯录总数*/

total=loadinfo(record,N)/*从文件读取记录信息,不超过100条*/do{

myprint()/*显示菜单*/

printf("请选择:")do{

choose=getchar()}

while(choose<'0'||choose>'9')switch(choose){

case'1':

total=mycreat(record,total)breakcase'2':

mydisplay(record,total)breakcase'3':

mysearch(record,total)breakcase'4':

mymodify(record,total)breakcase'5':

total=myadd(record,total)breakcase'6':

total=mydelete(record,total)breakcase'7':

mysort(record,total)breakcase'8':

flag=saveinfo(record,total)if(flag==1)

printf("\n保存成功!\n")else

printf("\n保存失败!\n")breakcase'0':

breakdefault:

printf("\n%c为非法选项!\n",choose)}

if(choose=='0')breakprintf("\n要继续选择吗(Y/N)?")do{

yes_no=getchar()}

while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n')}

while(yes_no!='Y'||yes_no!='y')}

void myprint()/*显示菜单信息*/{

printf("\n\n\n\n\n")printf("\n")printf("请输入选项编号(0--7)\n")printf("1---批量输入通讯录\n")printf("2---显示通讯录\n")printf("3---查询通讯录\n")printf("4---修改通讯录\n")printf("5---添加通讯录\n")printf("6---删除通讯录\n")printf("7---排序通讯录\n")printf("8---保存通讯录\n")printf("0---退出\n")printf("\n")

}

int mycreat(struct student*p,int n)/*批量输入学生信息*/{

int i=0int m

printf("添加前的记录,共有<%d>个:\n",n)printf("\n记录号学号姓名电话号码\n")

i=0

while((i<n)&&(strcmp(p->num,"")!=0)){

printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)i++p++}

printf("\n请输入要输入的学生人数(<%d):",N-n)

scanf("%d",&m)i=0

while(i<m){

printf("\n")

printf("请输入第%d个记录:\n",i+1)printf("学号:")do{

gets(p->num)}

while(strcmp(p->num,"")==0)printf("姓名:")gets(p->name)

printf("电话号码:")gets(p->tel)p++i++}

return m+n}

void mydisplay(struct student*p,int n)/*显示学生信息*/{

/*clrscr()*/int i=0

printf("\n记录号学号姓名电话号码\n")while(i<n){

printf("%d:%15s%15s%15s\n",i+1,p->num,p->name,p->tel)p++i++}}

void mymodify(struct student*p,int n)/*修改学生信息*/{

int i

char nam[10]mydisplay(p,n)

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

for(i=0i<ni++,p++)

if(strcmp(nam,p->name)==0)breakif(i==n)

printf("无此人!\n")else{

printf("请输入正确的学号:")do{

gets(p->num)}

while(strcmp(p->num,"")==0)printf("请输入正确的姓名:")gets(p->name)

printf("请输入正确的电话号码:")gets(p->tel)}

}

void mysearch(struct student*p,int n)/*查找指定学生*/{

char c

mydisplay(p,n)

printf("\n按学号查询(h),还是按姓名查询(m)?")c=getchar()

if(c=='h'||c=='H')

sch_num(p,n)else if(c=='m'||c=='M')

sch_name(p,n)else

printf("\n非法字符!\n")}

void sch_num(struct student*p,int n)/*按学号查询*/{

int i,flag=0char nm[10]

printf("\n请输入要查询记录的学号:")gets(nm)

for(i=0i<ni++)

if(strcmp(nm,p[i].num)==0)

{

printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1

}

if(flag==0)

printf("无此人!\n")}

void sch_name(struct student*p,int n)/*按姓名查询*/{

int i,flag=0char nam[10]

printf("\n请输入要查询记录的姓名:")gets(nam)

for(i=0i<ni++)

if(strcmp(nam,p[i].name)==0){

printf("\n学号姓名电话号码\n")printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)flag=1}

if(flag==0)

printf("无此人!\n")

}

int myadd(struct student*p,int n)/*增加学生信息*/{

int i=0char c

struct studentt,*q

printf("添加前的记录:\n")printf("\n学号姓名电话号码\n")i=0q=p

/*显示原有记录信息*/while(i<n){

printf("%15s%15s%15s\n",q->num,q->name,q->tel)i++q++}do{

printf("请输入新记录的学号:\n")do{

gets(t.num)

}

while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)

printf("请输入新记录的电话号码:")gets(t.tel)

for(i=0i<ni++)

if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){

printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}

/*找到最后,没有重复*/if(i==n){

*(p+i)=t

printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)

printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}

}

while(c=='y'||c=='Y')return n+1}

int mydelete(struct student*p,int n)/*删除学生信息*/{

int i,x

char c,nm[10],nam[10]

printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()

if(c=='h'||c=='H'){

printf("\n请输入要删除记录的学号:")gets(nm)

for(x=0x<nx++)

{

gets(t.num)

}

while(strcmp(t.num,"")==0)/*学号不能为空*/printf("请输入新记录的姓名:")gets(t.name)

printf("请输入新记录的电话号码:")gets(t.tel)

for(i=0i<ni++)

if(strcmp(t.num,(p+i)->num)==0||strcmp(t.tel,(p+i)->tel)==0){

printf("学号或电话号码重,要重新输入吗(Y/N)?")c=getchar()putchar ('\n')break}

/*找到最后,没有重复*/if(i==n){

*(p+i)=t

printf("添加后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<n+1i++)

printf("%15s%15s%15s\n",(p+i)->num,(p+i)->name,p[i].tel)break}

}

while(c=='y'||c=='Y')return n+1}

int mydelete(struct student*p,int n)/*删除学生信息*/{

int i,x

char c,nm[10],nam[10]

printf("删除前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("按学号删除(h),还是按姓名删除(m)?")c=getchar()

if(c=='h'||c=='H'){

printf("\n请输入要删除记录的学号:")gets(nm)

for(x=0x<nx++)

int j,i,kchar c1,c2

struct studenttemp

printf("\n排序前的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)printf("\n按学号排序(h),还是按姓名排序(m)?")c1=getchar()

if(c1=='h'||c1=='H'){

printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()/*升序*/

if(c2=='s'||c2=='S'){

for(i=0i<n-1i++){

k=i

for(j=ij<nj++)

if(strcmp(p[k].num,p[j].num)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("\n排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else if(c2=='j'||c2=='J')/*降序*/{

for(i=0i<n-1i++){

k=i

for(j=0j<nj++)

if(strcmp(p[k].num,p[j].num)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else printf("\n非法字符\n")}

else if(c1=='m'||c1=='M')/*按姓名排序*/{

printf("\n按升序排序(s),还是按降序排序(j)?")c2=getchar()

if(c2=='s'||c2=='S'){

for(i=0i<n-1i++){

k=i

for(j=0j<nj++)

if(strcmp(p[k].name,p[j].name)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp}

printf("排序后的记录:\n")printf("\n学号姓名电话号码\n")for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)

}

else if(c2=='j'||c2=='J')/*降序*/{

for(i=0i<n-1i++){

k=i

for(j=ij<nj++)

if(strcmp(p[k].name,p[j].name)<0)

k=j

temp=p[k]p[k]=p[i]p[i]=temp

}

printf("排序后的记录:\n")printf("\n学号

姓名电话号码\n")

for(i=0i<ni++)

printf("%15s%15s%15s\n",p[i].num,p[i].name,p[i].tel)}

else printf("\n非法字符!\n")}

else printf("\n非法字符!\n")}

int loadinfo(struct student*p,int n)/*载入通讯录信息*/{

FILE*fpint i,all=0

char filename[30]="tongxunlu.txt"fp=fopen(filename,"r")if(fp==NULL){

printf("\n***不能打开文件%s,或%s文件不存在,创建一个新文件!

",filename,filename)*/

fp=fopen(filename,"w")}

fscanf(fp,"%d\n",&all)

if(all>N)/*读取记录总数*/{

printf("文件记录数太多,不能读取")return 0}

for(i=0i<alli++)/*读取记录信息*/{

fscanf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)}

fclose(fp)/*关闭文件*/return all}

int saveinfo(struct student*p,int n){

FILE*fpint i,all=0

char filename[30]="txl.dat"/*文件可以用记事本打开*/fp=fopen(filename,"w")if(fp==NULL){

printf("\n***不能建立或打开文件%s!***",filename)return 0}

fprintf(fp,"%d\n",n)for(i=0i<ni++)

fprintf(fp,"%s%s%s\n",p[i].num,p[i].name,p[i].tel)fclose(fp)return 1}

抄来的