中国计算机设计大赛赛事统计预习报告
文章目錄
- 一、問題描述和基本要求
- 二、問題分析和任務(wù)定義
- 1.數(shù)據(jù)結(jié)構(gòu)的選取
- 2.問題分析
- 3.功能分析
- 三、邏輯設(shè)計(jì)
- 1.變量的類型說明:
- 2.變量說明
- 3.函數(shù)說明
- 4.抽象數(shù)據(jù)結(jié)構(gòu)
- 四、物理結(jié)構(gòu)
- 1.存儲結(jié)構(gòu)
- 2.模塊設(shè)計(jì)
- 3.函數(shù)設(shè)計(jì)
- 4.算法流程圖
- 五、測試數(shù)據(jù)
- 六、具體函數(shù)實(shí)現(xiàn)
一、問題描述和基本要求
【問題描述】
參加計(jì)算機(jī)設(shè)計(jì)大賽的n個(gè)學(xué)校編號為1n,賽事分成m個(gè)項(xiàng)目,項(xiàng)目的編號為1m.比賽獲獎(jiǎng)按照得分降序,取前三名,寫一個(gè)統(tǒng)計(jì)程序產(chǎn)生各種成績單和得分報(bào)表。
【基本要求】
1)每個(gè)比賽項(xiàng)目至少有10支參賽隊(duì);每個(gè)學(xué)校最多有6支隊(duì)伍參賽;
2)能統(tǒng)計(jì)各學(xué)校的總分;
3)可以按照學(xué)校編號或名稱,學(xué)校的總分、各項(xiàng)目的總分排序輸出;
4)可以按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的獲獎(jiǎng)情況;可以按項(xiàng)目編號查詢?nèi)〉们叭膶W(xué)校;
5)數(shù)據(jù)存入文件并能隨時(shí)查詢
【設(shè)計(jì)要求】
1)輸入數(shù)據(jù)形式和范圍:可以輸入學(xué)校的名稱,賽事項(xiàng)目的名稱。
2)輸出形式:有中文提示,各學(xué)校分?jǐn)?shù)為整數(shù)
3)界面要求:交互設(shè)計(jì)要合理,每個(gè)功能可以設(shè)立菜單,根據(jù)提示,可以完成相關(guān)功能的要求。
4)存儲結(jié)構(gòu):學(xué)生自己根據(jù)系統(tǒng)功能要求自己設(shè)計(jì),但是賽事相關(guān)數(shù)據(jù)要存儲在文件中。
【測試數(shù)據(jù)】
要求使用全部合法數(shù)據(jù),整體非法數(shù)據(jù),局部非法數(shù)據(jù)。進(jìn)行程序測試,以保證程序的穩(wěn)定。
【實(shí)現(xiàn)提示】
假設(shè)3<賽事項(xiàng)目數(shù)量<=10,學(xué)校名稱長度不超過20個(gè)字符。每個(gè)賽事結(jié)束時(shí),將其編號、名稱輸入,并依次輸入?yún)①悓W(xué)校編號、學(xué)校名稱和成績.
二、問題分析和任務(wù)定義
1.數(shù)據(jù)結(jié)構(gòu)的選取
本項(xiàng)目使用結(jié)構(gòu)體作為數(shù)據(jù)結(jié)構(gòu),分別用學(xué)校(school)、團(tuán)隊(duì)(team)、項(xiàng)目(project)來表示比賽的相關(guān)信息。
2.問題分析
本題目中,并沒有給我們相關(guān)的比賽信息,所以需要我們自己去輸入或用隨機(jī)數(shù)生成,但要能保存在數(shù)據(jù)里,留待下一次的取用,同時(shí)要注意題目對相關(guān)數(shù)量的要求。
項(xiàng)目project盡量在3-10個(gè)左右
學(xué)校school要能保證使每個(gè)項(xiàng)目至少10只隊(duì)伍
團(tuán)隊(duì)team要保證每個(gè)學(xué)校不能超過六個(gè)
注意每個(gè)team只能選一個(gè)項(xiàng)目
3.功能分析
(1)能夠隨時(shí)添加相關(guān)信息;
(2)照學(xué)校編號或名稱查詢,學(xué)校的總分輸出;
(3)按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的獲獎(jiǎng)情況;
(4)可以按項(xiàng)目編號查詢?nèi)〉们叭膶W(xué)校(注意并列的情況);
(5)可以查詢?nèi)我忭?xiàng)目的總分;
三、邏輯設(shè)計(jì)
1.變量的類型說明:
| team類 | score(團(tuán)隊(duì)得分)、jud(參加的項(xiàng)目) |
| project類 | score(項(xiàng)目得分)、sum(項(xiàng)目總分) |
2.變量說明
| te[i] | 參加的隊(duì)伍(Team類型) |
| pro[m] | 賽事項(xiàng)目(project類型) |
3.函數(shù)說明
| input() | 添加新的參賽學(xué)校和隊(duì)伍 |
| readdata() | 讀取文件里的比賽信息,通過fstream來完成 |
| schoolsum() | 計(jì)算學(xué)??偡峙琶?/td> |
| evschoolsum() | 按照學(xué)校編碼查詢總分 |
| prothree() | 按項(xiàng)目編號查詢?nèi)〉们叭膶W(xué)校 |
| evprosum() | 計(jì)算項(xiàng)目總分 |
| schoolaw() | 按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的獲獎(jiǎng)情況 |
4.抽象數(shù)據(jù)結(jié)構(gòu)
ADT 計(jì)算機(jī)設(shè)計(jì)大賽賽事統(tǒng)計(jì)Data學(xué)校列表schools<School>項(xiàng)目列表projects<Project>隊(duì)伍列表teams<Team>Operation界面設(shè)計(jì)輸入:無功能:輸出主菜單交互界面輸出:主菜單交互界面讀取數(shù)據(jù)輸入:無功能:讀取文件中的比賽信息輸出:無添加學(xué)校/隊(duì)伍輸入:學(xué)校/隊(duì)伍信息功能:將輸入的信息存入對應(yīng)的結(jié)構(gòu)體數(shù)組中輸出:無輸出學(xué)校/項(xiàng)目總分輸入:無功能:輸出學(xué)校/項(xiàng)目總分輸出:學(xué)校/項(xiàng)目總分輸出任意學(xué)校的總分 輸入:學(xué)校編號功能:根據(jù)編號輸出學(xué)??偡州敵?#xff1a;學(xué)??偡州敵鏊袑W(xué)??偡?#xff0c;總分降序輸出輸入:無功能:降序輸出所有學(xué)??偡州敵?#xff1a;所有學(xué)校總分通過學(xué)校編號查詢各項(xiàng)目總分降序輸出輸入:學(xué)校編號功能:查詢該學(xué)校所有項(xiàng)目分?jǐn)?shù),并且降序輸出輸出:學(xué)校所有項(xiàng)目分?jǐn)?shù) 按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的獲獎(jiǎng)情況輸入:學(xué)校編號和項(xiàng)目編號功能:查詢該學(xué)校對應(yīng)項(xiàng)目的獲獎(jiǎng)情況輸出:該學(xué)校對應(yīng)項(xiàng)目的獲獎(jiǎng)情況按項(xiàng)目編號查詢?nèi)〉们叭膶W(xué)校 輸入:項(xiàng)目編號功能:查詢該項(xiàng)目取得前三名的學(xué)校輸出:該項(xiàng)目取得前三名的學(xué)校編號退出程序輸入:N功能:退出程序輸出:無 end ADT四、物理結(jié)構(gòu)
1.存儲結(jié)構(gòu)
1.定義結(jié)構(gòu)體school類和team類,并在school類中存放team類數(shù)組
2.定義結(jié)構(gòu)體project類表示項(xiàng)目
2.模塊設(shè)計(jì)
1.主函數(shù)模塊
2.讀取數(shù)據(jù)和輸入模塊
3.計(jì)算總分降序輸出模塊
4.獲得項(xiàng)目排名模塊
3.函數(shù)設(shè)計(jì)
偽代碼: 1.school類:name(名字)、length(參賽隊(duì)伍數(shù)量)、sum(學(xué)??偡?span id="ozvdkddzhkzd" class="token punctuation">); 2.team類: score(團(tuán)隊(duì)得分)、jud(參加的項(xiàng)目); 3.project類:score(項(xiàng)目得分)、sum(項(xiàng)目總分); 4.sch[n]; 5.te[i]; 6.pro[m]; 7.readdata(){讀取文件里的比賽信息,通過fstream來完成} 8.input(){添加比賽信息} 9.evschoolsum(){查詢各個(gè)學(xué)校的總分,并降序輸出} 10.schoolsum(){按編號查詢學(xué)??偡?span id="ozvdkddzhkzd" class="token punctuation">} 11.prothree(){按項(xiàng)目編號查詢?nèi)〉们叭膶W(xué)校} 12.evprosum() {計(jì)算項(xiàng)目總分 } 13.schoolaw(){按學(xué)校編號查詢學(xué)校某個(gè)項(xiàng)目的獲獎(jiǎng)情況}4.算法流程圖
五、測試數(shù)據(jù)
六、具體函數(shù)實(shí)現(xiàn)
1.schoolsum()
void schoolsum() //根據(jù)編號查詢學(xué)??偡?/span> {int a;cout << "目前共有" << n << "個(gè)學(xué)校參賽" << endl;cout << "請輸入需要查詢總分的學(xué)校編號(1-" << n << ")" << endl;while (true){cin >> a;if (!cin.good()||a<1 || a>n)cout << "輸入編號有誤,請重新輸入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}cout << "該學(xué)校的總分為" << sch[a - 1].sum << endl; }2.evschoolsum()
void evschoolsum() //各學(xué)??偡?#xff0c;降序輸出 {int a[100];int b[100];for (int i = 0; i < n; i++)a[i] = sch[i].sum;sort(a, a + n); //對數(shù)組排序for (int i = 0; i < n; i++){for (int j = 0; j < n; j++){if (sch[j].sum == a[i])b[i] = j;}}cout << "學(xué)校編號" <<" " << "學(xué)校名稱" << " " << "總分" << endl;for (int i = 0; i < n; i++) //降序輸出{cout << " " << b[n-i-1]+1 <<" " <<sch[b[n-i-1]].name<< " " << a[n - i - 1] << endl;} }3.evprosum()
void evprosum() //項(xiàng)目總分 {cout << "項(xiàng)目" << " " << "總分" << endl;for (int i = 0; i < 6; i++){cout << " " << i+1 << " " << pro[i].sum << endl;} }4.scevprosum()
void scevprosum() //根據(jù)學(xué)校編號查詢各個(gè)項(xiàng)目得分 {int x;cout << "請輸入所需要查詢的學(xué)校編號(1-" << n << ")" << endl;while (true){cin >> x;if (!cin.good()||x<1 || x>n)cout << "輸入編號有誤,請重新輸入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}int a[20];int b[20];for (int i = 0; i < sch[x - 1].length; i++)a[i] = sch[x - 1].te[i].sc;sort(a, a + sch[x - 1].length); //對數(shù)組排序for (int i = 0; i < sch[x - 1].length; i++){for (int j = 0; j < sch[x - 1].length; j++){if (sch[x-1].te[j].sc == a[i])b[i] = sch[x - 1].te[j].jud;}}cout << "項(xiàng)目編號" << " " << "總分" << endl;for (int i = 0; i < sch[x - 1].length; i++) //降序輸出{cout << " " << b[sch[x - 1].length - i - 1] <<" " << a[sch[x - 1].length - i - 1] << endl;} }5.prothree()
void prothree() //根據(jù)編號查詢項(xiàng)目的前三名 {int x;int y = 0;int a[100];int b[3];cout << "請輸入需要查詢排名的項(xiàng)目編號(1-6)" << endl;while (true){cin >> x;if (!cin.good()||x < 1 || x>6)cout << "輸入編號有誤,請重新輸入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}for (int i = 0; i < n; i++)a[i] = pro[x-1].score[i];sort(a, a + n);for (int i = n-1; i > n-4; i--){for (int j = 0; j < n; j++){if (pro[x-1].score[j] == a[i])b[y++] = j+1;}}if (b[0] == b[1]){cout << "該項(xiàng)目的第一名為: 學(xué)校" << b[0] <<"和學(xué)校"<<b[1]<< endl;cout << "該項(xiàng)目的第二名為: 學(xué)校" << b[1] << endl;}else if (b[1] == b[2]){cout << "該項(xiàng)目的第一名為: 學(xué)校" << b[0] << endl;cout << "該項(xiàng)目的第二名為: 學(xué)校" << b[1] << "和學(xué)校" << b[2] << endl;}else if(b[0]==b[1]==b[2]){cout << "該項(xiàng)目的第一名為: 學(xué)校" << b[0] << "和學(xué)校" << b[1] <<"和學(xué)校"<<b[2]<< endl;}else{cout << "該項(xiàng)目的第一名為: 學(xué)校" << b[0] << endl;cout << "該項(xiàng)目的第二名為: 學(xué)校" << b[1] << endl;cout << "該項(xiàng)目的第三名為: 學(xué)校" << b[2] << endl;} }6.schoolaw()
void schoolaw() //查詢?nèi)我鈱W(xué)校任意項(xiàng)目獲獎(jiǎng)情況 {int a;int b;int jud = 0;cout << "請輸入所需要查詢的學(xué)校編號(1-" <<n <<")" << endl;while (true){cin >> a;if (!cin.good()||a<1 || a>n)cout << "輸入編號有誤,請重新輸入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}cout << "請輸入需要查詢的項(xiàng)目編號(1-6)" << endl;while (true){cin >> b;if (!cin.good()||b < 1 || b>6)cout << "暫無該編號項(xiàng)目,請重新輸入" << endl;else break;cin.clear();cin.ignore(1024, '\n');}int c[100];for (int i = 0; i < n; i++)c[i] = pro[b-1].score[i];sort(c, c + n);for (int i = n - 1; i > n - 4; i--){if(pro[b-1].score[a-1]==c[i]){cout<<"該學(xué)校在該項(xiàng)目中獲得第"<<abs(i-n)<<"名"<<endl;jud = 1;break;}}if (jud == 0)cout << "該學(xué)校在該項(xiàng)目中沒有獲獎(jiǎng)" << endl; }以上代碼均能ac。
總結(jié)
以上是生活随笔為你收集整理的中国计算机设计大赛赛事统计预习报告的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 筑泰防务助力江门市公安打造新一代警务移动
- 下一篇: .NET基础示例系列之二十四:家谱软件(