2016-12-06 11 views
-1

私はここで、生徒の人数(n)のトップスコアとその生徒のための情報を表示することに問題があります。 ご迷惑をおかけして申し訳ありませんが、コードは長すぎます。申し訳ありませんが、私は助けていただければ幸いです。 ありがとうございます!最高合計得点を表示している学生情報を表示

#include<stdio.h> 
#include<conio.h> 
#include<stdlib.h> 
#include<string.h> 
//Function Prototype 
void add(struct student s[]); 
void deleting(struct student s[]); 
void update(struct student s[]); 
void view(struct student s[]); 
void calculateAvg(struct student s[]); 
void max(struct student s[]); 
/*void min(struct student s[]); 
void find(struct student s[]); 
void sort(struct student s[]);*/ 
//Size 
int size = 0; 
//Structure 
struct student{ 
int id; 
char name[25]; 
char sex; // M(Male) || F(Female) 
int q1,q2,mid,final,total; 

}s[20]; 

int main() 
{ 

int choice; 

system("CLS"); 

printf("\n=========================="); 
printf("\n   MENU"); 
printf("\n=========================="); 

printf("\n1. Add student records"); 
printf("\n2. Delete student records"); 
printf("\n3. Update student records"); 
printf("\n4. View all student records"); 
printf("\n5. Calculate an average of a selected student’s scores"); 
printf("\n6. Show student who gets the max total score"); 
printf("\n7. Show student who gets the min total score"); 
printf("\n8. Find student by ID"); 
printf("\n9. Sort records by total scores"); 
printf("\n10. EXIT!"); 

printf("\n\n Please enter your choice: "); 
scanf("%d",&choice); 

switch(choice) 
{ 
    case 1: add(s);break; 
    case 2: deleting(s);break; 
    case 3: update(s);break; 
    case 4: view(s);break; 
    case 5: calculateAvg(s);break; 
    case 6: max(s);break; 
    /*case 7: min(s);break; 
    case 8: find(s);break; 
    case 9: sort(s);break; 
    case 10: exit(1);break;*/ 
} 

getch(); 

} 

void add(struct student s[]) 
{ 
char choice; 
int j; 

system("CLS"); 

printf("\nPlease enter student no.%d information below:\n",size+1); 
printf("ID : "); 
scanf("%d",&s[size].id); 
printf("Name : "); 
scanf("%s",&s[size].name); 
printf("Sex [M=Male||F=Female] : "); 
scanf(" %c",&s[size].sex); 
printf("Quiz1: "); 
scanf("%d",&s[size].q1); 
printf("Quiz2: "); 
scanf("%d",&s[size].q2); 
printf("Mid-term: "); 
scanf("%d",&s[size].mid); 
printf("Final: "); 
scanf("%d",&s[size].final); 

++size; 

printf("ADD PROCESS COMPLETE!"); 
printf(" SIZE=%d",size); 
printf("\nPRESS (R) TO RETURN, PRESS (A) TO ADD: "); 
scanf(" %c",&choice); 

if (choice == 'R' || choice == 'r') 
main(); 
else if (choice == 'a' || choice == 'A') 
add(s); 

getch(); 

} 


void deleting(struct student s[]) 
{ 
int num,i,j,flag=0; 
char choice; 

system("CLS"); 

printf("Please enter student ID to delete: "); 
scanf("%d",&num); 

for (i=0; i<size; ++i) 
{ 
    if (s[i].id == num) 
    { 
     for (j=i; j<size; ++j) 
     { 
      s[j] = s[j+1]; 

     } 
     --size; 
     flag=1; 
     break; 
    } 
} 



if (flag==1) 
printf("DELETE PROCESS IS DONE!"); 
else if (flag==0) 
printf("ERROR!!"); 

printf("\nPRESS (R) TO RETURN, PRESS (D) TO DELETE: "); 
scanf(" %c",&choice); 

if (choice == 'R' || choice == 'r') 
main(); 
else if (choice == 'D' || choice == 'd') 
deleting(s); 



getch(); 
} 


void update(struct student s[]) 
{ 
int i,num,flag=0; 
char choice; 

system("CLS"); 

printf("Please enter student ID to update: "); 
scanf("%d",&num); 

for (i=0; i<size; ++i) 
{ 
    if (s[i].id == num) 
    { 
     flag=1; 
     printf("\nStudent no.%d information:\n",i+1); 
     printf("ID:%d |",s[i].id); 
     printf("Name:%s |",s[i].name); 
     printf("Sex:%c |",s[i].sex); 
     printf("Quiz1:%d |Quiz2:%d |Mid-term:%d |Final:%d |",s[i].q1,s[i].q2,s[i].mid,s[i].final); 

     printf("\n\nPlease enter new inforamtion to update: \n\n"); 

      printf("ID : "); 
      scanf("%d",&s[i].id); 
      printf("Name : "); 
      scanf("%s",&s[i].name); 
      printf("Sex [M=Male||F=Female] : "); 
      scanf(" %c",&s[i].sex); 
      printf("Quiz1: "); 
      scanf("%d",&s[i].q1); 
      printf("Quiz2: "); 
      scanf("%d",&s[i].q2); 
      printf("Mid-term: "); 
      scanf("%d",&s[i].mid); 
      printf("Final: "); 
      scanf("%d",&s[i].final); 

      break; 

    } 

} 


if (flag==1) 
    printf("UPDATE PROCESS IS DONE!"); 
else if (flag==0) 
    printf("ERROR!!"); 

printf("\nPRESS (R) TO RETURN, PRESS (U) TO UPDATE: "); 
scanf(" %c",&choice); 

if (choice == 'R' || choice == 'r') 
main(); 
else if (choice == 'U' || choice == 'u') 
update(s); 

getch(); 
} 


void view(struct student s[]) 
{ 
char choice; 
//system("CLS"); may be added if wanted. 
for (int j=0; j<size; ++j) 
{ 
    printf("\nStudent no.%d information:\n",j+1); 
    printf("ID:%d |",s[j].id); 
    printf("Name:%s |",s[j].name); 
    printf("Sex:%c |",s[j].sex); 
    printf("Quiz1:%d |Quiz2:%d |Mid-term:%d |Final:%d |",s[j].q1,s[j].q2,s[j].mid,s[j].final); 

} 

printf("\n\nSIZE=%d",size); 

printf("\nPRESS (R) TO RETURN :"); 
scanf(" %c",&choice); 

if (choice == 'R' || choice == 'r') 
main();  

getch(); 

} 


void calculateAvg(struct student s[]) 
{ 
int i,total,flag=0,num; 
char choice; 

    system("CLS"); 

printf("Please enter student ID to calculate average of marks: "); 
scanf("%d",&num); 

for (i=0; i<size; ++i) 
{ 
    if (s[i].id == num) 
    { 
     s[i].total = s[i].q1 + s[i].q2 + s[i].mid + s[i].final; 

     printf("\n\n   Student no.%d information:\n",i+1); 
     printf("ID:%d |",s[i].id); 
     printf("Name:%s |",s[i].name); 
     printf("Sex:%c |",s[i].sex); 
     printf("Quiz1:%d |Quiz2:%d |Mid-term:%d |Final:%d |",s[i].q1,s[i].q2,s[i].mid,s[i].final); 

     printf("\n\n  TOTAL = %d",s[i].total); 
     printf("\n  AVERAGE = %d",s[i].total/4); 

     flag=1; 
    } 
    break; 
} 

if (flag==1) 
    printf("\n\nAVERAGE CALCULATED!"); 
else if (flag==0) 
    printf("ERROR!!"); 

printf("\nPRESS (R) TO RETURN :"); 
scanf(" %c",&choice); 

if (choice == 'R' || choice == 'r') 
main(); 


getch(); 

} 


void max(struct student s[]) 
{ 
int i,max; 
s[i].total = s[i].q1 + s[i].q2 +s[i].mid + s[i].final 
max = s[0].total; 

for (i=0; i<size; ++i) 
{ 
    if (s[i].total > max) 
    { 
      max = s[i].total; 
    } 
} 

printf("\nHighest total score is %d belongs to student ID (%d)",max,)//\\problem 
} 
+0

* **デバッガー***を使用してください。そして今、 'max()'は、2行目にセミコロンがなく、最後の 'printf'呼び出しの引数リストを完成させないなど、構文エラーが原因でコンパイルされません。 (a)しない、(b)(a)を無視するときに、少なくともコンパイルすることを確認してください。 – WhozCraig

+0

あなたがmax()を削除するとコンパイルされ、問題はmax()だけですので、プログラムをトリミングしたくないので意味があります。 – Seraj

答えて

0

だから私はこの行で何をしようとしているのか分かりません:s[i].total = s[i].q1 + s[i].q2 + s[i].mid + s[i].final。しかし、私は少しあなたの方法を変更しました。

void max(struct student s[]) 
{ 
    int i, max, id; 
    s[0].total = s[0].q1 + s[0].q2 + s[0].mid + s[0].final 
    max = s[0].total; 
    id = s[0].id; 

    for (i = 1; i < size; i++) 
    { 
     s[i].total = s[i].q1 + s[i].q2 + s[i].mid + s[i].final 
     if (s[i].total > max) 
     { 
       max = s[i].total; 
       id = s[i].id; 
     } 
    } 

    printf("\nHighest total score is %d belongs to student ID (%d)", max, id)//\\problem 
} 

この解決策では、あなたの学生IDに基づいて割り当てられたIDを追加しました。 idが更新された新しいmaxが見つかったとき。 Maxは、最初の学生の合計で初期化されます。このようなことを試すことができますか?

+0

合計はマークの合計として定義されていませんそれを行う方法を理解していない – Seraj

+0

私は少しループを修正しました。私はq1、q2、q3と最終を合計するためにラインを追加しました。これはその学生の総合スコアですか?もしそうなら、それはあなたのためのトリックを行う必要があります。または何か非常に似ています。 – Jared

+0

これは本当にありがとうございました!、私はちょうど概念を持っている:) – Seraj

関連する問題