C语言-------通讯录
这是我接触C一学期之后所作的一个小编程,希望能帮助大家,免去大家一些不必要的烦恼。
运行
下面是代码是用来建立原有通讯录的。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int MaxLen=500;
char fName[20]="tel.txt";
int Len;
int n;
typedef struct telephone
{
char name[20]; //名字
int group; //群组 1.朋友 2.同事 3.家人 4.其他
char home[15]; //住宅电话
char mobile[15]; //手机
char email[15]; //Email
char add[20]; //地址
char memo[20]; //备注
} tel;
tel tele[100];
main(){
int i;
tel *p;
void PrintHead();
printf("输入人数:");
scanf("%d",&n);
int insert();
PrintHead();
insert();
return 0;
}
int insert()
{
FILE *p;
if((p=fopen("E:\\tel.txt","w"))==NULL) //通讯录数据存储在E盘中。
{
printf("can't find the file!");
exit(0);
}
for(int i=0;i<n;i++)
{
scanf("%s%d%s%s%s%s%s",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
fprintf(p,"%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
fclose(p);
}
void PrintHead()
{
printf("姓名 群组 住宅电话 手机 Email 地址 备注");
printf("\n");
}
执行如下图:
代码说明:执行完这个程序后,会在E盘中创建出一个通讯录。
之后是对通讯录操作的源代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
const int MaxLen=500;
char fName[20]="tel.txt";
int Len=0;
int n;
typedef struct telephone
{
char name[20]; //名字
int group; //群组 1.朋友 2.同事 3.家人 4.其他
char home[15]; //住宅电话
char mobile[15]; //手机
char email[15]; //Email
char add[20]; //地址
char memo[20]; //备注
} tel;
tel tele[100]; tel t[1];tel t1[1];
//typedef struct index
//{
// int len; //数组长度
// Tel *tel[MaxLen]; //指针数组
//}Index;
int main(int argc, char *argv[])
{
int i;
int menu();
int Submenu2();
printf("输入原来通讯录信息人数:");
scanf("%d",&n);
menu();
return 0;
}
int menu() //菜单模块
{
tel *p;
void List(tel tele[],int i);
void SelectSort(tel *p);
int Copy();
int i;
int Submenu2();
int z,x;
printf("****************通讯录管理***************\n");
printf("1---------查看通信录\n");
printf("2---------更新通信录\n");
printf("3---------备份通信录\n");
printf("4---------退出\n");
while(i!=4)
{
printf("输入操作数:");
scanf("%d",&x);
switch(x)
{
case 1:{
List(tele,i);
printf("输入1,排序(否则按回车键结束):");
scanf("%d",&z);
if(z==1) SelectSort(p);
else if(z!=1) break;
}break;
case 2:Submenu2();break;
case 3:{
Copy();int k=Copy();printf("%d\n",k);break;
}
case 4:printf("退出"); break;
default:printf("请重新输入:");
}
}
}
int Submenu2()
{
int i;tel *p;int menu();
void New(tel tele[],tel *p);
void Edit(tel tele[],tel *p);
void Delect(tel tele[],tel *p);
printf("1---------新增联系人\n");
printf("2---------编辑联系人\n");
printf("3---------删除联系人\n");
printf("0---------返回主菜单\n");
while(i!=0)
{
printf("输入操作(输入0返回主菜单):");
scanf("%d",&i);
switch(i)
{
case 1:New(tele,p);break;
case 2:Edit(tele,p);break;
case 3:Delect(tele,p);break;
case 0:menu();break;
default:printf("请重新输入:");
}}}
void List(tel tele[],int i) //查看模块
{
FILE *p1;
if((p1=fopen("E:\\tel.txt","r"))==NULL)
{
printf("can't find the file!");
exit(0);
}
i=0;
while(!feof(p1))
{ fscanf(p1,"%s %d %s %s %s %s %s\n",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo); printf("%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
i++;
}
fclose(p1);
}
void PrintHead() //输出表头
{
printf("姓名 群组 住宅电话 手机 Email 地址 备注");
printf("\n");
}
void PrintBottom() //输出表尾
{
printf("继续操作:");
}
void SelectSort(tel *p) //音序排序
{
int i,j,k;
for(i=0;i<n+Len;i++)
{
k=i;
for(j=i+1;j<n+Len;j++)
if(strcmp(tele[k].name,tele[j].name)>0)
k=j;
t[1]=tele[k];
tele[k]=tele[i];
tele[i]=t[1];
}
for(i=0;i<n+Len;i++)
printf("%d %s %d %s %s %s %s %s\n",i+1,tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
void PrintOne(tel tele[],int i) //输入一个联系人的信息及序号
{
printf("%d %s %d %s %s %s %s %s\n",i,tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
void Print(tel tele[]) //仅输入联系人的信息
{
int i;
printf("%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
void New(tel tele[],tel *p) //新增联系人
{
FILE *p2,*p22;int c;char name3[12];char *original;int y;
void Input(tel tele[],tel *p,int i);
int Duplicate(char name[],tel tele[],char *original);
if((p2=fopen("E:\\tel.txt","a+"))==NULL)
{
printf("can't find the file!");
exit(0);
}
if((p22=fopen("E:\\tel.txt","a+"))==NULL)
{
printf("can't find the file!");
exit(0);
}
for(int i=0;i<n;i++)
{
fscanf(p22,"%s %d %s %s %s %s %s\n",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
printf("输入要增添的联系人姓名:\n");
scanf("%s",name3);
y=Duplicate(name3,tele,original);
printf("%d\n",y);
for(int i=n;;i++)
{
printf("输入要增添的联系人的信息:\n");
Input(tele,p,i);
fprintf(p2,"%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
Len++;
printf("结束添加请按0(按其他数字继续输入):");
scanf("%d",&c);
if(c==0)break;
}
fclose(p2);
}
void Edit(tel tele[],tel *p) //编辑联系人
{
int q;
FILE *p3,*p4;
char name1[20];
if((p3=fopen("E:\\tel.txt","r"))==NULL)
{
printf("can't find the file!");
exit(0);
}
if((p4=fopen("E:\\tele.txt","w"))==NULL)
{
printf("can't find the file!");
exit(0);
}
for(int i=0;i<n;i++)
{ fscanf(p3,"%s %d %s %s %s %s %s\n",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
printf("请输入修改者的名字:");
scanf("%s",name1);
for(int i=0;i<n;i++)
{
if(strcmp(name1,tele[i].name)==0)
{
printf("请输入修改的信息:"); scanf("%s%d%s%s%s%s%s",t1[1].name,&t1[1].group,t1[1].home,t1[1].mobile,t1[1].email,t1[1].add,t1[1].memo);
strcpy(tele[i].name,t1[1].name);
tele[i].group=t1[1].group;
strcpy(tele[i].home,t1[1].home); strcpy(tele[i].mobile,t1[1].mobile);strcpy(tele[i].email,t1[1].email);strcpy(tele[i].add,t1[1].add);
strcpy(tele[i].memo,t1[1].memo);
}
}
for(int i=0;i<n;i++)
{
printf("%s",tele[i].name);
fprintf(p4,"%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
fclose(p3);
fclose(p4);
unlink("E:\\tel.txt");
rename("E:\\tele.txt","E:\\tel.txt");
}
void Delect(tel tele[],tel *p) //删除联系人
{
FILE *p5,*p6;char name2[20];
if((p5=fopen("E:\\tel.txt","r"))==NULL)
{
printf("can't find the file!");
exit(0);
}
if((p6=fopen("E:\\tele.txt","w"))==NULL)
{
printf("can't find the file!");
exit(0);
}
for(int i=0;i<n;i++)
{ fscanf(p5,"%s %d %s %s %s %s %s\n",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
printf("请输入删除者的名字:");
scanf("%s",name2);
for(int i=0;i<n;i++)
{
if(strcmp(name2,tele[i].name)==0)
{
for(int c=i;c<n;c++)
{
strcpy(tele[c].name,tele[c+1].name);
tele[c].group=tele[c+1].group;
strcpy(tele[c].home,tele[c+1].home);
strcpy(tele[c].mobile,tele[c+1].mobile);
strcpy(tele[c].email,tele[c+1].email);
strcpy(tele[c].add,tele[c+1].add);
strcpy(tele[c].memo,tele[c+1].memo);
}
Len--;
}
}
for(int i=0;i<n+Len;i++)
{
printf("%s",tele[i].name); fprintf(p6,"%s %d %s %s %s %s %s\n",tele[i].name,tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
fclose(p5);
fclose(p6);
unlink("E:\\tel.txt");
rename("E:\\tele.txt","E:\\tel.txt");
}
void Input(tel tele[],tel *p,int i) //input
{ scanf("%s%d%s%s%s%s%s",tele[i].name,&tele[i].group,tele[i].home,tele[i].mobile,tele[i].email,tele[i].add,tele[i].memo);
}
int Duplicate(char name3[],tel tele[],char *original) //检查是否重名
{
for(int i=0;i<n;i++)
{
if(strcmp(name3,tele[i].name)==0)return 1;
else return 0;
}
}
int Copy() //备份通讯录
{
FILE *p7,*p8;
char ch;
if((p7=fopen("E:\\tel.txt","r"))==NULL)
{
printf("can't find the file!");
exit(0);
}
if((p8=fopen("E:\\tele.txt","w"))==NULL)
{
printf("can't find the file!");
exit(0);
}
int f=0;
while(!feof(p7))
{
ch=fgetc(p7);
fputc(ch,p8);
f++;
}
fclose(p7);fclose(p8);
if(f==0) return 0;
else return 1;
}
执行上述程序后的结果如图:
另外还有其他功能,都已经完善好了,就不再一一演示了。
这就是用C管理一个通讯录的程序。大家可以参考参考。希望能帮助到大家。
楠哥-------一心只想为IT行业添砖加瓦,却总是面向cv编程的程序员。
谢谢阅读,无误点赞,有误还望评论区指正。