编译不报错,就是运行不出来
#include<iostream.h>
#include<stdio.h>
#include<string.h>
class student//定义学生信息类
{public:
char name[20];
char num[10];
char banji[20];
int math,english,chinese,computer;
int sum;
double ave;
void input();
void output();
void score();
void book(student sh[],int m);
};
void student::book(student grade[],int m)// 类外声明
{
int l=10;
for(int i=1;i<=l;i++)
{
cin>>student::name[20]>>student::num[10]>>student::banji>>student::math>>student::english>>student::chinese>>student::computer;
strcpy(grade[i].name,student::name);
strcpy(grade[i].num,student::num);
grade[i].math=student::math;
grade[i].english=student::english;
grade[i].chinese=student::chinese;
grade[i].computer=student::computer;
grade[i].sum=student::math+student::english+student::chinese+student::computer;
grade[i].ave=grade[i].sum/4;
}
}
void student::score()//显示学生信息
{
cout<<name;
cout<<" ";cout<<num;
if(math>=0)
{cout<<" ";cout<<math;}
else
cout<<" 无";
if(english>=0)
{cout<<" ";cout<<english;}
else
cout<<" 无";
if(computer>=0)
{cout<<" ";cout<<computer;}
else
cout<<" 无";
if(chinese>=0)
{cout<<" ";cout<<chinese;}
else
cout<<" 无";
cout<<" "<<ave<<endl;
}
void change(student sh[],int i)//修改学生信息
{
char name1[20];
int j,k,m;
cout<<" 请输入要修改的学生姓名:"<<endl;
cin>>name1;
for(j=1;j<=i;j++)
{
if(strcmp(sh[j].name,name1)!=0)//判断ASCLL码大小
k=-1;
else
{ k=j;break;}
}
if(k==-1)
{
cout<<" 对不起,没有该学生的信息....."<<endl;
cout<<" 请按任意键进入主菜单......."<<endl;
getchar();
}
else
{
sh[k].math=sh[k].english=sh[k].computer=sh[k].chinese=-1;
int a,b;//a是各科成绩,b是存储选课数目
sh[k].sum=0;//初始化sum
char project[10];
cout<<" 请输入学生姓名:"<<endl;
cin>>sh[k].name;
cout<<" 请输入学生学号:"<<endl;
cin>>sh[k].name;
cout<<" 请输入学生选课数:"<<endl;
while(cin>>m)
{
if(m>4)
cout<<"对不起,请输入课程数1~4范围内: 请重新输入"<<endl;
else
break;
}
b=m;
while(m--)
{
cout<<" 请输入课程名称:"<<endl;
cin>>project;
if(strcmp(project,"数学")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
sh[k].math=a;
sh[k].sum+=sh[k].math;
}
else
if(strcmp(project,"英语")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
sh[k].english=a;
sh[k].sum+=sh[k].english;
}
else
if(strcmp(project,"语文")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
sh[k].chinese=a;
sh[k].sum+=sh[k].chinese;
}
else
if(strcmp(project,"计算机")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
sh[k].computer=a;
sh[k].sum+=sh[k].computer;
}
else
{
m++;
cout<<" 对不起,您输入的课程不存在,请重新输入"<<endl;
}
}
sh[k].ave=(double)sh[k].sum/b;
}
}
void find(student sh[],int i)//查找学生信息
{
int nn;
int h=1,he;
char name2[20],num2[10];
while(h!=0)
{
cout<<" 按姓名查询请输入1 "<<endl;
cout<<" 按学号查询请输入2 "<<endl;
cin>>nn;
if(nn==1||nn==2)
h=0;
else
{cout<<" 对不起,您输入的数字有误,请重新输入....."<<endl;h=1;}
}
if(nn==1)
{
cout<<" 请输入要查找的学生姓名:"<<endl;
cin>>name2;
for(nn=1;nn<i;nn++)
{
if(strcmp(sh[nn].name,name2)!=0)
he=0;
else
{he=nn;break;}
}
if(he==0)
cout<<" 对不起,没有该学生的信息....."<<endl;
else
{
cout<<"姓名 学号 数学成绩 英语成绩 计算机成绩 语文成绩 平均成绩"<<endl;
sh[h].score();
}
}
else
{
cout<<" 请输入要查找的学生学号:"<<endl;
cin>>num2;
for(nn=1;nn<i;nn++)
{ if(strcmp(sh[nn].num,num2)!=0)
he=0;
else
{ he=nn;break;}
}
if(he==0)
cout<<" 对不起,没有该学生的信息....."<<endl;
else
sh[h].score();
}
cout<<" 请按任意键继续......"<<endl;
getchar();
}
void del(student sh[],int i)//删除学生信息
{
char name3[20];int h,bat;
cout<<" 请输入您想要删除的学生姓名: "<<endl;
cin>>name3;
for(h=1;h<=i;h++)
if(strcmp(sh[h].name,name3)==0)
bat=h;
for(h=bat;h<i;h++)
sh[h]=sh[h+1];
cout<<"删除成功.....请按任意键继续操作..."<<endl;
getchar();
i--;
}
void student::input() //输入学生信息
{
int a,b,n;
sum=0;
char project[10];
cout<<" 请输入学生姓名:"<<endl;
cin>>name;
cout<<" 请输入学生学号:"<<endl;
cin>>num;
cout<<" 请输入学生选课数:"<<endl;
while(true)
{ cin>>n;
if(n>4)
cout<<"对不起,请输入课程数1~4范围内: 请重新输入"<<endl;
else
{b=n;
break;}
}
while(n--)
{
cout<<" 请输入课程名称:"<<endl;
cin>>project;
if(strcmp(project,"数学")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
math=a;
sum+=math;
}
else
if(strcmp(project,"英语")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
english=a;
sum+=english;
}
else
if(strcmp(project,"语文")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
chinese=a;
sum+=chinese;
}
else
if(strcmp(project,"计算机")==0)
{
cout<<" 请输入该课程成绩:"<<endl;
cin>>a;
computer=a;
sum+=computer;
}
else
{
n++;
cout<<" 对不起,您输入的课程不存在,请重新输入"<<endl;
}
}
ave=(double)sum/b;
output();
}
void student::output()//输出学生信息
{
char con;
cout<<" 您输入的学生信息为:"<<endl;
cout<<" 姓名:";cout<<name<<endl;
cout<<" 学号:";cout<<num<<endl;
if(math>=0)
{cout<<" 数学成绩:";cout<<math<<endl;}
if(english>=0)
{cout<<" 英语成绩:";cout<<english<<endl;}
if(computer>=0)
{cout<<" 计算机成绩:";cout<<computer<<endl;}
if(chinese>=0)
{ cout<<" 语文成绩:";cout<<chinese<<endl;}
cout<<" 确定请按Y,重新输入请按N..."<<endl;
cin>>con;
if(con=='Y'||con=='y')
{
cout<<" 恭喜您输入成功!"<<endl;
cout<<" 请按任意键继续......"<<endl;
}
else
{math=english=computer=chinese=-1;
input();}
getchar();
}
void welcom()
{
cout<<" 请根据相应的数字选择 "<<endl;
cout<<" 【1】---------输入学生信息 "<<endl;
cout<<" 【2】---------修改学生信息 "<<endl;
cout<<" 【3】---------查看学生信息 "<<endl;
cout<<" 【4】---------删除学生信息 "<<endl;
cout<<" 【5】---------查找学生信息 "<<endl;
cout<<" 【0】---------退出系统 "<<endl;
}
int main()
{int a,i,j;
i=10;
int n=0;
int m=10;
student grade[1000];
student bb;
bb.book(grade,1000);
cout<<" 你好,欢迎使用学生信息管理系统 "<<endl;
cout<<" 请按任意键继续......."<<endl;
getchar();
while(n=0)
{
welcom();
cout<<" 请输入相应数字.................."<<endl;
cin>>a;
switch(a)
{
case 0:cout<<" 谢谢您的使用!再见...."<<endl;n=1;break;
case 1:{++i;grade[i].input();break;}
case 2:change(grade,i);break;
case 3:
{ cout<<"姓名 学号 数学成绩 英语成绩 计算机成绩 语文成绩 平均成绩"<<endl;
for(j=1;j<=i;j++)
grade[j].score();
cout<<" 请按任意键继续......"<<endl;
getchar();
break;
}
case 4:del(grade,i);break;
case 5:find(grade,i);break;
default :cout<<"输入有误,请重新输入!!按任意键继续:"<<endl;getchar();break;
}
}
return 0;
}
#include<iostream>
#include<stdlib.h>
#include<fstream>
#include<stdio.h>
#include"StuInfoVec.h"
#include"StuInfoMananger.h"
using namespace std;
/*************************************************
*功能:显示欢迎画面,并开始进行用户交互处理
************************************************/
void StuInfoManager::start()
{
cout<<"\n"
<<"\t**************^_^**************\n"
<<"\t* 这是一个 *\n"
<<"\t* 学生成绩管理程序 *\n"
<<"\t* 可以对学生成绩进行管理 *\n"
<<"\t* 欢迎使用管理程序 *\n"
<<"\t*******************************\n"
<<"\n";
menuSelect();
}
/***********************************************************
* 功能:显示成绩管理程序菜单,返回用户选择的选项
* 返回:用户选择的选项,是0~9之间的一个字符
**********************************************************/
char StuInfoManager::menuSelect()
{
cout<< "\n"
<< "\0. 显示记录\n"
<< "1. 查询记录\n"
<< "2. 增加记录\n"
<< "3. 删除记录\n"
<< "4. 修改记录\n"
<< "5. 记录排序\n"
<< "6. 保存记录\n"
<< "7. 读取记录\n"
<< "8. 新建学生信息文件\n"
<< "9. 结束运行\n"
<< "\n左边数字对应功能选择,请选0~9:";
string str;
char choice;
while(true)
{
cin>>str;
cin.ignore(); //从cin中将回车符提取出来
choice = str[0];
if(choice<'0' || choice>'9')
cout<< "\n输入错误-_=重选0~9:";
else
break;
}
return choice;
}
/*******************************************************
* 功能:根据用户选择 的项目调用相应的处理函数
******************************************************/
void StuInfoManager::handleMenu()
{
while(true)
{
switch(menuSelect())
{
case '0':
displayRecords();
break;
case '1':
queryRecord();
break;
case '2':
addRecord();
break;
case '3':
removeRecord();
break;
case '4':
modifyRecord();
break;
case '5':
sortRecords();
break;
case '6':
saveRecords();
break;
case '7':
loadRecords();
break;
case '8':
clear();
addRecord();
break;
case '9':
quit();
}
}
}
/**************************************************
* 功能:打印显示记录信息时的表头
*************************************************/
void StuInfoManager::dispTable()
{
cout<< "学号\t姓名\t性别";
cout<<'\t'<<"高数";
cout<<'\t'<<"语文";
cout<<'\t'<<"英语";
cout<<'\t'<<"物理";
cout<<'\t'<<"体育";
cout<< "\t总分\t平均分\t名次\t删除标志\n";
}
/***************************************************
* 功能:显示指定记录的信息
**************************************************/
void StuInfoManager::dispRecord(Record* rec)
{
cout<< rec->number << '\t' << rec->name << '\t' << rec->gender;
for (int j=0;j<NUM_SUBJECT;j++)
cout<< '\t' << rec->score[j];
cout.precision(3);
cout<< '\t' << rec->sum << '\t' << rec->average <<'\t' << rec->index;
if (rec->toBeDeleted)
cout<< "\t*\n";
else
cout << '\n';
}
/*******************************************
* 功能:显示所有记录信息
******************************************/
void StuInfoManager::displayRecords()
{
if (empty())
{
cout<< "没有记录可以显示-_=" <<endl;
return;
}
dispTable();
int num = size();
for (int i=0;i<num;i++)
{
dispRecord(recVec[i]);
//打印满20个记录后停下来
if (i%20==0&&i!=0)
{
cout<< "输入任一字符后继续...\n";
cin.get();
cout<<endl;
dispTable();
}
}
cout<< "一共有" << size() << "条记录\n" <<endl;
}
/*************************************************************
* 功能:首先检查记录是否已保存,然后清空当前所有记录
* 注意:该函数覆盖了基类中的函数
************************************************************
void StuInfoManager::clear()
{
char choi[5];
if (toRemvNodes != 0)
{
cout<< "现在还有被做了删除标记但还没有执行的记录,是否执行删除?(y/n)";
cin.getline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
{
int num = removePerform();
toRemvNodes = 0;
cout<< "一共删除了" << num << "条记录\n"
<< "现在还剩下" << size() << "条记录" << endl;
if (num != 0)
isModified = true;
}
}
if (isModified) // 已改动,未保存
{
cout<< "学生信息已改动,是否保存?(y/n)";
cin.getline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
saveRecords();
}
StuInfoVec::clear();
isModified = false;
}
/*****************************************
* 功能:查询指定记录
****************************************/
void StuInfoManager::queryRecord()
{
if (empty())
{
cout<< "记录是空表,退出查询操作-_=" <<endl;
return;
}
char choi[5];
int type;
char pattern[20];
while(true) {
cout<< "请输入查询的方式:(直接输入回车则结束)\n"
<< "1. 按学号\n"
<< "2. 按姓名\n"
<< "3. 按名次\n";
cin.getline(choi,5);
//直接输入加车则结束查询
if (choi[0] == '\0' ) break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询的学生的名次:";
type = 2;
}
cin.getline(pattern,20);
int findCount = 0;
//找到匹配的记录
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
dispTable();
while (it != it_end)
{
findCount++;
dispRecord(*it);
//取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
cout<<"一共找到了"<<findCount<<"条记录"<<endl;
}
/**************************************************************
* 找出总分为sum在当前所有记录中升序排序的位置
* 参数:sum,欲找位置的总分
* 返回:sum在当前所有记录中按升序排序的位置
* 结果:原有记录中"名次"项也会依需要相应改变
*************************************************************/
int StuInfoManager::getIndex(float sum)
{
int acount=0;//总分大于sum的人数
Iterator it;
Iterator it_end = pastEnd();
for (it=first(); it!=it_end; it++)
{
if ((*it)->sum<sum)
{
(*it)->index++;//总分小于sum的记录名次增1
} else if ((*it)->sum>sum)
{
acount++;
}
}
int a=acount+1;
return a;
}
/********************************************
* 功能:向当前学生信息追加新的记录
* 该函数重载了基类中的函数
*******************************************/
void StuInfoManager::addRecord()
{
if(empty())
cout<< "原来没有记录,现在建立新表" <<endl;
else
cout<< "下面在当前表的末尾增加新的信息" <<endl;
char choi[5];
char name[20]
Record* rec;
float sum;
int j;
int ncount = 0;//记录增加了的记录数
while(true)
{
cout<< "您将要添加一组信息,确定吗?(y/n)";
cin.getline(choi,5);
if (choi[0]=='n' || choi[0]=='N') //不再添加新的信息
break;
rec = new Record;
cout<< "请输入学号:" << flush;
cin>>rec->number;
cin.ingnore();
printf("请输入姓名:";);
cin.getline(name,20);
rec->name=name;
printf("请输入性别(0为女,1为男):":);
cin.getline(choi,5);
if (choi[0] == '0')
rec->gender = "女";
else
rec->gender = "男";
sum = 0;
cout<< "请输入" <<"高数"<< "成绩:";
cin>>rec->score[0];
sum+=rec->score[0];
cout<< "请输入" <<"语文"<< "成绩:";
cin>>rec->score[1];
sum+=rec->score[1];
cout<< "请输入" <<"英语"<< "成绩:";
cin>>rec->score[2];
sum+=rec->score[2];
cout<< "请输入" <<"物理"<< "成绩:";
cin>>rec->score[3];
sum+=rec->score[3];
cout<< "请输入" <<"体育"<< "成绩:";
cin>>rec->score[4];
sum+=rec->score[4];
cin.ignore();
rec->sum=sum;
rec->average=sum/NUM_SUBJECT;
rec->index=getIndex(sum);
StuInfoVec::addRecord(rec);
ncount++;
}
cout<< "一共新增了" << ncount << "条记录\n"
<< "现在一共有" << size() << "条记录" << endl;
if (ncount !=0)
isModified = true; // 记录已改动,未保存
}
/******************************************************
* 功能:进入"删除记录"子菜单,选择执行相应的功能
* 注意:该函数重载了基类中的函数
*****************************************************/
void StuInfoManager::removeRecord()
{
if(empty())
{
cout<< "记录已空,退出删除操作-_=" <<endl;
return;
}
cout<<"1. 标记待删除的记录\n"
<<"2. 执行标记\n"
<<"3. 取消指定记录的删除标记\n"
<<"4. 取消全部删除标记" <<endl;
string str;
do
{
cout<< "请选择您要进行的操作(1~4):";
cin>>str;
}while (str[0]<'1' || str[0]>;'4');
cin.ignore();
switch (str[0])
{
case '1':
removeNote(true);
break;
case '2':
{
int num = removePerform();
toRemvNodes = 0;
cout<< "一共删除了" <<num <<"条记录\n"
<< "现在还剩下" <<size() <<"条记录" << endl;
if (num !=0)
isModified = true;
}
break;
case '3':
removeNote(false);
break;
case '4':
{
Iterator it;
Iterator it_end = pastEnd());
for (it=first(); it!=it_end; it++)
(*it)->;toBeDeleted = false;
toRemvNodes = 0;
cout<< "所有删除标记已被取消" <<endl;
}
}
}
/***************************************************************
* 功能:标记指定记录为"待删除"或取消该标记
* 参数:isToRemove,为true表示标记指定记录为"待删除"
* 为false表示取消指定记录为"待删除"标记
****************************************************************/
void StuInfoManager::removeNote(bool isToRemove)
{
if(empty())
{
cout<< "当前没有任何记录-_=" <<endl;
return;
}
if (!isToRemove && toRemvNodes==0)
{
cout<< "当前没有被做了删除记录标记的项目-_=" <<endl;
return;
}
char choi[5];
char pattern[20];
int type;
while(true) {
cout<< "请输入如何找到欲更改标记的记录的方式:(直接输入回车则结束移除操作)\n"
<<"1. 按学号\n"
<<"2. 按姓名\n"
<<"3. 按名次\n"
cin.getline(choi,5);
//直接输入回车则结束查询
if (choi[0] == '\0') break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询学生的名次:";
type = 2;
}
cin.getline(pattern,20);
//找到匹配的记录
bool gotMatch = false;
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
while (it != it_end)
{
//如果要取消标记而当前记录没有被标记,或者是要做标记而
//当前记录已被标记,则继续下一条记录
if ((!isToRemove && !(*it)->;toBeDeleted) ||
(isToRemove && (*it)->;toBeDeleted))
{
it = findRecord(pattern,type,++it);
continue;
}
getMatch = true;
cout<< "找到一条匹配的记录:\n";
dispTable();
dispRecord(*it);
cout<< "确定要改变这条记录的标记吗?[y/n]";
cin.getline(choi,5);
if (choi[0]!='n' && choi[0]!='N')
(*it)->;toBeDeleted = !(*it)->;toBeDeleted;
if (isToRemove)
toRemvNodes++;
else
toRemvNodes--;
//取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
if (!gotMatch)
cout<< "没有找到匹配的记录-_=" <<endl;
else
{
if (toRemvNodes != 0)
cout<< "当前有" << toRemvNodes
<< "条记录被做了删除标记" <<endl;
else
cout<< "现在已经没有被做了删除标记的记录了-_=\n";
}
}
}
/********************************************
*功能:修改指定学生的信息
*******************************************/
void StuInfoManager::modifyRecord()
{
if(empty())
{
cout<< "没有可供修改的记录-_=" <<endl;
return;
}
char choi[5];
char pattern[20];
char name[20];
int type;
string str;
while(true)
{
cout<< "请输入如何找到欲修改的记录的方式:(直接输入回车则结束移除操作)\n"
<<"1. 按学号\n"
<<"2. 按姓名\n"
<<"3. 按名次\n"
cin.getline(choi,5);
//直接输入回车则结束查询
if (choi[0] == '\0') break;
if (choi[0] == '1')
{
cout<< "请输入欲查询的学生的学号:";
type = 0;
} else if (choi[0] == '2')
{
cout<< "请输入欲查询的学生的姓名:";
type = 1;
} else
{
cout<< "请输入欲查询学生的名次:";
type = 2;
}
cin.getline(pattern,20);
//找到匹配的记录
Iterator it = findRecord(pattern,type,first());
Iterator it_end = pastEnd();
if (it == it_end)
{
cout<< "没有匹配的记录-_=" <<end;
continue;
}
while (it != it_end)
{
cout<< "找到一条匹配的记录:\n";
dispTable();
dispRecord(*it);
cout<< "确定要改变这条记录的标记吗?[y/n]";
cin.getline(choi,5);
//修改该记录
if (choi[0]!='n' && choi[0]!='N')
{
int ncount = 0; // 总分大于sum的人数
int tmpi =(*it)->;index; //记录当前修改的记录的名次
cout<< "下面请重新输入该学生的信息:\n";
cout<< "请输入学号:";
cin>>(*it)->number;
cin.ignore();
cout<< "请输入姓名:";
cin.getline(name,20);
(*it)->name = name;
printf("请输入性别(0为女,1为男):";);
cin>>str;
cin.ignore();
if (str[0] == '0')
(*it)->gender = "女";
else
(*it)->gender = "男";
float sum=0;
for (j=0;j<NUM_SUBJECT; j++)
{
cout<< "请输入" <<subject_[j] << "成绩:";
cin>>(*it)->score[j];
sum+=(*it)->score[j];
}
cin.ignore();
(*it)->;sum = sum;
(*it)->;average = sum/NUM_SUBJECT;
//修改其他记录的名次、
//将原来名次排在被修改记录之后,而其sum大于等于
//修改后记录的sum的记录的名次减1,
//将原来名次排在被修改记录之前或相同,而其sum小于
//修改后记录的sum的记录的名次增1
ncount = 0;
Iterator it1;
for (it1=first(); it1!=it_end; it1++)
{
if (it1==it) continue;
if (*it1)->index>;tmpi && (*it1)->sum>=sum)
(*it1)->index--;
else if ((*it)->index<=tmpi && (*it1)->sum<sum)
(*it1)->index++;
if ((*it1)->sum>sum)
ncount++;
}
//nocut是总分比当前学生的总分大的学生的个数
//当前学生的名次是nocunt+1
(*it)->index=ncount+1;
isModified = true;
}
// 取下一条匹配的记录
it = findRecord(pattern,type,++it);
}
cout<< "已找完所有的记录\n" <<endl;
}
}
/**********************************************
* 功能:按照学号、姓名或名次对记录进行排序
* 结果:各个记录在数组中存储的位置会发生变化
*********************************************/
void StuInfoManager::sortRecords()
{
if (empty())
{
cout<< "没有可供排序的方式!" <<endl;
return;
}
string str;
cout<< "请输入您希望进行排序的方式:\n"
<< "1. 按学号进行升序排序\n"
<< "2. 按学号进行降序排序\n"
<< "3. 按姓名进行升序排序\n"
<< "4. 按姓名进行降序排序\n"
<< "5. 按名次进行升序排序\n"
<< "6. 按名次进行降序排序\n"
<< "7. 按错了,我并不想进行排序" <<endl;
cin>>str;
cin.ignore();
if (str[0]<'1' || str[0]>;'6') return;
//进行排序
int i,j;
int numStus=size();
for (i=0;i<numStus-1;i++)
{
for (j=i+1; j<numStus; j++)
{
if ((str[0]=='1' &&
recVec->;number>;recVec[j]->;number) ||
(str[0]=='2'&&
recVec->number<recVec[j]->number) ||
(str[0]=='3' && recVec->name>recVec[j]->name) ||
(str[0]=='4' && recVec->name<recVec[j]->name) ||
(str[0]=='5' && recVec->index>recVec[j]->index) ||
(str[0]=='6' && recVec->index<recVec[j]->index))
{
swap(recVec,recVec[j]); //这是STL的一个函数
}
}
}
cout<< "排序已经完成" <<endl;
isModified = true;
}
/*************************************************
* 功能:将学生信息保存到指定文件
* 注意:该函数重载了基类中的函数
************************************************/
void StuInfoManager::saveRecords()
{
if (empty())
{
cout<< "没有记录可存-_=" <<endl;
return;
}
char name[40];
string fname;
cout<< "请输入要存入的文件名(直接回车选择文件sname):";
cin.getline(name,40);
fname = name;
if (fname.empty())
fname = "sname";
ofstream of(fname.c_str(),ios_base:ut);
if (!of)
{
cout<< "不能存入文件-_=" <<endl;
return;
}
StuInfoVec::saveRecords(of);
of.close();
cout << size() << "条记录已经存入文件,请继续操作。" <<endl;
isModified = false;
}
/******************************************************
* 功能:从指定文件读取记录追加到当前记录末尾
* 注意:该函数重载了基类中的函数
*****************************************************/
void StuInfoManager::loadRecords()
{
char choi[5];
if (!empty())
{
cout<< "请选择是要覆盖现有记录(y),还是要将读取的"
<<"记录添加到现有记录之后(n)?\n"
<<"直接回车则覆盖现有记录\n";
cin.getline(choi,5);
if (choi[0]=='n' || choi[0]=='N')
{ //将读取的记录添加到现有记录之后
isModified = true;
}
else
{
clear();
}
}
string fname;
char fname1[40];
cout<< "请输入要读取的文件名(直接回车选择文件sname)";
cin.getline(fname1,40);
fname = fname1;
if (fname.empty())
fname = "sname";
ifstream ifs(fname.c_str(),ios_base::in);
if (!ifs)
{
cout<< "打不开文件!请重新选择" <<endl;
return;
}
int num = StuInfoVec::loadRecords(ifs);
ifs.close();
cout<< "取入" << num <<"条记录。\n"
<< "现在一共有" << size() << "条记录" << endl;
}
void StuInfoManager::quit()
{
clear();
cout << "退出操作,再见^_^" <<endl;
delete this;
exit(0);
}