




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、1、摘要32、概述2.1 設計目的32.2 設計內容32.3 系統功能要求42.4 相關知識43、思路3.1 提出問題53.2 分析問題53.3 解決問題54、系統設計4.1 主函數54.2 結構體的定義74.3 文件存儲84.4 流程圖95、調試與運行5.1 運行主菜單105.2 輸入信息105.3 輸出信息105.4 查詢信息115.5 調用信息116、調試過程中出現的問題及解決方式6.1 出現的問題126.2 解決方式127、總結128、附錄(源代碼)131、摘要二十一世紀是計算機飛速發展的世紀,面對著不斷更新的計算機系統,計算機給人們 帶來了越來越多的方便。比如現代運動會得分數統計就可
2、以由計算機來完成。然而要是計 算機完成這種計算,人們必須給計算機賦予這種計算的功能。那么這種計算功能具體是怎 樣實現的呢,今天就讓我們一起走進這個神奇的世界。2、概述2.1 設計目的數據結構是計算機程序設計的重要理論基礎,學懂了數據結構可以幫助編程者 編出功能強大的程序。本次實踐的重要目的是讓我們結合理論知識,實際上機操作。讓我們更好的理解數據 結構的應用。另外目的還有1、使我們更加熟練的掌握專業知識2、掌握初步的算法分析及解決能力3、初步掌握獨立解決軟件開發過程中遇到的諸如問題分析、系統設計、運用數據結 構的相關知識解決問題和調試等基本方法與技能。2.1 設計內容運動會分數統計(限1人完成)
3、任務:參加運動會有 n個學校,學校編號為1 n。比賽分成m個男子項目,和w個女子項目。項目編號為男子1m ,女子m+1 m+w。不同的項目取前五名或前三名積分;取前五名的積分分別為: 7、5、3、2、1,前 三名的積分分別為:5、3、2;哪些取前五名或前三名由學生自己設定。(m<=20,n<=20 )功能要求:1)可以輸入各個項目的前三名或前五名的成績;2)能統計各學校總分,3)可以按學校編號或名稱、學校總分、男女團體總分排序輸出;4)可以按學校編號查詢學校某個項目的情況; 可以按項目編號查詢取得前三或前五名的學 校。5)數據存入文件并能隨時查詢6)規定:輸入數據形式和范圍:可以輸
4、入學校的名稱,運動項目的名稱輸出形式:有中文提示,各學校分數為整形界面要求:有合理的提示,每個功能可以設立菜單,根據提示,可以完成相關的功能 要求。2.4 系統功能要求存儲結構:學生自己根據系統功能要求自己設計,但是要求運動會的相關數據要存儲 在數據文件中。(數據文件的數據讀寫方法等相關內容在 c語言程序設計的書上,請自學 解決)請在最后的上交資料中指明你用到的存儲結構;測試數據:要求使用1、全部合法數據;2、整體非法數據;3、局部非法數據。進行 程序測試,以保證程序的穩定。測試數據及測試結果請在上交的資料中寫明。2.5 相關知識數據結構中的數據存儲結構有多種,在我的設計中用到了以下知識:1、
5、結構體數組類型存儲數據:結構體是由相同或不同數據類型組成的一種復雜的數據類型;結構體類型的定義只是該結構的組成情況,編譯系統并未因此而為其分配存儲空間, 當定義了結構體類型的變量或數組或編譯系統才為其分配存儲空間。2、查詢:對于線性表而言可以有多種方法,輸入要查詢的內容信息,通過查詢函數就能 實現要查詢的內容。3、思路3.1 提出問題1)首先需要用什么存儲結構來存儲數據?2)怎樣排序才能得到用戶想要的結果?3)怎樣把項目信息與學校信息結合,實現同步?3.2 分析問題對于以上問題我們怎樣才能解決呢?首先,對于存儲結構我們可以采用順序表,鏈表、結 構體數組等方式;排序方式也有冒泡排序、插入排序等方
6、式;要實現同步我們可以用結構 體嵌套的方式實現。3.3 解決問題對于上面提到的存儲結構順序表當然可以,但在實際中同步那一塊遇到了較大的問題。 所以在這里我們不妨用結構體數組的方式來存儲,這樣存儲結構的問題就解決了;然后排 序方式我選用了冒泡排序,這樣就更好的對應了結構體數組的存儲方式。這樣問題就解決 了。下面讓我們看看具體怎樣實現的吧!4、系統設計4.1主函數主函數的功能菜單如下:int main()int choice;while(1)printf("n");printf(" -*-*-*-* 菜-*-單*-* 選-*-* 項-*-*-*-*-*-n"
7、);printf("*歡迎使用運動會分數統計系統!*printf("-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-n”);*n");printf("*n");printf("*nn");printf("1、輸入信息! n");printf("*nn");printf("2、輸出信息! n");printf("*nn");printf("3、查詢信息! n");printf("*nn&quo
8、t;);printf("4、調用信息! n");printf("*nn");printf("5、退出系統! n");printf("*n");*printf("*n");printf("*n");printf("請選擇以上操作!n");scanf("%d”,&choice);switch(choice)case 1:system("cls");Inputinformation(); /輸入信息的函數 Writedata
9、(); /往文件了讀入數據的函數 / Readata();從文件了讀出數據的函數main();break;case 2:system("cls");Output(); /輸出信息的函數main();break;case 3:system("cls");Inquiary(); / 查詢函數main();break;case 4:system("cls");Readata(); /從文件了讀出數據的函數system("pause");main();break;case 5:system("cls")
10、;printf("nnn");printf("*n");printf("*n");printf("*n");printf("*nnn");printf("感謝您的支持!謝謝使用!nnn");printf("*n");printf("*n");printf("*n");printf("*n");return 0;exit(0);default:/ /非法選擇 system("cls&quo
11、t;);printf("Invalid chice!n");printf("請重新選擇操作!n");break;4.2 結構體的定義結構體定義如下:typedef structint itemnum; / 項目編號char name20; / 項目名稱int top; /取名次的數目int range5; / 名次int mark5; / 分數itemnode; /定義項目結點的類型/結構體數組類型存儲typedef structint schoolnum;/ 學校編號char name20;/ 學校名稱int score; /學校總分int mscor
12、e; /男團總分int wscore; /女團總分itemnode c20; / 項目數組headnode; /定義頭結點類型headnode h20; /定義一個頭結點數組4.3 文件存儲文件的存儲我用到了 fprintf函數和fscanf函數進行數據的逐步讀入讀出代碼如下;Status Writedata()/存到文件中FILE *report;int i,j;if(report=fopen("sportdata.txt","w")=null)printf("不能打開文件n");exit;fprintf(report,"
13、%dn",n);fprintf(report,"%dn",m);fprintf(report,"%dn",w);for(i=0;i<n;i+)fprintf(report,"%dn",hi.schoolnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.score);fprintf(report,"%dn",hi.mscore);fprintf(report,"%dn",hi
14、.wscore);for(j=0;j<m+w;j+)fprintf(report,"%dn",hi.cj.itemnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.cj.top);fprintf(report,"%dn",hi.cj.rangej);fprintf(report,"nn");fclose(report);return OK;結束5、調試與運行5.1運行主菜單5.2輸入信息選才¥ 1輸入信息,
15、顯示如下:西輸人參加區動會的竽校 輸入男子項目數工濟輸入女子項目數二 輸入學校編號.壬前入口負目名i mfe 、 取前三名口 F刖五名第獲名次= 忸循環輸入信息輸入項日編號士5.3輸出信息選擇主菜單2輸出信息 :, JIJ.IJ:101;沈陽化工大學;10ii夜校團團!總總總置意總選1輸出選2按學校總分輸出為::1S2;沈陽-L業大學211:a= 103:東北大學選4按女團總分輸出為:5.4查詢信息選擇主菜單的七查詢信息/人要查詢的學校數組下標, 俞人要查項目數組下標,項目編號查詢請選擇查詢方式?!1 TA- I - 名次稱為:短跑號為:101暫翦親要噫轅期如E選擇操作 2二繼續,明 跳出5.
16、5調用信息選主菜單4調用信息,由于信息太多在這我只截取部分的圖片:選5退出系統:至此整個項目調試完畢。6、調試過程中出現的問題及解決方式6.1 出現的問題在調試的過程中我遇到了 一下的一些小麻煩1)在輸出信息時,排序怎樣排未控制好。2)往文件里讀入數據時用到了二進制模塊讀入函數fwrite文件不能直觀的在.txt文檔里觀察到。3)讀出文件時用到了模塊讀出函數 fread,但在讀出數據時出現了與要求輸出不對照的情 況。6.2 解決方式對于出現的問題我做了如下處理:1) remembern;冒泡排序,用輔助數組記下頭結點下標,這樣就較容易的實現了學校信 息與項目信息的排序輸出2)對于讀入文件時出現
17、的錯誤我改用了fprintf函數對數據進行逐個輸入,且這樣做使得能在.txt文件里觀察到輸入的信息是否錯誤。3)對于讀出函數相應的用到了 fscanf函數,逐個輸出數據。7、總結從這次實踐中我們隊數據結構的知識更近了一成,能更好的實現利用數據結構來解 決實際問題。更加鞏固了我們的專業知識。8、附錄(源代碼)#include<stdio.h>#include<stdlib.h>#define null 0#define OK 1int n,m,w;/學校數目,男子項目數目,女子項目數目typedef int Status;typedef structint itemnum
18、;/ 項目編號char name20;/ 項目名稱int top;/ 取名次的數目int range5;/名次int mark5;/分數itemnode;/ 定義項目結點的類型/結構體數組類型存儲typedef structint schoolnum;/學校編號char name20;/學校名稱int score;/學校總分int mscore;/男團總分int wscore;/女團總分itemnode c20;/ 項目數組headnode;/定義頭結點類型headnode h20;/定義一個頭結點數組Status Inputinformation()/輸入信息,建立系統printf(”請輸入
19、參加運動會的學校數目:n");scanf("%d",&n);printf("請輸入男子項目數:n");scanf("%d",&m);printf("請輸入女子項目數:n");scanf("%d",&w);int i,j,s;for(i=0;i<n;i+)hi.score=0;hi.mscore=0;hi.wscore=0;for(i=0;i<n;i+)printf("輸入學校編號:n");scanf("%d”,&
20、hi.schoolnum);getchar();printf("輸入學校名稱:n");gets();for(j=0;j<m+w;j+)printf("輸入項目編號:n");scanf("%d”,&hi.cj.itemnum);getchar();printf("輸入項目名稱:n");gets();printf("取前三名or前五名n");scanf("%d”,&hi.cj.top);for(s=0;s<5;s+)hi.cj.range
21、s=0;hi.cj.marks=0;/初始化排名和分數printf("所獲名次:n");scanf("%d",&hi.cj.rangej);/ 輸入所獲取名次信息if(hi.cj.top=3)switch(hi.cj.rangej)case 0:hi.cj.markj=0;break;case 1: hi.cj.markj=5;break;case 2:hi.cj.markj=3;break;case 3:hi.cj.markj=2;break;elseswitch(hi.cj.rangej)case 0:hi.cj.markj=0;break;
22、case 1:hi.cj.markj=7;break;case 2:hi.cj.markj=5;break;case 3:hi.cj.markj=3;break;case 4:hi.cj.markj=2;break;case 5:hi.cj.markj=1;break;hi.score=hi.score+hi.cj.markj;/按取前三還是前五分別積分學校總分if(j<=m-1)hi.mscore=hi.mscore+hi.cj.markj;/是男子項目則記到男子分數里去elsehi.wscore=hi.wscore+hi.cj.markj;/是女子項目則記到女子分數里去printf(
23、"n");return OK;Status Output()/輸出函數int choice,i,j,k;int remembern;int sign;dosystem("cls");printf("1、按學校編號輸出!n");printf("2、按學校總分輸出!n");printf("3、按男團總分輸出!n");printf("4、按女團總分輸出!n");printf("請選擇操作!n");scanf("%d”,&choice);swit
24、ch(choice)case 1:system("cls");for(i=0;i<n;i+)printf("學校編號:dn",hi.schoolnum);printf("學校名稱:sn",);printf("學校總分:%dn",hi.score);printf("男團總分:dn",hi.mscore);printf("女團總分:dn",hi.wscore);printf("nn");/按編號順序輸出break;case 2:system
25、("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.score<hj.score)k=rememberi;rememberi=rememberj;rememberj=k;/冒泡排序,用輔助數組記下頭結點下標for(i=0;i<n;i+)printf("學校編號:dn",hrememberi.schoolnum);printf("學校名稱:sn",);printf(&q
26、uot;學校總分:%dn",hrememberi.score);printf("男團總分:dn",hrememberi.mscore);printf("女團總分:dn",hrememberi.wscore);printf("nn");break;case 3:system("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.mscore<hj.mscore)k=remembe
27、ri;rememberi=rememberj;rememberj=k;/冒泡排序,用輔助數組記下頭結點下標for(i=0;i<n;i+)printf("學校編號:dn",hrememberi.schoolnum);printf("學校名稱:sn",);printf("學校總分:%dn",hrememberi.score);printf("男團總分:dn",hrememberi.mscore);printf("女團總分:dn",hrememberi.wscore
28、);printf("nn");break;case 4:system("cls");for(i=0;i<n;i+)rememberi=i;for(i=0;i<n;i+)for(j=i+1;j<n;j+)if(hrememberi.wscore<hj.wscore)k=rememberi;rememberi=rememberj;rememberj=k;/冒泡排序,用輔助數組記下頭結點下標for(i=0;i<n;i+)printf("學校編號:dn",hrememberi.schoolnum);printf(
29、"學校名稱:sn",);printf("學校總分:%dn",hrememberi.score);printf("男團總分:dn",hrememberi.mscore);printf("女團總分:dn",hrememberi.wscore);printf("nn");break;printf("請選擇2:繼續;0:跳出n");scanf("%d”,&sign);while(sign=2);return OK;Status Inqu
30、iary()/查詢函數int choice;int remembern;int i,j,k,s;printf(" 1、按學校編號查詢n");printf(" 2、按項目編號查詢n");printf("請選擇查詢方式!n");scanf("%d”,&choice);switch(choice)case 1:system("cls");doprintf("輸入要查詢的學校數組下標:n");scanf("%d",&i);if(i>n)printf(&
31、quot;ERROE:這個學校沒有參加這次運動會!n");continue;elseprintf("輸入要查項目數組下標:n");scanf("%d",&j);if(j>m+w|j=0)printf("此次運動會沒有這個項目!n");elseprintf("項目名稱為:sn",);printf("學校編號為:dn",hi-1.schoolnum);printf("學校名稱為:sn",);printf(&qu
32、ot;這個項目取前d名,該學校成績如下:n",h0.cj-1.top);for(k=0;k<5;k+)if(hi-1.cj-1.rangek!=0)printf("名次:dn",hi-1.cj-1.rangek);/輸出要查詢學校項目的名次printf("請選擇操作! 2:繼續;0:跳出)scanf("%d",&s);while(s=2);break;case 2:system("cls");doprintf("輸入要查詢的項目數組下標!n");scanf("%d&quo
33、t;,&s);if(s>m+w|s=0)printf("此次運動會不包括此項目!n");elseprintf("該項目取前d名,取得名次的學校:n",h0.cs-1.top);for(i=0;i<n;i+)printf("該項目為:sn",);for(j=0;j<n;j+)if(hi.cs-1.rangej!=0)printf("學校編號:dn",hi.schoolnum);printf("學校名稱:sn",);printf(&qu
34、ot;學校名次:%dn",hi.cs-1.rangej);/輸出該項目取得名次的學校成績printf("選擇2:繼續;0:跳出n");scanf("%d",&i);while(i=2);break;return OK;Status Writedata()/存到文件中FILE *report;int i,j;if(report=fopen("sportdata.txt","w")=null)printf("不能打開文件n");exit;fprintf(report,"%
35、dn",n);fprintf(report,"%dn",m);fprintf(report,"%dn",w);for(i=0;i<n;i+)fprintf(report,"%dn",hi.schoolnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.score);fprintf(report,"%dn",hi.mscore);fprintf(report,"%dn",hi.
36、wscore);for(j=0;j<m+w;j+)fprintf(report,"%dn",hi.cj.itemnum);fprintf(report,"%sn",);fprintf(report,"%dn",hi.cj.top);fprintf(report,"%dn",hi.cj.rangej);fprintf(report,"nn");fclose(report);return OK;Status Readata()FILE *report;int i,j;if(
37、report=fopen("sportdata.txt","r")=null)printf("file cannot be opened !n");exit(1);fscanf(report,"%d",&n);printf("參賽學校數目:dn",n);fscanf(report,"%d",&m);printf("男子項目數目: dn",m);fscanf(report,"%d",&w);printf("
38、;女子項目數目:dnn",w);for(i=0;i<n;i+)printf("學校編號:");fscanf(report,"%d”,&hi.schoolnum);printf("%dn",hi.schoolnum);printf("學校名稱:");fscanf(report,"%s",);printf("%sn",);printf("學校總分:");fscanf(report,"%d",&
39、;hi.score);printf("%dn",hi.score);printf("男團總分:");fscanf(report,"%d”,&hi.mscore);printf("%dn",hi.mscore);printf("女團總分:");fscanf(report,"%d”,&hi.wscore);printf("%dnn",hi.wscore);for(j=0;j<m+w;j+) printf("項目編號:");fscanf(r
40、eport,"%d",&hi.cj.itemnum);printf("%dn",hi.cj.itemnum);fscanf(report,"%s",);printf("項目名稱:sn",);fscanf(report,"%d",&hi.ci.top);printf("取前幾:dn",hi.ci.top);if(hi.cj.rangej!=0)printf("名次:");fscanf(report,"%d",&hi.cj.rangej);printf("%dn",hi.cj.rangej);printf("n
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 禮儀用品行業創新驅動發展考核試卷
- 紡織品防縮水處理考核試卷
- 漁業發展與環境保護的挑戰與解決辦法考核試卷
- 地質勘查設備在礦山救援中的應用考核試卷
- 社區居民健康檔案管理考核試卷
- 紡織品在汽車安全帶的安全性能考核試卷
- 荊楚理工學院《養老金規劃》2023-2024學年第二學期期末試卷
- 內蒙古自治區包頭市第二中學2024-2025學年高三下學期期中模擬數學試題含解析
- 泰山護理職業學院《健美操三》2023-2024學年第一學期期末試卷
- 遼寧工程職業學院《英語教材教法與課程標準》2023-2024學年第二學期期末試卷
- ACLS-PC-SA課前自我測試試題及答案
- 云南省地質災害群測群防手冊
- 畢業論文某燃煤鍋爐房煙氣除塵脫硫系統設計
- 蘭炭外熱式回轉爐低溫干餾工藝及技術裝備簡介
- 儲罐計算說明書
- 擬投入本工程的主要施工設備表
- 第一種工作票樣板(最新)
- 裝飾工程施工進度表18975
- 二甲基亞砜項目可行性研究報告寫作范文
- 部編版二年級道德與法治下冊《道德與法治》集體備課全部教案
- 地下儲氣庫天然氣損耗及控制
評論
0/150
提交評論