保龄球计分系统C语言优秀课程设计.docx
《保龄球计分系统C语言优秀课程设计.docx》由会员分享,可在线阅读,更多相关《保龄球计分系统C语言优秀课程设计.docx(23页珍藏版)》请在三一办公上搜索。
1、保龄球计分系统C语言优秀课程设计目 录 1 需求分析 . 1 1.1 1.2 1.3 1.4 1.5 问题描述 . 1 输入数据要求 . 1 输出数据要求 . 2 开发环境和工具 . 2 成员分工 . 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
2、 5个人总结 . 14 6 附 录 . 15 6.1源代码. 15 1 需求分析 1.1 问题描述 从键盘读入比赛数据;从文件读入比赛数据;将从键盘输入的比赛数据存入文件。将比赛数据显示在屏幕上计算比赛结果及统计数据,并显示在屏幕上。 一局(GAME)保龄球分为10格,每格里有两次投球机会,如在第一次投球时全中,就不需要投第二球。每一格可能出现三种情况: 1.失球(MISS) 无论何种情况,在一格的两次投球时,未能击倒10个瓶,此格的分数为击倒的瓶数,未击中用一个(-)符号表示。 2.补中(SPARE) 当第二次投球击倒该格第一球余下的全部瓶子,称为补中,用一个(/)符号表示。补中的记分是10
3、分加上下一次投球击倒的瓶数。 3.全中(STRIKE) 当每一格的第一次投球击倒全部竖立的十个瓶时,称为全中,用一个()符号表示。全中的记分是10分(击倒的瓶)加该球员下两次投球击倒的瓶数。 但在第十格中情况比较特殊: (1)如第二次投球未补中,则第十格得分为第九格得分加上第十格所击倒瓶数。 (2)如第二次投球补中,则追加一次投球机会,第十格得分为第九格得他加上10加上追加一次投球击倒瓶数。 (3)如第一球为全中,则追上加二次投球机会,第十格得分为第九格得分加上10加追加二次投球击倒的瓶数。因此从第一格到第十格的两次追加投球,都为全中,则为12个全中,得分为满分300分。 1.2 输入数据要求
4、 第一格第一次击倒瓶数: 第一格第二次击倒瓶数: 第二格第一次击倒瓶数: 第二格第二次击倒瓶数: - 1 - 1.3 输出数据要求 输入数据显示格式: 序号 1 9|1 2 6|3 2 6|3 25 3 8|2 3 8|/ 42 4 5 6 7 8 4|5 8 4|5 133 9 10 7|2 10|0 10|0 10|0 4 7|2 51 5 6 7 8|2 10|7|3 9 8|/ 153 10 | 7 | / 积分输出数据显示格式: 序号 1 9|/ | | | 81 105 124 得16 分 173 1.4 开发环境和工具 开发环境:Windows 7 开发工具:Visual C+
5、6.0 1.5 成员分工 - 2 - 2总体设计 2.1总体设计思路 1. 设计思路 因为这是一个计分系统,所以在主函数中采用switch结构来达到输入数字来进行选项操作。然后通过定义大量的函数,然后在swtich中来一个个调用函数,来进行运算和处理。 由于要使得系统能一次输入多局比赛并保存,读写文件时,先把每局数据存入一个最多能存10局比赛数据的结构体中,然后将整个结构体存入文件,读取文件时,可以自由选择载入保存比赛数据的文件,并自行选择需要显示和计算的比赛局数,然后进行显示,读写文件一律采用二进制方式读写。 输入比赛数据以及输出比赛数据时,利用循环语句依次输出;对于保龄球第十格击球的特殊性
6、,再加入if语句判断,然后根据不同情况进行输入或者计算。 显示部分先定义count函数用来在得到比赛数据后进行计算积分,然后一种显示是输入数据后直接计算显示;还有一种是读取文件中比赛数据,然后再进行积分运算,再显示结果。 在现实中,充分运用清屏函数,使程序显得直观简洁。 2. 数据存储 在不退出程序的时候,如不进行将比赛数据存入文件的选项,每局比赛都存在个最多包含10局比赛数据的结构体中,然后可以选择是否把整个结构体读入文件并存储以便下次直接读取并计算显示。 2.2模块结构图 根据需求将系统划分为两个个功能模块,函数之间的调用关系如图1.1所示。- 3 - Main(switch) Scan
7、Read Changeout Print Save Count Changein Print Count 图1.1 保龄球计分系统模块结构图 1)Scan:初始化比赛,输入比赛数据。 2)Save: 将比赛数据读入文件。 3)Count:通过计算得到比赛积分。 4)Print: 调用Count计算后得到比赛积分结果并输出。 5)Read: 读取存储了比赛数据的文件。 6) Changein: 将比赛数据由数组存入结构体,便于读入文件。 7) Changeout: 将结构体中数据赋值给数组,方便读取文件得到数据后的计算、处理。 2.3模块说明 1. Scan模块 函数原型:void scan;
8、功 能:提示输入局数以及每格击倒球数,即输入比赛数据。 输入参数:a114,二维数组,存放比赛数据。 输出参数:a114,已经赋值了的二维数组,存有一局比赛数据。 2. Save模块 函数原型:void save; 功 能:将小于等于十局数量的比赛数据存入自己命名的文件。 输入参数:char ch,infile15,字符串数组,输入文件名字。 输出参数:char ch,infile15,字符串数组,已经输入的文件名字。 3. Count模块 函数原型:void count(int p 4,int n); - 4 - 功 能:按保龄球比赛规则计算比赛积分。 输入参数:int p4,已经赋值了二维
9、数组,包含比赛数据。 输出参数:int p4,已经赋值了二维数组,包含比赛数据以及每格所得分数。 4. Print模块 函数原型:void print; 功 能:按格式输出比赛数据并加和总分并按格式显示积分结果; 输入参数:int a114,已经赋值了二维数组,包含比赛数据以及每格所得分数。 输出参数:int a114,已经赋值了二维数组,包含比赛数据以及每格所得分数以及总分。 5. Read模块 函数原型:void read; 功 能:读取存在文件中的比赛数据; 输入参数:outfile,字符串,需要读取的文件名; t,整形变量,需要读取的比赛的局数。 输出参数:gamet,结构体,包含所需
10、比赛的数据。 6. Changein模块 函数原型:void changein; 功 能:将二维数组转化为结构体; 输入参数:int a114,已经赋值了二维数组,包含比赛数据以及每格所得分数。 输出参数:game10.turn112,结构体,包含比赛数据以及每格所得分数。 7. Changeout模块 函数原型:void changeout; 功 能:将结构体转化为二维数组; 输入参数:game10.turn112,结构体,包含比赛数据以及每格所得分数。 输出参数:int a114,已经赋值了二维数组,包含比赛数据以及每格所得分数。 - 5 - 3详细设计 3.1数据类型定义 1. 数据类型
11、定义 char ch,infile15,outfile15; /*定义两个字符数组,用来输入存储以及读取的文件名*/ struct game_number int turn112; game10; /*定义结构体,最多包含10局比赛数据*/ int a114; int t; /*定义两个全局变量,分别用于进行数据输入以及计算和输入选择比赛局数*/ 3.2Scan模块实现 1. 算法思想 用for循环来给数组赋值;用if 以及 do while语句同进行,来进行输入判断,避免输入错误;在第十格用if语句判断接下来的击球情况。 2. 具体实现 for(i=0;i10 | ai010 | a9010
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 保龄球 计分 系统 语言 优秀 课程设计
链接地址:https://www.31ppt.com/p-3279209.html