📄 3号文件.cpp
字号:
class StuInfoManager:public stuinfovec{
protected:
bool isModified;//学生信息是否已被修改还未保存
int toRemvNodes;//做了删除标记的记录数
char menuSelect();//菜单选择函数
void dispTable();//显示表头findRecord()
void dispRecord(Record*rec);//显示一条记录的信息
int getIndex(float sum);//找出给定总分在所有记录中的名次
public:
static char* subject_[];
public:
StuInfoManager();
virtual ~StuInfoManager();
virtual void start(){
cout<<" **************欢迎使用学生成绩管理系统*****************"<<endl;
};
virtual void handleMenu(){
cout<<"A.显示记录"<<endl;
cout<<"B.查询记录"<<endl;
cout<<"C.添加记录"<<endl;
cout<<"D.删除记录"<<endl;
cout<<"E.标记删除记录"<<endl;
cout<<"F.修改记录"<<endl;
cout<<"G.记录排序"<<endl;
cout<<"H.保存记录"<<endl;
cout<<"I.读取记录"<<endl;
cout<<"J.结束程序"<<endl;
cout<<"K.清空当前记录信息"<<endl;
cout<<"L.找出给定总分在所有记录中的名次"<<endl;
};//菜单处理函数管理程序的用户界面操作
virtual void displayRecords(){
int c=0;
dispTable();
for(Recordvec::iterator i=rec.begin();i!=rec.end();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;
c++;
if(c==20)
{
cout<<"请输入回车键继续显示.";
char ch;
cin>>ch;
while(ch!='\n')
{cout<<"请输入回车键继续显示."; cin>>ch;} //循环
}
}
}; //显示记录dsplayRecords()成员函数会通过取下标迭代遍历整个记录,显示所有的记录。每输出20个记录后会停下来,
//等待用户输入"回车"键后,再输出后面的记录。
virtual void queryRecord(){char M;
cout<<"请选择查询方式.A 学号. B 姓名. C 名次."<<endl;
cin>>M;
patten=M;
if(M==A) {
cout<<"请输入学号:";
string s;
cin>>s;
vector<Record*>::iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i,s,0);/////////////调用StuInfoVec中的函数I为迭代器的对象。S为人的学号
////(Iterator from,string patten,int type)TYPE的作用?
//virtual Iterator findRecord(Iterator from,string patten,int type)
//{
// Iterator it;
///// Iterator it_end = recVec.end();
// for(it = from; it != it_end; it++) //////////通过迭代来历遍VECTOR
// {
//// if((*it)->number==patten)return it; ////////返回Record;
// if((*it)->name==patten)return it;
// if((*it)->index==type)return it;
// }
// return it; ///////怎么还要返回?
// }
if(j!=k) //到K-1;
{
dispTable();//显示一条记录的信息,抽象的概念
while(j!=k){dispRecord(j);j++;j=findRecord(j,s,0);}//////从第一个到最后一个连续查询
} ///显示信息。循环。
else cout<<"您所查询的信息不存在"<<endl;
}
if(M==B)
{
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();
while(j!=k){dispRecord(j);j++;j=findRecord(j,s,0);}//找出给定总分在所有记录中的名次
}
else cout<<"您所查询的信息不存在"<<endl;
}
if(M==C)
{
cout<<"请输入名次:";
int s;
cin>>s;
Iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i," ",s);
if(j!=k)
{
dispTable();//显示一条记录的信息
while(j!=k){dispRecord(j);j++;j=findRecord(j," ",s);}
}
else cout<<"您所查询的信息不存在"<<endl;
}
}
};//查询记录
virtual void addRecord(Record*rec){ //调用StuInfoVec的addRecord()成员函数添加到信息记录的末尾
cout<<"请输入学生信息."<<endl;
cin>>rec.number;
cin>>rec.name;
cin>>rec.gender;
for(int x=0;x<NUM_SUBJECT;x++)
cin>>rec.score[x];
rec.sum=rec.sum+rec.score[x];
rec.average=rec.sum/NUM_SUBJECT;
getindex(float sum);
addRecord(Record* rec);
}; //添加记录/////////调用了protected成员函数getIndex()
virtual void removeRecord(){
char choice;
cout<<"A.标记待删除的记录,执行标记 B.取消指定记录的删除标记 C.取消全部标记"<<endl;
cin>>choice;
switch(choice)
{
case A: removePerform();break;
case B: removeNote();break;
case c:
Iterator it;
iterator it_end = recVec.end();
iterator it_first=recVec.begin();
for(it = it_first; it != it_end; it++)
if((*it).toBeDeleted==ture)
removeNote();
break;
}; //删除记录//removeRecord()成员函数将启动一个子菜单,让用户选择具体的删除操作,
//包括标记待删除的记录,执行标记,取消指定记录的删除标记和取消全部标记。
//然后依据用户的选择调用removeNote()和removePerform()成员函数。
virtual void removeNote(){
Iterator it;
iterator it_end = recVec.end();
iterator it_first=recVec.begin();
for(it = it_first; it != it_end; it++)
if((*it).toBeDeleted==ture)
(*it).toBeDeleted=flase;
};//标记删除记录
virtual void modifyRecord(Record &rec){
cin>>rec;
cout<<rec;
}; //修改记录
virtual void sortRecords(){
cout<<"请选择排序的方式:A 学号.B 姓名.C 名次."<<endl;
char choice;
cin>>choice;
switch(choice)
{
case A://///////排序的方法
case B://///////
case C://///////
}
};//记录排序
virtual void saveRecords(){
char wenjianming;
cout<<"请输入另存为的文件名"<<endl;
cin>>wenjianming;
saveRecords(ostream& wenjianming){
os<<recVec;
////////////未完成!!!!!!!!!!!
};//保存记录saveRecords()成员函数让用户输入文件名,
//然后建立文件输出流,再调用StuInfoVec类的saveRecords()成员函数完成。
virtual void loadRecords(){ //读取记录
//loadRecords()成员函数会从文件读取记录。
//该函数首先询问用户:是希望将从文件中读取的记录覆盖当前学生信息,
//还是追加到当前学生信息的末尾。如果选择覆盖,
//就会首先调用clear()成员函数,将当前的信息记录清空。
//接着让用户输入文件名,然后建立文件输入流,
//最后调用StuInfoVec类的loadRecords()成员函数完成读取操作。
};
virtual void quit(){
system("pause");
return o;
};//结束程序
virtual void clear(); //清空当前记录信息
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -