#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct _Person
{
char num[20];//手机号
char name[20];//姓名
char QQ[20];//QQ号
char email[20];//邮箱
char address[50];//地址
}Person;//结构体别名叫Person
//打印联系人信息到屏幕
void Print_Person_Info(Person arr[],int n)
{
int i;
printf("%-10s%-15s%-15s%-20s%-20s\n","姓名","手机号","QQ","邮箱","地址");
//按格式输出到屏幕 固定宽度
for(i=0;i<n;i++)//遍历数组 依次打印
{
printf("%-10s",arr[i].name);
printf("%-15s",arr[i].num);
printf("%-15s",arr[i].QQ);
printf("%-20s",arr[i].email);
printf("%-20s\n",arr[i].address);
}
}
//添加新的联系人到结构体数组
int Add_Person_Info(Person arr[],int n)
{
system("cls");
printf("请输入联系人姓名:");
scanf("%s",arr[n].name);
printf("请输入联系人手机号:");
scanf("%s",arr[n].num);
printf("请输入联系人QQ号:");
scanf("%s",arr[n].QQ);
printf("请输入联系人邮箱:");
scanf("%s",arr[n].email);
printf("请输入联系人地址:");
scanf("%s",arr[n].address);
printf("添加成功!\n");
system("pause");
return n+1;//结构体数组长度+1
}
int Delete_Person_Info(Person arr[],int n)
{
int i,j;
char temp[20];
system("cls");
printf("请输入要删除的联系人姓名:");
scanf("%s",temp);
for(i=0;i<n;i++)//遍历结构体数组
{
if(!strcmp(temp,arr[i].name))//如果查找到 跳出循环
break;
}
if(i==n)//如果一直没有跳出循环 说明没有找到
{
printf("无该联系人!\n");
system("pause");
return n;//返回原人数
}
Print_Person_Info(&arr[i],1);
printf("是否删除Y/N?: ");
scanf("%s",temp);
if(!strcmp(temp,"Y")||!strcmp(temp,"y"))//如果选择Y
{
for(j=i;j<n;j++)//用后面的元素覆盖前面的
{
arr[j]=arr[j+1];
}
printf("删除成功!\n");
system("pause");
return n-1;//长度减一
}
printf("已取消删除!\n");
system("pause");
return n;
}
void Modify_Person_Info(Person arr[],int n)
{
int i;
char temp[20];
Person swap;
system("cls");
printf("请输入要修改的联系人姓名:");
scanf("%s",temp);
for(i=0;i<n;i++)
{
if(!strcmp(temp,arr[i].name))
break;
}
if(i==n)
{
printf("无该联系人!\n");
system("pause");
return ;
}
Print_Person_Info(&arr[i],1);
printf("请输入联系人手机号:");
scanf("%s",swap.num);
printf("请输入联系人QQ号:");
scanf("%s",swap.QQ);
printf("请输入联系人邮箱:");
scanf("%s",swap.email);
printf("请输入联系人地址:");
scanf("%s",swap.address);
printf("是否确认修改Y/N?: ");
scanf("%s",temp);
if(!strcmp(temp,"Y")||!strcmp(temp,"y"))
{
strcpy(swap.name,arr[i].name);
arr[i]=swap;
printf("修改成功!\n");
system("pause");
return ;
}
printf("已取消修改!\n");
system("pause");
}
void Save_Person_Info(Person stu[],int n)
{
int i;
FILE* pFile;
pFile= fopen("stu_info.dat","w+");
if(pFile==NULL)//文件打开失败 返回
{
return;
}
for(i=0;i<n;i++)//依次写入到文件
{
fwrite(&stu[i],1,sizeof(Person),pFile);
}
fclose(pFile);
}
int Read_Person_Info(Person stu[])
{
int i=0;
FILE* pFile;
pFile= fopen("stu_info.dat","r+");
if(pFile==NULL)
{
return 0;
}
while(fread(&stu[i++],1,sizeof(Person),pFile));//依次读取到结构体数组 直到文件读取完毕
fclose(pFile);
if(i>=1)
{
return i-1;
}
return 0;
}
void Search_Person_Info(Person arr[],int n)
{
int i,flag=0;
char temp[20];
system("cls");
printf("请输入要查询的联系人姓名:");
scanf("%s",temp);
for(i=0;i<n;i++)
{
if(!strcmp(temp,arr[i].name))//如果名字相同
{
Print_Person_Info(&arr[i],1);//输出信息
flag=1;
}
}
if(flag==0)
{
printf("无该联系人!\n");
system("pause");
return ;
}
system("pause");
}
void Search_Person_Num(Person arr[],int n)
{
int i,flag=0;
char temp[20];
system("cls");
printf("请输入要查询的联系人号码:");
scanf("%s",temp);
for(i=0;i<n;i++)
{
if(!strcmp(temp,arr[i].num))
{
Print_Person_Info(&arr[i],1);//如果号码相同显示
flag=1;
}
}
if(flag==0)
{
printf("无该联系人!\n");
system("pause");
return ;
}
system("pause");
}
int Main_Menu()
{
int choice;
system("cls");
printf("1:新增联系人\n");
printf("2:删除联系人\n");
printf("3:修改联系人\n");
printf("4:按名字查询\n");
printf("5:按号码查询\n");
printf("6:按姓名显示\n");
printf("7:按号码显示\n");
printf("0:退出\n");
printf("请输入选择:");
scanf("%d",&choice);
while(choice>7||choice<0)//判断是否输入正确
{
printf("请重新选择:");
scanf("%d",&choice);
}
return choice;
}
void Sort_Person_Name(Person arr[],int n)//按名字进行冒泡排序
{
int i,j;
Person temp;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)//冒泡排序
{
if(strcmp(arr[i].name,arr[j].name)<0)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
void Sort_Person_Num(Person arr[],int n)//按号码进行冒泡排序
{
int i,j;
Person temp;
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(strcmp(arr[i].num,arr[j].num)<0)
{
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}
int main()
{
int choice;//记录选择
Person per[100];//结构体数组
int NUM=0;//记录结构体数组长度
NUM=Read_Person_Info(per);//读取文件
system("mode con: cols=100 lines=30");//设置屏幕大小
do
{
choice=Main_Menu();//获取用户选择
switch(choice)//根据选择进入相应功能
{
case 1:
NUM=Add_Person_Info(per,NUM);//添加
break;
case 2:
NUM=Delete_Person_Info(per,NUM);//删除
break;
case 3:
Modify_Person_Info(per,NUM);//修改
break;
case 4:
Search_Person_Info(per,NUM);//按名字查找
break;
case 5:
Search_Person_Num(per,NUM);//按号码查找
break;
case 6:
system("cls");//清屏
Sort_Person_Name(per,NUM);//对名字排序
Print_Person_Info(per,NUM);//显示信息
system("pause");//暂停
break;
case 7:
system("cls");
Sort_Person_Num(per,NUM);//对号码排序
Print_Person_Info(per,NUM);
system("pause");
break;
}
}while(choice!=0);
Save_Person_Info(per,NUM);//保存到文件
return 0;
}
通讯录管理系统的设计与实现
最新推荐文章于 2024-07-02 10:19:09 发布