保齡球計(jì)分系統(tǒng)c語言課程設(shè)計(jì)_第1頁
已閱讀1頁,還剩22頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p><b>  目 錄</b></p><p><b>  1 需求分析1</b></p><p>  1.1問題描述1</p><p>  1.2輸入數(shù)據(jù)要求1</p><p>  1.3輸出數(shù)據(jù)要求2</p><p>  1.4開發(fā)環(huán)境和工具

2、2</p><p>  1.5成員分工2</p><p><b>  2總體設(shè)計(jì)3</b></p><p>  2.1總體設(shè)計(jì)思路3</p><p>  2.2模塊結(jié)構(gòu)圖3</p><p><b>  2.3模塊說明4</b></p><p&

3、gt;<b>  3詳細(xì)設(shè)計(jì)6</b></p><p>  3.1數(shù)據(jù)類型定義6</p><p>  3.2Scan模塊實(shí)現(xiàn)6</p><p>  3.3Save以及Read模塊實(shí)現(xiàn)8</p><p>  3.4Count模塊實(shí)現(xiàn)9</p><p>  4 測試結(jié)果與分析11</

4、p><p>  4.1.輸入數(shù)據(jù)計(jì)算結(jié)果11</p><p>  4.2數(shù)據(jù)的文件保存12</p><p>  4.3從文件讀入數(shù)據(jù)并計(jì)算結(jié)果12</p><p><b>  5個(gè)人總結(jié)14</b></p><p><b>  6 附 錄15</b></p>

5、<p><b>  6.1源代碼15</b></p><p><b>  1 需求分析</b></p><p><b>  問題描述 </b></p><p>  從鍵盤讀入比賽數(shù)據(jù);從文件讀入比賽數(shù)據(jù);將從鍵盤輸入的比賽數(shù)據(jù)存入文件(一個(gè)文件可存放多局比賽的數(shù)據(jù))。將比賽數(shù)據(jù)顯示在屏

6、幕上計(jì)算比賽結(jié)果及統(tǒng)計(jì)數(shù)據(jù),并顯示在屏幕上。</p><p>  一局(GAME)保齡球分為10格,每格里有兩次投球機(jī)會(huì),如在第一次投球時(shí)全中,就不需要投第二球。每一格可能出現(xiàn)三種情況:</p><p>  1.失球(MISS)</p><p>  無論何種情況,在一格的兩次投球時(shí),未能擊倒10個(gè)瓶,此格的分?jǐn)?shù)為擊倒的瓶數(shù),未擊中用一個(gè)(-)符號(hào)表示。</p&

7、gt;<p>  2.補(bǔ)中(SPARE)</p><p>  當(dāng)?shù)诙瓮肚驌舻乖摳竦谝磺蛴嘞碌娜科孔?稱為補(bǔ)中,用一個(gè)(/)符號(hào)表示。補(bǔ)中的記分是10分加上下一次投球擊倒的瓶數(shù)。</p><p>  3.全中(STRIKE)</p><p>  當(dāng)每一格的第一次投球擊倒全部豎立的十個(gè)瓶時(shí),稱為全中,用一個(gè)(×)符號(hào)表示。全中的記分是10分(

8、擊倒的瓶)加該球員下兩次投球擊倒的瓶數(shù)。</p><p>  但在第十格中情況比較特殊:</p><p>  (1)如第二次投球未補(bǔ)中,則第十格得分為第九格得分加上第十格所擊倒瓶數(shù)。</p><p>  (2)如第二次投球補(bǔ)中,則追加一次投球機(jī)會(huì),第十格得分為第九格得他加上10加上追加一次投球擊倒瓶數(shù)。</p><p>  (3)如第一球?yàn)槿?/p>

9、中,則追上加二次投球機(jī)會(huì),第十格得分為第九格得分加上10加追加二次投球擊倒的瓶數(shù)。因此從第一格到第十格的兩次追加投球,都為全中,則為12個(gè)全中,得分為滿分300分。</p><p><b>  輸入數(shù)據(jù)要求</b></p><p>  第一格第一次擊倒瓶數(shù):</p><p>  第一格第二次擊倒瓶數(shù):</p><p> 

10、 第二格第一次擊倒瓶數(shù):</p><p>  第二格第二次擊倒瓶數(shù):</p><p>  …………………………</p><p><b>  輸出數(shù)據(jù)要求</b></p><p><b>  輸入數(shù)據(jù)顯示格式:</b></p><p><b>  積分</b&g

11、t;</p><p>  輸出數(shù)據(jù)顯示格式: </p><p><b>  開發(fā)環(huán)境和工具</b></p><p>  開發(fā)環(huán)境:Windows 7</p><p>  開發(fā)工具:Visual C++ 6.0</p><p><b>  成員分工</b></p>

12、;<p>  熊宇堂:計(jì)分模塊、數(shù)據(jù)輸入模塊、文件讀寫模塊、選擇模塊、系統(tǒng)測試</p><p>  張 嵩:數(shù)組結(jié)構(gòu)體轉(zhuǎn)換模塊、數(shù)據(jù)輸出模塊、屏幕顯示模塊、系統(tǒng)測試</p><p><b>  2總體設(shè)計(jì)</b></p><p><b>  2.1總體設(shè)計(jì)思路</b></p><p>

13、;<b>  設(shè)計(jì)思路</b></p><p>  因?yàn)檫@是一個(gè)計(jì)分系統(tǒng),所以在主函數(shù)中采用switch結(jié)構(gòu)來達(dá)到輸入數(shù)字來進(jìn)行選項(xiàng)操作。然后通過定義大量的函數(shù),然后在swtich中來一個(gè)個(gè)調(diào)用函數(shù),來進(jìn)行運(yùn)算和處理。</p><p>  由于要使得系統(tǒng)能一次輸入多局比賽并保存,讀寫文件時(shí),先把每局?jǐn)?shù)據(jù)存入一個(gè)最多能存10局比賽數(shù)據(jù)的結(jié)構(gòu)體中,然后將整個(gè)結(jié)構(gòu)體存入文件

14、,讀取文件時(shí),可以自由選擇載入保存比賽數(shù)據(jù)的文件,并自行選擇需要顯示和計(jì)算的比賽局?jǐn)?shù),然后進(jìn)行顯示,讀寫文件一律采用二進(jìn)制方式讀寫。</p><p>  輸入比賽數(shù)據(jù)以及輸出比賽數(shù)據(jù)時(shí),利用循環(huán)語句依次輸出;對(duì)于保齡球第十格擊球的特殊性,再加入if語句判斷,然后根據(jù)不同情況進(jìn)行輸入或者計(jì)算。</p><p>  顯示部分先定義count函數(shù)用來在得到比賽數(shù)據(jù)后進(jìn)行計(jì)算積分,然后一種顯示是輸

15、入數(shù)據(jù)后直接計(jì)算顯示;還有一種是讀取文件中比賽數(shù)據(jù),然后再進(jìn)行積分運(yùn)算,再顯示結(jié)果。</p><p>  在現(xiàn)實(shí)中,充分運(yùn)用清屏函數(shù),使程序顯得直觀簡潔。</p><p><b>  數(shù)據(jù)存儲(chǔ)</b></p><p>  在不退出程序的時(shí)候,如不進(jìn)行將比賽數(shù)據(jù)存入文件的選項(xiàng),每局比賽都存在個(gè)最多包含10局比賽數(shù)據(jù)的結(jié)構(gòu)體中,然后可以選擇是否把整

16、個(gè)結(jié)構(gòu)體讀入文件并存儲(chǔ)以便下次直接讀取并計(jì)算顯示。</p><p><b>  2.2模塊結(jié)構(gòu)圖</b></p><p>  根據(jù)需求將系統(tǒng)劃分為兩個(gè)個(gè)功能模塊,函數(shù)之間的調(diào)用關(guān)系如圖1.1所示。</p><p>  圖1.1 保齡球計(jì)分系統(tǒng)模塊結(jié)構(gòu)圖</p><p>  1)Scan:初始化比賽,輸入比賽數(shù)據(jù)。<

17、/p><p>  2)Save: 將比賽數(shù)據(jù)讀入文件(只保存每局比賽擊倒瓶數(shù)而不保存積分?jǐn)?shù)據(jù))。</p><p>  3)Count:通過計(jì)算得到比賽積分。</p><p>  4)Print: 調(diào)用Count計(jì)算后得到比賽積分結(jié)果并輸出。</p><p>  5)Read: 讀取存儲(chǔ)了比賽數(shù)據(jù)的文件。</p><p>

18、  Changein: 將比賽數(shù)據(jù)由數(shù)組存入結(jié)構(gòu)體,便于讀入文件。</p><p>  Changeout: 將結(jié)構(gòu)體中數(shù)據(jù)賦值給數(shù)組,方便讀取文件得到數(shù)據(jù)后的計(jì)算、處理。</p><p><b>  2.3模塊說明</b></p><p><b>  Scan模塊</b></p><p>  函數(shù)

19、原型:void scan();</p><p>  功 能:提示輸入局?jǐn)?shù)以及每格擊倒球數(shù),即輸入比賽數(shù)據(jù)。</p><p>  輸入?yún)?shù):a[11][4],二維數(shù)組,存放比賽數(shù)據(jù)。</p><p>  輸出參數(shù):a[11][4],已經(jīng)賦值了的二維數(shù)組,存有一局比賽數(shù)據(jù)。</p><p><b>  Save模塊</b&g

20、t;</p><p>  函數(shù)原型:void save();</p><p>  功 能:將小于等于十局?jǐn)?shù)量的比賽數(shù)據(jù)存入自己命名的文件。</p><p>  輸入?yún)?shù):char ch,infile[15],字符串?dāng)?shù)組,輸入文件名字。</p><p>  輸出參數(shù):char ch,infile[15],字符串?dāng)?shù)組,已經(jīng)輸入的文件名字。&

21、lt;/p><p><b>  Count模塊</b></p><p>  函數(shù)原型:void count(int p[ ][4],int n);</p><p>  功 能:按保齡球比賽規(guī)則計(jì)算比賽積分。</p><p>  輸入?yún)?shù):int p[][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)。</p>&

22、lt;p>  輸出參數(shù):int p[][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。</p><p><b>  Print模塊</b></p><p>  函數(shù)原型:void print();</p><p>  功 能:按格式輸出比賽數(shù)據(jù)并加和總分并按格式顯示積分結(jié)果;</p><p>  輸

23、入?yún)?shù):int a[11][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。</p><p>  輸出參數(shù):int a[11][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)以及總分。</p><p>  5.Read模塊函數(shù)原型:void read();功 能:讀取存在文件中的比賽數(shù)據(jù);輸入?yún)?shù):outfile,字符串,需要讀取的文件名;

24、 t,整形變量,需要讀取的比賽的局?jǐn)?shù)。輸出參數(shù):game[t],結(jié)構(gòu)體,包含所需比賽的數(shù)據(jù)。</p><p>  6.Changein模塊函數(shù)原型:void changein();功 能:將二維數(shù)組轉(zhuǎn)化為結(jié)構(gòu)體;輸入?yún)?shù):int a[11][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。輸出參數(shù):game[10].turn[11][2],結(jié)構(gòu)體,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。</

25、p><p>  7.Changeout模塊函數(shù)原型:void changeout();功 能:將結(jié)構(gòu)體轉(zhuǎn)化為二維數(shù)組;輸入?yún)?shù):game[10].turn[11][2],結(jié)構(gòu)體,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。輸出參數(shù):int a[11][4],已經(jīng)賦值了二維數(shù)組,包含比賽數(shù)據(jù)以及每格所得分?jǐn)?shù)。</p><p><b>  3詳細(xì)設(shè)計(jì)</b></p&g

26、t;<p>  3.1數(shù)據(jù)類型定義 </p><p><b>  1. 數(shù)據(jù)類型定義</b></p><p>  char ch,infile[15],outfile[15]; /*定義兩個(gè)字符數(shù)組,用來輸入存儲(chǔ)以及讀取的文件名*/ </p><p>  struct game_number </p>

27、<p>  { int turn[11][2];</p><p>  } game[10]; /*定義結(jié)構(gòu)體,最多包含10局比賽數(shù)據(jù)*/</p><p>  int a[11][4];</p><p>  int t; /*定義兩個(gè)全局變量,分別用于進(jìn)行數(shù)據(jù)輸入以及計(jì)算和輸入選擇比賽局?jǐn)?shù)*/</p><

28、;p>  3.2Scan模塊實(shí)現(xiàn)</p><p><b>  算法思想</b></p><p>  用for循環(huán)來給數(shù)組賦值;用if 以及 do while語句同進(jìn)行,來進(jìn)行輸入判斷,避免輸入錯(cuò)誤;在第十格用if語句判斷接下來的擊球情況。</p><p><b>  具體實(shí)現(xiàn)</b></p><p

29、>  for(i=0;i<=8;i++) /* 用for循環(huán)來給數(shù)組賦值 */</p><p><b>  {</b></p><p>  printf("請(qǐng)輸入第%d格第一次擊倒瓶數(shù):",i+1);</p><p>  scanf(&quo

30、t;%d",&a[i][0]);</p><p><b>  do</b></p><p><b>  { </b></p><p>  if( a[i][0]>10 || a[i][0]<0 ) </p><p><b>  { </

31、b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[i][0]);</p><p><b>  } </b></p>

32、<p><b>  else m=1;</b></p><p>  } while(m==0); /*用if、do-while來避免輸入錯(cuò)誤*/</p><p><b>  }</b></p><p>  printf("請(qǐng)輸入第十格第一次擊倒瓶數(shù):&

33、quot;);</p><p>  scanf("%d",&a[9][0]);</p><p><b>  do</b></p><p><b>  { </b></p><p>  if( a[9][0]>10 || a[9][0]<0 )

34、 </p><p><b>  { </b></p><p><b>  m=0; </b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[9][0]);</p>

35、<p><b>  } </b></p><p>  else m=1;</p><p>  } while(m==0);</p><p>  if(a[9][0]==10) </p><p><b>  {</b></p><p> 

36、 printf("請(qǐng)輸入追加第一次擊倒瓶數(shù):"); </p><p>  scanf("%d",&a[10][0]); </p><p><b>  do</b></p><p><b>  {</b></p><p>  if( a[10

37、][0]>10 || a[10][0]<0 )</p><p><b>  { </b></p><p><b>  m=0; </b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d"

38、;,&a[10][0]);</p><p><b>  } </b></p><p>  else m=1;</p><p>  } while(m==0);</p><p>  printf("請(qǐng)輸入追加第二次擊倒瓶數(shù):");</p><p>

39、  scanf("%d",&a[10][1]);</p><p><b>  do</b></p><p><b>  { </b></p><p>  if( a[10][1]>10 || a[10][1]<0 ) </p><p><

40、b>  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[10][1]);</p><p><b>  } <

41、;/b></p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p><b>  }</b></p><p><b>  else </b></p><p><b&

42、gt;  { </b></p><p>  printf("請(qǐng)輸入第十格第二次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[9][1]);</p><p><b>  do</b></p><p><b>  {</b

43、></p><p>  if( a[9][1]>10 || a[9][1]<0 || a[9][0]+a[9][1]>10 || a[9][0]+a[9][1]<0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p&

44、gt;  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[9][1]);</p><p><b>  } </b></p><p>  else m=1;</p><p>  } while(m==0);&l

45、t;/p><p>  if(a[9][0]+a[9][1]==10) </p><p><b>  {</b></p><p>  printf("請(qǐng)輸入追加一次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[10][0]); </p>

46、<p><b>  do</b></p><p><b>  { </b></p><p>  if( a[10][0]>10 || a[10][0]<0 ) </p><p><b>  { </b></p><p><b

47、>  m=0; </b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[10][0]);</p><p><b>  } </b></p><p>  else m=

48、1;</p><p>  } while(m==0);</p><p><b>  } </b></p><p>  } /*用if和do-while語句按照比賽規(guī)則判斷第十格第一次擊球后所有輸入情況*/</p><p>  3.3Save以及Read模塊實(shí)現(xiàn)</p><

49、p><b>  1.算法思想</b></p><p>  定義兩個(gè)字符串組以及一個(gè)包含10個(gè)二維數(shù)組的結(jié)構(gòu)體,前者用來輸入文件名,后者用來包含10局以內(nèi)數(shù)量的比賽數(shù)據(jù),然后通過二進(jìn)制讀寫方式,將整個(gè)結(jié)構(gòu)體存儲(chǔ)進(jìn)自己命名的文件中;讀取文件時(shí)也采用二進(jìn)制將整個(gè)結(jié)構(gòu)體讀取。</p><p>  讀入、讀取文件時(shí)采用for循環(huán)方式全部讀入、讀寫。</p>

50、<p>  注意:Save模塊保存的只是比賽數(shù)據(jù),即幾局比賽每局每格擊倒的瓶數(shù);并不是直接保存比賽積分結(jié)果;所以Read模塊讀取后,還要再將數(shù)據(jù)進(jìn)行計(jì)算然后得出積分結(jié)果。</p><p><b>  2.具體實(shí)現(xiàn)</b></p><p>  struct game_number</p><p>  { int turn[11][2

51、];</p><p>  } game[10];</p><p>  char ch,infile[15],outfile[15]; </p><p>  void save()</p><p><b>  { </b></p><p>  FILE *fp1;</p><

52、;p><b>  int i;</b></p><p>  printf("請(qǐng)輸入保存比賽數(shù)據(jù)的文件名:"); /*自己命名保存數(shù)據(jù)的文件名*/</p><p>  scanf("%s",infile);</p><p>  if((fp1=fopen(infile,"w

53、b+"))==NULL)</p><p>  { printf("cannot open file\n");</p><p>  return; </p><p><b>  }</b></p><p>  for(i=0;i<=9;i++)</p><p&

54、gt;  fwrite(&game[i],sizeof(struct game_number),1,fp1);</p><p>  fclose(fp1);</p><p><b>  }</b></p><p>  void read()</p><p><b>  {</b></p

55、><p>  FILE *fp2;</p><p><b>  int i;</b></p><p>  printf("請(qǐng)輸入讀取比賽數(shù)據(jù)的文件名:"); /*輸入比賽數(shù)據(jù)所在文件命以讀取數(shù)據(jù)*/</p><p>  scanf("%s",outfile);printf(&qu

56、ot;\n");</p><p>  printf("請(qǐng)輸入要查詢的比賽局?jǐn)?shù):");</p><p>  scanf("%d",&t);</p><p>  if((fp2=fopen(outfile,"rb+"))==NULL)</p><p>  { p

57、rintf("cannot open file\n");</p><p><b>  }</b></p><p>  for(i=0;i<=9;i++)</p><p>  fread(&game[i],sizeof(struct game_number),1,fp2); /*用for循環(huán)讀取整個(gè)結(jié)構(gòu)體的數(shù)據(jù)

58、*/</p><p><b>  }</b></p><p>  3.4Count模塊實(shí)現(xiàn)</p><p><b>  1.算法思想</b></p><p>  根據(jù)題目要求的積分格式,在Count模塊中,我只算出每輪所得分?jǐn)?shù),然后供Print模塊調(diào)用,Print模塊再用for循環(huán)即可加和求總積分,

59、所以Count模塊中我只利用if else語句判斷擊球情況來根據(jù)規(guī)則積分。</p><p><b>  2.具體實(shí)現(xiàn)</b></p><p>  void count(int p[ ][4],int n) /*定義形式參數(shù),方便已經(jīng)賦值的二維數(shù)組進(jìn)行計(jì)算*/</p><p><b>  {</b><

60、;/p><p>  if(n==9) /*由于比賽規(guī)則特殊性,所以從第9格后的積分算法要專門判斷計(jì)算*/</p><p>  p[n][2]=p[n][0]+p[n][1]+p[n+1][0]+p[n+1][1]; /*將每輪分?jǐn)?shù)賦值到p[][2]中去*/</p><p><b>  else </b></p

61、><p><b>  {</b></p><p>  if(p[n][0]==10) </p><p><b>  {</b></p><p>  if(p[n+1][0]!=10)</p><p>  p[n][2]=10+p[n+1][0]+p[n+1][1];</p&

62、gt;<p><b>  else</b></p><p>  p[n][2]=10+p[n+1][0]+p[n+2][0];</p><p><b>  }</b></p><p>  else if(p[n][0]+p[n][1]==10)</p><p>  p[n][2]=10

63、+p[n+1][0];</p><p>  else if(p[n][0]+p[n][1]<10)</p><p>  p[n][2]=p[n][0]+p[n][1]; </p><p><b>  } </b></p><p><b>  }</b></p>

64、<p><b>  4 測試結(jié)果與分析</b></p><p>  4.1.輸入數(shù)據(jù)計(jì)算結(jié)果</p><p>  主頁面,按照提示,測試輸入數(shù)據(jù)計(jì)算結(jié)果這一項(xiàng)。</p><p>  看到如果輸入有誤會(huì)立即提示并重新輸入</p><p>  這次輸入數(shù)據(jù)后計(jì)算出的結(jié)果,并且按照要求格式輸出;</p>

65、<p>  4.2數(shù)據(jù)的文件保存</p><p>  接下來測試能否保存文件。</p><p>  再繼續(xù)又輸入一局比賽數(shù)據(jù)后,將兩句的比賽數(shù)據(jù)一起保存進(jìn)了名為“2game”的文件中:</p><p>  4.3從文件讀入數(shù)據(jù)并計(jì)算結(jié)果</p><p>  現(xiàn)在繼續(xù)測試是否能選擇讀取文件數(shù)據(jù),然后同樣計(jì)算得積分。</p&g

66、t;<p>  選擇載入2game.dat這個(gè)文件,要查詢的是第二局比賽的數(shù)據(jù):</p><p>  可以看到得到的是之前輸入的第二局比賽的數(shù)據(jù),然后系統(tǒng)再次運(yùn)算得出了相同的積分結(jié)果。</p><p><b>  5個(gè)人總結(jié)</b></p><p>  雖然能在輸入數(shù)據(jù)時(shí)報(bào)錯(cuò),但是由于定義的輸入數(shù)據(jù)為int型,所以如果輸入字母等其

67、他的話,就會(huì)有錯(cuò)誤,所以還要繼續(xù)改進(jìn)。</p><p>  定義太多全局變量,而且定義結(jié)構(gòu)體有些多余,完全可以通過定義三維數(shù)組達(dá)到。</p><p>  有些界面不能直接返回主界面,所以還需在一些數(shù)據(jù)輸入的界面上加上這一選項(xiàng)。</p><p><b>  6 附 錄</b></p><p><b>  6.1源

68、代碼</b></p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  struct game_number</p><p>  { int turn[11][2];</p><p>  } game[

69、10];</p><p>  int a[11][4];</p><p><b>  int t;</b></p><p>  char ch,infile[15],outfile[15]; </p><p>  void scan()</p><p><b>  {

70、</b></p><p><b>  int i,m;</b></p><p>  printf("請(qǐng)輸入比賽局?jǐn)?shù):");</p><p>  scanf("%d",&t);</p><p>  for(i=0;i<=8;i++) </p>

71、<p><b>  {</b></p><p>  printf("請(qǐng)輸入第%d格第一次擊倒瓶數(shù):",i+1);</p><p>  scanf("%d",&a[i][0]);</p><p><b>  do</b></p><p><

72、;b>  {</b></p><p>  if( a[i][0]>10 || a[i][0]<0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?")

73、;</p><p>  scanf("%d",&a[i][0]);</p><p><b>  } </b></p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p> 

74、 printf("請(qǐng)輸入第%d格第二次擊倒瓶數(shù):",i+1);</p><p>  scanf("%d",&a[i][1]);</p><p><b>  do</b></p><p><b>  {</b></p><p>  if( a[i][1]

75、>10 || a[i][1]<0 || a[i][0]+a[i][1]>10 || a[i][0]+a[i][1]<0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");<

76、;/p><p>  scanf("%d",&a[i][1]);</p><p><b>  } </b></p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p><b&

77、gt;  }</b></p><p>  printf("請(qǐng)輸入第十格第一次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[9][0]);</p><p>  do{ </p><p>  if( a[9][0]>10 || a[9][0]<

78、;0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[9][0]);</p>&l

79、t;p><b>  } </b></p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p>  if(a[9][0]==10) </p><p><b>  {</b></p>&l

80、t;p>  printf("請(qǐng)輸入追加第一次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[10][0]);</p><p><b>  do</b></p><p><b>  {</b></p><p>  if( a[10

81、][0]>10 || a[10][0]<0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&am

82、p;a[10][0]);</p><p><b>  } </b></p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p>  printf("請(qǐng)輸入追加第二次擊倒瓶數(shù):");</p>&

83、lt;p>  scanf("%d",&a[10][1]);</p><p><b>  do</b></p><p><b>  {</b></p><p>  if( a[10][1]>10 || a[10][1]<0 )</p><p><b&

84、gt;  { </b></p><p><b>  m=0;</b></p><p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[10][1]);</p><p><b>  } </b&g

85、t;</p><p><b>  else m=1;</b></p><p>  } while(m==0);</p><p><b>  }</b></p><p><b>  else </b></p><p><b>  {<

86、;/b></p><p>  printf("請(qǐng)輸入第十格第二次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[9][1]);</p><p><b>  do</b></p><p><b>  {</b></p>

87、<p>  if( a[9][1]>10 || a[9][1]<0 || a[9][0]+a[9][1]>10 || a[9][0]+a[9][1]<0 )</p><p><b>  { </b></p><p><b>  m=0;</b></p><p>  printf(&q

88、uot;錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[9][1]);</p><p><b>  } </b></p><p><b>  else m=1;</b></p><p>  } while(m==0);<

89、;/p><p>  if(a[9][0]+a[9][1]==10)</p><p><b>  {</b></p><p>  printf("請(qǐng)輸入追加一次擊倒瓶數(shù):");</p><p>  scanf("%d",&a[10][0]);</p><p&g

90、t;<b>  do</b></p><p><b>  {</b></p><p>  if( a[10][0]>10 || a[10][0]<0 )</p><p>  { </p><p><b>  m=0;</b></p&g

91、t;<p>  printf("錯(cuò)誤,請(qǐng)?jiān)俅屋斎?");</p><p>  scanf("%d",&a[10][0]);</p><p><b>  } </b></p><p><b>  else m=1;</b></p><p>

92、  } while(m==0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  void changein()</p><p>  { int h

93、;</p><p>  for(h=0;h<=10;h++)</p><p>  { game[t].turn[h][0]=a[h][0];</p><p>  game[t].turn[h][1]=a[h][1];</p><p><b>  }</b></p><p><b&g

94、t;  }</b></p><p>  void changeout()</p><p>  { int h;</p><p>  for(h=0;h<=10;h++)</p><p>  { a[h][0]=game[t].turn[h][0];</p><p>  a[h][1]=gam

95、e[t].turn[h][1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  void save()</p><p><b>  { </b></p><p>  FILE *fp1;</p

96、><p><b>  int i;</b></p><p>  printf("請(qǐng)輸入保存比賽數(shù)據(jù)的文件名:");</p><p>  scanf("%s",infile);</p><p>  if((fp1=fopen(infile,"wb+"))==NULL)

97、</p><p>  { printf("cannot open file\n");</p><p><b>  return;</b></p><p><b>  }</b></p><p>  for(i=0;i<=9;i++)</p><p&g

98、t;  fwrite(&game[i],sizeof(struct game_number),1,fp1);</p><p>  fclose(fp1);</p><p><b>  }</b></p><p>  void read()</p><p><b>  {</b></p&

99、gt;<p>  FILE *fp2;</p><p><b>  int i;</b></p><p>  printf("請(qǐng)輸入讀取比賽數(shù)據(jù)的文件名:");</p><p>  scanf("%s",outfile);printf("\n");</p>

100、<p>  printf("請(qǐng)輸入要查詢的比賽局?jǐn)?shù):");</p><p>  scanf("%d",&t);</p><p>  if((fp2=fopen(outfile,"rb+"))==NULL)</p><p>  { printf("cannot open fil

101、e\n");</p><p><b>  }</b></p><p>  for(i=0;i<=9;i++)</p><p>  fread(&game[i],sizeof(struct game_number),1,fp2);</p><p><b>  }</b><

102、/p><p>  void count(int p[ ][4],int n)</p><p><b>  {</b></p><p><b>  if(n==9)</b></p><p>  p[n][2]=p[n][0]+p[n][1]+p[n+1][0]+p[n+1][1];</p>

103、<p><b>  else</b></p><p><b>  {</b></p><p>  if(p[n][0]==10)</p><p><b>  {</b></p><p>  if(p[n+1][0]!=10)</p><p> 

104、 p[n][2]=10+p[n+1][0]+p[n+1][1];</p><p><b>  else</b></p><p>  p[n][2]=10+p[n+1][0]+p[n+2][0];</p><p><b>  }</b></p><p>  else if(p[n][0]+p[n][1

105、]==10)</p><p>  p[n][2]=10+p[n+1][0];</p><p>  else if(p[n][0]+p[n][1]<10)</p><p>  p[n][2]=p[n][0]+p[n][1]; </p><p><b>  } </b></p><

106、;p><b>  }</b></p><p>  void print()</p><p><b>  {</b></p><p><b>  int i,k;</b></p><p>  printf("第%d局比賽數(shù)據(jù)及結(jié)果:\n",t);prin

107、tf("\n");printf("\n");printf("\n");</p><p>  printf("輪 數(shù): "); </p><p>  for(i=0;i<10;i++)</p><p>  printf("%6d&q

108、uot;,(i+1)); printf("\n");</p><p>  printf("擊倒瓶數(shù): ");</p><p>  for(k=0;k<=10;k++)</p><p><b>  {</b></p><p><b>  if(k<=9)<

109、;/b></p><p><b>  {</b></p><p>  printf("%4d|%d",a[k][0],a[k][1]);</p><p><b>  }</b></p><p>  else if(a[9][0]==10)</p><p&

110、gt;  printf("|%d|%d\n",a[k][0],a[k][1]);</p><p>  else if(a[9][0]+a[9][1]==10)</p><p>  printf("|%d \n",a[k][0]);</p><p>  else printf("\n");</p>

111、<p><b>  }</b></p><p>  printf("\n\n\n");</p><p>  for(i=9;i>=0;i--)</p><p>  count(a,i);</p><p>  for(i=0;i<10;i++)</p><p

112、><b>  {</b></p><p><b>  if(i==0)</b></p><p>  a[i][3]=a[i][2];</p><p><b>  else</b></p><p>  a[i][3]=a[i-1][3]+a[i][2]; </p>

113、;<p><b>  }</b></p><p>  printf("輪 數(shù): "); </p><p>  for(i=0;i<10;i++)</p><p>  printf("%6d",(i+1)); printf("\n&qu

114、ot;);</p><p>  printf(" ");</p><p>  for(k=0;k<=10;k++)</p><p><b>  {</b></p><p><b>  if(k<=9)</b></p><p>

115、;<b>  {</b></p><p>  if(a[k][0]==10)</p><p>  if(k==9)printf(" ×");</p><p>  else printf(" ×| ");</p><p><b>  else<

116、/b></p><p>  if(a[k][0]+a[k][1]==10)</p><p>  printf("%4d|/",a[k][0]);</p><p><b>  else</b></p><p>  if(a[k][0]==0)</p><p>  if(a[

117、k][1]==0)</p><p>  printf(" -|-");</p><p><b>  else</b></p><p>  printf(" -|%d",a[k][1]);</p><p><b>  else</b></p>

118、<p>  if(a[k][1]==0)</p><p>  printf("%4d|-",a[k][0]);</p><p><b>  else</b></p><p>  printf("%4d|%d",a[k][0],a[k][1]);</p><p><

119、;b>  }</b></p><p>  else if(a[9][0]==10)</p><p>  if(a[10][0]==0)</p><p>  if(a[10][1]==0)</p><p>  printf("|-|-\n");</p><p><b>  

120、else</b></p><p>  printf("|-|%d\n",a[10][1]);</p><p><b>  else</b></p><p>  if(a[10][1]==0)</p><p>  printf("|%d|-\n",a[10][0]);&l

121、t;/p><p><b>  else</b></p><p>  if(a[10][0]==10)</p><p>  if(a[10][1]==10)</p><p>  printf("|×|×\n");</p><p><b>  else&l

122、t;/b></p><p>  printf("|×|%d\n",a[10][1]);</p><p><b>  else</b></p><p>  if(a[10][1]==10)</p><p>  printf("|%d|×\n",a[10][0

123、]);</p><p><b>  else</b></p><p>  printf("|%d|%d\n",a[k][0],a[k][1]);</p><p><b>  else </b></p><p>  if(a[9][0]+a[9][1]==10)</p>

124、<p>  if(a[10][0]==0)</p><p>  printf("|-\n");</p><p>  else if(a[10][0]==10)printf("|×\n");</p><p>  else printf("|%d \n",a[k][0]);</p&

125、gt;<p>  else printf("\n");</p><p><b>  }</b></p><p>  printf("總計(jì)得分: "); </p><p>  for(i=0;i<10;i++)</p><p>  printf("%6d

126、",a[i][3]); printf("\n");printf("\n");printf("\n");printf("\n");</p><p><b>  }</b></p><p>  void main()</p><p><b>  {&

127、lt;/b></p><p>  int x,y,z;</p><p><b>  do</b></p><p><b>  {</b></p><p>  system("cls");</p><p>  printf("-------

128、------------------------------------------------------------------------\n");</p><p>  printf(" 歡迎使用保齡球計(jì)分系統(tǒng)\n");</p><p>  printf("------------------

129、-------------------------------------------------------------\n");</p><p>  printf(" ******* *** * * * *** * * **** \n");</p><p>  printf(&q

130、uot; * * * * * * * * * * * * * * \n");</p><p>  printf(" **** * * * * * * * * * * * * *** \n");</p><p&

131、gt;  printf(" * * * * * * * * * * * * * * * \n");</p><p>  printf(" ******* *** * * ** *** * ** **** Counter V1.0 \n\n

132、\n");</p><p>  printf(" Supported by 數(shù)學(xué)與計(jì)量經(jīng)濟(jì)學(xué)院\n");</p><p>  printf(" 數(shù)學(xué)與應(yīng)用

133、數(shù)學(xué)一班\n");</p><p>  printf(" Created by 熊宇堂 20101010122\n");</p><p>  printf("

134、 張 嵩 20101010129\n");</p><p>  printf("\n\n\n");</p><p>  printf("操作選項(xiàng):\n\n");</p><p>  printf("1.輸入數(shù)據(jù)計(jì)分 ");printf("2.讀取數(shù)據(jù)計(jì)分

135、 ");printf("3.退出系統(tǒng)\n\n\n");</p><p>  printf("(提示:本系統(tǒng)進(jìn)行輸入、操作時(shí),統(tǒng)一使用 數(shù)字+回車 形式)\n");</p><p>  printf("操作:");</p><p>  scanf("%d",&x);&

136、lt;/p><p><b>  do</b></p><p><b>  {</b></p><p>  if(x==1 || x==2 || x==3 )</p><p><b>  { y=1;</b></p><p><b>  switc

137、h(x)</b></p><p><b>  {</b></p><p>  case 1: do</p><p><b>  {</b></p><p>  system("cls");scan();changein();system("cls"

138、);print();</p><p>  printf("輸入1以輸入下一局比賽數(shù)據(jù)\n");</p><p>  printf("輸入2以保存已輸入局?jǐn)?shù)比賽數(shù)據(jù)并返回主界面\n");</p><p>  printf("請(qǐng)輸入:");scanf("%d",&z);</p&

139、gt;<p><b>  if(z==2) </b></p><p><b>  { save();</b></p><p>  printf("成功,所有局?jǐn)?shù)比賽數(shù)據(jù)已保存在%s文件中",infile);</p><p>  printf("輸入2以返回主頁面");s

140、canf("%d",&z);</p><p><b>  }</b></p><p>  } while(z==1);</p><p><b>  break;</b></p><p>  case 2:system("cls");read();cha

141、ngeout();system("cls");</p><p>  printf("成功,已讀取%s文件中第%d局比賽數(shù)據(jù),比賽數(shù)據(jù)以及結(jié)果為:\n",outfile,t);printf("\n");printf("\n");printf("\n");</p><p><b>  

142、print();</b></p><p>  printf("輸入2以返回主界面\n");</p><p>  printf("請(qǐng)輸入:");scanf("%d",&z);</p><p><b>  break;</b></p><p> 

143、 case 3: system("cls");exit(0);</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else </b></p><p><b>  { y=0;</b&g

144、t;</p><p>  printf("錯(cuò)誤,請(qǐng)重新輸入:");</p><p>  scanf("%d",&x);</p><p><b>  }</b></p><p>  } while(y==0);</p><p>  } while(z=

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論