首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

自己写的C++程序,关于排序的有关问题

2013-11-18 
自己写的C++程序,关于排序的问题程序是这样的,可是里面关于排序的问题一直无法实现,希望大家帮忙看一下#in

自己写的C++程序,关于排序的问题
程序是这样的,可是里面关于排序的问题一直无法实现,希望大家帮忙看一下

#include<iostream>
#include<fstream>
#include<stdio.h>
#include<conio.h>
#include<string>
using namespace std;
struct student //定义一个学生结构体
{
string Name;
string Department;
string Major;
string Number, Phone;
string Dormitory;
string Grade, Class;
};

int s = 0;
class CStudent //定义一个学生类
{
private:
student stu[100];
string Name, Dormitory,Major,Department;
string Number;
string Grade, Class, Phone;

public:
void sr(string,string,string, string, string, string,string,string);
void print(int);

void cz(int);
void sc(int);
void px(int);
void bc();
};


void CStudent::sr(string sName,string sDepartment,string sMajor,string sNumber, string sDormitory, string sGrade, string sClass, string sPhone) //输入模块
{
stu[s].Department = sDepartment;
stu[s].Major = sMajor;
stu[s].Name = sName;
stu[s].Number = sNumber;
stu[s].Dormitory = sDormitory;
stu[s].Grade = sGrade;
stu[s].Class = sClass;
stu[s].Phone = sPhone;
}

void CStudent::print(int s) //输出模块
{
cout << s << "\t";
cout << stu[s].Department << "\t"; 
cout << stu[s].Name << "\t";
cout << stu[s].Major << "\t";
cout << stu[s].Number << "\t";
cout << stu[s].Dormitory << "\t";
cout << stu[s].Grade << "\t";
cout << stu[s].Class << "\t";
cout << stu[s].Phone << "\t";
cout << endl;
}

void CStudent::cz(int s) //查找模块
{
string xxh;
int p;
while (s == 0)
{
cout << "没有记录,请先输入记录!" << endl;
break;
}
if (s != 0)
{
cout << "请输入您要查找的学号:";
cin >> xxh;
while (xxh < "0") //判断输入的学号是否正确
{
cout << "您输入的学号不正确" << endl;
cin >> xxh;
}
while (s != 0) //查找是否有符合条件的记录
{
p = 1;
if (xxh == stu[s].Number)
{
cout << "系\t专业\t姓名\t学号\t\t宿舍\t年级\t班级\t电话" << endl;
cout << stu[s].Department << "\t";
cout << stu[s].Name << "\t";
cout << stu[s].Major << "\t";
cout << stu[s].Number << "\t";
cout << stu[s].Dormitory << "\t";
cout << stu[s].Grade << "\t";
cout << stu[s].Class << "\t";
cout << stu[s].Phone << endl;
getchar();
break;
}
else
p = 0;
s--;
}
if (p == 0)
cout << "很抱歉,没有找到您要查找的学号!" << endl;
}
getchar();
}

void CStudent::sc(int n) //删除模块
{
string xxh;
int p;
char da;
while (s == 0)
{
cout << "没有记录,请先输入记录!" << endl;
break;
}
if (s != 0)
{
cout << "请输入您要删除的学号:";
cin >> xxh;
while (xxh<"0")
{
cout << "您输入的学号不正确" << endl;
cin >> xxh;
}

for (int i = 1; i <= n; i++)
{
if (stu[i].Number != xxh)
p = 0;
if (stu[i].Number == xxh)
{
cout << "系\t专业\t姓名\t学号\t\t宿舍\t年级\t班级\t电话" << endl;
cout << stu[i].Department << "\t";
cout << stu[i].Major << "\t";
cout << stu[i].Name << "\t";
cout << stu[i].Number << "\t";
cout << stu[i].Dormitory << "\t";
cout << stu[i].Grade << "\t";
cout << stu[i].Class << "\t";
cout << stu[i].Phone << endl;
cout << "您确实要删除该学生的记录吗?(y/n)";
cin >> da;
if (da == 'y' || da == 'Y')
{
for (int j = i; j <= n - 1; j++) //删除记录
{
stu[j].Department = stu[j + 1].Department;
stu[j].Major = stu[j + 1].Major;
stu[j].Name = stu[j + 1].Name;
stu[j].Number = stu[j + 1].Number;
stu[j].Dormitory = stu[j + 1].Dormitory;


stu[j].Grade = stu[j + 1].Grade;
stu[j].Class = stu[j + 1].Class;
stu[j].Phone = stu[j + 1].Phone;

}
cout << "该记录已删除!" << endl;
s = s - 1;
p = 1;
break;
}
else
{
cout << "该记录未删除!" << endl;
p = 1;
}
}
}
if (p == 0)
cout << "很抱歉,没有找到您要找的学号!" << endl;
}
getchar();
}



void CStudent::px(int s) //排序模块
{
string chang;
string b[20];
if(s == 0)
{
cout << "没有记录,请先输入记录!" << endl;
}
if (s != 0)
{
cout << "系\t专业\t姓名\t学号\t\t宿舍\t年级\t班级\t电话"<<endl;

for (int k = 0; k <= s; k++)
{
b[k] = stu[k].Number;
}
struct student st1;
for (int i = 0; i < s; i++) //利用冒泡法对B[]进行排序
for (int j = i+1; j <= s-1; j++)
if (b[i]>b[j])
{
chang = b[j];
b[j] = b[j + 1];
b[j + 1] = chang;
st1 = stu[i];
stu[i] = stu[j];
stu[j] = st1;
}
for (int h = 1; h <= s; h++) //输出与B[]中对应的内容
for (int e =0; e<s; e++)
if (b[h] == stu[e].Number)
{
cout << stu[e].Department << "\t";
cout << stu[e].Major << "\t";
cout << stu[e].Name << "\t";
cout << stu[e].Number << "\t";
cout << stu[e].Dormitory << "\t";
cout << stu[e].Grade << "\t";
cout << stu[e].Class << "\t";
cout << stu[e].Phone << "\t";
}
}

getchar();
}

void Menu()
{
system("cls");
cout << endl;
cout << " 学生成绩管理系统" << endl;
cout << "1.输入/添加学生资料" << endl;
cout << "2.显示学生资料" << endl;
cout << "3.按学号查找" << endl;
cout << "4.删除记录" << endl;
cout << "5.按学号进行排序" << endl;
cout << "0.退出" << endl;
}

void CStudent::bc()
{
ofstream os("记录.txt");
if(s != 0)
{
for(int i=0; i<s; i++)
{
           os<<stu[i].Department<<' '<<stu[i].Major<<' '<<stu[i].Name<<' '<<stu[i].Number<<' '<<stu[i].Dormitory<<' '<<stu[i].Grade<<' '<<stu[i].Class<<' '<<stu[i].Phone<<' '<<endl;
}
}
os.close;
}
void main()
{
CStudent st;
char da, a;
string Number, Phone;
string Department, Major, Name, Dormitory;
string Grade, Class;
Menu();
while (1)
{
cout << "请选择操作(0-5):" << endl;
cin >> a;
switch (a)
{
case '1':

cout << "请依次输入学生的系,专业,姓名,学号,宿舍,年级,班级,电话:" << endl;
Department = new char[]; Major = new char[]; Name = new char[]; Dormitory = new char[];
cin >> Department >> Major >> Name >> Number >> Dormitory >> Grade >> Class >> Phone;

s = s + 1;
st.sr(Department, Major, Name, Number, Dormitory, Grade, Class, Phone);

cout << "是否继续输入?(y/n)";
cin >> da;
while (1) //判断是否要继续输入
{
if(da == 'y' || da == 'Y')
{
cout << "请依次输入学生的系,专业,姓名,学号,宿舍,年级,班级,电话:" << endl;
Department = new char[]; Major = new char[]; Name = new char[]; Dormitory = new char[];
cin >> Department >> Major >> Name >> Number >> Dormitory >> Grade >> Class >> Phone;

s++;
st.sr(Department, Major, Name, Number, Dormitory, Grade, Class, Phone);
cout << "是否继续输入?(y/n)";
cin >> da;
}
else
{
break;
}

break;

case '2':
{
if (s == 0) //判断是否有记录输入
{
cout << "没有记录,请先输入记录!" << endl;


getchar();
}
if (s != 0)
{
cout << "序号" << "\t";
cout << "系" << "\t";
cout << "专业" << "\t";
cout << "姓名" << "\t";
cout << "学号" << "\t\t";
cout << "宿舍" << "\t";
cout << "年级" << "\t";
cout << "班级" << "\t";
cout << "电话" << endl;
for (int i = 1; i <= s; i++)
st.print(i);
}
getchar();
};
break;
case '3':st.cz(s); break;
case '4':st.sc(s); break;
case '5':st.px(s); break;
case '0': 
st.bc();
cout<<"谢谢使用!"<<endl;
return;
default:
cout<<"请重新输入!"<<endl;
break;
}
}
}


[解决办法]

//这里有问题呢,你网上查查冒泡吧!s的值就看不明白了, 貌似j <= s-1越界问题, 
 for (int i = 0; i < s; i++) //利用冒泡法对B[]进行排序
             for (int j = i+1; j <= s-1; j++)
                 if (b[i]>b[j])
                 {
                     chang = b[j];
                     b[j] = b[j + 1];
                     b[j + 1] = chang;
                     st1 = stu[i];
                     stu[i] = stu[j];
                     stu[j] = st1;
                 } 

热点排行