# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltstring.h & gt
#定義szSTR 64
#define fileDB "c:\\contact.txt "
結構聯系人{
char name[sztr];/*姓名*/
計費單位;/*工作單位*/
char tele[sztr];/*電話*/
char mail[sztr];/*郵件*/
};
typedef結構聯系方式;
#定義BNAME 1
#定義BUNIT 2
#定義項目4
#定義BMAIL 8
#定義BFULL 0xFF
int OPER[5] = {BFULL,BNAME,BUNIT,BTELE,b mail };
無效輸入(CON * s,int mask)
{
如果(面具& ampBNAME) {printf("請輸入學生姓名:");scanf("%s ",s-& gt;姓名);}
如果(面具& ampBUNIT) {printf("請輸入工作單位:");scanf("%s ",s-& gt;單位);}
如果(面具& ampBTELE) {printf("請輸入聯系電話:");scanf("%s ",s-& gt;tele);}
如果(面具& ampBMAIL) {printf("請輸入郵箱:");scanf("%s ",s-& gt;郵件);}
}/*結束輸入*/
無效顯示(內部id,控制)
{
如果(!s)返回;
如果(id)
printf(" % d \ t % s \ t % s \ t % s \ t % s \ t % s \ n ",
id,s-& gt;名稱,s-& gt;單位,s-& gt;tele,s-& gt;郵件);
其他
Printf("姓名%s工作單位%s電話%s電子郵件%s\n ",
s-& gt;名稱,s-& gt;單位,s-& gt;tele,s-& gt;郵件);
/*end if*/
}/*結束放映*/
無效註冊
{
弊s;文件* f = 0;
輸入(& amps,b full);
f = fopen(fileDB,“ab”);
fwrite(& amp;s,sizeof(s),1,f);
fclose(f);
Printf("數據已保存!\ n ");
}/*結束註冊*/
int browse(char * key,fpos_t * p,CON * s)
{
文件* f = 0;int i = 0,r = 0;CON t;
char * a = 0,* b = 0;fpos _ t q;
如果(!s)返回0;
f = fopen(fileDB," Rb ");
如果(!f) {
Printf("數據庫中沒有記錄\ n ");
返回0;
}/*end if*/
printf(" number \ tname \ tnompany \ tnail \ n ");
printf("-\ n ");
而(!feof(f)) {
fgetpos(f & amp;q);
r = fread(& amp;t,sizeof(t),1,f);
if(r & lt;1)破位;
if(t.name[0]==0)繼續;
如果(關鍵){
a = strstr(t.name,key);
b = strstr(t.tele,key);
if(a = = 0 & amp;& ampb == 0)繼續;
}/*end if*/
if(p)* p = q;
if(s) memcpy(s,& ampt,sizeof(t));
i++;
顯示(我& ampt);
}/*結束while*/
fclose(f);
printf("-\ n ");
返回I;
}/*結束瀏覽*/
fpos_t查詢(條件)
{
char key[sztr]= " ";fpos _ t p = 0;int r = 0;
Printf("請輸入您的姓名或電話號碼:");
scanf("%s ",key);
r = browse(鍵& ampp,s);
返回r?p:-1;
}/*結束查詢*/
空清除(空)
{
文件* f = 0;弊s;
fpos _ TP = query(& amp;s);
如果(p & lt0)返回;
f = fopen(fileDB," r b+ ");
fset pos(f & amp;p);
memset(& amp;s,0,sizeof(s));
fwrite(& amp;s,sizeof(s),1,f);
fclose(f);
Printf("記錄已刪除!\ n ");
}/*結束清除*/
無效修改(無效)
{
文件* f = 0;弊s;int cmd = 0;
fpos _ TP = query(& amp;s);
如果(p & lt0)返回;
f = fopen(fileDB," r b+ ");
fset pos(f & amp;p);
for(;;) {
顯示(0 & amp;s);
Printf("請選擇:1-Name;2-工作單位;3-電話;4-電子郵件;5-保存並退出;6-放棄修改退出\ n”);
scanf("%d ",& ampcmd);
開關(cmd) {
案例1:
案例二:
案例三:
案例4:
輸入(& amp美國,OPER[cmd]);
打破;
案例5:
fset pos(f & amp;p);
fwrite(& amp;s,sizeof(s),1,f);
案例6:
fclose(f);
返回;
默認值:
Printf("錯誤操作,請重新輸入。\ n ");
}/*結束案例*/
}/*mext*/
}/*結束清除*/
int main(void)
{
int cmd = 0;弊s;
for(;;) {
Printf("歡迎使用通訊錄!請選擇:1-添加;2-查詢;3-刪除;4-修改;5-所有輸出;0-退出\ n ");
scanf("%d ",& ampcmd);
開關(cmd) {
案例0:返回0;
案例1:regist();打破;
案例2:查詢(& amps);打破;
案例三:clear();打破;
情況四:modify();打破;
案例5:瀏覽(0,0 & amp;s);打破;
}//結束案例
}
返回0;
}