简单的学生管理系统
stu_manage.c :实验功能选择主函数
#include "stu.h"
int main(int argc, const char *argv[])
{
char order;
while(1)
{
help();
printf("请输入命令=");
scanf("%c", &order);
switch(order)
{
case 'T':
if(n == 0)
{
type();
printf("按回车返回主页\n");
getchar();
}
else
{
add();
printf("按回车返回主页\n");
getchar();
}
break;
case 'A':
if(n == 0)
{
puts("成绩表为空!请先使用命令T录入学生成绩。");
printf("按回车返回主页\n");
getchar();
}
else
{
average();
printf("按回车返回主页\n");
getchar();
}break;
case 'L':
if(n == 0)
{
puts("成绩表为空!请先使用命令T录入学生成绩。");
printf("按回车返回主页\n");
getchar();
}
else
{
list();
printf("按回车返回主页\n");
getchar();
}break;
case 'P':
if(n == 0)
{
puts("成绩表为空!请先使用命令T录入学生成绩。");
printf("按回车返回主页\n");
getchar();
}
else
{
sort();
printf("按回车返回主页\n");
getchar();
}break;
case 'S':
if(n == 0)
{
puts("成绩表为空!请先使用命令T录入学生成绩。");
printf("按回车返回主页\n");
getchar();
}
else
{
search();
printf("按回车返回主页\n");
getchar();
}break;
case 'C':
system("clear");
break;
case 'Q':
exit(1);
}
getchar();//用scanf输入字符时,会同时把回车接受到,放在
//缓存区中,执行下次while循环时,会打印两次输出语句,
//所以使用getcahr来接收垃圾字符
}
return 0;
}
stu.c 存放帮助界面和主函数需要调用的功能函数
#include "stu.h"
extern int n;
STU st[N];
//******帮助菜单*******
void help()
{
printf("**************************************\n");
printf("* 学生成绩管理系统--帮助菜单 *\n");
printf("**************************************\n");
printf("* T = 成绩录入 *\n");
printf("* A = 计算学生平均成绩 *\n");
printf("* L = 列出成绩表 *\n");
printf("* P = 按平均成绩由高到低排序 *\n");
printf("* S = 按学号查询学生成绩 *\n");
printf("* C = 清屏 *\n");
printf("* Q = 退出系统 *\n");
printf("**************************************\n");
}
//*****成绩录入*******T
void type()
{
int i;
while(1)
{
printf("请输入学生人数:");
scanf("%d", &n);
if(n>10||n<0)
{
printf("输入人数错误,请重新输入\n");
}
else
{
printf("请输入%d名学生的三门课成绩:\n", n);
printf("学号 语文 数学 外语\n");
for(i = 1; i <= n; i++)
{
st[i-1].num = i;
printf("%d ",st[i-1].num);
scanf("%f %f %f",&st[i-1].score[0], &st[i-1].score[1], &st[i-1].score[2]);
}
break;
}
}
}
//*****列出成绩******L
void list()
{
printf("学号 语文 数学 外语 平均分\n");
for(int i=0;i<n;i++)
{
printf("%-5d%-6.2f%-6.2f%-6.2f%.2f\n",st[i].num,st[i].score[0],st[i].score[1],st[i].score[2],st[i].ave);
}
printf("求平均分请按A\n以平均分排序请按P\n");
}
//*****求出平均值******A
void average()
{
int sum;
for(int i=0;i<n;i++)
{
sum=st[i].score[0]+st[i].score[1]+st[i].score[2];
st[i].ave=sum/3.0;
}
printf("平均分已求出,按L查看\n按平均分从高到低排序请按P\n");
}
//*****按平均分从高到低排序*****P
int sort()
{
for(int x=0;x<n;x++)
{
if(st[x].ave==0)
{
printf("有学生的平均分尚未求出,按A求出后再排序\n");return 0;
}
}
int max=0;
for(int i=1;i<n;i++)
{
max=i-1;
for(int j=0;j<n-i;j++)
{
if(st[max].ave<st[j+i].ave)
max=i+j;
}
STU temp=st[max];
st[max]=st[i-1];
st[i-1]=temp;
}
printf("排序已完成,按L查看列表\n");
return 1;
}
//*****按学号查询******S
void search()
{
int num_search;
while(1)
{
printf("输入你要查找的学生的学号:");
scanf("%d",&num_search);
if(num_search>n||num_search<0)
{
printf("学生不存在,请重新输入\n");
}
else
{
for(int i=0;i<n;i++)
{
if(st[i].num==num_search)
{
printf("您要找的学生信息为\n");
printf("学号:%d语文:%.2f数学:%.2f外语:%.2f平均分:%.2f\n",st[i].num,st[i].score[0],st[i].score[1],st[i].score[2],st[i].ave);
}
}
break;
}
}
}
//*****新增学生的成绩录入******T
void add()
{
int n_add;
while(1)
{
if(n==N)
{
printf("系统人数达到上线,无法添加\n");break;
}
printf("系统中已记录%d人,还有%d个空间\n",n,N-n);
printf("输入本次要添加的学生人数:");
scanf("%d",&n_add);
if(n_add>(N-n)||n_add<0)
{
printf("输入不正确,重新输入");continue;
}
printf("请输入%d名学生的三门课成绩:\n", n_add);
printf("学号 语文 数学 外语\n");
for(int i=n;i<(n+n_add);i++)
{
st[i].num = i+1;
printf("%d ",st[i].num);
scanf("%f %f %f",&st[i].score[0], &st[i].score[1], &st[i].score[2]);
}
break;
}
n=n+n_add;
}
stu.h 头文件,存放声明头文件,全局变量和函数
#include <stdio.h>
#include <stdlib.h>
#define N 10
int n;
typedef struct stu{
int num;
float score[3];
float ave;
}STU;
void help();
void type();
void list();
void average();
int sort();
void search();
void add();
通过对以上三个文件的联合编译,基本实现一个简单的学生管理系统。