//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; }