#include <stdio.h>
#include <windows.h>
struct person
{
char name[8];
char tel[15];
char addr[50];
};
char filename[20];
FILE *fp;
void creat();
void output();
void search();
void append();
void modify();
void delete();
main()
{
int m;
creat();
while(1)
{
printf("\n\n添加,請按1");
printf("\n查找,請按2");
printf("\n修改,請按3");
printf("\n刪除,請按4");
printf("\n輸出,請按5");
printf("\n退出,請按0");
printf("\n");
scanf("%d",&m);
if (m>=0&&m<=5)
{
switch(m)
{
case 1: append();
break;
case 2: search();
break;
case 3: modify();
break;
case 4: delete();
break;
case 5: output();
break;
case 0: exit(fp);
}
printf("\n\n操作完成,請再次選擇!");
}
else
printf("\n\n選擇錯誤,請再次選擇!");
}
}
void creat()
{
struct person one;
long s1;
printf("*************************************************\n");
printf("* written by 劉歧 1jjk *\n");
printf("*************************************************\n");
printf("\n請輸入記事本名:");
scanf("%s",filename);
if ((fp=fopen(filename,"w"))==NULL)
{
printf("\n不能建立記事本");
fprintf(fp,"%-10s%-20s%-50s","姓名","日期","事件");
printf("\n請輸入姓名,日期和事件以0結束\n");
scanf("%s",one.name);
while(strcmp(one.name,"0"))
{
scanf("%s%s",one.tel,one.addr);
fprintf(fp,"%-10%s-20%s-50s",one.name,one.tel,one.addr);
scanf("%s",one.name);
}
fclose(fp);
}
}
void output()
{
struct person one;
if((fp=fopen(filename,"r"))==NULL)
{
printf("\n不能打開記事本!");
}
printf("\n\n%20s\n","記事本");
while(!feof(fp))
{
fscanf(fp,"%-10%s-20%s-50s",one.name,one.tel,one.addr);
printf("%-10s%-20s%-50s",one.name,one.tel,one.addr);
}
fclose(fp);
}
void append()
{
struct person one;
if ((fp=fopen(filename,"a"))==NULL)
{
printf("\n不能打開記事本!");
}
printf("\n請添入姓名,日期碼及事件");
scanf("%s%s%s",one.name,one.tel,one.addr);
fprintf(fp,"%-10s%-20s%-50s",one.name,one.tel,one.addr);
fclose(fp);
}
void search()
{
int k=0;
char namekey[8];
struct person one;
printf("\n請輸入姓名");
scanf("%s",namekey);
if((fp=fopen(filename,"rb"))==NULL)
{
printf("\n不能打開記事本");
}
while (!feof(fp))
{
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
printf("\n\n已經查到");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
k=1;
}
}
if(!k)
printf("\n\n對不起,記事本中沒有這個人");
fclose(fp);
}
void modify()
{
int k=0;
long offset;
char namekey[8];
struct person one;
printf("\n請輸入用戶名");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開記事本");
}
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已經查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n請輸入新的姓名,日期和事件");
scanf("%s%s%s",one.name,one.tel,one.addr);
fseek(fp,offset,SEEK_SET);
printf("%ld",ftell(fp));
fprintf(fp,"%-10s%-20s%-50\n",one.name,one.tel,one.addr);
}
else
{
printf("\n對不起,記事本中沒有這個人");
fclose(fp);
}
}
void delete()
{
int m,k=0;
long offset1;
char namekey[8];
struct person one;
printf("\n請輸入姓名");
scanf("%s",namekey);
if((fp=fopen(filename,"r+"))==NULL)
{
printf("\n不能打開記事本!");
}
while(!feof(fp))
{
offset1=ftell(fp);
fscanf(fp,"%s%s%s\n",one.name,one.tel,one.addr);
if(!strcmp(namekey,one.name))
{
k=1;
break;
}
}
if(k)
{
printf("\n已經查到,記錄為:");
printf("\n%-10s%-18s%-50s",one.name,one.tel,one.addr);
printf("\n確實要刪除,按1,不刪除,按0:");
scanf("%d",&m);
{
if(m)
{
fseek(fp,offset1,SEEK_SET);
fprintf(fp,"%-10s%-20s%-50s\n","","","");
}
}
}
else
printf("\n對不起,記事本中沒有此人");
fclose(fp);
}
原文轉自:http://www.anti-gravitydesign.com