C语言程序设计报告

C语言程序设计

课程设计

实习报告

班    级:        储运0702         

学    生:            

 指导教师:    康老师    陈老师      

完成日期:    20##年12月27日     

系统题目:教学管理系统

二 摘要

第一部分:分析设计与说明

第一步:分别建立两个数据文件

1.     文件1用于存放学生成绩

2.     文件2用于存放课程学分

第二步:程序设计思想

1、   定义两个结构体数组用于存放文件1和文件2的内容;

2 、  编写第一个函数,包含三个函数分别用于求每个学生加权平均分、名次、全班的课程平均差和标准差;

3、   编写第二个函数,用于统计各分数段的人数并输出;

4 、  编写第三个函数,用于打印和输出成绩名次 ;

5、   编写第四个函数,用于打印和输出课程平均差、标准差及各级人数;

6、   编写第五个函数,用于打印和输出成绩条;

7、   编第六个写函数,用于输出不及格学生信息;

8、   编写第七个函数,用于输出优秀学生信息;

9、   编写菜单,共有7个菜单项,其中6个为题目要求,第7个为退出函数。

第三步:程序实现功能

1                   各成绩、平均分和名次的表格;

2                   全班平均分、标准差及各分数段学生人数;

3                   打印学生成绩条;

4                   显示不及格学生的名单

5                   显示优秀生的名单;

6                   成绩分布图;

7                   退出。

三 系统设计

1 系统功能模块图

C语言程序设计报告

2 菜单结构图

C语言程序设计报告  

3 数据结构说明

1).写入了两个数据文件,一个是学生各门课的成绩,另一个是每门课的学分;写入时不要在学号等中间有空格.

2).C语言创建了3个数据文件。

4 重要的输入界面说明

第一个界面:主要显示主菜单

第二个界面:将平均分和名次显示在屏幕上

第三个界面:显示各分数段人数统计

第四个界面:显示学生成绩条,输入学号即可求得

第五个截面:显示不及格学生的名单

第六个界面:显示优等生学生的名单

第七个界面:成绩分布图

第八个界面:按任意键退出

四 系统实现

1本程序在Microsoft Visual C++ 6.0环境下实现

加权平均分Jqave()  每个学生各科分数乘以相应的学分并相加        除以学分总和

名次jqave()使用加权平均分低的名次自动加1的方法

写名次、平均分文件jqave()求出来的结果写在文件Mingci42.txt中

求分数段、标准差使用条件语句求出分数段,根据条件求出标准差

kchcount()在屏幕上显示各分段人数信息

writestu()按要求输出该生的情况的输出

bujige()求不及格学生名单选出分数低于60分的学生,并将其显示在屏幕上

youxiu()求优秀学生的名单选出平均分大于92或者名次在前五名或者平均分大于88、至少有一科大于等于99的学生的名单

2编程中出现的问题

a、细节错误,如前后字符类型不相符,掉分号;

b、程序调试中无错误,但运行没有结果;

c、循环发生错误,大括号没有将要循环的内容包含进去

d、程序运行成绩条时屏幕上无法显示但保存到了新的文档中。

e程序运行出后每执行一个功能时要重新运行才能执行其他的命令。

f、界面菜单都排在一行,不便于查询。在各个菜单后加了一个换行的符号。

使用说明

使用前首先进入Microsoft Visual C++ 6.0环境;

启动并运行“班级程序管理系统”;

按数字键1输出并打印出所有学生的成绩、名次和平均分;

按数字键2输出并打印全班的每门课程的平均成绩、标准差及个等级人数;

按数字键3 输出并打印成绩条;

按数字键4显示不及格的学生名单;

按数字键5显示优等生的学生名单;

按数字键6,成绩分布图;

按数字键7,退出程序。

测试数据

除以上写入文件外,还有上面执行结果中的:

1 不及格学生名单:

2 优秀学生名单

 

程序

#include

#include

#include

#define N 20

#define M 5

struct student

{

    int num,score[M],mingci;

    char name[N];

    float jqaver;

}stu[N];

struct kecheng

{

    int num,youxiu,lianghao,zhongdeng,jige,bujige;

    char name[10];

    float xuefen,aver,bzcha;

}kch[M];

void readstudent()

{

    FILE *fp;

    char str[80];

    int i,j;

    fp=fopen("CY070242.txt","r");

    if(fp==NULL) {printf("cannot open CY070242.txt");return;}

    else{

        fgets(str,80,fp);

        for(i=0;i

            fscanf(fp,"%d %s",&stu[i].num,stu[i].name);

        for(j=0;j

            fscanf(fp,"%d",&stu[i].score[j]);}

   

    }

    fclose(fp);

    /*printf("学号  姓名  英语  C语言  数学  物理  化学\n");

    for(i=0;i

            printf(" %d %s ",stu[i].num,stu[i].name);

        for(j=0;j

            printf(" %d ",stu[i].score[j]);

        printf("\n");

    }*/

}

void readkecheng()

{

    int i;

    char str[80];

    FILE *fp;

    fp=fopen("CY0702.txt","r");

    if(fp==NULL) {printf("cannot open CY0702.txt");return;}

    else{

        fgets(str,80,fp);

        for(i=0;i

        fscanf(fp,"%d %s %f",&kch[i].num,kch[i].name,&kch[i].xuefen);

       

    }

    fclose(fp);

    /*printf("课程号  课程名  课程学分\n");

    for(i=0;i

        printf(" %d %s %f ",kch[i].num,kch[i].name,kch[i].xuefen);

        printf("\n");

    }*/

}

void jqaver()

{

    int i,j;

    float scoresum=0,xuefensum=0;

    for(i=0;i

    for(i=0;i

        scoresum=0;

        for(j=0;j

            scoresum+=stu[i].score[j]*kch[j].xuefen;

        stu[i].jqaver=scoresum/xuefensum;

    }

    /*printf("学号  姓名  英语  C语言  数学  物理  化学  加权平均分\n");

    for(i=0;i

        printf("  %d  %s  ",stu[i].num,stu[i].name);

        for(j=0;j

            printf("  %d  ",stu[i].score[j]);

        printf("  %f  ",stu[i].jqaver);

        printf("\n");

    }*/

}

void mingci()

{

    int i,j;

    for(i=0;i

        stu[i].mingci=1;

        for(j=0;j

            if(stu[i].jqaver

                stu[i].mingci++;

    }

    /*printf("名次  学号  姓名  英语  C语言  数学  物理  化学  加权平均分\n");

    for(i=0;i

        printf("  %d  %d  %s  ",stu[i].mingci,stu[i].num,stu[i].name);

        for(j=0;j

            printf("  %d  ",stu[i].score[j]);

        printf("  %f  ",stu[i].jqaver);

        printf("\n");

    }*/

}

void kchaver()

{

    float sum;

    int i,j;

    for(j=0;j

        sum=0;

        for(i=0;i

            sum+=stu[i].score[j];

        kch[j].aver=sum/N;

    }

    /*printf("课程号  课程名  课程学分  平均分\n");

    for(i=0;i

        printf("  %d  %s  %.2f  %.2f  ",kch[i].num,kch[i].name,kch[i].xuefen,kch[i].aver );

        printf("\n");

    }*/

}

void kchbzcha()

{

    int i,j;

    float sum=0;

    for(j=0;j

        sum=0;

        for(i=0;i

            sum+=(stu[i].score[j]-kch[j].aver)*(stu[i].score[j]-kch[j].aver);

        kch[j].bzcha=(float)sqrt(sum/N);

    }

    /*printf("课程号  课程名  课程学分  平均分  标准差\n");

    for(i=0;i

        printf("  %d  %s  %.2f  %.2f  %.2f  \n",kch[i].num,kch[i].name,kch[i].xuefen,kch[i].aver,kch[i].bzcha);*/

}

void kchcount()

{

    int i,j;

    for(j=0;j

        for(i=0;i

            if(stu[i].score[j]>=90)  kch[j].youxiu++;

            else if(stu[i].score[j]>=80) kch[j].lianghao++;

            else if(stu[i].score[j]>=70) kch[j].zhongdeng++;

            else if(stu[i].score[j]>=60) kch[j].jige++;

            else kch[j].bujige++;

            /*printf("课程号  课程名  课程学分  平均分  标准差  优秀  良好  中等  及格  不及格\n");

            for(i=0;i

                printf("  %d  %s  %.2f  %.2f  %.2f  %d  %d  %d  %d  %d  \n",kch[i].num,kch[i].name,kch[i].xuefen,kch[i].aver,kch[i].bzcha,kch[i].youxiu,kch[i].lianghao,kch[i].zhongdeng,kch[i].jige,kch[i].bujige);*/

}

void showstu()

{

    int i,j;

    printf("名次  学号  姓名  英语  C语言  数学  物理  化学  加权平均分\n");

    for(i=0;i

        printf("%-7d %-2d %-8s",stu[i].mingci,stu[i].num,stu[i].name);

        for(j=0;j

            printf("%d  ",stu[i].score[j]);

        printf("  %.2f  ",stu[i].jqaver);

        printf("\n");

    }

}

void writestu()

{

    char str[80]="名次  学号  姓名  英语  C语言  数学  物理  化学  加权平均分\n";

    FILE *fp;

    int i,j;

    fp=fopen("mingci42.txt","w");

    fputs(str,fp);

    for(i=0;i

        fprintf(fp,"%-7d%-2d  %-5s",stu[i].mingci,stu[i].num,stu[i].name);

        for(j=0;j

            fprintf(fp,"%6d",stu[i].score[j]);

        fprintf(fp,"    %.2f  ",stu[i].jqaver);

        fprintf(fp,"\n");

    }

    fclose(fp);

}

void showkch()

{

    int i;

    printf("课程号  课程名  课程学分  平均分  标准差  优秀  良好  中等  及格  不及格、\n");

    for(i=0;i

        printf("%-7d%7s%9.2f%9.2f%8.2f%5d%6d%6d%6d%6d\n",kch[i].num,kch[i].name,kch[i].xuefen,kch[i].aver,kch[i].bzcha,kch[i].youxiu,kch[i].lianghao,kch[i].zhongdeng,kch[i].jige,kch[i].bujige);

}

void writekch()

{

    FILE *fp;

    int i;

    char str[100]="课程号  课程名  课程学分  平均分  标准差  优秀  良好  中等  及格  不及格\n";

    fp=fopen("kecheng42.txt","w");

    fputs(str,fp);

    for(i=0;i

        fprintf(fp,"%-7d%7s%9.2f%9.2f%8.2f%5d%6d%6d%6d%6d\n",kch[i].num,kch[i].name,kch[i].xuefen,kch[i].aver,kch[i].bzcha,kch[i].youxiu,kch[i].lianghao,kch[i].zhongdeng,kch[i].jige,kch[i].bujige);

    fclose(fp);

}

void dayinchengji()

{

    char str[80]="名次  学号  姓名  英语  C语言  数学  物理  化学  加权平均分、\n";

    FILE *fp;

    int i,n;

    printf("请输入要查询的学生学号:\n");

    scanf("%d",&n);

    fp=fopen("cjCY0702.txt","w");

    fputs(str,fp);

    fprintf(fp,"%-7d%-2d%-8s",stu[n-1].mingci,stu[n-1].num,stu[n-1].name);

    for(i=0;i

        fprintf(fp,"%5d",stu[n-1].score[i]);

    fprintf(fp,"%5.2f",stu[n-1].jqaver);

    fprintf(fp,"\n-------------------------------------------------------------------------");

    fclose(fp);

    puts(str);

    printf("%-7d%-2d%6s",stu[n-1].mingci,stu[n-1].num,stu[n-1].name);

    for(i=0;i

        printf("%6d",stu[n-1].score[i]);

    printf("%8.2f",stu[n-1].jqaver);

}

void showbujigestu()

{

    int i,j;

    printf("学号  姓名  不及格课程  学分  成绩\n");

    for(i=0;i

        for(j=0;j

            if(stu[i].score[j]<60)

                printf("%-6d%2s%9s%9.2f%5d\n",stu[i].num,stu[i].name,kch[j].name,kch[j].xuefen,stu[i].score[j]);

}

void showyoudengstu()

{

    int i,j,k,n=0;

    printf("名次  学号  姓名  英语  C语言  数学  物理  化学  加权平均分\n");

    for(i=0;i

        for(j=0;j

            if(stu[i].jqaver>=90||stu[i].mingci<=4){

                printf("%-7d%2d%7s",stu[i].mingci,stu[i].num,stu[i].name);

                for(k=0;k

                    printf("%6d",stu[i].score[k]);

                printf("%9.2f\n",stu[i].jqaver);

            }

            continue;

            if(stu[i].score[j]>=99) {n++;printf("%d",n);}

            if(stu[i].jqaver>=85 && n>=1){

                printf("%-7d%2d%7d",stu[i].mingci,stu[i].num,stu[i].name);

                for(k=0;k

                    printf("%6d",stu[i].score[k]);

                printf("%9.2f\n",stu[i].jqaver);

            }

        }

}

void chengjifbt()

{

    int i,j,k;

    char s[N][M]={'\0'};

    for(k=0;k

        for(j=19;j>N-kch[k].youxiu;j--) s[j][0]='*';

        for(j=19;j>N-kch[k].lianghao;j--) s[j][1]='*';

        for(j=19;j>N-kch[k].zhongdeng;j--) s[j][2]='*';

        for(j=19;j>N-kch[k].jige;j--) s[j][3]='*';

        for(j=19;j>N-kch[k].bujige;j--) s[j][4]='*';

        for(int x=0;x

            printf("%2d|",N-x);

            for(int y=0;y

                printf("%8c%c",s[x][y],s[x][y]);

            printf("\n");

        }

        printf("----------------------------------------------------------------------------");

        printf("%s:  优秀  良好  中等  及格  不及格\n\n\n",kch[k].name);

    }

}

void menu()

{

    int c;

    for(;;){

        printf("学籍管理系统选项: \n");

        printf("1  创建并显示学生名次、平均分信息文件\n");

        printf("  (结果放入mingci42.txt文件)  ;\n");

        printf("2  创建并显示课程平均分、标准差及分数分段信息文件\n");

        printf("  (结果放入kch42.txt文件)  ;\n");

        printf("3  打印成绩条\n");

        printf("  (如果放入cjCY42.txt文件)  ;\n");

        printf("4  显示有不及格课程的学生;\n");

        printf("5  显示优等生;\n");

        printf("  优等生条件 (只要满足三个条件中的任意一个条件即可): \n");

        printf("  a)平均分>=91分\n");

        printf("  b)名次在本班位于前四名\n");

        printf("  c)平均分>=85分,并且至少有一门课的成绩>=99\n");

        printf("6  成绩分布图\n");

        printf("7  退出\n");

        printf("请输入要选择的选项: \n");

        scanf("%d",&c);

        switch(c)

        {

        case 1:showstu();writestu();break;

        case 2:showkch();writekch();break;

        case 3:dayinchengji();break;

        case 4:showbujigestu();break;

        case 5:showyoudengstu();break;

        case 6:chengjifbt();break;

        case 7:exit(0);

        }

    }

}

main()

{

    readstudent();

    readkecheng();

    jqaver();

    mingci();

    kchaver();

    kchbzcha();

    kchcount();

    menu();

}

相关推荐