電 話:18937133779
網(wǎng) 址:http://www.tpiin.com
郵 箱:zboao@qq.com
安全
運動會管理系統(tǒng)可以這樣設計
1 數(shù)據(jù)庫文檔設計
2 數(shù)據(jù)結(jié)構(gòu)設計
3 程序 (對數(shù)據(jù)庫的管理)
1 數(shù)據(jù)庫文檔 信息 存儲格式
運動會管理系統(tǒng) 首先要有運動員,參賽單位,運動會運動項目
可以分三個庫存放(這里的庫是廣義的,可以使用數(shù)據(jù)庫軟件系統(tǒng)的庫,可以使用自己定義的庫形式,或是文本文件)
運動員庫信息:
ID (唯一標示符)
姓名,性別,出生年月,(身高,體重,籍貫 等)
本次參賽項目: 項目1{項目ID 比賽時間 名次 破紀錄} 項目2...
參賽歷史: {運動會屆 單位 項目 名次 破紀錄} ...
(如果不實現(xiàn)歷史查詢功能,可去掉參賽歷史記錄)
參賽單位:
單位ID
單位名稱
參賽運動員{ID } ...
參賽項目{項目ID }...
往屆參賽{運動員,項目及成績,}
運動項目:
項目ID
項目名稱
比賽時間
參賽運動員ID
名次1 2 3 4 5 6
運動會紀錄{運動會屆,紀錄年月日,紀錄,保持者ID}
省(地區(qū))運動會紀錄{運動會屆,紀錄年月日,紀錄,保持者}
全運會紀錄{運動會屆,紀錄年月日,紀錄,保持者ID}
亞運會紀錄...
世界紀錄...
三個庫文件最好采用固定紀錄長度存儲,方便存取管理操作,尤其是運動員信息庫
2 數(shù)據(jù)結(jié)構(gòu)設計
設計三個類分別對應三個庫,數(shù)據(jù)成員與庫字段設置相同
運動員信息類中的參賽項目可以采用鏈表形式 或數(shù)組形式
參賽歷史采用鏈表形式
Class 運動員
成員函數(shù)實現(xiàn)
構(gòu)造函數(shù)(有參 無參)
析構(gòu)函數(shù) (回收動態(tài)分配單元)
讀取數(shù)據(jù)庫(讀取當前紀錄)
讀取數(shù)據(jù)庫(讀取本運動員的歷史記錄)
保存入數(shù)據(jù)(本運動員信息創(chuàng)建保存,覆蓋保存)
本次運動會參賽項目及成績( 可設 成績?yōu)?-1 為參加項目 0 為無取得名次)
本次代表單位
往屆運動會參賽項目及成績
往屆代表單位
...
等等
Class 參賽單位
數(shù)據(jù)成員與庫字段設置相同
參賽運動員ID可以用數(shù)組或鏈表
參賽項目可以用數(shù)組或鏈表
成員函數(shù)
構(gòu)造函數(shù)(有參,無參),析構(gòu)函數(shù)
讀庫,寫庫
本屆運動會成績統(tǒng)計,項目統(tǒng)計,運動員統(tǒng)計
往屆運動會成績統(tǒng)計,
Class 項目
數(shù)據(jù)成員設置與庫對應
成員函數(shù)
構(gòu)造函數(shù)析構(gòu)函數(shù)
庫存取
項目統(tǒng)計(各單位得分統(tǒng)計)
紀錄查詢
3 主程序
聲明類對象
打開數(shù)據(jù)庫
菜單功能
參賽單位管理
添加修改參賽單位
查詢參賽單位
運動員,項目,積分統(tǒng)計
運動會項目管理
項目計劃安排
項目結(jié)果錄入
項目歷史查詢
運動員檔案管理
添加
修改
查詢
刪除
不完善,樓主清自己再根據(jù)需要和要求完善
這需要找一個學過編程的來設計哦
這是源代碼哦,要加分的!~~~~~
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include<string.h>
int a,b,c,d,i,j;
struct node
{
int num;
};
struct node *f[22];
void exit0()
{
FILE *fp;
int k;
alp:if((fp=fopen("sore.txt","w"))==NULL)
{
printf("創(chuàng)建文件失敗\n");
printf(" 1*****重試\n");
printf(" 2*****強制退出(數(shù)據(jù)將不會保存到文件)\n");
printf(" 3*****回到主菜單\n");
alj: scanf("%d",&k);
if(k==1)
goto alp;
else if(k==2)
exit(0);
else if(k==3)
return;
else
{
printf("輸入錯誤,請重新輸入:");
goto alj;
}
}
fprintf(fp,"\n\n");
fprintf(fp,"運動會分數(shù)統(tǒng)計表\n\n\n");
fprintf(fp,"項目代號");
for(i=1;i<=c+d;i++)
fprintf(fp,"%5d",i);
fprintf(fp," ");
fprintf(fp,"\n 學校代號\n");
for(i=1;i<=a;i++)
{
fprintf(fp,"%10d",i);
for(b=1;b<=c+d;b++)
{
fprintf(fp,"%5d",f[i][b].num);
}
fprintf(fp,"\n");
}
fprintf(fp,"\n\n");
fprintf(fp," 注:本次運動會有%d個學校參賽\n\n",a);
fprintf(fp," 其中1 ~ %d組是男子組,%d ~ %d組是女子組\n",c,c+1,c+d);
printf("\n比賽成績已保存到當前路徑下的sore.txt文件中\(zhòng)n\n");
fclose(fp);
exit(1);
}
int choose()
{
int choo;
printf("\n\n 1*輸入成績\n");
printf(" 2*統(tǒng)計各學校的總分\n");
printf(" 3*出按學校編號排序輸\n");
printf(" 4*按學??偡峙判蜉敵鯸n");
printf(" 5*按男團體總分排序輸出\n");
printf(" 6*按女團體總分排序輸出\n");
printf(" 7*按學校編號查詢學校某個項目的成績\n");
printf(" 8*按項目編號查詢?nèi)〉们叭蚯拔迕膶W校\n");
printf(" 9*退出\n\n");
printf("請選擇:");
scanf("%d",&choo);
return(choo-1);
}
void input()
{
int ab,ac,ae,af,g=1,get[5]={0,0,0,0,0};
printf("\n請輸入項目代號:");
ale:scanf("%d",&ab);
if(ab>c+d||ab<1)
{
printf("\n此項目代號不存在,重新輸入\n");
goto ale;
}
ae=0;
for(i=0;i<=a;i++)
{
if(f[i][ab].num!=0)
{
ae=1;
break;
}
}
if(ae==1)
{
al2: printf("\n此項目成績曾經(jīng)已被錄入過,是否要重新錄入(您輸入的項目代號可能有誤,強烈建議您查證后再錄入):\n");
printf(" 1++++重新錄入(若重新錄入,以前的該項目成績將被刪除)\n");
printf(" 2++++不要,待查證后再錄入\n\n");
scanf("%d",&af);
if(af==2)
{
printf("您已取消錄入?。。。?!\n");
return;
}
else if(af==1)
{
for(i=1;i<=a;i++)
{
if(f[i][ab].num!=0)
{
f[i][0].num=f[i][0].num-f[i][ab].num;
if(ab<=c)
f[i][c+d+1].num=f[i][c+d+1].num-f[i][ab].num;
else
f[i][c+d+2].num=f[i][c+d+2].num-f[i][ab].num;
}
f[i][ab].num=0;
}
}
else
goto al2;
}
al: printf("\n此項目是以前幾名為勝出者:\n\n");
printf(" 3-------以前三名\n");
printf(" 5-------以前五名\n\n");
scanf("%d",&ac);
if(ac==3)
{
printf("\n請依次輸入獲勝學校代號:");
af=5;
for(i=0;i<3;i++)
{
alq: scanf("%d",&ae);
if(ae>a||ae<1)
{
printf("%d學校代號不存在,重新輸入第%d名的學校代號\n",ae,g);
goto alq;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
printf("同一個學校不能在同一項目中有兩個名次,請重新輸入第%d名的學校代號!??!\n",g);
goto alq;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
else if(ac==5)
{
printf("請依次輸入獲勝學校代號:");
af=7;
for(i=0;i<5;i++)
{
alw: scanf("%d",&ae);
if(ae>a||ae<1)
{
printf("%d學校代號不存在,重新輸入第%d名的學校代號\n",ae,g);
goto alw;
}
for(b=0;b<5;b++)
{
if(ae==get[b])
{
printf("同一個學校不能在同一項目中有兩個名次,請重新輸入第%d名的學校代號?。?!\n",g);
goto alw;
}
else
get[b]=ae;
}
f[ae][0].num=f[ae][0].num+af;
f[ae][ab].num=af;
if(ab<=c)
f[ae][c+d+1].num=f[ae][c+d+1].num+af;
else
f[ae][c+d+2].num=f[ae][c+d+2].num+af;
if(af>3)
af=af-2;
else
af--;
g++;
}
}
else
goto al;
printf("\n\n 輸入完成 ! ! ! ! \n");
}
void each()
{
printf("\n 對應的格式為:\n 學校代號:團體總成績\n\n ");
for(i=1;i<=a;i++)
{
printf("%2d:%3d ",i,f[i][0].num);
if(i%3==0)
printf("\n ");
}
}
void biaohao()
{
printf("\n項目代號 ");
for(i=1;i<=c+d;i++)
{
if(i>9)
printf("%4d ",i);
else
printf("%5d ",i);
}
printf("\n");
printf("學校代號 \n");
for(i=1;i<=a;i++)
{
printf(" %d ",i);
for(b=1;b<=c+d;b++)
{
if(f[i][b].num>9)
printf("%4d",f[i][b].num);
else
printf("%5d",f[i][b].num);
}
printf("\n");
}
}
void zongfen()
{
struct nod
{
int ke;
int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1);
printf("\n 按學校編號排序輸出\n\n");
printf(" 學校代號 總分\n\n");
for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][0].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%13d%8d\n",de[i].ke,de[i].num);
}
}
void nanzong()
{
struct nod
{
int ke;
int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1);
printf("\n 按男子團體總分排序輸出\n\n");
printf(" 學校代號 男子團體總分\n\n");
for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][c+d+1].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%13d%12d\n",de[i].ke,de[i].num);
}
}
void nvzong()
{
struct nod
{
int ke;
int num;
};
int ha;
struct nod *de;
de=(struct nod *)malloc(sizeof(struct nod)*a+1);
printf(" 按女子團體總分排序輸出\n\n");
printf(" 學校代號 女子團體總分\n\n");
for(i=1;i<=a;i++)
{
de[i].ke=i;
de[i].num=f[i][c+d+2].num;
}
for(i=1;i<=a;i++)
{
for(b=i;b<=a;b++)
{
if(de[b].num>de[i].num)
{
ha=de[b].ke;
de[b].ke=de[i].ke;
de[i].ke=ha;
ha=de[b].num;
de[b].num=de[i].num;
de[i].num=ha;
}
}
}
for(i=1;i<=a;i++)
{
printf("%15d%13d\n",de[i].ke,de[i].num);
}
}
void xuexiao()
{
int dr,dt;
printf("\n請輸入您要查詢的學校代號:");
aly:scanf("%d",&dr);
if(dr>a||dr<1)
{
printf("學校代號不存在,重新輸入\n");
goto aly;
}
printf("請輸入您要查詢的項目代號:");
alo:scanf("%d",&dt);
if(dt>c+d||dt<1)
{
printf("項目代號不存在,重新輸入\n");
goto alo;
}
printf("\n\n %3d 學校的%3d 項目成績?yōu)?3d\n",dr,dt,f[dr][dt].num);
}
void xiangmu()
{
int ge,sedy=0;
printf("\n 請輸入您要查詢的項目代號:");
all:scanf("%d",&ge);
printf("\n");
if(ge>c+d||ge<1)
{
printf("沒有此項目代號,重新輸入\n");
goto all;
}
for(i=1;i<=a;i++)
{
if(f[b][ge].num==2)
sedy=1;
}
if(sedy==0)
{
printf("此項目沒有錄入成績\n");
return;
}
for(i=1;i<=a;i++)
{
if(f[i][ge].num==7)
{
printf(" 此項目取前5名獲獎者\n");
break;
}
}
if(i==a+1)
printf(" 此項目取前3名獲獎者\n");
printf("\n 獲勝名單由成績高到低依次為:\n\n ");
for(i=7;i>0;i--)
{
for(b=1;b<=a;b++)
{
if(f[b][ge].num==i)
printf("%5d",b);
}
}
}
void(*g[])()={input,each,biaohao,zongfen,nanzong,nvzong,xuexiao,xiangmu,exit0};
void main()
{
int choos;
printf("\n\n * * * 運動會分數(shù)統(tǒng)計 * * *\n\n\n");
printf("共有多少個學校參賽:");
scanf("%d",&a);
while(a<=0||a>20)
{
if(a<=0)
{
printf("\n 參賽學校個數(shù)不能是負數(shù)或零\n\n");
printf("共有多少個學校參賽:");
scanf("%d",&a);
}
if(a>20)
{
printf("\n 參賽學校個數(shù)不能大于20\n\n");
printf("共有多少個學校參賽:");
scanf("%d",&a);
}
}
printf("有幾個男子組:");
scanf("%d",&c);
printf("有幾個女子組:");
scanf("%d",&d);
for(i=0;i<=a;i++)
{
f[i]=(struct node *)malloc(sizeof(struct node)*(c+d+3));
for(j=0;j<=c+d+2;j++)
f[i][j].num=0;
}
choos=choose();
while(1)
{
while(choos<0||choos>8)
choos=choose();
(*g[choos])();
printf("\n");
choos=choose();
}
}