課程設計之學生成績管理系統

代碼:

#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include<string.h>
struct student
 {
     char nu[99];
     char ss[10][30];
    long long int num;          //學號
    char cla[30];               //班級
    char name[30];              //姓名
    char xi[30];                //性別
    int s[10];                  //C語言、高數、英語、計算機原理、離散數學
    int zp[10];                 // zp1,zp2總分,總分排名
 }std[100];
 int sum=1;
 void f1(struct student std[]);
 void f2(struct student std[]);
 void f3(struct student std[]);
 void f4(struct student std[]);
 void f5(struct student std[]);
 void f6(struct student std[]);
 void f7(struct student std[]);
 void f8(struct student std[]);
 void f9(struct student std[]);
 int main()
 {
    int i,t;
    int sa;
    begin:system("cls");
    printf("\n\n\n\n\n\t\t\t\t\t     學生成績管理系統:\n");
    printf("\t\t\t\t\t\t請進行操作:\n\t\t\t\t\t\t1-新建成績記錄文件\n\t\t\t\t\t\t2-增加學生記錄\n");
    printf("\t\t\t\t\t\t3-刪除\n\t\t\t\t\t\t4-修改\n\t\t\t\t\t\t5-排序\n\t\t\t\t\t\t6-查詢\n\t\t\t\t\t\t7-顯示內存記錄\n");
    printf("\t\t\t\t\t\t8-從文件獲得學生數據\n\t\t\t\t\t\t9-保存到文件\n\t\t\t\t\t\t0-\n\t\t\t\t\t\tEsc-退出程序\n");
    sa=getch();
    if(sa==49)          //新建文件
        f1(std);
    else if(sa==50)     //增加記錄
        f2(std);
    else if(sa==51)     //刪除
        f3(std);
    else if(sa==52)     //修改
        f4(std);
    else if(sa==53)     //排序
        f5(std);
    else if(sa==54)     //查詢
        f6(std);
    else if(sa==55)     //顯示
        f7(std);
    else if(sa==56)     //從文件中獲得
        f8(std);
    else if(sa==57)     //保存到文件
        f9(std);
    else if(sa==27)     //退出程序
        exit(1);
    goto begin;
    return 0;
 }
void f1(struct student std[])                                                   //新建記錄
{
    system("cls");
    int a;
    if(sum!=1)
    {
        printf("\t\t\t內存中有學生的成績記錄,新建文件會\n\t\t\t覆蓋掉原有記錄,是否將其先進行存儲?\n----確認儲存請按回車鍵\n----覆蓋請按其他鍵位");
        a=getche();
        if(a==13)
            f9(std);
        else
            MessageBox(NULL,TEXT("原有記錄已被覆蓋"),TEXT("原有學生記錄"),MB_OK);
    }
    sum=1;
    MessageBox(NULL,TEXT("已成功新建在內存!"),TEXT("新建"),MB_OK);
    return ;
}
 void f2(struct student std[])                                                  //增加學生
 {
     int pai[100];
     int i,t;
     int x;
     int b;
     system("cls");
     while(1)
     {
        printf("\n\n\n\t\t\t請輸入學生的學號(輸入0終止):\n");
        scanf("%s",&std[sum].nu);
        if(std[sum].nu[0]=='0'&&std[sum].nu[1]==NULL)
                break;
        if(strlen(std[sum].nu)>15)
        {
            MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
            continue;
        }
        std[sum].num=0;
        for(i=0;std[sum].nu[i]!=NULL;i++)
            std[sum].num=std[sum].num*10+std[sum].nu[i]-48;
        if(std[sum].num>999999999999)
        {
            MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
            continue;
        }
        printf("\t\t\t請輸入學生的班級:\n");
        do
        {
            scanf("%s",&std[sum].cla);
            if(strlen(std[sum].cla)>10)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].cla)>10);
        printf("\t\t\t請輸入學生的姓名:\n");
        do
        {
            scanf("%s",&std[sum].name);
            if(strlen(std[sum].name)>10)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].name)>10);
        printf("\t\t\t請輸入學生的性別:\n");
        do
        {
            scanf("%s",&std[sum].xi);
            if(strlen(std[sum].xi)>5)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(strlen(std[sum].xi)>5);
        printf("\t\t\t請輸入學生的c語言成績:\n");
        do{
            std[sum].s[1]=0;
            scanf("%s",&std[sum].ss[1]);
            for(i=0;std[sum].ss[1][i]!=NULL;i++)
                std[sum].s[1]=std[sum].s[1]*10+std[sum].ss[1][i]-48;
            if(std[sum].s[1]>100||std[sum].s[1]<0)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[1]>100||std[sum].s[1]<0);
        printf("\t\t\t請輸入學生的高數成績:\n");
        do{
            std[sum].s[2]=0;
            scanf("%s",&std[sum].ss[2]);
               for(i=0;std[sum].ss[2][i]!=NULL;i++)
                std[sum].s[2]=std[sum].s[2]*10+std[sum].ss[2][i]-48;
            if(std[sum].s[2]>100||std[sum].s[2]<0)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[2]>100||std[sum].s[2]<0);
        printf("\t\t\t請輸入學生的英語成績:\n");
         do{
            std[sum].s[3]=0;
            scanf("%s",&std[sum].ss[3]);
            for(i=0;std[sum].ss[3][i]!=NULL;i++)
                std[sum].s[3]=std[sum].s[3]*10+std[sum].ss[3][i]-48;
            if(std[sum].s[3]>100||std[sum].s[3]<0)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[3]>100||std[sum].s[3]<0);
        printf("\t\t\t請輸入學生的計算機原理成績:\n");
        do{
            std[sum].s[4]=0;
            scanf("%s",&std[sum].ss[4]);
            for(i=0;std[sum].ss[4][i]!=NULL;i++)
                std[sum].s[4]=std[sum].s[4]*10+std[sum].ss[4][i]-48;
            if(std[sum].s[4]>100||std[sum].s[4]<0)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[4]>100||std[sum].s[4]<0);
        printf("\t\t\t請輸入學生的離散數學成績:\n");
        do{
            std[sum].s[5]=0;
            scanf("%s",&std[sum].ss[5]);
            for(i=0;std[sum].ss[5][i]!=NULL;i++)
                std[sum].s[5]=std[sum].s[5]*10+std[sum].ss[5][i]-48;
            if(std[sum].s[5]>100||std[sum].s[5]<0)
                MessageBox(NULL,TEXT("輸入爲非法數據!請重新輸入!"),TEXT("警告"),MB_OK);
        }while(std[sum].s[5]>100||std[sum].s[5]<0);
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
     }
     for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    return ;
}
  void f3(struct student std[])                                                 //刪除
{
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     int a;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t刪除:\n");
     printf("\t\t請選擇刪除方式:1-按學號刪除、2-按姓名刪除、3-按總分名次刪除:\n");
     fa=getch();
     if(fa==49)
     {
         printf("請輸入要刪除的學號,按回車鍵結束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("請輸入要刪除的姓名,按回車鍵結束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("請輸入要刪除的名次,按回車鍵結束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,請檢查輸入!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return;
     }
    printf("待刪除者信息爲:\n");
    printf("學號\t  班級      姓名\t\t性別   C語言  高數   英語  計算機原理 離散數學\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("確認刪除請按回車鍵,取消請按其他鍵位\n");
    a=getch();
    if(a!=13)
        return ;
     for(i=t;i<sum;i++)
     {
        std[99]=std[i];
        std[i]=std[i+1];
        std[i+1]=std[99];
     }
     sum--;
    MessageBox(NULL, TEXT("刪除成功!"), TEXT("刪除"), MB_OK);         //跳出窗口
    return ;
}
void f4(struct student std[])                                                   //修改信息
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    long long int gai;
    int i,t=0;
    int ji;
    int a;
    system("cls");
    printf("請鍵入被修改者學號(以回車鍵結束):\n");
    scanf("%lld",&gai);
    for(i=1;i<=sum;i++)
        if(std[i].num==gai)
            t=i;
    if(t==0)
    {
        MessageBox(NULL, TEXT("未找到待修改者!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    printf("待修改者信息爲:\n");
    printf("學號\t  班級      姓名\t\t性別   C語言  高數   英語  計算機原理 離散數學\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("確認修改請按回車鍵,取消修改請按其他鍵位\n");
    a=getch();
    if(a==13)
    {
         printf("請依次鍵入修改者C語言、高數、英語、計算機原理、離散數學各科成績\n");
        scanf("%d%d%d%d%d",&std[t].s[1],&std[t].s[2],&std[t].s[3],&std[t].s[4],&std[t].s[5]);
        MessageBox(NULL, TEXT("修改成功"), TEXT("修改學生信息及成績"), MB_OK);         //跳出窗口
    }
    printf("繼續修改請按回車,返回主菜單請按Esc鍵\n");
    ji=getch();
    if(ji==13)
        f4(std);
    else
        return;
}
void f5(struct student std[])                                                   //分方式排序
{
    int i,t;
    int shun;
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    printf("\n\n\n\t  請選擇排序方式:\n\t1-按學號的升序進行排序\n\t2-按學號的降序進行排序\n");
    shun=getch();
    if(shun==49)
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num>std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    else
    {
        for(i=1;i<=sum;i++)
            for(t=1;t<sum-i;t++)
        {
            if(std[t].num<std[t+1].num)
            {
                std[sum+1]=std[t];
                std[t]=std[t+1];
                std[t+1]=std[sum+1];
            }
        }
    }
    MessageBox(NULL, TEXT("排序完成!"), TEXT("排序"), MB_OK);                   //跳出窗口
    return ;
}
 void f6(struct student std[])                                                  //分方式查詢
 {
     system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
     int i,t=0;
     int fa;
     long long int xue;
     int ming;
     char name[30];
     printf("\t\t\t\t\t查詢:\n");
     printf("\t\t請選擇查詢方式:1-學號查詢、2-姓名查詢、3-總分名次查詢:\n");
     fa=getch();
     if(fa==49)
     {
         printf("請輸入要查詢的學號,按回車鍵結束:\n");
         scanf("%lld",&xue);
         for(i=1;i<=sum;i++)
         {
             if(std[i].num==xue)
                {t=i;
                break;}
         }
     }
     else if(fa==50)
     {
         printf("請輸入要查詢的姓名,按回車鍵結束:\n");
         scanf("%s",&name);
        for(i=1;i<=sum;i++)
         {
             if(strcmp(std[i].name,name)==0)
                {t=i;
                break;}
         }
     }
    else if(fa==51)
     {
         printf("請輸入要查詢的名次,按回車鍵結束:\n");
         scanf("%d",&ming);
        for(i=1;i<=sum;i++)
         {
             if(ming==std[i].zp[2])
                {t=i;
                break;}
         }
     }
     if(t==0)
     {
        MessageBox(NULL, TEXT("未找到,請檢查輸入!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return;
     }
    printf("學號\t  班級      姓名\t\t性別   C語言  高數   英語  計算機原理 離散數學\n");
    printf("%-10lld%-10s%-20s%-8s%-8d%-8d%-8d%-8d%-8d\n",std[t].num,std[t].cla,std[t].name,std[t].xi,std[t].s[1],std[t].s[2],std[t].s[3],std[t].s[4],std[t].s[5]);
    printf("\t\t\t按任意鍵返回主菜單......");
    t=getch();
     return ;
 }
 void f7(struct student std[])                                       //顯示
 {
    system("cls");
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    int i,t;
    printf("\n\n\t*************************************************************************************************\n");
    printf("\t\t\t\t\t\t   學生信息及成績\n");
    printf("\t學號\t  班級      姓名\t\t性別     C語言  高數   英語  計算機原理 離散數學  總分   名次\n");
    for(i=1;i<sum;i++)
        printf("\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    printf("\t\t按任意鍵返回主菜單......");
    t=getch();
    return ;
 }
void f8(struct student std[])
{
    FILE * fp=fopen("student.txt","r");
    int pai[100];
    int i,t,x;
    if((fp)==NULL)
    {
        MessageBox(NULL, TEXT("沒有找到學生成績文件!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    while(fscanf(fp,"%lld %s %s %s %d %d %d %d %d",&std[sum].num,std[sum].cla,std[sum].name,std[sum].xi,&std[sum].s[1],&std[sum].s[2],&std[sum].s[3],&std[sum].s[4],&std[sum].s[5])!=EOF)
    {
        std[sum].zp[1]=(std[sum].s[1]+std[sum].s[2]+std[sum].s[3]+std[sum].s[4]+std[sum].s[5]);
        pai[sum]=std[sum].zp[1];
        sum++;
    }
    for(t=1;t<=sum;t++)
     {
         for(i=1;i<sum-t;i++)
         {
             if(pai[i]<pai[i+1])
             {
                 x=pai[i];
                 pai[i]=pai[i+1];
                 pai[i+1]=x;
             }
         }
     }
    for(t=1;t<=sum;t++)
    {
        for(i=1;i<sum;i++)
        {
            if(pai[t]==std[i].zp[1])
            {
                std[i].zp[2]=t;
                pai[t]=-1;
            }
        }
    }
    MessageBox(NULL, TEXT("從文件獲得數據成功!"), TEXT("從文件獲得數據"), MB_OK);         //跳出窗口
    fclose(fp);
    return ;
}
void f9(struct student std[])
{
    if(sum==1)
    {
        MessageBox(NULL, TEXT("內存中無記錄!"), TEXT("錯誤"), MB_OK);         //跳出窗口
        return ;
    }
    int a;
    printf("存儲方式:\n1-默認文件名存儲\n2-自定義文件名存儲\n");
    a=getch();
    FILE * fp;
    if(a==50)
    {
        char wenjian[100];
        printf("請輸入您想要存放在或者新建的文本文件名字,例如student.txt\n");
        gets(wenjian);
        fp=fopen(wenjian,"w");
    }
    else
        fp=fopen("student1.txt","w");
    int i;
    fprintf(fp,"\n\n\t*************************************************************************************************\n");
    fprintf(fp,"\t\t\t\t\t\t   學生信息及成績\n");
    fprintf(fp,"\t學號\t  班級      姓名\t\t性別     C語言  高數   英語  計算機原理 離散數學  總分   名次\n");
    for(i=1;i<sum;i++)
        fprintf(fp,"\t%-10lld%-10s%-20s%-8s   %-8d%-8d%-8d%-8d%-8d%-8d%-8d\n",std[i].num,std[i].cla,std[i].name,std[i].xi,std[i].s[1],std[i].s[2],std[i].s[3],std[i].s[4],std[i].s[5],std[i].zp[1],std[i].zp[2]);
    fclose(fp);
    MessageBox(NULL, TEXT("保存數據成功!"), TEXT("保存數據"), MB_OK);         //跳出窗口
    return ;
}


運行:













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