?? 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;
rec.index=getindex(rec.sum);
StuInfoVec::addRecord(rec);
} //添加記錄/////////調用了protected成員函數getIndex()
virtual void removeRecord()
{
int a;
cout<<"1.標記待刪除的記錄."<<endl;
cout<<"2.取消刪除標記."<<endl;
cout<<"3.刪除標記待刪除的記錄."<<endl;
cout<<"選擇具體的操作:";
cin>>a;
while((a!=1)&&(a!=2)&&(a!=3)&&(a!=4))//////////可以考慮用SWITCH語句
{
cout<<"選擇具體的操作:";
cin>>a;
}
if(a==1)removeNote(false);////BOOL類型
if(a==2)removeNote(true);
if(a==3)
{
vector<Record*>::iterator i,j,k;
i=recVec.begin();k=recVec.end();
j=findRecord(i);////////findRecord(i,PATTEN,TUPE)
if(j!=k)
{
dispTable();
while(j!=k){dispRecord(j);j++;j=findRecord(j);}
cout<<"是否確定刪除全部標記刪除的記錄.(yes/no)";
string s;
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"是否確定刪除全部標記刪除的記錄.(yes/no)";
cin>>s;
}
if(s=="yes")cout<<"刪除了"<<StuInfoVec::removePerform()<<"條待刪除的記錄."<<endl;
}/////////////////////返回的是C,即等待刪除的記錄的條數。
else cout<<"沒有標記刪除的記錄."<<endl;
}
} //刪除記錄//removeRecord()成員函數將啟動一個子菜單,讓用戶選擇具體的刪除操作,
//包括標記待刪除的記錄,執行標記,取消指定記錄的刪除標記和取消全部標記。
//然后依據用戶的選擇調用removeNote()和removePerform()成員函數。
virtual void removeNote(bool isToRemove)
{
if(isToRemove==false)
{
int a;
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
while((a!=1)&&(a!=2)&&(a!=3))
{
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
}
if(a==1)
{
cout<<"請輸入學號:";
string s;
cin>>s;
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")(*j)->toBeDeleted=true;
}
else cout<<"您所查詢的信息不存在"<<endl;
}
if(a==2)
{
cout<<"請輸入姓名:";
string s;
cin>>s;
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")(*j)->toBeDeleted=true;
}
else cout<<"您所查詢的信息不存在"<<endl;
}
if(a==3)
{
cout<<"請輸入名次:";
int s;
cin>>s;
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")(*j)->toBeDeleted=true;
}
else cout<<"您所查詢的信息不存在"<<endl;
}
}
if(isToRemove==true)
{
int a;
cout<<"1.取消指定記錄的刪除標記."<<endl;
cout<<"2.取消全部標記."<<endl;
cout<<"選擇具體的操作:";
cin>>a;
while((a!=1)&&(a!=2))
{
cout<<"選擇具體的操作:";
cin>>a;
}
if(a==1)
{
int a;
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
while((a!=1)&&(a!=2)&&(a!=3))
{
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
}
if(a==1)
{
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")(*j)->toBeDeleted=false;
}
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")(*j)->toBeDeleted=false;
}
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")(*j)->toBeDeleted=false;
}
else cout<<"您所查詢的信息不存在"<<endl;
}
}
if(a==2)
{
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)";
string s;
cin>>s;
while((s!="yes")&&(s!="no"))
{
cout<<"是否確定取消全部標記記錄.(yes/no)";
cin>>s;
}
if(s=="yes")
{
j=findRecord(i);
while(j!=k)
{(*j)->toBeDeleted=false;j++;j=findRecord(j);}
}
}
else cout<<"沒有標記刪除的記錄."<<endl;
}
}
}
//標記刪除記錄
virtual void modifyRecord()
{
int a;
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
while((a!=1)&&(a!=2)&&(a!=3))
{
cout<<"請選擇條件(1.學號、2.姓名、3.名次):";
cin>>a;
}
if(a==1)
{
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();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -