论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

通讯录的源代码(用链表实现)

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:44:00

#include <stdio.h>
#include <stdlib.h>  /*与malloc.h差不多*/
#include <string.h>
#define maxlen 100
struct persons
{ char name[10]; /*定义结构体数组用于缓存数据*/
 char addr[20];
 char phnum[10];
 }persons[maxlen];
;
;
;
typedef struct lnode{ /*通讯录结构中结点的定义*/
 char name[10]; /*姓名*/
 char addr[20]; /*地址*/
 char phnum[10]; /*电话*/
 struct lnode *next;
 }listnode,*linklist;
;
;
;
 linklist head=NULL,r=NULL; /*定义头指针和尾指针*/
 listnode  *s,*p0,*p1,*p2,*p3,*p4,*p5,*p6,*p7;
 int i;
 char name1[10],ch;
 char str1[20];
 FILE *fp;  /*定义文件指针*/
;
;
void creat()  /*将文件的信息读入结构体数组在转存入链表中*/
{   int j;
 long k;
 fp=fopen("people.txt","r+t"); /*打开文件*/
 if(fp!=NULL)
 {for(i=1;i<maxlen;i++)
{ j=fgetc(fp);
 if(j==EOF)
 return;
 k=i-1;
 fseek(fp,k*sizeof(struct persons),0); /*读取一个人的信息*/
 fread(&persons[i],sizeof(struct persons),1,fp);
 s=(linklist)malloc(sizeof(listnode)); /*装存入链表中*/
 strcpy(s->name,persons[i].name);
 strcpy(s->addr,persons[i].addr);
 strcpy(s->phnum,persons[i].phnum);
 if(head==NULL)  /*用尾插法将其插入链表中*/
 head=s;
 else
 r->next=s;
 r=s;}
}
 else
 { fp=fopen("people.txt","w"); /*不能打开另开辟一个文件*/
 i=1;
     }
}
;
;
;
void Show() /*显示所有的信息*/
{    p1=head;
     while(p1!=NULL)
   { printf("\n\n\tname:%s\n",p1->name);
     printf("\n\n\taddr:%s",p1->addr);
     printf("\n\n\tphnum:%s",p1->phnum);
     p1=p1->next;
    }
 }
;
;
;
void Delete() /*定义一个删除的函数*/
{ printf("\n\n\tplease input the name:");
 gets(name1); /*输入要删除人的姓名*/
 p4=head;
 if(strcmp(p4->name,name1)==0)
     {  p4=p4->next;  /*根据各种情况判定可能性*/
 head=p4;
     }
 else
     {  while(strcmp(p4->next->name,name1)!=0)
 p4=p4->next;
 p5=p4->next;
 p4->next=p5->next;
 free(p5);
 }

 }

;
;
;
void Find()  /*查找的函数定义*/
{   printf("\n\n\tplease input the name:");
  p0=head;
  gets(name1); /*查找人的姓名输入*/
    while(strcmp(name1,p0->name)!=0&&p0!=NULL)
  p0=p0->next;
  if(p0==NULL)
  printf("\n\n\tIt is not exit in the addr-book!");
  else
      {  printf("\n\n\tname:%s\n",p0->name);
  printf("\n\n\taddr:%s",p0->addr);
  printf("\n\n\tphnum:%s",p0->phnum);
        }
}
;
;
;
void Input() /*向通讯录中输入一个人的信息*/
{ s=(linklist)malloc(sizeof(listnode));
     printf("\n\n\tplease input the sb's meg:");
      printf("\n\n\t\tname:");
 scanf("%s",s->name);
 printf("\n\n\t\tAddr:");
 scanf("%s",s->addr);
 printf("\n\n\t\tphnum:");
 scanf("%s",s->phnum);
 if(head==NULL)
 head=s;
 else
 r->next=s;
 r=s;
}
;
;
;
void Alter()  /*改变一个人的信息*/
{
 int j;
 printf("\n\n\tPlease input the name:");
     gets(name1); /*输入要人的姓名*/
 p3=head;
 while(strcmp(name1,p3->name)!=0&&p3!=NULL)
 p3=p3->next;
 if(p3==NULL)
 printf("\n\n\tIt is not exit in the addr-book!");
 else
     {  printf("\n\n\tplease input the new meg!"); /*输入要改人的新信息*/
 printf("\n\n\t\tname:");  
 scanf("%s",name1);
 strcpy(p3->name,name1);
 printf("\n\n\t\tAddr:");
 scanf("%s",name1);
 strcpy(p3->addr,name1);
 printf("\n\n\t\tphnum:");
 scanf("%s",name1);
 strcpy(p3->phnum,name1);
      }
}
;
;
;
void Save()  /*保存信息*/
{ int j;
 fp=fopen("people.txt","w");
 for(p2=head,j=0;p2!=NULL;j++,p2=p2->next)/*将信息装出入结构体数组在出入链表中*/
 {          /*避免地址的出入,造成乱码文件*/
 strcpy(persons[j].name,p2->name);
 strcpy(persons[j].addr,p2->addr);
 strcpy(persons[j].phnum,p2->phnum);
 fwrite(&persons[j],sizeof(struct persons),1,fp);
 }
}
;
;
;
void main()
{ creat();
 do
    {  printf("\n\n\n\n\tWELCOME TO USE Pan Weifeng's Address book");/*显示提示的信息*/
 printf("\n\n\t\tPlease make a choice below:");
 printf("\n\t\t1.Show all the meg");
 printf("\n\t\t2.Delete a piece of meg");
 printf("\n\t\t3.Find a piece of meg");
 printf("\n\t\t4.Insert a piece of meg");
 printf("\n\t\t5.Alter a piece of meg");
 printf("\n\t\t6.Save and Exit");
 printf("\n\n\n");
 printf("\tInput Your Choice:");
 ch=getche();
 switch(ch)
       {   case '1':  Show(); /*用单条件多选择语句实现调用与循环*/
        break;
           case '2':  Delete();
        break;
           case '3':  Find();
        break;
    case '4':  Input();
        break;
    case '5':  Alter();
        break;
    case '6':  Save();
        fclose(fp);
        exit(0);
        break;
    default:
     printf("\n\t*********************************\n");
     printf("\n\t     The num should 1-4!!!       \n");
     printf("\n\t**********************************");
     break;
 }
     }while(1);
     }



视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058