?? studentmanager.cpp
字號:
#include<stdlib.h>
#include<fstream>
#include<iomanip>
#include"StudentManager.h"
using namespace std;
char* StudentManager::subject[]={"語文","體育","英語","硬件","概率"};
StudentManager::StudentManager()
{ start();
}
StudentManager::~StudentManager()
{
}
void StudentManager::start()
{
cout<<"\n"
<<"\t*******************************************\n"
<<"\t****** 歡迎使用學生成績管理系統! *******\n"
<<"\t***** *****\n"
<<"\t**** 編寫人:李薇 ****\n"
<<"\t*** 學號:200502001042 班別:計Y052 ***\n"
<<"\t*******************************************\n"
<<"\n";
handleMenu();
}
//顯示菜單
char StudentManager::menuSelect()
{
cout<<"\n"
<<"**************** 1.顯 示 學 生 記 錄*********************\n"
<<"**************** 2.查 詢 學 生 記 錄*********************\n"
<<"**************** 3.增 加 學 生 記 錄*********************\n"
<<"**************** 4.刪 除 學 生 記 錄*********************\n"
<<"**************** 5.修 改 學 生 記 錄*********************\n"
<<"**************** 6.保 存 學 生 記 錄*********************\n"
<<"**************** 7.讀 取 學 生 記 錄*********************\n"
<<"**************** 8.結 束 系 統 運 行*********************\n"
<<"\n左邊數字對應功能選項,請選擇1~8: ";
char choice[5];
while(true)
{
cin.getline(choice,5);
if(choice[0]<'1'||choice[0]>'8')
cout<<"\n 輸入錯誤,請重選1~8:";
else
break;
}
return choice[0];
}
void StudentManager::handleMenu()
{
while(true)
{ switch(menuSelect())
{
case'1':
displayStudent();
break;
case'2':
researdStudent();
break;
case'3':
addStudent();
break;
case'4':
removeStudent();
break;
case'5':
modifyStudent();
break;
case'6':
saveStudent();
break;
case'7':
loadStudent();
break;
case'8':
quit();
}
}
}
//顯示所有記錄
void StudentManager::displayStudent()
{
if(recList.empty())
{ cout<<"\n 記錄表為空,退出顯示學生信息的操作!";
return;
}
Iterator it=recList.begin();
Iterator it_end=recList.end();
cout<<"\n*******************該記錄的所有信息為********************";
cout<<"\n姓名 學號 語文 體育 英語 硬件 概率 總分 平均分"<<endl;
while(it!=it_end)
{
cout<<setiosflags(ios::left)
<<setw(8)<<(*it)->name
<<setw(15)<<(*it)->number;
for(int j=0;j<NUM_SUBJECT;j++)
cout<<setw(8)<<(*it)->score[j];
cout<<setw(8)<<(*it)->sum
<<setw(8)<<(*it)->average
<<endl;
it++;
}
}
void StudentManager::clear()
{
ScoreList::clear();
}
//查詢記錄
void StudentManager::researdStudent()
{
if(recList.empty())
{
cout<<"\n 記錄是空表,退出學生信息查詢操作!";
return;
}
char ch[2];
int type;
char pattern[20];
while(true)
{
cout<<"\n"
<<"************1.按學生學號查詢\n\n"
<<"************2.按學生姓名查詢\n\n"
<<"請輸入查詢方式(直接輸入回車則結束查詢):";
cin.getline(ch,2);
if(ch[0]=='\0')
break;
if(ch[0]=='1')
{ cout<<"\n請輸入欲查詢的學生的學號:";
type=1;
}
else if(ch[0]=='2')
{ cout<<"\n請輸入欲查詢的學生的姓名:";
type=2;
}
cin.getline(pattern,20);
int findCount=0;
Iterator it=findStudent(pattern,type,recList.begin());
Iterator it_end=recList.end();
cout<<"\n*****************下面是你所要找的學生的所有記錄*****************\n";
cout<<"\n姓名 學號 語文 體育 英語 硬件 概率 總分 平均分"<<endl;
while(it!=it_end)
{
findCount++;
cout<<setiosflags(ios::left)
<<setw(8)<<(*it)->name
<<setw(15)<<(*it)->number;
for(int j=0;j<NUM_SUBJECT;j++)
cout<<setw(8)<<(*it)->score[j];
cout<<setw(8)<<(*it)->sum
<<setw(8)<<(*it)->average
<<endl;
it=findStudent(pattern,type,++it);
}
if(findCount==0)
cout<<"\n沒有找到你想找的學生的記錄#_#"<<endl;
else
cout<<"\n**************一共找到了"<<findCount<<"條記錄\n";
}
}
//添加新的記錄
void StudentManager::addStudent()
{
char ch[5];
float sum;
student* rec;
while(true)
{
cout<<"\n你要添加一組信息,確定嗎?(Y/N):";
cin.getline(ch,5);
if(ch[0]=='n'||ch[0]=='N')
break;
rec=new student;
cout<<"\n請輸入你的學號:";
cin>>rec->number;
cin.ignore();
cout<<"\n請輸入你的姓名:";
cin>>rec->name;
sum=0;
for(int j=0;j<NUM_SUBJECT;j++)
{ cout<<"\n*********請輸入"<<subject[j]<<"成績:";
cin>>rec->score[j];
sum+= rec->score[j];
}
cin.ignore();
rec->sum=sum;
rec->average=sum/NUM_SUBJECT;
ScoreList::addStudent(rec);
}
}
//刪除記錄
void StudentManager::removeStudent()
{ if(recList.empty())
{ cout<<"\n 記錄表為空,退出刪除操作!";
return;
}
cout<<"\n\n**********1.通過學號刪除"
<<"\n\n**********2.通過姓名刪除"
<<"\n\n**********請輸入你想刪除的方式:";
char ch[2];
cin.getline(ch,2);
while(true)
{ if(ch[0]!='1' && ch[0]!='2')
{ cout<<"輸入錯誤,請重選1~2: "<<endl;
cin.getline(ch,2);
}
else
break;
}
int type=static_cast<int>(ch[0])-48;
if(type=1)
cout<<"\n請輸入學號:";
else if(type=2)
cout<<"\n請輸入姓名:";
char pattern[20];
cin.getline(pattern,20);
int deleteCount=0;
Iterator it=findStudent(pattern,type,recList.begin());
Iterator it_end=recList.end();
while(it!=it_end)
{
cout<<"\n**********找到一個記錄匹配的記錄!"<<endl;
cout<<"\n姓名 學號 語文 體育 英語 硬件 概率 總分 平均分"<<endl;
cout<<setiosflags(ios::left)
<<setw(8)<<(*it)->name
<<setw(15)<<(*it)->number;
for(int j=0;j<NUM_SUBJECT;j++)
cout<<setw(8)<<(*it)->score[j];
cout<<setw(8)<<(*it)->sum
<<setw(8)<<(*it)->average
<<endl;
cout<<"\n確定要刪除這條記錄嗎?請選(y/n):";
cin.getline(ch,2);
if(ch[0]!='n'&&ch[0]!='N')
{ it=ScoreList::removeStudent(it);
deleteCount++;
}
if(it!=it_end)
it=findStudent(pattern,type,++it);
}
cout<<"\n一共刪除了"<<deleteCount<<"條記錄\n";
}
//修改記錄
void StudentManager::modifyStudent()
{
if(recList.empty())
{ cout<<"\n 記錄表為空,退出修改操作!";
return;
}
char A[2];
int type;
int modifyCount=0;
char B[2];
char pattern[20];
Iterator it;
Iterator it_end=recList.end();
while(true)
{
cout<<"\n**********1.按照學號方式修改"
<<"\n\n**********2.按照姓名方式修改"
<<"\n\n請輸入你想修改的方式(直接輸入回車則結束修改操作!):";
cin.getline(B,2);
if(B[0]=='\0')
break;
if(B[0]=='1')
{ cout<<"\n請輸入你的學號:";
cin.getline(pattern,20);
type=1;
}
else
{ cout<<"\n請輸入你的姓名:";
cin.getline(pattern,20);
type=2;
}
it=findStudent(pattern,type,recList.begin());
cout<<"*********************下面是你想修改的記錄**************************";
cout<<"\n\n姓名 學號 語文 體育 英語 硬件 概率 總分 平均分"<<endl;
while(it!=it_end)
{
modifyCount++;
cout<<setiosflags(ios::left)
<<setw(8)<<(*it)->name
<<setw(15)<<(*it)->number;
for(int j=0;j<NUM_SUBJECT;j++)
cout<<setw(8)<<(*it)->score[j];
cout<<setw(8)<<(*it)->sum
<<setw(8)<<(*it)->average
<<endl;
cout<<"\n確定要修改以上記錄嗎?請選(Y/N):";
cin.getline(A,2);
if(A[0]!='N' && A[0]!='n')
{
cout<<"\n**************下面是重新輸入該學生的信息:";
cout<<"\n\n請輸入學號:";
cin>>(*it)->number;
cin.ignore();
cout<<"\n請輸入姓名:";
cin>>(*it)->name;
cin.ignore();
float sum=0;
for(int i=0;i<NUM_SUBJECT;i++)
{ cout<<"\n請輸入"<<subject[i]<<"成績:";
cin>>(*it)->score[i];
sum+=(*it)->score[i];
}
cin.ignore();
(*it)->sum=sum;
(*it)->average=sum/NUM_SUBJECT;
}
it=findStudent(pattern,type,++it);
if(modifyCount==0)
cout<<"\n\n 沒有找到你想修改的記錄!"<<endl;
}
}
}
//保存記錄
void StudentManager::saveStudent()
{
if(recList.empty())
{ cout<<"\n 沒有新增記錄,無記錄可存!#_#\n";
return;
}
char file_name[20];
cout<<"\n請輸入保存的路徑和文件名(格式:E:\\student.txt):";
cin>>file_name;
ofstream ofile(file_name,ios::out);
ScoreList::saveStudent(ofile);
ofile.close();
cout<<"\n信息已經保存成功!!!"<<endl;
cin.ignore();
}
void StudentManager::loadStudent()
{
char file_name[20];
cout<<"\n請輸入要讀取的路徑和文件名(格式:E:\\student.txt): ";
cin.getline(file_name,20);
ifstream ofile(file_name,ios::in);
if(!ofile)
{ cout<<"\n 打不開文件!請重新選擇"<<endl;
return;
}
ScoreList::loadStudent(ofile);
ofile.close();
}
void StudentManager::quit()
{
clear();
cout<<"\n退出操作,再見!^_^";
delete this;
exit(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -