#包含" string.h "
#包含“conio.h”
#包含“stdio.h”
#包含“dos.h”
FILE * fp
int I;//i是全局變量而不是長度。
結構地址
{ char postnum[10];
char a[40];//家庭地址
};
結構生日
{ int年;
int月;
int日;
};
結構朋友
{ int num//序列號
char name[20];
迷人的性愛;
收費電話[13];
結構生日生日;
結構地址address;
}
朋友[50];
無效載荷()
{
int j;
長k;
fp=fopen("friend.txt "," a+");//打開文件friend.txt
if(fp!=空)
{
for(I = 1;我& lt50;i++)
{
j = fgetc(FP);
If(j==EOF) //判斷是否到達文件末尾。
返回;
k = I-1;
fseek(fp,k*sizeof(struct ffriend),SEEK _ SET);
弗雷德(& ampfriends[i],sizeof(struct ffriend),1,FP);//從文件中讀取記錄
}
}
其他
{
fp=fopen("friend.txt "," w ");
I = 1;
}
}
空顯示(int j)
{
//朋友[j]。num = I;
printf(" \ n \ n \ t否。-n編號:%3d ",朋友[j]。num);
Printf ("\ n \ tname -Name:%-20s ",friends[j]。姓名);
Printf ("\ n \ tGender -Sex:%c ",friends[j]。性);
printf(" \ n \ tTel-電話:%-13s ",朋友[j]。電話);
printf(" \ n \ t出生日期-生日:% 4d-%2d-%3d ",friends [j]。生日。年份,朋友[j]。生日,月份,朋友。生日);
printf(" \ n \ tZip code-postnum:%-10s ",friends [j]。address . postnum);
printf(" \ n \ t電子郵件地址-地址:%-40s ",friends [j]。address . a);
}
void追加(int j)
{
fflush(stdin);//清除該區域的文件緩沖區,當文件以寫模式打開時,將緩沖區寫入文件。
//stdin是壹個標準文件*(文件指針),通常用鍵盤指向輸入流。
朋友[j]。num = j;
printf(" \ n \ t \ t \ t序列號-編號:%d ",j);
printf(" \ n \ t \ t \ tname-Name:");
scanf("%s ",朋友[j].姓名);
fflush(stdin);//為什麽沒有fflush(stdin);效果會自動跳過嗎?
printf(" \ t \ t \ t gender-Sex(m/w):");//為什麽輸入漢字的男女會自動跳過聯系號碼?
scanf("%c ",& amp朋友[j]。性);
printf(" \ t \ t \ t tel-Phone:");
scanf("%s ",朋友[j].電話);
Printf("\t出生日期-生日");
printf(" \ n \ t \ t \ t年份:");
scanf("%d ",& amp好友[j].生日.年份);
printf(" \ t \ t \ t month-month:");
scanf("%d ",& amp好友[j].生日.月);
printf(" \ t \ t \-day:");
scanf("%d ",& amp好友[j].生日.日);
Printf ("\ t \ t郵政編碼-郵政編碼:");
scanf("%s ",friends[j]. address . postnum);
printf(" \ t \ t \ t郵件地址-地址:");
scanf("%s ",friends[j]. address . a);
getchar();
}
void刪除()
{
int k;
printf(" \ n \ t刪除序列號-編號:");
scanf("%d ",& ampk);
if(k & lt;=i)
{
for(int j = k;j & ltI+1;J++) /*插入位置後移的元素順序*/
{
strcpy(朋友[j].姓名,好友[j+1]。姓名);/*交換元素內容*/
朋友[j]。性=朋友[j+1]。性;
strcpy(朋友[j].電話,好友[j+1]。電話);
好友[j].生日.年=好友[j+1].生日.年;
好友[j].生日.月=好友[j+1].生日.月;
好友[j].生日.日=好友[j+1].生日.日;
strcpy(friends[j]. address . postnum,friends[j+1]. address . postnum);
strcpy(好友[j].address.a,好友[j+1]. address . a);
}
I-;
}
其他
{
Printf("輸入的序列號太大!");
}
}
void Modify(int j)
{
追加(j);
}
無效保存()
{
int j;
fp=fopen("friend.txt "," w ");
for(j = 1;j & lt= I;j++)
{
fwrite(& amp;friends[j],sizeof(struct ffriend),1,FP);
}
fclose(FP);
}
void main()
{
int j;
炭化等級;
char search name[10];
load();
I-;
做
{
printf(" \ t \ t \ t \ t \ t簡單通訊簿\ n \ n ");
Printf("函數選擇\ n ");
Printf ("1A。閱讀\ n ");
Printf("\2B。append \ n ");
Printf("\6C。insert \ n ");
Printf("\5D。刪除\ n ");
Printf("\5E。搜索\ n ");
Printf("。修改\ n ");
Printf("\2G。保存\ n ");
Printf ("1h。退出\ n ");
Printf ("Please Choice)\n註意:輸入A~H的大寫字母\ n ");
scanf("%c ",& amp年級);
開關(等級)
//可以添加大寫字母和小寫字母。
{
案例‘A’:j = 1;//顯示功能
while(getchar()!= 0x 1b & amp;& ampj & lt=i) //添加按Esc退出。
{
show(j++);
printf(" \ n請按Enter鍵繼續!");
}
如果(j-1 & lt;1)
{
Printf ("\ n \ tEmpty沒有記錄的文檔-空註釋\ n ");
printf(" \ n請按Enter鍵繼續!");
getchar();
}
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
打破;
情況“B”://添加函數
while(我& lt=50) //增加按ESC退出的功能。
{
i++;
追加(壹);
printf(" \ t繼續增加嗎?y/n”);
//如果修改添加else,會跳出或者強制打印錯誤。
char a = getchar();
if(a=='n'||a=='N ')
打破;
}
if(i==51)
printf(" \ n \ t文檔已滿,因此無法添加記錄-請註意已滿");
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
getchar();
打破;
案例“C”:
int k;
printf(" \ n \ t輸入要插入的位置:");
scanf("%d ",& ampk);
j = I+1;
朋友[j]。num = j;
for(j;j & gtk;j-)//插入函數
{
strcpy(朋友[j].姓名,好友[j-1]。姓名);//數據向後移動
朋友[j]。性=朋友[j-1]。性;
strcpy(朋友[j].電話,朋友[j-1]。電話);
好友[j].生日.年份=好友[j-1].生日.年份;
好友[j].生日.月=好友[j-1].生日.月;
好友[j].生日.日=好友[j-1].生日.日;
strcpy(friends[j]. address . postnum,friends[j-1]. address . postnum);
strcpy(好友[j].address.a,好友[j-1]. address . a);
}
追加(k);
i++;
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
打破;
案例‘D’://刪除功能//增加任意刪除多條記錄的功能。
delete();
如果(我& lt1)
printf(" \ n無記錄-無記錄\ n ");
printf(" \ n請按Enter鍵繼續!");
getchar();
getchar();
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
打破;
情況“E”://查詢函數
printf(" \ n \ t請輸入要查詢的記錄的相關名稱:");//按列號添加查詢
scanf("%s ",search name);
for(j = 1;j & lt= I;j++)
{
If (strcmp (searchname,friends [j].name)= = 0)//比較字符串。
{
顯示(j);
打破;
}
}
如果(我& lt1)
{
printf(" \ n沒有您要查找的記錄-沒有記錄");
printf(" \ n請按Enter鍵繼續!");
getchar();
}
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
getchar();
打破;
案例“F”://修改函數//按序列號添加查詢。
printf(" \ n \ t請輸入要修改的記錄的相關名稱:");
獲取(search name);
scanf("%s ",search name);
for(j = 1;j & lt= I;j++)
{
If (strcmp (searchname,friends [j].name)= = 0)//比較字符串。
{
修改(j);
//getchar();//添加輸出確認修改?
}
}
如果(我& lt1) //修改函數
{ printf(" \ n沒有要修改的記錄-沒有記錄");
printf(" \ n請按Enter鍵繼續!");
getchar();
getchar();
}
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
打破;
案例“G”:
save();//保存功能
getchar();
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
打破;
情況“H”://退出功能
char x;
Printf("要保存嗎?是/否\ n ");
scanf("%s ",& ampx);
//getchar();
//getchar();
if(x=='y ')
{
save();
退出(0);
}
其他
退出(0);
默認值:
printf(" \ n \ t輸入錯誤,請輸入正確的序列號!");
printf(" \ n請按Enter鍵繼續!");
getchar();
Printf("\n\t\t\t\t\t\t該操作已結束");
printf(" \ n \ t-\ t \ t \ n ");
}
} while(1);
}