保龄球计分系统C语言课程设计毕业设计(论文)word格式
目 录
1 1
1.1问题描述1
1.2输入数据要求1
1.3输出数据要求2
1.4开发环境和工具2
1.5成员分工2
2总体设计3
2.1总体设计思路3
2.2模块结构图3
2.3模块说明4
3详细设计6
3.1数据类型定义6
3.2Scan模块实现6
3.3Save以及Read模块实现8
3.4Count模块实现9
4 测试结果与分析11
4.1.输入数据计算结果11
4.2数据的文件保存12
4.3从文件读入数据并计算结果12
5个人总结14
6 附 录15
6.1源代码15
1 需求分析
问题描述一局(GAME)保龄球分为10格,每格里有两次投球机会,如在第一次投球时全中,就需要投第二球。每一格可能出现三种情况:
? 1.失球(MISS)
? 无论何种情况,在一格的两次投球时,未能击倒10个瓶,此格的分数为击倒的瓶数,未击中用一个(-)符号表示。
? 2.补中(SPARE)
? 当第二次投球击倒该格第一球余下的全部瓶子,称为补中,用一个(/)符号表示。补中的记分是10分加上下一次投球击倒的瓶数。
? 3.全中(STRIKE)当每一格的第一次投球击倒全部竖立的十个瓶时,称为全中,用一个(×)符号表示。全中的记分是10分(击倒的瓶)加该球员下两次投球击倒的瓶数。
?但在第十格中情况比较特殊:(1)如第二次投球未补中,则第十格得分为第九格得分加上第十格所击倒瓶数。
(2)如第二次投球补中,则追加一次投球机会,第十格得分为第九格得他加上10加上追加一次投球击倒瓶数。
(3)如第一球为全中,则追上加二次投球机会,第十格得分为第九格得分加上10加追加二次投球击倒的瓶数。因此从第一格到第十格的两次追加投球,都为全中,则为12个全中,得分为满分300分。
输入数据要求
输出数据要求序号12345678910
9|16|38|27|210|0 10|0? 10|04|58|210|7|3积分
输出数据显示格式:
序号12345678910
9|/6|38|/7|2×| ×|? ×| 4|58|/× | 7 | /
得分1625425181105124133153173
开发环境和工具
开发环境:Windows 7
开发工具:Visual C++ .0
成员分工
2总体设计
2.1总体设计思路
设计思路
数据存储模块结构图
函数之间的调用如图.1所示。
图.1 保龄球计分系统模块结构图
模块说明
Scan模块
函数原型:
功 能:
输入参数:输出参数:
Save模块
函数原型:
功 能:
输入参数:输出参数:函数原型:count(int p[ ][4],int n);
功 能:
输入参数:输出参数函数原型:
功 能:
输入参数:输出参数3详细设计
数据类型定
char ch,infile[15],outfile[15]; /*定义两个字符数组,用来输入存储以及读取的文件名*/
struct game_number
{ int turn[11][2];
} game[10]; /*定义结构体,最多包含10局比赛数据*/
int a[11][4];
int t; /*定义两个全局变量,分别用于进行数据输入以及计算和输入选择比赛局数*/
3.2Scan模块实现算法思想具体实现for(i=0;i<=8;i++) /* 用for循环来给数组赋值 */
{
printf("请输入第%d格第一次击倒瓶数:",i+1);
scanf("%d",&a[i][0]);
do
{
if( a[i][0]>10 || a[i][0]<0 )
{
m=0;
printf("错误,请再次输入:");
scanf("%d",&a[i][0]);
}
else m=1;
} while(m==0); /*用if、do-while来避免输入错误*/
}
printf("请输入第十格第一次击倒瓶数:");
scanf("%d",&a[9][0]);
do
{
if( a[9][0]>10 || a[9][0]<0 )
{
m=0;
printf("错误,请