📄 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 + -