c语言课程设计24点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告
题目 24点游戏
课程名称软件项目实践(二)院部名称龙蟠学院
专业计算机科学与技术
班级
学生姓名
学号
课程设计地点校内实验室
课程设计学时 2周(40学时)
指导教师沈奇
金陵科技学院教务处制成绩
课程设计报告目录
一、实验目的和要求 (2)
二、实验仪器和设备 (2)
三、实验过程 (2)
四、实验结果与分析 (6)
五、实验心得 (10)
一、实验目的和要求
1.实验目的
1)了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力;
2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方
法和技能;
3)提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
4)训练用系统的观点和软件开发一般规范进行软件开发。
5)培养快速学习新的知识,并在项目中使用的能力。
2.实验要求
设计并实现24点游戏,满足以下基本要求:
①运行系统后,用户登录,输入用户名后,可以进入游戏,或查看英雄榜。
②玩家开始游戏后,系统随机产生四个1-13的数,分别代表13张牌。提示玩家输入算式。判断玩家输入的表达式是否合法,其中算式中的四个数字只能是程序所给的四个数字。当玩家正确输入算式后,运用“用堆栈求解表达式”的原理,求出结果并判断是否为24,得出用户是输是赢的结果。
③如果用户赢,计算其所用时间(从输入算式开始计算,直至输入算式结束),并与英雄榜中成绩进行比较。可以进入英雄榜的,则需更新英雄榜。英雄榜只按成绩降序记录1-5名相关信息。
二、实验仪器和设备
Microsoft WindowsXP / Windows 7Turbo C/Visual C++
三、实验过程
一.需求分析
1.1 需求概述分析
本系统共分为四个模块:普通用户登录模块,用户模块,游戏模块和更改用户模块以下是各个模块的功能简介。
(1)普通用户登录模块
检测用户名是否存在,检查密码是否正确;
(2)用户模块
选择用户需要执行的操作(进入游戏、查看英雄榜、切换用户、退出)。(3)游戏模块
用户进行游戏,计算用户游戏时间,更新英雄榜。
(4)更改用户模块
提供对用户的更改功能。
1.2模块分析
24算法游戏的功能模块不多,也比较容易实现。基本思想就是由程序先随机产生4张扑克牌,每张扑克牌对应一个整数,所以首先要有一个产生随机数模块。接下来就是用户用程序产生的随机数来算24点了,所以要有一个输入用户去接表达式的模块。用户输入完成后,判断输入表达式是否合法,所以要有一个判断表达式合法与否的模块。如果表达式合法程序就开始计算表达式了,所以要有一个计算表达式的模块。程序计算完表达式后就要判断用户输入的表达式是不是为24点了,所以还有一个判断表达式正误的模块。这5个模块是逐步递进的,是要前一个模块的功能完成后,才能执行后一个模块,否则程序就将出错。程序所涉及的数据结构主要为整形和字符型,整形数据结构主要是用来计算表达式的,字符型数据结构主要是用来输入表达式的。程序所涉及的数据库结构主要有数组和栈,数组在计算表达式和产生随机数是都要用到,栈只是用来计算表达式的。
二.面向对象分析
2.1 用例图
(1) 用户用例图
(2)系统用例图
用户
2.2类图
2.3 流程图
24点程序整体流程图:
游戏算法流程图:
数据有误
将输入求解的算术表达式转换成后缀表达式的流程图:
三.分工
在此次课程设计中主要负责24点表达式的算法。由系统给出的四个随机数字(1-13)按要求输入计算表达式,并且验证表达式结果是否为24。同时还有将算术表达式转换为后缀表达式
四.项目总结
这一次编写大作业的程序又让我感受到学程序可以锻炼缜密的思维了。因为平时练习的都是小程序,所以句段比较少,一些错误都很容易被检查出来,但是
这次实训却是上百段的语句,难以检查,似乎也没有经验去怎么检查,那一刹那感觉到很急,但又不知如何是好。在编写程序中,真的是细节决定成败,因为不管程序的语句是多是少,但是只要有一条语句或语法不正确,就不能使程序得到所需要的结果。没能够使自己编写出来的程序等到想要的结果,意味着这是一个不理想的程序,对于本次编写来说则是失败的。
此次课程设计系统要求的功能都具备了。还算是成功的。
四、实验结果与分析
4.1.系统模块的运行界面
游戏界面:
(1)回答正确
(2)回答错误
英雄榜界面:
4.2编码
部分源代码:
void change(char *e,char *a) /*中缀字符串e转后缀字符串a函数*/ { STACK2 *top=NULL;
int i=0,j=0;
char w;
while(e[i] != '\0')
{ if(isdigit(e[i]))
{ do{a[j]=e[i]; /*将数字原样拷贝到数组a中*/
i++; /*e数组的下标加1*/
j++; /*a数组的下标加1*/
}while(e[i]!='.'); /*直到字符为数字结束符"."为止*/
a[j]='.';j++; /*将数字结束符"."拷贝到a数组依然保持结束标记*/ }
if(e[i]=='(') /*如果字符是"("时*/
top=push2(top,e[i]); /*将其压入堆栈*/
if(e[i]==')') /*如果字符是")"时*/
{ top=ptop2(top,&w); /*取出栈顶元素,并从栈顶删除该元素*/ while(w!='(') /*如果字符不是"("时反复循环*/
{ a[j]=w; /*将栈顶元素存入a数组*/
j++; /*下标加1*/
top=ptop2(top,&w) ; /*取出栈顶元素,并从栈顶删除该元素*/
}
}
if(e[i]=='+'||e[i]=='-') /*如果字符是加或减号时*/
{if(!empty2(top)) /*如栈不为空*/
{ w=topx2(top);
while(w!='(') /*当栈顶元素不是"("时反复循环*/
{ a[j]=w;
j++; /*将栈顶元素存入表达式a中,a的下标加1*/
top=pop2(top); /*删除栈顶元素*/