📄 15.c
字号:
#define N 50
#include <stdio.h>
#include <string.h>
/*联系人结构体*/
struct contact
{
char name[10];
char phone_num[15];
char category[10];
char e_mail[25];
int flag;
}per[N];
void menu();
/*保存函数*/
void save(int n)
{
FILE *fp;
int i;
if((fp=fopen("phonenote.txt","wb"))==NULL)
{
printf("\nCannot open file\n");
return ;
}
for(i=0;i<n;i++)
if(per[i].flag!=0)
if(fwrite(&per[i],sizeof(struct contact),1,fp)!=1)
printf("file write error!\n");
fclose(fp);
}
/*加载函数*/
int load()
{
FILE *fp;
int i;
if((fp=fopen("phonenote.txt","rb"))==NULL)
{
printf("\nCannot open file!\n");
return 0;
}
for(i=0;!feof(fp);i++)
fread(&per[i],sizeof(struct contact),1,fp);
fclose(fp);
return i-1;
}
/*输入姓名*/
void name_input(int i,int n)
{
int k,w1;
do
{
w1=0;
printf("name:");
scanf("%s",per[i].name);
for(k=0;k<n;k++)
if(k!=i&&strcmp(per[i].name,per[k].name)==0)
{
puts("This name is exist. please reinput!\n");
w1=1;break;
}
}
while(w1==1);
}
/*输入电话*/
void phone_input(int i,int n)
{
int k,w1;
do
{
w1=0;
printf("phonenumber:");
scanf("%s",per[i].phone_num);
for(k=0;k<n;k++)
if(k!=i&&strcmp(per[i].phone_num,per[k].phone_num)==0)
{
puts("This phonenumber is exist. please reinput!\n");
w1=1;break;
}
}
while(w1==1);
}
/*输入类型*/
void category(int i)
{
int c;
printf("category:\n\t1).office\t2).personal\t3).business [ ]\b\b");
do
{
scanf("%d",&c);
if(c>3||c<1)
{
puts("\nChoice error! Please again!");
getchar();
}
}while(c<1||c>3);
switch(c)
{
case 1:strcpy(per[i].category,"office");break;
case 2:strcpy(per[i].category,"personal");break;
case 3:strcpy(per[i].category,"business");break;
}
}
/*输入函数*/
void input(int i)
{
name_input(i,i);
phone_input(i,i);
category(i);
printf("e-mail:");
scanf("%s",per[i].e_mail);
per[i].flag=1;
}
void printf_face()
{
printf("\n\tname phonenumber category e_mail \n");
}
void printf_part()
{
printf("\n\tname phonenumber\n");
}
/*输出*/
void printf_one(int i)
{
printf("%-10s %-15s %-10s %-25s\n",per[i].name,per[i].phone_num,per[i].category,per[i].e_mail);
}
void printf_cate(int i)
{
printf("%10s %-15s\n",per[i].name,per[i].phone_num);
}
void printf_back()
{
void browse();
int k,w;
printf("\n\n\tSuccessful. ^_^\n\n");
printf("What do you want to do?\n\n\t1).Browse all now\t2).Back: [ ]\b\b");
scanf("%d",&w);
if(w==1)browse();
else menu();
}
/*修改函数*/
int modify_data(int i,int n)
{
int c,w1;
do
{
puts("\nmodify by =>\n\n 1).name 2).phonenumber 3).category 4).e-mail\n 5).all data 6).cancel and back");
printf("Which you needed?: [ ]\b\b");
scanf("%d",&c);
if(c>6||c<1)
{
puts("\nChoice error! Please again!");
getchar();
}
}
while(c>8||c<1);
do
{
switch(c)
{
case 1:name_input(i,n);break;
case 2:phone_input(i,n);break;
case 3:category(i);break;
case 4:printf("e-mail:");scanf("%s",per[i].e_mail);break;
case 5:input(i);break;
}
puts("\nNOW:\n");
printf_face();
printf_one(i);
printf("\nAre you sure?\n\n\t1).Sure 2).No and remodify 3).Back without save in this time [ ]\b\b");
scanf("%d",&w1);
}
while(w1==2);
return w1;
}
/*输入模块*/
void enter()
{
int i,n;
printf("How many persons(0-15)?:");
scanf("%d",&n);
printf("\n Enter data now\n\n");
for(i=0;i<n;i++)
{
printf("\n Input %dth person's information.\n",i+1);
input(i);
}
if(i!=0)save(n);
printf_back();
}
/*添加模块*/
void add()
{
int i,n,m,k;
FILE *fp;
n=load();
if(n>=15)
{
printf("The phone note is full");
menu();
}
else
{
printf("How many persons are you want to add(0-%d)?:",15-1-n);
scanf("%d",&m);
k=m+n;
for(i=n;i<k;i++)
{
printf("\n Input %dth person information.\n",i-n+1);
input(i);
}
if((fp=fopen("phonenote.txt","ab"))==NULL)
{
printf("cannot open file\n");
}
for(i=n;i<k;i++)
if(fwrite(&per[i],sizeof(struct contact),1,fp)!=1)
printf("file write error\n");
fclose(fp);
printf_back();
}
}
/*修改模块*/
void modify()
{
struct contact p;
int i,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{
if(i!=0&&i%10==0)
{
printf("\n\nRemember name which needed modify. press any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
}
do
{
printf("\n\nEnter name that you want to modify! name:\nIf you don't want to modify enter NO.");
scanf("%s",p.name);
if(strcmp(p.name,"NO")==0)
menu();
for(i=0;i<n;i++)
if(strcmp(p.name,per[i].name)==0)
{
k=i;p=per[i];
}
if(k==-1)printf("\n\nNot exist!please again");
}while(k==-1);
printf_face();
printf_one(k);
w1=modify_data(k,n);
if(w1==1)
{
printf("\nSuccessful ^_^.\n\nAre you modify another?\n\n\t1).Yes 2).Back with save\t[ ]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{
w0=0;
if(w2==1)
per[k]=p;
}
if(w0!=1&&w2==1)
save(n);
}while(w0==1);
menu();
}
/*删除模块*/
void del()
{
struct contact p;
FILE *fp;
int i,n,k,w0=1;
n=load();
do
{
k=-1;
printf_face();
for(i=0;i<n;i++)
{
if(i!=0&&i%10==0)
{
printf("\n\nRemember name which needed delete. press any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
}
do
{
printf("\n\nEnter name that you want to delete! name:");
scanf("%s",p.name);
for(i=0;i<n;i++)
if(strcmp(p.name,per[i].name)==0)
{
k=i;per[i].flag=0;w0=0;
}
if(k==-1)printf("\n\nNot exist!please again");
}while(k==-1);
printf_face();
printf_one(k);
}while(w0==1);
save(n);
printf_back();
}
/*分类查看模块*/
void browse_part()
{
struct contact p;
int i,n,w0,k,j;
n=load();
do
{
puts("\n\tWhich category do you want to browse:\n");
puts("\t\t1).office \t2).personal \t3).bussiness [ ]\b\b");
scanf("%d",&k);
if(k<1||k>3)
{
w0=1;getchar();
}
else w0=0;
}while(w0==1);
switch(k)
{
case 1:strcpy(p.category,"office");break;
case 2:strcpy(p.category,"personal");break;
case 3:strcpy(p.category,"hussiness");break;
}
printf_part();
for(i=0,j=0;i<n;i++)
{
if(i!=0&&i%10==0)
{
printf("\n\nPress any key to continue ...");
getch();
puts("\n\n");
}
if(strcmp(p.category,per[i].category)==0)
{
printf_cate(i);
j++;
}
}
printf("\tThere are %d record.\n",j);
printf("\nPress any key to back ...");
getch();
puts("\n\n");
menu();
}
/*查看整个*/
void browse()
{
int i,n;
n=load();
printf_face();
for(i=0;i<n;i++)
{
if(i!=0&&i%10==0)
{
printf("\n\nPress any key to continue ...");
getch();
puts("\n\n");
}
printf_one(i);
}
printf("\tThere are %d record.\n",n);
printf("\nPress any key to back ...");
getch();
puts("\n\n");
menu();
}
/*菜单*/
void menu()
{
int n,w1;
do
{
puts("\n\t\t*************************MENU************************\n\n");
puts("\t\t\t\t1.Enter new data");
puts("\t\t\t\t2.Addition data");
puts("\t\t\t\t3.Modify data");
puts("\t\t\t\t4.Delete data");
puts("\t\t\t\t5.Browse all");
puts("\t\t\t\t6.Browse with category");
puts("\t\t\t\t7.Exit");
puts("\n\n\t\t*****************************************************\n");
printf("Choice your number(1-7): [ ]\b\b");
scanf("%d",&n);
if(n<1||n>7)
{
w1=1;getchar();
}
else w1=0;
}while(w1==1);
switch(n)
{
case 1:enter();break;
case 2:add();break;
case 3:modify();break;
case 4:del();break;
case 5:browse();break;
case 6:browse_part();break;
case 7:exit(0);
}
}
int main()
{
menu();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -