前言
C语言学完了,知识很多,也很琐碎,学生成绩管理系统对我们而言是一次锻炼的机会,一次让我们将C语言知识融会贯通的机会,通过编程学生成绩管理系统,我们运用了循环、指针、函数等知识,也能让我们更加熟悉了C语言相关知识。话不多说,直接开始。
一、思路
学生成绩管理系统,说难也难,说简单也简单,对于初学者的我们也算一项不小的挑战了,对于这个系统,它的功能等等很多,所以我们需要有一个大概的思路,来让我们更好的完成它。
流程图
2、代码
根据这个流程图,我们先做好一个大概的框架,然后再一部分一部分的补全即可。
1)登录界面
将学生成绩管理系统的功能键选择的提示信息打印出来,就组成了一个简易的登录界面:
void menu()
{
printf("**********************************************\n");
printf(" * 学生成绩管理系统----帮助菜单 *\n");
printf("**********************************************\n");
printf(" * H = 显示帮助菜单 *\n");
printf(" * T = 成绩录入 *\n");
printf(" * A = 计算学生平均分 *\n");
printf(" * L = 列出成绩表 *\n");
printf(" * P = 按平均成绩由高到低排序 *\n");
printf(" * S = 按学号查询学生成绩 *\n");
printf(" * C = 清屏 *\n");
printf(" * Q = 请退出系统 *\n");
printf("*********************************************\n");
printf(" * Copyright <C> 2011.06.12 BY 姓名 *\n");
printf("*********************************************\n");
}
2)功能界面
成绩录入
void luru()
{
i=0;
printf("请输入学生人数:");
scanf("%d",&j);
printf("请输入%d名学生的三门课成绩:\n",j);
printf("学号 语文 数学 外语\n");
while (i<j)
{
scanf("%d %f %f %f",&stu[i].xuehao,&stu[i].yuwen,&stu[i].shuxue,&stu[i].waiyu);
i++;
}
}
计算学生平均分
void avg()
{
for(i=0;i<j;i++)
{
stu[i].AVG=(stu[i].yuwen+stu[i].shuxue+stu[i].waiyu)/3;
}
printf("平均分已计算。请使用命令L查看。\n");
}
列出成绩表
void grades()
{
printf("学生成绩如下:\n");
printf("学号 语文 数学 外语 平均分\n");
for(i=0;i<j;i++)
{
printf(" %d %.1f %.1f %.1f %.1f\n",stu[i].xuehao,stu[i].yuwen,stu[i].shuxue,stu[i].waiyu,stu[i].AVG);
}
}
按平均成绩由高到低排序
void paixu()
{
i=0;
int k;
struct student tem;
for(i=0;i<j;i++)
{
for(k=i+1;k<j;k++)
{
if(stu[i].AVG<stu[k].AVG)
{
tem=stu[i];
stu[i]=stu[k];
stu[k]=tem;
}
}
}
printf("完成排序。请使用L命令查看。\n");
}
按学号查询学生成绩
void chaxun()
{
int m;
printf("请输入要查询的学生学号:");
scanf("%d",&m);
for(i=0;i<j;i++)
{
if(stu[i].shuxue=m)
{
printf("学号 语文 数学 外语 平均分\n");
printf(" %d %.1f %.1f %.1f %.1f\n",stu[i].xuehao,stu[i].yuwen,stu[i].shuxue,stu[i].waiyu,stu[i].AVG);
}
}
}
清屏
void qingping()
{
system("clear");
}
请退出系统
void tuicu()
{
t=0;
printf("Press any key to continue\n");
return ;
}
3)完整代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 10000
char ch;
int t=1,j,i;
struct student
{
int xuehao;
float yuwen;
float shuxue;
float waiyu;
float AVG;
}stu[N];
void menu()
{
printf("**********************************************\n");
printf(" * 学生成绩管理系统----帮助菜单 *\n");
printf("**********************************************\n");
printf(" * H = 显示帮助菜单 *\n");
printf(" * T = c成绩录入 *\n");
printf(" * A = 计算学生平均分 *\n");
printf(" * L = 列出成绩表 *\n");
printf(" * P = 按平均成绩由高到低排序 *\n");
printf(" * S = 按学号查询学生成绩 *\n");
printf(" * C = 清屏 *\n");
printf(" * Q = 请退出系统 *\n");
printf("*********************************************\n");
printf(" * Copyright <C> 2011.06.12 BY 姓名 *\n");
printf("*********************************************\n");
}
void luru()
{
i=0;
printf("请输入学生人数:");
scanf("%d",&j);
printf("请输入%d名学生的三门课成绩:\n",j);
printf("学号 语文 数学 外语\n");
while (i<j)
{
scanf("%d %f %f %f",&stu[i].xuehao,&stu[i].yuwen,&stu[i].shuxue,&stu[i].waiyu);
i++;
}
}
void avg()
{
for(i=0;i<j;i++)
{
stu[i].AVG=(stu[i].yuwen+stu[i].shuxue+stu[i].waiyu)/3;
}
printf("平均分已计算。请使用命令L查看。\n");
}
void grades()
{
printf("学生成绩如下:\n");
printf("学号 语文 数学 外语 平均分\n");
for(i=0;i<j;i++)
{
printf(" %d %.1f %.1f %.1f %.1f\n",stu[i].xuehao,stu[i].yuwen,stu[i].shuxue,stu[i].waiyu,stu[i].AVG);
}
}
void paixu()
{
i=0;
int k;
struct student tem;
for(i=0;i<j;i++)
{
for(k=i+1;k<j;k++)
{
if(stu[i].AVG<stu[k].AVG)
{
tem=stu[i];
stu[i]=stu[k];
stu[k]=tem;
}
}
}
printf("完成排序。请使用L命令查看。\n");
}
void chaxun()
{
int m;
printf("请输入要查询的学生学号:");
scanf("%d",&m);
for(i=0;i<j;i++)
{
if(stu[i].shuxue=m)
{
printf("学号 语文 数学 外语 平均分\n");
printf(" %d %.1f %.1f %.1f %.1f\n",stu[i].xuehao,stu[i].yuwen,stu[i].shuxue,stu[i].waiyu,stu[i].AVG);
}
}
}
void qingping()
{
system("clear");
}
void tuicu()
{
t=0;
printf("Press any key to continue\n");
return ;
}
int main(int argc, char const *argv[])
{
menu();
while (t)
{
printf("请输入命令=");
scanf("%c",&ch);
getchar();
switch (ch)
{
case 'H':
menu();
break;
case 'T':
luru();
break;
case 'A':
if(n==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
}
eles
{
avg();
}
break;
case 'L':
if(n==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
}
eles
{
grades();
}
break;
case 'P':
if(n==0)
{
printf("成绩表为空!请先使用命令T录入学生成绩\n");
}
eles
{
paixu();
}
break;
case 'S':
chaxun();
break;
case 'C':
qingping();
break;
case 'Q':
tuicu();
break;
default:
break;
}
}
return 0;
}