学生管理系统

#include<stdio.h>

#include<string.h>

#include<strings.h>

#include<stdlib.h>

int i;

int m;

struct student

{

int id;

float chinese;

float mach;

float english;

float average;

}stu[32],stu2[32];

void Type()

{

int o;

if(stu[0].id>=1&&stu[0].id<=32)

{

printf("里边存在数据,是否覆盖?输入1表示覆盖,输入2表示取消覆盖\n:");

scanf("%d",&o);getchar();

if(1==o)

o+1;

else

{

return;

}

}

printf("输入学生人数:\n");

scanf("%d",&m);

printf("学号 语文 数学 外语");

for(i=0;i<m;i++)

{

stu[i].id=i+1;

printf("\n%d ",stu[i].id);

scanf("%f %f %f",&stu[i].chinese,&stu[i].mach,&stu[i].english);

getchar();

stu[i].average=0;

// printf("%d %d %d",stu[i].chinese,stu[i].mach,stu[i].english);

}

}

void List()

{

if(stu[0].id<1||stu[0].id>32)

printf("成绩表为空!请先使用命令T录入学生成绩\n");

else if(stu[0].id>=1&&stu[0].id<=32)

{

printf("学号 语文 数学 外语 平均分\n");

for(i=0;i<m;i++)

printf(" %d %.2f %.2f %.2f %.2f\n",stu[i].id,stu[i].chinese,stu[i].mach,stu[i].english,stu[i].average);

}

}

void Average()

{

if(stu[0].id<1||stu[0].id>32)

printf("成绩表为空!请先使用命令T录入学生成绩\n");

else if(stu[0].id>=1&&stu[0].id<=32)

{

for(i=0;i<m;i++)

stu[i].average=(stu[i].chinese+stu[i].mach+stu[i].english)/3.00;

printf("平均分已计算。请使用命令L查看!\n");

}

}

void Sort()

{

if(stu[0].id<1||stu[0].id>32)

printf("成绩表为空!请先使用命令T录入学生成绩\n");

else if(stu[0].id>=1&&stu[0].id<=32)

{

for(i=0;i<m-1;i++)

{

for(int j=0;j<m-1-i;j++)

if(stu[j].average<stu[j+1].average)

{

stu2[0].id=stu[j].id;

stu2[0].average=stu[j].average;

stu2[0].chinese=stu[j].chinese;

stu2[0].english=stu[j].english;

stu2[0].mach=stu[j].mach;

stu[j].id=stu[j+1].id;

stu[j].average=stu[j+1].average;

stu[j].chinese=stu[j+1].chinese;

stu[j].english=stu[j+1].english;

stu[j].mach=stu[j+1].mach;

stu[j+1].id=stu2[0].id;

stu[j+1].average=stu2[0].average;

stu[j+1].chinese=stu2[0].chinese;

stu[j+1].english=stu2[0].english;

stu[j+1].mach=stu2[0].mach;

}

}

printf("完成排序。请使用命令L查看!\n");

}

}

void Search()

{

int o;

if(stu[0].id<1||stu[0].id>32)

printf("成绩表为空!请先使用命令T录入学生成绩\n");

else if(stu[0].id>=1&&stu[0].id<=32)

{

printf("请输入要查询的学生学号\n:");

scanf("%d",&o);getchar();

printf("学号 语文 数学 外语 平均分\n");

printf(" %d %.2f %.2f %.2f %.2f\n",stu[o-1].id,stu[o-1].chinese,stu[o-1].mach,stu[o-1].english,stu[o-1].average);

}

}

void jiemian()

{

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(" * Conyright <C> 2011.06.12 By 姓名 *\n");

printf("******************************************\n");

}

int main(int argc, char const *argv[])

{

jiemian();

char start;

scanf("%c",&start);

getchar();

while('Q'!=start)

{

//printf("%c\n",start);

switch(start)

{

case 'H':jiemian();break;

case 'T':Type();break;

case 'L':List();break;

case 'A':Average();break;

case 'S':Search();break;

case 'P':Sort();break;

case 'C':system("clear");break;

case 'Q':break;

default :printf("错误命令!重新输入!\n");

}

printf("重新输入命令");

scanf("%c",&start);

getchar();

}

return 0;

}

1)系统运行,打开如下界面。列出系统帮助菜单(即命令菜单),提示输入命令。

2)开始时还没有录入成绩,所以输入命令 L 也无法列出成绩。应提示“成绩表为空!请先使用命令 T 录入学生成绩。”

同理,当输入其他的成绩处理命令时也作相应的处理。

3)输入命令 T,调用Type子函数录入成绩。

界面提示输入学生人数

输入3 ¿ 提示输入3名学生的3门课成绩,列出成绩单的表头“学号 语文 数学 英语”,提示学号:1

输入1号学生的3门课成绩,用空格间隔,回车结束。提示学号:2

输入2号学生的3门课成绩,用空格间隔,回车结束。提示学号:3

输入3号学生的3门课成绩,用空格间隔,回车结束。Type子函数调用结束,返回。提示输入命令。

4)输入命令 L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。

5)输入命令 A ,调用Average子函数计算平均分,提示“平均分已计算。请使用命令L查看。” Average子函数调用结束,返回。提示输入命令。

输入命令L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。

6)输入命令 P ,调用Sort子函数将各学生记录按平均分由高到低排序,提示“完成排序。请使用命令L查看。” Sort子函数调用结束,返回。提示输入命令。

输入命令L ,调用List子函数输出成绩表。List子函数调用结束,返回。提示输入命令。

7)输入命令 S ,调用Search子函数查询学生成绩,提示“输入要查询的学生学号”。

输入2 ¿ 找到2号学生的成绩并输出。Search子函数调用结束,返回。提示输入命令。

8)输入命令C ¿ 执行清屏函数语句system("clear");

清除屏幕的所有内容。提示输入命令。

9)输入命令H ¿ 调用Help子函数显示帮助菜单。Help子函数调用结束,返回。提示输入命令。

10)输入命令Q ¿ 则退出系统。

注意:

1)输出数组元素时,要将学号单独处理,输出为整数(即保留0位小数)。同理,在计算成绩时也要将第1列的学号撇开,只计算第2列之后的。成绩保留1位小数。

2)学生人数n贯穿始终,通过n的值判断当前命令的子函数是否能够调用执行。例如:当n=0时,说明还没有录入成绩。而一旦输入命令T,也即调用Type子函数录入了成绩,则n的值就不再是0。当n!=0时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值