#include<stdio.h> 
#include<stdlib.h> 
#include<string.h> 
typedef struct person //Define a structure type 

    char num[10]; //Student ID NO. 
    char name[15]; //Name 
    int age; //Age 
    int en; //English Grades 
    int ji; //major number 
}person; 
person per[100];  
char filename[20]; //Define global variable 
logon()  //Define login function

 printf("\n\n\n\t\t\tStudent information management system\n\n"); 
 printf("\n"); 
 printf("\n\t\t\t               01/01/2012\n"); 
 printf("\t\t\t  "); 
 printf("\n\t\t\t              by LiangShuang\n"); 
 printf("\n\n\t\t\t    \n"); 
 system("pause"); 

int menu_filename() //file name you want to operate
   { 
      system("cls"); 
      printf("Please enter the file name you want to operate:"); 
      scanf("\t%s",filename); 
    } 

 

int menu_select() //Select operation 

     char c; 
      do{ 
        system("cls"); 
        printf("\t\tStudent information management system\n"); 
        printf("\n"); 
        printf("\n"); 
        printf("\t\t       1. Add record\n");
             printf("\n"); 
             printf("\t\t       2. Show record \n"); 
        printf("\n"); 
        printf("\t\t       3. Inquire information \n");
             printf("\n"); 
             printf("\t\t       4. Calculate data \n");
             printf("\n"); 
        printf("\t\t       5. Modify record \n");
             printf("\n"); 
             printf("\t\t       6. Delete record \n");
        printf("\n"); 
        printf("\t\t       0. Log out \n"); 
        printf("\n"); 
        printf("\t\tPlease enter a number(0-6):"); 
        c=getchar(); 
     }while(c<'0'||c>'6'); 
        return (c-'0');                                    

 
  
 
void add() //Function: add and record student grades
  { 
    FILE *fp;  
    int i=0,n=0; 
    char sign='y';                               
    system("cls");                                
    while(sign!='n'&&sign!='N') //add records 
      { 
        printf("             ----Student information added----\n"); 
        printf("Number:\n"); 
        scanf("\t%s",per[i].num); 
        printf("Name:\n"); 
        scanf("\t%s",per[i].name); 
        printf("Age:\n"); 
        scanf("\t%d",&per[i].age); 
        printf("English grade:\n"); 
        scanf("\t%d",&per[i].en); 
        printf("major number:\n"); 
        scanf("\t%d",&per[i].ji); 
        printf("continue to add?(y/n)"); 
        scanf("\t%c",&sign); 
        i++; 
        n=n+1; 
        system( "cls "); 
   }system("pause");                                      
 
   if((fp=fopen(filename,"a"))==NULL)                
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return;                                    
       } 
        for(i=0;i<n;i++) 
        if(fwrite(&per[i],sizeof(person),1,fp)!=1)    
        printf("file write error\n"); 
        fclose(fp);                                        
        system("pasue"); 
  } 
    

 

  void scan() //show the records 
   { 
    void amend(); //Declare a function
    char sign='y'; 
    FILE *fp; 
    int i=0,n; 
    system("cls"); 
      if((fp=fopen(filename,"r"))==NULL)              
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
    while(!feof(fp))                              
    { 
        fread(&per[i],sizeof(person),1,fp); 
         i++; 
     } 
    fclose(fp); 
     printf("        Number  Name    Age English grade  Major NO.\n"); 
    for(n=0;n<i-1;n++)                             
     printf("\t%s \t%s \t%d \t%d \t\t%d\n",per[n].num,per[n].name,per[n].age,per[n].en,per[n].ji); 
     system("pause"); 
     system("cls"); 
     printf("Whether need to modify?(y/n)"); 
     scanf("\t%c",&sign); 
    if(sign!='n'&&sign!='N')                   
     amend(); 
     system("pause"); 
 
  } 
 
   
  void query() //Different selection methods of student info
   { 
    FILE *fp; 
    int i=0,n=0; 
    int m; 
    system("cls"); 
    printf("\t\nPlease select the inquire way:\n"); 
    printf("\t\n"); 
    printf("\t 1------Fuzzy inquiry \n"); 
    printf("\t 2------Name   \n"); 
    printf("\t 3------Number \n"); 
    printf("\t 4------Return \n"); 
    printf("\t\n"); 
    printf("Please enter a number:\n"); 
    scanf("%d",&m); 
    while(m!=1&&m!=2&&m!=3&&m!=4) 
        { 
            printf("Error!Please enter a number:\n"); 
            scanf("%d",&m); 
        } 
      if((fp=fopen(filename,"r"))==NULL)                  
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
 
    while(!feof(fp)) 
    { 
        fread(&per[i],sizeof(person),1,fp);                    
        i++;n=n+1; 
     } 
 
       if(m==1)   //Fuzzy inquiry 
      { 
        char s[3];                                           
        int i=0; 
        system("cls"); 
        printf("\tPlease enter a Last name:"); 
        scanf("%s",s); 
        for(i=0;i<n-1;i++)                                              
        { 
 
          if(per[i].name[0]==s[0]&&per[i].name[1]==s[1])            
            { 
                printf("\tNo.: %s\n",per[i].num); 
                printf("\tName: %s\n",per[i].name); 
                printf("\tAge: %d\n",per[i].age); 
                printf("\tEnglish grade: %d\n",per[i].en); 
                printf("\tCS grade: %d\n",per[i].ji); 
                printf("\t                     \n"); 
            } 
        } 
     } 
 
    if(m==2)    //Name inquiry 
       { 
        char s[20]; 
        int i=0; 
        printf("\tPlease enter a name:"); 
        scanf("\t%s",s); 
        while(strcmp(per[i].name,s)!=0&&i<n) i++;          
        if(i==n) 
        { 
            printf("\tNobody match this name!\n"); 
            system("pause"); 
            return; 
        } 
          printf("\tNo.: %s\n",per[i].num); 
          printf("\tName: %s\n",per[i].name); 
          printf("\tAge: %d\n",per[i].age); 
          printf("\tEnglish grade: %d\n",per[i].en); 
          printf("\tCS grade: %d\n",per[i].ji); 
         } 
    if(m==3)    //ID inquiry 
        { 
          char s[15]; 
          int i=0; 
          printf("Please enter a Number:"); 
          scanf("\t%s",s); 
         while(strcmp(per[i].num,s)!=0&&i<n)i++;                      
            if(i==n) 
            { 
                printf("\tNobody match this name!\n"); 
                system("pause"); 
                return; 
            } 
            printf("\tNo.: %s\n",per[i].num); 
            printf("\tName: %s\n",per[i].name); 
            printf("\tAge: %d\n",per[i].age); 
            printf("\tEnglish grade: %d\n",per[i].en); 
            printf("\tCS grade: %d\n",per[i].ji); 
          } 
          fclose(fp); 
          system("pause"); 
  } 
 

                                      
 void date()   //Statistics
  { 
    FILE *fp; 
    struct person temp;                             
    int sum;  //Total score 
    int s[100]; 
    int i=0,n=0; 
    int j,k,t; 
    int m; 
    system("cls"); 
    printf("\t\nSelect sort way:\n"); 
    printf("\t\n"); 
    printf("\t1----English grade \n"); 
    printf("\t2----Computer grade \n"); 
    printf("\t3----Total points \n"); 
    printf("\t4----Return \n"); 
    printf("\t\n"); 
    printf("Please enter a number:\n"); 
    scanf("%d",&m); 
    system("cls"); 
    while(m!=1&&m!=2&&m!=3&&m!=4) 
        { 
            printf("Error!Please enter a number:\n"); 
            scanf("%d",&m); 
        } 
     if((fp=fopen(filename,"r"))==NULL)                  
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
 
   while(!feof(fp))                               
     { 
       fread(&per[i],sizeof(person),1,fp); 
       i++;n=n+1; 
      } 
   if(m==1) 
      { 
      for(i=0;i<n-1;i++)  //Bubble sort 
      { 
         k=i; 
        for(j=i+1;j<n;j++) 
        if(per[j].en>per[k].en)                             
        k=j; 
        temp=per[k];per[k]=per[i];per[i]=temp;               
        } 
            printf("\n"); 
            printf("      Number  Name    Age English Grade Major\n"); 
            printf("\n"); 
                for(i=0;i<n-1;i++) 
            printf("\t%s \t%s \t%d \t%d \t\t%d\n",per[i].num,per[i].name,per[i].age,per[i].en,per[i].ji); 
            printf("\n"); 
        fclose(fp); 
        } 
 
    if(m==2) 
      { 
        for(i=0;i<n-1;i++) 
         { 
              k=i; 
           for(j=i+1;j<n;j++) 
            if(per[j].ji>per[k].ji) 
              k=j; 
            temp=per[k];per[k]=per[i];per[i]=temp; 
          } 
            printf("\n"); 
            printf("      Number  Name  Age English Grade Major\n"); 
            printf("\n"); 
        for(i=0;i<n-1;i++) 
            printf("\t%s \t%s \t%d \t%d \t%d\n",per[i].num,per[i].name,per[i].age,per[i].en,per[i].ji); 
            printf("\n"); 
          fclose(fp); 
        } 
    if(m==3) 
      { 
        for(i=0;i<n-1;i++) 
           { 
             sum=0; 
             sum=per[i].en+per[i].ji; 
             s[i]=sum;                                         
            } 
            for(i=0;i<n-1;i++) 
              { 
                k=i; 
                for(j=i+1;j<n;j++) 
                  if(s[j]>s[k]) 
                    k=j; 
                t=s[k];s[k]=s[i];s[i]=t;                      
                temp=per[k];per[k]=per[i];per[i]=temp;          
                } 
                  printf("\n"); 
                  printf("      Number Name Age English Grade Major Total Point   \n"); 
                  printf("\n"); 
                for(i=0;i<n-1;i++) 
                  printf("\t%s \t%s \t%d \t%d \t\t%d \t%d\n",per[i].num,per[i].name,per[i].age,per[i].en,per[i].ji,s[i]); 
                  printf("\n"); 
                fclose(fp); 
      } 
      system("pause"); 
    } 
 
   

void amend()   // Modify student info
  { 
    FILE *fp; 
    int i=0,n=0; 
    char s[15]; 
    int m; 
    system("cls"); 
    printf("\t\nSelect the modify way:\n"); 
    printf("\t\n"); 
    printf("\t1------name \n"); 
    printf("\t2------No. \n"); 
    printf("\t3------Return \n"); 
    printf("\t\n"); 
    printf("Please enter a number:\n"); 
    scanf("%d",&m); 
    while(m!=1&&m!=2&&m!=3) 
        { 
            printf("Error!Please enter a number:\n"); 
            scanf("%d",&m); 
        } 
     if((fp=fopen(filename,"r"))==NULL)                  
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
    while(!feof(fp)) 
    { 
        fread(&per[i],sizeof(person),1,fp); 
        i++;n=n+1; 
    }i=0; 
    fclose(fp); 
    system("cls"); 
  if(m==1) 
    { 
      char s[20]; 
      int i=0; 
      printf("\tPlease enter the name you want to edit:"); 
      scanf("\t%s",s); 
      while(strcmp(per[i].name,s)!=0&&i<n) i++;  //comparison
        if(i==n) 
         { 
            printf("\tNobody!\n"); 
            return; 
         } 
        else{ 
             printf("No:\n"); 
             scanf("\t%s",per[i].num); 
             printf("Name:\n"); 
             scanf("\t%s",per[i].name); 
             printf("Age:\n"); 
             scanf("\t%d",&per[i].age); 
             printf("English Grade:\n"); 
             scanf("\t%d",&per[i].en); 
             printf("Major:\n"); 
             scanf("\t%d",&per[i].ji); 
          } 
      } 
    if(m==2) 
       { 
        char s[15]; 
        int i=0; 
        printf("Please enter the Number you want to edit:"); 
        scanf("\t%s",s); 
        while(strcmp(per[i].num,s)!=0&&i<n)i++; 
           if(i==n) 
            { 
             printf("\tNobody!\n"); 
             return; 
            } 
            else{ 
                 printf("No.:\n"); 
                 scanf("\t%s",per[i].num); 
                 printf("Name:\n"); 
                 scanf("\t%s",per[i].name); 
                 printf("Age:\n"); 
                 scanf("\t%d",&per[i].age); 
                 printf("English grade:\n"); 
                 scanf("\t%d",&per[i].en); 
                 printf("Major:\n"); 
                 scanf("\t%d",&per[i].ji); 
                } 
        } 
     if((fp=fopen(filename,"w"))==NULL)            
          { 
            printf("cannot open the files\n"); 
            return; 
           } 
        for(i=0;i<n-1;i++) 
          if(fwrite(&per[i],sizeof(person),1,fp)!=1) 
          printf("file write error\n"); 
          fclose(fp); 
          printf("Success!\n"); 
          system("pause"); 

                                                         
void delet()  //Delete data
  { 
    FILE *fp; 
    char s[10]; 
    int i=0,n=0; 
      if((fp=fopen(filename,"r"))==NULL)                   
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
 
    while(!feof(fp)) 
    { 
      fread(&per[i],sizeof(person),1,fp);                
      i++;n=n+1; 
     } 
    fclose(fp); 
     if((fp=fopen(filename,"w"))==NULL)             
      { 
         printf("cannot open the files\n"); 
         system("pause"); 
         return; 
       } 
    printf("No.:"); 
    scanf("%s",s); 
    for(i=0;i<n-1;i++) 
     if(!(strcmp(per[i].num,s)==0))                  
      fwrite(&per[i],sizeof(person),1,fp)!=1;             
     fclose(fp); 
     printf("Success!"); 
     system("pause"); 

     

                             
  void main()  //main function
  { 
      int n=0; 
      logon(); 
      menu_filename();                                     
      for(;;)                                               
      { 
          switch(menu_select())                              
          { 
          case 1: 
              printf("\t\t Add student information\n"); 
              add(); 
              break; 
          case 2: 
              printf("\t\t Browse student information\n"); 
              scan(); 
              break; 
          case 3: 
              printf("\t\t Inquire student information\n"); 
              query(); 
              break; 
          case 4: 
              printf("\t\t Calculate data\n"); 
              date(); 
              break; 
          case 5: 
              printf("\t\t Modify data\n"); 
              amend(); 
              break; 
          case 6: 
               printf("\t\t Delete data\n"); 
               delet(); 
               break; 
          case 0: 
                printf("\n\t\tLogout\n"); 
                printf("\n\t\t"); 
                system("pause"); 
                exit(0); 
          } 
      } 
      system("pause"); 
  }