保龄球计分系统c语言课程设计毕业设计word格式内容摘要:

ile(m==0)。 } else { printf(请输入第十格第二次击倒瓶数 :)。 scanf(%d,amp。 a[9][1])。 do { if( a[9][1]10 || a[9][1]0 || a[9][0]+a[9][1]10 || a[9][0]+a[9][1]0 ) 8 { m=0。 printf(错误,请再次输入 :)。 scanf(%d,amp。 a[9][1])。 } else m=1。 } while(m==0)。 if(a[9][0]+a[9][1]==10) { printf(请输入追加一次击倒瓶数 :)。 scanf(%d,amp。 a[10][0])。 do { if( a[10][0]10 || a[10][0]0 ) { m=0。 printf(错误,请再次输入 :)。 scanf(%d,amp。 a[10][0])。 } else m=1。 } while(m==0)。 } } /*用 if 和 dowhile 语句按照比赛规则判断第十格第一次击球后所有输入情况 */ 以及 Read 模块实现 1. 算法思想 定义两个字符串组以及一个包含 10 个二维数组的结构体,前者用来输入文件名,后者用来包含 10 局以内数量的比赛数据,然后通过二进制读写方式,将整个结构体存储进自己命名的文件中;读取文件时也采用二进制将整个结构体读取。 读入、读取文件时采用 for 循环方式 全部读入、读写。 注意: Save 模块保存的只是比赛数据,即几局比赛每局每格击倒的瓶数;并不是直接保存比赛积分结果;所以 Read 模块读取后,还要再将数据进行计算然后得出积分结果。 struct game_number { int turn[11][2]。 } game[10]。 char ch,infile[15],outfile[15]。 void save() 9 { FILE *fp1。 int i。 printf(请输入保存比赛数据的文件名: )。 /*自己命名保存数据的文件名 */ scanf(%s,infile)。 if((fp1=fopen(infile,wb+))==NULL) { printf(cannot open file\n)。 return。 } for(i=0。 i=9。 i++) fwrite(amp。 game[i],sizeof(struct game_number),1,fp1)。 fclose(fp1)。 } void read() { FILE *fp2。 int i。 printf(请输入读取比赛数据的文件名: )。 /*输入 比赛 数据所在文件 命以 读取数据 */ scanf(%s,outfile)。 printf(\n)。 printf(请输入要查询的比赛局数: )。 scanf(%d,amp。 t)。 if((fp2=fopen(outfile,rb+))==NULL) { printf(cannot open file\n)。 } for(i=0。 i=9。 i++) fread(amp。 game[i],sizeof(struct game_number),1,fp2)。 /*用 for循环读取整个结构体的数据 */ } 模块实现 根据题目要求的积分格式,在 Count 模块中,我只算出每轮所得分数,然后供 Print 模块调用, Print 模块再用 for 循环即可加和求总积分,所以 Count 模块中我只利用 if else 语句判断击球情况来根据规则积分。 void count(int p[ ][4],int n) /*定义形式参数,方便已经赋值的二维数组进行计 算 */ { if(n==9) /*由于比赛规则特殊性,所以从第 9 格后的积分算法要专门判断计算 */ p[n][2]=p[n][0]+p[n][1]+p[n+1][0]+p[n+1][1]。 /*将每轮分数赋值到 p[][2]中去 */ else 10 { if(p[n][0]==10) { if(p[n+1][0]!=10) p[n][2]=10+p[n+1][0]+p[n+1][1]。 else p[n][2]=10+p[n+1][0]+p[n+2][0]。 } else if(p[n][0]+p[n][1]==10) p[n][2]=10+p[n+1][0]。 else if(p[n][0]+p[n][1]10) p[n][2]=p[n][0]+p[n][1]。 } } 11 4 测试结果与分析 主页面,按照提示,测试输入数据计算结果这一项。 看到如果输入有误会立即提示并重新输入 12 这次输入数据后计算出的结果,并且按照要求格式输出; 数据的文件保存 接下来测试能否保存文件。 再继续又输入一局比赛数据后,将两句的比赛数据一起保存进了名为“ 2game”的文件中: 从文件读入数据并计算结果 现在继续测试是否能选择读取文件数据,然后同样计算得积分。 13 选择载入 这 个 文 件 , 要 查 询 的 是 第 二 局 比 赛 的 数 据 : 可以看到得到的是之前输入的第 二局比赛的数据,然后系统再次运算得出了相同的积分结果。 14 5 个人总结 虽然能在输入数据时报错,但是由于定义的输入数据为 int 型,所以如果输入字母等其他的话,就会有错误,所以还要继续改进。 定义太多全局变量,而且定义结构体有些多余,完全可以通过定义三维数组达到。 有些界面不能直接返回主界面,所以还需在一些数据输入的界面上加上这一选项。 15 6 附 录 源代码 include include struct game_number { int turn[11][2]。 } game[10]。 int a[11][4]。 int t。 char ch,infile[15],outfile[15]。 void scan() { int i,m。 printf(请输入比赛局数: )。 scanf(%d,amp。 t)。 for(i=0。 i=8。 i++) { printf(请输入第 %d 格第一次击倒瓶数 :,i+1)。 scanf(%d,amp。 a[i][0])。 do { if( a[i][0]10 || a[i][0]0 ) { m=0。 printf(错误,请再次输入 :)。 scanf(%d,amp。 a[i][0])。 } else m=1。 } while(m==0)。 printf(请输入第 %d 格第二次击倒瓶数 :,i+1)。 scanf(%d,amp。 a[i][1])。 do {。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。