学生成绩管理程序

来源:互联网 发布:网络直复营销理论 编辑:程序博客网 时间:2024/04/25 08:42

 

一.题目要求:

学生成绩管理程序设计,具体如下:

1)选项菜单集成各功能函数模块

2)录入学生成绩(姓名、学号、语文、数学成绩,总分自动计算)

3)按总分排名次

4)按姓名查找某学生成绩

5)统计各课程的平均分、及格率、最高分、最低分

6)打印成绩表

 

 

二.设计分析:

1. 选项菜单如下:

 

  请选择你要本系统实现的功能:

  1:学生信息浏览功能

2:统计各课程的平均分、及格率、最高分、最低分

3:单用户信息查询功能

4:排序功能(按学生总分绩进行排序)

5:安全退出

                                       请输入你要实现的功能选项:

 

2. 通过输入1~5,来执行相应的功能,每个功能项都对应于一个函数,根据用户的输入,去调用不同的函数,这样,模块比较清晰。

3. 将上面5个函数封装在一个函数中,即mixed(m,n),通过参数n的不同,从而调用不同的功能。

4. 提供了一个input函数,用于输入学生信息。

5. 在程序主函数(即main)中, 通过调用printf来显示选项菜单;调用input进行数据的录入;调用mixed去真正执行对应的功能。

6. 对于功能操作,有两点要注意:

1)要对用户的输入进行check,如果是1~5之间的数据,则是正确的,就去调用mixed,否则,程序直接退出。

2)在功能操作过程中,是一个无限循环,要退出这个循环,必须通过菜单选项“5:安全退出”功能才能退出这个循环,而且,退出循环的同时,也意味着程序结束了。

 

三.详细设计:

 1. 函数调用关系图:

 

 

 

 

 

 2. 主要函数说明:

1input

函数原型:int input()

功能:    录入学生数, 并输入每个学生的信息。

输入参数:void

返回:学生个数

 

2mixed

函数原型:void mixed(int m,int n)

功能:    根据用户的输入,调用相应功能的函数。

输入参数:m, 用于菜单功能选择;

          n,学生个数

返回:    void

 

3skim

函数原型:void skim(int n)

功能:    列出学生信息依次为学号、姓名、语文、数学的成绩、总分、平均分。

输入参数:n,学生个数

返回:    void

 

4stati

函数原型:void stati(int n)

功能:    统计各课程的平均分、及格率、最高分、最低分。

输入参数:n,学生个数;

返回:    void

 

5search

函数原型:void search(int n,char m[])

功能:    按姓名查找某学生成绩。

输入参数:n, 学生个数;

          m,学生姓名

返回:void

 

6sort

函数原型:void sort(int n)

功能:    按学生的总分升序排序。

输入参数:n, 学生个数;

返回:    void

 

7exit0):这个函数是C库函数,用于退出程序。

 

 3. 流程图:

 

 

四.原代码:

 

/* 学生成绩管理程序设计

1)选项菜单集成各功能函数模块

2)录入学生成绩(姓名、学号、语文、数学成绩,总分自动计算)

3)按总分排名次

4)按姓名查找某学生成绩

5)统计各课程的平均分、及格率、最高分、最低分

6)打印成绩表

*/

 

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

 

#define N 175

 

typedef struct mark

{

     double yuwen;

     double shuxue;

 

}mark;

 

typedef struct

{

     long number;

     char name[20];

     double sum;

     double aver;

     mark achie;

}student;

 

student stu[N];

 

double ymin,ymax,smax,smin,yper,sper,yaver=0,saver=0;

 

int input()

{

 int i,n;

 printf("请输入你要输入的学生数:/n");

 scanf("%d",&n);

 for(i=1;i<=n;i++)

 {

  printf("请输入第%d个学生的信息(包括学号、姓名、语文、数学的成绩)/n",i);

  scanf(

     "%ld%s%lf%lf",

     &stu[i].number,

     stu[i].name,

     &stu[i].achie.yuwen,

     &stu[i].achie.shuxue

     );

 }

 return(n);

}   /* end input()   */

 

void skim(int n)

{

  int i;

  printf("列出的学生信息依次为学号、姓名、语文、数学的成绩、总分、平均分/n");

  for(i=1;i<=n;i++)

  {

   stu[i].sum=stu[i].achie.yuwen+stu[i].achie.shuxue;

   stu[i].aver=stu[i].sum/2.0;

   printf("%d个学生的信息为:/n",i);

   printf(

        "%d/t%s/t%lf/t%lf/t",

        stu[i].number,

        stu[i].name,

        stu[i].achie.yuwen,

        stu[i].achie.shuxue

      );

   printf("%lf/t%lf/n",stu[i].sum,stu[i].aver);

  }

} /* end skim()   */

 

void search(int n,char m[])

{

 int i;

 for(i=1;i<=n;i++)

      if(strcmp(stu[i].name,m)==0)

   break;

 if(i>n)

  printf("系统查找不到相应学生的信息,请确认输入后重新输入/n");

 else

 {

  stu[i].sum=stu[i].achie.yuwen+stu[i].achie.shuxue;

  stu[i].aver=stu[i].sum/2.0;

  printf("你要查询的学生的信息是:");

  printf("%d/t%s/t%lf/t%lf/t",stu[i].number,stu[i].name,stu[i].achie.yuwen,stu[i].achie.shuxue);

  printf("%lf/t%lf/n",stu[i].sum,stu[i].aver);

 }

}  /* end search()   */

 

void sort(int n)

{

 int i,j;

 student temp;

 for(i=1;i<=n;i++)

 {

   stu[i].sum=stu[i].achie.yuwen+stu[i].achie.shuxue;

   stu[i].aver=stu[i].sum/2.0;

 }

 for(i=1;i<=n;i++)

  for(j=i+1;j<=n;j++)

   if(stu[i].sum>stu[j].sum)

   {

    temp=stu[i];

    stu[i]=stu[j];

    stu[j]=temp;

   }

 printf("按学生的总分升序排序后的结果是:");

 for(i=1;i<=n;i++)

 {

  printf("%d/t%s/t%lf/t%lf/t",stu[i].number,stu[i].name,stu[i].achie.yuwen,stu[i].achie.shuxue);

  printf("%lf/t%lf/n",stu[i].sum,stu[i].aver);

 }

}   /* end sort()   */

 

void stati(int n)

{

 int i,a=0,b=0;

 ymin=stu[1].achie.yuwen;smin=stu[1].achie.shuxue;

 ymax=stu[1].achie.yuwen;smax=stu[1].achie.shuxue;

 for(i=1;i<=n;i++)

 {

  

   if(stu[i].achie.yuwen<ymin)

    ymin=stu[i].achie.yuwen;

   if(stu[i].achie.yuwen>ymax)

    ymax=stu[i].achie.yuwen;

   if(stu[i].achie.shuxue<smin)

   smin=stu[i].achie.shuxue;

   if(stu[i].achie.shuxue>smax)

    ymin=stu[i].achie.shuxue;

      if(stu[i].achie.yuwen>=60)  a++;

   if(stu[i].achie.shuxue>=60)  b++;

      saver+=stu[i].achie.shuxue/2.0;

   yaver+=stu[i].achie.yuwen/2.0;

 }

 

 yper=(double)a/n;sper=(double)b/n;

 printf("语文的平均分、及格率、最高分、最低分分别为:%lf/t%lf/t%lf/t%lf/n",yaver,yper,ymax,ymin);

 printf("数学的平均分、及格率、最高分、最低分分别为:%lf/t%lf/t%lf/t%lf/n",saver,sper,smax,smin);

 

} /* end stati()   */

 

void mixed(int m,int n)

{

 char k[N];

 switch(m)

 {

    case 1:skim(n);

        break;

    case 2:stati(n);

        break;

    case 3:printf("请输入你要查询的学生的姓名:");

        scanf("%s",k);

        search(n,k);

        break;

    case 4:sort(n);

        break;

    case 5:exit(0);

 }

} /* end mixed()   */

 

void main()

{

 int n,m;

 printf("/n/t为使系统正常工作请先按提示输入学生信息/n/n");

 n=input();

 printf("%d",n);

 do

 {

  printf("请选择你要本系统实现的功能:/n");

  printf("1:学生信息浏览功能/n");

  printf("2:统计各课程的平均分、及格率、最高分、最低分/n");

  printf("3:单用户信息查询功能/n");

  printf("4:排序功能(按学生总分绩进行排序)/n");

  printf("5:安全退出/n");

  printf("/t/t/t/t/t/t请输入你要实现的功能选项:");

 

  scanf("%d",&m);

printf("/n");

 

  if(m<0||m>4)

  {

   printf("程序即将退出/n");

   break;

  }

  else

   mixed(m,n);

 }while(1);

 

 return;

} /* end main()   */

 

 

测试

  

1.       输入学生信息:

  

 

  

2.       学生信息浏览:

 

 

 

3.       统计各课程的平均分、及格率、最高分、最低分:

 

 

 

4.       单用户信息查询:

 

 

 

5.       按学生总分绩进行排序:

 

 

 

6.       安全退出: