運動會計分系統課程設計_第1頁
運動會計分系統課程設計_第2頁
運動會計分系統課程設計_第3頁
運動會計分系統課程設計_第4頁
運動會計分系統課程設計_第5頁
已閱讀5頁,還剩25頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、編 號: B04931082學 號: 201240450137 課 程 設 計教 學 院計算機學院課程名稱高級語言程序設計題 目運動會比賽計分系統專 業軟件工程班 級(一)班姓 名包先躍同組人員石奇、呂鵬飛、陳立陽指導教師祁文青2013年06月29日 課程設計任務書 2012 2013 學年第 2 學期學生姓名: 包先躍 專業班級: 12軟件工程 指導教師: 祁文青 工作部門: 計算機學院 一、課程設計題目:運動會比賽計分系統二、課程設計內容:初始化輸入:N-參賽學校總數,M-男子競賽項目數,W-女子競賽項目數各項目名次取法有如下幾種:取前5名:第一名得分7分,第二名得分5,第三名得分3,第四

2、名得分2,第五名得分1;取前3名:第一名得分5,第二名得分3,第三名得分2;功能要求:(1)系統以菜單方式工作(2)由程序提醒用戶填寫比賽結果,輸入各項目獲獎運動員信息。(3)所有信息記錄完畢后,用戶可以查詢各個學校的比賽成績(4)查看參賽學校信息和比賽項目信息等。三、進度安排1分析問題,給出數學模型,選擇數據結構。2設計算法,給出算法描述。3給出源程序清單。4. 編輯、編譯、調試源程序。5. 撰寫課程設計報告。四、基本要求1.界面友好,函數功能要劃分好。2.總體設計應畫一流程圖。3.程序要加必要的注釋。4.要提供程序測試方案。5.程序一定要經得起測試,要能運行起來,不能運行的程序是沒有價值的

3、。 目錄目錄2一 概述3二 總體方案設計4三 詳細設計55.1.1提出問題85.1.2解決問題95.1.3提出問題95.1.4分析問題95.1.5解決問題95.1.6提出問題95.1.7分析問題95.1.8解決問題95.2算法的效率及改進設想9四 程序的調試與運行結果分析11(一) 用戶手冊11(二)調試過程中出現的問題和處理方式15五 課程設計總結16附錄:(源程序)17參 考 文 獻27 一 概述1. 課程設計的目的1理解和掌握該課程中的有關基本概念,程序設計思想和方法。2培養綜合運用所學知識獨立完成課題的能力。3培養勇于探索、嚴謹推理、實事求是、有錯必改,用實踐來檢驗理論,全方位考慮問題

4、等科學技術人員應具有的素質。4掌握從資料文獻、科學實驗中獲得知識的能力,提高學生從別人經驗中找到解決問題的新途徑的悟性,初步培養工程意識和創新能力。2. 課程設計的要求1)可以輸入各個項目的前三名或前五名的成績;2)能統計各學校總分,3)可以按學校編號或名稱、學校總分、男女團體總分排序輸出;4)可以按學校編號查詢學校某個項目的情況;可以按項目編號查詢取得前三或前五名的學校。5)數據存入文件并能隨時查詢 6)規定:輸入數據形式和范圍:可以輸入學校的名稱,運動項目的名稱 輸出形式:有合理的提示,各學校分數為整形 界面要求:有合理的提示,每個功能可以設立菜單,根據提示,可以完成相關的功能要求。 存儲

5、結構:學生自己根據系統功能要求自己設計,但是要求運動會的相關數據要存儲在數據文件中。(數據文件的數據讀寫方法等相關內容在c語言程序設計的書上,請自學解決)請在最后的上交資料中指明你用到的存儲結構;測試數據:要求使用1、全部合法數據;2、整體非法數據;3、局部非法數據。進行程序測試,以保證程序的穩定。測試數據及測試結果請在上交的資料中寫明; 二 總體方案設計(1)運動項目定義: typedef struct Sport /運動項目結構 char name20; /運動項目名稱 int isboy; /0為女項目,1為男項目int is3; /0為取前五名,1為取前五名int number; /項

6、目編號(2)主要算法的設計思想: 本程序主要是使用鏈表來實現操作。一個運動會包括運動項目和參加運動會的成員。因此構造兩個鏈表Department,Sport。根據輸入的不同選擇不同的功能,有輸入運動項目,按總分排序,按男團體總分排序,按女團體總分排序,按項目標號查詢,退出。為了操作的方便,并且能夠保存輸入數據,所以通過文件操作來實現數據的寫和讀。每次添加新的數據后都要輸入0退出,數據才能保存。對于總分的排序使用了冒泡排序。為了使整個程序看起來更加友好,又添加了程序啟動畫面。 在此次課程設計小組中我所承當的工作是:對總程序的結構體的定義,界面菜單的建立以及void funct6(ALLNode

7、*g2) 和 按學校編號查詢學校某個項目情況的子函數程序編寫。void funct7(ALLNode *g2) 是按學校編號查詢學校某個項目情況 ;void funct6(ALLNode *g2):按女團體總分排序輸出。(各部分解決問題詳見詳細設計中遇到的較重要問題的回顧) 三 詳細設計3、1程序流程圖1) 設計運動會的學校編號或名稱、項目成績、男女團體總分的數據存儲系統設計圖 圖(1)(2)查詢團體總分程序設計圖圖2(3)總流程圖:(4)算法分析:其中school類為:class school:public athlete /*學校*/ public: int count; /*學校獲獎數*

8、/ int serial; /*學校編號*/ int menscore; /*男選手總分*/ int womenscore; /*女選手總分*/ int totalscore; /*總分*/ athlete athMaxSize; /*獲獎運動員信息數組,包括分數,名次,項目*/ school *prev;/前指針 school *next; /后指針;其中部分主要的函數:添加操作add(school* &head)查詢操作checkFunc(school *head,int &n)文件保存save(school *head)總分快速排序tquicksort(vector<

9、;school *>& v, int first, int last)總分基數排序 tbaseSort(vector<school *>& v, int d) 2.關鍵算法 添加項目號for ( i = 1 ; i <= n ; i+ ) 輸入第i名運動員的學校編號tempwhile(first!=head)/遍歷鏈表,直到找到編號為serial的學校所在結點,或first指向表頭headif (first->serial =要添加的編號) (first->athfirst->count).item =要添加的項目號;(first-&g

10、t;athfirst->count).range =i(名次) First指向的學校的項目加一;更新總分break;first = first->next;(5)遇到的較重要問題的回顧 5.1.1提出問題所有輸入輸出內容只能在一屏內顯示,學過c語言,很知道”n”是換行,”f”是換屏的,可是在這里就是無法實現。5.1.2解決問題輸入clrscr();5.1.3提出問題設置選項,供用戶輸入選擇時,當按任意鍵時都會跳入下一步操作,或者直接退出系統。5.1.4分析問題在供用戶選擇時,提供了幾個選項,就寫幾個case語句,但是當用戶輸入的并不是這幾個數字時,系統就不能做出正確判斷。5.1.5

11、解決問題修改case語句,添加default語句提示出錯,要求重新輸入; default: clrscr(); /*清屏*/ printf("輸入錯誤,請重新選擇"); 5.1.6提出問題當同一項目中有同一學校的兩個人時,便不能正確輸出或者輸出相同人名。5.1.7分析問題由于同時有兩個相同學校編號的人存在,系統在輸出時,不能確定那個是正確的,或者用后來的覆蓋以前的。5.1.8解決問題用for函數實現從開始到結尾的遍歷。5.2算法的效率及改進設想算法的效率:總的來講,嚴重引響執行速度的便是查找,查找任意一個數據,便要將其所在的結構從頭至尾遍歷一次,耗費大量的時間。 改進設想:

12、因大部分顯示均是以學校為單位,所以將以由有關人的各種信息為集合的結構改為以由有關學校的各種信息為集合的結構。在這次上機過程中遇到過一些問題,但經過我們不懈努力,解決了部分,還有的現在不能解決,留著我們日后思考和解決。比如說在運用數據結構排序的時候,方法的選擇上,總是想用時間復雜度小的算法,但結果出了問題,最后還是用了我們熟悉的選擇法排序。結構體的運用上感覺不是很熟悉,遇到結構體的時候很陌生,這是以后必須要加強的。在我們的這個程序中用了兩個結構體:struct node int num; ; struct node *f22; 我們同樣遇到了一些還不能很好解決的問題,在輸出的時候不能得到我們想要

13、的效果,在按學校編號排序查詢輸出的時候,發生了重疊在做了幾次修改之后都能使之滿意,這有待學習和修改。在編寫之前,做整體的規劃很重要,這才能讓我們的效率更高和合作得更好。 四 程序的調試與運行結果分析(一) 用戶手冊1 本程序可以在vc+5.0和vc+6.0 的環境下運行。2 在vc中創建一個工程,將源程序復制到.cpp中,編譯鏈接就可以。如下:運動會計分系統1.主菜單窗口2. 輸入各個項目成績并存儲文件3. 統計各學校總分4. 按學校編號排序輸出 5. 按學校總分排序輸出6. 按男團體總分排序輸出7. 按女團體總分排序輸出8. 按學校編號查詢學校某個項目情況9. 按項目編號查詢取得名次的學校(

14、二)調試過程中出現的問題和處理方式 為了使系統具有一點的容錯性,當輸入錯誤信息時應給出相應提示以正確輸入數據,如:printf("要查詢的項目編號:");scanf("%d",&s);if(s>m+w|s=0)printf("此次運動會不包括這個項目.nnn"); 想在每次查詢結束想返回主菜單進行其它項時,應在main( )函數中調用其它函數時再調用main( )函數,如: switch(choice) case 1: inputinformation();writedata();readdata();main(); c

15、ase 2: output();main(); case 3: inquiry();main(); case 4: readdata();main(); 程序出現語法錯誤,發現是輸入名次信息的地方忘帶地址符&,或是程序不完整,只寫了一個大括號。如: printf("*名次:"); scanf("%d",&hi.cj.ranges) 五 課程設計總結經過幾個星期的奮戰,終于完成了課程設計,感覺又進一步了解了這門課程,各個知識點都加強了我似乎突然找到了方向,認真的學習這門課。回顧這次課程設計,使我感慨頗多。的確,從理論到實踐,在整整兩星期的日

16、子里,學到很多很多的的東西,同時不僅可以鞏固學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,從而提高自己的實際動手編程能力和獨立思考的能力。運動會計分系統,比較復雜,經過很長時間的書寫,總算嘗到了勝利的“滋味” 在細節的認識上,我們在開發程序的時候,在之前就要知道自己想要的效果,然后把需要實現的功能在紙上列出來,然后比如要用幾個函數來實現幾個功能,整體需要幾個模塊來搭建,這些工作都是要在未動工之前就得做好的準備工作,編程要的是有整體的思想加細心。這次的課程設計收獲頗多,最大的認識到了要想高效設計出想要的東西不僅要熟悉的掌握所學知識,還

17、要學會充分利用現有資源。在這之前,總以為自己編程方面還很差,現在才覺得,只要努力了,就會有收獲,就會得到回報。附錄:(源程序)(一)。運動會計分系統#include <stdio.h> #include <stdlib.h> #include <string.h> #include <io.h> /#include <conio.h> /*屏幕操作函數*/ #define MAX 50 /#define NULL 0 typedef struct node1 int school; /*學校編號*/ int record; /*項目成

18、績*/ struct node1 *next; /*鏈域*/ Schools; typedef struct int item; /*項目編號*/ Schools *firstschool; /*鏈域指向鏈表中第一個結點*/ ITEM; typedef struct int z; /* 項目總數 */ ITEM aMAX; ALLitems; typedef struct node2 int item; /*該學校獲獎的項目*/ int record; /*項目成績*/ struct node2 *next; /*鏈域*/ Items; typedef struct int school; /

19、*學校編號*/ int score; /*學校總分*/ int boys; /*男團體總分*/ int girls; /*女團體總分*/ Items *firstitem; /*鏈域指向鏈表中第一個獲獎項目的結點*/ SCHNode; typedef struct int n; /* 學校總數 */ SCHNode bMAX; ALLNode; ALLitems *g1; ALLNode *g2; void funct1(ALLitems *g1,ALLNode *g2) Schools *p1; Items *p2; int i,j,k,m,w,h,x; p1=(Schools *)mall

20、oc(sizeof(Schools); p2=(Items *)malloc(sizeof(Items); if(!p1|!p2) exit(1); printf("n *輸入各個項目信息 * nn"); printf(" 輸入男子項目總數m:"); scanf("%d",&m); if(m<0|m>20) printf(" 輸入有誤,m是20以內的整數,請重新輸入:"); scanf("%d",&m); printf(" 輸入女子項目總數w:")

21、; scanf("%d",&w); if(w<0|w>20) printf(" 輸入有誤,w是20以內的整數,請重新輸入:"); scanf("%d",&w); printf(" 輸入參加運動會的學校總數n:"); scanf("%d",&g2->n); if(g2->n<0|g2->n>20) printf(" 輸入有誤,n是20以內的整數,請重新輸入:"); scanf("%d",&am

22、p;g2->n); g1->z=m+w; printf(" 則項目編號為男子1-%d,女子%d-%d",m,m+1,g1->z); printf("nn *記錄運動會成績*"); printf("nn (輸入0標志結束)n"); for(k=1;k<=g1->z;k+) g1->ak.item=k; g1->ak.firstschool=NULL; for(k=1;k<=g2->n;k+) g2->bk.school=k; g2->bk.firstitem=0; g2-

23、>bk.score=0; g2->bk.boys=0; g2->bk.girls=0; g2->b0.score=0; g2->b0.boys=0; g2->b0.girls=0; while(i!=0) printf("n 項目:"); scanf("%d",&i); if(i!=0) printf(" 1.前三名 2.前五名n"); printf(" 請選擇:"); scanf("%d",&j); if(j!=1&&j!=2

24、) printf(" 輸入有誤,請重新選擇:"); scanf("%d",&j); if(j=1) h=3; do printf(" 第%d名:學校(學校編號為數字)",h); scanf("%d",&x); p1=(Schools *)malloc(sizeof(Schools); p1->school=x; p2=(Items *)malloc(sizeof(Items); p2->item=i; if(h=3) p2->record=p1->record=2; if(h

25、=2) p2->record=p1->record=3; if(h=1) p2->record=p1->record=5; p1->next=g1->ai.firstschool; g1->ai.firstschool=p1; p2->next=g2->bx.firstitem; g2->bx.firstitem=p2; g2->bx.score=g2->bx.score+p2->record; /* 累計總分 */ if(i<=m) g2->bx.boys=g2->bx.boys+p2->r

26、ecord; /* 累計男團體總分 */ else g2->bx.girls=g2->bx.girls+p2->record; /* 累計女團體總分 */ h-; while(x!=0&&h!=0); if(j=2) h=5; do printf(" 第%d名:學校(學校編號為數字)",h); scanf("%d",&x); p1=(Schools *)malloc(sizeof(Schools); p1->school=x; p2=(Items *)malloc(sizeof(Items); p2->

27、;item=i; if(h=5) p2->record=p1->record=1; if(h=4) p2->record=p1->record=2; if(h=3) p2->record=p1->record=3; if(h=2) p2->record=p1->record=5; if(h=1) p2->record=p1->record=7; p1->next=g1->ai.firstschool; g1->ai.firstschool=p1; p2->next=g2->bx.firstitem; g2

28、->bx.firstitem=p2; g2->bx.score=g2->bx.score+p2->record; /* 累計總分 */ if(i<=m) g2->bx.boys=g2->bx.boys+p2->record; /* 累計男團體總分 */ else g2->bx.girls=g2->bx.girls+p2->record; /* 累計女團體總分 */ h-; while(x!=0&&h!=0); void save() FILE *fp1,*fp2; fp1=(FILE *)malloc(sizeo

29、f(FILE); fp2=(FILE *)malloc(sizeof(FILE); if(fp1=fopen("sports1","wb")=NULL) printf("cannot open file.n"); return; if(fwrite(g1,sizeof(ALLitems),1,fp1)!=1) printf("file write error.n"); fclose(fp1); if(fp2=fopen("sports2","wb")=NULL) printf

30、("cannot open file.n"); return; if(fwrite(g2,sizeof(ALLNode),1,fp2)!=1) printf("file write error.n"); fclose(fp2); void funct2(ALLNode *g2) /* 輸出各學校總分 */ int k; printf("nn * 輸出各學校總分 *n"); printf(" 學校編號t 總分 n"); for(k=1;k<=g2->n;k+) printf(" %dttt %d

31、n",k,g2->bk.score); printf("n"); system("pause"); printf(" 按任意鍵返回主菜單."); getchar(); void funct3(ALLNode *g2) /* 按學校編號排序輸出 */ int k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按學校編號排序輸出 *n"); printf(" 學校編號ttt獲獎情況 n"); scanf(&quo

32、t;%d",&k); for(k=1;k<=g2->n;k+) printf("tttttt%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("項目%d:得%d分 ",p2->item,p2->record); p2=p2->next; printf("n"); printf("n"); system("pause"); printf("按任意鍵返回主菜單."); g

33、etchar(); void funct4(ALLNode *g2) /* 按學校總分排序輸出 */ int i,j,k; Items *p2; printf("nn * 按學校總分排序輸出 *n"); printf(" 學校編號tt總分 n"); scanf("%d",&k); /printf("輸入要查詢的項目編號:"); for(i=2;i<=g2->n;i+) printf("%dt",k); p2=g2->bk.firstitem; while(p2!=NUL

34、L) printf("%d tt%dn",g2->bk.school,g2->bk.score); p2=p2->next; printf("n"); g2->b0.score=g2->bi.score; g2->b0.boys=g2->bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; while(g2->b0.score<g2->bj.score&&j>0

35、) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g2->bj+1.school=g2->bj.school; j-; g2->bj+1.score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls; g2->bj+1.school=g2->b0.school; for(k=1;k<=

36、g2->n;k+) printf("%d tt%dn",g2->bk.school,g2->bk.score); system("pause"); printf("按任意鍵返回主菜單."); getchar(); void funct5(ALLNode *g2) /* 按男團體總分排序輸出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按男團體總分排序輸出 *n"); printf("學校編

37、號tt男團體總分 n"); scanf("%d",&k); /printf("輸入要查詢的學校編號:"); for(i=2;i<=g2->n;i+) printf("%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("%dtt %dn",g2->bk.school,g2->bk.boys); p2=p2->next; printf("n"); g2->b0.score=g2->

38、;bi.score; g2->b0.boys=g2->bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; while(g2->b0.boys<g2->bj.boys&&j>0) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g2->bj+1.school=g2-&g

39、t;bj.school; j-; g2->bj+1.score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls; g2->bj+1.school=g2->b0.school; for(k=1;k<=g2->n;k+) printf("%dtt %dn",g2->bk.school,g2->bk.boys); system("pause"); / 暫停等待 printf("按任意鍵返回主

40、菜單."); getchar(); void funct6(ALLNode *g2) /* 按女團體總分排序輸出 */ int i,j,k; Items *p2; p2=(Items *)malloc(sizeof(Items); printf("nn * 按女團體總分排序輸出 *n"); printf("學校編號tt女團體總分 n"); scanf("%d",&k); / printf("輸入要查詢的項目編號:"); for(i=2;i<=g2->n;i+) printf("

41、;%dt",k); p2=g2->bk.firstitem; while(p2!=NULL) printf("%dtt %dn",g2->bk.school,g2->bk.girls); p2=p2->next; printf("n"); g2->b0.score=g2->bi.score; g2->b0.boys=g2->bi.boys; g2->b0.girls=g2->bi.girls; g2->b0.school=g2->bi.school; j=i-1; whil

42、e(g2->b0.girls<g2->bj.girls&&j>0) g2->bj+1.score=g2->bj.score; g2->bj+1.boys=g2->bj.boys; g2->bj+1.girls=g2->bj.girls; g2->bj+1.school=g2->bj.school; j-; g2->bj+1.score=g2->b0.score; g2->bj+1.boys=g2->b0.boys; g2->bj+1.girls=g2->b0.girls;

43、 g2->bj+1.school=g2->b0.school; for(k=1;k<=g2->n;k+) printf("%dtt %dn",g2->bk.school,g2->bk.girls); system("pause"); printf("按任意鍵返回主菜單."); getchar(); void funct7(ALLNode *g2) /* 按學校編號查詢學校某個項目情況 */ int i,j; Items *p2; printf("n * 按學校編號查詢學校某個項目情況 *n

44、"); printf(" 輸入要查詢的學校編號:"); scanf("%d",&i); printf(" 輸入要查詢的項目編號:"); scanf("%d",&j); p2=g2->bi.firstitem; while(p2!=NULL) if(p2->item=j) printf(" 學校編號:%dt項目%d:得%d分n",i,p2->item,p2->record); p2=p2->next; printf("n"

45、); system("pause"); printf(" 按任意鍵返回主菜單."); getchar(); void funct8(ALLitems *g1) /* 按項目編號查詢取得名次的學校 */ int i; Schools *p1; printf("n* 按項目編號查詢取得名次的學校 *n"); printf("輸入要查詢的項目編號:"); scanf("%d",&i); printf("項目編號ttt取得名次的學校n"); printf("%dt&

46、quot;,i); p1=g1->ai.firstschool; while(p1!=NULL) printf(" 學校%d:得%d分 ",p1->school,p1->record); p1=p1->next; printf("nn"); system("pause"); printf("按任意鍵返回主菜單."); getchar(); void main() int t; g2=(ALLNode*)malloc(sizeof(ALLNode); g1=(ALLitems*)malloc(sizeof(ALLitems); if

溫馨提示

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

評論

0/150

提交評論