Code:
#include <stdio.h>
#include <string.h>
#define MAX 10
#define MAXN 15
int i;
void inputs (FILE *inFile, int *gradenum[MAX], char *name[MAXN][MAX], char *grade[MAXN][MAX]);
void bubble (int *gradenum[MAX], char *name[MAXN][MAX], char *grade[MAXN][MAX]);
void cpyletters (int *gradenum[MAX], char *grade[MAXN][MAX]);
void outputs (char *name[MAXN][MAX], char *grade[MAXN][MAX]);
void main (void) {
FILE *inFile;
char *name[MAXN][MAX], *grade[MAXN][MAX];
int *gradenum[MAX];
inFile = fopen ("c:\\temp\\namegradein.txt","r");
if (inFile == NULL)
printf ("Can not read the file!\n");
else {
inputs (inFile, &gradenum[MAX], &name[MAX], &grade[MAX]);
bubble (&gradenum[MAX], &name[MAX], &grade[MAX]);
cpyletters (&gradenum[MAX], &grade[MAX]);
outputs (&name[MAX], &grade[MAX]);
}
}
void inputs (FILE *inFile, int *gradenum[MAX], char *name[MAXN][MAX], char *grade[MAXN][MAX]) {
int j;
i = 0;
fgets (*name[i],MAX,inFile);
fscanf (inFile, "%s", *name[0]);
while (*name[i][0] != '@' && i < MAXN -1) {
fscanf (inFile, "%s", *grade[i]);
i++;
fscanf (inFile, "%s", *name[i]);
}
for (j=0; j<i; j++)
//--I figure if this line of code works in my situation, there's no need to change it...
*gradenum[j] = ((*grade[j][0] - 48) * 10) + (*grade[j][1] - 48);
//--cause it's not that important for the assignment...
fclose (inFile);
}
void bubble (int *gradenum[MAX], char *name[MAXN][MAX], char *grade[MAXN][MAX]) {
char hGrade[MAXN][MAX], hName[MAXN][MAX];
int hGradenum, k, m;
for (k=i; k>=1; k--){
for (m=1; m<=k; m++){
if (*gradenum[m-1] < *gradenum[m]){
hGradenum = *gradenum[m-1];
strcpy (hGrade[m], *grade[m-1]);
strcpy (hName[m], *name[m-1]);
*gradenum[m-1] = *gradenum[m];
strcpy (*grade[m-1], *grade[m]);
strcpy (*name[m-1], *name[m]);
*gradenum[m] = hGradenum;
strcpy (*grade[m], hGrade[m]);
strcpy (*name[m], hName[m]);
}
}
}
}
void cpyletters (int *gradenum[MAX], char *grade[MAXN][MAX]) {
int n;
for (n=0; n<i; n++)
if (*gradenum[n] >= 90 && *gradenum[n] <= 100)
strcpy (*grade[n],"A");
else if (*gradenum[n] >= 80 && *gradenum[n] <= 98)
strcpy (*grade[n],"B");
else if (*gradenum[n] >= 70 && *gradenum[n] <= 79)
strcpy (*grade[n],"C");
else if (*gradenum[n] >= 60 && *gradenum[n] <= 69)
strcpy (*grade[n],"D");
else if (*gradenum[n] >= 0 && *gradenum[n] <= 59)
strcpy (*grade[n],"F");
}
void outputs (char *name[MAXN][MAX], char *grade[MAXN][MAX]) {
FILE *outFile;
int z;
outFile = fopen ("c:\\temp\\namez.txt","w");
fprintf (outFile, "NAME GRADE\n");
fprintf (outFile, "---------------------\n");
for (z=0; z<i; z++){
fprintf (outFile, "%s %s\n", *name[z],*grade[z]);
}
fclose (outFile);
}