You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

221 lines
5.2 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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