third commit

master
unknown 6 years ago
parent e21ce871b3
commit 21f3d2958a

@ -0,0 +1,485 @@
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>//为了使用gitch函数调用此头文件
#define Bytes sizeof(struct linkman) //宏定义结构体字节数,用于文件读写
#define FORMAT "\t%-10s%-10s%-15s%-15s%-20s\n\n" //宏定义输出格式
#define DATA peo[i].name,peo[i].birthplace,peo[i].tel_1,peo[i].tel_2,peo[i].email //宏定义结构体输出列表
struct linkman //定义联系人结构体类型
{
char name[10];//联系人姓名
char birthplace[10];//联系人籍贯
char tel_1[15];//联系人的电话号码1
char tel_2[15];//联系人的电话号码2
char email[20];//邮箱地址
};
struct linkman peo[100];//定义联系人人数上限
void addman();
void queryman();
void delman();
void update();
void outputman();
void menu();
void menu()//菜单模块
{
system("cls");//清屏
printf("\n\t\t**********通讯录管理系统*********\n");
printf("\t\t┌-------------------------------┐\n");
printf("\t\t│ 1.添加联系人 │\n");
printf("\t\t│ 2.查询联系人 │\n");
printf("\t\t│ 3.删除联系人 │\n");
printf("\t\t│ 4.修改联系人信息 │\n");
printf("\t\t│ 5.输出联系人列表 │\n");
printf("\t\t│ 0.退出 │\n");
printf("\t\t└-------------------------------┘\n");
printf("\t\t请您选择功能(0-5):");
}
void tou() //联系人列表头部图案
{ system("cls");
printf("\n");
printf("*************************************联系人列表***************************************\n\n");
printf("\t姓名\t 籍贯\t 电话号码1\t 电话号码2\t 电子邮箱\n\n");
}
void wei() //联系人列表尾部图岸
{
printf("\n**************************************************************************************\n\n");
}
int main ()//主函数
{
system("mode con: cols=86 lines=30");//设置窗口大小
int n;
menu();//调用菜单函数模块
scanf("%d",&n);//输入选项
while(n)//当n=0时退出菜单结束程序
{
switch(n)
{
case 1:
addman();//当n=1时进入添加联系人模块
getch();
break;
case 2:
queryman();//当n=1时进入添加联系人模块
getch();
break;
case 3:
delman();//当n=1时进入添加联系人模块
getch();
break;
case 4:
update();//当n=1时进入添加联系人模块
getch();
break;
case 5:
outputman();//当n=1时进入添加联系人模块
getch();
break;
default:break;
}
menu();//各功能运行完break之后 又进入菜单界面,直到退出
scanf("%d",&n);
}
}
void addman()//添加联系人函数模块
{
FILE *p1; //定义文件指针
int i,n,count=0; // count为联系人个数
if ((p1=fopen("D:\\我的项目\\linkman.txt","a+"))==NULL) //打开linkman文件
{
printf("不能打开此文件");
exit(0);
}
while(!feof(p1))//检测流上的文件结束符 即文件结束返回非0值。文件未结束返回0值
{
if(fread(&peo[count],Bytes,1,p1)==1) //从文件流中读数据,如果不成功或读到文件末尾 ,则返回 0
count++; //如果成功读取了 一次 count就加一
}
fclose(p1); //关闭文件
if(count==0)
printf("\n\t联系人列表为空!\n\n");
else
{
system("cls"); //清屏
outputman();//调用联系人输出模块,输出所有人的信息
}
if ((p1=fopen("D:\\我的项目\\linkman.txt","wb"))==NULL)//以二进制方式打开linkman文件 ,准备将联系人写入文件
{
printf("\t不能打开联系人列表\n");
return;
}
printf("\t是否添加联系人1 or 0):");
scanf("%d",&n);
while(n==1)
{
printf("\t请输入信息:\n\n");
printf("\t姓名: ");//输入姓名
scanf("%s",&peo[count].name);
for(i=0;i<count;i++)//利用循环判断该联系人是否已经存在
{
if(strcmp(peo[i].name,peo[count].name)==0)
{
printf("\n\t该联系人已存在!\n");
getch();
fclose(p1); //关闭文件
return; //重新输入联系人
}
}
printf("\n\t籍贯: "); //输入籍贯
scanf("%s",&peo[count].birthplace);
printf("\n\t电话号码1: "); //输入number1
scanf("%s",&peo[count].tel_1);
printf("\n\t电话号码2: "); //输入number2
scanf("%s",&peo[count].tel_2);
printf("\n\t电子邮箱: "); //输入邮箱
scanf("%s",&peo[count].email);
printf("\n\t%s 添加成功!\n",peo[count].name);
count++; //联系人数目加一
n=0;//输入完毕后退出添加联系人功能
}
for(i=0;i<count;i++) fwrite(&peo[i],Bytes,1,p1);//循环重新全部写入文件
fclose(p1);
return;
}
void queryman()//查询联系人函数模块
{
FILE *p1;
int i,n=1,m,count=0,flag=1;
if ((p1=fopen("D:\\我的项目\\linkman.txt","rb"))==NULL)//以二进制方式打开linkman文件
exit(0);
while(!feof(p1))//检测流上的文件结束符 即文件结束返回非0值。文件未结束返回0值
if(fread(&peo[count],Bytes,1,p1)) //将文件中的数据读到结构体中
count++;//读取成功一次 联系人数量加一
fclose(p1); //读取后关闭文件
if(count==0)
{
printf("联系人列表为空!\n");
printf("请按任意键继续");
return;
}
while(n)// n变量为是否继续查询的判断条件 所以先初始化n=1
{
outputman();//先输出联系人列表
while(flag!=0)//flag为是否继续查询 当选择返回时 令flag=0退出查询方式功能
{ system("cls");//清屏
printf("\n\t\t**********查询方式***********\n");
printf("\t\t┌-------------------------------┐\n");
printf("\t\t│ 1.姓名 │\n");
printf("\t\t│ 2.籍贯 │\n");
printf("\t\t│ 3.手机号码1 │\n");
printf("\t\t│ 4.查找手机号码2 │\n");
printf("\t\t│ 5.电子邮箱 │\n");
printf("\t\t│ 0.返回 │\n");
printf("\t\t└-------------------------------┘\n");
printf("\n\t\t请选择查询方式:");
scanf("\t\t%d",&m);//选择查询式
if(m==1)//查询姓名
{
char name[15];
printf("\t\t请输入名字:");
scanf("%s",name);
for(i=0;i<=count;++i)
{
if(strcmp(name,peo[i].name)==0)
{ tou();
printf(FORMAT,DATA);//输出查询到联系人
getch(); //按任意键继续操作
}
if(count==i)//当循环到最后一个时还没有找到要查询的人执行该if语句
{
printf("\n\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
}
}
}
if(m==2)//查询籍贯
{
char bp[15];
printf("\t\t请输入籍贯:");
scanf("%s",bp);
for(i=0;i<=count;i++)
{
if(strcmp(bp,peo[i].birthplace)==0)
{ tou();
printf(FORMAT,DATA);
}
if(count==i)
{
printf("\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
}
}
}
if(m==3)//查询电话号码一
{
char num1[15];
printf("\t\t请输入电话号码:");
scanf("%s",num1);
for(i=0;i<=count;i++)
{
if(strcmp(num1,peo[i].tel_1)==0)
{ tou();
printf(FORMAT,DATA);
}
if(count==i)
{
printf("\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
}
}
}
if(m==4)//查询电话号码2
{
char num2[15];
printf("\t\t请输入电话号码:");
scanf("%s",num2);
for(i=0;i<=count;i++)
{
if(strcmp(num2,peo[i].tel_2)==0)
{ tou();
printf(FORMAT,DATA);
}
if(count==i)
{
printf("\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
}
}
}
if(m==5)//查询邮箱
{
char mail[20];
printf("\t\t请输入邮箱地址:");
scanf("%s",mail);
for(i=0;i<=count;i++)
{
if(strcmp(mail,peo[i].email)==0)
{ tou();
printf(FORMAT,DATA);
}
if(count==i)
{
printf("\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
}
}
}
if(m==0) //选择返回时
{
flag=0;//退出查询方式功能
n=0;//退出查询功能
}
}
}
}
void update() //修改联系人函数模块
{
FILE *p1;//定义文件指针
int i,m,n;
int flag=1,count=0,j=1;
char name[15];
if ((p1=fopen("D:\\我的项目\\linkman.txt","r+"))==NULL)//以二进制方式打开linkman文件
exit(0);
while(!feof(p1))//检测流上的文件结束符 即文件结束返回非0值。文件未结束返回0值
if(fread(&peo[count],Bytes,1,p1)==1) //将文件中的数据读到结构体中
count++;//每成功读取一次联系人数量加一
fclose(p1); //关闭文件
if(count==0)
{
printf("\t\t联系人列表为空!\n");
return;
}
while(j==1)//j变量为判断是否继续修改的判断条件
{
outputman();//先输出联系人列表
printf("请输入想要修改的联系人的名字:");
scanf("%s",name);
for(i=0;i<count;++i)
{
if(strcmp(name,peo[i].name)==0)
{
printf("\n\t\t已找到联系人!\n\n");
printf("\t\t是否修改1 or 0");
scanf("%d",&n);
if(n==0)// n量为判断是否修改的判断条件
{ j=0;//如果不修改就退出修改功能
break;
}
while(n==1)
{
while(flag==1)//flag变量为判断是否修改其他信息的判断条件
{
system("cls");//清屏
printf("\n\t\t************选择修改项************\n");
printf("\t\t┌-------------------------------┐\n");
printf("\t\t│ 1.修改姓名 │\n");
printf("\t\t│ 2.修改籍贯 │\n");
printf("\t\t│ 3.修改手机号码1 │\n");
printf("\t\t│ 4.查找手机号码2 │\n");
printf("\t\t│ 5.修改电子邮箱 │\n");
printf("\t\t│ 0.返回 │\n");
printf("\t\t└-------------------------------┘\n");
printf("\n\t请选择功能前的数字:");
scanf("%d",&m);//选择修改方式
if(m==1)//修改姓名
{
printf("\n\t\t请输入要修改的信息:");
scanf("%s",&peo[i].name);
printf("\n\t\t修改成功!\n");
getch();
}
if(m==2)//修改籍贯
{
printf("\n\t\t请输入要修改的信息:");
scanf("%s",&peo[i].birthplace);
printf("\n\n\t\t修改成功!\n");
getch();
}
if(m==3)//修改电话号码1
{
printf("\n\t\t请输入要修改的信息:");
scanf("%s",&peo[i].tel_1);
printf("\n\t\t修改成功!\n");
getch();
}
if(m==4)//修改电话号码2
{
printf("\n\t\t请输入要修改的信息:");
scanf("%s",&peo[i].tel_2);
printf("\n\t\t修改成功!\n");
getch();
}
if(m==5)//修改邮箱地址
{
printf("\n\t\t请输入要修改的信息:");
scanf("%s",&peo[i].email);
printf("\n\t\t修改成功!\n");
getch();
}
if(m==0)
{
n=0;//退出修改功能
}
printf("\n\t\t继续修改还是退出1 or 0");
scanf("%d",&flag);
if(flag==0) n=0,j=0;//退出修改功能
}
}
}
}
if(flag==0)break;
if(i==count)// 当循环到最后一个时还没有找到要查询的人执行该if语句
{
printf("\n\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
system("cls");
outputman;
}
}//然后继续选择要修改的人
if((p1=fopen("D:\\我的项目\\linkman.txt","wb"))==NULL)// 循环重新全部写入文件
return;
for(i=0;i<count;i++)
fwrite(&peo[i],Bytes,1,p1);
fclose(p1);
}
void delman()
{
FILE *p1;
int i,j,m=1,k=1,count=0;
char name[15];
if((p1=fopen("D:\\我的项目\\linkman.txt","r+"))==NULL) //读取文件信息
return;
while(!feof(p1))
if(fread(&peo[count],Bytes,1,p1)==1)
count++;
fclose(p1);
if(count==0)
{
printf("联系人列表为空");
return;
}
outputman();
while(m==1) //m为是否继续删除的判断条件
{ system("cls");
outputman();
printf("\t\t请输入想要删除的联系人的名字:");
scanf("%s",&name);
for(i=0;i<=count;++i)
{
if(strcmp(name,peo[i].name)==0)
{
printf("\n\t\t\t已找到该联系人!\n\n\t\t\t是否删除0 or 1):");
scanf("%d",&k);
if(k==1)//k为是否删除改联系人的判断条件
{
for(j=i;j<count;j++)//从此联系人开始,用后一个人的信息掩盖前一个人的信息
peo[j]=peo[j+1];
count--;//联系人减数一
if((p1=fopen("D:\\我的项目\\linkman.txt","wb"))==NULL)
return;
for(j=0;j<count;j++)//重新全部写入文件
fwrite(&peo[j],Bytes,1,p1);
fclose(p1);
printf("\n\t\t\t删除成功!");
return ;
}
if(k==0) break;
}
if(i==count)
{
printf("\n\t\t\t该联系人不存在!\n\t\t\t请按任意键重新输入");
getch();
system("cls");
outputman();
}
}
return;
}
}
void outputman()//输出所有联系人函数模块
{
FILE *p1;
int i,count=0;
if ((p1=fopen("D:\\我的项目\\linkman.txt","rb"))==NULL)//以二进制方式打开linkman文件
exit(0);
while(!feof(p1))//判断是否到达文件尾部
if(fread(&peo[count],Bytes,1,p1)==1) //将文件中的数据读到结构体中
count++;
fclose(p1);
tou();
for(i=0;i<count;i++)
printf(FORMAT,DATA);//出去全部联系人
wei();
}

Binary file not shown.
Loading…
Cancel
Save