C语言编程实践-学生成绩管理程序

一.题目要求:

 用C语言实现一个学生成绩管理系统,具体需求如下:

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

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

(3)按总分排名次

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

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

(6)打印成绩表

(7)退出

二.设计分析: 

因为使用C语言,直接在终端(cmd命令行)进行编译运行。要有文字提示(即菜单选项)。

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)input

函数原型:int input()

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

输入参数:void

返回:学生个数

(2)mixed

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

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

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

          n,学生个数

返回:    void

(3)skim

函数原型:void skim(int n)

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

输入参数:n,学生个数

返回:    void

(4)stati

函数原型:void stati(int n)

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

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

返回:    void

(5)search

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

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

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

          m,学生姓名

返回:void

(6)sort

函数原型:void sort(int n)

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

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

返回:    void

(7)exit(0):

这个函数是C库函数,用于退出程序。

四.原代码: 

具体代码如下:

#include
#include
#include

#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.yuwenymax)

    ymax=stu[i].achie.yuwen;

   if(stu[i].achie.shuxuesmax)

    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;
 sper=(double)b;

 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()   */

五.编译运行:

   编译:

gcc mng_stu_score.c

生成a.out可执行文件。 

运行:

aibook@aibookdeMacBook-Pro c_stu % ./a.out

为使系统正常工作请先按提示输入学生信息

请输入你要输入的学生数:

3

请输入第1个学生的信息(包括学号、姓名、语文、数学的成绩)

0001

zhangsan

96

98

请输入第2个学生的信息(包括学号、姓名、语文、数学的成绩)

0002

lisi

97

96

请输入第3个学生的信息(包括学号、姓名、语文、数学的成绩)

0003

wangwu

99

99

.

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

1:学生信息浏览功能

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

3:单用户信息查询功能

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

5:安全退出

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

程序即将退出!

aibook@aibookdeMacBook-Pro c_stu %

你可能感兴趣的:(Linux,C语言编程,input,search,struct,测试,工作,c)