调一下这个程序

今天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;
}
...全文
148 14 打赏 收藏 转发到动态 举报
写回复
用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"); //错误 的
老规矩,先看本节效果图我们实现这个支付功能完全是借助小程序云开发实现的,不用搭建自己的服务器,不用买域名,不用备案域名,不用支持https。只需要一个简单的云函数,就可以轻松的实现微信小程序支付功能。核心代码就下面这些一,创建一个云开发小程序关于如何创建云开发小程序,这里我就不再做具体讲解。不知道怎么创建云开发小程序的同学,可以去翻看我之前的文章,或者看下我录制的视频:https://edu.csdn.net/course/play/9604/204528创建云开发小程序有几点注意的1,一定不要忘记在app.js里初始化云开发环境。2,创建完云函数后,一定要记得上传二, 创建支付的云函数1,创建云函数pay三,引入三方依赖tenpay我们这里引入三方依赖的目的,是创建我们支付时需要的一些参数。我们安装依赖是使用里npm 而npm必须安装node,关于如何安装node,我这里不做讲解,百度一下,网上一大堆。1,首先右键pay,然后选择在终端中打开2,我们使用npm来安装这个依赖。在命令行里执行 npm i tenpay安装完成后,我们的pay云函数会多出一个package.json 文件到这里我们的tenpay依赖就安装好了。四,编写云函数pay完整代码如下//云开发实现支付 const cloud = require('wx-server-sdk')cloud.init() //1,引入支付的三方依赖 const tenpay = require('tenpay'); //2,配置支付信息 const config = ;exports.main = async(event, context) => 一定要注意把appid,mchid,partnerKey换成你自己的。到这里我们获取小程序支付所需参数的云函数代码就编写完成了。不要忘记上传这个云函数。出现下图就代表上传成功五,写一个简单的页面,用来提交订单,用pay云函数。这个页面很简单,1,自己随便编写一个订单号(这个订单号要大于6位)2,自己随便填写一个订单价(单位是分)3,点击按钮,用pay云函数。获取支付所需参数。下图是官方支付api所需要的一些必须参数。下图是我们用pay云函数获取的参数,和上图所需要的是不是一样。六,用wx.requestPayment实现支付下图是官方的示例代码这里不在做具体讲解了,完整的可以看视频。实现效果1,起支付键盘2,支付完成3,log日志,可以看出不同支付状态的回上图是支付成功的回,我们可以在支付成功回时,改变订单支付状态。下图是支付失败的回,下图是支付完成的状态。到这里我们就轻松的实现了微信小程序的支付功能了。是不是很简单啊,完整的讲解可以看视频。

69,369

社区成员

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

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