学生成绩管理系统(C语言实现)大作业不会?快来看看吧!

一,简述

学生成绩管理系统是很多C语言初学者在大一都会有机会接触到的一个大作业,其中会涉及到文件的读写和创建,作者在这里会放出本实验的相关代码,总代码量大概600多行,其题目本身不难,各个函数之中的代码重复度较高,只要熟练掌握运用“数组,排序,查找字段,文件的读写”,则本题即可轻松过关!!

二,注意

以下代码资源仅作为学习参考!!!

三,代码

1.结构体及函数声明

```c
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#include<dos.h>
#define LEN sizeof(struct student)
#define FORMART "|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n"
#define DATA stu[i].num,stu[i].name,stu[i].term,stu[i].classnum,stu[i].chinese,stu[i].math,stu[i].engnish,stu[i].sum,stu[i].average
struct student
{
    int num;
    char name[20];
    int classnum;
    int term;
    float chinese;
    float math;
    float engnish;
    float average;
    float sum;
};
void in();//录入成绩信息
void show();//输出全部学生信息以及不及格学生名单
void order();//排序函数
void del();//删除学生信息
void menu();//菜单
void modify();//修改学生信息
void insert_();//插入学生信息
void search_();//查询以一位学生信息
void showclass();//按班输出学生信息
void showorder();//查看排名信息
void showflunk();//查看不及格名单
void order2();
struct student stu[1000];//定义一个容量为1000的临时存放文件内容

menu函数

void menu()
{
    system("cls");
    printf("\n\n\n\n");
    printf("\t\t\t\t|-------------------学生成绩管理系统--------------------|\n");
    printf("\t\t|\t\t|              \t\t\t\t\t\t|\n");
    printf("\t\t\t\t|1.录入学生信息\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|2.查看全部学生信息\t\t\t\t\t|\n");
    printf("\t\t\t\t|3.修改学生信息\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|4.查询学生信息\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|5.删除学生信息\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|6.查看不及格学生信息\t\t\t\t\t|\n");
    printf("\t\t\t\t|7.分班查看成绩\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|8.查看排名情况\t\t\t\t\t\t|\n");
    printf("\t\t\t\t|0.退出系统\t\t\t\t\t\t|\n\t\t\t\t-------------------学生成绩管理系统----------------------\n\n");
    printf("\t\t\t\t|请选择您需要的操作:");
}

in函数(录入)

void in()
{
    int i,m=0;
    char ch[2];
    FILE *fp;
    if((fp=fopen("data.txt","ab+"))==NULL)
    {
        printf("无法找到此文件\n");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
        {
            m++;
        }
    }
    fclose(fp);
    if(m==0)
    {
        printf("此文件为空!\n");
    }
    else
    {
        system("cls");
        show();
    }
    if((fp=fopen("data.txt","wb"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    for(i=0;i<m;i++)
        fwrite(&stu[i],LEN,1,fp);
    printf("\n是否要录入学生信息?(y/n):");
    scanf("%s",ch);
    while(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
    {
        printf("学号:");
        scanf("%d",&stu[m].num);
        for(i=0;i<m;i++)
            if(stu[i].num==stu[m].num)
        {
            printf("此学号已存在,按任意键继续");
            getch();
            fclose(fp);
            return;
        }
        printf("姓名:");
        scanf("%s",stu[m].name);
        printf("班级:");
        scanf("%d",&stu[m].classnum);
        printf("学年:");
        scanf("%d",&stu[m].term);
        printf("语文成绩:");
        scanf("%f",&stu[m].chinese);
        printf("数学成绩:");
        scanf("%f",&stu[m].math);
        printf("英语成绩:");
        scanf("%f",&stu[m].engnish);
        stu[m].sum=stu[m].chinese+stu[m].math+stu[m].engnish;
        stu[m].average=(stu[m].chinese+stu[m].math+stu[m].engnish)*1.0/3;
        if(fwrite(&stu[m],LEN,1,fp)!=1)
        {
            printf("存储失败(任意键继续)");
            getch();
        }
        else
        {
            printf("保存成功!\n");
            m++;
        }
        printf("继续录入?\n");
        scanf("%s",ch);
    }
    fclose(fp);
    printf("全部操作已完成!\n");
}

search_函数(查询)

void search_()
{
    system("cls");
    FILE *fp;
    int snum,i,m=0;
    if((fp=fopen("data.txt","rb"))==NULL)
    {
        printf("未找到该文件!(warning!)\n");
        return;
    }
    while(!feof(fp))
        if(fread(&stu[m],LEN,1,fp)==1)
        m++;
    fclose(fp);
    if(m==0)
    {
        printf("文件为空!\n");
        return;
    }
    printf("………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………………\n请输入需要查询学生学号:");
    scanf("%d",&snum);
    for(i=0;i<m;i++)
    {
        if(stu[i].num==snum)
            {
                printf("\n|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
                printf(FORMART,DATA);
                break;
            }
    }
    if(i==m)
    {
        printf("未查找到此学生相关信息!\n");
    }
}

del函数(删除)

void del()
{
    system("cls");
    show();
    FILE *fp;
    int snum,i,j,m=0;
    char ch[2];
    if((fp=fopen("data.txt","r+"))==NULL)
    {
        printf("此文件不存在!\n");
        return;
    }
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp))
            m++;
    }
    fclose(fp);
    printf("\n请输入您想要删除学生的学号:");
    scanf("%d",&snum);
    for(i=0;i<m;i++)
    {
        if(snum==stu[i].num)
        {
            printf("目标找到,确认删除?(y/n)");
            scanf("%s",ch);
            if(strcmp(ch,"Y")==0 || strcmp(ch,"y")==0)
            {
                for(j=i;j<m;j++)
                stu[j]=stu[j+1];
                m--;
                if((fp=fopen("data.txt","wb"))==NULL)
                    {
                        printf("文件不存在!\n");
                        return;
                    }
                for(j=0;j<m;j++)
                    if(fwrite(&stu[j],LEN,1,fp)!=1)
                    {
                        printf("保存失败!\n");
                        getch();
                    }
            fclose(fp);
            printf("删除成功!");
            show();
            }
            else
            {
                printf("成功找到目标,取消删除操作!\n");
            }
            break;
        }
    }
    if(i==m)
        {
            printf("已删除!\n");
        }
    getch();
}

modify函数(修改)

void modify()
{
    FILE *fp;
    int i=0,j=0,m=0,snum;
    struct student t;
    if((fp=fopen("data.txt","r+"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    while(!feof(fp))
        if(fread(&stu[m],LEN,1,fp)==1)
            {
                m++;
            }
    if(m==0)
    {
        printf("此文件为空!\n");
        fclose(fp);
        return;
    }
    show();
    printf("请输入要修改信息学生的学号:");
    scanf("%d",&snum);
    for(i=0;i<m;i++)
        if(snum==stu[i].num)
        {
            printf("目标查找成功!可以继续操作:\n");
            printf("姓名:");
            scanf("%s",stu[i].name);
            printf("学年:");
            scanf("%d",&stu[i].term);
            printf("语文:");
            scanf("%f",&stu[i].chinese);
            printf("数学:");
            scanf("%f",&stu[i].math);
            printf("英语:");
            scanf("%f",&stu[i].engnish);
            printf("\n修改成功!\n");
            if((fp=fopen("data.txt","wb"))==NULL)
            {
                printf("无法正确打开文件!\n");
                return;
            }
            for(j=0;j<m;j++)
                if(fwrite(&stu[j],LEN,1,fp)!=1)
                {
                    printf("保存失败!\n");
                    getch();
                }
            fclose(fp);
            break;
        }
    if(i==m)
    {
        printf("没有找到这名学生信息!\n");
    }
}

insert函数(插入)

void insert_()
{
    FILE *fp;
    int i,j,k,m=0,snum;
    show();
    if((fp=fopen("data.txt","ab+"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    while(!feof(fp))
        if(fread(&stu[m],LEN,1,fp)==1)
            {
                m++;
            }
    fclose(fp);
    if(m==0)
    {
        printf("此文件为空!\n");
        fclose(fp);
        return;
    }
    printf("\n\n\n\n请输入要插入的位置:");
    scanf("%d",&snum);
    for(i=0;i<m;i++)
        if(snum==stu[i].num)
           break;
    if(i<m)
        {
            printf("查找到目标:可以继续!\n");
            printf("姓名:");
            scanf("%s",&stu[i+1].name);
            printf("班级:");
            scanf("%d",&stu[i+1].classnum);
            printf("学年:");
            scanf("%d",&stu[i+1].term);
            printf("语文:");
            scanf("%f",&stu[i+1].chinese);
            printf("数学:");
            scanf("%f",&stu[i+1].math);
            printf("英语:");
            scanf("%f",&stu[i+1].engnish);
        }
        else
        {
            printf("插入位置错误!\n");
            getch();
            return;
        }
    if((fp=fopen("data.txt","wb+"))==NULL);
    {
        printf("此文件无法打开!\n");
        return;
    }
    for(k=0;k<m+1;k++)
        if(fwrite(&stu[k],LEN,1,fp)!=1)
            {
                printf("保存失败!\n");
                getch();
            }
             printf("插入成功!\n");
    fclose(fp);
}

show函数(查看全部学生)

void show()
{
    system("cls");
    order2();
    FILE *fp;
    int i,m=0,c=0,m1=0,e=0;
    fp=fopen("data.txt","rb");
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
            m++;
    }
    fclose(fp);
    printf("|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(i=0;i<m;i++)
    {
            printf(FORMART,DATA);
    }
}

order函数(排序)

void order()
{
    FILE *fp;
    int i=0,j=0,m=0;
    struct student t;
    if((fp=fopen("data.txt","r+"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    while(!feof(fp))
        if(fread(&stu[m],LEN,1,fp)==1)
            {
                m++;
            }
    if(m==0)
    {
        printf("此文件为空!\n");
        fclose(fp);
        return;
    }
    if((fp=fopen("data.txt","wb"))==NULL)
    {
        printf("此文件不存在!\n");
        return;
    }
    for(i=0;i<m-1;i++)
        for(j=i+1;j<m;j++)
        if(stu[i].average<stu[j].average)
        {
            t=stu[i];
            stu[i]=stu[j];
            stu[j]=t;
        }
    if((fp=fopen("data.txt","wb"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    for(i=0;i<m;i++)
    {
        if(fwrite(&stu[i],LEN,1,fp)!=1)
        {
            printf("保存失败!\n");
            getch();
        }
    }
    fclose(fp);
    printf("保存成功!\n");
    show();
}

showclass函数(按班级查看)

void showclass()
{
    system("cls");
    FILE *fp;
    int i,j,m=0,c;
    if((fp=fopen("data.txt","r+"))==NULL)
    {
        printf("此文件不存在!\n");
        return;
    }
    while(!feof(fp))
    {
        if((fread(&stu[m],LEN,1,fp))==1)
            m++;
    }
    if(m==0)
    {
        printf("此文件为空!\n");
        fclose(fp);
        return;
    }
    if((fp=fopen("data.txt","rb"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    printf("请输入您需要查看成绩的班级:");
    scanf("%d",&c);
    printf("\n%d班成绩如下:\n",c);
    printf("|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(j=0;j<m;j++)
        {
            if(stu[j].classnum==c)
                printf(FORMART,stu[j].num,stu[j].name,stu[j].term,stu[j].classnum,stu[j].chinese,stu[j].math,stu[j].engnish,stu[j].sum,stu[j].average);
        }
}

showorder函数(查看排名)

void showorder()
{
    order();
     system("cls");
    FILE *fp;
    int i,m=0,c=0,m1=0,e=0;
    fp=fopen("data.txt","rb");
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
            m++;
    }
    fclose(fp);
    printf("|排名   |学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(i=0;i<m;i++)
    {
            printf("|%-7d|%-7d|%-15s|%-10d|%-9d|%-10.1f|%-12.1f|%-12.1f|%-12.1f|%-12.1f|\n",i+1,DATA);
    }
}

showflunk函数(查看不及格)

void showflunk()
{
    system("cls");
    FILE *fp;
    int i,m=0,c=0,m1=0,e=0;
    fp=fopen("data.txt","rb");
    while(!feof(fp))
    {
        if(fread(&stu[m],LEN,1,fp)==1)
            m++;
    }
    fclose(fp);
        printf("\n\n\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^以下为各科不及格学生名单^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\n\n\n\n\n\n语文不及格学生名单:\n_____________________________________________________________________________________________________________\n");
    printf("|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(i=0;i<m;i++)
    {
        if(stu[i].chinese<60)
        {
            printf(FORMART,DATA);
            c++;
        }
    }
    if(c==0)
        printf("|无     | 无            |无        |  无     |  无      |  无        | 无         |无          | 无         |\n");
  //shux
    printf("\n数学不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");
    printf("|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(i=0;i<m;i++)
    {
        if(stu[i].math<60)
        {
            printf(FORMART,DATA);
            m1++;
        }
    }
    if(m1==0)
        printf("|无     | 无            |无        |  无     |  无      |  无        | 无         |无          | 无         |\n");
    //yiny
    printf("\n英语不及格学生名单:\n\n_____________________________________________________________________________________________________________\n");
    printf("|学号   |姓名           |学年      |班级     |语文      |数学        |英语        |总分        |平均分      |\t\n");
    for(i=0;i<m;i++)
    {
        if(stu[i].engnish<60)
        {
            printf(FORMART,DATA);
            e++;
        }
    }
    if(e==0)
        printf("|无     | 无            |无        |  无     |  无      |  无        | 无         |无          | 无         |\n");
}

order2函数(此函数是当初老师要求添加的函数,于整个程序可有可无)

void order2()
{
    FILE *fp;
    int i=0,j=0,m=0;
    struct student t;
    if((fp=fopen("data.txt","r+"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    while(!feof(fp))
        if(fread(&stu[m],LEN,1,fp)==1)
            {
                m++;
            }
    if(m==0)
    {
        printf("此文件为空!\n");
        fclose(fp);
        return;
    }
    if((fp=fopen("data.txt","wb"))==NULL)
    {
        printf("此文件不存在!\n");
        return;
    }
    for(i=0;i<m-1;i++)
        for(j=i+1;j<m;j++)
        if(stu[i].num>stu[j].num)
        {
            t=stu[i];
            stu[i]=stu[j];
            stu[j]=t;
        }
    if((fp=fopen("data.txt","wb"))==NULL)
    {
        printf("文件不存在!\n");
        return;
    }
    for(i=0;i<m;i++)
    {
        if(fwrite(&stu[i],LEN,1,fp)!=1)
        {
            printf("保存失败!\n");
            getch();
        }
    }
    fclose(fp);
    printf("保存成功!\n");
}

猜你喜欢

转载自blog.csdn.net/qq_43319736/article/details/106756665