匿名用户
1级
2014-11-27 回答
我看了楼上几个的答案,功能均不是很完善,所以我决定来试一试
,应该是今天最迟是明天可以贴出来了.希望不要那么快就结贴....
哈哈.....经过了几个小时的奋战..终于搞出来了!!!!!!!!!!!!!!!!!!!你题目要求的功能几乎全部实现.希望你认真调试一下!!!!!!
调试环境.vc++6.0.支持中文编译的编译器都可以调试运行的.
注意事项:如果编译器是不支持中文显示的就会出现乱码的,所以最好是在支持中文显示的编译器上面编译运行.例如:vc++6.0以上的版本!!!!
#include
#include
#include
#include
#include
#defineMAX5
structrecord
{
charname[10];
intsorce;
}rec[MAX],Rec;
intn;//记录行数
intnum;//输入的数字
voiddisplay();//开始界面
voidxuanze();//选择函数
voidsys(inta);//操作函数
voidnewgame();//新游戏
voidvdisplay();//浏览记录界面
voidvxuanze();//浏览选择函数
voidhelp();//帮助说明
voidvsys(inta);//浏览操作函数
voidviewsorce();//按记录的顺序浏览
voidviewname();//按记录的姓名浏览
voidviewsname();//按记录和姓名浏览
voiddelrec();//删除记录
intqushu();//取数函数
inttishi(intaa);//提示函数
voidaddrec(inta);//判断并且增加记录
voidrecread();//读取记录文件
voidrecwrite();//写入记录文件
///
函数定义//
voiddisplay()//开始界面
{
system("cls");//清屏
printf("============================================\n");
printf("================数字竞猜游戏================\n");
printf("============================================\n");
printf("\n");
printf("1:新游戏\n");
printf("\n");
printf("2:浏览记录\n");
printf("\n");
printf("3:帮助说明\n");
printf("\n");
printf("4:清除记录\n");
printf("\n");
printf("5:退出\n");
printf("\n");
printf("============================================\n");
xuanze();
}
voidxuanze()//选择函数
{
inta;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4||a==5)
{
sys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
voidsys(inta)//操作函数
{
switch(a)
{
case1:newgame();break;
case2:vdisplay();break;
case3:help();break;
case4:delrec();break;
case5:exit(0);break;//退出
}
}
voidnewgame()//新游戏
{
recread();
system("cls");//清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(inti=0;i
{
if(rec[i].sorce==0)printf("\n");
else
printf("第%d名:姓名:%s分数%d\n",i+1,rec[i].name,rec[i].sorce);
}
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();//上面列出记录文件中的记录
/
intsnum;//输入的数字
intsn=10;//机会次数
num=qushu();//取数
L:system("cls");//清屏
printf("============================================\n");
printf("================数字竞猜游戏================\n");
printf("============================================\n");
printf("\n");
printf("1:显示答案\n");
printf("============================================\n");
printf("\n");
printf("请输入你猜想的四个数字(格式为9999样式)你还有%d次机会:\n",sn);
scanf("%d",&snum);
if(snum<10000&&snum>1000||snum==1)
{
if(snum==1)
{
printf("你放弃了本局游戏!该四个数字是:%d\n",num);
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
else
{
intflag=tishi(snum);
if(flag!=0&&sn!=0)
{
sn--;
if(sn==0)
{
printf("真是遗憾!十次机会没有了!没有关系!下次继续!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
printf("请按任意键继续猜...\n");
getchar();
getchar();
gotoL;
}
else
{
if(sn!=0)addrec(sn);
else
{
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
}
}
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
gotoL;
}
}
voidhelp()//帮助说明
{
system("cls");//清屏
printf("============================================\n");
printf("==============数字竞猜游戏帮助==============\n");
printf("============================================\n");
printf("\n");
printf("1.新游戏中,你可以输入四位数,来竞猜系统自动生成的四个数字!,只有十次的机会,\n");
printf("每次机会都有相对应的提示,十次的机会利用完了还没有猜对的话就算失败!四个数字的\n");
printf("相应格式在游戏中会有提示!当成功猜出系统给定的数字时候,就会统计你的成绩.当你的\n");
printf("成绩比记录文件中的记录好的时候就会提示你是否把记录记录到记录文件中,当你选择是\n");
printf("的时候就会接着提示你输入你的名字.再按回车.没有意外就会提示保存成功!\n");
printf("还有要说明的是记录中的分数是越低就代表成绩越好!\n");
printf("2.浏览记录有三种方式!第一种只是列出记录中的姓名;第二种是列出记录中的成绩次序\n");
printf("第三种是姓名跟成绩一起列出来!\n");
printf("3.清除记录就是把记录文件初始化.即是让记录文件为空!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
voidvdisplay()//浏览记录界面
{
system("cls");//清屏
printf("============================================\n");
printf("================数字竞猜游戏================\n");
printf("============================================\n");
printf("\n");
printf("1:按记录的顺序浏览\n");
printf("\n");
printf("2:按记录的姓名浏览\n");
printf("\n");
printf("3:姓名记录全部浏览\n");
printf("\n");
printf("4:返回上级\n");
printf("\n");
printf("============================================\n");
vxuanze();
}
voidvxuanze()//浏览选择函数
{
inta;
printf("请输入你所选择的操作数:\n");
scanf("%d",&a);
if(a==1||a==2||a==3||a==4)
{
vsys(a);
}//选择相应的操作数执行函数
else
{
printf("错误的操作数!\n");;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
}
voidvsys(inta)//浏览操作函数
{
switch(a)
{
case1:viewsorce();break;
case2:viewname();break;
case3:viewsname();break;
case4:display();break;//返回上级
}
}
voidviewname()//按记录的顺序浏览
{
recread();
system("cls");//清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(inti=0;i
{
if(rec[i].sorce==0)printf("\n");
else
printf("第%d名:姓名:%s\n",i+1,rec[i].name);
}
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
voidviewsorce()//按记录的姓名浏览
{
recread();
system("cls");//清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(inti=0;i
{
if(rec[i].sorce==0)printf("\n");
else
printf("第%d名:分数%d\n",i+1,rec[i].sorce);
}
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
voidviewsname()//按姓名和记录浏览
{
recread();
system("cls");//清屏
printf("\n");
printf("记录列表显示如下:\n");
printf("\n");
for(inti=0;i
{
if(rec[i].sorce==0)printf("\n");
else
printf("第%d名:姓名:%s分数%d\n",i+1,rec[i].name,rec[i].sorce);
}
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
vdisplay();
}
voiddelrec()//删除记录
{
recread();
for(inti=0;i
{
rec[i].sorce=0;
}
recwrite();
printf("删除成功!\n");
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
intqushu()//取数函数
{
inta=0;
inti=0;
srand((unsigned)time(NULL));//随机数种子设置
while(i==0)
{
i=rand();//这样做就是为了增加随机性
i=i%100;
}
L:for(intj=0;j
{
a=a+rand();//判断随机数是否是四位数如果不是继续取数
}
a=(a/i+rand())%10000;
if(a<1000)gotoL;
return(a);
}
inttishi(intaa)//提示函数
{
inta,b,c,d;
intaf,bf,cf,df;
if(aa==num)
{
printf("恭喜!你猜对了!四个数就是:%d\n",num);
return(0);
}
else
{
a=(num-num%1000)/1000;
b=(num%1000-(num%1000)%100)/100;
c=((num%1000)%100-((num%1000)%100)%10)/10;//获取默认四个数字
d=((num%1000)%100)%10;
af=(aa-aa%1000)/1000;
bf=(aa%1000-(aa%1000)%100)/100;
cf=((aa%1000)%100-((aa%1000)%100)%10)/10;//获取输入的四个数字
df=((aa%1000)%100)%10;
if(af>a)printf("\n第一个数应该比%d小一点!\n",af);
if(af==a)printf("恭喜!第一个数字对了!应该是:%d\n",af);//数字比较
if(af
if(bf>b)printf("第二个数应该比%d小一点!\n",bf);
if(bf==b)printf("恭喜!第二个数字对了!就是:%d\n",bf);//数字比较
if(bf
if(cf>c)printf("第三个数应该比%d小一点!\n",cf);
if(cf==c)printf("恭喜!第三个数字对了!就是:%d\n",cf);//数字比较
if(cf
if(df>d)printf("第四个数应该比%d小一点!\n",df);
if(df==d)printf("恭喜!第四个数字对了!就是:%d\n",df);//数字比较
if(df
return(1);
}
}
voidaddrec(inta)//判断并且增加记录
{
charc;
intflag=0;//标志位
a=11-a;
recread();
for(inti=0;i
{
if(a
{
if(i==4||rec[i].sorce==0)
{
printf("\n");
printf("恭喜!你的成绩%d分已经达到了前五名!\n",a);
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%s",&c);
if(c!='y')display();
rec[i+1].sorce=rec[i].sorce;//记录后移
strcpy(rec[i+1].name,rec[i].name);
printf("请输入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite();//写入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
else
{
printf("\n");
printf("恭喜!你的成绩%d分已经达到了前五名!\n",a);
printf("确认要保存记录请按'y',任意键返回...!\n");
scanf("%s",&c);
if(c!='y')display();
for(intj=i;j
{
rec[j+1].sorce=rec[j].sorce;//记录后移
strcpy(rec[j+1].name,rec[j].name);
if(rec[j+2].sorce==0)break;
}
printf("\n");
printf("请输入你的名字\n");
scanf("%s",&rec[i].name);
rec[i].sorce=a;
recwrite();//写入
printf("恭喜!添加成功!\n",a);
flag++;
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
}
if(flag==0)
{
printf("\n");
printf("请按任意键继续...\n");
getchar();
getchar();
display();
}
}
voidrecread()//读取记录文件
{
FILE*fp;
L:fp=fopen("E:\\rec.rec","rb");
if(fp==NULL)
{
recwrite();
gotoL;//初始化
}
if(fread(&rec,sizeof(record),MAX,fp)==MAX)
{
}
else
{
printf("文件读取失败!");
}
fclose(fp);
}
voidrecwrite()//写入记录文件
{
FILE*fp;
fp=fopen("E:\\rec.rec","wb");
if(fp==NULL)
printf("写入失败!\n");
fwrite(rec,sizeof(record),MAX,fp);
fclose(fp);
}
voidmain()
{
display();
}