请大侠帮忙!求助!
我想实现修改的功能!可好像不行!不知道错在哪里!源码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define szSTR 64
#define fileDB "c:\\contact.txt"
typedef struct CONTACT
{
char name[szSTR];/*姓名*/
char unit[szSTR];/*工作单位*/
char address[szSTR];/*地址*/
char education[szSTR];/*学历*/
char personid[szSTR];/*身份证号码*/
char politice[szSTR];/*政治面貌*/
int age[szSTR];/*年龄*/
}CON;
#define Bname 1
#define Bunit 2
#define Baddress 4
#define Beducation 8
#define Bpersonid 16
#define Bpolitice 32
#define Bage 64
#define BFULL 0xFF
int OPER[8] = {BFULL, Bname, Bunit, Baddress, Beducation,Bpersonid,Bpolitice,Bage};
void input(CON * s, int mask)
{
if(mask & Bname) { printf("请输入学生姓名:"); scanf("%s", s->name); }
if(mask & Bunit) { printf("请输入工作单位:"); scanf("%s", s->unit); }
if(mask & Baddress) { printf("请输入联系地址:"); scanf("%s", s->address); }
if(mask & Beducation) { printf("请输入学历:"); scanf("%s", s->education); }
if(mask & Bpersonid) { printf("请输入身份证:"); scanf("%s", s->personid); }
if(mask & Bpolitice) { printf("请输入政治面貌:"); scanf("%s", s->politice); }
if(mask & Bage) { printf("请输入年龄:"); scanf("%s", s->age); }
}/*end input*/
void show (int id, CON * s)
{
if(!s) return ;
if(id)
printf("%d\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",
id, s->name , s->unit , s->address , s->education,s->personid,s->politice,s->age );
else
printf("姓名:%s 工作单位:%s 联系地址:%s 学历:%s 身份证:%s 政治面貌:%s 年龄:%s\n",
s->name , s->unit , s->address , s->education,s->personid,s->politice,s->age);
/*end if*/
}/*end show*/
void regist(void)
{
CON s; FILE * f = 0;
input(&s, BFULL);
f = fopen(fileDB, "ab");
fwrite(&s,sizeof(s),1,f);
fclose(f);
printf("资料已保存!\n");
}/*end regist*/
int browse(char * key, fpos_t * p, CON * s)
{
FILE * f =0; int i = 0, r = 0; CON t;
char * a = 0, * b = 0;fpos_t q;
if(!s) return 0;
f = fopen(fileDB, "rb");
if(!f) {
printf("数据库暂无记录\n");
return 0;
}/*end if*/
printf("编号\t姓名\t工作单位\t联系地址\t学历\t身份证\t政治面貌\t年龄\n");
printf("-----------------------------------------------------------------------\n");
while(!feof(f)) {
fgetpos(f, &q);
r = fread(&t, sizeof(t), 1, f);
if(r<1)break;
if(t.name[0]==0) continue;
if(key) {
a = strstr(t.name , key);
b = strstr(t.personid , key);
if(a == 0 && b == 0) continue;
}/*end if*/
if(p) *p = q;
if(s) memcpy(s, &t, sizeof(t));
i++;
show(i, &t);
}/*end while*/
fclose(f);
printf("-----------------------------------------------------------------------\n");
return i;
}/*end browse*/
fpos_t query(CON * s)
{
char key[szSTR]=""; fpos_t p = 0; int r = 0;
printf("请输入姓名或者身份证:");
scanf("%s", key);
r = browse(key, &p, s);
return r?p:-1;
}/*end query*/
void clear(void)
{
FILE * f = 0; CON s;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
memset(&s, 0, sizeof(s));
fwrite(&s, sizeof(s),1, f);
fclose(f);
printf("记录已删除!\n");
}/*end clear*/
void modify(void)
{
FILE * f = 0; CON s; int cmd = 0;
fpos_t p = query(&s);
if(p<0) return;
f = fopen(fileDB, "rb+");
fsetpos(f, &p);
for(;;) {
show(0, &s);
printf("请选择:1-姓名;2-工作单位;3-联系地址;4-学历;5-身份证:6-政治面貌:7-年龄:8-保存并退出;9-放弃修改并退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
input(&s, OPER[cmd]);
break;
case 8:
fsetpos(f, &p);
fwrite(&s, sizeof(s), 1, f);
case 9:
fclose(f);
return;
default:
printf("错误的操作,请重新输入。\n");
}/*end case*/
}/*mext*/
}/*end clear*/
int main(void)
{
int cmd = 0; CON s;
for(;;) {
printf("请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出\n");
scanf("%d", &cmd);
switch(cmd) {
case 0: return 0;
case 1: regist(); break;
case 2: query(&s); break;
case 3: clear(); break;
case 4: modify(); break;
case 5: browse(0, 0, &s); break;
}//end case
}
return 0;
}