学生成绩管理系统V2.0

某班有最多不超过30人(具体人数由键盘输入)参加某门课程的考试,参考前面章节的学生成绩管理系统V1.0”,用一维数组和函数指针作函数参数编程实现如下菜单驱动的学生成绩管理系统,其中每位同学的学号和成绩等数据可以通过不同数组的同一下标来关联:

1)录入每个学生的学号和考试成绩;

2)计算课程的总分和平均分;

3)按成绩由高到低排出名次表;

4)按成绩由低到高排出名次表;

5)按学号由小到大排出成绩表;

6)按学号查询学生排名及其考试成绩;

7)按优秀(90~100)、良好(80~89)、中等(70~79)、及格(60~69)、不及格(0~595个类别,统计每个类别的人数以及所占的百分比;

8)输出每个学生的学号、考试成绩。

这里只用函数指针来做函数参数。

#include <iostream>
#include <iomanip>
using namespace std;
void input(int*, float*,int*);
void caculate(float*,int*);
void sort_in_descending_order_by_score(int*, float* ,int*);
void sort_in_ascending_order_by_score(int*, float*, int*);
void sort_in_ascending_order_by_number(int* ,float* ,int*);
void search(int* ,float* ,int*);
void statistic(float* ,int *);
int main()
{
	int n;
	cout << "Input student number(n<30):";
	cin >> n;
	int choice;
	int xvehao[30];
	float score[30];
	int* p1 = &n, * p2 = xvehao;
	float *p3 = score;
	while (1)
	{
		cout << endl;
		cout << "Management for Students' scores" << endl;
		cout << "1.Input record" << endl;
		cout << "2.Caculate total and average score of course" << endl;
		cout << "3.Sort in descending order by score" << endl;
		cout << "4.Sort in ascending order by score" << endl;
		cout << "5.Sort in ascending order by number" << endl;
		cout << "6.Search by number" << endl;
		cout << "7.Statistic analysis" << endl;
		cout << "8.List record" << endl;
		cout << "0.Exit" << endl;
		cout << "Please Input your choice:";
		cin >> choice;

		if (choice == 1)input(p2, p3, p1);
		else if (choice == 2)caculate(p3, p1);
		else if (choice == 3)sort_in_descending_order_by_score(p2, p3, p1);
		else if (choice == 4)sort_in_ascending_order_by_score(p2, p3, p1);
		else if (choice == 5)sort_in_ascending_order_by_number(p2, p3, p1);
		else if (choice == 6)search(p2, p3, p1);
		else if (choice == 7)statistic(p3, p1);
		else if (choice == 8)sort_in_ascending_order_by_number(p2, p3, p1);
		else if (choice == 0)break;
		else
		{
			cout << "Please input any number from 0 to 8!"<<endl; continue;
		}
	}
	return 0;
}
void input(int *p2, float *p3,int *p1)
{
	int i;
	cout << "Input student's ID, name and score:" << endl;
	for (i = 1; i <= *p1; i++)
	{
		cin >> *(p2+i) >> *(p3+i);
	}
	
}
void caculate(float *p3, int *p1)
{
	float sum=0,aver;
	int i;
	for (i = 1; i <= *p1; i++)
	{
		sum += *(p3+i);
	}
	aver = sum / *p1;
	cout << "sum=" << sum << " , aver=" << fixed << setprecision(2) << aver;
	cout << endl;
}
void sort_in_descending_order_by_score(int *p2, float *p3, int *p1)
{
	int i, j,k;
	for (i = 1; i <= *p1; i++)
	{
		k = i;
		for (j = i+1; j <= *p1 ; j++)
		{
			if (*(p3+k) < *(p3+j))k = j;
		}
		int x = *(p2+i), y = *(p3+i);
		*(p2 + i) = *(p2 + k); *(p3 + i) = *(p3 + k);
		*(p2 + k) = x; *(p3 + k) = y;
	}
	for (i = 1; i <= *p1; i++)
	{
		cout << *(p2+i) << " " << *(p3+i) << endl;
	}
}
void sort_in_ascending_order_by_score(int*p2, float*p3, int*p1)
{
	int i, j, k;
	for (i = 1; i <= *p1; i++)
	{
		k = i;
		for (j = i + 1; j <= *p1; j++)
		{
			if (*(p3 + k) > *(p3 + j))k = j;
		}
		int x = *(p2 + i), y = *(p3 + i);
		*(p2 + i) = *(p2 + k); *(p3 + i) = *(p3 + k);
		*(p2 + k) = x; *(p3 + k) = y;
	}
	for (i = 1; i <= *p1; i++)
	{
		cout << *(p2 + i) << " " << *(p3 + i) << endl;
	}
}
void sort_in_ascending_order_by_number(int *p2, float *p3, int *p1)
{
	int i, j,k;
	for (i = 1; i <= *p1; i++)
	{
		k = i;
		for (j = i + 1; j <= *p1; j++)
		{
			if (*(p2+j) < *(p2+k))k = j;
		}
		int x = *(p2+i), y = *(p3+i);
		*(p2 + i) = *(p2 + k); *(p3 + i) = *(p3 + k);
		*(p2 + k) = x; *(p3 + k) = y;
	}
	for (i = 1; i <= *p1; i++)
	{
		cout << *(p2 + i) << " " << *(p3 + i) << endl;
	}
}
void search(int *p2, float *p3, int *p1)
{
	int number;
	cin >> number;
	int i,k;
	for (i = 1; i <= *p1; i++)
	{
		if (*(p2+i) == number)
		{
			cout << *(p2 + i) << " " << *(p3 + i) <<endl;
			k = 1;
			break;
		}
		else k = 0;
	}
	if (k == 0)cout << "Can't find this student!"<<endl;
}
void statistic(float *p3, int *p1)
{
	int i;
	int A = 0, B = 0, C = 0, D = 0, E = 0, F = 0;
	for (i = 1; i <= *p1; i++)
	{
		if (*(p3+i) == 100)A++;
		else if (*(p3 + i) >= 90 && *(p3 + i) <= 99)B++;
		else if (*(p3 + i) >= 80 && *(p3 + i) <= 89)C++;
		else if (*(p3 + i) >= 70 && *(p3 + i) <= 79)D++;
		else if (*(p3 + i) >= 60 && *(p3 + i) <= 69)E++;
		else F++;
	}
	cout << "<60 "  << F<< " " <<fixed<<setprecision(2)<< ((float)F / *p1) * 100 << "%" << endl;
	cout << "60-69 "  << E<< " " << fixed << setprecision(2) << ((float)E / *p1) * 100 << "%" << endl;
	cout << "70-79 "  << D<< " " << fixed << setprecision(2) << ((float)D / *p1) * 100 << "%" << endl;
	cout << "80-89 "  << C<< " " << fixed << setprecision(2) << ((float)C / *p1) *100<< "%"<<endl;
	cout << "90-99 "  << B<< " " << fixed << setprecision(2) << ((float)B / *p1) * 100 << "%" << endl;
	cout << "100 "  << A<< " " << fixed << setprecision(2) << ((float)A / *p1) * 100 << "%" << endl;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值