注意:该程序会将账户数据存储到c盘里,名称是Number datas.db
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <io.h>
typedef struct
{
char *id,*password;
int score;
}Elemtype;
struct LNode
{
Elemtype data;
struct LNode *next;
};
char *filename;
char *jia_string(char *a)
{
int b;
for(b=0;b<strlen(a);b++)
{
a[b]=a[b]+10;
}
return a;
}
struct LNode *cha_ru(struct LNode *a,Elemtype b)
{
struct LNode *c;
c=(struct LNode*)malloc(sizeof(struct LNode));
c->data=b;
c->next=a;
a=c;
return a;
}
struct LNode *InItList()
{
filename=(char*)malloc(sizeof(char));
strcpy(filename,"C:\\Number datas.db");
struct LNode *a;
a=NULL;
char *ok;
ok=(char*)malloc(sizeof(char));
if(_access(filename,F_OK)==-1)
{
strcpy(ok,"wt+");
}
else
{
strcpy(ok,"rt");
}
int a2=1;
FILE*m=fopen(filename,ok);
if(strcmp(ok,"rt")==0)
{
for(;;)
{
char *a1,*b,*c,*d,*g,*f;
a1=(char*)malloc(sizeof(char));
b=(char*)malloc(sizeof(char));
c=(char*)malloc(sizeof(char));
d=(char*)malloc(sizeof(char));
g=(char*)malloc(sizeof(char));
f=(char*)malloc(sizeof(char));
fgets(a1,20,m);
fgets(b,20,m);
fgets(c,20,m);
fgets(d,20,m);
fgets(g,20,m);
fgets(f,20,m);
a1[strlen(a1)-1]=0;
b[strlen(b)-1]=0;
c[strlen(c)-1]=0;
d[strlen(d)-1]=0;
g[strlen(g)-1]=0;
f[strlen(f)-1]=0;
a1=jia_string(a1);
b=jia_string(b);
c=jia_string(c);
d=jia_string(d);
g=jia_string(g);
f=jia_string(f);
if((strcmp(a1,"id:")==0)&&(strcmp(c,"password:")==0)&&(strcmp(g,"score:")==0))
{
Elemtype e;
e.id=b;
e.password=d;
e.score=atoi(f);
a=cha_ru(a,e);
free(a1);
free(c);
free(g);
free(f);
}
else
{
free(a1);
free(b);
free(c);
free(d);
free(g);
free(f);
break;
}
a2++;
}
}
fclose(m);
free(ok);
return a;
}
char *op(int a,char c[],int l)
{
printf("请输入%s:",c);
char *b;
b=(char*)malloc(sizeof(char));
int c0;
for(;;)
{
gets(b);
for(c0=0;c0<strlen(b);c0++)
{
if(!isdigit(b[c0]))
{
break;
}
}
if(strlen(b)==0)
{
printf("内容不能为空!");
}
else if(strlen(b)>a)
{
printf("%s过长!",c);
}
else if(strlen(b)<l)
{
printf("%s过短!",c);
}
else
{
break;
}
printf("输入错误,请重新输入,重新输入的内容为:");
}
return b;
}
Elemtype xin_xi()
{
char *a,*b;
a=op(20,"用户名",0);
b=op(15,"密码",6);
Elemtype c;
c.id=a;
c.password=b;
c.score=0;
return c;
}
struct LNode *cha_xvn(struct LNode *a,Elemtype b)
{
struct LNode *c;
c=a;
while(c)
{
if(((strcmp(a->data.id,b.id)==0)&&(strcmp(a->data.password,b.password)==0)))
{
break;
}
c=c->next;
}
return c;
}
char *jian_string(char *a)
{
int b;
for(b=0;b<strlen(a);b++)
{
a[b]=a[b]-10;
}
return a;
}
void FputsList(struct LNode *a)
{
struct LNode *b;
b=a;
char *c,*d,*e;
c=(char*)malloc(sizeof(char));
d=(char*)malloc(sizeof(char));
e=(char*)malloc(sizeof(char));
strcpy(c,"id:");
strcpy(d,"password:");
strcpy(e,"score:");
FILE*fp=fopen(filename,"wt+");
c=jian_string(c);
d=jian_string(d);
e=jian_string(e);
while(b)
{
char *f,*g,*h;
f=(char*)malloc(sizeof(char));
g=(char*)malloc(sizeof(char));
h=(char*)malloc(sizeof(char));
strcpy(f,b->data.id);
strcpy(g,b->data.password);
sprintf(h,"%d",b->data.score);
f=jian_string(f);
g=jian_string(g);
h=jian_string(h);
fprintf(fp,"%s\n%s\n%s\n%s\n%s\n%s\n",c,f,d,g,e,h);
free(f);
free(g);
free(h);
b=b->next;
}
free(c);
free(d);
free(e);
fclose(fp);
}
struct LNode *chaxvn_charu(struct LNode *a,Elemtype b)
{
struct LNode *c;
c=a;
while(c&&(strcmp(a->data.id,b.id)!=0))
{
c=c->next;
}
return c;
}
struct LNode *Delete(struct LNode *a,Elemtype b)
{
struct LNode *c,*d;
c=a;
while((c)&&(!((strcmp(a->data.id,b.id)==0)&&(strcmp(a->data.password,b.password)==0))))
{
d=c;
c=c->next;
}
if(c!=a)
{
free(c->data.id);
free(c->data.password);
d->next=c->next;
free(c);
}
else
{
struct LNode *a1;
a1=a;
a=a->next;
free(a);
}
return a;
}
struct LNode *da_f1(struct LNode *a,struct LNode *g)
{
printf("请输入您要的算式数量(每答对一道送20分)\n");
char *a1;
a1=(char*)malloc(sizeof(char));
int b1;
do
{
gets(a1);
for(b1=0;b1<strlen(a1);b1++)
{
if((a1[b1]<'0')||(a1[b1]>'9'))
{
break;
}
}
}while((b1==0)||(b1!=strlen(a1)));
int u1,c1;
for(u1=0;u1<atoi(a1);u1++)
{
printf("请回答第%d题:",u1+1);
c1=rand()%101;
b1=rand()%101;
if(c1+b1>100)
{
c1=1+rand()%(100-b1);
}
if(math(c1,b1)==c1+b1)
{
g->data.score=g->data.score+20;
FputsList(a);
printf("回答正确!\n");
}
else
{
printf("回答错误!\n");
}
}
free(a1);
return a;
}
double math_gets_double()
{
char *c;
c=(char*)malloc(sizeof(char));
int d;
do
{
gets(c);
for(d=0;d<strlen(c);d++)
{
if((!isdigit(c[d]))&&(c[d]!='.'))
{
break;
}
}
}while((d==0)||(d!=strlen(c)));
double e;
e=atof(c);
free(c);
return e;
}
struct LNode *da_f2(struct LNode *a0,struct LNode *b0)
{
double *a;
a=(double*)malloc(sizeof(double)*10);
int b;
for(b=0;b<10;b++)
{
a[b]=(double)(rand()%100);
}
double c,d=0;
printf("请输入数列");
for(b=0;b<10;b++)
{
printf("%d",(int)a[b]);
d=d+a[b];
if(b!=9)
{
printf("、");
}
}
printf("的平均数(回答正确得150分):\n");
d=d/10;
c=math_gets_double();
if(c==d)
{
a0->data.score=a0->data.score+150;
FputsList(b0);
printf("回答正确!\n");
}
else
{
printf("回答错误!\n");
}
return b0;
}
struct LNode *games(struct LNode *a,Elemtype b)
{
char *c;
c=(char*)malloc(sizeof(char));
do
{
puts("1.【注 销】\n2.【10 0以内加 法】\n3.【退 出】\n4.【查 分】\n5.【修 改 用户 名】\n6.【修 改 密 码】\n7.【计 算 平均 数】");
for(;;)
{
gets(c);
if((strcmp(c,"1")==0)||(strcmp(c,"2")==0)||(strcmp(c,"3")==0)||(strcmp(c,"4")==0)||(strcmp(c,"5")==0)||(strcmp(c,"6")==0)||(strcmp(c,"7")==0))
{
break;
}
else if(strlen(c)==0)
{
printf("内容不能为空!");
}
else
{
printf("您输入的指令有误!");
}
printf("请重新输入,重新输入的内容为:");
}
if(strcmp(c,"3")!=0)
{
struct LNode *g;
g=a;
while(g&&(!((strcmp(g->data.id,b.id)==0)&&(strcmp(g->data.password,b.password)==0))))
{
g=g->next;
}
if(strcmp(c,"1")==0)
{
a=Delete(a,b);
FputsList(a);
printf("注销成功!\n");
}
else if(strcmp(c,"4")==0)
{
printf("游戏分数:%d\n",g->data.score);
}
else if((strcmp(c,"5")==0)||(strcmp(c,"6")==0))
{
if(strcmp(c,"5")==0)
{
free(b.id);
b.id=op(20,"用户名",0);
free(g->data.id);
g->data.id=b.id;
}
else
{
free(b.password);
b.password=op(15,"密码",6);
free(g->data.password);
g->data.password=b.password;
}
FputsList(a);
}
else if(strcmp(c,"7")==0)
{
a=da_f2(g,a);
}
else
{
a=da_f1(a,g);
}
}
if((strcmp(c,"3")!=0)&&(strcmp(c,"1")!=0))
{
system("pause");
}
}while((strcmp(c,"3")!=0)&&(strcmp(c,"1")!=0));
free(c);
if(!((strcmp(c,"5")==0)||(strcmp(c,"6")==0)))
{
free(b.id);
free(b.password);
}
return a;
}
int math_gets()
{
char *c;
c=(char*)malloc(sizeof(char));
int d;
do
{
gets(c);
for(d=0;d<strlen(c);d++)
{
if(!isdigit(c[d]))
{
break;
}
}
}while((d==0)||(d!=strlen(c)));
int e;
e=atoi(c);
free(c);
return e;
}
int math(int a,int b)
{
printf("%d+%d=",a,b);
return math_gets();
}
void Windows_system()
{
struct LNode *a;
a=InItList();
char *b;
b=(char*)malloc(sizeof(char));
int c;
do
{
puts("1.【注 册】\n2.【登 录】\n3.【退 出】");
for(;;)
{
gets(b);
for(c=0;c<strlen(b);c++)
{
if(!isdigit(b[c]))
{
break;
}
}
if(strlen(b)==0)
{
printf("内容不能为空!");
}
else if((strcmp(b,"1")==0)||(strcmp(b,"2")==0)||(strcmp(b,"3")==0))
{
break;
}
else
{
printf("输入的指令有误!");
}
printf("请重新输入,重新输入的内容为:");
}
if(strcmp(b,"3")!=0)
{
Elemtype d;
d=xin_xi();
if(strcmp(b,"1")==0)
{
if(chaxvn_charu(a,d))
{
printf("注册失败!\n");
}
else
{
a=cha_ru(a,d);
FputsList(a);
printf("注册成功!\n");
}
}
else
{
if(!cha_xvn(a,d))
{
printf("登录失败!\n");
}
else
{
printf("登录成功!\n");
a=games(a,d);
}
}
system("pause");
}
else
{
printf("已退出,请按任意键继续. . . . . .\n");
getch();
}
}while(strcmp(b,"3")!=0);
free(b);
}
void f8()
{
srand((unsigned)time(NULL));
system("color f0");
char a[]="Math Dash IT";
char b[strlen(a)+6];
sprintf(b,"title %s",a);
system(b);
puts(a);
Windows_system();
}
main()
{
f8();
return 0;
}
程序运行如下: