24点游戏.docx

上传人:b****4 文档编号:3444011 上传时间:2022-11-23 格式:DOCX 页数:25 大小:293.76KB
下载 相关 举报
24点游戏.docx_第1页
第1页 / 共25页
24点游戏.docx_第2页
第2页 / 共25页
24点游戏.docx_第3页
第3页 / 共25页
24点游戏.docx_第4页
第4页 / 共25页
24点游戏.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

24点游戏.docx

《24点游戏.docx》由会员分享,可在线阅读,更多相关《24点游戏.docx(25页珍藏版)》请在冰豆网上搜索。

24点游戏.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1