📄 3号文件.cpp
字号:
}
else cout<<"您所查询的信息不存在"<<endl;
}
if(a==2)
{
cout<<"请输入姓名:";
string s;
cin>>s;
vector<Record*>::iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i,s,0);
if(j!=k)
{
dispTable();
dispRecord(j);
cout<<"是否确定修改记录.(yes/no)";
string s;
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"是否确定修改记录.(yes/no)";
cin>>s;
}
if(s=="yes")
{
cout<<"请输入学生的信息:"<<endl;
cout<<"学号:";cin>>(*j)->number;
cout<<"姓名:";cin>>(*j)->name;
cout<<"性别:";cin>>(*j)->gender;
cout<<subject_[0]<<"成绩:";cin>>(*j)->score[0];
cout<<subject_[1]<<"成绩:";cin>>(*j)->score[1];
cout<<subject_[2]<<"成绩:";cin>>(*j)->score[2];
cout<<subject_[3]<<"成绩:";cin>>(*j)->score[3];
cout<<subject_[4]<<"成绩:";cin>>(*j)->score[4];
(*j)->sum=0;
for(int i=0;i<=4;i++)
(*j)->sum+=(*j)->score[i];
(*j)->average=(*j)->sum/5;
getIndex();
}
}
else cout<<"您所查询的信息不存在"<<endl;
}
if(a==3)
{
cout<<"请输入名次:";
int s;
cin>>s;
vector<Record*>::iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i," ",s);
if(j!=k)
{
dispTable();
dispRecord(j);
cout<<"是否确定修改记录.(yes/no)";
string s;
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"是否确定修改记录.(yes/no)";
cin>>s;
}
if(s=="yes")
{
cout<<"请输入学生的信息:"<<endl;
cout<<"学号:";cin>>(*j)->number;
cout<<"姓名:";cin>>(*j)->name;
cout<<"性别:";cin>>(*j)->gender;
cout<<subject_[0]<<"成绩:";cin>>(*j)->score[0];
cout<<subject_[1]<<"成绩:";cin>>(*j)->score[1];
cout<<subject_[2]<<"成绩:";cin>>(*j)->score[2];
cout<<subject_[3]<<"成绩:";cin>>(*j)->score[3];
cout<<subject_[4]<<"成绩:";cin>>(*j)->score[4];
(*j)->sum=0;
for(int i=0;i<=4;i++)
(*j)->sum+=(*j)->score[i];
(*j)->average=(*j)->sum/5;
getIndex();
}
}
else cout<<"您所查询的信息不存在"<<endl;
}
} //修改记录
virtual void sortRecords()
{
int a;
cout<<"1.按学号排序"<<endl;
cout<<"2.按姓名排序"<<endl;
cout<<"3.按名次排序"<<endl;
cout<<"请选择排序方法:";cin>>a;
while((a!=1)&&(a!=2)&&(a!=3))
{
cout<<"请选择排序方法:";
cin>>a;
}
if(a==1)
{
cout<<"1.按升序排序"<<endl;
cout<<"2.按降序排序"<<endl;
cout<<"请选择排序方法:";int b;cin>>b;
while(b!=1&&b!=2)
{
cout<<"请选择排序方法:";
cin>>b;
}
if(b==1)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)/////////////从末尾记起,提高效率
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->number>(*q)->number)
{
(*j)=(*q);
(*q)=(*i);
(*i)=(*j);//////////基本的排序函数方法,
}displayRecords();
}
if(b==2)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->number<(*q)->number)
{
(*j)=(*q);
(*q)=(*i);//跟刚才的倒过来
(*i)=(*j);//////////基本的排序函数方法
}displayRecords();
}
}
if(a==2)
{
cout<<"1.按升序排序"<<endl;
cout<<"2.按降序排序"<<endl;
cout<<"请选择排序方法:";int c;cin>>c;
while((c!=1)&&(c!=2))
{
cout<<"请选择排序方法:";
cin>>c;
}
if(c==1)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->name>(*q)->name)
{
(*j)=(*q);
(*q)=(*i);
(*i)=(*j);
}displayRecords();
}
if(c==2)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->name<(*q)->name)
{
(*j)=(*q);
(*q)=(*i);
(*i)=(*j);
}displayRecords();
}
}
if(a==3)
{
cout<<"1.按升序排序"<<endl;
cout<<"2.按降序排序"<<endl;
cout<<"请选择排序方法:";int d;cin>>d;
while((d!=1)&&(d!=2))
{
cout<<"请选择排序方法:";
cin>>d;
}
if(d==1)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->index<(*q)->index)
{
(*j)=(*q);
(*q)=(*i);
(*i)=(*j);
}displayRecords();
}
if(d==2)
{
int o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
vector<Record*>::iterator i,a,b,q,j;
vector<Record*> v(1);j=v.begin();
a=recVec.begin();b=recVec.end()-1;
for(;a<b;b--)
for(i=a,q=i+1;i<b;i++,q++)
if((*i)->index>(*q)->index)
{
(*j)=(*q);
(*q)=(*i);
(*i)=(*j);
}displayRecords();
}
}
} //记录排序
virtual void saveRecords()//////////考查输入输出流
{
string filename;
cout<<"请输入文件名:";
cin>>filename;///////filename是一个抽象的名字
ofstream outfile;
outfile.open(filename.c_str());
StuInfoVec::saveRecords(outfile);
} //保存记录saveRecords()成员函数让用户输入文件名,
//然后建立文件输出流,再调用StuInfoVec类的saveRecords()成员函数完成。
virtual void loadRecords()
{
string s;
cout<<"从文件中读取的记录覆盖当前学生信息,还是追加到当前学生信息的末尾.(yes/no)";
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"从文件中读取的记录覆盖当前学生信息,还是追加到当前学生信息的末尾.(yes/no)";
cin>>s;
}
if(s=="yes")clear();/////////覆盖前先清空记录
cout<<"请输入文件名:";
cin>>s;
ifstream infile;
infile.open(s.c_str());
if(!infile){cout<<"文件不存在."<<endl;return;}
StuInfoVec::loadRecords(infile);
}
virtual void quit()
{
delete this;
exit(0);
}
virtual void clear()
{
vector<Record*>::iterator a,b,i;int o;
o=recVec.size();
if(o==0){cout<<"错误,无记录."<<endl;return;}
displayRecords();
a=recVec.begin();b=recVec.end();
for(i=a;i<b;i++)
if((*i)->toBeDeleted==true)toRemvNodes++;
if(toRemvNodes!=0)
{
string s;
cout<<"以下"<<toRemvNodes<<"条记录做了删除标记."<<endl;;
vector<Record*>::iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i);
if(j!=k)
{
dispTable();
while(j!=k){dispRecord(j);j++;j=findRecord(j);}
}
cout<<"是否删除。(yes/no):";
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"是否删除。(yes/no):";
cin>>s;
}
if(s=="yes")
{
StuInfoVec::removePerform();
}
}
isModified=true;
if(isModified==true)
{
string s;
cout<<"记录已经被改动是否进行保存(yes/no):";
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"记录已经被改动是否进行保存(yes/no):";
cin>>s;
}
if(s=="yes")saveRecords();
}
cout<<"是否确定清除记录.(yes/no):";
string l;
cin>>l;
while((l!="yes")&&(l!="no"))
{
cout<<"是否确定清除记录.(yes/no):";
cin>>l;
}
if(l=="yes")StuInfoVec::clear();
}
char menuSelect()
{
cout<<"主菜单:"<<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<<"请选择操作:";
int i;cin>>i;
while(i>10||i<1)
{cout<<"请选择操作:";cin>>i;}
switch(i)
{
case 1:displayRecords();break;
case 2:queryRecord();break;
case 3:addRecord();break;
case 4:removeRecord();break;
case 5:modifyRecord();break;
case 6:sortRecords();break;
case 7:saveRecords();break;
case 8:loadRecords();break;
case 9:clear();break;
case 10:quit();break;
}
}
void dispTable()
{
cout<<"学号 姓名 性别 语文 数学 英语 物理 化学 总分 平均分 名次"<<endl;
}
void dispRecord(vector<Record*>::iterator i)//////////////位置吻合?
{
cout<<(*i)->number;
cout<<" "<<(*i)->name;
cout<<" "<<(*i)->gender;
cout<<" "<<(*i)->score[0]<<" ";
cout<<(*i)->score[1]<<" ";
cout<<(*i)->score[2]<<" ";
cout<<(*i)->score[3]<<" ";
cout<<(*i)->score[4]<<" ";
cout<<(*i)->sum<<" ";
cout<<(*i)->average<<" ";
cout<<(*i)->index<<endl;
}
void getIndex()
{
vector<Record*>::iterator i,c,a,b;int ncount=0;
a=recVec.begin();b=recVec.end();
for(i=a;i<b;i++)
{
for(c=a;c<b;c++)
if((*i)->sum<(*c)->sum)ncount++;
(*i)->index=ncount+1;ncount=0;
}
}
int getIndex(float sum)
{
vector<Record*>::iterator i,a,b;int ncount=0;
a=recVec.begin();b=recVec.end();
for(i=a;i<b;i++)
{
if(((*i)->sum)<sum)(*i)->index+=1;
if(((*i)->sum)>sum)ncount++;
return ncount; }
ncount++;
}
};
char* StuInfoManager::subject_[5]={"语文","数学","英语","物理","化学"};
int main()
{
StuInfoManager s;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -