Code:
/*
My name is Jack Trocinski
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void printArray(struct xrec * a, int n);
void printArrayG(struct xrec * a, int n);
void printAs(struct xrec * a, int n);
void printFs(struct xrec * a, int n);
void computeGrade(struct xrec * a, int n);
// void printOrder(struct xrec * a, int n);
// Wasn't sure how to make it sort
int search(struct xrec * a, int n,char * tssn);
struct xrec
{
char name[15];
char ssn[12];
char gender;
double a, q, m, h, final;
char grade;
};
int displayMenu(void);
int main()
{ char tssn[12];
struct xrec temp;
struct xrec x[20];
int size=0, com, d, i;
FILE * infile;
if((infile= fopen("c:\\data.txt","r")) == NULL)
{
printf("File Not Found \n");
exit (1);
}
while(fscanf(infile,"%15s %11s %c %lf %lf %lf %lf %lf",
temp.name,temp.ssn,&temp.gender,&temp.a,&temp.q,&temp.m,&temp.h,&temp.final)!=EOF)
{
temp.name[14]='\0'; temp.ssn[11]='\0';
x[size++]=temp;
}
fclose(infile);
computeGrade(x,size);
do {
com = displayMenu();
switch (com)
{
case 1 : printArray(x,size); break;
case 2 : printArrayG(x,size); break;
case 3 : printAs(x,size); break;
case 4 : printFs(x,size); break;
//case 5 : printOrder(x,size); break;
case 6 : printf("Name:");fflush(stdin); gets(temp.name);
printf("SSN:");fflush(stdin); gets(temp.ssn);
printf("Gender:");fflush(stdin); scanf("%c",&temp.gender);
printf("Assignment,Quiz,Midterm,Participation,Final:"); scanf("%lf %lf %lf %lf %lf",
&temp.a,&temp.q,&temp.m,&temp.h,&temp.final);
x[size++] = temp; computeGrade(x,size); break;
case 7 : printf("SSN:");fflush(stdin); gets(tssn);
d = search(x,size,tssn);
if (d < 0)
printf("record is not found\n");
else
x[d]=x[--size];
break;
case 8 : infile=fopen("data.txt","w");
for(i=0; i < size;i++)
fprintf(infile,"%10s %11s %c %lf %lf %lf %lf %lf\n",
x[i].name,x[i].ssn,x[i].gender,x[i].a,x[i].q,x[i].m,x[i].h,x[i].final);
printf("File is updated.\n");fclose(infile); break;
default: printf("Bad Input....\n");
}
} while (com != 8);
return 0;
}
int search(struct xrec * a, int n,char * tssn)
{
int i;
for(i= 0 ; i < n ; i++)
if(strcmp(a[i].ssn,tssn) == 0)
return i;
return -1;
}
void computeGrade(struct xrec * a, int n)
{
int i; double total;
for(i = 0; i < n ; i++) {
total= (a[i].a * .40) + (a[i].q * .15) + (a[i].m * 0.15) + (a[i].h * 0.10) + (a[i].final*0.20);
switch (((int)total)/10) {
case 10 : case 9 : a[i].grade='A'; break;
case 8 : a[i].grade='B'; break;
case 7 : a[i].grade='C'; break;
case 6 : a[i].grade='D'; break;
default : a[i].grade='F';
}
}
}
int displayMenu(void)
{
int c;
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("@ @\n");
printf("@ 1. Print list of students @\n");
printf("@ 2. Print list of students with letter grade @\n");
printf("@ 3. Print list of students with an A grade @\n");
printf("@ 4. Print list of students with an F grade @\n");
printf("@ 5. Print list of students sorted by name @\n");
printf("@ 6. Add student to the class list @\n");
printf("@ 7. Delete student from class list @\n");
printf("@ 8. Exit @\n");
printf("@ @\n");
printf("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");
printf("Enter Your Choice 1-8? ");
scanf("%d",&c);
return c;
}
void printArray(struct xrec * a, int n)
{
int i;
for(i = 0; i < n; i++)
printf("Name: %-15s SSN:%-11s Gender:%c %4.1f %4.1f %4.1f %4.1f %4.1f\n",
a[i].name,a[i].ssn,a[i].gender,a[i].a,a[i].q,a[i].m,a[i].h,a[i].final);
}
/* Wasn't sure how to make it sort
void printOrder(struct xrec * a, int n)
{
int i, l;
struct temp ;
for ( i = 0; i < n; ++i) {
for ( l = 0; l < n ; ++l ) {
if ( strcmp(a[l].name,(a[l+1].name)) == 1) {
temp = a[l];
a[l] = a[l+1];
a[l+1] = temp;
}
}
}
for(i = 0; i < n; i++) {
printf("%-15s\n",a[i].name);
}
}
*/
void printArrayG(struct xrec * a, int n)
{
int i;
for(i = 0; i < n; i++)
printf("Name: %-15s SSN:%-11s Gender:%c %4.1f %4.1f %4.1f %4.1f %4.1f Grade:%c\n",
a[i].name,a[i].ssn,a[i].gender,a[i].a,a[i].q,a[i].m,a[i].h,a[i].final,a[i].grade);
}
void printAs(struct xrec * a, int n)
{
int i;
for(i = 0; i < n; i++) {
if (a[i].grade == 'A') {
printf("%-15s has an A in the class.\n",a[i].name);
}
}
}
void printFs(struct xrec * a, int n)
{
int i;
for(i = 0; i < n; i++) {
if (a[i].grade == 'F') {
printf("%-15s has a F in the class.\n",a[i].name);
}
}
}