成绩管理系统

/***********************************************************************************/
/*   The student management system uses class array                                */
/*                                                       Programming language:C++  */
/*                                                       By:your name              */
/*                                                       Date:2017/11/27           */
/***********************************************************************************/


#include <iostream>
#include <string>
#include <stdlib.h>
#include <fstream>
using namespace std;
/*头文件区   iostream输入输出   string使用C风格字符串及库函数    stdlib使用system函数 使程序暂停以及清屏   fstream文件读写*/




/*定义数组最大长度  使用堆空间*/
int MAX_STUDENT_NUM=100;


/*类定义 包含学号 姓名 平时成绩 期末成绩*/
class Student 
{
public:
	void inputId();
	void inputName();
	void inputRegularGrade();
	void inputfinalExam();
	int getId();
	void output();
	float CalTotalMark();
private:
	int id;//学号
	char name[20];//姓名
	float regularGrade;//平时成绩
	float finalExam;//期末成绩
};



/*该函数计算总分 总分=期末成绩的一半+平时成绩的一半*/
/*返回值即总分*/
float Student::CalTotalMark()
{
	return 0.5*regularGrade+0.5*finalExam;
}


/*该函数用来输出学生信息*/
void Student::output()
{
		cout<<id<<"\t"<<name<<"\t"<<regularGrade<<"\t\t"<<finalExam<<"\t\t"<<CalTotalMark()<<endl;
}



/*该函数用来读取学生学号*/
/*返回值即学号*/
int Student::getId()
{
	return id;
}

/*该函数用来获取期末成绩*/
/*由于成绩有范围 所以有范围判断*/
void Student::inputfinalExam()
{
	cout<<"请输入期末成绩(0~100)"<<endl;
	cin>>finalExam;
	while(finalExam<0||finalExam>100)
	{
		cout<<"输入错误,成绩应该在0到100之间"<<endl;
		cout<<"请输入期末成绩(0~100)"<<endl;
		cin>>finalExam;
	}
}

/*该函数用来获取平时成绩*/
/*由于成绩有范围 所以有范围判断*/
void Student::inputRegularGrade()
{
	cout<<"请输入平时成绩(0~100)"<<endl;
	cin>>regularGrade;
	while(regularGrade<0||regularGrade>100)
	{
		cout<<"输入错误,成绩应该在0到100之间"<<endl;
		cout<<"请输入平时成绩(0~100)"<<endl;
		cin>>regularGrade;
	}
}

/*该函数用来输入学生姓名*/
void Student::inputName()
{
	char temp[20];
	cout<<"请输入姓名"<<endl;
	cin>>temp;
	strcpy(name,temp);
}


/*该函数用来输入学生学号*/
void Student::inputId()
{
	cout<<"请输入学号"<<endl;
	cin>>id;
}

/*该函数用来显示主菜单*/
/*并获取用户选择*/
/*返回值为用户选择的序号*/
int Select_Menu()
{
	int n;
	system("cls");//清屏 即控制台全黑
	cout<<"               =================================="<<endl;
	cout<<"               =      欢迎使用成绩管理系统      ="<<endl;
	cout<<"               =    1=录入学生    2=显示信息    ="<<endl;
	cout<<"               =    3=排序总评    4=查找学生    ="<<endl;
	cout<<"               =    5=插入学生    6=删除学生    ="<<endl;
	cout<<"               =    7=统计人数    0=退出        ="<<endl;
	cout<<"               =================================="<<endl;
	cout<<"请选择:"<<endl;
	cin>>n;
	while(n>7||n<0)
	{
		cout<<"输入非法请重新输入!"<<endl;
		cin>>n;
	}
	switch(n)
	{
	case 1:
		cout<<"你选择了1=录入学生"<<endl;
		break;
	case 2:
		cout<<"你选择了2=显示信息"<<endl;
		break;
	case 3:
		cout<<"你选择了3=排序总评"<<endl;
		break;
	case 4:
		cout<<"你选择了4=查找学生"<<endl;
		break;
	case 5:
		cout<<"你选择了5=插入学生"<<endl;
		break;
	case 6:
		cout<<"你选择了6=删除学生"<<endl;
		break;
	case 7:
		cout<<"你选择了7=统计人数"<<endl;
		break;
	case 0:
		cout<<"你选择了0=退出"<<endl;
		break;
	}
	return n;
}

/*新增学生信息*/
int Input(Student stu[],int num)
{
	int temp;
S0:
	stu[num].inputId();
	for(int i=0;i<num;i++)
	{
		if(stu[i].getId()==stu[num].getId())
		{
			cout<<"该学号已存在,请重新输入"<<endl;
			goto S0; 
		}
	}
	stu[num].inputName();
	stu[num].inputRegularGrade();
	stu[num].inputfinalExam();
	num++;
	
	cout<<"录入成功!"<<endl;
	cout<<"继续输入?1确定,任意键取消!"<<endl;
	cin>>temp;
	if(temp==1)
	{
		if(num==MAX_STUDENT_NUM)
		{
			cout<<"人数已达到上限,无法再输入!"<<endl;
			return num;
		}
		goto S0;
	}	
	else
	{
		return num;
	}
}


/*插入学生信息  与新增没什么区别*/
int Insert(Student stu[],int num)
{
	int temp;
S0:
	stu[num].inputId();
	for(int i;i<num;i++)
	{
		if(stu[i].getId()==stu[num].getId())
		{
			cout<<"该学号已存在,请重新输入"<<endl;
			goto S0; 
		}
	}
	stu[num].inputName();
	stu[num].inputRegularGrade();
	stu[num].inputfinalExam();
	num++;
	cout<<"录入成功!"<<endl;
	cout<<"继续输入?1确定,任意键取消!"<<endl;
	cin>>temp;
	if(temp==1)
	{
		goto S0;
	}	
	else
	{
		return num;
	}
}

/*输出学生信息*/
void Output(Student stu[],int num)
{
	if(0==num)
	{
		cout<<"无学生信息"<<endl;
		system("pause");
		return ;
	}
	cout<<"学号\t姓名\t平时成绩\t期末成绩\t总评成绩"<<endl;
	for(int i=0;i<num;i++)
	{
		stu[i].output();
	}
	system("pause");
}


/*查找学生*/
void Search(Student stu[],int num)
{
	int i,temp;
	cout<<"请输入要查找的学生学号"<<endl;
	cin>>temp;
	for(i=0;i<num;i++)
	{
		if(temp==stu[i].getId())
		{
			cout<<"学号\t姓名\t平时成绩\t期末成绩\t总评成绩"<<endl;
			stu[i].output();
			break;
		}
	}
	if(i==num)
	{
		cout<<"无该学号信息"<<endl;
	}
	system("pause");
}


/*统计学生信息*/
void Statis(Student stu[],int num)
{
	int temp[5]={0};
	cout<<"\t100~90\t89~80\t79~70\t69~60\t<60"<<endl;
	for(int i=0;i<num;i++)
	{
		if(stu[i].CalTotalMark()<60)
		{
			temp[4]++;
		}
		else if(stu[i].CalTotalMark()>=60&&stu[i].CalTotalMark()<70)
		{
			temp[3]++;
		}
		else if(stu[i].CalTotalMark()>=70&&stu[i].CalTotalMark()<80)
		{
			temp[2]++;
		}
		else if(stu[i].CalTotalMark()>=80&&stu[i].CalTotalMark()<90)
		{
			temp[1]++;
		}
		else
		{
			temp[0]++;
		}
	}
	cout<<"\t"<<temp[0];
	cout<<"\t"<<temp[1];
	cout<<"\t"<<temp[2];
	cout<<"\t"<<temp[3];
	cout<<"\t"<<temp[4]<<endl;;
	system("pause");
}

/*删除学生信息*/
int Delete(Student stu[],int num)
{
	int temp,i,j,n,flag=0;
	do
	{
		flag=0;
		cout<<"请输入要删除的学号"<<endl;
		cin>>temp;
		for(i=0;i<num;i++)
		{
			if(temp==stu[i].getId())
			{
				for(j=i;j<num;j++)
				{
					stu[j]=stu[j+1];
				}
				num--;
				flag=1;
				cout<<"删除成功!"<<endl;
				break;
			}
		}
		if(0==flag)
		{
			cout<<"无该学号"<<endl;
		}
		cout<<"是否继续删除,1继续,任意键退出"<<endl;
		cin>>n;
	}while(n==1);
	return num;
}


/*对学生信息按总分排序*/
void Order(Student stu[],int num)
{
	int i,j;
	Student temp;
	for(i=0;i<num;i++)
	{
		for(j=i+1;j<num;j++)
		{
			if(stu[i].CalTotalMark()<stu[j].CalTotalMark())
			{
				temp=stu[i];
				stu[i]=stu[j];
				stu[j]=temp;
			}
		}
	}

	cout<<"排序成功!"<<endl;

	cout<<endl;
	system("pause");
}

/*保存内存内容至文件*/
void Save_File(Student* stu,int n)
{
	ofstream fileout("students.dat",ios::binary);
	if(!fileout)
	{
		cout<<"文件不能被打开!"<<endl;
		return ;
	}
	for(int i=0;i<n;i++)
	{
		fileout.write((char*)&stu[i],sizeof(Student));
	}
	fileout.close();
}

/*读取文件内容至内存*/
int Open_File(Student*stu)
{
	int i=0;
	ifstream filein("students.dat",ios::binary);
	while(filein)
	{
		filein.read((char*)&stu[i],sizeof(Student));
		i++;
	}
	if(i>=1)
	{
		return i-1;
	}
	return 0;
}


/*主函数 循环运行Select_Menu供用户选择功能*/
/*根据选择 调用相关函数 进入相应功能 */
int main()
{
	Student* stu;
	stu=new Student[MAX_STUDENT_NUM];//申请堆空间
	int n,num;
	num=Open_File(stu);//读取文件
	do
	{
		n=Select_Menu();
		switch(n)
		{
			case 1:
				num=Input(stu,num);
				break;
			case 2:
				Output(stu,num);
				break;
			case 3:
				Order(stu,num);
				break;
			case 4:
				Search(stu,num);
				break;
			case 5:
				num=Insert(stu,num);
				break;
			case 6:
				num=Delete(stu,num);
				break;
			case 7:
				Statis(stu,num);
				break;
		}
	}while(n!=0);
	Save_File(stu,num);//保存信息
	delete[] stu;//释放堆空间
	return 0;
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值