c语言编写通信录

c语言编写通信录,第1张

/编程建立一通讯簿,存放有姓名、电话号码、住址,然后对通信簿进行查找、添加、修改及删除。/

#include<stdioh>

struct person

{

char name[8];

char tel[15];

char addr[50];

};

char filename[20];

FILE fp;

void creat();

void output();

void search();

void append();

void modify();

void delete();

main()

{

int m;

creat();

while(1)

{

printf("\n\n添加,请按1");

printf("\n查找,请按2");

printf("\n修改,请按3");

printf("\n删除,请按4");

printf("\n输出,请按5");

printf("\n退出,请按0\n");

scanf("%d",&m);

if(m>=0&&m<=5)

{

switch(m)

{

case 1: append();

break;

case 2: search();

break;

case 3: modify();

break;

case 4: delete();

break;

case 5: output();

break;

case 0: exit();

}

printf("\n\n *** 作完毕,请再次选择!");

}

else

printf("\n\n选择错误,请再次选择!");

}

}

void creat()

{

struct person one;

long s1;

printf("\n请输入通讯簿名:");

scanf("%s",filename);

if((fp=fopen(filename,"w"))==NULL)

{

printf("\n不能建立通讯簿!");

exit();

}

fprintf(fp,"%-10s%-20s%-50s\n","姓名","电话号码","住址");

printf("\n请输入姓名、电话号码及住址(以0结束)\n");

scanf("%s",onename);

while(strcmp(onename,"0"))

{

scanf("%s%s",onetel,oneaddr);

fprintf(fp,"%-10s%-20s%-50s\n",onename,onetel,oneaddr);

scanf("%s",onename);

}

fclose(fp);

}

void output()

{

struct person one;

if((fp=fopen(filename,"r"))==NULL)

{

printf("\n不能打开通讯簿!");

exit();

}

printf("\n\n%20s\n","通 讯 簿");

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",onename,onetel,oneaddr);

printf("%-10s%-20s%-50s",onename,onetel,oneaddr);

}

fclose(fp);

}

void append()

{

struct person one;

if((fp=fopen(filename,"a"))==NULL)

{

printf("\n不能打开通讯簿!");

exit();

}

printf("\n请输入添加的姓名、电话号码及住址\n");

scanf("%s%s%s",onename,onetel,oneaddr);

fprintf(fp,"%-10s%-20s%-50s\n",onename,onetel,oneaddr);

fclose(fp);

}

void search()

{

int k=0;

char namekey[8];

struct person one;

printf("\n请输入姓名:");

scanf("%s",namekey);

if((fp=fopen(filename,"rb"))==NULL)

{

printf("\n不能打开通讯簿!");

exit();

}

while(!feof(fp))

{

fscanf(fp,"%s%s%s\n",onename,onetel,oneaddr);

if(!strcmp(namekey,onename))

{

printf("\n\n已查到,记录为:");

printf("\n%-10s%-18s%-50s",onename,onetel,oneaddr);

k=1;

}

}

if(!k)

printf("\n\n对不起,通讯簿中没有此人的记录。");

fclose(fp);

}

void modify()

{

int m,k=0;

long offset;

char namekey[8];

struct person one;

printf("\n请输入姓名:");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开通讯簿!");

exit();

}

while(!feof(fp))

{

offset=ftell(fp);

fscanf(fp,"%s%s%s\n",onename,onetel,oneaddr);

if(!strcmp(namekey,onename))

{

k=1;

break;

}

}

if(k)

{

printf("\n已查到,记录为:");

printf("\n%-10s%-18s%-50s",onename,onetel,oneaddr);

printf("\n请输入新姓名、电话号码及住址:");

scanf("%s%s%s",onename,onetel,oneaddr);

fseek(fp,offset,SEEK_SET);

printf("%ld",ftell(fp));

fprintf(fp,"%-10s%-20s%-50s\n",onename,onetel,oneaddr);

}

else

printf("\n对不起,通讯簿中没有此人的记录。");

fclose(fp);

}

void delete()

{

int m,k=0,flag;

long offset1,offset2;

char namekey[8], valid[4];

struct person one;

printf("\n请输入姓名:");

scanf("%s",namekey);

if((fp=fopen(filename,"r+"))==NULL)

{

printf("\n不能打开通讯簿!");

exit();

}

while(!feof(fp))

{

offset1=ftell(fp);

fscanf(fp,"%s%s%s\n",onename,onetel,oneaddr);

if(!strcmp(namekey,onename))

{

k=1;

break;

}

}

if(k)

{

printf("\n已查到,记录为");

printf("\n%-10s%-18s%-50s",onename,onetel,oneaddr);

printf("\n确实要删除,按1;不删除,按0:");

scanf("%d",&m);

if(m)

{

fseek(fp,offset1,SEEK_SET);

fprintf(fp,"%-10s%-20s%-50s\n","","","");

}

}

else

printf("\n对不起,通讯簿中没有此人的记录。");

fclose(fp);

}

分析:

跟据楼主的意思!我们可以得出,这个程序只要求我们写查询通迅录的内容

而通迅录的内容,可以通过初始化得出!

简而言之:写一个查询函数

呵呵···把问题相通了,我们就开始写算法吧let's go!!!

----------------------------------------------------------------

算法:

1获得用户的输入 (就是要查询的对象的名字)

2查询 (在这我用穷举通迅录的方式查询了,^_^&&^_^)

3输出查询结果

算法就这样被我们征服了!!!呵呵~~好有成就感哇!!

但我们现在还不能开始编码,我得们先想好怎么编,要做到胸有成竹!!!

那我现在来想一下该怎么编码吧!let's go!!!

----------------------------------------------------------------

要保存通迅的信息,那么我们得用一个结构体吧:

struct friends

{

char name[20]; / 名字不能写得太长哦 /

char province[20]; / 省份 /

char city[20]; / 所在城市 /

char nation[20]; / 民族 /

char sex[2]; / 性别 M/F /

int age; / 年龄 /

};

要获得用户输入,要用个 char search_name[20];

查询结果反回一个数,记录对象在通迅录中的位置:int index;

查询中有用要循环,用一个记数器: int i;

----------------------------------------------------------------

OK,该用的变量我们都想好了!算法我们也想好了。还等什么呢,开始编码吧

呵呵~~是不是等这个时候都等得急了~~~~~

-------------------------------------------------------------------

程序实现:

#include <stdioh>

#include <stringh>

#include <stdlibh>

/ 定义保存通迅录的信息 /

struct friends

{

char name[20]; / 名字 /

char province[20]; / 省份 /

char city[20]; / 所在城市 /

char nation[20]; / 民族 /

char sex[2]; / 性别 M/F /

int age; / 年龄 /

};

void getname (char search_name[]);

int search (struct friends friend_list[], char search_name[]);

void print_result(struct friends friend_list[], int index);

int main (void)

{

int index;

char search_name[20];

struct friends friend_list[4] = {

{"lihan", "liaoning", "huluodao","han","M",19},

{"zhuqiang", "jiangsu", "changzhu", "han","M",19},

{"wangjiangang", "liaoning", "anshan","han","M",20},

{"zhanghongwei", "shandong", "zhucheng", "han","M",21},

};

(void) getname (search_name); / 获得用户输入 /

index = search (friend_list, search_name); / 查询 /

(void) print_result (friend_list,index); / 打印结果 /

return 0;

}

/

函数名:getname

功能:获得用户要查询的对象的名字

/

void getname (char search_name[])

{

printf ("Pleace enter the name of your friends you want to search>>");

scanf ("%s", search_name);

}

/

函数名:search

功能:查询对象

/

int search (struct friends friend_list[], char search_name[])

{

int i;

/ 穷举通迅录 /

for (i = 0; i < 4; ++i)

{

if (strcmp(friend_list[i]name, search_name) == 0)

{

return (i);

}

}

if (i == 4)

{

printf ("I am sorry! there is nobody by the name you enter!\n");

fflush(stdin);

getchar();

exit (0);

}

}

/

函数名:print_result

功能:打印结果

/

void print_result(struct friends friend_list[], int index)

{

printf ("the imformation of %s:\n", friend_list[index]name);

printf ("------------------------------------------------\n");

printf (" NAME: %-s\n", friend_list[index]name);

printf ("PROVINCE: %-s\n", friend_list[index]province);

printf (" CITY: %-s\n", friend_list[index]city);

printf (" NATION: %-s\n", friend_list[index]nation);

printf (" SEX: %-s\n", friend_list[index]sex);

printf (" AGE: %-d\n", friend_list[index]age);

printf ("-------------------------------------------------\n");

fflush(stdin);

getchar();

}

呵呵~~一口气把它写出来了!!!前期写算法是很重要的!!

现在还没结束!!我们要先来测试一下!!

--------------------------------------

Pleace enter the name of your friends you want to search>>lihan

the imformation of lihan:

------------------------------------------------

NAME: lihan

PROVINCE: liaoning

CITY: huluodao

NATION: han

SEX: M

AGE: 19

-------------------------------------------------

--------------------------------------

Pleace enter the name of your friends you want to search>>lbmzwyy

I am sorry! there is nobody by the name you enter!

说明成功了~~~呵呵~~太高兴了~~

--------------------------------------

请记注一点:克制编码的诱惑

无论多么小的问题都要先分析好问题,想好算法,才能开始编码!!!我相信这样做一定对你有好处的!

#include<stdioh>

#define LL sizeof(struct Information)

#include<stdlibh>

struct Information

{

char name[25];

int number;

double Tel_number;

struct Information next;

};

int n,t;

struct Information creat()

{

struct Information head,p1,p2;

n=0;

p1=p2=(struct Information )malloc(LL);

printf("请输入第 %d 个学生通讯信息:\n",n+1);

printf("姓名\t学号\t电话号码\n");

scanf("%s%d%lf",p1->name,&p1->number,&p1->Tel_number);

getchar();

head=NULL;

while(p1->number!=0)

{

n++;

if(n==1)head=p1;

else

p2->next=p1;

p2=p1;

p1=(struct Information )malloc(LL);

scanf("%s%d%lf",p1->name,&p1->number,&p1->Tel_number);

getchar();

}

p2->next=NULL;

free(p1);

p1=NULL;

return head;

}

void output(struct Information p3)

{

printf("\n你建立的是多少人的通讯录: n=%d\n ",n);

printf("\n输出存入的通信信息:\n");

printf("\n姓名\t学号\t电话号码\n");

while(p3!=NULL)

{

printf("%s\t%d\t%0lf\n",p3->name,p3->number,p3->Tel_number);

p3=p3->next;

}

}

void file(struct Information p8)

{

FILE fp;

int i;

t=n;

if((fp=fopen("Infordat","wb"))==NULL)

{

printf("此文件无法打开!\n");

exit(0);

}

for(i=0;i<t;i++)

{

if(fwrite(&p8->name,LL,1,fp)!=1)

if(fwrite(&p8->number,LL,1,fp)!=1)

if(fwrite(&p8->Tel_number,LL,1,fp)!=1)

p8=p8->next;

else

printf("此文件写入错误\n");

}

fclose(fp);

}

void Insert(struct Information head,struct Information node,int num1)

{

struct Information p;

if(head==NULL)

{

head=node;

node->next=NULL;

n++;

printf("你插入后总共有结点:n=%d\n",n);

}

p=head;

while(p->number!=num1 && p->next!=NULL)

{

p=p->next;

}

if(p->number==num1)

{

node->next=p->next;

p->next=node;

n++;

printf("你插入后总共有结点:n=%d\n",n);

}

else

printf("\nthe num1 is't found!\n");

printf("\n输出插入一个学生的通讯信息后的通讯录:\n");

printf("\n姓名\t学号\t电话号码\n");

p=head;

while(p!=NULL)

{

printf("%s\t%d\t%0lf\n",p->name,p->number,p->Tel_number);

p=p->next;

}

}

void Delete(struct Information head,int num2)

{

struct Information p5,p6,p7;

if(head==NULL)

{

printf("\nthis is a null list!\n");

}

p6=head;

while(p6->number!=num2 && p6->next!=NULL)

{

p5=p6;

p6=p6->next;

}

if(p6->number==num2)

{

if(head==p6)

{

head=head->next;

}

else

p5->next=p6->next;

n--;

printf("你 删除 后总共有结点:n=%d\n",n);

}

else

printf("\nthe %d didn't been found!\n");

printf("\n输出 删除 一个学生的通讯信息后的通讯录:\n");

printf("\n姓名\t学号\t电话号码\n");

free(p6);

p6=NULL;

p7=head;

while(p7!=NULL)

{

printf("%s\t%d\t%0lf\n",p7->name,p7->number,p7->Tel_number);

p7=p7->next;

}

}

int main()

{

struct Information p0,p4;

int r,m;

p0=creat();

output(p0);

file(p0);

printf("请输入要 插入 信息:\n");

p4=(struct Information )malloc(LL);

scanf("%s%d%lf",p4->name,&p4->number,&p4->Tel_number);

getchar();

printf("请输入 插在 那个学号:\n");

scanf("%d",&r);

Insert(p0,p4,r);

printf("请输入 删除 那个学号:\n");

scanf("%d",&m);

Delete(p0,m);

return 0;

}

这也要求貌似太多了

我这刚做了个简单的一点的通讯录

希望对LZ又点帮助

#include<stdioh>

#include<stringh>

#include<stdlibh>

#include<conioh>

typedef struct//表示数据类型,可类比int

{

char name[15];

char city[15];

char telenub[15];//固定电话号码

char email[20];

char qq[13];

char youbian[10];//表示邮编

}DataType;

FILE fp;

typedef struct node{//结类型定义

DataType data;//节点数据域

struct node next;//节点指针域

}ListNode;

typedef ListNode LinkList;

LinkList head;

ListNode p;

//函数说明

void myprint();

LinkList CreateList();

void InsertNode(LinkList head,ListNode p);

ListNode ListFind(LinkList head);

void DelNode(LinkList head);

void PrintList(LinkList head);

//用尾插法建立通讯录链表函数

LinkList CreateList()

{

LinkList head=(ListNode )malloc(sizeof(ListNode));//申请头结点 分配存储空间

ListNode p,rear;

int flag=0;//结束标志置0

rear=head;//尾指针初始指向头结点

if((fp=fopen("recordtxt","w+"))==NULL) //打开文件,并判断打开是否正常

{

printf("打开文件失败!!\n");//没打开

exit(0); //退出

}

fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n","姓名","城市","电话","邮箱","QQ","邮编" );

while(flag==0)

{

p=(ListNode )malloc(sizeof(ListNode));//申请新结点

printf(" 姓名 地址(城市) 电话 邮箱 QQ 邮编 \n");

scanf("%s%s%s%s%s%s",p->dataname ,p->datacity ,p->datatelenub ,p->dataemail,p->dataqq,p->datayoubian );

fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n",p->dataname ,p->datacity ,p->datatelenub ,p->dataemail,p->dataqq,p->datayoubian );

// fclose(fp);

rear->next=p;//新结点连接到尾结点之后

rear=p;//尾指针指向新结点

printf("是否结束建表?(1/0):");

scanf("%d",&flag);//读入一个标志数据

}

rear->next=NULL;//终端结点指针域置空

return head;//返回链表头指针

}

//在通讯录链表head中插入节点

void InsertNode(LinkList head,ListNode p)

{

ListNode p1,p2;

p1=head;

p2=p1->next;

while(p2!=NULL&&strcmp(p2->dataname,p->dataname)<0)

{

p1=p2;//p1指向刚访问过的结点

p2=p2->next;//p2指向表的下一个结点

}

p1->next=p;//插入p所指向的的结点

p->next=p2;//连接表中剩余部分

}

//有序通讯录链上的查找

ListNode ListFind(LinkList head)

{

ListNode p;

char telenub[13];

char name[15];

int temp;

printf("请选择按姓名或电话查询(1/2):\n");

p=head->next;//假定通讯录表带头结点

scanf("%d",&temp);

if(temp==1)

{

printf("请输入要查找者的姓名");

scanf("%s",name);

while(p&&strcmp(p->dataname,name)!=0)

p=p->next;

if(p==NULL||strcmp(p->dataname,name)>0)

p=NULL;//没有查到要查找的姓名

}

else

if(temp==2){

printf("请输入要查找的电话号码:\n");

scanf("%s",telenub);

while(p&&strcmp(p->datatelenub,telenub)<0)

p=p->next;

if(p==NULL||strcmp(p->datatelenub,telenub)>0)

p=NULL;

}

return p;

}

//通讯录链表上结点的删除

//先调用查询函数,查询到要删除的结点,删除结点即可。

void DelNode(LinkList head)

{

char temp;

ListNode p,q;

p=ListFind(head);//调用查找函数

if(p==NULL)

{

printf("没有查到要删除的通讯者!\n");

return;

}

printf("真的要删除改结点吗(y/n):\n");

scanf("%s",&temp);

if(temp=='y'||temp=='Y')

{

q=head;

while(q!=NULL && q->next!=p)//此循环的含义是将q的指针域赋给p

q=q->next;

q->next=p->next;//删除结点 这里为什么不能用p=p->next

free(p);//释放被删除的节点空间

printf("通讯者已被删除!\n");

}

}

//通讯录链表的输出函数

void PrintList(LinkList head)

{

ListNode p;

p=head->next;//因为链表带头结点,使p指向链表开始结点

printf(" 姓名 地址 电话 邮 箱 QQ 邮编 \n");

printf("-------------------------------------------------------------------------\n");

/if((fp=fopen("d://recordtxt","r+"))==NULL) //打开文件,并判断打开是否正常

{

printf("打开文件失败!!\n");//没打开

exit(0); //退出

}

while(feof(fp)==0)

{

fscanf(fp,"%15s%20s%15s%30s%10s%10s",p->datatelenub, p->dataname ,p->datacity ,p->dataemail,p->dataqq,p->datayoubian);

printf("%15s,%20s,%15s,%30s,%10s,%10s",p->datatelenub, p->dataname ,p->datacity ,p->dataemail,p->dataqq,p->datayoubian);

}

fclose(fp);/

while(p!=NULL)

{

printf("%10s%10s%13s%15s%13s%12s\n",p->dataname,p->datacity,p->datatelenub,p->dataemail,p->dataqq,p->datayoubian);

printf("-------------------------------------------------------------------------\n");

p=p->next;//后移一个结点

}

}

void myprint() / 显示菜单界面 /

{

printf("\n\n");

printf(" |--------------------------------|\n");

printf(" |★☆欢迎进入通讯录管路系统☆★ |\n");

printf(" |--------------------------------|\n");

printf(" | 请输入选项编号(0-5): |\n");

printf(" |--------------------------------|\n");

printf(" | 1--创建通讯录链表 |\n");

printf(" | 2--好友结点的添加 |\n");

printf(" | 3--好友结点的查询 |\n");

printf(" | 4--好友结点的删除 |——————\n");

printf(" | 5--输出通讯录链表 |08信工一班 |\n");

printf(" | 0--退出 | 谭鹏 |\n");

printf(" |--------------------------------|——————\n");

printf("\n\n\n");

}

void main()

{

char choose,yes_no;

do

{

myprint(); / 显示主菜单 /

printf("\t");

choose=getch();

switch(choose)

{

case '1':printf("\n");

printf("\t\t 通 讯 录 链 表 的 建 立 \n ");

printf("\t\n");

head=CreateList(); break; / 创建 /

case '2':

printf("\n");

printf("\t\t 通 讯 录 链 表 的 添 加 \n ");

printf("\t \n");

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

printf("\t\n");

p=(ListNode )malloc(sizeof(ListNode));//申请新结点

scanf("%s%s%s%s%s%s",p->dataname ,p->datacity ,p->datatelenub ,p->dataemail,p->dataqq,p->datayoubian );

if((fp=fopen("tianjiatxt","w+"))==NULL) //打开文件,并判断打开是否正常

{

printf("打开文件失败!!\n");//没打开

exit(0); //退出

}

fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n","姓名","城市","电话","邮箱","QQ","邮编" );

InsertNode(head,p);

fprintf(fp,"%-15s%-20s%-15s%-20s%-10s%-12s\n",p->dataname ,p->datacity ,p->datatelenub ,p->dataemail,p->dataqq,p->datayoubian );

fclose(fp);

printf("\t\t\t结点添加完毕!");

break; / 添加 /

case '3':

printf("\n");

printf("\t 好 友 信 息 的 查 询 \n ");

p=ListFind(head);

if(p!=NULL){

printf(" 姓名 地址 电话 邮 箱 QQ 邮编 \n");

printf("\n");

printf("%10s%10s%13s%15s%13s%10s\n",p->dataname,p->datacity,p->datatelenub,p->dataemail,p->dataqq,p->datayoubian);

printf("\n");

}

else

printf("没有查到要查询的好友!");

break; / 查询 /

case '4':

printf("\n");

printf(" 好 友 信 息 的 删 除 \n ");

printf("\n");

DelNode(head);//删除结点

break; / 删除 /

case '5':

printf("\n");

printf("\t\t 显 示 所 有 好 友 信 息 \n ");

printf("\t \n");

PrintList(head); break; / 显示 /

case '0': break;

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

}

if(choose=='0')

break;

printf("\n 按Y键回主目录:\n\n\n");

do

{

yes_no=getch();

}while(yes_no!='Y'&&yes_no!='y');

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

}

以上就是关于c语言编写通信录全部的内容,包括:c语言编写通信录、用C语言编写通讯录,求程序代码、求一个C语言编写的通讯录程序急急急等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/zz/9336166.html

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

发表评论

登录后才能评论

评论列表(0条)

保存