一、why、what、how
(一)why
首先是为什么要做这个程序,一是出于练习的目的,可以更熟练的运用和学习c语言,掌握多文件编程,也有利于相关概念的理解;二是这个程序可以帮助我们批量化的处理信息,提高工作效率。
(二)what
这个学生管理系统包括菜单和它所实现的功能,用户需要根据提示输入指令和数据让计算机实现对应的功能,功能包括成绩录入、查看、查询、计算平均分、排序、清屏、退出。
(三)how
主要是定义一个结构体来存储学号和成绩信息、并通过多个函数来实现多个子功能,最后实现整体功能。其中用到了switch case分支语句来辨别指令进入到对应的功能模块,通过for循环遍历来输入、查看、查询、控制程序终止,通过冒泡排序来实现按平均分排序。
二、代码
system.h//函数及变量的声明
#include <stdio.h>
#include <stdlib.h>
//函数及变量的声明
int num;//num是学生人数,定义为全局变量,方便for循环使用
int i,j;
struct message //包含学号以及成绩
{
int number;
float chinese;
float math;
float english;
float avg;//默认为0
} stu[100];
void print_menu();//打印菜单
void Type();//输入学生成绩信息
void Average();//计算三科平均分
void List();//列出成绩
void Sort();//成绩排序
void Search();//查询某学生成绩
void System();//清屏
void Help();//打印菜单,用print_menu代替
system.c//函数功能的实现
#include "system1.h"
void print_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");
}
void Type()//录入学生信息
{
printf("请输入学生人数:");
scanf("%d", &num);
printf("学号 语文 数学 外语\n");
for (i = 0; i < num; i++)
{
stu[i].number = i + 1;
printf("%d ", stu[i].number);
scanf("%f %f %f", &stu[i].chinese, &stu[i].math, &stu[i].english);
}
}
void Average()
{
for (i = 0; i < num; i++)
{
stu[i].avg = (stu[i].chinese + stu[i].math + stu[i].english) / 3.0;
}
printf("平均分已计算。请使用命令L查看。\n");
}
void List()//输出成绩列表
{
printf("学生成绩如下:\n");
printf("学号 语 文 数 学 外 语 平 均 分\n");
for (i = 0; i < num; i++)
{
printf("%2d %3.1f %3.1f %3.1f %3.1f\n", stu[i].number,stu[i].chinese, stu[i].math, stu[i].english, stu[i].avg);
}
}
void Sort()//按成绩排序
{
for (i = 0; i < num - 1; i++)
{
for (j = 0; j < num - i - 1; j++)
{
if (stu[j].avg < stu[j + 1].avg)
{
struct message temp = stu[j];
stu[j] = stu[j + 1];
stu[j + 1] = temp;
}
}
}
printf("完成排序,请使用命令L查看。\n");
}
void Search()
{
int target;
printf("请输入要查询的学生学号:\n");
scanf("%d", &target);
for (i = 0; i < num; i++)
{
if (stu[i].number == target)
{
printf("学号 语 文 数 学 外 语 平 均 分\n");
printf(" %3.1f %3.1f %3.1f %3.1f\n", stu[i].chinese, stu[i].math, stu[i].english, stu[i].avg);
}
}
}
main.c
#include "system1.h"
int main()
{
char cmd;
int value=0;
print_menu();
while (1)
{
printf("请输入命令=");
scanf(" %c", &cmd);
if(cmd=='T')
{
value=1;
}else if(value==0 && (cmd=='L' || cmd=='A' || cmd=='P' || cmd=='S'))
{
printf("成绩表为空!请先使用命令T录入学生成绩。\n");
continue;
}
switch (cmd)
{
case 'H':
print_menu();
break;
case 'T':
Type();
break;
case 'A':
Average();
break;
case 'L':
List();
break;
case 'P':
Sort();
break;
case 'S':
Search();
break;
case 'C':
system("clear");
break;
case 'Q':
return -1;
}
}
return 0;
}