C語言課時設計--學生信息管理

                                               學生成績信息系統

今天要寫的這篇博客是關於大一期間的c語言課時設計,那個時候對於程序的編寫能力真是太差了,現在自己去翻這篇學生成績管理系統都覺得特別難看,但是應某個同學的邀請,還是把這篇博客寫出來,希望給剛入門的同學一個好的指導。

對於c語言來說是很多大佬都會推薦的初學者最適合學習的語言,因爲他的很多語法規範還是比教容易掌握的,在這裏我們就從各種語法上來說一下這個學生成績管理系統所用到的語法結構(接下來你看到的這個程序是沒有進行重構和文件類型的操作的,重構將會在之後的博客中寫到)

1.我們先來看一下主界面,我選擇了藍色,看起來還不錯,從主界面的菜單我們大致可以看出來這個程序的具體功能:登記、刪除、查詢、修改、顯示、排序、統計、排序、保存、選分以及系統信息的操作

實現也很容易,寫幾條printf語句就ok了

void menu() 
{ 
system("color 3f");//背景顏色爲藍色
printf("   *********************************************************************************\n"); 
printf("   *\t1登記學生資料\t\t\t\t\t2刪除學生資料\t\t   *\n"); 
printf("   *\t3查詢學生資料\t\t\t\t\t4修改學生資料\t\t\   *\n"); 
printf("   *\t5顯示學生資料\t\t\t\t\t6統計學生資料\t\t   *\n"); 
printf("   *\t7排序語文成績\t\t\t\t\t8排序數學成績\t\t   *\n");
printf("   *\t9排序英語成績\t\t\t\t\t10選出分段分數\t\t   *\n");
printf("   *\t11保存學生資料\t\t\t\t\t12系統信息\t\t   *\n");
printf("   *\t0退出系統\t\t\t\t\t\t\t\t   *\n "); 
printf("   *********************************************************************************\n");
} 

效果如下:

2.然後就是各項功能了,我們從登記開始(需要注意的是:設置學生性別,總不能可以爲人妖吧,另外成績不可能爲負,也不可能超過100,然後就是學號的設置,不能位數太多,在代碼中都有註釋,所以不在這裏一一展開,僅作提醒內容。):

oid Add(Link l)   {                                    // 增加學生資料  
    Node *p,*r,*s; 
    char num[10];                                       //限制學號長度 
	r=l;
    s=l->next; 
    while(r->next!=NULL) 
    r=r->next;                                           //將指針置於最末尾
	printf("\n\t\t\t====================添加學生資料====================\n\n");                                         
while(1)  { 
    printf("請你輸入學號(以'0'返回上一級菜單:)"); 
    scanf("%s", num); 
    if(strcmp(num,"0")==0) 
    
    break; 
    while(s) 
	   { 
       if(strcmp(s->data.num,num)==0)  { 
            printf("=====>提示:學號爲'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);  
            printstart(); 
            printc(); 
            printe(s); 
            printstart(); 
            printf("\n"); 
            return; 
            } 
        s=s->next; 
        } 
        
p=(Node *)malloc(sizeof(Node));
	int count; 
    strcpy(p->data.num,num);
	printf("請你輸入姓名:");                                    //輸入姓名 
    scanf("%s",p->data.name); 
    getchar(); 
    printf("請你輸入性別:");                                                            //輸入性別 
    scanf("%s",p->data.sex);
    
	count=0;
while(strcmp(p->data.sex,"男")!=0 && strcmp(p->data.sex,"女")!=0)
       { 
	      count++;
	      printf ("您的輸入有誤\n");
	      printf ("請您重新輸入性別:\n" );
	      scanf("%s",p->data.sex);
	      if(count==3)
	      return;
       } 
    
    getchar(); 
    printf("請你輸入語文成績:");                               //輸入語文成績 
    scanf("%d",&p->data.cgrade); 
    
    count=0;
while(p->data.cgrade<0 || p->data.cgrade>100){ 
	       count++;
	       printf ("您的輸入有誤\n");
	       printf ("請您重新輸入語文成績:\n" );
	       scanf("%d",&p->data.cgrade);
	       if(count==3) 
		        return;
    } 
    
    getchar(); 
    printf("請你輸入數學成績:");                                //輸入數學成績 
    scanf("%d",&p->data.mgrade); 
while(p->data.mgrade<0 || p->data.mgrade>100){ 
	       count++;
	       printf ("您的輸入有誤\n");
	       printf ("請您重新輸入數學成績:\n" );
	       scanf("%d",&p->data.mgrade);
	       if(count==3) 
		        return;
    } 
    getchar(); 
    printf("請你輸入英語成績:");                                 //輸入英語成績 
    scanf("%d",&p->data.egrade); 
while(p->data.egrade<0 || p->data.egrade>100){ 
	        count++;
	        printf ("您的輸入有誤\n");
	        printf ("請您重新輸入英語成績:\n" );
	        scanf("%d",&p->data.egrade);
	        if(count==3) 
			    return;
    } 
    getchar(); 
    p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;   //計算總成績 
    p->data.ave=p->data.totle / 3;                                // 計算平均成績 

//信息輸入已經完成    

    p->next=NULL; 
    r->next=p; 
    r=p; 
    shoudsave=1; 
} 
} 

效果如下:

下一步便是統計了,在統計中實現的功能便是最高分是誰,某一科的最高分是誰,平均分最高分是誰:

void Tongji(Link l)  {                                        //統計學生資料 

    Node *pm,*pe,*pc,*pt,*pa;                                     //用於指向分數最高的接點 
    Node *r=l->next;
	printf("\n\t\t\t====================統計學生資料====================\n\n");  
        if(!r)  
         {   
            printf("\n=====>提示:沒有資料可以統計!\n");
			printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");  
            return ;   
         }   
         pm=pe=pc=pt=pa=r;   
          while(r!=NULL)  
           {   
            if(r->data.cgrade>=pc->data.cgrade)  
            pc=r;   
            if(r->data.mgrade>=pm->data.mgrade) 
            pm=r;   
            if(r->data.egrade>=pe->data.egrade)  
            pe=r;   
            if(r->data.totle>=pt->data.totle)  
            pt=r;   
            if(r->data.ave>=pa->data.ave)  
            pa=r;       
            r=r->next;  
           }   
        printf("\n\n------------------------------統計結果--------------------------------\n");  
        printf("\t\t\t總分最高者:\t%s   %d分\n",pt->data.name,pt->data.totle);  
        printf("\t\t\t平均分最高者:\t%s   %d分\n",pa->data.name,pa->data.ave);    
        printf("\t\t\t英語最高者:\t%s   %d分\n",pe->data.name,pe->data.egrade);  
        printf("\t\t\t數學最高者:\t%s   %d分\n",pm->data.name,pm->data.mgrade);  
        printf("\t\t\t語文最高者:\t%s   %d分\n",pc->data.name,pc->data.cgrade);  
        printstart(); 
	 printf("\n\n\n已爲您返回主菜單,請選擇你要進行的操作:\n\n\n");	 
}   

效果如下:

再往後的代碼就不在一一展示,只放一下運行效果圖:

查找的效果圖如下(請注意,可以分爲學號查找和姓名查找):

顯示學生信息效果如下:

保存學生信息效果如下:

修改學生信息效果如下:

按分數段選擇學生效果如下:

當然除了這些還有就是排序,排序在這裏不在放效果圖。

總之,有心的小夥伴會發現整個都是用鏈表在起作用,也就是沒有放在文件中,這就會導致程序關閉之後無法保存數據,再次打開就沒有了,那怎麼樣處理呢,其實比較簡單,把錄入的數據存入文件中即可,在這裏不在演示。有興趣的小夥伴可以私下交流。

最後看一下我的整個代碼:

#include "stdio.h"
#include "stdlib.h" 
#include "string.h" 
int shoudsave=0;
//學生資料結構體 

struct student 
{ 
char num[15];                             // 學號 
char name[20];                            // 姓名 
char sex[4];                              // 性別  
int cgrade;                               // 語文成績 
int mgrade;                               // 數學成績     
int egrade;                               // 英語成績 
int totle;                                // 總分 
int ave;                                  //平均分 
char neartime[10];                        //最近更新時間
}; 

typedef struct node 
 {  
struct student data;
 
struct node  *next; 
}
Node,* Link;

void menu() 
{ 
system("color 3f");
printf("   *********************************************************************************\n"); 
printf("   *\t1登記學生資料\t\t\t\t\t2刪除學生資料\t\t   *\n"); 
printf("   *\t3查詢學生資料\t\t\t\t\t4修改學生資料\t\t\   *\n"); 
printf("   *\t5顯示學生資料\t\t\t\t\t6統計學生資料\t\t   *\n"); 
printf("   *\t7排序語文成績\t\t\t\t\t8排序數學成績\t\t   *\n");
printf("   *\t9排序英語成績\t\t\t\t\t10選出分段分數\t\t   *\n");
printf("   *\t11保存學生資料\t\t\t\t\t12系統信息\t\t   *\n");
printf("   *\t0退出系統\t\t\t\t\t\t\t\t   *\n "); 
printf("   *********************************************************************************\n");
} 
// 分割線 顯示 
void printstart()
    { 
     printf("----------------------------------------------------------------------------\n");
    } 
 //報錯顯示 
void Wrong() 
    { 
     printf("\n\t\t\t====================錯誤提示====================\n\n\a");
     printf("\n=====>提示:輸入錯誤!\n");
     printf("\n=====>提示:請選擇其他操作(“0”退出系統):\n\n");
    }
//找不到數據表示 
void Nofind()
    {
	 printf("\n\t\t\t====================錯誤提示====================\n\n\a"); 
     printf("\n=====>提示:沒有找到該學生!\n");
	 printf("\n=====>提示:請選擇其他操作(“0”退出系統):\n\n"); 
    } 
//輸出表格項目內容 
void printc()  
     { 
      printf("學號\t       姓名\t性別 語文成績 數學成績 英語成績 總分 平均分\n"); 
     } 
//輸出學生相應數據 
void printe(Node *p)
     { 
      printf("%-15s%s\t%s\t%d\t%d\t%d\t%d\t%d\n",p->data.num,p->data.name,p->data.sex,p->data.cgrade,p->data.mgrade,p->data.egrade,p->data.totle,p->data.ave); 
     } 
// 定位鏈表中符合要求的接點,並返回該指針
Node* Locate(Link l,char findmess[],char nameornum[] )
{
      Node *r; 
      if(strcmp(nameornum,"num")==0) {                         //按學號查詢 
        r=l->next; 
        while(r!=NULL) 
        { 
          if(strcmp(r->data.num,findmess)==0) 
          return r; 
          r=r->next; 
        } 
    } 
         else if(strcmp(nameornum,"name")==0)                   //按姓名查詢
        {  
           r=l->next; 
           while(r!=NULL)  { 
               if(strcmp(r->data.name,findmess)==0) 
                return r; 
                r=r->next; 
             } 
        }           
return 0   ; 
}
void Add(Link l)   {                                    // 增加學生資料  
    Node *p,*r,*s; 
    char num[10];                                       //限制學號長度 
	r=l;
    s=l->next; 
    while(r->next!=NULL) 
    r=r->next;                                           //將指針置於最末尾
	printf("\n\t\t\t====================添加學生資料====================\n\n");                                         
while(1)  { 
    printf("請你輸入學號(以'0'返回上一級菜單:)"); 
    scanf("%s", num); 
    if(strcmp(num,"0")==0) 
    
    break; 
    while(s) 
	   { 
       if(strcmp(s->data.num,num)==0)  { 
            printf("=====>提示:學號爲'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);  
            printstart(); 
            printc(); 
            printe(s); 
            printstart(); 
            printf("\n"); 
            return; 
            } 
        s=s->next; 
        } 
        
p=(Node *)malloc(sizeof(Node));
	int count; 
    strcpy(p->data.num,num);
	printf("請你輸入姓名:");                                    //輸入姓名 
    scanf("%s",p->data.name); 
    getchar(); 
    printf("請你輸入性別:");                                                            //輸入性別 
    scanf("%s",p->data.sex);
    
	count=0;
while(strcmp(p->data.sex,"男")!=0 && strcmp(p->data.sex,"女")!=0)
       { 
	      count++;
	      printf ("您的輸入有誤\n");
	      printf ("請您重新輸入性別:\n" );
	      scanf("%s",p->data.sex);
	      if(count==3)
	      return;
       } 
    
    getchar(); 
    printf("請你輸入語文成績:");                               //輸入語文成績 
    scanf("%d",&p->data.cgrade); 
    
    count=0;
while(p->data.cgrade<0 || p->data.cgrade>100){ 
	       count++;
	       printf ("您的輸入有誤\n");
	       printf ("請您重新輸入語文成績:\n" );
	       scanf("%d",&p->data.cgrade);
	       if(count==3) 
		        return;
    } 
    
    getchar(); 
    printf("請你輸入數學成績:");                                //輸入數學成績 
    scanf("%d",&p->data.mgrade); 
while(p->data.mgrade<0 || p->data.mgrade>100){ 
	       count++;
	       printf ("您的輸入有誤\n");
	       printf ("請您重新輸入數學成績:\n" );
	       scanf("%d",&p->data.mgrade);
	       if(count==3) 
		        return;
    } 
    getchar(); 
    printf("請你輸入英語成績:");                                 //輸入英語成績 
    scanf("%d",&p->data.egrade); 
while(p->data.egrade<0 || p->data.egrade>100){ 
	        count++;
	        printf ("您的輸入有誤\n");
	        printf ("請您重新輸入英語成績:\n" );
	        scanf("%d",&p->data.egrade);
	        if(count==3) 
			    return;
    } 
    getchar(); 
    p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;   //計算總成績 
    p->data.ave=p->data.totle / 3;                                // 計算平均成績 

//信息輸入已經完成    

    p->next=NULL; 
    r->next=p; 
    r=p; 
    shoudsave=1; 
} 
} 
void Qur(Link l)  {                                         //查詢學生資料 
    int sel; 
    char findmess[20];                                        //定義findmess數組 
    Node *p; 
    printf("\n\t\t\t====================查找學生資料====================\n\n"); 
    if(!l->next) 
       { 
         printf("\n=====>提示:沒有資料可以查詢!\n");
		 printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n"); 
         return ;  
       } 
    printf("\n=====>1按學號查找\n=====>2按姓名查找\n"); 
    scanf("%d",&sel); 
    if(sel==1)                                            //判斷選擇的查詢方式爲學號查詢 
      { 
        printf("請你輸入要查找的學號:"); 
        scanf("%s",findmess);                                 
        p=Locate(l,findmess,"num"); 
           if(p) 
            { 
              printf("\t\t\t\t查找結果\n"); 
              printstart(); 
              printc(); 
              printe(p); 
              printstart(); 
            } 
            else 
            Nofind(); 
      } 
    else if(sel==2)                                          //判斷選擇的查詢方式爲姓名查詢 
      { 
        printf("請你輸入要查找的姓名:"); 
        scanf("%s",findmess); 
        p=Locate(l,findmess,"name");  
            if(p) 
			  { 
               printf("\t\t\t\t查找結果\n"); 
               printstart(); 
               printc(); 
               printe(p); 
               printstart(); 
              } 
            else 
            Nofind(); 
      } 
    else 
    Wrong();
    printf("\n\n\n已爲您返回主菜單,請選擇你要進行的操作(“0”可退出系統):\n\n\n");
    
    
    
}  
void Del(Link l)     {                                           // 刪除學生資料 
      
    int sel; 
    Node *p,*r; 
    printf("\n\t\t\t====================刪除學生資料====================\n\n"); 
    char findmess[20]; 
        if(!l->next) 
           { 
             printf("\n=====>提示:沒有資料可以刪除!\n");
             printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");
             return; 
           } 
        printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n\n\n"); 
        scanf("%d",&sel); 
            if(sel==1) 
			 {
              printf("請你輸入要刪除的學號:"); 
              scanf("%s",findmess); 
              p=Locate(l,findmess,"num"); 
                if(p) 
                   { 
                    r=l; 
                    while(r->next!=p) 
                    r=r->next; 
                    r->next=p->next; 
                    free(p);
                    printf("\n=====>提示:該學生已經成功刪除!\n");  
                    shoudsave=1;  
                   }  
                else   
                Nofind();   
             }   
            else if(sel==2)  
             {   
               printf("請你輸入要刪除的姓名:");  
               scanf("%s",findmess);   
               p=Locate(l,findmess,"name");  
                if(p) 
                   { 
                    r=l; 
                    while(r->next!=p) 
                    r=r->next; 
                    r->next=p->next; 
                    free(p);
                    printf("\n=====>提示:該學生已經成功刪除!\n");  
                    shoudsave=1;  
                   }  
                else   
                Nofind();   
             }   
            else  
            Wrong();  
} 
void Modify(Link l)     {                                          //修改學生資料 
  
    Node *p;  
    char findmess[20]; 
    printf("\n\t\t\t====================修改學生資料====================\n\n"); 
       if(!l->next) 
         { 
           printf("\n=====>提示:沒有資料可以修改!\n"); 
           printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");
           return; 
         } 
            printf("請你輸入要修改的學生學號:"); 
            scanf("%s",findmess); 
            p=Locate(l,findmess,"num"); 
              if(p) 
               {   
                 printf("請你輸入新學號(原來是%s):",p->data.num);  
                 scanf("%s",p->data.num);   
                 printf("請你輸入新姓名(原來是%s):",p->data.name);  
                 scanf("%s",p->data.name);  
                 getchar();   
                 printf("請你輸入新性別(原來是%s):",p->data.sex);  
                 scanf("%s",p->data.sex);   
                 printf("請你輸入新的語文成績(原來是%d分):",p->data.cgrade);  
                 scanf("%d",&p->data.cgrade);  
                 getchar();   
                 printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade);  
                 scanf("%d",&p->data.mgrade);  
                 getchar();   
                 printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);  
                 scanf("%d",&p->data.egrade);   
                 p->data.ave=p->data.totle/3;   
                 printf("\n=====>提示:資料修改成功!\n\n");
				 printf("\n=====>請從下面的主菜單中繼續執行操作:(“0”可退出系統):\n\n");  
                 shoudsave=1;  
                } 
               else   
               Nofind();   
}    
void Disp(Link l)  {                                                 //顯示學生資料 
   
    int count=0;  
    Node *p;  
    p=l->next;
	printf("\n\t\t\t====================顯示學生資料====================\n\n");   
    if(!p)  
      {   
        printf("\n=====>提示:沒有資料可以顯示!\n");
		printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");  
        return;  
      }   
        printf("\n\n\t\t\t\t顯示結果\n");  
        printstart();  
        printc();  
        printf("\n");  
     while(p)  
        {   
           printe(p);  
           p=p->next;  
        }   
     printstart();  
     printf("\n");  
     printf("\n\n已爲您返回主菜單,請選擇你要進行的操作:\n\n\n");
}    
void Tongji(Link l)  {                                        //統計學生資料 

    Node *pm,*pe,*pc,*pt,*pa;                                     //用於指向分數最高的接點 
    Node *r=l->next;
	printf("\n\t\t\t====================統計學生資料====================\n\n");  
        if(!r)  
         {   
            printf("\n=====>提示:沒有資料可以統計!\n");
			printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");  
            return ;   
         }   
         pm=pe=pc=pt=pa=r;   
          while(r!=NULL)  
           {   
            if(r->data.cgrade>=pc->data.cgrade)  
            pc=r;   
            if(r->data.mgrade>=pm->data.mgrade) 
            pm=r;   
            if(r->data.egrade>=pe->data.egrade)  
            pe=r;   
            if(r->data.totle>=pt->data.totle)  
            pt=r;   
            if(r->data.ave>=pa->data.ave)  
            pa=r;       
            r=r->next;  
           }   
        printf("\n\n------------------------------統計結果--------------------------------\n");  
        printf("\t\t\t總分最高者:\t%s   %d分\n",pt->data.name,pt->data.totle);  
        printf("\t\t\t平均分最高者:\t%s   %d分\n",pa->data.name,pa->data.ave);    
        printf("\t\t\t英語最高者:\t%s   %d分\n",pe->data.name,pe->data.egrade);  
        printf("\t\t\t數學最高者:\t%s   %d分\n",pm->data.name,pm->data.mgrade);  
        printf("\t\t\t語文最高者:\t%s   %d分\n",pc->data.name,pc->data.cgrade);  
        printstart(); 
	 printf("\n\n\n已爲您返回主菜單,請選擇你要進行的操作:\n\n\n");	 
}   
void Chinese(Link l)  {                                      //按語文成績排序 
   
    Node *p,*q;
    p=q=l->next;
    struct student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序語文成績====================\n\n");
        if(l->next==NULL)
		{
	       printf("\n=====>沒有數據可以顯示!!!\n");
	       printf("\n=====>選擇其他操作(“0”退出系統):\n\n\n");
	       return; 
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].cgrade<demo[k+1].cgrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已經完成!\n");
		 printf("\n=====>請按“5”查看排序結果(“0”退出系統):\n\n");
		 
} 
void Maths(Link l)      {                                        //按數學成績排序 

    Node *p,*q;
    p=q=l->next;
    student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序數學成績====================\n\n");
        if(l->next==NULL)
		{
	        printf("\n=====>沒有數據可以顯示!!!\n");
	        printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n");
			return; 
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].mgrade<demo[k+1].mgrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已經完成!\n");
		 printf("\n=====>請按“5”查看排序結果(“0”退出系統):\n\n");
 } 
 
 
 
void  English(Link l)      {                         //按英語成績排序 
    Node *p,*q;
    p=q=l->next;
    student flag,demo[100];
    int i=0,j = 0;
    printf("\n\t\t\t====================排序英語成績====================\n\n");
        if(l->next==NULL)
		{ 
	        printf("\n=====>沒有數據可以顯示!!!\n");
	        printf("\n=====>沒請選擇其他操作(“0”退出系統):\n\n\n");
	         return;
        }
while(1){
	demo[i] = p->data;
	i++;
	if(p->next==NULL)break;
	else
	p  = p->next;
}
for(j = i-1;j>0;j--){
	for(int k = 0;k<j;k++)
	{
		if(demo[k].egrade<demo[k+1].egrade){
			flag = demo[k];
			demo[k] = demo[k+1];
			demo[k+1] = flag;
		}
	}
}
j = 0;
while(1){
	q->data = demo[j];
	j++;
	if(q->next==NULL)break;
	else
	q = q->next;
}
         printf("\n=====>提示:排序已經完成!\n");
		 printf("\n=====>請按“5”查看排序結果(“0”退出系統):\n\n");
} 




void select(Link l) {                                                        //按分數段選學生 
    int i; 
    int j,k; 
    Node *pc =  l;                                           
    Node *r=l->next;                                                         //用於指向分數最高的接點 
	printf("\n\t\t\t====================選出分段分數====================\n\n");
        if(!r)  
          {  
            printf("\n=====>提示:沒有資料可以篩選!\n");
			printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n"); 
            return ; 
          } 
          printf("輸入課程名1.語文2.數學3.英語"); 
          scanf("%d",&i); 
        if(i==1) 
           { 
            printf("請輸入篩選分數的上限(搜索內容將不包括上限):"); 
            scanf("%d",&j); 
            printf("請輸入篩選分數的下限(搜索內容將不包括下限):"); 
            scanf("%d",&k); 
 
 printf("------------------------------篩選結果-----------------------------------------------------------\n"); 
 printc(); 
 printstart(); 
           while(r!=NULL) 
             { 
             
               if(k<=(r->data.cgrade)&&(r->data.cgrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
       else if(i==2) 
          { 
            printf("請輸入篩選分數的上限:"); 
            scanf("%d",&j); 
            printf("請輸入篩選分數的下限:"); 
            scanf("%d",&k); 
 
 printf("------------------------------篩選結果-----------------------------------------------------------\n"); 
 printc(); 
 printstart(); 
 
           while(r!=NULL) 
             { 
               if(k<=(r->data.mgrade)&&(r->data.mgrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
        else if(i==3) 
         { 
            printf("請輸入篩選分數的上限:"); 
            scanf("%d",&j); 
            printf("請輸入篩選分數的下限:"); 
            scanf("%d",&k); 
 
 printf("------------------------------篩選結果-----------------------------------------------------------\n"); 
 printc();  
 printstart(); 
           while(r!=NULL) 
             { 
               if(k<=(r->data.egrade)&&(r->data.egrade)<j) 
               printe(r); 
               r=r->next; 
             } 
          } 
        else  
        Wrong();
} 
void Save(Link l)  {
 
    FILE* fp;  
    Node  *p;  
    int flag=1,count=0; 
	printf("\n\t\t\t====================保存學生資料====================\n\n"); 
    fp=fopen("d:\\student","wb"); 
    if(fp==NULL) 
     { 
        printf("\n=====>提示:重新打開文件時發生錯誤!\n");
		exit(1); 
     } 
        p=l->next; 
        while(p) 
        { 
            if(fwrite(p,sizeof(Node),1,fp)==1)
              { 
                 p=p->next; count++; 
			  } 
            else
              {     
                 flag=0; break; 
              } 
        } 
        if(flag) 
        { 
        printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
		printf("\n=====>請選擇其他操作(“0”退出系統):\n\n\n"); 
        shoudsave=0; 
        }
 
        fclose(fp); 
} 
int main() {  

    Link l;                                                                          // 引用鏈表 
    FILE *fp;                                                                        //引入文件指針 
    int sel;  
    char ch; 
    int count=0; 
    Node *p,*r; 
    printf("\n\t\t\t\t學生成績管理系統\n \n"); 
    l=(Node*)malloc(sizeof(Node)); 
    l->next=NULL; 
	r=l;   
    fp=fopen("C:\\student","wb"); 
    while(1){
    	menu();  
    printf("請你選擇操作:"); 
    scanf("%d",&sel); 
      if(sel==0) 
       { 
         if(shoudsave==1) 
         {
           getchar(); 
           printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n) \n"); 
           scanf("%c",&ch); if(ch=='y'||ch=='Y') 
           Save(l); 
         } 
		system("cls");
		system("color 3f");
		printf("\n\t\t\t====================退出系統====================\n");
        printf("\n=====>提示:你已經退出系統,再見!\n"); 
        return 0; 
} 
switch(sel)                                                      //選擇所要執行的操作 
{ 
case 1:
       system("cls");system("color 3f");Add(l);break;                                             
case 2:
       system("cls");system("color 3f");Del(l);break;                                               
case 3:
       system("cls");system("color 3f");Qur(l);break;                   // goto loop;                           
case 4:
       system("cls");system("color 3f");Modify(l);break;                                          
case 5:
       system("cls");system("color 3f");Disp(l);break;                                            
case 6:
       system("cls");system("color 3f");Tongji(l);break;                                            
case 7:
       system("cls");system("color 3f");Chinese(l);break;                                           
case 8:
       system("cls");system("color 3f");Maths(l);break;                                             
case 9:
       system("cls");system("color 3f");English(l);break;                                           
case 10:
       system("cls");system("color 3f");select(l);break;                                          
case 11:
       system("cls");system("color 3f");Save(l);break;                                             
case 12:
system("cls");system("color 3f");
printf("\n\t\t\t====================系統信息====================\n\n");
printf("  本程序由XX公司技術人員開發,經歷了漫長的調試期和變態到無語的修bug期,終於在今天與廣大用戶見面\n本着方便用戶的原則,我們在頁面上下了很多功夫,希望在您的使用過程中,能達到您的滿意\n以下是我們產品的一些信息:\n");
printf("\n\t\t程序開發者:秦飛陽  \t\t技術顧問:張志遠 \n");
printf("\n\t\t頁面菜單設計者:秦飛陽  \t所屬公司:計算機科學與技術3班 \n");
printf("\n\t\t版本信息:V-step1.0  \t\t序列號:00001 \n");
printf("\n\t\t編譯日期:2017.9.10  \t\t最近更新:2017.9.13\n");
printf("\n\t\t程序適用:學生信息的增加、修改、刪除、保存,學生成績的統計、顯示\n");
printf("\n\t\t其他功能:按學生某項成績將學生信息排序以及對學生信息的定區間摘取\n");
printf("\n=====>請選擇其他操作(“0”退出系統):\n\n");break;  
default:  
        system("cls");system("color 3f");Wrong();getchar();break;

}
	}
return 0;
} 

這些代碼完全是可以拿過來直接運行的,功能相對來說比較簡單,但是對於一般學校的要求,及格是肯定夠的,但是我還是想對大家說一句,不要抄,自己敲一遍代碼也是好的,一定要懂每一步的意思。

如有不合適的地方,還請指正。

 

 

 

 

 

 

                   

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章