今天完成了小学期的第一个项目,颇为麻烦,在网上搞懂了结构体的输入输出运算符重载,方便了不少,附代码:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
string file;
struct StudentInfo
{
	long num;
	string name;
	int s[3];
	int sum;
	int asum;
	friend istream & operator >> (istream&, StudentInfo &t)
	{
		cin>>t.num>>t.name>>t.s[0]>>t.s[1]>>t.s[2]>>t.sum>>t.asum;
		return cin;
	}
	friend ostream & operator << (ostream &,  StudentInfo &t)
	{
		cout<<t.num<<"    "<<t.name<<"    "<<t.s[0]<<"    "<<t.s[1]<<"    "<<t.s[2]<<"     "<<t.sum<<"    "<<t.asum<<endl;
		return cout;
	}
};
class  StudentManage
{
private:
	StudentInfo st[100];
public:
	void one();
	void two();
	void three();
	void four();
	void five();
	void six();
	void seven();
	void eight();
	void nine();
	void ten();
	void eleven();
};
void change(StudentInfo a,StudentInfo b)
{
	StudentInfo c;
	c.num=a.num;
						c.name=a.name;
						c.s[0]=a.s[0];
						c.s[1]=a.s[1];
						c.s[2]=a.s[2];
						c.sum =a.sum ;
						c.asum =a.asum ;
						a.num=b.num;
						a.name=b.name;
						a.s[0]=b.s[0];
						a.s[1]=b.s[1];
						a.s[2]=b.s[2];
						a.sum =b.sum ;
						a.asum =b.asum ;
						b.num=c.num;
						b.name =c.name ;
						b.s [0]=c.s [0];
						b.s [1]=c.s [1];
						b.s [2]=c.s[2];
						b.sum =c.sum ;
						b.asum =c.asum ;
}
void StudentManage::one()
{
	cout<<"请输入想要创建的文件路径:"<<endl;
	cin>>file;
	ofstream outfile;
	outfile.open("file",ios::trunc);
	outfile.close();
}
void StudentManage::two()
{
	cout<<"请输入想要读取的文件路径:"<<endl;
	ifstream infile;
	infile.open(file);
	for(int i=0;i<100;i++)
	{
	infile>>st[i];
	}
	infile.close();
}
void StudentManage::three()
{
	for(int i=0;i<100;i++)
	{
		cout<<st[i]<<endl;
	}
}
void StudentManage::four()
{
	cout<<"输入多少位同学呢:"<<endl;
	int n;
	cin>>n;
	for(int i=0;i<n;i++)
	{
		cout<<"请输入第"<<i<<"位同学的学号,姓名,语文成绩,数学成绩,英语成绩:"<<endl;
		cin>>st[i];
	}
}
void StudentManage::five()
{ 
	cout<<"请输入删除同学的学号:"<<endl;
	long n;
	cin>>n;
	for(int i=0;i<100;i++)
	{
		int temp=0;
		if(st[i].num ==n)
		{
			for(int j=i;j<100;j++)
			{
				st[j].name =st[j+1].name ;
				st[j].num =st[j+1].num ;
				st[j].s[0]=st[j+1].s [0];
				st[j].s [1]=st[j+1].s [1];
				st[j].s [2]=st[j+1].s [2];
			}
			break;
		}
	}
}
void StudentManage::six()
{
	int temp=0;
	long num1;
	cout<<"输入想修改同学的学号:"<<endl;
	cin>>num1;
	for(int i=0;i<100;i++)
	{
		if(st[i].num ==num1)
		{
			cout<<"输入姓名,语文成绩,数学成绩,英语成绩:"<<endl;
			cin>>st[i].name >>st[i].s [0]>>st[i].s [1]>>st[i].s [2];
			temp=1;
		}
	}
	if(temp==0) cout<<"学号不正确!"<<endl;
}
void StudentManage::seven()
{
	cout<<"输入想要查询的学号:"<<endl;
	long num1;
	int temp=0;
	cin>>num1;
	for(int i=0;i<100;i++)
	{
		if(st[i].num ==num1) 
		{
			cout<<st[i];
			temp=1;
		}
	}
	if(temp==0) cout<<"学号不正确!"<<endl;
}
void StudentManage::eight()
{
	for(int i=0;i<100;i++)
	{
		st[i].sum =st[i].s [0]+st[i].s [1]+st[i].s [2];
		st[i].asum =st[i].sum /3;
	}
}
void StudentManage::nine()
{
	char a,b;
	cout<<"请选择:A、按学号排列   B、按总分排列"<<endl;
	cin>>a;
	cout<<"请选择: A、升序   B、降序"<<endl;
	cin>>b;
	if(a=='A')
	{
		if(b=='A')
		{
			for(int i=0;i<100;i++)
			{
				for( int j=i+1;i<100;j++)
				{
					StudentInfo c;
					if(st[i].num>st[j].num)
					{
						change(st[i],st[j]);
					}
				}
			}
		}
		if(b=='B')
		{
			for(int i=0;i<100;i++)
			{
				for( int j=i+1;i<100;j++)
				{
					StudentInfo c;
					if(st[i].num<st[j].num)
					{
						change(st[i],st[j]);
					}
				}
			}
		}
	}
	if(a=='B')
	{
		if(b=='A')
		{
			for(int i=0;i<100;i++)
			{
				for( int j=i+1;i<100;j++)
				{
					StudentInfo c;
					if(st[i].sum>st[j].sum)
					{
						change(st[i],st[j]);
					}
				}
			}
		}
		if(b=='B')
		{
			for(int i=0;i<100;i++)
			{
				for( int j=i+1;i<100;j++)
				{
					StudentInfo c;
					if(st[i].num<st[j].num)
					{
						change(st[i],st[j]);
					}
				}
			}
		}
	}
}
void StudentManage::ten()
{
	cout<<"输入文件名:"<<endl;
	cin>>file;
	ofstream outfile;
	outfile.open("file",ios::trunc);
	for(int i=0;i<100;i++)
	{
		outfile<<st[i]<<endl;
	}
	outfile.close();
}
void StudentManage::eleven()
{
	cout<<"输入插入的学号,姓名,以及成绩:"<<endl;
	StudentInfo c;
	cin>>c;
	c.sum =c.s [0]+c.s [1]+c.s [2];
	c.asum =c.sum /3;
	cout<<"请重新排序:"<<endl;
}
//istream& operator >>(istream& input,StudentInfo& c)
//{
//	input>>c.num  >>c.name  >>c.s [0]>>c.s [1]>>c.s [2]>>c.sum >>c.asum ;
//	return input;
//}
//ostream& operator << (ostream& output,StudentInfo& c)
//{
//	output<<c.num <<"    "<<c.name <<"    "<<c.s [0]<<"    "<<c.s[1]<<"    "<<c.s [2]<<"    "<<c.sum <<"    "<<c.asum ;
//	return output;
//}
int main()
{
	cout<<"**************学生成绩管理系统**************"<<endl;
	cout<<endl<<"请选择:"<<endl;
	cout<<"****** 1.创建文件   "<<endl;
	cout<<"****** 2.文件导入   "<<endl;
	cout<<"****** 3.显示数据   "<<endl;
	cout<<"****** 4.数据录入   "<<endl;
	cout<<"****** 5.删除数据   "<<endl;
	cout<<"****** 6.数据修改   "<<endl;
	cout<<"****** 7.数据查找   "<<endl;
	cout<<"****** 8.成绩汇总   "<<endl;
	cout<<"****** 9.成绩排序   "<<endl;
	cout<<"****** 10.数据导入   "<<endl;
	cout<<"****** 11.数据插入   "<<endl;
	cout<<"****** 0.退出        "<<endl;
	int temp;
	cin>>temp;
	StudentManage a;
	while(temp)
	{
		switch (temp)
		{
		case '1': a.one ();break;
		case '2': a.two ();break;
		case '3': a.three ();break;
		case '4': a.four ();break;
		case '5': a.two ();a.five ();a.ten ();break;
		case '6': a.two ();a.six ();a.ten ();break;
		case '7': a.two ();a.seven ();a.ten ();break;
		case '8': a.two ();a.eight ();a.ten ();break;
		case '9': a.two ();a.nine ();a.ten ();break;
		case '10': a.ten ();break;
		case '11': a.two ();a.eleven ();a.ten ();break;
		}
		cout<<"继续选择:"<<endl;
		cin>>temp;
	};
	return 0;
}
 
                    
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号