lidaye2396

博客园 首页 新随笔 联系 订阅 管理

今天完成了小学期的第一个项目,颇为麻烦,在网上搞懂了结构体的输入输出运算符重载,方便了不少,附代码:

#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;
}

posted on 2020-07-23 11:11  lidaye2396  阅读(50)  评论(0编辑  收藏  举报