学校让做一个MFC学生信息管理程序,我已经完成了添加和删除还有修改的功能,到了排序就卡住了!!一直提醒向量越界,我在纸上模拟了过程好多遍都没觉得算法有问题……实在想不出来了!求各位大神帮帮忙解答一下!!!
这是我的排序函数
void management::sort(vector<CStudentInfo>&vecS)
{
CStudentInfo temp;
unsigned int i, j;
for (i = 1; i < vecS.size(); i++)
{
if (vecS[i].getTotal()>vecS[i - 1].getTotal())
{
temp = vecS[i];
for (j = i - 1; temp.getTotal() > vecS[j].getTotal()&&j>=0; j--)
{
vecS[j + 1] = vecS[j];
}
A:
vecS[j+1] = temp;
}
}
}
下面这个是添加向量成员的函数
void management::add(CStudentInfo &A, vector<CStudentInfo>&vecS, int &total, int &posi, CString &strStu)
{
bool hasStudent = false;
CStudentInfo temp(A.GetName(), A.GetSex(), A.Getadd(), A.GetNum(), A.Getmath(), A.Getccc(),A.GetAge());
for (unsigned int i = 0; i < vecS.size(); i++)
{
if (vecS[i].GetName() == A.GetName())
{
hasStudent = true;
}
}
if (!hasStudent)
{
int sortNO = 1;
for (unsigned int i = 0; i < vecS.size(); i++)
{
if (vecS[i].getTotal() > temp.getTotal())
{
sortNO++;
}
}
vecS.push_back(temp);
total = A.Getccc() + A.Getmath();//总分
posi = sortNO;//排名
}
};
然后这个是我用来保存数据的类
class CStudentInfo
{
public:
int getTotal();
CStudentInfo(){};
CStudentInfo(CString str1, int s, CString a, CString str2, int m, int c,int age);
//设置成员
void setName(CString str1);
void setSex(int s);
void setNum(CString str2);
void setmath(int m);
void setccc(int c);
void setaddress(CString a);
void setage(int age);
//读取成员
CString GetName(){ return strName; };
int GetSex(){ return sex; };
int GetAge(){ return age; };
CString Getadd(){ return address; };
CString GetNum(){ return strNum; };
int Getmath(){ return math; };
int Getccc(){ return ccc; };
private:
CString strName;
int sex;
int math;
int ccc;
int age;
CString address;
CString strNum;
};
#endif
这个是每次添加向量后,运行一下打包函数,把刚刚添加的向量内容展示在MFC的列表上用的
CString CstuuuuuuuuudentDlg::pack(std::vector<CStudentInfo>& vec)
{
CString str;
str = " 姓名 性别 学号 地址 年龄 数学 C++ 总分 名次 ";
CString temp;
for (unsigned int i = 0; i < vec.size(); i++)
{
str += "\r\n ";
str += vec[i].GetName();
if ((vec[i].GetName()).GetLength() ==2)
{
str += "-";
}
else if ((vec[i].GetName()).GetLength() == 1)
{
str += "--";
}
if (vec[i].GetSex())
{
temp = " 女";
}
else
{
temp = " 男";
};
str += temp;
str += " ";
str += vec[i].GetNum();
if ((vec[i].GetNum()).GetLength() != 10)
{
int a;
a = (vec[i].GetNum()).GetLength();
for (int i = a; i < 10; i++)
{
str += "-";
}
}
str += " ";
str += vec[i].Getadd();
temp.Format(_T(" %d %d %d %d"),vec[i].GetAge(), vec[i].Getmath(), vec[i].Getccc(), vec[i].getTotal());
str += temp;
int sortNO = 1;
for (unsigned int j = 1; j < vecStudents.size(); j++)
{
if (vec[j].getTotal() > vec[i].getTotal())
{
sortNO++;
}
}
temp.Format(_T(" 第%d名 "), sortNO);
str += temp;
}
return str;
};