第一篇:C程序設(shè)計-學(xué)生成績管理
《C程序設(shè)計》綜合性實驗
實驗報告
題目: 學(xué)生成績管理
姓名: 班級: 學(xué)號: 指導(dǎo)教師: 完成時間:
一、實驗題目
學(xué)生成績管理
二、實驗?zāi)康?/p>
1.掌握一維數(shù)組、二維數(shù)組的使用方法。2.掌握結(jié)構(gòu)體數(shù)組的定義和使用。
3.綜合應(yīng)用數(shù)據(jù)文件的讀寫語句保存結(jié)構(gòu)體數(shù)組中的數(shù)據(jù)。
三、實驗要求
有4個學(xué)生,每個學(xué)生有3門課的成績,從鍵盤上輸入以上數(shù)據(jù),計算每個學(xué)生的平均分,并把這些信息(包括學(xué)號、姓名、班級、3門課的成績及平均分)保存到一個文件(score.txt)中,并顯示在屏幕上。
具體要求:
?定義結(jié)構(gòu)體類型(student_type),其中包括學(xué)號(num[11])、姓名(name[8])、班級(class[20])、3門課成績(score[3])和平均成績(ave)。利用該結(jié)構(gòu)體類型定義數(shù)組stud[4]。
?在主函數(shù)中輸入學(xué)生學(xué)號、姓名、班級、3門課的成績,并計算出平均成績,然后調(diào)用save()函數(shù)將學(xué)生數(shù)據(jù)保存在score.txt文件中,調(diào)用display()函數(shù)讀取score.txt文件,并將其中的內(nèi)容顯示在屏幕上。
?定義保存文件函數(shù)save()和顯示文件函數(shù)display()。
四、程序流程圖
五、程序代碼
#include
int insert();//錄入學(xué)生成績信息函數(shù) int query();//查詢學(xué)生成績信息函數(shù) int list();//列出學(xué)生成績信息函數(shù)定義 void save();//把數(shù)據(jù)寫入到文件 void display();//從文件讀入學(xué)生記錄
typedef struct {
char num[20];
char name[8];
char class[20];int score[3];int ave;}studs;
studs * stud =NULL;int current = 0;int total = 0;
int main(){
while(1)//顯示程序基本信息
{ char choice;//定義一個字符類型的變量用來接收用戶的菜單選擇
printf(“n”);printf(“*******************************************************************************n”);n“);n”);printf(“
0---退出系統(tǒng)
1---printf(”
printf(“
學(xué)生成績管理系統(tǒng)
錄入學(xué)生成績信息
n”);printf(“
2---查詢學(xué)生成績信息
3---列出所有學(xué)生成績信息
n”);printf(“
4---保存學(xué)生成績信息
5---加載學(xué)生成績信息
n”);printf(“*******************************************************************************n”);
printf(“n”);
printf(“請選擇:”);
choice=getch();
getchar();//過濾掉enter鍵
printf(“nn”);
switch(choice)
{
case'1':system(“cls”);
insert();/*此處調(diào)用添加錄入學(xué)生成績信息處理代碼的函數(shù)*/
break;
case'2':system(“cls”);
query();/*此處調(diào)用添加查詢學(xué)生成績信息處理代碼的函數(shù)*/
處理代碼的函數(shù)*/
息處理代碼的函數(shù)*/
信息處理代碼的函數(shù)*/
}
} return 0;
break;case'3':system(“cls”);
list();/*此處調(diào)用添加列出學(xué)生成績信息
break;case'4':system(“cls”);
save();/*此處調(diào)用添加保存學(xué)生成績信
break;
case'5':system(“cls”);
display();/*此處調(diào)用添加加載學(xué)生成績
break;
case'0':
if(stud!=NULL)
{
free(stud);
}
return 0;
default:
printf(“非法選擇,請重新選擇n”);
getch();//程序返回 }
/*各個函數(shù)的實現(xiàn)*/ int insert()//錄入學(xué)生成績信息函數(shù)定義 {
int i;int total=4;
if(stud==NULL)
stud=(studs *)malloc(total *sizeof(studs));
if(stud==NULL)
return 1;
if(current>=total)
{ printf(“對不起,由于人數(shù)已滿,不能再添加新學(xué)生成績信息n”);
return 1;
}
for(i=0;i { int a,b,c;printf(“請輸入學(xué)號:”); scanf(“%s”,&stud[current].num); printf(“請輸入姓名:”); scanf(“%s”,&stud[current].name); printf(“請輸入班級:”); scanf(“%s”,&stud[current].class);printf(“請輸入語文成績:”); scanf(“%d”,&stud[current].score[1]); printf(“請輸入數(shù)學(xué)成績:”); scanf(“%d”,&stud[current].score[2]); printf(“請輸入英語成績:”); scanf(“%d”,&stud[current].score[3]); a=stud[current].score[1];b=stud[current].score[2];c=stud[current].score[3];stud[current].ave=(a+b+c)/3;printf(“n”); current++; } } int query()//查詢學(xué)生成績信息函數(shù)定義 { char k;printf(“***********************************n”);printf(“* 0---放棄查詢 *n”);printf(“* 1---按學(xué)號查詢 *n”);printf(“* 2---按姓名查詢 *n”);printf(“***********************************n”);printf(“n”); printf(“請選擇:”); k=getch(); getchar();//過濾掉enter鍵 printf(“nn”); switch(k){ case '0': break;case '1': { char num[20]; int i; printf(“請輸入要查詢的學(xué)生學(xué)號:”);scanf(“%s”,&num); for(i=0;i<4;i++){ if(strcmp(stud[i].num,num)==0){ printf(“學(xué)生成績?nèi)缦耼”); printf(“學(xué)號:%sn”,stud[i].num); printf(“姓名:%sn”,stud[i].name); printf(“班級:%sn”,stud[i].class); printf(“語文成績:%dn”,stud[i].score[1]); printf(“數(shù)學(xué)成績:%dn”,stud[i].score[2]);printf(“英語成績:%dn”,stud[i].score[3]); printf(“平均成績:%dn”,stud[i].ave); return 0;} } printf(“此信息不存在!nn”); return 1; break;} case '2': { char name[8]; int i; printf(“請輸入要查詢的學(xué)生姓名:”);scanf(“%s”,&name); for(i=0;i<4;i++){ if(strcmp(stud[i].name,name)==0){ printf(“學(xué)生成績?nèi)缦耼”); printf(“學(xué)號:%sn”,stud[i].num); printf(“姓名:%sn”,stud[i].name); printf(“班級:%sn”,stud[i].class); printf(“語文成績:%dn”,stud[i].score[1]); printf(“數(shù)學(xué)成績:%dn”,stud[i].score[2]);printf(“英語成績:%dn”,stud[i].score[3]); printf(“平均成績:%dn”,stud[i].ave); return 0;} } printf(“此信息不存在!nn”); return 1; break;} default: printf(“非法選擇,請重新選擇n”);} int list()//列出學(xué)生成績信息函數(shù)定義 { } int i; printf(“學(xué)生成績列表n”);printf(“***********************************n”); for(i=0;i<4;i++) { printf(“學(xué)號:%sn”,stud[i].num); printf(“姓名:%sn”,stud[i].name); printf(“班級:%sn”,stud[i].class); printf(“語文成績:%dn”,stud[i].score[1]); printf(“數(shù)學(xué)成績:%dn”,stud[i].score[2]);printf(“英語成績:%dn”,stud[i].score[3]); printf(“平均成績:%dn”,stud[i].ave); printf(“***********************************n”); } return 0;} //把數(shù)據(jù)寫入到文件 void save(){ for(i=0;i } printf(“文件 score.txt 打開失敗”);exit(0);fprintf(fb,“%20s%8s%20s%4d%4d%4d%4dn”,stud[i].num,stud[i].name,stud[i].class,stud[i].score[1],stud[i].score[2],stud[i].score[3],stud[i].ave); } //從文件讀入學(xué)生記錄 void display(){ if(stud==NULL)int i;int total=4;FILE *fp; fclose(fb); printf(“文件成功保存到 score.txt 中!n”);getchar(); stud=(studs *)malloc(total *sizeof(studs)); fscanf(fp,“%20s%8s%20s%4d%4d%4d%4dn”,&stud[i].num,&stud[i].name,&stif((fp=fopen(“score.txt”,“r”))==NULL){ } for(i=0;i<4;i++){ printf(“文件 score.txt 打開失敗”);exit(0);ud[i].class,&stud[i].score[1],&stud[i].score[2],&stud[i].score[3],&stud[i].ave); printf(“學(xué)號:%sn”,stud[i].num); printf(“姓名:%sn”,stud[i].name); printf(“班級:%sn”,stud[i].class); printf(“語文成績:%dn”,stud[i].score[1]); printf(“數(shù)學(xué)成績:%dn”,stud[i].score[2]);printf(“英語成績:%dn”,stud[i].score[3]); printf(“平均成績:%dn”,stud[i].ave); printf(“***********************************n”); } } fclose(fp);getchar(); 六、實驗結(jié)果 七、實驗體會 (寫出完成此次綜合性實驗的心得體會,字數(shù)在200字以上。) 項目設(shè)計題目(學(xué)生成績管理系統(tǒng)) 學(xué)號: 姓名: 自評成績: 成績: 1.選題意義、依據(jù) 學(xué)生成績系統(tǒng)的設(shè)計從學(xué)生的應(yīng)用中而來,學(xué)生了解該系統(tǒng)的組成和運行過程,它貼近學(xué)生的生活能使學(xué)生更加方便的使用各個語句、函數(shù)、結(jié)構(gòu)體等。 依據(jù)學(xué)生期末成績表的格式。 2.系統(tǒng)功能設(shè)計與分析(功能模塊說明) 系統(tǒng)主要用于從一個文件夾讀入學(xué)生信息(101 張三 78 87 102 李斯 103 王紅 79 87 104 趙子龍 72 75 76 李洪磊 88 98 89),包括學(xué)生學(xué)號、姓名、成績(數(shù)學(xué)、英語、數(shù)據(jù)庫),程序中引用了八個函數(shù) void Cscore(int);void Rank(int ave);void Listnumber(int i); void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i);系統(tǒng)主要實現(xiàn)的功能有:查詢、修改、刪除、插入、成績單(以學(xué)號排名)和成績單(以名次排名)。 Cscore 函數(shù)主要是對學(xué)生進行排名。具有相同總分的學(xué)生具有相同的名次,例如:第三名和第四名具有相同的總分則在表中不會出現(xiàn)第四名,將出現(xiàn)兩個第三名緊接著出現(xiàn)第五名學(xué)生的情況。 Rank 函數(shù)主要用于按平均分對學(xué)生進行備注。把學(xué)生分為四個等級:>90分為excellent,80—90分為medium,60—80分為qualified,<60分為disqualified。Listnumber 函數(shù)主要用于把學(xué)生的信息(學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分平均分 名次 備注)以學(xué)號排名的順序用表的形式輸出,方便學(xué)生查看。Listnumber 函數(shù)中還調(diào)用了Cscore 和Rank 函數(shù)。 Listscore 函數(shù)是把學(xué)生的信息以總成績排名的形式輸出。 Lookup 函數(shù)主要運用學(xué)號或姓名形式查詢單個學(xué)生信息,如果存在則輸出該學(xué)生信息(學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分平均分 名次 備注),否則輸出“Input message is error.”。 Alter 函數(shù)是修改指定學(xué)號的學(xué)生信息。主要用于修改指定學(xué)號學(xué)生的各科成績并輸出修改后的學(xué)生信息(學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分平均分 名次 備注)。 Delete 函數(shù)用于刪除指定學(xué)生的信息??捎脙煞N方式刪除:以學(xué)號形式刪除學(xué)生信息,以姓名形式刪除學(xué)生信息。若要刪除了學(xué)生不存在則輸出“message error.”。 Insert 函數(shù)用來插入學(xué)生的信息,一次調(diào)用Insert 函數(shù)可以添加多個學(xué)生的信息。Insert 函數(shù)中還調(diào)用了Cscore 和Rank 函數(shù)。 3.涉及的主要知識點說明 (1)系統(tǒng)主要運用了函數(shù)的聲明、定義、調(diào)用(值調(diào)用和地址調(diào)用)。 (2)對文件的讀入操作。 (3)在平均分的求取上采用四舍五入的方式,運用了類型轉(zhuǎn)換。(4)多次運用if和for嵌套,在for嵌套中又運用了break語句。(5)運用了switch。 (6)對字符數(shù)組的比較中運用了strcmp,還運用toupper把小寫字母轉(zhuǎn)換成大寫。 (7)對學(xué)生信息進行的插入和有序刪除操作。(8)運用iomanip對輸出進行美觀。 4.創(chuàng)新性說明(怎么解決) 創(chuàng)新性:系統(tǒng)可以對具有相同總分學(xué)生的學(xué)生輸出相同的名次。若存在三個相同的分數(shù)都為第二名,則在輸出時出現(xiàn)三個第二名不會出現(xiàn)第三、四名,緊接著出現(xiàn)第五名。 解決方法:(1)用一個數(shù)組記錄具有相同分數(shù)的人數(shù),數(shù)組下標和學(xué)生信息所具有的下標相同;(2)刪除相同的總分只保留其中一個分數(shù);(3)對刪除相同總分的分數(shù)按從高到底進行排序;(4)對各個學(xué)生的總分進行排名。 5.源代碼 //****************************************************************** //Student achievement program //This program has eight functions of students grade,including list //score ranking,lookup,alter,delete,insert and rank.From the file read in //student achievement.Scores of people have the same same place.//****************************************************************** #include void Cscore(int);void Rank(int ave);void Listnumber(int i);void Listscore(int i);void Lookup(int);void Alter(int);void Dele(int &i);void Insert(int &i); using namespace std;const int MAX=100; struct student //定義學(xué)生信息結(jié)構(gòu)體 { int num;char name[8];int math;int english;int database;int sum;int average;int score;}stu[MAX]; int main() //主函數(shù) { int i,k;char ch;string filename;ifstream infile; cout<<“Please input the filenames: ”;cin>>filename;infile.open(filename.c_str());if(!infile){ cout<<“Can't open the input file.”< return 1;} for(i=0;i infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database; stu[i].sum=stu[i].math+stu[i].english+stu[i].database; stu[i].average=int(float(stu[i].sum)/3+0.5);} i=i-1;cout< 學(xué)生成績管理系統(tǒng) ”< cout<<“Y or N 進入菜單欄 ”< <<“ 菜單:”< <<“ 1)查 詢”< <<“ 2)修 改”< <<“ 3)刪 除”< <<“ 4)插 入”< <<“ 5)成績單(以學(xué)號排名)”< 6)成績單(以名次排名)”< cout<<“***請選擇 1--4 中任何一個:”< cin>>k; cout< switch(k){ case 1:Lookup(i);break; case 2:Alter(i);break; case 3:Dele(i);break; case 4:Insert(i);break; case 5:Listnumber(i);break; case 6:Listscore(i);break; default :cout<<“error input!”< cout< cin>>ch; ch=toupper(ch);} cout<<“Thank you for using!”< <<“Bye bye!”< void Cscore(int i) //對學(xué)生分數(shù)進行排名 { int h[MAX],b[MAX],score[MAX+1],n,k,j;int sum0[MAX],s;n=i;for(j=0;j sum0[j]=stu[j].sum;} for(j=0;j h[j]=0;for(k=0;k h[j]++; //具有同一分數(shù)的人數(shù) } } //end for } //end for for(j=0;j //刪除多個同一分數(shù)只保留其中一個分數(shù) { for(k=j+1;k if(sum0[j]==sum0[k]) { sum0[k]=sum0[i-1]; i--; k--; } } } //end for for(j=0;j //按從高到底的順序?qū)偡诌M行排名 { for(k=j+1;k if(sum0[j] { s=sum0[j]; sum0[j]=sum0[k]; sum0[k]=s; } //end if } //end for } //end for b[0]=0;score[0]=1;for(j=0;j //對學(xué)生成績進行排名 { for(k=0;k if(sum0[j]==stu[k].sum) { score[j+1]=score[j]+b[j]; stu[k].score=score[j+1]; b[j+1]=h[k]; } //end if } //end for } //end for } void Rank(int ave) //對學(xué)生等級輸出 { if(ave>=90) { cout<<“excellent”; } else if(ave>=80) { cout<<“medium”; } else if(ave>=60) { cout<<“qualified”; } else { cout<<“disqualified”; } cout< void Listnumber(int i){ int j;Cscore(i);cout<<“學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分 平均分 名次 備注 ”< cout< < cout< cout< cout< Rank(stu[j].average);} } void Listscore(int i){ int j,k;Cscore(i);cout<<“學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分 平均分 名次 備注 ”< for(k=0;k { if(stu[k].score==j) { cout< < cout< cout< cout< Rank(stu[k].average); } } } } void Lookup(int i) //運用學(xué)號或姓名形式查詢單個學(xué)生信息 { int j,k,n,numb;char name1[8]; cout<<“Please select you check score ways.”< //以學(xué)號形式查詢學(xué)生信息 { cout<<“Please input student number: ”; cin>>numb; for(j=0;j { if(numb==stu[j].num) { k=j; break; } } } else //以姓名形式查詢學(xué)生信息 { cout<<“Please input student name: ”; cin>>name1; for(j=0;j if(strcmp(stu[j].name,name1)==0) { k=j; break; } } if(k==MAX){ cout<<“Input message is error.”< //如果學(xué)生存在則輸出學(xué)生信息 { Cscore(i); cout<<“學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分 平均分 名次 備注 ”< cout< < cout< cout< cout< Rank(stu[j].average);} } void Alter(int i)//修改指定學(xué)號的學(xué)生信息 { int numb,j; cout<<“alter begin...”< cout<<“Please input number:”; cin>>numb;for(j=0;j if(numb==stu[j].num) { cout<<“find out:”< cout<<“學(xué)號:”< cout<<“Please input new result: 數(shù)學(xué) 英語 數(shù)據(jù)庫 ”< cin>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/3.0+0.5); Cscore(i); //輸出修改后該學(xué)號學(xué)生的信息 cout<<“學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分 平均分 名次 備注 ”< cout< < cout< cout< cout< Rank(stu[j].average); break; } } } void Dele(int &i) //刪除指定學(xué)生的信息 { int numb,j,k;char name0[8];cout<<“delete begin...”< cout<<“ [1]以學(xué)號形式刪除學(xué)生信息”< [0]以姓名形式刪除學(xué)生信息”< //以學(xué)號形式刪除學(xué)生的信息 { cout<<“Please input delete number:”; cin>>numb; for(j=0;j { if(numb==stu[j].num) break; } } else //以姓名形式刪除學(xué)生的信息 { cout<<“Please input delete name:”; cin>>name0; for(j=0;j { if(strcmp(name0,stu[j].name)==0) break; } } void Insert(int &i) //插入學(xué)生的信息 { int j,n;cout<<“insert begin...”< cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/3.0+0.5);} Cscore(i);cout<<“學(xué)號 姓名 數(shù)學(xué) 英語 數(shù)據(jù)庫 總分 平均分 名次 備注 ”< cout< < cout< cout< stu[j].num=stu[j+1].num; strcpy(stu[j].name,stu[j+1].name); stu[j].math=stu[j+1].math; stu[j].english=stu[j+1].english; stu[j].database=stu[j+1].database; stu[j].sum=stu[j+1].sum; stu[j].average=stu[j+1].average;} i=i-1;Cscore(i);} else cout<<“message error.”< cout< 運行結(jié)果: 分析: 系統(tǒng)基本上能實現(xiàn)對成績的查詢、、修改、刪除、插入、成績單(以學(xué)號排名)和成績單(以名次排名)等功能,并且可以插入多個學(xué)生的信息。但在插入學(xué)生后未不能成績單以學(xué)號排名的形式輸出。為了改進程序?qū)nsert 函數(shù)進行了一下修改。 Insert 函數(shù)代碼如下: void Insert(int &i) //插入學(xué)生的信息 { int j,k,n,m,first,last,mid;int num0,math0,english0,database0;char name0[8];cout<<“insert begin...”< if(stu[j].num { last=mid-1; } else if(stu[j].num>stu[mid].num) { first=mid+1; } else { break; } mid=(first+last)/2;} if(first>last){ num0=stu[j].num; strcpy(name0,stu[j].name); math0=stu[j].math; english0=stu[j].english; database0=stu[j].database; for(k=i-1;k>first;k--) //進行有序插入 { stu[k].num=stu[k-1].num; strcpy(stu[k].name,stu[k-1].name); stu[k].math=stu[k-1].math; } stu[k].english=stu[k-1].english; stu[k].database=stu[k-1].database; stu[k].sum=stu[k-1].sum; stu[k].average=stu[k-1].average; } stu[first].num=num0; strcpy(stu[first].name,name0); stu[first].math=math0; stu[first].english=english0; stu[first].database=database0; stu[first].sum=stu[first].math+stu[first].english+stu[first].database; stu[first].average=int(float(stu[first].sum)/3.0+0.5);} else { cout<<“message error.”< last=i-1; mid=(first+last)/2;} Cscore(i); 修改后程序經(jīng)運行后結(jié)果如下: 結(jié)果發(fā)現(xiàn)修改后的程序運用了二分查找法、多重嵌套等,能較好的實現(xiàn)對學(xué)生的信息以學(xué)號為序進行了多個數(shù)據(jù)的有序插入。 為方便編程采用C++實現(xiàn),同C類似,區(qū)別不大: (1)學(xué)號為負數(shù)時結(jié)束輸入: #include“stdafx.h” #define NULL 0 #include #include #include using namespace std; //聲明結(jié)構(gòu)體類型 typedef struct stnode { int id;//學(xué)號 char name[16];//姓名 intclass[4];//課程成績數(shù)組 float ave;//學(xué)生個人所有課程的平均成績struce stnode *next;//指針域 }Students; // 函數(shù)原型聲明 void PrintFailStudent(Student*head); void PrintSuccessStudent(Student*head);void DeleteLink(Student*head); Student*input_data(); void main() { Student*head=input_data(); Student*input_data();//調(diào)用input_data函數(shù),錄入學(xué)生信息 PrintFailStudent(head);//調(diào)用PrintFailStudent函數(shù),存在不及格的學(xué)生 void PrintSuccessStudent(Student*head);//打印平均分90分以上的學(xué)生 DeleteLink(head);//調(diào)用DeleteLink函數(shù),釋放內(nèi)存 } // { int id;// 定義一個整數(shù)變量,存放學(xué)號 string name;//學(xué)生姓名 int class;//課程號 int scores;//各科成績 int totl_score;//各科總成績 Student *head=NULL, *temp;// 定義兩個結(jié)構(gòu)體指針 cout<<”開始錄入學(xué)生成績:”; while(1){cout<<“請輸入學(xué)生學(xué)號:”;cin>>id;// 輸入學(xué)號 if(id<0){// 學(xué)號為負數(shù)時結(jié)束錄入break;錄入學(xué)生信息 Student*input_data() } temp=new Student;// 向內(nèi)存動態(tài)申請一個結(jié)構(gòu)體結(jié)點 cout<<“請輸入學(xué)生姓名:”; for(int a=0;a<=sizeof(a[0]);a++){temp->id=id;// 將輸入的學(xué)號存入結(jié)構(gòu)體結(jié)點的學(xué)號成員變量temp->name=name;// 存入學(xué)生姓名 cout<<“請輸入學(xué)生課程”+a+”的成績:”; cin>>scores;// 輸入學(xué)號 totl_score=totl_score+scores;//總成績 temp->class[a]=scores;// 課程1的成績錄入} ave=totl_score/sizeof(a[0]); } // 打印不及格學(xué)生信息 void PrintFailStudent(Student*head) { cout<<”存在不及格學(xué)生信息:”; cout<<“學(xué)號”< id< } } // 打印90平均分學(xué)生 void PrintSuccessStudent(Student*head){ } // 釋放鏈表中的所有到結(jié)點 void DeleteLink(Student*head){ } Student*p;while(head!=NULL)// 頭指針非空時循環(huán) {} p=head;// 記住當(dāng)前頭指針 head=head->next;//當(dāng)前頭指針移到下一個結(jié)點 delete p;// 刪除結(jié)點 for(Student*p=head;p!=NULL;p=p->next)cout<<”平均分為90分以上的學(xué)生學(xué)號:”+p->id;if(p->ave>=90){} 寧波大紅鷹學(xué)院 項目名稱:項目組長:項目成員:班級名稱:專業(yè)名稱:完成時間:信息工程學(xué)院 課 程 設(shè) 計 報 告 學(xué)生成績管理系統(tǒng) 黃輪 蔡萍萍、邵芬芬、雷驍 09計科1、09計科2 計算機科學(xué)與技術(shù) 2010.11.3 信息工程學(xué)院制 目 錄 1課程設(shè)計過程概述 ……………………………………………………………………….1 2課程設(shè)計題目描述和基本設(shè)計要求……………………………………………………...1 2.1課程設(shè)計題目描述……………………………………………………………………..1 2.2基本設(shè)計要求…………………………………………………………………………..1.3系統(tǒng)需求分析與設(shè)計………………………………………………………………………1 3.1系統(tǒng)需求分析…………………………………………………………………………..1 3.2其他需求分析…………………………………………………………………………..1 3.3系統(tǒng)設(shè)計………………………………………………………………………………..1 4各功能模塊設(shè)計……………………………………………………………………………1 4.1學(xué)生成績管理系統(tǒng)錄入學(xué)生成績模塊設(shè)計…………………………………………..1 4.2求各門課程的平均分模塊設(shè)計………………………………………………………..2.4.3求各門課程的最高分模塊設(shè)計………………………………………………………..3 4.4求各門課程的最低分模塊設(shè)計………………………………………………………..4 4.5查詢所有學(xué)生信息的模塊設(shè)計………………………………………………………..5 4.6查詢個別學(xué)生成績的模塊設(shè)計………………………………………………………..5 4.7退出系統(tǒng)的模塊設(shè)計……………………………………………………………….….6 5系統(tǒng)總代碼……………………………………………………………………………..…..7 6課程設(shè)計總結(jié)……………………………………………………………………………...10.6.1遇到的問題及解決辦法……………………………………………………………….10 6.2心得體會……………………………………………………………………………….10.學(xué)生成績管理系統(tǒng) 1課程設(shè)計過程概述 在2010年11月,我們進行了JAVA課程的第一個課程設(shè)計學(xué)生成績管理系統(tǒng),要求我們在課后完成,并且及時接受答辯。這次課程設(shè)計的主要目的是結(jié)合Java程序設(shè)計課程,培養(yǎng)我們的思維,提高用Java編程的實際動手能力并增強大家對JavaZ這門課程的了解。這次課程設(shè)計的主要內(nèi)容是獨立用Java語言開發(fā)一個小的應(yīng)用程序,學(xué)生成績管理系統(tǒng),從而深刻體會Java的應(yīng)用性及其作用。 2課程設(shè)計題目描述和基本設(shè)計要求 2.1課程設(shè)計題目描述 我們設(shè)計的是學(xué)生成績管理系統(tǒng)。主要用到的是做一個學(xué)生成績管理的界面,可以在很短的時間內(nèi)存儲學(xué)生信息,并且及時查到某個學(xué)生的相關(guān)信息。2.2基本設(shè)計要求 (1)系統(tǒng)安全、靈活、可靠; (2)功能齊全; (3)操作方便、簡單,界面友好; 3系統(tǒng)需求分析與設(shè)計 3.1系統(tǒng)需求分析 功能目標: ? 輸入班級n個同學(xué)的學(xué)號,姓名,四科成績(應(yīng)用數(shù)學(xué)、大學(xué)英語、Java程序設(shè)計、計算機應(yīng)用基礎(chǔ)) ? 計算出每個學(xué)生四門課的平均成績,并輸出。 ? 輸出全組各科平均分,最高分和最低分。? 輸入姓名查詢成績 3.2其他需求分析 技能要求: ? 通過定義學(xué)生類,建立學(xué)生對象,學(xué)會運用面向?qū)ο笏枷脒M行程序設(shè)計。 ? 通過對學(xué)生信息的輸入/輸出,初步掌握Java基本輸入/輸出方法。? 通過菜單處理,掌握字符界面的菜單處理能力。? 了解復(fù)雜問題的分析、設(shè)計、規(guī)劃的一般流程。 3.3系統(tǒng)設(shè)計 要求學(xué)生成績管理系統(tǒng)用字符界面實現(xiàn)、也可用圖形界面實現(xiàn),并能實現(xiàn)客戶端的查閱。 4各功能模塊設(shè)計 4.1學(xué)生成績管理系統(tǒng)錄入學(xué)生成績模塊設(shè)計 錄入學(xué)生的成績,可以方便用戶管理更多的信息 主要的功能代碼: case 1: for(i=0;i System.out.print(“請輸入該生的學(xué)號:”);s[i].num=in.skip(“n”).nextLine();System.out.print(“請輸入該生的姓名:”);s[i].name=in.nextLine();System.out.print(“請輸入該生的應(yīng)用數(shù)學(xué)成績:”);s[i].Math_1=in.nextDouble();System.out.print(“請輸入該生的英語成績:”);s[i].English=in.nextDouble();System.out.print(“請輸入該生的java成績:”);s[i].Java_1=in.nextDouble();System.out.print(“請輸入該生的計算機成績:”);s[i].Computer=in.nextDouble(); } break;圖1 4.2求各門課程的平均分模塊設(shè)計 在這一界面我們要通過已有的數(shù)據(jù),得出各門學(xué)科的平均分 主要的功能代碼: case 2: double Math_1sum=0,Englishsum=0,Java_1sum=0,Computersum=0;double Math_1pj=0,Englishpj=0,Java_1pj=0,Computerpj=0;for(i=0;i Englishsum=Englishsum+s[i].English;Java_1sum=Java_1sum+s[i].Java_1;Computersum=Computersum+s[i].Computer;} Math_1pj=Math_1sum/i;Englishpj=Englishsum/i;Java_1pj=Java_1sum/i;Computerpj=Computersum/i;System.out.println(i+“位同學(xué)應(yīng)用數(shù)學(xué)的平均分為:”+Math_1pj);System.out.println(i+“位同學(xué)英語的平均分為:”+Englishpj);System.out.println(i+“位同學(xué)Java的平均分為:”+Java_1pj);System.out.println(i+“位同學(xué)計算機的平均分為:”+Computerpj);break; 圖2 4.3求各門課程的最高分模塊設(shè)計 在聊天界面中,用戶可以得出各門課程的最高分 主要的界面代碼為: case 3: double Math_1max=0,Englishmax=0,Java_1max=0,Computermax=0;for(i=0;i if(s[i].Math_1>Math_1max) Math_1max=s[i].Math_1;if(s[i].English>Englishmax) Englishmax=s[i].English;if(s[i].Java_1>Java_1max) Java_1max=s[i].Java_1;if(s[i].Computer>Computermax)Computermax=s[i].Computer; } System.out.println(“應(yīng)用數(shù)學(xué)最高分:”+Math_1max);System.out.println(“英語最高分:”+Englishmax);System.out.println(“Java最高分:”+Java_1max);System.out.println(“計算機最高分:”+Computermax);break;圖3 4.4求各門課程的最低分模塊設(shè)計 主要是能得出各門課程的最低分 主要的界面代碼為: case 4: double Math_1min=120,Englishmin=120,Java_1min=120,Computermin=120;for(i=0;i Math_1min=s[i].Math_1;if(s[i].English Englishmin=s[i].English; if(s[i].Java_1 Java_1min=s[i].Java_1;if(s[i].Computer } System.out.println(“應(yīng)用數(shù)學(xué)最低分:”+Math_1min);System.out.println(“英語最低分:”+Englishmin);System.out.println(“Java最低分:”+Java_1min);System.out.println(“計算機最低分:”+Computermin);break; 圖4 4.5查詢所有學(xué)生信息的模塊設(shè)計 主要是為了快速的查出所有學(xué)生的信息 主要的界面代碼為: case 5: for(i=0;i System.out.print(“姓名:”+s[i].name);System.out.print(“應(yīng)用數(shù)學(xué):”+s[i].Math_1);System.out.print(“英語:”+s[i].English);System.out.print(“Java:”+s[i].Java_1);System.out.println(“計算機:”+s[i].Computer);} break;圖5 4.6查詢個別學(xué)生成績的模塊設(shè)計 主要是為了快速的查出個別學(xué)生的信息 主要的界面代碼為: case 6: System.out.print(“請輸入要查找的姓名:”);int j=0;String name=in.skip(“n”).nextLine();for(i=0;i System.out.println(“學(xué)號:”+s[i].num); System.out.println(“姓名:”+s[i].name); System.out.println(“應(yīng)用數(shù)學(xué):”+s[i].Math_1); System.out.println(“英語:”+s[i].English); System.out.println(“Java:”+s[i].Java_1); System.out.println(“計算機:”+s[i].Computer); j=s.length;} } if(j==0) System.out.println(“沒有你要查找的人,請確認后再查找!”); 圖6 break; 查無此人的情況下: 4.7退出系統(tǒng)的模塊設(shè)計 當(dāng)查詢結(jié)束的時候可以順利的退出。 主要的界面代碼為: case 7: System.out.println(“byebye!”); System.exit(0);default: System.out.println(“您輸入的數(shù)字有誤,應(yīng)為1~7”);圖7 5系統(tǒng)總代碼 import java.util.*;class Student{ String num; String name;double Math_1,English,Java_1,Computer; } public class StudentMassage{ public static void main(String[] args){ Student[]s=new Student[3];int i;for(i=0;i } while(true){ System.out.println(“**********學(xué)生成績管理系統(tǒng)**********”);System.out.println(“1.錄入學(xué)生成績”);System.out.println(“2.求各門課程的平均分”); System.out.println(“3.求各門課程的最高分”);System.out.println(“4.求各門課程的最低分”);System.out.println(“5.查詢所有學(xué)生信息”);System.out.println(“6.查詢個別學(xué)生成績”);System.out.println(“7.退出系統(tǒng)”);System.out.print(“請選擇:”);Scanner in=new Scanner(System.in);int x=in.nextInt(); switch(x){ case 1: for(i=0;i System.out.println(“請輸入第”+(i+1)+“個學(xué)生的成績信息”); System.out.print(“請輸入該生的學(xué)號:”); s[i].num=in.skip(“n”).nextLine();System.out.print(“請輸入該生的姓名:”);s[i].name=in.nextLine();System.out.print(“請輸入該生的應(yīng)用數(shù)學(xué)成績:”);s[i].Math_1=in.nextDouble();System.out.print(“請輸入該生的英語成績:”);s[i].English=in.nextDouble();System.out.print(“請輸入該生的java成績:”);s[i].Java_1=in.nextDouble();System.out.print(“請輸入該生的計算機成績:”);s[i].Computer=in.nextDouble();} break;case 2: double Math_1sum=0,Englishsum=0,Java_1sum=0,Computersum=0;double Math_1pj=0,Englishpj=0,Java_1pj=0,Computerpj=0; for(i=0;i Math_1sum=Math_1sum+s[i].Math_1;Englishsum=Englishsum+s[i].English;Java_1sum=Java_1sum+s[i].Java_1;Computersum=Computersum+s[i].Computer;} Math_1pj=Math_1sum/i;Englishpj=Englishsum/i;Java_1pj=Java_1sum/i;Computerpj=Computersum/i;System.out.println(i+“位同學(xué)應(yīng)用數(shù)學(xué)的平均分為:”+Math_1pj);System.out.println(i+“位同學(xué)英語的平均分為:”+Englishpj);System.out.println(i+“位同學(xué)Java的平均分為:”+Java_1pj);System.out.println(i+“位同學(xué)計算機的平均分為:”+Computerpj);break;case 3: double Math_1max=0,Englishmax=0,Java_1max=0,Computermax=0;for(i=0;i Math_1max=s[i].Math_1;if(s[i].English>Englishmax) Englishmax=s[i].English;if(s[i].Java_1>Java_1max) Java_1max=s[i].Java_1;if(s[i].Computer>Computermax)Computermax=s[i].Computer; } System.out.println(“應(yīng)用數(shù)學(xué)最高分:”+Math_1max);System.out.println(“英語最高分:”+Englishmax);System.out.println(“Java最高分:”+Java_1max);System.out.println(“計算機最高分:”+Computermax);break;case 4: double Math_1min=120,Englishmin=120,Java_1min=120,Computermin=120; for(i=0;i Math_1min=s[i].Math_1; if(s[i].English Englishmin=s[i].English;if(s[i].Java_1 Java_1min=s[i].Java_1;if(s[i].Computer } System.out.println(“應(yīng)用數(shù)學(xué)最低分:”+Math_1min);System.out.println(“英語最低分:”+Englishmin);System.out.println(“Java最低分:”+Java_1min);System.out.println(“計算機最低分:”+Computermin); } } } } break;case 5: for(i=0;i System.out.print(“學(xué)號:”+s[i].num); System.out.print(“姓名:”+s[i].name); System.out.print(“應(yīng)用數(shù)學(xué):”+s[i].Math_1); System.out.print(“英語:”+s[i].English); System.out.print(“Java:”+s[i].Java_1); System.out.println(“計算機:”+s[i].Computer);} break;case 6: System.out.print(“請輸入要查找的姓名:”);int j=0;String name=in.skip(“n”).nextLine();for(i=0;i if(s[i].name.equals(name)){ System.out.println(“學(xué)號:”+s[i].num); System.out.println(“姓名:”+s[i].name); System.out.println(“應(yīng)用數(shù)學(xué):”+s[i].Math_1); System.out.println(“英語:”+s[i].English); System.out.println(“Java:”+s[i].Java_1); System.out.println(“計算機:”+s[i].Computer); j=s.length;} } if(j==0)System.out.println(“沒有你要查找的人,請確認后再查找!”);break;case 7: System.out.println(“byebye!”); System.exit(0);default: System.out.println(“您輸入的數(shù)字有誤,應(yīng)為1~7”);6課程設(shè)計總結(jié) 6.1遇到的問題及解決辦法 在此次課程設(shè)計中,我遇到了一些問題,如:不能很好的將C語言的代碼轉(zhuǎn)化成Java語言,對于Java語言,只學(xué)習(xí)到了一些最基本的知識,這導(dǎo)致編寫程序時經(jīng)常出現(xiàn)一些語法錯誤,而且要在短時間內(nèi)用Java語言來設(shè)計一個具體的系統(tǒng)是一個較大的挑戰(zhàn);自己感覺難以動手,這表明所學(xué)的知識不能靈活運用到實際中。 對于以上的問題,自己有清楚的認識,首先必須要對計算機產(chǎn)生興趣,多閱讀相關(guān)的書籍,多跟精通此方面的老師和同學(xué)交流、像他們學(xué)習(xí)。還有就是應(yīng)該多動手編程。6.2心得體會 由于對java這門課還未深入了解,這是第一次小組合作設(shè)計程序,剛開始我們對它真的是很無措的,不知道該從哪里入手;經(jīng)過指導(dǎo)老師的部分講解和演示,我們茅塞頓開,著手開始編寫代碼,可是寫著寫著就出現(xiàn)問題了,程序?qū)崿F(xiàn)不了,也改不出錯誤;后來無意中一位組員將字體改變了一下,程序錯誤變少了。檢查一發(fā)現(xiàn)我們程序中字體錯竟占絕大部分。再想想,這是因為我們寫的過程中不夠仔細,對細節(jié)問題還不夠注重,以致最后的程序出現(xiàn)大批量的錯誤。不過在我們的后續(xù)檢查中,這一問題已經(jīng)完全解決了。當(dāng)然,寫的過程中遇到的問題肯定不止這樣的,但最后在指導(dǎo)師與我們齊心協(xié)力的修改后,這些難題將不是問題了。程序完成后,我們真的很開心,雖然困難重重,但我們最終還是有了一個很好的結(jié)束啊。 這個實驗讓我們對java有更進一步的了解,也讓我們對它產(chǎn)生了極大地興趣,希望我們以后兩次的實驗也能順利完成。 //*學(xué)生成績管理系統(tǒng)*// #include #define N 3 struct student { int no; char name[20]; float english; float computer; float math; float average; }; void getclass(struct student *class_gishui) { int i; printf(“請輸入%d個學(xué)生的學(xué)號 姓名 英語 計算機 數(shù)學(xué)n”,N); for(i=0;i { printf(“第%d個學(xué)生”,i+1); scanf(“%d%s%f%f%f”,&class_gishui[i].no,&class_gishui[i].name,&class_gishui[i].english,&class_gishui[i].computer,&class_gishui[i].math); } } void print_class(struct student *class_gishui) { int i; for(i=0;i { class_gishui[i].average=(class_gishui[i].english+class_gishui[i].computer+class_gishui[i].math)/3; } printf(“學(xué)生信息表如下:n”); printf(“學(xué)號tt姓名tt英語tt計算機tt數(shù)學(xué)tt平均成績n”); for(i=0;i printf(“%dtt%stt%ft%ft%ft%fn”,class_gishui[i].no,class_gishui[i].name,class_gishui[i].english,class_gishui[i].computer,class_gishui[i].math,class_gishui[i].average); } void paixu(struct student *class_gishui) { int i,j,flag; struct student t[1]; for(i=0;(i { flag=0; for(j=0;j if(class_gishui[j].average>class_gishui[j+1].average) { t[0]=class_gishui[j]; class_gishui[j]=class_gishui[j+1]; class_gishui[j+1]=t[0]; flag=1; } if(flag==0) break; } printf(“排序后學(xué)生成績?yōu)椋簄”); printf(“學(xué)號t姓名t英語tt計算機tt數(shù)學(xué)tt平均成績n”); for(i=0;i printf(“%dt%st%ft%ft%ft%fn”,class_gishui[i].no,class_gishui[i].name,class_gishui[i].english,class_gishui[i].computer,class_gishui[i].math,class_gishui[i].average); } void main() { struct student class_gishui[N]; getclass(class_gishui); print_class(class_gishui); paixu(class_gishui); }第二篇:學(xué)生成績管理系統(tǒng)C++程序設(shè)計
第三篇:學(xué)生成績管理
第四篇:學(xué)生成績管理報告
第五篇:學(xué)生成績管理系統(tǒng)