You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pvqegfn3u/通讯录程序设计.c

221 lines
5.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#include<stdio.h>
#include<stdlib.h>
#include<string.h>//标准库函数
struct stu{//定义数据结构
char n[15];//姓名
char d[15];//籍贯
char y[15],g[15];//电话号码1和电话号码2
char e[20]; //邮箱
};
struct stu s[100];//定义结构体数组,方便下面的输入与输出
FILE *fp;//定义文件指针变量
int N;//定义整型变量选择功能
void luru();//录入信息功能
void xiuzheng();//为用户输出联系人的所以信息,用户决定是否真的需要修改
void xiugai();//修改信息功能
void shuchu();//浏览信息功能
void baocun(int t);//保存信息功能
void chazhao();//查找信息功能
void wel();//菜单界面
void main()
{
do{ system("cls");//清屏
wel();
scanf("%d",&N);
if(N==0)
break;
switch(N)
{
case 1:luru(); break;
case 2:shuchu(); break;
case 3:chazhao(); break;
case 4:xiuzheng(); break;
default:printf("输入错误!\n");
}
}while(1);//do-while实现程序的反复操作
}
void wel()
{
printf(" ");
printf(" 欢迎使用通讯录管理系统\n\n\n");
printf(" ");
printf(" *录入信息请按1\n\n");
printf(" ");
printf(" *浏览信息请按2\n\n");
printf(" ");
printf(" *查询信息请按3\n\n");
printf(" ");
printf(" *修改信息请按4\n\n");
printf(" ");
printf(" *程序终止请按0\n\n");
}
void luru()//实现录入信息功能
{
int i=0,v,t;//i为结构体数组的初始地址v为判断循环是否继续的条件t作为参数传给保存函数保存
do{ system("cls");//清屏
fflush(stdin);//清除内存缓冲区
printf("请输入第%d个联系人的名字\n",i+1);
gets(s[i].n);
fflush(stdin);
printf("请输入第%d个联系人的籍贯\n",i+1);
gets(s[i].d);
fflush(stdin);
printf("请输入第%d个联系人的电话号码1\n",i+1);
scanf("%s",&s[i].y);
fflush(stdin);
printf("请输入第%d个联系人的电话号码2\n",i+1);
scanf("%s",&s[i].g);
fflush(stdin);
printf("请输入第%d个联系人的邮箱\n",i+1);
gets(s[i].e);
fflush(stdin);
i=i+1;//为下一个循环准备
t=i;
system("cls");//清屏
printf("继续输入请按1,停止输入请按0\n");
scanf("%d",&v);
}while(v==1);
baocun(t);
printf("录入完毕\n");
system("pause");//暂停程序的执行
}
void shuchu()//信息浏览功能
{
int i,n;//i为结构体数组的地址变量
system("cls");
printf("姓名\t籍贯\t电话号码1\t\t电话号码2\t\t邮箱\n");
if((fp=fopen("通讯录.txt","r"))==NULL)//打开文件
{
printf("File open error!\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
{
fscanf(fp,"%s%s%s%s%s",s[i].n,s[i].d,&s[i].y,&s[i].g,s[i].e);//读完文件
}
fclose(fp);//关闭文件
for(n=0;n<=i;n++)
printf("%s\t%s\t%s\t\t%s\t\t%s\n",s[n].n,s[n].d,s[n].y,s[n].g,s[n].e);//输出文件里面的内容
system("pause");
}
void xiugai(int n)//修改内容
{ int b,k;//b为选择功能修改对应信息定义的变量k为判断修改是否继续定义的变量
do{
system("cls");
printf("请选择你要修改的内容\n");
printf("1:姓名 2:地址 3:电话号码1 4:电话号码2 5.邮箱\n");
scanf("%d",&b);
switch(b)
{
case 1: printf("输入你要修改的内容\n");scanf("%s",s[n].n); break;
case 2: printf("输入你要修改的内容\n");scanf("%s",s[n].d); break;
case 3: printf("输入你要修改的内容\n");scanf("%s",s[n].y); break;
case 4: printf("输入你要修改的内容\n");scanf("%s",s[n].g); break;
case 5: printf("输入你要修改的内容\n");scanf("%s",s[n].e); break;
default:printf("输入错误!\n");
}
printf("修改成功\n");
printf("继续修改请按1 退出修改请按0\n");
scanf("%d",&k);
if(k==0)
break;
}while(1);//对多项内容进行修改
}
void xiuzheng()//找到输入的联系人的地址进行修改
{ int i,n=0,k=0,t;
char c[20];
printf("请输入你需要修改信息的联系人的姓名\n");
scanf("%s",c);
if((fp=fopen("通讯录.txt","r+"))==NULL)//对文件进行读和写
{
printf("File open error!\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
{
fscanf(fp,"%s %s %s %s %s\n",s[i].n,s[i].d,s[i].y,s[i].g,s[i].e);
if(strcmp(c,s[i].n)==0)
{
n=i;
k++;
}
}
if(k==i)
{
printf("无该联系人\n");
}
printf("请确认联系人\n");
printf("姓名\t地址\t电话号码1\t电话号码2\t\t邮箱\n");
printf("%s\t%s\t%s\t%s\t\t%s\n",s[n].n,s[n].d,s[n].y,s[n].g,s[n].e);//输出用户所需联系人的所有信息
printf("确认修改请按1 退出修改请按2\n");
scanf("%d",&t);
if(t==1)
xiugai(n);
if(fclose(fp))//不修改信息退出
{
printf("关闭失败\n");
exit(0);
}
if((fp=fopen("通讯录.txt","w"))==NULL)
{
printf("File open error!\n");
exit(0);
}
for(n=0;n<i;n++)
fprintf(fp,"%s %s %s %s %s\n",s[n].n,s[n].d,s[n].y,s[n].g,s[n].e);
if(fclose(fp))
{
printf("关闭失败\n");
exit(0);
}
system("pause");
}
void chazhao()//信息查找功能
{
int i,n=0;//n为信息错误时的条件参数
char name[20];//定义字符数组输入信息
system("cls");
printf("请输入你需要查找的人的姓名、电话或邮箱\n");
scanf("%s",name);
if((fp=fopen("通讯录.txt","r"))==NULL)//读文件
{
printf("File open error!\n");
exit(0);
}
for(i=0;feof(fp)==0;i++)
{
fscanf(fp,"%s%s%s%s%s",s[i].n,s[i].d,s[i].y,s[i].g,s[i].e);
if(strcmp(name,s[i].n)==0||strcmp(name,s[i].e)==0||strcmp(name,s[i].y)==0||strcmp(name,s[i].g)==0)//判断输入的信息是否正确
{
printf("姓名 \t籍贯\t电话号码1\t\t电话号码2\t\t邮箱\n");
printf("%s\t%s\t%s\t\t%s\t\t%s\n",s[i].n,s[i].d,s[i].y,s[i].g,s[i].e);
}
else
n++;//信息错误
}
if(i==n)
printf("无该联系人,请输入正确的信息\n");
if(fclose(fp))
{
printf("关闭失败\n");
exit(0);
}
system("pause");
}
void baocun(int t)//保存信息功能
{
int i;
if((fp=fopen("通讯录.txt","a"))==NULL)
{ printf("error\n");
exit(0);
}
for(i=0;i<t;i++)
{
fprintf(fp,"%s %s %s %s %s\n",s[i].n,s[i].d,s[i].y,s[i].g,s[i].e);
}
if(fclose(fp))
{
printf("关闭失败\n");
exit(0);
}
}