学生管理系统(C)

学生管理系统

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时,就可以进行其他的成绩操作,但不能再执行录用成绩的操作。所以当用户输入的命令无法执行时,应当给出提示。
要求:1.用结构体数组 2.分文件写 3. 用make编译
如要实现分文件&&make,请自行编写Makefile文件,并且封装函数

#include<stdio.h>
#include<string.h>
typedef struct {
	int id;
	float chinese;
	float math;
	float english;
	float average;
} student;
void ui();
void Type(student *p);
void Average(student *p);
void List(student *stu);
void Sort(student *p);
void Search(student *p);

unsigned int sum =0;//该系统的总数
int main() {
	char func;
	student stu[10] = {0};
	student *p = stu;
	ui();
	while(1) {
		printf("请输入命令 = ");
		scanf("%c",&func);
		switch(func) {
			case 'T':
				Type(p);
				break;
			case 'L':
				List(p);
				break;
			case 'A':
				Average(p);
				break;
			case 'P':
				Sort(p);
				break;
			case 'S':
				Search(p);
				break;
			case 'C':
				//system("clear");
				break;
			case 'H':
				ui();
				break;
			case 'Q':
				return 0;
				break;
			default:
				printf("其他功能暂未开发!敬请期待!\n");
		}
		getchar();
	}
	return 0;

}
void ui() {
	puts("*******************************************");
	puts("*         学生管理系统--帮助菜单              *");
	puts("*******************************************");
	puts("*          H = 显示帮助菜单                 *");
	puts("*          T = 成绩录入                    *");
	puts("*          A = 计算学生平均分               *");
	puts("*          L = 列出成绩表                  *");
	puts("*          P = 按平均成绩由高到低排序        *");
	puts("*          S = 按学号查询学生成绩           *");
	puts("*          C = 清屏                      *");
	puts("*          Q = 退出系统                   *");
	puts("*******************************************");
	puts("*   Copyringht  <C> 2022.04.09  By 屈会聪 *");
	puts("*******************************************");
}
void Type(student *p) {
	int num;
	printf("请输入学生人数:\n");
	scanf("%d",&num);
	printf("学号\t语文\t数学\t英语\n");
	for(int i = sum; i < sum+num; i++) {
		printf(" %-7d ",i+1);
		p[i].id = i+1;
		scanf("%f\t%f\t%f",&(p+i)->chinese,&(p+i)->math,&(p+i)->english);
	}
	sum += num;
}
void Average(student *p) {
	if(sum == 0) {
		printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
	} else {
		for(int i = 0; i <= sum; i++) {
			(p+i)->average=((p+i)->chinese+(p+i)->math+(p+i)->english)/3;
		}
		printf("平均分已计算。请使用命令L查看。\n");
	}
}
void List(student *stu) {
	if(sum == 0) {
		printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
	} else {
		printf("学生成绩如下:\n");
		printf("学号\t语文\t\t数学\t\t英语\t\t平均分\n");
		for(int i = 0; i <= sum; i++) {
			if(stu[i].id==0) {

			} else {
				printf("%-5d\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\n",stu[i].id,stu[i].chinese,stu[i].math,stu[i].english,stu[i].average);
			}
		}
	}
}
void Sort(student *p) {
	if(sum == 0) {
		printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
	} else {
		int i,j;
		student tmp;
		for(i = 0; i<sum-1; i++) {
			for(j=0; j<sum-1-i; j++) {
				if((p+j)->average < (p+j+1)->average) {
					tmp = *(p+j);
					*(p+j) = *(p+j+1);
					*(p+j+1) = tmp;
				}
			}
		}
		printf("完成排序。请使用命令L查看。\n");
	}
}
void Search(student *p) {
	if(sum == 0) {
		printf("成绩表为空!请先使用命令 T 录入学生成绩。\n");
	} else {
		int n;
		printf("输入要查询的学生学号:");
		scanf("%d",&n);
		for(int i =0; i<sum; i++) {
			if((p+i)->id == n) {
				printf("学号\t语文\t\t数学\t\t英语\t\t平均分\n");
				printf("%-5d\t%.1f\t\t%.1f\t\t%.1f\t\t%.1f\n",(p+i)->id,(p+i)->chinese,(p+i)->math,(p+i)->english,(p+i)->average);
			}
		}
	}
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值