调一下这个程序

今天tjj 2008-12-20 12:17:00
#include <stdio.h>
#include <stdlib.h>

enum bool {false, true};

enum bool set_ID(void)
{
struct id
{
char name[21];
char code[11];
int rights;
};

FILE *fp;
struct id *p, *q, *p1;
int m;
int i = 0;
long k = 0;

p = (struct id *)malloc(sizeof(struct id));

if((fp = fopen("code.dat", "rb")) == NULL)
{
puts("您是第一个登陆者,请注册为管理员: ");
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

fp = fopen("code.dat", "wb");
fwrite(p, sizeof(struct id), 1, fp);

puts("管理员设置帐号完毕.");
fclose(fp);
free(p);
printf("administrater\n");
// 添加代码

return true;
}
else
{
puts(" 0: 登陆 1: 注册 ");
do
{
printf("请选择(0/1): ");
scanf("%d", &m);
} while (m<0 || m>1);

if (m)
{

puts("请输入注册信息(用户名 密码 ):");
p1 = (struct id *)malloc(sizeof(struct id));

printf("Name(no more than 20 letters): ");
scanf("%20s", p1->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p1->code);
p1->rights = 0;

fclose(fp);
fp = fopen("code.dat", "ab");
fwrite(p, sizeof(struct id), 1, fp);
puts("普通用户注册成功! ");

fclose(fp);
free(p1);
printf("common\n");
//添加代码
return true;
}
else
{

q = (struct id *)malloc(sizeof(struct id));

printf("请输入您的 用户名 密码 权限\n");
printf("你只能尝试3次输入\n");

do
{
printf("The %d \n", i + 1);
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

while (!fseek(fp, (long)(k * sizeof(struct id)), SEEK_SET))
{
fread(q, sizeof(struct id), 1, fp);
if(!strcmp(p->name, q->name) && !strcmp(p->code, q->code))
{
if (q->rights)
{
fclose(fp);
free(p);
free(q);
printf("administrater:\n"); // 这里添加代码
return true;
}
else
{
fclose(fp);
free(p);
free(q);
printf("common:\n"); //这里添加代码
return true;
}
}
else
{
printf("Name or Code is wrong.\n");
}
k++;
}
} while (i++ < 2);

fclose(fp);
free(p);
free(q);

}
}
return false;

}




int main(void)
{
set_ID();



return 0;
}
...全文
167 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
今天tjj 2008-12-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

enum bool {false, true};

enum bool set_ID(void)
{
struct id
{
char name[21];
char code[11];
int rights;
};

FILE *fp;
struct id *p, *q, *p1;
int m;
int i = 0;

p = (struct id *)malloc(sizeof(struct id));

if((fp = fopen("code.dat", "rb")) == NULL)
{
puts("您是第一个登陆者,请注册为管理员: ");
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

fp = fopen("code.dat", "wb");
fwrite(p, sizeof(struct id), 1, fp);

puts("管理员设置帐号完毕.");
fclose(fp);
free(p);
printf("administrater\n");
// 添加代码

return true;
}
else
{
puts(" 0: 登陆 1: 注册 ");
do
{
printf("请选择(0/1): ");
scanf("%d", &m);
} while (m<0 || m>1);

if (m)
{

puts("请输入注册信息(用户名 密码 ):");
p1 = (struct id *)malloc(sizeof(struct id));

printf("Name(no more than 20 letters): ");
scanf("%20s", p1->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p1->code);
p1->rights = 0;

fclose(fp);
fp = fopen("code.dat", "ab");
fwrite(p, sizeof(struct id), 1, fp);
puts("普通用户注册成功! ");

fclose(fp);
free(p1);
printf("common\n");
//添加代码
return true;
}
else
{

q = (struct id *)malloc(sizeof(struct id));

printf("请输入您的 用户名 密码 权限\n");
printf("你只能尝试3次输入\n");

do
{
printf("The %d \n", i + 1);
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);
rewind(fp);
while (fread(q, sizeof(struct id), 1, fp) > 0)
{

if(!strcmp(p->name, q->name) && !strcmp(p->code, q->code))
{
if (q->rights)
{
fclose(fp);
free(p);
free(q);
printf("administrater:\n"); // 这里添加代码
return true;
}
else
{
fclose(fp);
free(p);
free(q);
printf("common:\n"); //这里添加代码
return true;
}
}
else
{
printf("Name or Code is wrong.\n");
}
}
} while (i++ < 2);

fclose(fp);
free(p);
free(q);

}
}
return false;

}




int main(void)
{
set_ID();



return 0;
}


我改成这样,“普通用户”还是没法正常查询,只能正确查询“管理员”,急啊!!!
高手帮忙,不然,没办法完成作业,谢谢了,先!!!
tangshuiling 2008-12-20
  • 打赏
  • 举报
回复
enum bool {false, true}; 在c++与c的混合编译器中是不被允许的,bool是c++的内置类型,直接用bool类型就可以啦
还有就是记住c类型的字串是以'\0'结尾的,在操作结构体中的name[21],code[11]变量后,记得在字串结尾处加入'\0'就可以了
thinkboy234 2008-12-20
  • 打赏
  • 举报
回复
...好长。。。。
waizqfor 2008-12-20
  • 打赏
  • 举报
回复
没编译器 帮定先
xqls_xqls 2008-12-20
  • 打赏
  • 举报
回复
UP
piaomiaoju 2008-12-20
  • 打赏
  • 举报
回复
上面的代码不可以么?? 我的c/c++格式,不知道为什么没用了
piaomiaoju 2008-12-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
enum Bool{False, True};

enum Bool set_ID(void)
{
struct id
{
char name[21];
char code[11];
int rights;
};

FILE *fp;
struct id *p, *q, *p1;
int m;
int i = 0;
long k = 0;

p = (struct id *)malloc(sizeof(struct id));

if((fp = fopen("code.dat", "rb")) == NULL)
{
puts("您是第一个登陆者,请注册为管理员: ");
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

fp = fopen("code.dat", "wb");
fwrite(p, sizeof(struct id), 1, fp);

puts("管理员设置帐号完毕.");
fclose(fp);
free(p);
printf("administrater\n");
// 添加代码

return True;
}
else
{
puts(" 0: 登陆 1: 注册 ");
do
{
printf("请选择(0/1): ");
scanf("%d", &m);
} while (m <0 || m>1);

if (m)
{

puts("请输入注册信息(用户名 密码 ):");
p1 = (struct id *)malloc(sizeof(struct id));

printf("Name(no more than 20 letters): ");
scanf("%20s", p1->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p1->code);
p1->rights = 0;

fclose(fp);
fp = fopen("code.dat", "a+b");
fwrite(p1, sizeof(struct id), 1, fp);
puts("普通用户注册成功! ");

fclose(fp);
free(p1);
printf("common\n");
//添加代码
return True;
}
else
{

q = (struct id *)malloc(sizeof(struct id));

printf("请输入您的 用户名 密码 权限\n");
printf("你只能尝试3次输入\n");

do
{
printf("The %d \n", i + 1);
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

while (!fseek(fp, (long)(k * sizeof(struct id)), SEEK_SET))
{
fread(q, sizeof(struct id), 1, fp);
if(!strcmp(p->name, q->name) && !strcmp(p->code, q->code))
{
if (q->rights)
{
fclose(fp);
free(p);
free(q);
printf("administrater:\n"); // 这里添加代码
return True;
}
else
{
fclose(fp);
free(p);
free(q);
printf("common:\n"); //这里添加代码
return True;
}
}

k++;
} //end while
} while (i++ < 2);
printf("Name or Code is wrong.\n");


fclose(fp);
free(p);
free(q);

}
}
return False;

}



int main(void)
{
set_ID();
return 0;
}
今天tjj 2008-12-20
  • 打赏
  • 举报
回复
第一次运行程序:创建一个管理员帐号,
第二次运行:可以创建普通用户帐号,可以用账号登陆
用户名和密码,我保存为一个coad.dat二进制文件中
以后陆续注册的普通帐号都保存其中,
要登录,就输入你注册的用户名和密码;
将你输进来的用户名和密码与保存在code.dat文件的用户名和密码一一比较,
若比较相等,即文件中有这个用户,则就算进入系统。
现在的问题是:如何把你输入的帐号与保存在文件的帐号一一比较???


千万解决一下!!!
太乙 2008-12-20
  • 打赏
  • 举报
回复
#include <stdio.h> 
#include <stdlib.h>

enum bool {false, true};

enum bool set_ID(void)
{
struct id
{
char name[21];
char code[11];
int rights;
};

FILE *fp;
struct id *p, *q, *p1;
int m;
int i = 0;
long k = 0;

p = (struct id *)malloc(sizeof(struct id));

if((fp = fopen("code.dat", "rb")) == NULL)
{
puts("您是第一个登陆者,请注册为管理员: ");
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

fp = fopen("code.dat", "wb");
fwrite(p, sizeof(struct id), 1, fp);

puts("管理员设置帐号完毕.");
fclose(fp);
free(p);
printf("administrater\n");
// 添加代码

return true;
}
else
{
puts(" 0: 登陆 1: 注册 ");
do
{
printf("请选择(0/1): ");
scanf("%d", &m);
} while (m <0 || m>1);

if (m)
{

puts("请输入注册信息(用户名 密码 ):");
p1 = (struct id *)malloc(sizeof(struct id));

printf("Name(no more than 20 letters): ");
scanf("%20s", p1->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p1->code);
p1->rights = 0;

fclose(fp);
fp = fopen("code.dat", "ab");
fwrite(p, sizeof(struct id), 1, fp);
puts("普通用户注册成功! ");

fclose(fp);
free(p1);
printf("common\n");
//添加代码
return true;
}
else
{

q = (struct id *)malloc(sizeof(struct id));

printf("请输入您的 用户名 密码 权限\n");
printf("你只能尝试3次输入\n");

do
{
printf("The %d \n", i + 1);
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

while (!fseek(fp, (long)(k * sizeof(struct id)), SEEK_SET))
{
fread(q, sizeof(struct id), 1, fp);
if(!strcmp(p->name, q->name) && !strcmp(p->code, q->code))
{
if (q->rights)
{
fclose(fp);
free(p);
free(q);
printf("administrater:\n"); // 这里添加代码
return true;
}
else
{
fclose(fp);
free(p);
free(q);
printf("common:\n"); //这里添加代码
return true;
}
}
else
{
printf("Name or Code is wrong.\n");
}
k++;
}
} while (i++ < 2);

fclose(fp);
free(p);
free(q);

}
}
return false;

}



int main(void)
{
set_ID();



return 0;
}



没懂lz想达到什么效果!!
candy110 2008-12-20
  • 打赏
  • 举报
回复
路过~
goziem 2008-12-20
  • 打赏
  • 举报
回复
.学知网是个有5000G学习资料的下载网站,注册后可免费下载以下资料:
.[路径]电脑网络-计算机教程-计算机教程1-计算机网络-Internet与Web技术概论
.[地址]http://www.stuknow.com/dirlist/10002/faa6b60e113199da40014bb2f0a5bcfe.htm?popid=guziem
piaomiaoju 2008-12-20
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
enum Bool{False, True};

enum Bool set_ID(void)
{
struct id
{
char name[21];
char code[11];
int rights;
};

FILE *fp;
struct id *p, *q, *p1;
int m;
int i = 0;
long k = 0;

p = (struct id *)malloc(sizeof(struct id));

if((fp = fopen("code.dat", "rb")) == NULL)
{
puts("您是第一个登陆者,请注册为管理员: ");
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

fp = fopen("code.dat", "wb");
fwrite(p, sizeof(struct id), 1, fp);

puts("管理员设置帐号完毕.");
fclose(fp);
free(p);
printf("administrater\n");
// 添加代码

return True;
}
else
{
puts(" 0: 登陆 1: 注册 ");
do
{
printf("请选择(0/1): ");
scanf("%d", &m);
} while (m <0 || m>1);

if (m)
{

puts("请输入注册信息(用户名 密码 ):");
p1 = (struct id *)malloc(sizeof(struct id));

printf("Name(no more than 20 letters): ");
scanf("%20s", p1->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p1->code);
p1->rights = 0;

fclose(fp);
fp = fopen("code.dat", "a+b"); //a+清除 eof
fwrite(p1, sizeof(struct id), 1, fp); //p1
puts("普通用户注册成功! ");

fclose(fp);
free(p1);
printf("common\n");
//添加代码
return True;
}
else
{

q = (struct id *)malloc(sizeof(struct id));

printf("请输入您的 用户名 密码 权限\n");
printf("你只能尝试3次输入\n");

do
{
printf("The %d \n", i + 1);
printf("Name(no more than 20 letters): ");
scanf("%20s", p->name);
printf("Code(no more than 10 numbers): ");
scanf("%10s",p->code);
printf("Right(admi:1, comm:0): ");
scanf("%d", &p->rights);

while (!fseek(fp, (long)(k * sizeof(struct id)), SEEK_SET))
{
fread(q, sizeof(struct id), 1, fp);
if(!strcmp(p->name, q->name) && !strcmp(p->code, q->code))
{
if (q->rights)
{
fclose(fp);
free(p);
free(q);
printf("administrater:\n"); // 这里添加代码
return True;
}
else
{
fclose(fp);
free(p);
free(q);
printf("common:\n"); //这里添加代码
return True;
}
}

k++;
} //end while
} while (i++ < 2);
printf("Name or Code is wrong.\n"); //完成后才判断


fclose(fp);
free(p);
free(q);

}
}
return False;

}



int main(void)
{
set_ID();
return 0;
}

===========================
代码要标清楚点,不好弄
piaomiaoju 2008-12-20
  • 打赏
  • 举报
回复
a+b
piaomiaoju 2008-12-20
  • 打赏
  • 举报
回复
fp = fopen("code.dat", "ab"); //错误 的

70,023

社区成员

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

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