学生管理系统
1.系统主体
#include "stu.h"
extern int n;
STU st[N];
//******帮助菜单*******
void help()
{
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");
}
//*****成绩录入*******
void type()
{
int i;
while(1)
{
printf("请输入学生人数:");
scanf("%d", &n);
if(n>10||n<0)
{
printf("学生人数不符合错误,请重新输入:");
}
else
{
printf("请输入%d名学生的三门课成绩:\n", n);
printf("学号 语文 数学 外语\n");
break;
}
}
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]);
}
}
//*****列出成绩******
void list()
{
int i;
printf("学号 语文 数学 外语\n");
for(i=1;i<=n;i++)
{
st[i-1].num = i;
printf("%d\t%.2f\t%.2f\t%.2f",st[i-1].num,st[i-1].score[0], st[i-1].score[1], st[i-1].score[2]);
printf("\n");
}
}
//*****求出平均值******
void average()
{
int sum;
for(int i=1;i<=n;i++)
{
sum=st[i-1].score[0]+st[i-1].score[1]+st[i-1].score[2];
st[i-1].ave=sum/3.0;
}
printf("平均成绩已计算,请按P查看平均成绩排序\n");
}
//*****按平均分从高到低排序*****
void sort()
{
for(int i=1;i<n;i++)
{
int max=i-1;
for(int j=0;j<n-i;j++)
{
if(st[max].ave<st[i+j].ave)
{
max=i+j;
}
}
struct STU temp=st[max];
st[max]=st[i-1];
st[i-1]=temp;
}
printf("学号 语文 数学 外语 平均分\n");
for(int i=1;i<=n;i++)
{
printf("%d\t%.2f\t%.2f\t%.2f\t%.2f",st[i-1].num,st[i-1].score[0], st[i-1].score[1], st[i-1].score[2],st[i-1].ave);
printf("\n");
}
}
//*****按学号查询******
void search()
{
int num;
while(1)
{
printf("请输入学号:");
scanf("%d",&num);
int flag=0;
for(int i=0;i<n;i++)
{
if(num==st[i].num)
{
flag=1;
printf("学号 语文 数学 外语 平均分\n");
printf("%d\t%.2f\t%.2f\t%.2f\t%.2f",st[i].num,st[i].score[0], st[i].score[1], st[i].score[2],st[i].ave);
printf("\n");
break;
}
else
{
continue;
}
}
if(flag==0)
{
printf("未找到该学生,请按回车键重试\n");
}
else
{
break;
}
}
}
//*****新增学生的成绩录入******
void add()
{
int new;
while(1)
{
if(n==N)
{
printf("人数达到上线,无法添加\n");
break;
}
printf("已记录%d人,还可以录入%d人\n",n,N-n);
printf("输入要添加的学生人数:");
scanf("%d",&new);
if(new>(N-n)||new<0)
{
printf("输入不正确,重新输入");
continue;
}
printf("请输入%d名学生的成绩:\n", new);
printf("学号 语文 数学 外语\n");
for(int i=n;i<(n+new);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+new;
}
2.分文件
#include "stu.h"
int main(int argc, const char *argv[])
{
char order;
help();
while(1)
{
printf("请输入命令=");
scanf("%c", &order);
switch(order)
{
case 'H':
help();
break;
case 'T':
if(n == 0)
type();
else
add();
break;
case 'A':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
average();
break;
case 'L':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
list();
break;
case 'P':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
sort();
break;
case 'S':
if(n == 0)
puts("成绩表为空!请先使用命令T录入学生成绩。");
else
search();
break;
case 'C':
system("clear");
break;
case 'Q':
exit(1);
}
getchar();//用scanf输入字符时,会同时把回车接受到,放在
//缓存区中,执行下次while循环时,会打印两次输出语句,
//所以使用getcahr来接收垃圾字符
}
return 0;
}
3.头文件
#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();
void sort();
void search();
void add();