C語言實現簡易學生管理系統

本文實例為大傢分享瞭C語言實現學生管理系統的具體代碼,供大傢參考,具體內容如下

首先我們在做一個管理系統之前要瞭解這個學生管理系統需要哪些功能,如:簡單的增,刪,改,查,即:錄入成績,查詢成績,刪除成績,修改成績,插入成績,這幾個是基本要包括的,當然我們也可以加上排序,統計學生人數,這些功能。

當清楚需要哪些功能之後我們就可以寫系統的界面瞭。

效果圖如下:

 printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.錄入成績\t\t\t\n");
      printf("\t\t\t2.查詢成績\t\t\t\n"); 
      printf("\t\t\t3.刪除成績\t\t\t\n");
      printf("\t\t\t4.修改成績\t\t\t\n");
      printf("\t\t\t5.插入成績\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.統計學生人數\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t選擇(0---7)\t\t\t"); 

接著我們就可以加入switch函數進行功能選擇

定義整型變量choice 

int  choice ;
       scanf("%d",&choice );
     switch(choice )
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//錄入 
         case 2: show();system("pause");system("cls");break;//查詢 
         case 3: del();save();system("pause");system("cls");break;//刪除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//統計 
         default:printf("\n輸入錯誤,請輸入0---7\n\n");system("pause");system("cls");break;
    
     }

定義一個Menu函數把上面兩個結合起來,我們加一個while循環讓這個這個菜單一直循環出現,而不是用一次就沒瞭。

void Menu()//菜單
 
{   while(1)
    {
      printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.錄入成績\t\t\t\n");
      printf("\t\t\t2.查詢成績\t\t\t\n"); 
      printf("\t\t\t3.刪除成績\t\t\t\n");
      printf("\t\t\t4.修改成績\t\t\t\n");
      printf("\t\t\t5.插入成績\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.統計學生人數\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t選擇(0---7)\t\t\t"); 
       int  chioce;
       scanf("%d",&chioce);
     switch(chioce)
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//錄入 
         case 2: show();system("pause");system("cls");break;//查詢 
         case 3: del();save();system("pause");system("cls");break;//刪除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//統計 
         default:printf("\n輸入錯誤,請輸入0---7\n\n");system("pause");system("cls");break;
    
     }
  }
}

寫完菜單之後我們就要對“學生”這個數據進行分析

在這個系統中學生的信息要包含那些東西,舉個例子:學號,姓名,選修課成績,實驗課成績,必修課成績,總成績,平均成績。然後根據這些寫一個結構體(我寫的是數組類型的結構體)

struct student
{
   char num[20];//學號 
   char name[20];//姓名 
   float elec;//選修課 
   float expe;//實驗課 
  float requ;//必修課 
   float sum;//總成績 '
   float ave;//平均成績 
}student[N];

接著我們開始寫實現這個系統功能的函數

第一個就是成績的錄入

void in()//錄入信息 
    {
    void save() ;
        int i,n;
        printf("輸入錄取學生的數量\n");
        scanf("%d", &n);
        for (i=1 ; i<=n; i++)
        {   printf("請輸入第%d位學生學號:\n",i);
            scanf("%s",student[i].num);
            printf("請輸入第%d位學生姓名:\n", i );
            scanf("%s",student[i].name);
            printf("請輸入第%d位學生選修課成績:\n", i );
            scanf("%f",&student[i].elec);
            printf("請輸入第%d位學生實驗成績:\n", i );
            scanf("%f", &student[i].expe);
            printf("請輸入第%d位學生必修課成績:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
             student[i].ave=student[i].sum /3;
          count++;
        } 
        printf("錄入成功\n");
    
    }

第二個就是成績的查詢

 void show() //查詢 
    {
        
        int i;
        char xh[20]; 
        printf("請輸入要查詢的學生學號:\n");
        getchar();
        gets(xh);
        for (i=0;i<N;i++) 
        {
            if(strcmp(student[i].num,xh)==0)//對比兩個字符串如果兩者一樣則進行if下面的的語句否則繼續循環
            printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave);
        }
    }

第三個就是成績的刪除

void del()//刪除 
{
    void save()   ;
    int j,a=0,k=count;
    char xh[25];
    printf("所要刪除的學生學號為:\n");
    scanf("%s",xh);
    flush(stdin);//緩沖區
    for (j=0;j<count;j++)
    {
        if (strcmp(student[j].num,xh)==0)
        {
            for (j=a;j<count;j++)
            student[j]=student[j+1];
            count--;
            if (count<k)
            printf("刪除成功\n");
        }
        a++;
    }
        if (j==count-1)
        printf("沒有你所要刪除的學生的信息\n");
 
}

第四項,成績的修改

步驟 1.先找到要修改的學生

        2.選擇修改的項目

        3.更改總成績和平均分

        4.顯示修改後的學生數據

void modify()//修改 
    {   void save()   ;
        int i,j,h;
        float score;
        char xh[20];     
        printf ("01.輸入修改的學生的學號:\n") ;
       scanf("%s",xh);
        for(i=1;i<N;i++)
        if (strcmp(student[i].num,xh)==0)
           j=i;
        printf("請選擇修改內容\n");
        printf("1.修改該學生的選修課成績\n");
        printf("2.修改該學生的實驗課成績\n");
        printf("3.修改該學生的必修課成績\n");
        scanf("%d",&h);
        switch (h) 
        {
            case 1:printf("請輸入該學生的選修課成績\n");scanf("%f",&score);student[j].elec=score; break;
            case 2:printf("請輸入該學生的實驗課成績\n");scanf("%f",&score);student[j].expe=score;break;
            case 3:printf("請輸入該學生的必修課成績\n");scanf("%f",&score);student[j].requ=score;break;
            default :printf("\n輸入錯誤,請輸入1---3\n\n"); break;
        } 
        student[j].sum = student[j].elec+student[j].expe + student[j].requ;
        printf("修改後為:\n");
        printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
   printf("\n");
        printf("修改成功\n") ;
    
   }

第五項,成績的插入

 void insert ()//插入 
{void save();
    int m, flag, i = count, j,k;
    printf("請輸入待添加的學生人數:\n");
    scanf("%d", &m);
    if (m > 0)
    {
        k=count+1;
    for(i=k;i<=count+m;i++)    
        {
            flag = 1;
            while (flag!= 0)
            {
                flag = 0;
                printf("請輸入第%d位學生的學號:\n", i);
                getchar();
                gets(student[i].num);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(student[i].num, student[j].num) == 0)
                    {
                        printf("該學號已存在,請重新輸入!\n");
                        flag = 1;
                        break;
                    }
                }
            }
            printf("請輸入第%d位學生姓名:\n", i );
            gets(student[i].name);
            printf("請輸入第%d位學生選修課成績:\n", i );
            scanf("%f",&student[i].elec);
            printf("請輸入第%d位學生實驗成績:\n", i );
            scanf("%f", &student[i].expe);
            printf("請輸入第%d位學生必修課成績:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
            student[i].ave=student[i].sum /3;
      }
        count+= m;
        printf("添加完成!\n");
        system("pause");
  
    }
}

第六項,排序

 void order()//排序 
     {    
        int i,j,m;
        for(j=1;j<=count-1;j++)
    {    m=j;
        for(i=j+1;i<=count;i++)
        {
        if(student[i].sum < student[m].sum)
        {
         student[0]=student[i];
          student[i]=student[m];
         student[m]=student[0];
       }
       }
    }
    for(j=1;j<=count;j++)
    {
          printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
  }                 
 } 

第七項,統計學生人數

void total ()//統計 
{
    printf("學生人數%d\n",count);
}

完整的代碼

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 100
struct student
{
   char num[20];//學號 
   char name[20];//姓名 
   float elec;//選修課 
   float expe;//實驗課 
  float requ;//必修課 
   float sum;//總成績 '
   float ave;//平均成績 
}student[N];
 
void Menu(); // 菜單 
void in();//錄入 
void show() ;//查找 
void order();//排序 
void del(); //刪除 
void modify();//修改 
void total ();//統計 
void insert ();//插入 
int count=0;//人數 
void save();//保存 
int main() 
{
    Menu();
    
    return 0; 
}
 
void Menu()//菜單
 
{   while(1)
    {
      printf("\t\t\t---------------STUDENT---------------\t\t\t\n");
      printf("\t\t\t0.退出\t\t\t\n");
      printf("\t\t\t1.錄入成績\t\t\t\n");
      printf("\t\t\t2.查詢成績\t\t\t\n"); 
      printf("\t\t\t3.刪除成績\t\t\t\n");
      printf("\t\t\t4.修改成績\t\t\t\n");
      printf("\t\t\t5.插入成績\t\t\t\n");
      printf("\t\t\t6.排序\t\t\t\n");
      printf("\t\t\t7.統計學生人數\t\t\t\n");
      printf("\t\t\t-------------------------------------\t\t\t\n"); 
      printf("\t\t\t選擇(0---7)\t\t\t"); 
       int  chioce;
       scanf("%d",&chioce);
     switch(chioce)
     {
         case 0:exit(0); break;
         case 1: in();save();system("pause");system("cls");break;//錄入 
         case 2: show();system("pause");system("cls");break;//查詢 
         case 3: del();save();system("pause");system("cls");break;//刪除 
         case 4: modify();system("pause");system("cls");break;//修改 
         case 5: insert();save();system("pause");system("cls");break;//插入 
         case 6: order();system("pause");system("cls");break;//排序 
         case 7: total();system("pause");system("cls");break;//統計 
         default:printf("\n輸入錯誤,請輸入0---7\n\n");system("pause");system("cls");break;
    
     }
  }
}
 
void save()  //保存 
{
    FILE* fp;
    char filename[100];
    int i;
    printf("請輸入要保存的文件名:\n");
    scanf("%s", filename);
    if ((fp = fopen(filename, "w")) == NULL)
    {
        printf("打開文件失敗!\n");
        exit(0);
    }
    for (i = 1; i<=count; i++)
    {
        if (fwrite(&student[i], sizeof(struct student), 1, fp) != 1)
            printf("保存失敗!\n");
    }
    printf("保存成功!\n");
    fclose(fp);
}
 
     void in()//錄入信息 
    {
    void save() ;
        int i,n;
        printf("輸入錄取學生的數量\n");
        scanf("%d", &n);
        for (i=1 ; i<=n; i++)
        {   printf("請輸入第%d位學生學號:\n",i);
            scanf("%s",student[i].num);
            printf("請輸入第%d位學生姓名:\n", i );
            scanf("%s",student[i].name);
            printf("請輸入第%d位學生選修課成績:\n", i );
            scanf("%f",&student[i].elec);
            printf("請輸入第%d位學生實驗成績:\n", i );
            scanf("%f", &student[i].expe);
            printf("請輸入第%d位學生必修課成績:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
             student[i].ave=student[i].sum /3;
          count++;
        } 
        printf("錄入成功\n");
    
    }

void modify()//修改 
    {   void save()   ;
        int i,j,h;
        float score;
        char xh[20];     
        printf ("01.輸入修改的學生的學號:\n") ;
       scanf("%s",xh);
        for(i=1;i<N;i++)
        if (strcmp(student[i].num,xh)==0)
           j=i;
        printf("請選擇修改內容\n");
        printf("1.修改該學生的選修課成績\n");
        printf("2.修改該學生的實驗課成績\n");
        printf("3.修改該學生的必修課成績\n");
        scanf("%d",&h);
        switch (h) 
        {
            case 1:printf("請輸入該學生的選修課成績\n");scanf("%f",&score);student[j].elec=score; break;
            case 2:printf("請輸入該學生的實驗課成績\n");scanf("%f",&score);student[j].expe=score;break;
            case 3:printf("請輸入該學生的必修課成績\n");scanf("%f",&score);student[j].requ=score;break;
            default :printf("\n輸入錯誤,請輸入1---3\n\n"); break;
        } 
        student[j].sum = student[j].elec+student[j].expe + student[j].requ;
        printf("修改後為:\n");
        printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
   printf("\n");
        printf("修改成功\n") ;
    
   }
 
      void show() //查詢 
    {
        
        int i;
        char xh[20]; 
        printf("請輸入要查詢的學生學號:\n");
        getchar();
        gets(xh);
        for (i=0;i<N;i++) 
        {
            if(strcmp(student[i].num,xh)==0)
            printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[i].num,student[i].name,student[i].elec,student[i].expe,student[i].requ,student[i].sum,student[i].ave);
        }
    }
     
 void order()//排序 
     {    
        int i,j,m;
        for(j=1;j<=count-1;j++)
    {    m=j;
        for(i=j+1;i<=count;i++)
        {
        if(student[i].sum < student[m].sum)
        {
         student[0]=student[i];
          student[i]=student[m];
         student[m]=student[0];
       }
       }
    }
    for(j=1;j<=count;j++)
    {
          printf("\n學號:%-5s  姓名:%-5s  選修課成績:%-5.1f  實驗課成績:%-5.1f  必修課成績:%-5.1f  總分:%-5.1f  平均分:%-5.1f\n",
            student[j].num,student[j].name,student[j].elec,student[j].expe,student[j].requ,student[j].sum,student[j].ave);
  }                 
 } 
 
void del()//刪除 
{
    void save()   ;
    int j,a=0,k=count;
    char xh[25];
    printf("所要刪除的學生學號為:\n");
    scanf("%s",xh);
    flush(stdin);
    for (j=0;j<count;j++)
    {
        if (strcmp(student[j].num,xh)==0)
        {
            for (j=a;j<count;j++)
            student[j]=student[j+1];
            count--;
            if (count<k)
            printf("刪除成功\n");
        }
        a++;
    }
        if (j==count-1)
        printf("沒有你所要刪除的學生的信息\n");
 
}
 
   void insert ()//插入 
{void save();
    int m, flag, i = count, j,k;
    printf("請輸入待添加的學生人數:\n");
    scanf("%d", &m);
    if (m > 0)
    {
        k=count+1;
    for(i=k;i<=count+m;i++)    
        {
            flag = 1;
            while (flag!= 0)
            {
                flag = 0;
                printf("請輸入第%d位學生的學號:\n", i);
                getchar();
                gets(student[i].num);
                for (j = 0; j < i; j++)
                {
                    if (strcmp(student[i].num, student[j].num) == 0)
                    {
                        printf("該學號已存在,請重新輸入!\n");
                        flag = 1;
                        break;
                    }
                }
            }
            printf("請輸入第%d位學生姓名:\n", i );
            gets(student[i].name);
            printf("請輸入第%d位學生選修課成績:\n", i );
            scanf("%f",&student[i].elec);
            printf("請輸入第%d位學生實驗成績:\n", i );
            scanf("%f", &student[i].expe);
            printf("請輸入第%d位學生必修課成績:\n", i );
            scanf("%f", &student[i].requ);
            student[i].sum=student[i].elec+student[i].expe+student[i].requ;
            student[i].ave=student[i].sum /3;
      }
        count+= m;
        printf("添加完成!\n");
        system("pause");
  
    }
}
void total ()//統計 
{
    printf("學生人數%d\n",count);
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: