/*
printf("**************************\n");
printf("****** 欢迎使用通讯录 ******\n");
printf("****** 1、添加联系人 ******\n");
printf("****** 2、删除联系人 ******\n");
printf("****** 3、修改联系人 ******\n");
printf("****** 4、查看所有联系人 ****\n");
printf("****** 5、搜索联系人 ******\n");
printf("****** 6、退出系统 ******\n");
printf("**************************\n\n");
*/
#include <stdio.h>
#include <string.h>
#define M 100
#define A 22
#define B 12
/**
*打印功能的函数
*/
void interface(){
printf("**************************\n");
printf("****** 欢迎使用通讯录 ******\n");
printf("****** 1、添加联系人 ******\n");
printf("****** 2、删除联系人 ******\n");
printf("****** 3、修改联系人 ******\n");
printf("****** 4、查看所有联系人 ****\n");
printf("****** 5、搜索联系人 ******\n");
printf("****** 6、退出系统 ******\n");
printf("**************************\n\n");
}
//定义结构体说明联系人信息
typedef struct{
char name[A];
char tel[B];
}Person;
Person per[M];
//文件指针哦
FILE * fp=NULL;
int totel,num;
//遍历结构体数组哈
void con(){
for(int i=0;i<totel;i++)
printf("%d\t%s\t\t%s\t\n",i+1,per[i].name,per[i].tel);
}
/**
*为什么我文件注释在调用函数时不显示
*下面的是添加功能
*/
void doAdd(){
char a[A],b[B];
int x;
printf("请输入联系人姓名..\n");
getchar();
fgets(a,A,stdin);
if(a[strlen(a)-1]=='\n')
a[strlen(a)-1]='\0';
printf("请输入联系人电话号..\n");
fgets(b,B,stdin);
if(b[strlen(b)-1]=='\n')
b[strlen(b)-1]='\0';
printf("1.确认 2.取消\n");
scanf("%d",&x);
if(x==1){
strcpy(per[totel].name,a);
strcpy(per[totel].tel,b);
fp=fopen("contact.date","wb+");
totel++;
fwrite(&totel,4,1,fp);
fwrite(per,sizeof(Person)*totel,1,fp);
fclose(fp);
printf("添加成功!\n");
}
}
/**
*这应该是删除吧
*/
void doDelete(){
con();
printf("选择要删除的联系人编号..\n");
int x,y;
scanf("%d",&x);
if(x>0&&x<=totel){
printf("要删除 %s 吗?1.确定 2.取消\n",per[x-1].name);
scanf("%d",&y);
if(y==1){
for(int i=x;i<totel;i++)
per[i-1]=per[i];
totel--;
fp=fopen("contact.date","wb+");
fwrite(per,sizeof(Person)*totel,1,fp);
fwrite(&totel,4,1,fp);
fclose(fp);
}
}else{
printf("已取消删除!\n");
}
}
/**
*这是修改,不信你查词典
*/
void doRevise(){
con();
int x,y;
char a[A],b[B];
printf("请选择要修改的联系人编号..\n");
scanf("%d",&x);
if(x>0&&x<=totel){
printf("请输入新的姓名..\n");
scanf("%s",a);
printf("请输入新的电话号..\n");
scanf("%s",b);
printf("要修改联系人%s吗? 1.确定 2.取消\n",per[x-1].name);
scanf("%d",&y);
if(y==1){
strcpy(per[x-1].name,a);
strcpy(per[x-1].tel,b);
fp=fopen("contact.date","wb+");
fwrite(per,sizeof(Person)*totel,1,fp);
fwrite(&totel,4,1,fp);
fclose(fp);
printf("修改成功!\n");
}
}else{
printf("已取消修改!\n");
}
}
/**
*老夫掐指一算,这是查找功能啊
*/
void doSearch(){
printf("请输入要查找的联系人姓名..\n");
char a[A];
scanf("%s",a);
int i=0;
for(;i<totel;i++){
if(strcpy(per[i].name,a)==0){
printf("查找信息如下..\n");
printf("%d\t%s\t\t%s\t\n",i+1,per[i].name,per[i].tel);
break;
}
}
if(i==totel)
printf("查无此人!\n");
}
int main(int argc, const char * argv[]) {
//定义变量,结构体,文件指针
interface();
//将文件写入结构体
fp=fopen("contact.date","r");
if(fp!=NULL){
fread(&totel,4,1,fp);
fread(per,sizeof(Person)*totel,1,fp);
rewind(fp);
fclose(fp);
}
printf("请输入操作!\n");
//用循环来执行用户操作
while(1){
//接受用户操作,并判断是否合法
scanf("%d",&num);
if(num<1||num>6){
printf("操作错误!\n");
continue;
}
switch(num){
case 1:
doAdd();
break;
case 2:
doDelete();
break;
case 3:
doRevise();
break;
case 4:
con();
break;
case 5:
doSearch();
break;
case 6:
printf("系统已退出!\n");
return 0;
}
interface();
}
return 0;
}
|
|