24点游戏.docx
《24点游戏.docx》由会员分享,可在线阅读,更多相关《24点游戏.docx(25页珍藏版)》请在冰豆网上搜索。
![24点游戏.docx](https://file1.bdocx.com/fileroot1/2022-11/23/fa818d6b-b08a-475e-9fca-cef88f5d0e4c/fa818d6b-b08a-475e-9fca-cef88f5d0e4c1.gif)
24点游戏
课程设计报告
题目24点游戏
课程名称
院部名称
专业
班级
学生姓名
学号
课程设计地点
课程设计学时
指导教师
课程设计报告目录
一、实验目的和要求1
二、实验仪器和设备1
三、实验过程2
四、实验结果与分析19
五、实验心得20
一、实验目的和要求
1.实验目的
1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;
3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4)训练用系统的观点和软件开发一般规范进行软件开发。
5)培养快速学习新的知识,并在项目中使用的能力。
2.实验要求
设计并实现24点游戏,满足以下基本要求:
①运行系统后,出现登录/注册初始界面,允许用户选择“注册”、“登录”或“退出”。
用户分为2类:
管理员、一般用户,他们拥有不用权限。
管理员可以对用户信息实现增、删、改、查等管理操作;一般用户可以进入游戏,以及查看英雄榜。
②玩家开始游戏后,系统随机产生四个1-13的数,分别代表13张牌。
提示玩家输入算式。
判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字。
当玩家正确输入算式后,运用“用堆栈求解表达式”的原理,求出结果并判断是否为24,得出用户是输是赢的结果。
③如果用户赢,计算其所用时间(从输入算式开始计算,直至输入算式结束),并与英雄榜中成绩进行比较。
可以进入英雄榜的,则需更新英雄榜。
英雄榜只按成绩降序记录1-5名相关信息。
二、实验仪器和设备
MicrosoftWindowsXP/Windows7
TurboC/VisualC++
三、实验过程
1需求分析
(1)功能模块
2概要设计
登录注册初始界面
前台界面:
后台界面:
3详细设计:
实现初始界面,前台界面,后台界面之间的转换
#include
#include
charc;
voidregist();
voidlog();
voidcpassword();
voidbegin();
voidherotop();
voidshift();
voidadd();
voiddel();
voidalter();
voidsearch();
index()
{charch;
system("cls");
printf("\t***************************************************\n");
printf("\t**\n");
printf("\t*24点游戏*\n");
printf("\t**\n");
printf("\t***************************************************\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t1注册\n");
printf("\t2登陆\n");
printf("\t3修改密码\n");
printf("\t4退出\n");
printf("\tchooseyouwantto:
");
ch=getchar();
c=getchar();
switch(ch)
{case'1':
regist();break;
case'2':
log();break;
case'3':
cpassword();break;
case'4':
system("cls");printf("再见!
\n");exit(0);break;
}
}
game()
{charch;
system("cls");
printf("\t***************************************************\n");
printf("\t**\n");
printf("\t*24点游戏*\n");
printf("\t**\n");
printf("\t***************************************************\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t1开始游戏\n");
printf("\t2查看英雄榜\n");
printf("\t3切换用户\n");
printf("\t4退出\n");/*跳转到登陆界面*/
printf("\tchooseyouwantto:
");
ch=getchar();
c=getchar();
switch(ch)
{case'1':
begin();break;
case'2':
herotop();break;
case'3':
shift();index();break;
case'4':
index();break;
}
}
admisit()
{charch;
system("cls");
printf("\t***************************************************\n");
printf("\t**\n");
printf("\t*24点游戏*\n");
printf("\t**\n");
printf("\t***************************************************\n");
printf("\n");
printf("\n");
printf("\n");
printf("\n");
printf("\t1增加用户\n");
printf("\t2删除用户\n");
printf("\t3修改用户信息\n");
printf("\t4查找用户信息\n");
printf("\t5退出\n");/*跳转到登陆界面*/
printf("\tchooseyouwantto:
");
ch=getchar();
c=getchar();
switch(ch)
{case'1':
add();break;
case'2':
del();break;
case'3':
alter();break;
case'4':
search();break;
case'5':
index();break;/*跳转到登录界面*/
}
}
main()
{
index();
}
voidregist()/*登录界面函数*/
{system("cls");
printf("注册\n");
}
voidlog()
{chartype;
system("cls");
printf("登录\n");
printf("chooseusertype:
");
type=getchar();
c=getchar();
switch(type)
{case'u':
game();break;/*用户*/
case'a':
admisit();break;/*管理员*/
}
}
voidcpassword()
{system("cls");
printf("修改密码\n");
}
voidbegin()/*游戏界面函数*/
{system("cls");
printf("开始游戏\n");
}
voidherotop()
{system("cls");
printf("查看英雄榜\n");
}
voidshift()
{system("cls");
printf("切换用户\n");
}
voidadd()/*后台界面函数*/
{system("cls");
printf("增加用户\n");
}
voiddel()
{system("cls");
printf("删除用户\n");
}
voidalter()
{system("cls");
printf("修改用户信息\n");
}
voidsearch()
{system("cls");
printf("查找用户信息\n");
}
4编码
#include"stdio.h"/*标准输入输出函数库*/
#include"stdlib.h"/*标准函数库*/
#include"string.h"/*字符串函数库*/
#include"conio.h"/*屏幕操作函数库*/
#defineHEADER1"------游戏用户信息文件---------\n"
#defineHEADER2"|用户名|密码|\n"
#defineHEADER3"|---------------|---------------|\n"
#defineFORMAT"|%-10s|%-15s|\n"
#defineDATAp->name,p->pwd
#defineEND"-----------------------------\n"
#defineN100
intsaveflag=0;/*是否需要存盘的标志变量*/
/*定义与用户文件有关的数据结构*/
typedefstructuserinfo/*标记为userinfo*/
{
charname[10];/*姓名*/
charpwd[15];/*密码*/
}USERINFO;
voidmenu()/*主菜单*/
{
system("cls");
printf("游戏用户管理\n");
printf("**********************Menu**********************\n");
printf("*1添加记录2显示记录*\n");
printf("*3删除记录4查询记录*\n");
printf("*5修改记录6保存*\n");
printf("*7退出*\n");
printf("************************************************\n");
}
/*格式化输出表头*/
voidprintheader()
{
printf(HEADER1);
printf(HEADER2);
printf(HEADER3);
}
/*格式化输出表中数据*/
voidprintdata(USERINFOpp)
{
USERINFO*p;
p=&pp;
printf(FORMAT,DATA);
}
/*显示数组temp[]中存储的用户记录,内容为userinfo结构中定义的内容*/
voidDisp(USERINFOtemp[],intn)
{
inti;
if(n==0)/*表示没有用户记录*/
{
printf("\n=====>没有用户记录,请输入!
\n");
getchar();
return;
}
printf("\n\n");
printheader();/*输出表格头部*/
i=0;
while(i{
printdata(temp[i]);
i++;
printf(HEADER3);
}
getchar();
getchar();
}
voidWrong()/*输出按键错误信息*/
{
printf("\n\n\n\n\n***********输入错误!
按任意键继续**********\n");
getchar();
}
voidNofind()/*输出未查找此记录的信息*/
{
printf("\n=====>没有发现此用户记录!
\n");
}
/*************************************************************
作用:
用于定位数组中符合要求的记录,返并回保存该记录的数组元素下标值
参数:
findmess[]保存要查找的具体内容;name[]保存按什么在数组中查找;
**************************************************************/
intLocate(USERINFOtemp[],intn,charfindmess[],charname[])
{
inti=0;
if(strcmp(name,"name")==0)/*按姓名查询*/
{
while(i{
if(strcmp(temp[i].name,findmess)==0)/*若找到findmess值的姓名*/
returni;
i++;
}
}
return-1;/*若未找到,返回一个整数-1*/
}
/*输入字符串,并进行长度验证(长度voidstringinput(char*t,intlens,char*notice)
{
charn[50];
do{
printf(notice);/*显示提示信息*/
scanf("%s",n);/*输入字符串*/
if(strlen(n)>lens)printf("\n输入长度越界!
\n");
/*进行长度校验,超过lens值重新输入*/
}while(strlen(n)>lens);
strcpy(t,n);/*将输入的字符串拷贝到字符串t中*/
}
/*增加用户记录*/
intAdd(USERINFOtemp[],intn)
{
system("cls");
Disp(temp,n);/*先打印出已有的用户信息*/
stringinput(temp[n].name,15,"用户名:
");
stringinput(temp[n].pwd,15,"密码:
");
n++;
returnn;
}
/*按用户名,查询用户信息记录*/
voidQur(USERINFOtemp[],intn)
{
intselect;/*1:
按姓名查,2:
返回主界面(菜单)*/
charsearchinput[15];/*保存用户输入的查询内容*/
intp=0;
if(n<=0)/*若数组为空*/
{
system("cls");
printf("\n=====>无此条用户信息!
\n");
getchar();getchar();
return;
}
system("cls");
printf("\n=====>1按姓名查找=====>2返回主菜单\n");
printf("请选择[1,2]:
");
//getchar();
scanf("%d",&select);
if(select==1)/*按姓名查询*/
{
stringinput(searchinput,10,"请输入要查询的用户名:
");
p=Locate(temp,n,searchinput,"name");
/*在数组temp中查找编号为searchinput值的元素,并返回该数组元素的下标值*/
if(p!
=-1)/*若找到该记录*/
{
printheader();
printdata(temp[p]);
printf(END);
printf("pressanykeytoreturn");
getchar();
}
else
Nofind();
getchar();
}
elseif(select==2)/*返回主菜单*/
{
menu(0);///////////////////////////////////////////////
}
}
/*删除用户记录:
先找到保存该记录的数组元素的下标值,然后在数组中删除该数组元素*/
intDel(USERINFOtemp[],intn)
{
intsel;
charfindmess[20];
intp=0,i=0;
if(n<=0)
{system("cls");
printf("\n=====>没有用户信息!
\n");
getchar();
returnn;
}
system("cls");
Disp(temp,n);
printf("\n=====>1按姓名删除=====>2返回主菜单\n");
printf("请选择[1,2]:
");
scanf("%d",&sel);
if(sel==1)
{
stringinput(findmess,10,"输入要删除的用户名:
");
p=Locate(temp,n,findmess,"name");
getchar();
if(p!
=-1)
{
for(i=p+1;i{
strcpy(temp[i-1].name,temp[i].name);
strcpy(temp[i-1].pwd,temp[i].pwd);
}
printf("\n==>删除成功!
\n");
n--;
getchar();
saveflag=1;
}
else
Nofind();
getchar();
}
elseif(sel==2)/*返回主菜单*/
{
menu();
}
returnn;
}
/*修改用户记录。
先按输入的联系人姓名查询到该记录,
然后提示用户修改该记录编号之外的值,编号不能修改*/
voidModify(USERINFOtemp[],intn)
{
charfindmess[20];
intp=0;
if(n<=0)
{system("cls");
printf("\n=====>没有此用户信息!
\n");
getchar();
getchar();
return;
}
system("cls");
printf("修改用户记录");
Disp(temp,n);
stringinput(findmess,10,"请输入要修改的用户名:
");/*输入并检验该姓名*/
p=Locate(temp,n,findmess,"name");/*查询到该数组元素,并返回下标值*/
if(p!
=-1)/*若p!
=-1,表明已经找到该数组元素*/
{
printf("用户名:
%s,",temp[p].name);
stringinput(temp[p].name,15,"输入新用户名:
");
printf("密码:
%s,",temp[p].pwd);
stringinput(temp[p].pwd,30,"输入新密码:
");
printf("\n=====>修改成功!
\n");
getchar();
Disp(temp,n);
getchar();
saveflag=1;
}
else
{Nofind();
getchar();
}
return;
}
/*数据存盘,若用户没有专门进行此操作且对数据有修改,在退出系统时,会提示用户存盘*/
voidSave(USERINFOtemp[],intn)
{
FILE*fp;
inti=0;
fp=fopen("c:
\\userinformation","w");/*以只写方式打开文本文件*/
if(fp==NULL)/*打开文件失败*/
{
printf("\n=====>打开文件错误!
\n");
getchar();
return;
}
for(i=0;i{
if(fwrite(&temp[i],sizeof(USERINFO),1,fp)==1)/*每次写一条记录或一个结构数组元素至文件*/
{
continue;
}
else
{
break;
}
}
if(i>0)
{
getchar();
printf("\n\n=====>保存成功,共有:
%d条记录\n",i);
getchar();
saveflag=0;
}
else
{system("cls");
printf("当前链接为空,没有用户信息!
\n");
getchar();
}
fclose(fp);/*关闭此文件*/
}
voidmain()
{
USERINFOuser[N];/*定义USERINFO结构体*/
FILE*fp;/*文件指针*/
intselect;/*保存选择结果变量*/
charch;/*保存(y,Y,n,N)*/
intcount=0;/*保存文件中的记录条数(或元素个数)*/
fp=fopen("C:
\\userinformation","a+");
/*以追加方式打开文本文件c:
\userinformation,可读可写,若此文件不存在,会创建此文件*/
if(fp==NULL)
{
printf("\n=====>无法打开文件!
\n");
exit(0);
}
while(!
feof(fp))
{
if(fread(&user[count],sizeof(USERINFO),1,fp)==1)/*一次从文件中读取一条用户记录*/
count++;
}
fclose(fp);/*关闭文件*/
printf("\n==>打来文件成功,共有%d记录.请按回车键进入系统.\n",count);
getchar();
menu();
while
(1)
{
system("cls");
menu();
printf("\n请输入选择(1--7):
");/*显示提示信息*/
scanf("%d",&select);
if(select==7)
{
if(saveflag==1)/*若对数组的数据有修改且未进行存盘操作,则此标志为1*/
{getchar();
printf("\n==>是否保存记录到文件?
(y/n):
");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(user,count);
}
printf("\n===>谢谢使用!
\n");
g