/=====================================================================
//student.h
#ifndef student_h
#define student_h
#endif
#include
using namespace std;
//digitalElec数电 ,powerMachine电机 ,electrican电工电子,practice实习
class student
{
public:
student();
//~student();
public :
student(int eng, int dig, int mod, int pow, int p, int ma, int electr, int prac);
void caculate();
void caculateReal();
void print();
bool setname(string name);
public :
int english;
int digitalElec;
int modian;
int powerMachine;
int pe;
int mazhe;
int electrican;
int practice;
double average;
string name;
};
/=====================================================================
/=====================================================================
//student.cpp
#include
#include "student.h"
using namespace std;
student::student()
{
english = -1;
digitalElec = -1;
modian = -1;
powerMachine = -1;
pe = -1;
mazhe = -1;
electrican = -1;
practice = -1;
average = -1;
}
student::student(int eng, int dig, int mod, int pow,
int p, int ma, int electr, int prac)
{
double sum = 0;
english = eng;
digitalElec = dig;
modian = mod;
powerMachine = pow;
pe = p;
mazhe = ma;
electrican = electr;
practice = prac;
sum = english * 4 + digitalElec * 4 +
modian * 4 + powerMachine * 3.5 +
pe + mazhe * 3 + electrican +
practice * 2;
average = sum / (4 + 4 + 3.5 + 3 + 1 + 3 + 1 + 2);
cout << "\t\t初始话完毕!";
}
/*student::~student()
{
cout<<"\t\t析构运行,程序结束";
}*/
void student::caculate()
{
double sum = 0;
cout << "\t请输入英语:";
cin >> english;
cout << "\t请输入数电:";
cin >> digitalElec;
cout << "\t请输入模电:";
cin >> modian;
cout << "\t请输入电机:";
cin >> powerMachine;
cout << "\t请输入体育:";
cin >> pe;
cout << "\t请输入马哲:";
cin >> mazhe;
cout << "\t请输入电工电子:";
cin >> electrican;
cout << "\t请输入实习:";
cin >> practice;
sum = english * 4 + digitalElec * 4 +
modian * 4 + powerMachine * 3.5 +
pe + mazhe * 3 + electrican +
practice * 2;
average = sum / (4 + 4 + 3.5 + 3 + 1 + 3 + 1 + 2);
cout << "平均成绩是:" << average << endl;
}
bool student::setname(string na)
{
if (na == "exit")
{
return false;
}
else
{
name = na;
return true;
}
}
/=====================================================================
/=====================================================================
//main 函数caculate.cpp
#include
#include
#include
#include
#include
#include
#include "student.h"
using namespace std;
template
stream& operator << (stream& out, const student& stu)
{
return out << setw(10) << stu.name << " " <<
setw(4) << stu.english << " " <<
setw(4) << stu.digitalElec << " " <<
setw(4) << stu.modian << " " <<
setw(4) << stu.powerMachine << " " <<
setw(4) << stu.pe << " " <<
setw(4) << stu.mazhe << " " <<
setw(9) << stu.electrican << " " <<
setw(4) << stu.practice << " " <<
setw(9) << stu.average << endl;
}
bool score_base(const student &a, const student &b)
{
if (a.average > b.average)
{
return true;
}
else
{
return false;
}
}
bool name_base(const student &a, const student &b)
{
if (a.name >= b.name)
{
return true;
}
else
{
return false;
}
}
bool read_file(vector
{
setiosflags(ios::left);
ifstream fin("c:\\student.txt");
if (!fin)
return false;
string line;
while (getline(fin, line))
{
stringstream sin(line);
student *pStu;
if (pStu = new student)
{
sin >> pStu->name >>
pStu->english >>
pStu->digitalElec >>
pStu->modian >>
pStu->powerMachine >>
pStu->pe >>
pStu->mazhe >>
pStu->electrican >>
pStu->practice >>
pStu->average;
vstu.push_back(*pStu);
}
else
{
cout << "\t\t内存分配失败程序退出!" << endl;
exit(1);
}
}
return true;
}
inline void list_head()
{
cout << setw(10) << "姓名" <<
setw(5) << "英语" <<
setw(5) << "数电" <<
setw(5) << "模电" <<
setw(5) << "电机" <<
setw(5) << "体育" <<
setw(5) << "马哲" <<
setw(10) << "电工电子" <<
setw(5) << "实习" <<
setw(10) << "平均分"
<< endl;
}
int main()
{
vector
student *pStu;
if (!read_file(vs))
{
cout << "打开文件失败!" << endl;
while (pStu = new student)
{
string s;
cout << endl << "请输入姓名(exit退出):" << endl;
cin >> s;
if (pStu->setname(s))
{
pStu->caculate();
vs.push_back(*pStu);
}
else
{
delete pStu;
break;
}
}
}
sort(vs.begin(), vs.end(), name_base);
cout << endl << "按姓名排序" << endl;
list_head();
//for_each(vs.begin(), vs.end(), print);
copy(vs.begin(), vs.end(), ostream_iterator
sort(vs.begin(), vs.end(), score_base);
cout << endl << "按分排序" << endl;
list_head();
//for_each(vs.begin(), vs.end(), print);
copy(vs.begin(), vs.end(), ostream_iterator
ofstream fout("c:\\student.txt");
copy(vs.begin(), vs.end(), ostream_iterator
vs.clear();
return 0;
}
/=====================================================================
写得好辛苦,别忘了给分啊!
刚刚看C++.
如果你能写出这么复杂的类来,为什么不多花点时间看看容器的使用。
应该只要先定义一个容器类。
vector
push_back()满足输入。
然后,
利用stu.begin() (这个好像和引用相似)读取数据的内容,进行一个排序。
输出的模块(完全不会了)
class student{
public :student(){}
public :
student(int eng,int dig,int mod,int pow,int p,int ma,int electr,int prac){
english=eng;
digitalElec=dig;
modian=mod;
powerMachine=pow;
pe=p;
mazhe=ma;
electrican=electr;
practice=prac;
cout<<"\t\t初始话完毕!";
}
~student();
void caculate();
void caculateReal();
public :int (这里修改)english,digitalElec,modian,powerMachine,pe,mazhe,electrican,practice;
}
;
void student::caculate(){
double sum=0; double average=0;
cout<<"\t请输入英语:";
cin>>english;
cout<<"\t请输入数电:";
cin>>digitalElec;
cout<<"\t请输入模电:";
cin>>modian;
cout<<"\t请输入电机:";
cin>>powerMachine;
cout<<"\t请输入体育:";
cin>>pe;
cout<<"\t请输入马哲:";
cin>>mazhe;
cout<<"\t请输入电工电子:";
cin>>electrican;
cout<<"\t请输入实习:";
cin>>practice;
sum=english*4+digitalElec*4+modian*4+powerMachine*3.5+pe+mazhe*3+electrican+practice*2;
average=sum/(4+4+3.5+3+1+3+1+2);
cout<<"平均成绩是:"<
} //你的成绩已经在构造函数里输入了,这里应该只要直接调用啦。
student ::~student(){
cout<<"\t\t析构运行,程序结束";
}
//main 函数caculate.cpp
#include
#include "student.h"
void main(){
student s;
s.caculateReal();
}
越看越乱。!!!我还以为你写出了一个好的类呢。原来是这样····
30太少了。。。。。懒得写
找你老师吧