|
|
#include<stdio.h>
|
|
|
#include<string.h>
|
|
|
#include<process.h>
|
|
|
#include<stdlib.h>
|
|
|
#include<windows.h>
|
|
|
|
|
|
struct people
|
|
|
{
|
|
|
char name[20];
|
|
|
char nativePlace[20];
|
|
|
char phoneNumber1[20];
|
|
|
char phoneNumber2[20];
|
|
|
char email[25];
|
|
|
};
|
|
|
|
|
|
|
|
|
void menu()
|
|
|
{
|
|
|
system("cls");
|
|
|
printf("\n\n\n\n\n");
|
|
|
printf("\t\t|-------------小型通信录系统----------------|\n");
|
|
|
printf("\t\t|\t 0.信息录入 |\n");
|
|
|
printf("\t\t|\t 1.信息浏览 |\n");
|
|
|
printf("\t\t|\t 2.信息查询 |\n");
|
|
|
printf("\t\t|\t 3.信息修改 |\n");
|
|
|
printf("\t\t|\t 4.退出系统 |\n");
|
|
|
printf("\t\t|-------------------------------------------|\n");
|
|
|
}
|
|
|
|
|
|
int main(){
|
|
|
FILE *fp;
|
|
|
int c,i,j,k,l;//k用于结束判断;i用于主系统进入子系统判断; c用于子系统内的循环
|
|
|
char p1[20],p2[20],p3[20];
|
|
|
struct people people[1000];
|
|
|
for(;;){
|
|
|
menu();
|
|
|
scanf("%d",&i);
|
|
|
if(i==4){
|
|
|
printf("已退出系统!");break;
|
|
|
}
|
|
|
else{
|
|
|
switch(i){
|
|
|
//录入系统
|
|
|
case 0:
|
|
|
if((fp=fopen("D:\\c语言\\通信录.txt","a"))==NULL){
|
|
|
printf("文件打开错误");
|
|
|
}
|
|
|
for(;;){
|
|
|
getchar();//吃回车符
|
|
|
printf("请输入姓名\n");
|
|
|
gets(people[0].name);
|
|
|
fputs(people[0].name,fp);
|
|
|
fputs("\n",fp);
|
|
|
|
|
|
printf("请输入籍贯\n");
|
|
|
gets(people[0].nativePlace);
|
|
|
fputs(people[0].nativePlace,fp);
|
|
|
fputs("\n",fp);
|
|
|
|
|
|
printf("请输入电话号码1\n");
|
|
|
gets(people[0].phoneNumber1);
|
|
|
fputs(people[0].phoneNumber1,fp);
|
|
|
fputs("\n",fp);
|
|
|
|
|
|
printf("请输入电话号码2\n");
|
|
|
gets(people[0].phoneNumber2);
|
|
|
fputs(people[0].phoneNumber2,fp);
|
|
|
fputs("\n",fp);
|
|
|
|
|
|
printf("请输入电子邮箱\n");
|
|
|
gets(people[0].email);
|
|
|
fputs(people[0].email,fp);
|
|
|
fputs("\n",fp);
|
|
|
fputs("\n",fp);
|
|
|
|
|
|
printf("是否退出录入!\n结束请输入0,继续请输入1\n");
|
|
|
scanf("%d",&k);
|
|
|
if(k==0){
|
|
|
break;
|
|
|
}
|
|
|
else
|
|
|
continue;
|
|
|
}
|
|
|
fclose(fp);
|
|
|
break;
|
|
|
|
|
|
//浏览系统
|
|
|
case 1:
|
|
|
if((fp=fopen("D:\\c语言\\通信录.txt","r"))==NULL){
|
|
|
printf("文件打开错误");
|
|
|
}
|
|
|
c=0;
|
|
|
printf("------------------------通信录------------------------\n");
|
|
|
while(fgets(p1,20,fp)!=NULL){
|
|
|
switch(c){
|
|
|
case 0:printf("name:");c++;break;
|
|
|
case 1:printf("nativePlace:");c++;break;
|
|
|
case 2:printf("phoneNumber1:");c++;break;
|
|
|
case 3:printf("phoneNumber2:");c++;break;
|
|
|
case 4:printf("email:");c++;break;
|
|
|
case 5:c=0;break;
|
|
|
}
|
|
|
printf("%s",p1);
|
|
|
}
|
|
|
fclose(fp);
|
|
|
printf("是否退出浏览!\n结束请输入0\n");
|
|
|
scanf("%d",&k);
|
|
|
if(k==0){
|
|
|
break;
|
|
|
}
|
|
|
else
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
|
//查询系统
|
|
|
case 2:
|
|
|
if((fp=fopen("D:\\c语言\\通信录.txt","r"))==NULL){
|
|
|
printf("文件打开错误");
|
|
|
}
|
|
|
for(;;){
|
|
|
printf("请输入你需要查询信息的人的姓名\n");
|
|
|
gets(p2);
|
|
|
gets(p1);
|
|
|
strcat(p1,"\n");
|
|
|
printf("------------------------通信录------------------------\n");
|
|
|
while((fgets(p3,20,fp))!=NULL){
|
|
|
c=0;
|
|
|
if(strcmp(p1,p3)==0){
|
|
|
printf("name:%s",p3);
|
|
|
while(fgets(p3,20,fp)!=NULL){
|
|
|
if(strcmp(p3,"\n")==0)
|
|
|
break;
|
|
|
else{
|
|
|
switch(c){
|
|
|
case 0:printf("nativePlace:");printf("%s",p3); c++;break;
|
|
|
case 1:printf("phoneNumber1:");printf("%s",p3);c++;break;
|
|
|
case 2:printf("phoneNumber2:");printf("%s",p3);c++;break;
|
|
|
case 3:printf("email:");printf("%s\n",p3);c++;break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
printf("\n是否退出查询!\n结束请输入0,继续请输入1\n");
|
|
|
scanf("%d",&k);
|
|
|
if(k==0)
|
|
|
break;
|
|
|
else{
|
|
|
rewind(fp);
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
//修改系统
|
|
|
case 3:
|
|
|
if((fp=fopen("D:\\c语言\\通信录.txt","r+"))==NULL){
|
|
|
printf("文件打开错误");
|
|
|
}
|
|
|
char pp[1000][20];
|
|
|
|
|
|
for(;;){
|
|
|
getchar();
|
|
|
|
|
|
for(l=0;fgets(pp[l],20,fp)!=NULL;l++){
|
|
|
c=l;
|
|
|
}//把文件的数据输出到二维数组pp中
|
|
|
|
|
|
printf("请输入你需要修改信息的人的姓名\n");
|
|
|
gets(p1);
|
|
|
strcpy(p2,p1);
|
|
|
strcat(p1,"\n");
|
|
|
l=0;
|
|
|
|
|
|
for(;l<c;l++){
|
|
|
|
|
|
while(strcmp(p1,pp[l])!=0){
|
|
|
l+=1;
|
|
|
}//将指针指到需改的人的姓名这个一维数组
|
|
|
|
|
|
printf("修改籍贯请输入0,修改电话1输入1,修改电话2输入2,修改邮箱输入3!\n");
|
|
|
scanf("%d",&j);
|
|
|
|
|
|
switch(j){
|
|
|
case 0:printf("请修改%s的籍贯\n当前籍贯为:",p2);break;
|
|
|
case 1:printf("请修改%s的电话1\n当前电话1为:",p2);break;
|
|
|
case 2:printf("请修改%s的电话2\n当前电话2为:",p2);break;
|
|
|
case 3:printf("请修改%s的邮箱\n当前邮箱为:",p2);break;
|
|
|
}
|
|
|
printf("%s",pp[j+l+1]);//输出当前数据
|
|
|
|
|
|
//把二维数组中的某一个一维数组修改
|
|
|
printf("请输入修改的值:");
|
|
|
getchar();//吃回车符
|
|
|
gets(pp[j+l+1]);
|
|
|
strcat(pp[j+l+1],"\n");
|
|
|
}
|
|
|
rewind(fp);
|
|
|
|
|
|
|
|
|
for(l=0;l<=c;l++)
|
|
|
fputs(pp[l],fp);//把二维数组在输进文件
|
|
|
|
|
|
printf("修改成功!\n\n是否退出修改!\n结束请输入0,继续请输入1\n");
|
|
|
scanf("%d",&k);
|
|
|
if(k==0)
|
|
|
break;
|
|
|
else{
|
|
|
rewind(fp);
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
fclose(fp);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
return 0;
|
|
|
}
|