第一篇:數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-學(xué)生成績名次表
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-學(xué)生成績名次表
問題描述:建設(shè)一個年級(M個班)的學(xué)生參加某門課程的考試,每個班最多有N個學(xué)生,請輸出各班的成績名次表(M個)、以班級為單位的成績名次表(1個)、以及以年級為單位的成績名次表(1個)。
設(shè)計要求:
1.功能:每個班級的學(xué)生記錄按學(xué)號順序排列,每個學(xué)生記錄至少包含排列名次、學(xué)號、成績3個字段。
2.輸入:隨機產(chǎn)生M*N個成績。3.輸出:
(1)輸出每個班級的成績名次表,具有相同成績的名次相同;(2)輸出以班級為單位的成績名次表。
(3)輸出以年級為單位的成績名次表,具有相同成績的名次相同。
#include
int num;//學(xué)號
int score;//成績
}DataType1;//學(xué)生結(jié)點信息 typedef struct banji { DataType1 *data;char classname[10];//班級名稱
int classnum;//班級人數(shù) }Stu;//班級結(jié)點信息
int M;int Create(Stu S[MAX1][MAX2],int N){
int V;
int i,j,k;srand(time(NULL));
printf(“請輸入你創(chuàng)建多少個年級:”);
scanf(“%d”,&M);
printf(“請輸入你創(chuàng)建的一個年級有多少個班:”);
scanf(“%d”,&N);
for(i=0;i for(j=0;j { printf(“---------------------創(chuàng)建第%d個年級第%d個班級的信息--------n”,i+1,j+1); printf(“請輸入第%d個年級第%d個班級的名稱:”,i+1,j+1); scanf(“%s”,S[i][j].classname); printf(“請輸入第%d個年級第%d個班級的人數(shù):”,i+1,j+1); scanf(“%d”,&V); S[i][j].data=(DataType1 *)malloc(sizeof(DataType1)*V); getchar(); S[i][j].classnum=V; for(k=0;k { int x=S[i][j].data[k].num=(i+1)*1000+(j+1)*100+k; printf(“產(chǎn)生該班第%d個學(xué)生的學(xué)號:%dn”,k+1,x); int y=S[i][j].data[k].score=rand()%5+95; printf(“隨機產(chǎn)生該班該學(xué)生的成績:%dn”,y); } } } return N; } int classorder(Stu S[MAX1][MAX2], int N)//查詢每個班級的成績名次表 { int x,y,i,j,V,k,p=0;DataType1 temp;char b[10];printf(“請輸入你要查詢班級的名稱:”);scanf(“%s”,b); for(x=0;x for(y=0;y { if(strcmp(S[x][y].classname,b)==0) goto OK; if(x==M-1&&y==N-1) { printf(“你查找的班級不存在!n”); return-1; } } } OK: V=S[x][y].classnum; for(i = 0;i for(j = i+1;j { if(S[x][y].data[i].score< S[x][y].data[j].score) { temp = S[x][y].data[i]; S[x][y].data[i] =S[x][y].data[j]; S[x][y].data[j] = temp; } } printf(“%d班排名:n學(xué)號t成績t名次t班級名稱n”,y+1); for(k=0;k {p++; printf(“%4dt%4dt%4dt%sn”,S[x][y].data[k].num ,S[x][y].data[k].score ,p ,S[x][y].classname); if(k } printf(“n”); return 1;} int Allclassorder(Stu S[MAX1][MAX2], int N)//查詢以班級為單位的成績名次表 { int y,i,j,V,k;int c,p;DataType1 temp; printf(“請輸入你要查詢那個年級的全部班級名次表<1-%d>:”,M);scanf(“%d”,&c);if(c>M||c<1){ printf(“輸入錯誤!n”); return-1;} printf(“----打印你要查詢的第%d個年級的全部班級名次表----n”,c); for(y=0;y { V=S[c-1][y].classnum; for(i =0;i for(j =i+1;j { if(S[c-1][y].data[i].score< S[c-1][y].data[j].score) { temp = S[c-1][y].data[i]; S[c-1][y].data[i] =S[c-1][y].data[j]; S[c-1][y].data[j] = temp; } } p=0; printf(“%d班排名:n學(xué)號t成績t名次t班級名稱n”,y+1); for(k=0;k { p++; printf(“%4dt%4dt%4dt%sn”,S[c-1][y].data[k].num ,S[c-1][y].data[k].score ,p ,S[c-1][y].classname); if(k } printf(“n”); } return 1;} int gradeorder(Stu S[MAX1][MAX2], int N)//查詢以年級為單位的成績名次表 { int V;int c;int x,y,i,j,k=0,p=0;DataType1 r[100], temp;printf(“請輸入你要查詢哪個年級的名次表<1-%d>:”,M);scanf(“%d”,&c); if(c>M||c<1){ printf(“輸入錯誤!n”); return-1;} for(x=0;x { V=S[c-1][x].classnum; for(y=0;y r[k++]=S[c-1][x].data[y]; } for(i = 0;i for(j = i+1;j { if(r[i].score< r[j].score) { temp = r[i]; r[i] = r[j]; r[j] = temp; } } printf(“t--------第%d年級總排名-------n”,c);printf(“ 學(xué)號t成績t名次n”); for(i=0;i { p++; printf(“%4dt%4dt%4dn”,r[i].num ,r[i].score ,p); if(i } return 1;} void showface()//顯示桌面菜單 { printf(“********歡迎進入彭強學(xué)生成績名次表查詢系統(tǒng)*******n”); printf(“*1 創(chuàng)建年級和班級信息 2查詢每個班級的成績名次表*n”);printf(“*3 查詢以班級為單位的成績名次表 *n”);printf(“*4 查詢以年級為單位的成績名次表 0 退出管理系統(tǒng) *n”);printf(“*************************************************n”); } void main(){ Stu S[MAX1][MAX2]; int N; char i;do { showface();//調(diào)用菜單函數(shù) printf(“請選擇菜單0—5:”); scanf(“%s”,&i);switch(i){ case '1': N=Create(S,N);break; case '2': classorder(S,N);break; case '3': Allclassorder(S,N);break; case '4': gradeorder(S,N);break; case '0': exit(0); break; default:printf(“選擇菜單錯誤,請重新選擇!n”);} }while(i!=0);} 學(xué)生成績管理系統(tǒng) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計 一、課程設(shè)計的內(nèi)容與目的 利用所學(xué)數(shù)據(jù)結(jié)構(gòu)理論知識完成“學(xué)生成績管理系統(tǒng)”的設(shè)計。 通過課程設(shè)計提高學(xué)生的思維能力,促進學(xué)生的綜合應(yīng)用能力和專業(yè)素質(zhì)的提高。具體包括: 了解并掌握數(shù)據(jù)結(jié)構(gòu)與算法的設(shè)計方法,具備初步的獨立分析和設(shè)計能力; 初步掌握軟件開發(fā)過程的問題分析、系統(tǒng)設(shè)計、程序編碼、測試等基本方法和技能; 提高綜合運用所學(xué)的理論知識和方法獨立分析和解決問題的能力; 訓(xùn)練用系統(tǒng)的觀點和軟件開發(fā)一般規(guī)范進行軟件開發(fā),培養(yǎng)軟件工作者所應(yīng)具備的科學(xué)的工作方法和作風(fēng)。 二、課程設(shè)計的要求與數(shù)據(jù) 1.系統(tǒng)功能需求分析: 1、輸入功能:可以輸入40位同學(xué)信息 2、增加功能,能增加學(xué)生的信息 3、瀏覽功能:完成對全部學(xué)生記錄瀏覽 4、查詢功能:采用散列查找完成按學(xué)號查找學(xué)生記錄 5、排序功能:采用直接選擇排序,將學(xué)生平均成績從低到高排序輸出 6、刪除功能:可以刪除學(xué)生信息 7、修改功能:可以對學(xué)生信息的各項信息進行修改 8、插入功能:完成數(shù)據(jù)的插入 9、統(tǒng)計功能:統(tǒng)計出各分數(shù)段學(xué)生人數(shù)(60分以下,60~70,71~80,...) 2.存儲結(jié)構(gòu)設(shè)計分析: 3.學(xué)生的信息:學(xué)生的信息采用結(jié)構(gòu)體類型定義,每個元素表示一個學(xué)生的信息,包括學(xué)號,姓名及數(shù)據(jù)結(jié)構(gòu)平均成績4個數(shù)據(jù)項: (1)struct student {char num[11];char name[20];int score[8];float ave;}stu[N];(2)散列表的結(jié)點類型定義: typedef struct node {unsigned long int key;struct node * link;}HNode;3.源程序如下: #include第二篇:學(xué)生成績管理數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告