1. 程式人生 > >c語言學生成績管理系統(可以將學生資訊儲存至txt檔案中)

c語言學生成績管理系統(可以將學生資訊儲存至txt檔案中)

程式截圖: 

標頭檔案說明;

定義全域性變數;

 

定義、編寫輸入函式;

定義、編寫顯示函式;

定義、編寫修改函式;

定義、編寫查詢函式;

定義、編寫新增函式;

定義、編寫排序函式;

定義、編寫刪除函式;

定義、編寫恢復函式;

原始碼:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include <string.h> 

typedef struct student                        
{  
    char num[20];   //學號  
    char name[20];  //姓名 
	char sex[5];    //性別
	char banji[20]; //班級
    float c;        //C語言成績  
    float math;     //數學成績  
    float english;  //英語成績
    float PE;       //體育成績  
    float politics; //思修成績  
	float all;      //總分
	float average;  //平均分
}student;  
student person[200];//定義有1000位學生

int Input()
{
	system("cls");
	FILE *fp;
	int i = 0 ,n = 0;
	char select;
	student per[200];
    printf("開始輸入請按下y\n");
	select = getch();
	while(select == 'y'||select == 'Y')                     
      {  
		system ("cls");
		printf("* * * * * * * * * * * * * * * * * * 學生資料輸入 * * * * * * * * * * * * * * * * * *\n");  
        printf("請輸入姓名:     \n");  
        scanf("%s",per[i].name);  
        printf("請輸入學號:     \n");  
        scanf("%s",per[i].num);
		printf("請輸入性別:     \n");
		scanf("%s",per[i].sex);
		printf("請輸入班級:     \n");  
        scanf("%s",per[i].banji);
        printf("請輸入C語言成績:\n");  
        scanf("%f",&per[i].c);  
        printf("請輸入數學成績: \n");  
        scanf("%f",&per[i].math);  
        printf("請輸入英語成績: \n");  
        scanf("%f",&per[i].english);
        printf("請輸入體育成績: \n");  
        scanf("%f",&per[i].PE);  
        printf("請輸入思修成績: \n");  
        scanf("%f",&per[i].politics); 
		per[i].all = per[i].c + per[i].math + per[i].english + per[i].PE + per[i].politics;
        per[i].average = (per[i].all) / 5;
        printf("是否繼續新增?(y/n)");  
        select = getch(); 
        i++;  
        n=n+1;  
        system( "cls ");  
    }
	fp=fopen("studata.txt","a");  //以附加的方式開啟只寫檔案。若檔案不存在,則會建立該檔案,如果檔案存在,寫入的資料會被加到檔案尾,即檔案原先的內容會被保留。
	if(fp==NULL)                    
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return -1;//如果檔案出現錯誤返回-1  
       }  
        for(i=0;i<n;i++)  
        {
            fprintf(fp,"%s %s %s %s %f %f %f %f %f %f %f\n",per[i].name,per[i].num,per[i].sex,per[i].banji,per[i].c,per[i].math,per[i].english,per[i].PE,per[i].politics,per[i].all,per[i].average);    //以2進位制形式寫入檔案中,一次寫入一個數組  
        
        }  
     fclose(fp);                                       
	 system("pause");
	 return 0;//程式正常執行返回0
}

int Display()
{
    system("cls");
	FILE *fp;
	int n ;
	int i = 0;
	fp = fopen("studata.txt","rb");
	if(fp==NULL)              
	{  
        printf("cannot open the files\n");  
        system("pause");  
        return -1;  
    }
	printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n");
	while(fscanf(fp,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,&person[i].math,&person[i].english,&person[i].PE,&person[i].politics,&person[i].all,&person[i].average)!=EOF)//開啟儲存的二進位制檔案將其copy到結構體
	{    
        printf("%s %s %s %s %f %f %f %f %f %f %f",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);//將結構體輸出
		printf("\n");
		i++;
	}
	fclose(fp);
	system("pause");
    printf("您是否返回上一級選單?y/n");
	if(getch() == 'y')
	{
        return 0;
	}
    if(getch() == 'n')
    {    
		system("cls");
		Display();
    }
    return 0;    
}

int Modify()
{
	system("cls");
    student person[200];//從棧上修改(因為全域性區寫入的結構體無法改動 先將修改資料寫在棧上 再寫入新的檔案 然後修改檔名 代替舊的檔案)
    FILE *fp2;  
    int i=0;
    int n=0;  
    char s[15];  
    int m;   
    printf("* * * * * * * * * * 請選擇查詢方式  * * * * * * * * * *\n");  
    printf("*                                                     *\n");  
    printf("*                       1.姓名                        *\n");  
    printf("*                       2.學號                        *\n");  
    printf("*                       3.返回                        *\n");  
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");  
    printf("請輸入你要修改的方式\n");  
    m = getch(); 
    while(m!=1&&m!=2&&m!=3)  
        {  
            printf("輸入錯誤請重新修改\n");  
            m = getch(); 
        }  
     if((fp2=fopen("studata.txt","r"))==NULL)                 //以2進位制方式讀取檔案資訊後進行判斷指標是否指向一個有效檔案  
      {  
         printf("cannot open the files\n");  
         system("pause");  
         return -1;  
       }  
       
       
       while(fscanf(fp2,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,&person[i].math,&person[i].english,&person[i].PE,&person[i].politics,&person[i].all,&person[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        } 
        fclose(fp2) ;
    if(m==1)  
    {  
      student newp;
      char s[20];  
      int i=0;  
      printf("\t請輸入想修改的姓名:");  
      scanf("\t%s",s);  
      while(strcmp(person[i].name,s)!=0&&i<n) i++;//進行比較 找到所需要的資訊  
        if(i==n)  
         {  
            printf("\t通訊錄中沒有此人!\n");  
            return 1; //若通訊錄沒有此人返回錯誤值1 
         }  
        else{  
             printf("姓名:\n");  
             scanf("\t%s",&newp.name);  
             printf("學號:\n");  
             scanf("\t%s",&newp.num);  
             printf("性別:\n");  
             scanf("\t%f",&newp.sex);  
             printf("班級:\n");  
             scanf("\t%f",&newp.banji);  
             printf("c語言:\n");  
             scanf("\t%f",&newp.c);
             printf("數學:\n");  
             scanf("\t%f",&newp.math);
             printf("英語:\n");  
             scanf("\t%f",&newp.english);
			 printf("體育:\n");  
             scanf("\t%f",&newp.PE);
			 printf("思修:\n");  
             scanf("\t%f",&newp.politics);
			 newp.all = newp.c + newp.english + newp.PE + newp.politics;
			 newp.all = newp.all/5;
          }  
          
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//讀開啟原檔案studata.txt
    ftp=fopen("tmp.txt","w");//寫開啟臨時檔案tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //從原檔案讀取一行
    {
        if(strcmp(person[kk].name,s)!=0)//檢驗是要刪除的行
        {
            fprintf(fp2,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);//不是則將這一行寫入臨時檔案tmp.txt
        }

       kk++;    
    }
        
    fprintf(ftp,"%s %s %s %s %f %f %f %f %f %f %f\n",newp.name,newp.num,newp.sex,newp.banji,newp.c,newp.math,newp.english,newp.PE,newp.politics,newp.all,newp.average);//不是則將這一行寫入臨時檔案tmp.txt

    fclose(fin);
    fclose(ftp);
    fclose(fp2);
    remove("studata.txt");//刪除原檔案
    rename("tmp.txt","studata.txt");//將臨時檔名改為原檔名
     }  
    if(m==2)  
      {  
      student newp1;
      char s[20];  
      int i=0;  
      printf("\t請輸入想修改的學號:");  
      scanf("\t%s",s);  
      while(strcmp(person[i].num,s)!=0&&i<n) i++;                           //進行比較 找到所需要的資訊  
        if(i==n)  
         {  
            printf("\t通訊錄中沒有此人!\n");  
            return 1;  
         }  
        else{  
             printf("姓名:\n");  
             scanf("\t%s",&newp1.name);  
             printf("學號:\n");  
             scanf("\t%s",&newp1.num);  
             printf("性別:\n");  
             scanf("\t%f",&newp1.sex);  
             printf("班級:\n");  
             scanf("\t%f",&newp1.banji);  
             printf("c語言:\n");  
             scanf("\t%f",&newp1.c);
             printf("數學:\n");  
             scanf("\t%f",&newp1.math);
             printf("英語:\n");  
             scanf("\t%f",&newp1.english);
			 printf("體育:\n");  
             scanf("\t%f",&newp1.PE);
			 printf("思修:\n");  
             scanf("\t%f",&newp1.politics);
			 newp1.all = newp1.c + newp1.english + newp1.PE + newp1.politics;
			 newp1.all = newp1.all/5;
          }  
          
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//讀開啟原檔案studata.txt
    ftp=fopen("tmp.txt","w");//寫開啟臨時檔案tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //從原檔案讀取一行
    {
        if(strcmp(person[kk].num,s)!=0)//(strcmp函式若兩個字串相等返回真值,反之)檢驗是否是刪除的行
        {
            fprintf(fp2,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);//不是則將這一行寫入臨時檔案tmp.txt
        }

       kk++;    
    }
        
    fprintf(ftp,"%s %s %s %s %f %f %f %f %f %f %f\n",newp1.name,newp1.num,newp1.sex,newp1.banji,newp1.c,newp1.math,newp1.english,newp1.PE,newp1.politics,newp1.all,newp1.average);//不是則將這一行寫入臨時檔案tmp.txt

    fclose(fin);
    fclose(ftp);
    fclose(fp2);
    remove("studata.txt");//刪除原檔案
    rename("tmp.txt","studata.txt");//將臨時檔名改為原檔名
        
        
        } 
        
        system("pause"); 
	return 0;
}

int Find()
{
	    system("cls");
        student person[200];
        FILE *fp1;  
        int i=0;
        int n=0;  
        char m;   
        printf("* * * * * * * * * * 請選擇查詢方式: * * * * * * * * * * *\n");  
        printf("*                                                       *\n");  
        printf("*                     1.模糊查詢                        *\n");  
        printf("*                     2.姓名                            *\n");  
        printf("*                     3.學號                            *\n");  
        printf("*                     4.返回                            *\n");  
        printf("*                                                       *\n");  
        printf("*                 請輸入你要查詢的方式 1 - 4            *\n");
		printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
        m = getch();  
        while(m !='1' && m !='2' && m !='3' && m !='4')  
        {  
            printf("輸入錯誤請重新查詢\n");  
            m = getch();
        }  
        if((fp1=fopen("studata.txt","rb"))==NULL)                   
        {  
            printf("cannot open the files\n");  
        }    
        while(fscanf(fp1,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,&person[i].math,&person[i].english,&person[i].PE,&person[i].politics,&person[i].all,&person[i].average)!=EOF)
        {    
             i++;
             n=n+1;
        }               
        if(m=='1')//模糊查詢  
        {  
            char s[3];//定義輸入的文字所佔的位元組 (一個漢字佔2個位元組 外加一結尾符‘\0’此處小心溢位)  
            int i=0;  
            system("cls");  
            printf("請輸入想查詢的姓:\n");  
            scanf("%s",s);  
            for(i=0;i<n-1;i++)//檔案資訊已經讀取到陣列中 此處進行迴圈用於下一語句的查詢  
        {  
  
          if(person[i].name[0]==s[0]&&person[i].name[1]==s[1])//比較person[i].name與所輸入的前倆個字元是否相同  
            {  
                printf("姓名: %s\n",person[i].name);  
                printf("學號: %s\n",person[i].num);
				printf("性別: %s\n",person[i].sex);
				printf("班級: %s\n",person[i].banji);
                printf("C語言成績: %f\n",person[i].c);  
                printf("數學成績: %f\n",person[i].math);  
                printf("英語成績: %f\n",person[i].english);
                printf("體育成績: %f\n",person[i].PE);  
                printf("思修成績: %f\n",person[i].politics); 
				printf("平均分: %f\n",person[i].average);
				printf("總分: %f\n",person[i].all);
            }
		  else
            {  
                printf("通訊錄中沒有此人!\n");  
                system("pause");  
                return 1;  
            }  
		}  
		}  
        if(m=='2')//姓名查詢  
		{  
            char s[20];  
            int j=0;  
            printf("請輸入想查詢的姓名:");  
            scanf("\t%s",s);  
        while(strcmp(person[j].name,s)!=0&&j<n) j++;            //比較per[i].name與所輸入姓名是否相同//  
            if(j==n)  
            {  
                printf("通訊錄中沒有此人!\n");  
                system("pause");  
                return -1;  
            }  
                printf("姓名: %s\n",person[j].name);  
                printf("學號: %s\n",person[j].num);
				printf("性別: %s\n",person[j].sex);
				printf("班級: %s\n",person[j].banji);
                printf("C語言成績: %f\n",person[j].c);  
                printf("數學成績: %f\n",person[j].math);  
                printf("英語成績: %f\n",person[j].english);
                printf("體育成績: %f\n",person[j].PE);  
                printf("思修成績: %f\n",person[j].politics); 
				printf("平均分: %f\n",person[j].average);
				printf("總分: %f\n",person[j].all);
            
		}   
        if(m=='3')//學號查詢  
		{  
            char s[15];  
            int i=0;  
            printf("請輸入想查詢的學號:");  
            scanf("\t%s",s);  
            while(strcmp(person[i].num,s)!=0&&i<n)i++; //比較person[i].name與所輸入學號是否相同//                                 
            if(i==n)  
            {  
                printf("通訊錄中沒有此人!\n");  
                system("pause");  
                return -1;  
            }  
                printf("姓名: %s\n",person[i].name);  
                printf("學號: %s\n",person[i].num);
				printf("性別: %s\n",person[i].sex);
				printf("班級: %s\n",person[i].banji);
                printf("C語言成績: %f\n",person[i].c);  
                printf("數學成績: %f\n",person[i].math);  
                printf("英語成績: %f\n",person[i].english);
                printf("體育成績: %f\n",person[i].PE);  
                printf("思修成績: %f\n",person[i].politics); 
				printf("平均分: %f\n",person[i].average);
				printf("總分: %f\n",person[i].all);
          }  
		if(m == '4')
		{
		    printf("您是否返回上一級選單?y/n");
	        if(getch() == 'y')
			{
                return 0;
			}
            if(getch() == 'n')
			{    
		        system("cls");
		        return 0;
			}
		}
        fclose(fp1); 
        system("pause");
	    return 0;
}
       
int Add()
{
    system("cls");
    FILE *fp;
	int i = 0 ,n = 0;
	char select;
	student per[200];
    printf("開始輸入請按下y\n");
	select = getch();
	while(select == 'y'||select == 'Y')                    
    {  
        system("cls");
		printf("* * * * * * * * * * * * * * * * * * 學生資料新增 * * * * * * * * * * * * * * * * * *\n");  
        printf("請輸入姓名:     \n");  
        scanf("%s",per[i].name);  
        printf("請輸入學號:     \n");  
        scanf("%s",per[i].num);
		printf("請輸入性別:     \n");
		scanf("%s",per[i].sex);
		printf("請輸入班級:     \n");  
        scanf("%s",per[i].banji);
        printf("請輸入C語言成績:\n");  
        scanf("%f",&per[i].c);  
        printf("請輸入數學成績: \n");  
        scanf("%f",&per[i].math);  
        printf("請輸入英語成績: \n");  
        scanf("%f",&per[i].english);
        printf("請輸入體育成績: \n");  
        scanf("%f",&per[i].PE);  
        printf("請輸入思修成績: \n");  
        scanf("%f",&per[i].politics); 
		per[i].all = per[i].c + per[i].math + per[i].english + per[i].PE + per[i].politics;
        per[i].average = (per[i].all) / 5;
        printf("是否繼續新增?(y/n)");  
        select = getch(); 
        i++;  
        n=n+1;  
        system( "cls ");  
    }
	if((fp=fopen("studata.txt","a"))==NULL)                    //以2進位制形式進行檔案尾追加 
    {  
        printf("cannot open the files\n");  
        system("pause");  
        return -1;                                         //如果檔案出現錯誤 就返回-1  
    }  
    for(i=0;i<n;i++)  
    {
        fprintf(fp,"%s %s %s %s %f %f %f %f %f %f %f\n",per[i].name,per[i].num,per[i].sex,per[i].banji,per[i].c,per[i].math,per[i].english,per[i].PE,per[i].politics,per[i].all,per[i].average);    //以2進位制形式寫入檔案中,一次寫入一個數組     
    }  
    fclose(fp);                                       
	system("pause");
	return 0; 
}

int Sort()
{
    system("cls");
    student person[200];
    FILE *fp;  
    struct student temp;                               //定義臨時陣列用於交換時存放陣列資訊用於後面的交換//                                          //總分  
    float s[200];  
    int i=0,n=0;  
    int j,k,t;  
    int m;  
    system("cls");  
    printf("* * * * * * * * * * 選擇排序方式  * * * * * * * * * * *\n");  
    printf("*                                                     *\n");  
    printf("*                     1.c語言                         *\n");  
    printf("*                     2.數學                          *\n"); 
    printf("*                     3.英語                          *\n");  
    printf("*                     4.體育                          *\n");  
    printf("*                     5.思修                          *\n");  
    printf("*                     6.總分                          *\n");  
    printf("*                     7.返回                          *\n");  
    printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");  
    printf("請輸入你要排序的方式\n");  
    m = getch();  
    system("cls");  
    while(m!='1'&&m!='2'&&m!='3'&&m!='4'&&m!='5'&&m!='6'&&m!='7')  
        {  
            printf("輸入錯誤請重新輸入\n");  
            m = getch(); 
        } 
	fp=fopen("studata.txt","r");//以2進位制方式讀取檔案資訊
    if(fp==NULL)                  
    {  
         printf("cannot open the files\n");  
         system("pause");  
         return -1;  
     }  
  
     while(fscanf(fp,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,&person[i].math,&person[i].english,&person[i].PE,&person[i].politics,&person[i].all,&person[i].average)!=EOF)
     {    
          i++;
          n=n+1;
     }   
    if(m=='1')  
      {  
          for(i=0;i<n-1;i++)//採用冒泡法進行排序 
          {  
             k=i;  
            for(j=i+1;j<n;j++)  
            if(person[j].c>person[k].c)//排序比較大小  
            k=j;  
            temp=person[k];
			person[k]=person[i];
			person[i]=temp;//當符合條件時進行資料交換
            }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n");
            for(i=0;i<n-1;i++)  
            {
               			printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);   
            }
                
            fclose(fp);  
        }  
  
    if(m=='2')  
      {  
        for(i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(person[j].math>person[k].math)  
              k=j;  
            temp=person[k];person[k]=person[i];person[i]=temp;  
          }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n"); 
            for(i=0;i<n-1;i++)  
            {
                printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,&person[i].PE,person[i].politics,person[i].all,person[i].average);  
            }
                
            fclose(fp);  
        }
    if(m=='3')  
      {  
        for(i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(person[j].english>person[k].english)  
              k=j;  
            temp=person[k];person[k]=person[i];person[i]=temp;  
          }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n");
            for(i=0;i<n-1;i++)  
            {
               printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);
            }
                
            fclose(fp);  
        } 
        if(m=='4')  
      {  
        for(i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(person[j].PE>person[k].PE)  
              k=j;  
            temp=person[k];person[k]=person[i];person[i]=temp;  
          }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n"); 
            for(int i=0;i<n-1;i++)  
            {
                 printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);
            }
                
            fclose(fp);  
        }  
    if(m=='5')  
      {  
        for(i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(person[j].politics>person[k].politics)  
              k=j;  
            temp=person[k];person[k]=person[i];person[i]=temp;  
          }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n");  
            for(i=0;i<n-1;i++)  
            {
                printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);
            }
                
            fclose(fp);   
        }
	    if(m=='6')  
      {  
        for(i=0;i<n-1;i++)  
         {  
              k=i;  
           for(j=i+1;j<n;j++)  
            if(person[j].all>person[k].all)  
              k=j;  
            temp=person[k];person[k]=person[i];person[i]=temp;  
          }  
            printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
	        printf(" 姓名   學號     性別  班級   c語言成績   數學成績   英語成績   體育成績   思修成績   總分      平均分\n"); 
            for(i=0;i<n-1;i++)  
            {
                printf("%s %s %s %s %f %f %f %f %f %f %f\n",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);
            }
                
            fclose(fp);   
        } 
    		if(m == '7')
		{
		        printf("您是否返回上一級選單?y/n");
	        if(getch() == 'y')
			{
                return 0;
			}
            if(getch() == 'n')
			{    
		        system("cls");
		        return 0;
			}
		}
        fclose(fp); 
        system("pause");     
	    return 0;
}

int Delete()
{
    system("cls");
	printf("若不知道刪除學生的學號,請先進入查詢系統查詢學生學號!\n");
	student person[200];
    FILE *fp1;  
    char s[10];  
    int i=0,n=0;  
	fp1=fopen("studata.txt","r");
    if(fp1==NULL)                  //以2進位制方式讀取檔案資訊//  
    {  
       printf("cannot open the files\n");  
       system("pause");  
       return -1;  
    }  
    while(fscanf(fp1,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,&person[i].c,&person[i].math,&person[i].english,&person[i].PE,&person[i].politics,&person[i].all,&person[i].average)!=EOF)
    {    
             i++;
             n=n+1;
    } 
    fclose(fp1);      
    printf("學生學號:");  
    scanf("%s",s);  
    i=0;
    while(strcmp(person[i].num,s)!=0 && i<n)
    {
         i++;
    }                           //進行比較找到所需要的資訊  
    if(i==n)  
    {  
        printf("通訊錄中沒有此人!\n"); 
		system("pause");
        return 1;  
    }  
    else{  
    FILE *fin,*ftp;
    fin=fopen("studata.txt","r");//讀開啟原檔案
    ftp=fopen("tmp.txt","w");//寫開啟臨時檔案
    if(fin==NULL || ftp==NULL){
        printf("Open the file failure...\n");
        exit(0);
    }
    int kk=0;
    while(kk<n) //從原檔案讀取一行
    {
        if(strcmp(person[kk].num,s) != 0)//檢驗是否是要刪除的行
        {
           fprintf(fp1,"%s%s%s%s%f%f%f%f%f%f%f",person[i].name,person[i].num,person[i].sex,person[i].banji,person[i].c,person[i].math,person[i].english,person[i].PE,person[i].politics,person[i].all,person[i].average);//不是則將這一行寫入臨時檔案tmp.txt
        }
       kk++;    
    }        
    fclose(fin);
    fclose(ftp);
	rename("studata.txt","backups.txt");//將原檔案修改為備份檔案
    rename("tmp.txt","studata.txt");//將臨時檔名改為原檔名
    printf("刪除成功!") ; 
	system("pause");
} 
	return 0;
}

int Undelete()
{
    system("cls");
    printf("您是否要恢復備份?y/n");
    if(getch() == 'n')
{
    return 0;
}
if(getch() == 'y')
{
    rename("studata.txt","tmp.txt");
	rename("backups.txt","studata.txt");
    rename("tmp.txt","backups.txt");
	printf("恢復成功!"); 
}
}

int main()
{
char select;
while(1)//迴圈執行功能選單
{
system("cls");//清屏
printf("* * * * * * * * * * * * * * * * * * *學生成績管理系統選單 * * * * * * * * * * * * * * * * * * * *\n");
printf("*                                        1. 輸入資料                                            *\n");
printf("*                                        2. 顯示資料                                            *\n");
printf("*                                        3. 修改資料                                            *\n");
printf("*                                        4. 查詢資料                                            *\n");
printf("*                                        5. 新增資料                                            *\n");
printf("*                                        6. 排序資料                                            *\n");
printf("*                                        7. 刪除資料                                            *\n");
printf("*                                        8. 恢復刪除                                            *\n");
printf("*                                        9. 退出                                                *\n");
printf("*                                       請選擇 1 - 9                                            *\n");
printf("*                                                                                               *\n");
printf("*version:2.0                                                             Program author:moonfish*\n");
printf("* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n");
select = getch();
if(select == '9')
{
    printf("您真的要退出嗎?y/n");
if(getch() == 'n')
{
    main();
}
if(getch() == 'y')
{
    printf("\n謝謝使用:)");
	exit(0);//退出程式
}
}
else switch(select)
{
case '1': Input()    ;break;
case '2': Display()  ;break;
case '3': Modify()   ;break;
case '4': Find()     ;break;
case '5': Add()      ;break;
case '6': Sort()     ;break;
case '7': Delete()   ;break;
case '8': Undelete() ;break;
}
}
return 0 ;
}