这是今年年初大一的C++大作业,由于我是非专业的,写的一般,错误请见谅,不过可以作为参考 #ifndef HEAD_H #define HEAD_H #include<iostream> #include<fstream> #include<iomanip> #include<algorithm> using namespace std; //数据 struct Node; class cScore { protected: int Chinese; int Math; int Cpp; int total; int Rank; }; class cStudent : private cScore { public: friend istream& operator >>(istream &,cStudent &); friend ostream& operator <<(ostream &,cStudent &); friend bool operator ==(cStudent &,cStudent&); void operator =(cStudent &STD); void count_Total(); int show_Total() const; void set_name(char*); char *show_name() ; void set_Rank(int ); int show_Rank() const; int show_NO() const; private: char name[12]; char sex[4]; int std_NO; int Class; }; struct Node { cStudent STD; Node *Next; }; //方法 //链表函数 bool CreateList(Node* &); void CreateList2(Node* &pHead,cStudent &STD); void ShowAll(Node *); bool DeleteItem(Node *&); void DeleteNode(Node *&,cStudent&); //void DeleteP(Node *); Node *Sort_UP_by_score(Node* &); Node *Sort_DOWN_by_score(Node* &); Node *Sort_UP_by_ID(Node* &); Node *Sort_DOWN_by_ID(Node* &); Node *Sort_UP_by_Name(Node* &); Node *Sort_DOWN_by_Name(Node* &); //查询-------在Show.cpp中定义 void Aquire_name(Node *,Node *&); void Aquire_NO(Node *,Node *&); void Aquire_Rank(Node *,Node *&); //其他函数 int Countpeople(Node *&); void Rank(Node *&p); void pSwap(Node *&,Node *&); void CountTotal(Node *&); bool CompTotal(cStudent &,cStudent &); //对文件的操作 void NewFile(Node *,char *,fstream &); void Save_as_Txt(Node *); void Save_as_Binary(Node *pHead); bool Read(char *,Node *&,fstream &); bool Read_TXT(char *,Node *&,fstream &); void Add(Node *pHead); void Modfy(Node *&pHead); void File_Add(fstream &,char *); void File_Modify(char *Filename,Node *&); void Save(Node* ,char *); #endif #include"Head.h" istream& operator >>(istream& input,cStudent& std) { cout<<"姓名:"; input>>std.name; cout<<"学号:"; input>>std.std_NO; cout<<"性别:"; input>>std.sex; cout<<"班别:"; input>>std.Class; cout<<"/n成绩:/n"; cout<<"语文:"; input>>std.Chinese; cout<<"数学:"; input>>std.Math; cout<<"C++:"; input>>std.Cpp; cout<<endl; return input; } ostream& operator <<(ostream& output,cStudent& std) { output.setf(ios::left,ios::basefield); output<<setw(8)<<std.name <<setw(8)<<std.std_NO <<setw(8)<<std.sex <<setw(8) <<std.Class<<setw(8)<<' '; output<<setw(8)<<std.Chinese <<setw(8)<<std.Math <<setw(8)<<std.Cpp <<setw(8)<<std.show_Total() <<setw(4)<<std.Rank<<'/n'; std.count_Total(); return output; } //成员函数 void cStudent::operator =(cStudent &STD) { if(this ==&STD) return; strcpy(name,STD.name); strcpy(sex,STD.sex); Math = STD.Math; Chinese = STD.Chinese; Cpp = STD.Cpp; std_NO=STD.show_NO(); Class = STD.Class; Rank =STD.Rank; total = STD.total; } void cStudent::count_Total() { total = Chinese+Math+Cpp; } int cStudent::show_Total() const { return total; } void cStudent::set_name(char*na) { strcpy(name,na); } char* cStudent::show_name() { return name; } void cStudent::set_Rank(int r) { Rank = r; } int cStudent::show_Rank() const { return Rank; } int cStudent::show_NO() const { return std_NO; } /*bool operator ==(cStudent &STD1,cStudent &STD2) { if(strcmp(STD1.name,STD2.name)&&!STD1.std_NO==STD2.std_NO)) return 1; return 0; }*/ //链表函数 #include"Head.h" //创建链表 bool CreateList(Node* &pHead) { char choice = 'y'; Node *pF,*pCur; //链表头 if(pHead == NULL) { pHead = new Node; cin>>pHead->STD; pHead->Next = NULL; pF = pHead; cout<<"继续添加吗?y/n"; cin>>choice; } if(choice=='n'||choice=='N') return 1; //检测链表 pCur = pHead; while(pCur->Next!=NULL) { pF = pCur; pCur = pCur->Next; } pF = pCur; pCur = NULL; //增加节点 while(choice=='y'||choice=='Y') { pCur = new Node; cin>>pCur->STD; pF->Next = pCur; pF = pCur; pCur->Next = NULL; pCur = pCur->Next; cout<<"继续添加吗?y/n"; cin>>choice; } //用于以后的判断 return 1; } //增加节点 void Add(Node *&pHead) { char choice; Node *pCur,*pF = NULL; pCur = pHead; while(pCur !=NULL) { pF = pCur; pCur = pCur->Next; } do { pCur = new Node; cin>>pCur->STD; pCur->Next = NULL; pF->Next=pCur; cout<<"/n是否继续添加?/n"; cin>>choice; if(choice =='y'||choice =='Y') { pF = pCur; pCur=pCur->Next; } }while(pCur!=NULL&&choice =='y'||choice =='Y'); } //修改节点内容 //删除节点 bool DeleteItem(Node *&p