2005-06-19

【C】大型程式 - No.54

這寫了一個禮拜才寫出來的程式,目前還有個小Bug..就是『(5) 可列出不及格(fail)學生姓名(由平均分數)』這部分要嘛就及格跟不及格一起印出,要嘛就只能印出及格...真的盡力了。

/*54.編寫一個學生成績登錄之應用程式,每一學生的資料內容如同第 50 題所示,並可將學生資料內容儲存於檔案內。該程式具有下列處理資料的功能:(利用 case)
(1) 顯示所有學生資料內容
(2) 可查詢每一學生的資料
(3) 可增加登錄及修改學生資料
(4) 可計算學生成績 (總分及平均)
(5) 可列出不及格(fail)學生姓名(由平均分數)
(6) 可由大到小排列(permutation)學生成績
編寫時,可由一個功能測試成功,再寫下一個功能,能寫愈多功能表示功力愈強。*/
/*宣告副程式 ↓*/
void display();
void print();
void look_up();
void add_correct();
void sum_average();
void fail();
void btos();
void single();


/*宣告陣列 ↓*/
struct score{
int no; /*由於要跟輸入的值做比較so把宣告改為整數or
參考課本c-10 char *strcmp(...)的Function*/
char name[10];
int English;
int Math;
int Program;
int sum;
int Average;
};
struct score s[7]={
{49311113,"郭佳綺",90,98,99},
{49311115,"李秋豔",89,88,100},
{49311130,"方美瑾",78,84,98},
{49311135,"劉軒妤",92,85,86},
{49311143,"佘宛容",89,89,97},
{49311147,"林三富",50,40,60},
{49311154,"林孟淑",87,86,73}
};


/*程式主體 ↓*/
int main(){
int select;
display();
scanf("%d",&select);
while(select!=8){
switch(select){
case 1:
print();
break;
case 2:
look_up();
break;
case 3:
add_correct();
break;
case 4:
sum_average();
break;
case 5:
fail();
break;
case 6:
btos();
break;
case 7:
single();
break;
default:
printf("請重新輸入!");
break;
}
display();
scanf("%d",&select);
}
printf("謝謝使用,銘記凍仁牌c語言..\n");
system("pause");
return 0;
}


/*選單*/
void display(){
printf("\n");
printf("請選擇下列工作: \n");
printf("\t (1) 顯示所有學生資料內容 \n");
printf("\t (2) 查詢每一學生的資料 \n");
printf("\t (3) 修改學生資料 \n");
printf("\t (4) 計算學生成績(總分及平均)\n");
printf("\t (5) 列出不及格學生姓名 \n");
printf("\t (6) 由大到小排列學生成績 \n");
printf("\t (7) 單科總分及平均\n");
printf("\t (8) 離開 \n");
printf("請選擇您想執行的工作 => ");
}


/*(1) 顯示所有學生資料內容 ↓ - No.50 */
void print(){
int i;
printf(" ============================================================\n");
printf(" 學號\t 姓名\t英文\t數學\t程式\n");
printf(" ============================================================\n");
for(i=0;i<7;i++){
s[i].sum = s[i].English + s[i].Math + s[i].Program
;/*總分=英文+數學+程式*/
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*(平均=英文+數學+程式)/3*/
printf(" %d %s\t %d\t %d\t %d\n",s[i].no,s[i].name,s[i].English,s[i].Math,s[i].Program);
}
printf(" ============================================================\n");
}


/*(2) 查詢每一學生的資料 ↓- No.52 */
void look_up(){
int i,key;
printf(" ============================================================\n");
for(i=0;i<7;i++){
s[i].sum = s[i].English + s[i].Math + s[i].Program;/*總分*/
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*平均*/
}
printf("請輸入學號: ");
scanf("%d",&key);
printf(" ============================================================\n");
/*fflush(stdin);*/
for(i=0;i<7;i++){
if(key==s[i].no){
printf("%d %s 英文%d 數學 %d 程式 %d 總分 %d 平均 %d\n",s[i].no,s[i].name,s[i].English,s[i].Math,s[i].Program,s[i].sum,s[i].Average);
break;
}
}
if(key!=s[i].no){
printf("%d 尚未登入資料!\n",key);
}
printf(" ============================================================\n");
}


/*(3) 修改學生資料 ↓*/
void add_correct(){
int math,english,program,key,i;
printf(" ============================================================\n");
printf("請輸入學號: ");
scanf("%d",&key);
printf(" ============================================================\n");
for(i=0;i<7;i++){
if(key==s[i].no){
printf("%s 同學\n",s[i].name);
printf("英文 %d\t修改為\t",s[i].English);
scanf("%d",&english);
s[i].English = english;

printf("數學 %d\t修改為\t",s[i].Math);
scanf("%d",&math);
s[i].Math = math;

printf("程式 %d\t修改為\t",s[i].Program);
scanf("%d",&program);
s[i].Program = program;

s[i].sum = s[i].English + s[i].Math + s[i].Program;/*總分*/
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*平均*/
printf("%d %s 英文 %d 數學 %d 程式 %d 總分 %d 平均 %d",s[i].no,s[i].name,s[i].English,s[i].Math,s[i].Program,s[i].sum,s[i].Average);
break;
}
}
if(key!=s[i].no){
printf(" %d 尚未登入資料!\n",key);
}
printf(" \n============================================================\n");
}


/*(4) 計算學生成績(總分及平均) ↓- No.50 */
void sum_average(){
int i;
printf(" ============================================================\n");
printf(" 學號\t 姓名\t英文\t數學\t程式\t總分\t平均\n");
printf(" ============================================================\n");
for(i=0;i<7;i++){
s[i].sum = s[i].English + s[i].Math + s[i].Program;/*總分*/
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*平均*/
printf(" %d %s\t %d\t %d\t %d\t %d\t %d\n",s[i].no,s[i].name,s[i].English,s[i].Math,s[i].Program,s[i].sum,s[i].Average);
}
printf(" ============================================================\n");
}


/*(5)列出不及格的學生(由平均分數) ↓*/
void fail(){
int i,flag=0,key;
printf(" ============================================================\n");
for(i=0;i<7;i++){
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*平均*/
if(s[i].Average < 60){
printf(" %d %s 學期成績 %d 不及格\n",s[i].no,s[i].name,s[i].Average);
printf("\n");
}
}
if(s[i].Average >= 60){
printf(" 全班學期成績及格!\n");
}/*及格的效果做不出來!!*/
printf(" ============================================================\n");
}


/*(6) 由大到小排列學生成績 ↓- No.51 */
void btos(){
int i,j;
struct score temp;
for(i=0;i<7;i++){
for(j=i+1;j<7;j++){
if(s[i].Average < s[j].Average){
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
printf(" ============================================================\n");
printf(" 學號\t 姓名\t英文\t數學\t程式\t總分\t平均\n");
printf(" ============================================================\n");
for(i=0;i<7;i++){
s[i].sum = s[i].English + s[i].Math + s[i].Program;/*總分*/
s[i].Average = (s[i].English + s[i].Math + s[i].Program)/3;/*平均*/
printf(" %d %s\t %d\t %d\t %d\t %d\t %d\n",s[i].no,s[i].name,s[i].English,s[i].Math,s[i].Program,s[i].sum,s[i].Average);
}
printf(" ============================================================\n");
}


/*(7) 單科總分及平均 ↓*/
void single(){
int i,sum_English=0,sum_Math=0,sum_Program=0;
printf(" ============================================================\n");
for(i=0;i<7;i++){
sum_English += s[i].English;/*英文分數相加*/
sum_Math += s[i].Math;/*數學分數相加*/
sum_Program += s[i].Program;/*程式分數相加*/
}
printf("英文總分 = %d\t數學總分 = %d\t程式總分 = %d\n",sum_English,sum_Math,sum_Program);
printf("英文平均 = %d\t數學平均 = %d\t程式平均 = %d\n",sum_English/3,sum_Math/3,sum_Program/3);
printf(" ============================================================\n");
}