您的位置:首页 > 其它

简易通讯录

2016-03-18 20:49 295 查看
//C语言代码
// Communicate.h
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

typedef struct use
{
char name[10];
char sex[2];
char age[10];
char phone[20];
char addr[20];
}users;

#define MAX 1000   //定义最大的人数
int i_Size;       //记录实际的人数
users use[MAX];   //用户信息数组

void dis_main_menu()//显示主菜单
{
printf("\n    通讯录管理系统     \n");
printf("-------------------------\n");
printf("  1:添加联系人信息      \n");
printf("  2:删除指定联系人信息  \n");
printf("  3:查找指定联系人信息  \n");
printf("  4:修改指定联系人信息  \n");
printf("  5:显示指定联系人信息  \n");
printf("  6:清空所有联系人信息  \n");
printf("  0:退出系统            \n");
printf("-------------------------\n");
}

void input(users use[])//输入信息
{
int i=0;
printf("请依次输入用户的姓名、性别、年龄、电话、住址:\n");
for(i=0;i<i_Size;i++)
{
printf("用户%d:",i+1);
scanf("%s%s%d%s%s%s",use[i].name,use[i].sex,&use[i].age,use[i].phone,use[i].addr);
}
}
void save(users use[])//存储
{
FILE *fp;
int i=0;
if((fp=fopen("c:\\userfile.dat","wb"))==NULL)//以写方式打开文件
{
printf("save 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
exit (1);
}
for(i=0;i<i_Size;i++)
{
if(fwrite(&use[i],sizeof(users),1,fp)!=1)
{
printf("存入失败,请按任意键退出\n");
exit (1);
}
}
fclose(fp);
}

int input_new()//主菜单1:添加新用户
{
printf("\n请输入实际人数:");
scanf("%d",&i_Size);
input(use);
save(use);
return i_Size;
}

void dis_search_menu()//用户信息查询菜单
{
printf("\n用户信息查询 \n");
printf("---------------\n");
printf(" 1:按姓名查询 \n");
printf(" 2:按性别查询 \n");
printf(" 3:按年龄查询 \n");
printf(" 4:按电话查询 \n");
printf(" 5:按住址查询 \n");
printf(" 0:退出查询   \n");
printf("---------------\n");
}
int search_name(char name[10])//按姓名查询
{
int i=0;
for(i=0;i<i_Size;i++)
{
if(!strcmp(name,use[i].name))
{
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
break;
}
}
if(i==i_Size)
{
printf("姓名输入有误!没有该用户!\n");
return i;
}
}
int search_sex(char sex[2])//按性别查询
{
int i=0;
for(i=0;i<i_Size;i++)
{
if(!strcmp(sex,use[i].sex))
{
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
break;
}
}
if(i==i_Size)
{
printf("性别输入有误!没有该用户!\n");
return i;
}
}
int search_age(char age[10])//按年龄查询
{
int i=0;
for(i=0;i<i_Size;i++)
{
if(!strcmp(age,use[i].age))
{
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
break;
}
}
if(i==i_Size)
{
printf("年龄输入有误!没有该用户!\n");
return i;
}
}
int search_phone(char phone[20])//按电话查询
{
int i=0;
for(i=0;i<i_Size;i++)
{
if(!strcmp(phone,use[i].phone))
{
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
break;
}
}
if(i==i_Size)
{
printf("电话输入有误!没有该用户!\n");
return i;
}
}
int search_addr(char addr[20])//按住址查询
{
int i=0;
for(i=0;i<i_Size;i++)
{
if(!strcmp(addr,use[i].addr))
{
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
break;
}
}
if(i==i_Size)
{
printf("住址输入有误!没有该用户!\n");
return i;
}
}

void delete_information()  //主菜单2:删除指定联系人信息
{
int i=0;
char use_name[10];
FILE *fp;
if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
{
printf("delete_information 函数打开文件c:\\userfile.dat!失败,请按任意键退出\n");
exit (1);
}
return;
printf("请输入需要删除的用户姓名:");
scanf("%s",use_name);
i=search_name(use_name);      //查找需要删除信息的用户
use[i].name==0;
use[i].sex==0;
use[i].age==0;
use[i].phone==0;
use[i].addr==0;
i_Size=i-1;
fwrite(&use[i_Size],sizeof(users),i_Size,fp);   //将删除后的信息存入文件
fclose(fp);

}

void search()  //主菜单3:查询信息
{
int select=0,flag=1;
char name[10];
char sex[2];
char age[10];
char phone[20];
char addr[20];
while(flag)
{
dis_search_menu();
printf("请输入选择的查询选项0--5:");
scanf("%d",&select);
switch(select)
{
case 1:
printf("请输入查询的姓名:");
scanf("%s",name);
search_name(name);
break;
case 2:
printf("请输入查询的性别:");
scanf("%s",sex);
search_sex(sex);
break;
case 3:
printf("请输入查询的年龄:");
scanf("%s",age);
search_age(age);
break;
case 4:
printf("请输入查询的电话:");
scanf("%s",phone);
search_phone(phone);
break;
case 5:
printf("请输入查询的住址:");
scanf("%s",addr);
search_addr(addr);
break;
case 0:
printf("退出查询!\n");
break;
default:
printf("输入有误,请重新选择!");
break;
}
if(select==0)  //退出标志置零
{
flag=0;
}
else
{
flag=1;
}
}
}

void change()  //主菜单4:修改信息
{
int i=0;
char use_name[10];
FILE *fp;
if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
{
printf("change 函数打开文件c:\\userfile.dat!失败,请按任意键退出\n");
exit (1);
}
return;
printf("请输入需要修改的用户姓名:");
scanf("%s",use_name);
i=search_name(use_name);      //查找需要修改信息的用户
printf("请按照[性别、年龄、电话、住址]的顺序输入用户的新信息:");
scanf("%s%d%s%s%s",use[i].sex,&use[i].age,use[i].phone,use[i].addr);
fwrite(&use[i],sizeof(users),i_Size,fp);    //将修改后的信息存入文件
fclose(fp);
}

void display()  //主菜单5:显示所有用户信息
{
int i=0;
printf("姓名\t性别\t年龄\t电话\t住址\n");
printf("------------------------------------------------------\n");
for(i=0;i<i_Size;i++)
{
printf("%s\t%s\t%d\t%s\t%s",use[i].name,use[i].sex,use[i].age,use[i].phone,use[i].addr);
}
printf("\n");
printf("通讯录中已记录 %d 条,余下 %d 条空间!\n",i,MAX-i);

}

void empty()//主菜单6:清空所有用户信息
{
int i=0;
FILE *fp;
if((fp=fopen("c:\\userfile.dat","wb"))==NULL)
{
printf("change 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
exit (1);
}
return;

for(i=0;i<i_Size;i++)
{
use[i].name==0;
use[i].sex==0;
use[i].age==0;
use[i].phone==0;
use[i].addr==0;
}
if(i==i_Size)
{
printf("已清空通讯录!\n");
}
fwrite(&use[i_Size],sizeof(users),i_Size,fp);    //将信息存入文件
fclose(fp); //关闭文件
}

int init_use()//初始化数组
{
FILE *fp;
int i=0;
if((fp=fopen("c:\\userfile.dat","rb"))==NULL)    //以读方式打开文件
{
printf("init_use 函数打开文件c:\\userfile.dat!失败,请按任意键退出!\n");
exit (0);
}
while(!feof(fp))
{
fread(&use[i],sizeof(users),1,fp);   //将数据读出到 use数组
i++;
}
i_Size=i-1;
fclose(fp);//关闭文件
return 1;

}

// Test.c
#include "Communicate.h"
#include <string.h>

int main()
{
int iselect=0,flag=1;  //flag为退出标志
while(flag)
{
dis_main_menu();
printf("请输入所选择的功能选项0--6:");
scanf("%d",&iselect);
switch(iselect)
{
case 1:
input_new();             //添加用户信息
break;
case 2:
if(init_use())           //删除指定用户信息
{
delete_information();
}
break;
case 3:
if(init_use())           //查询指定用户信息
{
search();
}
break;
case 4:
if(init_use())           //修改指定用户信息
{
change();
}
break;
case 5:
if(init_use())           //显示所有用户信息
{
display();
}
break;
case 6:
if(init_use())           //清空所有用户信息
{
empty();
}
break;
case 0:
printf("退出系统!\n");
break;
default:
printf("输入错误,请重新选择!\n");
break;
}
if(iselect==0)  //退出标志置零
{
flag=0;
}
else
{
flag=1;
}
}
return 0;
}


本文出自 “花开彼岸” 博客,请务必保留此出处http://zxtong.blog.51cto.com/10697148/1752728
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: