c语言学生成绩管理系统(增、删、查、改、排序、分析优秀及格率等)(一)-阿里云开发者社区

贵客云 2022-05-14 10:07 阅读 85

一、功能描述


实现学生基本信息的管理,包括学生资料的录入、查询、修改、删除、浏览等操作,实现学生成绩信息的管理,包括学生成绩的录入、查询、修改、删除、浏览等操作。学生的基本信息包括:学号、姓名、班级、所选科目等,程序应提供班级与科目信息的录入功能。分析每个班单科成绩。(排序,最高分,最低分,及格率(60以上),优秀率(90以上))。保存信息到c盘目录下,以txt文件保存


20210328121546218.png

20210328122342633.png20210328122427512.png


1、总体设计


1)分析程序的功能


用户录入信息,实现增删查改和分析(排序)。信息保存到c盘


2)系统总体结构:


分为9个结构。用户实现学生成绩的增删查改,并在用户输入指令后,实现成绩的分析。


2、模块 函数名称


录入学生的资料和成绩 input


//01录入学生的资料和成绩.
 struct node*input(node *head){
    int i=0,j=1;
    struct node *p,*n;
    p=(struct node*)malloc(sizeof(struct node));
    p=head;
    while(1){
        if(j>0){
            i++;
            n=(struct node*)malloc(sizeof(struct node));
            printf("请输入第%d个学生的学号,姓名\n",i);
            scanf("%d %s",&n->date,&n->name);
            getchar();
            printf("请输入科目(文或理)和班级(1或者2)\n");
            scanf("%s %d",&n->kemu,&n->me_class);
            fflush(stdin);
            printf("请输当前学生的语文,数学,英语成绩\n");
            scanf("%lf %lf %lf",&n->yuwen,&n->shuxue,&n->yingyu);
            getchar();
            n->num=n->yuwen+n->shuxue+n->yingyu;
            n->avg=(p->num)/3;
            p->next=n;
            p=n;
            printf("是否继续输入下一个同学的信息?输入 1 继续,输入  0  就停止输入\n");
            fflush(stdin);
            scanf("%d",&j);
            fflush(stdin);
        }
    
        else {
            p->next=last=NULL;
                p=last;
            
            break;
        }
    }
    free(p);//释放p
    return head;
}


增加学生信息及成绩 add


 struct node*add(struct node*head){
     if(head->next==NULL){
        printf("还没有存储数据,请先存储数据");
        return head;
     }
     else{
        struct node*head1,*p;
        head1=(struct node*)malloc(sizeof(struct node));
        printf("正在添加学生信息及成绩\n");
        head1=input(head1);//插入的节点用链表的方式存储.
        p=head->next;
        while(p->next!=NULL){
            p=p->next;
        }
        p->next=head1->next;//因为头结点是空的所以应该链接头结点的下一个节点。
        return head;
     }
 }


查询学生信息及成绩 find


struct node*find(struct node*head){
    int i;
    struct node*p;
    if(head==NULL){
        printf("还没有存储数据,请先存储数据\n");
    }
    else{
        printf("请输入你要找查的学号:");
        scanf("%d",&i);
        p=head->next;
        while(p->date!=i&&p->next!=NULL){
                p=p->next;
        }
            if(p->date==i){
                printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
    printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
                printf("\n");
                return p;
            }
            else{
            printf("没有找到你要查找的同学\n");
            return NULL;
            }
    }
    
 }


删除学生信息及成绩 del


void del(struct node*head){
 int key,j=0;
    struct node*p,*s;
    s=head->next;
    p=head;
    printf("请输入你要删除学生的学号");
    fflush(stdin);//删除缓存的数据。
    scanf("%d",&key);
    while(s!=NULL){
        if(s->date!=key){
            p=s;
            s=s->next;
        }
        else
            break;  
    }
    if(s!=NULL){
        p->next=s->next;
        free(s);
        printf("删除成功\n");
    }
    else
        printf("删除失败\n");
 }


修改学生信息和成绩 change


struct node*change(struct node*head){
    struct node*p=NULL;
    p=find(head);
    if(p==NULL){
        printf("修改失败\n");
        return head;
    }
    else{
        printf("请输入修改的学生信息\n");
        printf("姓名 班级 科目\n");
        scanf("%s %d %s",&p->name,&p->me_class ,&p->kemu);
        fflush(stdin);
        printf("请输入修改的学生成绩\n");
        printf("语文 数学 英语\n");
        scanf("%lf %lf %lf",&p->yuwen,&p->shuxue,&p->yingyu);
        fflush(stdin);//getchar()
        printf("\n学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
    printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
        return head;
    }
 }


浏览学生信息及成绩 output


struct node* output(struct node*head)
 {
    if(head==NULL)
        printf("还没有数据请先输入数据\n");
    else
    {
        struct node *p;
        p=head->next;
        printf("学号\t姓名\t班级\t科目\t语文\t\t数学\t\t英语\n");
        while(p!=NULL)
        {       printf("%d\t%s\t%d\t%s\t%lf\t%lf\t%lf",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
            p=p->next;
            printf("\n");
        }
    printf("\n");
    }
    return head;
 }


文件夹操作 file


void file(struct node*head)
 {
 int i=0;
    FILE *fp;
    struct node*p=head->next;
    fp=fopen("C:\\学生成绩单.txt","wt");

    fprintf(fp,"学号\t姓名\t班级\t科目\t语文\t\t   数学\t\t   英语\n");
     while(p!=NULL) 
 {
     fprintf(fp,"%d\t%s\t%d\t%s\t%lf\t\t%lf\t\t%lf\n",p->date,p->name,p->me_class,p->kemu,p->yuwen,p->shuxue,p->yingyu);
     p = p->next;
     i++;
 }
     if(i>0)
         printf("\t\t\t\t\t—————成功保存c盘—————\n");
     else printf("\t\t\t\t\t—————没有数据保存失败到桌面—————\n");
    fclose(fp);
 
 }


输出成绩统计 Outtj


void Outtj(struct node1 stu[50],int si,int n)
{
    double  avg1=0,avg2=0,avg3=0;
    double  k1=0,k2=0,k3=0;//及格率
    double  j1=0,j2=0,j3=0;//优秀率
    double  max1;
    double  min1;
    int j;
    
        max1=stu[0].yuwen;
        min1=stu[0].yuwen;
    for(j=0;j<si;j++)
    {   
        avg1+=stu[j].yuwen;
        if(stu[j].yuwen>=60) k1++;
        if(stu[j].yuwen>=90) j1++;
        if(stu[j].yuwen>max1) max1=stu[j].yuwen;
        if(stu[j].yuwen<min1) min1=stu[j].yuwen;
    }
    avg1/=j;
    k1/=j;
    j1/=j;
    printf("\t\t*********%d班成绩*************\n",n);
    printf("语文平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
    printf("%f\t\t%f\t%f\t%lf\t%lf\n",avg1,k1,j1,max1,min1);
        max1=stu[0].shuxue;
        min1=stu[0].shuxue;
    for(j=0;j<si;j++)
    {
        avg2+=stu[j].shuxue;
        if(stu[j].shuxue>=60)k2++;
        if(stu[j].shuxue>=90)j2++;
        if(stu[j].shuxue>max1) max1=stu[j].shuxue;
        if(stu[j].shuxue<min1) min1=stu[j].shuxue;
    }
    avg2/=j;
    k2/=j;
    j2/=j;
    printf("数学平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
    printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg2,k2,j2,max1,min1);
        max1=stu[0].yingyu;
        min1=stu[0].yingyu;
    for(j=0;j<si;j++)
    {
        avg3+=stu[j].yingyu ;
        if(stu[j].yingyu>=60) k3++;
        if(stu[j].yingyu>=90)j3++;
        if(stu[j].yingyu>max1) max1=stu[j].yingyu;
        if(stu[j].yingyu<min1) min1=stu[j].yingyu;
    }
    avg3/=(j);
    k3/=(j);
    j3/=(j);
    printf("英语平均成绩\t\t及格率\t\t优秀率\t\t最高分\t\t最低分\n");
    printf("%lf\t\t%lf\t%lf\t%lf\t%lf\n",avg3,k3,j3,max1,min1);

}


输出成绩排序 OutPx


void OutPx(struct node*head,struct node1 stu[],int si,int n){//stu[50]数组,int si长度,int n班级。
    int j,k=0;
    int i,h;//控制学科。
     struct xueke
    {
        char aa[15];
     }km[4]={{"语文"},{"数学"},{"英语"},{"总成绩"}};
    lbzsz(head);
    printf("\t\t%d班的成绩排序\n",n);
    for(i=0,h=1;i<4;i++,h++){//for1
        for(j=0;j<si;j++){//for2
            for(k=0;k<si-1-j;k++){//for3
                if(h==1){
                    if(stu[k].yuwen<stu[k+1].yuwen){
                    t=stu[k+1];
                    stu[k+1] =stu[k] ;
                    stu[k]=t;
                    }
                }
                if(h==2){
                    if(stu[k].shuxue<stu[k+1].shuxue){
                    t =stu[k+1];
                    stu[k+1] =stu[k] ;
                    stu[k] =t ;
                    }
                }
                if(h==3){
                    if(stu[k].yingyu<stu[k+1].yingyu){
                    t=stu[k+1];
                    stu[k+1] =stu[k] ;
                    stu[k] =t ;
                    }
                }
                if(h==4){
                    if(stu[k].num  <stu[k+1].num  ){
                    t =stu[k+1];
                    stu[k+1] =stu[k] ;
                    stu[k] =t ;
                    }
                }
            }//for3结束
        }//for2结束
        printf("%s排名\n学号\t姓名\t班级\t%s成绩\t排名\n",km[i].aa,km[i].aa);
        if(h==1){
            for(j=0,k=1;j<si;j++,k++)
            printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yuwen,k);
            }
        if(h==2){
                for(j=0,k=1;j<si;j++,k++)
                    printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].shuxue ,k);
            }
        if(h==3){
                for(j=0,k=1;j<si;j++,k++)
                printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].yingyu ,k);
            }
        if(h==4){
                for(j=0,k=1;j<si;j++,k++)
                printf("%d\t%s\t%d\t%lf\t%d\n",stu[j].date,stu[j].name,stu[j].me_class,stu[j].num  ,k);
            }
    }
  }
分类: 科技 关键词: 统计分析系统
原文 编辑 投诉 置顶 分享
推荐
快讯
剧透网 展会网 乡村游
营销软件 行业信息

营销 网络营销 自媒体营销 产品推广 营销策划 媒体投放 电商营销 广告联盟 科技 大数据 人工智能 智能硬件 工业互联网 物联网
财经 跨境电商 投资理财 量化交易 价值投资 招商加盟 食品招商 餐饮加盟

版权所有©贵客云    QQ732055019 交谈 鲁ICP备08109250号-5
鲁公网安备 37020302371242号