#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include "addressList.h"
int n=0; //记录数据联系人数量
FILE *fp; //定义文件
/************************************************************************
函数名:readfile
功能: 读取文件
参数:
返回值:空
************************************************************************/
void readfile()
{
if((fp=fopen("c:\通讯录.txt","r"))==NULL)
{
printf("nttt 通讯录文件不存在");
if ((fp=fopen("通讯录2.txt","w"))==NULL)
{
printf("ntt建立失败");
exit(0);
}
else
{
printf("nt-----------------欢迎使用通讯录管理系统------------------");
printf("nt 通讯录文件已建立 ");
printf("nt 按任意键进入主菜单 ");
printf("nt---------------------------------------------------------");
getch();
return ;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指针移动到文件末尾*/
if (ftell(fp)>0) /*文件不为空*/
{
rewind(fp); /*文件位置指针移动到文件开始位置*/
for (n=0;!feof(fp) && fread(&MESS[n],sizeof(struct message),1,fp);n++);
printf("nt---------- 欢迎使用通讯录管理系统 ----------------");
printf("nt 文件导入成功 ");
printf("nt 按任意键返回主菜单 ");
printf("nt---------------------------------------------------------");
getch();
return;
}
printf("nt------------ 欢迎使用通讯录管理系统 --------------");
printf("nt 文件导入成功 ");
printf("nt 通讯录文件中无任何纪录 ");
printf("nt 按任意键返回主菜单 ");
printf("nt---------------------------------------------------------");
getch();
return;
}
/************************************************************************
函数名: mainMenu
功能: 文件主菜单
参数:
返回值:空
************************************************************************/
void mainMenu()
{
char c;
system("cls");
printf("ntt|------- 欢迎您使用通讯录管理系统 -----|");
printf("ntt| 1-添加联系人 2-查询和显示联系人 |");
printf("ntt| 3-删除联系人 4-修改联系人 |");
printf("ntt| 5-保存退出 0-不保存退出 |");
printf("ntt|------------------------------------------------|");
printf("ntt请选择您所所要的服务:");
c=getch();
switch (c)
{
case '1':add();break;
case '2':findMessage();break;
case '3':del();break;
case '4':modify();break;
case '5':writefile();break;
case '0':exit(0);
default:mainMenu();
}
}
/************************************************************************
函数名: add
功能:添加新联系人
参数:
返回值:空
************************************************************************/
void add()
{
printf("ntt------------------ 请输入联系人信息 --------------------n");
printf("ntt输入联系人姓名:");
scanf("%s",MESS[n].name);
printf("ntt输入联系人电话号码:");
scanf("%s",MESS[n].phone);
printf("ntt输入联系人QQ:");
scanf("%s",MESS[n].QQ);
printf("ntt输入联系人邮箱:");
scanf("%s",MESS[n].email);
printf("ntt输入联系人地址:");
scanf("%s",MESS[n].addr);
n++;
printf("ntt是否继续添加联系人?(Y/N):"); /*是否继续输入联系人.*/
if (getch()=='y')
{
system("cls");
add();
}
return;
}
/************************************************************************
函数名:writefile
功能: 联系人写入文件
参数:
返回值:空
************************************************************************/
void writefile() /*联系人写入文件*/
{
int i;
if ((fp=fopen("c:\通讯录.txt","w"))==NULL)
{
printf("ntt文件打开失败");
}
for (i=0;i<n;i++)
{
if (fwrite(&MESS[i],sizeof(struct message),1,fp)!=1)
{
printf("ntt写入文件错误!n");
}
}
fclose(fp); /*关闭文件*/
printf("nt------------------------------------------------------"); /*输出提示信息*/
printf("ntt通讯录文件已保存");
printf("ntt谢谢使用,欢迎再次使用!n");
printf("ntt按任意键退出程序ntt"); /*输出完毕*/
exit(0);
printf("nt------------------------------------------------------");
}
/************************************************************************
函数名:findMessage
功能:查询联系人选择菜单
参数:
返回值:空
************************************************************************/
void findMessage()
{
char c;
system("cls");
printf("ntt------------------- 显示和查询联系人 ------------------");
printf("ntt| 1-显示所有 2-按姓名查询 |");
printf("ntt| 3-按电话查询 4-返回主菜单 |");
printf("ntt|------------------------------------------------------");
printf("ntt请选择您所所要的服务:");
c=getch();
switch (c)
{
case '1':printMessage();break; /*显示所有号码*/
case '2':findMessage_name();break; /*调用按姓名查询函数*/
case '3':findMessage_phone();break; /*调用按号码查询函数*/
case '4':mainMenu();break; /*主菜单*/
}
}
/************************************************************************
函数名:printMessage
功能:显示所有联系人函数
参数:
返回值:空
************************************************************************/
void printMessage()
{
int i;
system("cls");//清楚屏幕
if(n!=0)
{
printf("ntt----------欢迎您查询通讯录所有联系人信息-------------");
for (i=0;i<n;i++) /*依次序显示*/
{
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt QQ : %s",MESS[i].QQ);
printf("ntt邮箱: %s",MESS[i].email);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt--------------------------------------------------");
if (i+1<n)
{
printf("ntt-----------------------");
//system("pause");//返回错误信息
}
}
printf("ntt---------------------------------------------");
}
else //无联系人
{
("ntt通讯录中无任何纪录");
}
printf("ntt按任意键返回主菜单:");
getch();
return;
}
/************************************************************************
函数名:findMessage_phone()
功能:按号码查询函数
参数:
返回值:空
************************************************************************/
void findMessage_phone()
{
int mark=0;
int i;
char phone[15];
printf("ntt------------------- 按电话查找 -------------------------");
printf("ntt请输入电话号码:");
scanf("%s",phone);
for(i=0;i<n;i++)
{
if (strcmp(MESS[i].phone,phone)==0)//对比查找函数
{
printf("ntt------------ 以下是您查找的学生信息 ------------");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt QQ : %s",MESS[i].QQ);
printf("ntt邮箱: %s",MESS[i].email);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt------------------------------------------------");
printf("ntt按任意键返回主菜单:");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("ntt没有找到联系人的信息");
printf("ntt按任意键返回主菜单");
getch();
return;
}
}
/************************************************************************
函数名:findMessage_name()
功能:按姓名查询
参数:
返回值:空
************************************************************************/
void findMessage_name()
{
int mark=0;
int i;
char name[20];
printf("ntt----------------按姓名查找 --------------------");
printf("ntt请输入您要查找的姓名:");
scanf("%s",name);
for(i=0;i<n;i++)
{
if (strcmp(MESS[i].name,name)==0)
{
printf("ntt------------ 以下是您查找的联系人信息 ---------------");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt QQ : %s",MESS[i].QQ);
printf("ntt邮箱: %s",MESS[i].email);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt---------------------------------------------------");
mark++;
getch();
return;
}
}
if (mark==0)
{
printf("ntt没有找到联系人的信息");
printf("ntt按任意键返回主菜单");
getch();
return;
}
}
/************************************************************************
函数名:del()
功能:删除联系人菜单
参数:
返回值:空
************************************************************************/
void del()
{
char c;
if(n==0) /*如果通讯录中没有一个记录输出以下部分*/
{
printf("ntt对不起,文件中无任何纪录");
printf("ntt按任意键返回主菜单");
getch();
return;
}
system("cls"); /*清屏*/
printf("ntt----------------- 删除菜单 ----------------------");
printf("ntt| 1-删除所有 2-删除单个 |");
printf("ntt| 3-返回主菜单 |");
printf("ntt|-------------------------------------------------");
printf("ntt请选择您所所要的服务:");
c=getch();
switch (c)
{
case '1':del_all();break;
case '2':del_dange();break;
case '3':mainMenu();break;
default:mainMenu();break;
}
}
/************************************************************************
函数名:del_dange
功能:删除单个联系人
参数:
返回值:空
************************************************************************/
void del_dange()
{
char c;
printf("nt----------------------------------------------------------");
printf("ntt 1-按姓名删除 2-按电话删除");
printf("ntt请选择您所所要的服务:");
printf("nt----------------------------------------------------------");
c=getch();
switch (c)
{
case '1':del_name();break;
case '2':del_phone();break;
}
}
/************************************************************************
函数名:del_all
功能:删除所有联系人
参数:
返回值:空
************************************************************************/
void del_all()
{
printf("ntt确认删除?(y/n)");
if (getch()=='y')
{
fclose(fp);
if ((fp=fopen("通讯录.txt","w"))==NULL) /*文件空输出*/
{
printf("ntt不能打开文件,删除失败");
readfile();
}
n=0;
printf("ntt纪录已删除,按任意键返回主菜单");
getch();
return;
}
else
return;
}
/************************************************************************
函数名:del_name()
功能:按姓名删除联系人
参数:
返回值:空
************************************************************************/
void del_name()
{
int i,m,mark=0,a=0;
char name[20];
printf("ntt请输入要删除联系人姓名:");
scanf("%s",name); /*键盘输入姓名*/
for (i=a;i<n;i++)
{
if (strcmp(MESS[i].name,name) == 0) //对比字符串查找到要删除的联系人
{
printf("ntt以下是您要删除的联系人纪录:");
printf("ntt--------------------------------");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt--------------------------------");
printf("ntt是否删除?(y/n)");
if (getch()=='y') // 实现删除功能
{
for (m=i;m<n-1;m++)
MESS[m]=MESS[m+1]; /*将通讯录的想前移*/
n--;
mark++;
printf("ntt删除成功");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
del_name(); /*继续调用删除函数*/
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("ntt没有该联系人的纪录");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
del_name();
return;
}
}
/************************************************************************
函数名:del_phone
功能:按电话号码删除联系人
参数:
返回值:空
************************************************************************/
void del_phone()
{
int i,m,mark=0;
char phone[20];
printf("ntt请输入要删除联系人电话号码:");
scanf("%s",phone);
if(n==0)
{
printf("ntt对不起,文件中无任何纪录");
printf("ntt按任意键返回主菜单");
getch();
return;
}
for (i=0;i<n;i++)
{
if (strcmp(MESS[i].phone,phone)==0)
{
printf("ntt以下是您要删除的联系人纪录:");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt是否删除?(y/n)");
if (getch()=='y')
{
for (m=i;m<n-1;m++) //递推替换实现删除
MESS[m]=MESS[m+1];
n--;
mark++; //记录删除次数
printf("ntt删除成功");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
del_phone();
return;
}
else
return;
}
continue;
}
if (mark==0)
{
printf("ntt没有该联系人的纪录");
printf("ntt是否继续删除?(y/n)");
if (getch()=='y')
return ;
}
}
/************************************************************************
函数名:modify
功能:修改联系人
参数:
返回值:空
************************************************************************/
void modify() /*修改函数*/
{
char c;
if(n==0)
{
printf("ntt对不起,文件中无任何纪录");
printf("ntt按任意键返回主菜单");
getch();
return;
}
system("cls");
printf("ntt-----------------修改联系人菜单-----------------------");
printf("ntt| 1-按姓名修改 2-按电话修改 |");
printf("ntt| 任意键-按返回主菜单 |");
printf("ntt------------------------------------------------------");
c=getch();
switch(c)
{
case '1':modify_name();break;
case '2':modify_phone();break;
default:mainMenu();break;
}
}
/************************************************************************
函数名:modify_name
功能: 按姓名修改
参数:
返回值:空
************************************************************************/
void modify_name()
{
char c;
int i,mark=0;
char name[20];
printf("ntt请输入要修改的联系人姓名:");
scanf("%s",name);
if(n==0)
{
printf("ntt文件中无任何联系人");
printf("ntt按任意键返回主菜单");
getch(); mark++;
return;
}
for(i=0;i<n;i++)
{
if(strcmp(MESS[i].name,name)==0)
{
printf("ntt以下是您要修改的联系人信息");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt QQ : %s",MESS[i].QQ);
printf("ntt邮箱: %s",MESS[i].email);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt是否修改(y/n)");
if(getch()=='y')
{
printf("nt------------请选择修改信息---------------");
printf("nt 1-修改姓名 2-修改电话 ");
printf("nt 3-修改QQ 4-修改邮箱 ");
printf("nt 5-修改地址 ");
printf("nt-----------------------------------------");
printf("nt请选择您所所要的服务:");
scanf("%s",&c);
switch(c)
{
case '1': printf("nt请输入新姓名: ");
scanf("%s",MESS[i].name);break;
case'2':printf("nt请输入新电话: %s");
scanf("%s",MESS[i].phone);break;
case'3':printf("nt请输入新QQ: ");
scanf("%s",MESS[i].QQ);break;
case'4':printf("nt请输入新邮箱: ");
scanf("%s",MESS[i].email);break;
case'5':printf("nt请输入新地址: ");
scanf("%s",MESS[i].addr);break;
}
}
}
}
if(mark==0)
{
printf("ntt没有找到联系人信息");
printf("nt是否继续修改?(Y/N):");
if(getch()=='y')
modify_name();
return;
}
}
/************************************************************************
函数名:modify_phone
功能:按电话修改
参数:
返回值:空
************************************************************************/
void modify_phone()
{
char c,phone[15];
int i,mark=0;
printf("ntt请输入要修改联系人的号码:");
scanf("%s",phone);
if(n==0)
{
printf("ntt文件中无任何联系人");
printf("ntt按任意键返回主菜单");
getch();mark++;
return;
}
for(i=0;i<n;i++)
{
if(strcmp(MESS[i].phone,phone)==0)
{
printf("ntt以下是您要修改的联系人信息");
printf("ntt姓名: %s",MESS[i].name);
printf("ntt电话: %s",MESS[i].phone);
printf("ntt QQ : %s",MESS[i].QQ);
printf("ntt邮箱: %s",MESS[i].email);
printf("ntt地址: %s",MESS[i].addr);
printf("ntt是否修改(y/n)");
if(getch()=='y')
{
printf("nt------------请选择修改信息---------------");
printf("nt 1-修改姓名 2-修改电话 ");
printf("nt 3-修改QQ 4-修改邮箱 ");
printf("nt 5-修改地址 ");
printf("nt-----------------------------------------");
printf("nt请选择您所所要的服务:");
scanf("%s",&c);
switch(c)
{
case'1': printf("nt请输入新姓名: ");
scanf("%s",MESS[i].name);break;
case'2':printf("nt请输入新电话: ");
scanf("%s",MESS[i].phone);break;
case'3':printf("nt请输入新QQ: ");
scanf("%s",MESS[i].QQ);break;
case'4':printf("nt请输入新邮箱: ");
scanf("%s",MESS[i].email);break;
case'5':printf("nt请输入新地址: ");
scanf("%s",MESS[i].addr);break;
}
}
}
}
if(mark==0)
{
printf("nt没有该联系人信息");
printf("nt是否继续修改?(Y/N):");
if(getch()=='y')
modify_phone();
return;
}
}