请大侠帮忙!求助!

simple05 2010-11-02 09:56:43
我想实现修改的功能!可好像不行!不知道错在哪里!源码如下:

#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;
}
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
simple05 2010-11-02
  • 打赏
  • 举报
回复
那该怎么修改我的代码???
Athenacle_ 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cheng_fengming 的回复:]

把错误也贴一下吧,呵呵,我大概运行了行,好像可以修改,不过由于定义的变量没有初始化,在contact.txt里面出现了很多"烫"。
[/Quote]
这个应该不是变量未初始化的问题~
simple05 2010-11-02
  • 打赏
  • 举报
回复
就是修改后再去查,就是修改前的信息!没有变
simple05 2010-11-02
  • 打赏
  • 举报
回复
请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出
1
请输入学生姓名:1
请输入工作单位:1
请输入联系地址:1
请输入学历:1
请输入身份证:1
请输入政治面貌:1
请输入年龄:1
资料已保存!
请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出
4
请输入姓名或者身份证:1
编号 姓名 工作单位 联系地址 学历 身份证 政治面貌
年龄
-----------------------------------------------------------------------
1 1 1 1 1 1 1 1
-----------------------------------------------------------------------
姓名:1 工作单位:1 联系地址:1 学历:1 身份证:1 政治面貌:1 年龄:1
请选择:1-姓名;2-工作单位;3-联系地址;4-学历;5-身份证:6-政治面貌:7-年龄:8-
保存并退出;9-放弃修改并退出
7
请输入年龄:12
姓名:1 工作单位:1 联系地址:1 学历:1 身份证:1 政治面貌:1 年龄:12
请选择:1-姓名;2-工作单位;3-联系地址;4-学历;5-身份证:6-政治面貌:7-年龄:8-
保存并退出;9-放弃修改并退出
8
请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出
2
请输入姓名或者身份证:1
编号 姓名 工作单位 联系地址 学历 身份证 政治面貌
年龄
-----------------------------------------------------------------------
1 1 1 1 1 1 1 1
-----------------------------------------------------------------------
请选择:1-添加;2-查询;3-删除;4-修改;5-全部输出;0-退出
dongbo12369 2010-11-02
  • 打赏
  • 举报
回复

我这可以修改啊,就是貌似修改过后,再查询有问题的样子。。如果是这样的话,可以用regist()再加进去。。。不知道是不是这个,不是的话,把错误情况说清楚点嘛。。
cheng_fengming 2010-11-02
  • 打赏
  • 举报
回复
把错误也贴一下吧,呵呵,我大概运行了行,好像可以修改,不过由于定义的变量没有初始化,在contact.txt里面出现了很多"烫"。
simple05 2010-11-02
  • 打赏
  • 举报
回复
修改的功能有问题!就是不能修改信息!
Athenacle_ 2010-11-02
  • 打赏
  • 举报
回复
这个程序貌似是正确的啊~
LZ哪里有错?

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧