学生成绩管理系统

一、项目的目的与要求
设计一个学生成绩管理系统。学生信息包括:学号、姓名、性别、年龄、班级等信息。小学生除了包括学生所有信息外,还包括英语、数学和语文成绩。中学生除了包括小学生所有信息外,还包括地理、历史成绩。大学生除了包括学生所有信息外,还包括专业、英语、程序设计和高等数学等课程。设计一程序能够对学生成绩进行管理,应用到继承、抽象类、虚函数、虚基类、多态和文件的输入/输出等内容。

二、工具/准备工作
应用知识:
1.STL容器的选择:链表方便删除,插入。
2.文件流的输入与输出。建立文件流和链表之间的输入输出操作。
3.首先简单功能确定,其次再在细节处考虑。
4.友元类:可以访问与之为友元关系的类的所有私有成员
5.虚函数:实现动态绑定避免造成重复基类。
6.常成员函数:防止间接改变数据成员
7.类型引用:传递变量的地址。
8.清屏操作:system(“pause”);
9.强制类型转换:static_cast:强制将一种数据类型转换成另一种数据类型。
C++集成开发环境:Visual Studio 2012

//完整成果报告在另一个博文里

# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Student
{
	friend class Studentmassage;
protected:
	char type[15];//学生类型
	char name[20];//姓名
	char id[10];//学号
	char sex[4];//性别
	int age;//年龄
	Student *Next;
public:
	Student();
	Student(char name[], char id[], char sex[], int age, char type[]);
	~Student(){}
	void ReadFile(istream & in);
	void Input();
	void Showstudents()const;
};



class Primary:virtual public Student {
	friend class Pmassage;
protected:
	int chinese;
	int math;
	int eng;
	Primary *Next;
	int prsum;
public:
	Primary();
	Primary(char name[], char id[], char sex[], int age, char type[], int chinese, int math, int eng);
	~Primary(){}
	void Input();
	void ReadFile(istream & in);
	void Show()const;
};
class High: virtual public Primary{
	friend class Hmassage;
protected:
	int history;
	int geo;
	int hgsum;
	High * Next;
public:
	void Input();
	void ReadFile(istream & in);
	void Show()const;

};

class College: virtual public Student
{
	friend class Cmassage;
protected:
 int Cnum;       //C++课程得分
 int Mnum;       //高数得分
 int Enum;       //程序设计课程得分
 int Eng;        //英语得分 
 int sum;
 College * Next;
public:
 void Input();
 void ReadFile(istream & in);
 void Show()const;
};
 


#include "grade.h"


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Student类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Student::Student()
{
	strcpy(name," ");strcpy(id," ");strcpy(sex," ");age=18;strcpy(type," ");
}
Student::Student(char name[], char id[], char sex[], int age, char type[])
{
	strcpy(name,name);strcpy(id,id);strcpy(sex,sex),age=age;strcpy(type,type);
}

void Student::ReadFile(istream & in)
{
	in>>name>>id>>sex>>age>>type;
}
void Student::Input()
 {
  cout<<"\t\t请输入学生的学号:";  cin>>id;
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
  cout<<"\t\t请输入学生的性别:";  cin>>sex;
  cout<<"\t\t请输入学生的年龄:";  cin>>age;
  cout<<"\t\t请输入学生的类型:";  cin>>type;
}
void Student::Showstudents()const{
	 int i=0;
	 if(i==0){
	cout<<"姓名:"<<"\t学号:"<<"\t性别:"<<"\t年龄:"<<"\t学生类型"<<endl;
	i++;}
	cout<<name<<"\t"<<id<<"\t"<<sex<<"\t"<<age<<"\t"<<type<<endl;
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Primary类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Primary::Primary()
{
	chinese=0;
	math=0;
	eng=0;
}
Primary::Primary(char name[], char id[], char sex[], int age, char type[], int chinese, int math, int eng)
	:Student(name, id, sex, age, type)
{
	chinese=chinese;math=math;eng=eng;
}
void Primary::Input()
 {
  cout<<"\t\t请输入学生的学号:";  cin>>id;
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
  cout<<"\t\t请输入学生的性别:";  cin>>sex;
  cout<<"\t\t请输入学生的年龄:";  cin>>age;
  cout<<"\t\t请输入学生的语文的成绩:";  cin>>chinese;
  cout<<"\t\t请输入学生的数学的成绩:";  cin>>math;
  cout<<"\t\t请输入学生的英语的成绩:";  cin>>eng;
  prsum=chinese+math+eng;
 }
 void Primary::ReadFile(istream & in)
{
	in>>name>>id>>sex>>age>>chinese>>math>>eng>>prsum;
}
 void Primary::Show()const
 {
	  int i=0;
	 if(i==0){
		cout<<"姓名:"<<"\t学号:"<<"\t性别:"<<"\t年龄:"<<"\t语文:"<<"\t数学:"
			<<"\t英语:"<<"\t总成绩:"<<endl;i++;}
   cout<<name<<"\t"<<id<<"\t"<<sex<<"\t"<<age<<"\t"<<chinese<<"\t"<<math<<"\t"<<eng<<"\t"<<prsum<<endl;
 }



//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌High类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
 void High::Input()
 {
  cout<<"\t\t请输入学生的学号:";  cin>>id;
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
  cout<<"\t\t请输入学生的性别:";  cin>>sex;
  cout<<"\t\t请输入学生的年龄:";  cin>>age;
  cout<<"\t\t请输入学生的语文的成绩:";  cin>>chinese;
  cout<<"\t\t请输入学生的数学的成绩:";  cin>>math;
  cout<<"\t\t请输入学生的英语的成绩:";  cin>>eng;
  cout<<"\t\t请输入学生的地理的成绩:";  cin>>geo;
  cout<<"\t\t请输入学生的历史的成绩:";  cin>>history;
  hgsum=chinese+math+eng+geo+history;
 }
 void High::ReadFile(istream & in)
{
	in>>name>>id>>sex>>age>>chinese>>math>>eng>>geo>>history>>hgsum;
}
 void High::Show()const
 {
	 cout<<"姓名:"<<"\t学号:"<<"\t性别:"<<"\t年龄:"<<"\t语文:"<<"\t数学:"
	 <<"\t英语:"<<"\t地理:"<<"\t历史:"<<"\t总成绩:"<<endl;
   cout<<name<<"\t"<<id<<"\t"<<sex<<"\t"<<age<<"\t"<<chinese<<"\t"<<math
	   <<"\t"<<eng<<"\t"<<geo<<"\t"<<history<<"\t"<<hgsum<<endl;
 }




 //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌College类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
 void College::Input()
 {
  cout<<"\t\t请输入学生的学号:";  cin>>id;
  cout<<"\t\t请输入学生的姓名:";  cin>>name;
  cout<<"\t\t请输入学生的性别:";  cin>>sex;
  cout<<"\t\t请输入学生的年龄:";  cin>>age;  
  cout<<"\t\t请输入C++课程的成绩:";  cin>>Cnum;
  cout<<"\t\t请输入高数的成绩:";  cin>>Mnum;
  cout<<"\t\t请输入程序设计课程的成绩:";  cin>>Enum;
  cout<<"\t\t请输入学生的英语的成绩:";  cin>>Eng;
  sum=Cnum+Mnum+Enum+Eng;
 }
 void College::ReadFile(istream & in)
{
	in>>name>>id>>sex>>age>>Cnum>>Mnum>>Enum>>Eng>>sum;
}
 void College::Show()const
 {
   cout<<"姓名:"<<"\t学号:"<<"\t性别:"<<"\t年龄:"<<"\tC++课程:"<<"\t高数:"
	 <<"\t程序设计课程:"<<"\t英语:"<<"\t总成绩:"<<endl;
   cout<<name<<"\t"<<id<<"\t"<<sex<<"\t"<<age<<"\t"<<Cnum<<"\t"<<Mnum
	   <<"\t"<<Enum<<"\t"<<Eng<<"\t"<<sum<<endl;
 }





# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
#include "grade.h"
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Studentmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Studentmassage
{
public:
	Studentmassage();
	~Studentmassage();
 void ShowMenu();
 void Find();
 void Save();
 void ModifyItem();
 void RemoveItem();
 int ListCount();
 void Display();
 void AddItem();
 Student *FindItem(char * name);
 Student *FindID(char * id);
private:
 Student * Head,* End;
 ifstream in;
 ofstream out;
};


 class Pmassage
{
public:
	Pmassage();
	~Pmassage();
	void ShowMenu();
	 void Find();
	 void Save();
	 void ModifyItem();
	 void RemoveItem();
	 int ListCount();
	 void Average();
	 void Display();
	 void AddItem();
	 Primary *FindItem(char * name);
	 Primary *FindID(char * id);
private:
	 Primary *P_Head,*P_End;
	 ifstream in;
	 ofstream out;
};
 class Hmassage
{
public:
	Hmassage();
	~Hmassage();
	void ShowMenu();
	 void Find();
	 void Save();
	 void ModifyItem();
	 void RemoveItem();
	 int ListCount();
	 void Average();
	 void Display();
	 void AddItem();
	 High *FindItem(char * name);
	 High *FindID(char * id);
private:
	 High *H_Head,*H_End;
	 ifstream in;
	 ofstream out;
};
 class Cmassage
{
public:
	 Cmassage();
	 ~Cmassage();
	 void ShowMenu();
	 void Find();
	 void Save();
	 void ModifyItem();
	 void RemoveItem();
	 int ListCount();
	 void Average();
	 void Display();
	 void AddItem();
	 College *FindItem(char * name);
	 College *FindID(char * id);
private:
	 College *C_Head,*C_End;
	 ifstream in;
	 ofstream out;
};
#include "system.h"
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌学生信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::Studentmassage()
{
 Head=new Student;
 Head->Next=new Student;
 End=Head->Next;
 in.open("student.txt");
 if(!in)
	cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
 else
 {
  while(!in.eof())
  {
   End->ReadFile(in);
   if(End->name[0]=='\0')break;
   End->Next=new Student;
   End=End->Next;
  }
  in.close();
  cout<<"\t\t读取学生信息成功!"<<endl;
}
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Studentmassage::~Studentmassage()
{
 Save();
 for(Student * temp;Head->Next!=End;)
 {
  temp=Head->Next;
  Head->Next=Head->Next->Next;
  delete temp;
 }
 delete Head,End;
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌展现信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Display()
 {
  for(Student * p=Head->Next;p!=End;p=p->Next)
   p->Showstudents();
  cout<<"输入任意字符!继续……";
  getch();
 }

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌添加人员﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
 void Studentmassage::AddItem()
 {
begin:
	char id[15];Student *p;
	cout<<"请创建一个id号:";cin>>id;
     if(p=FindID(id))
     {
		   cout<<"学号已存在,重新输入学生信息"<<endl;
		   cout<<"输入任意字符!继续……";
		   getch();
		   goto begin;
		}
	   else
	   {
	  End->Input();
	  End->Next=new Student;
	  End=End->Next;
	  cout<<"添加成功!"<<endl;
	  cout<<"输入任意字符!继续……"<<endl;
	  getch();
	   }
	 }
 //﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌姓名查找﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Student * Studentmassage::FindItem(char * name)
 {
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->name,name))return p;
   return NULL;

}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌学号查找﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
 Student * Studentmassage::FindID(char * id)
 {
  for(Student * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->id,id))return p;
   return NULL;
 }
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ShowMenu() { 
  cout<<"********************************************************************************"<<endl;
  cout<<"------------------------   学 生 成 绩 管 理 系  统     -----------------------"<<endl;
  cout<<"-----------------------          **************         -----------------------"<<endl;
  cout<<"-----------------------          1.增加学生             -----------------------"<<endl;
  cout<<"-----------------------          2.显示学生             -----------------------"<<endl;
  cout<<"-----------------------          3.查找学生             -----------------------"<<endl;
  cout<<"-----------------------          4.删除学生             -----------------------"<<endl;
  cout<<"-----------------------          5.修改学生信息         -----------------------"<<endl;
  cout<<"-----------------------          6.统计学生总数         -----------------------"<<endl;
  cout<<"-----------------------          7.查看学生分数         -----------------------"<<endl;
  cout<<"-----------------------          0.安全退出系统         -----------------------"<<endl;
 
 cout<<"\n\t\t\n\t\t请选择:";
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Find()
{
 char name[20] ,Id[10];
 int x;
 Student * p=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>x;
 switch(x)
 {
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
  if(p=FindItem(name))
  {
   p->Next->Showstudents();
   cout<<"输入任意字符!继续……";
   getch();
  }
  else
  {
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
   cout<<"输入任意字符!继续……";
   getch();
  }
     }break;
 case 2:
  {
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
   if(p=FindID(Id))
   {
    p->Next->Showstudents();
    cout<<"输入任意字符!继续……";
    getch();
   }
   else
   {
    cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;
    cout<<"输入任意字符!继续……";
    getch();
   }
  }break;
 }
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::ModifyItem()     //修改信息
{
 char name[20];
 Student * p=NULL;
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
 if(p=FindItem(name))
 {
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
}
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::RemoveItem()         // 删除信息
{
 char name[20];
 Student * p=NULL,*temp=NULL;
 cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
 if(p=FindItem(name))
 {
  temp=p->Next;
  p->Next=p->Next->Next; 
  delete temp;
  cout<<"\t\t删除成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
     cout<<"输入任意字符!继续……";
  getch();
 }
}
 
 
//﹌﹌﹌﹌﹌﹌﹌﹌﹌统计人数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Studentmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
 if(! Head)
  return 0;
 int n=0;
 for(Student * p=Head->Next;p!=End;p=p->Next)
 {
  n++;
 }
 return n;
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Studentmassage::Save()
{
 out.open("student.txt");
 for(Student *p=Head->Next;p!=End;p=p->Next)
  out<<p->name<<"\t"<<p->id<<"\t"<<p->sex<<"\t"<<p->age<<"\t"<<p->type<<'\n';
 out.close();
}

//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌大学生信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Cmassage::Cmassage()
{
	C_Head=new College;
 C_Head->Next=new College;
 C_End=C_Head->Next;
 in.open("College.txt");
 if(!in)
	cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
 else
 {
  while(!in.eof())
  {
   C_End->ReadFile(in);
   if(C_End->name[0]=='\0')break;
   C_End->Next=new College;
   C_End=C_End->Next;
  }
  in.close();
  cout<<"\t\t读取学生信息成功!"<<endl;
 }
}
Cmassage::~Cmassage()
{
	for(College * temp;C_Head->Next!=C_End;)
 {
  temp=C_Head->Next;
  C_Head->Next=C_Head->Next->Next;
  delete temp;
 }
 delete C_Head,C_End;
}
void Cmassage::ShowMenu()
{
  cout<<"********************************************************************************"<<endl;
  cout<<"------------------------   学 生 成 绩 管 理 系  统     -----------------------"<<endl;
  cout<<"-----------------------          **************         -----------------------"<<endl;
  cout<<"-----------------------          1.增加学生             -----------------------"<<endl;
  cout<<"-----------------------          2.显示学生             -----------------------"<<endl;
  cout<<"-----------------------          3.全班总分平均分数     -----------------------"<<endl;
  cout<<"-----------------------          4.查找学生             -----------------------"<<endl;
  cout<<"-----------------------          5.删除学生             -----------------------"<<endl;
  cout<<"-----------------------          6.修改学生信息         -----------------------"<<endl;
  cout<<"-----------------------          7.统计学生总数         -----------------------"<<endl;
  cout<<"-----------------------          0.安全退出系统         -----------------------"<<endl;
 
 cout<<"\n\t\t\n\t\t请选择:";
}
void Cmassage::Find()
{
	char name[20] ,Id[10];
 int x;
 College * p=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>x;
 switch(x)
 {
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
  if(p=FindItem(name))
  {
   p->Next->Show();
   cout<<"输入任意字符!继续……";
   getch();
  }
  else
  {
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
   cout<<"输入任意字符!继续……";
   getch();
  }
     }break;
 case 2:
  {
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
   if(p=FindID(Id))
   {
    p->Next->Show();
    cout<<"输入任意字符!继续……";
    getch();
   }
   else
   {
    cout<<"\t\t没有找到该学号的学生!"<<'\n'<<endl;
    cout<<"输入任意字符!继续……";
    getch();
   }
  }break;
 }
}
void Cmassage::Save()
{
	out.open("College.txt");
    for(College *p=C_Head->Next;p!=C_End;p=p->Next)
    out<<p->name<<"\t"<<p->id<<"\t"<<p->sex<<"\t"<<p->age<<"\t"<<p->Cnum<<"\t"<<
	p->Mnum<<"\t"<<p->Enum<<"\t"<<p->Eng<<"\t"<<p->sum<<endl;
	out.close();
}
void Cmassage::ModifyItem()
{
	char name[20];
 College * p=NULL;
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
 if(p=FindItem(name))
 {
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
}
void Cmassage::RemoveItem()
{
	char name[20];
 College * p=NULL,*temp=NULL;
 cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
 if(p=FindItem(name))
 {
  temp=p->Next;
  p->Next=p->Next->Next; 
  delete temp;
  cout<<"\t\t删除成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
     cout<<"输入任意字符!继续……";
  getch();
 }
}
int Cmassage::ListCount()
{
	if(! C_Head)
  return 0;
 int n=0;
 for(College * p=C_Head->Next;p!=C_End;p=p->Next)
 {
  n++;
 }
 return n;
}
void Cmassage::Average()
{
	if(! C_Head)
		return;
 int n=0,i=0;
 for(College * p=C_Head->Next;p!=C_End;p=p->Next)
 {
  n+=p->sum;i++;
 }
 double avg = static_cast<double>(n) / static_cast<double>(i);
 cout<<"总体平均分:"<<avg<<endl;
	 cout<<"输入任意字符!继续……";
	 getch();
}
void Cmassage::Display()
{
	for(College* p=C_Head->Next;p!=C_End;p=p->Next)
	 p->Show();
  cout<<"输入任意字符!继续……";
  getch();
}
void Cmassage::AddItem()
{
begin:
	char id[15];College *p;
	cout<<"请创建一个id号:";cin>>id;
     if(p=FindID(id))
     {
		   cout<<"学号已存在,重新输入学生信息"<<endl;
		   cout<<"输入任意字符!继续……";
		   getch();
		   goto begin;
		}
	   else
	   {
	  C_End->Input();
	  C_End->Next=new College;
	  C_End=C_End->Next;
	  cout<<"添加成功!"<<endl;
	  cout<<"输入任意字符!继续……"<<endl;
	  getch();
	   }
	 }
College *Cmassage::FindItem(char * name)
{
	for(College * p=C_Head;p->Next!=C_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
    if(!strcmp(p->Next->name,name))return p;
    return NULL;
}
College *Cmassage::FindID(char * id)
{
   for(College * p=C_Head;p->Next!=C_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->id,id))return p;
   return NULL;
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌中学生信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Hmassage::Hmassage()
{
	H_Head=new High;
 H_Head->Next=new High;
 H_End=H_Head->Next;
 in.open("High.txt");
 if(!in)
	cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
 else
 {
  while(!in.eof())
  {
   H_End->ReadFile(in);
   if(H_End->name[0]=='\0')break;
   H_End->Next=new High;
   H_End=H_End->Next;
  }
  in.close();
  cout<<"\t\t读取学生信息成功!"<<endl;
 }
}
Hmassage::~Hmassage()
{
	for(High * temp;H_Head->Next!=H_End;)
 {
  temp=H_Head->Next;
  H_Head->Next=H_Head->Next->Next;
  delete temp;
 }
 delete H_Head,H_End;
}
void Hmassage::ShowMenu()
{
  cout<<"********************************************************************************"<<endl;
  cout<<"------------------------   学 生 成 绩 管 理 系  统     -----------------------"<<endl;
  cout<<"-----------------------          **************         -----------------------"<<endl;
  cout<<"-----------------------          1.增加学生             -----------------------"<<endl;
  cout<<"-----------------------          2.显示学生             -----------------------"<<endl;
  cout<<"-----------------------          3.全班总分平均分数     -----------------------"<<endl;
  cout<<"-----------------------          4.查找学生             -----------------------"<<endl;
  cout<<"-----------------------          5.删除学生             -----------------------"<<endl;
  cout<<"-----------------------          6.修改学生信息         -----------------------"<<endl;
  cout<<"-----------------------          7.统计学生总数         -----------------------"<<endl;
  cout<<"-----------------------          0.安全退出系统         -----------------------"<<endl;
 
 cout<<"\n\t\t\n\t\t请选择:";
}
void Hmassage::Find()
{char name[20] ,Id[10];
 int x;
 High * p=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>x;
 switch(x)
 {
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
  if(p=FindItem(name))
  {
   p->Next->Show();
   cout<<"输入任意字符!继续……";
   getch();
  }
  else
  {
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
   cout<<"输入任意字符!继续……";
   getch();
  }
     }break;
 case 2:
  {
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
   if(p=FindID(Id))
   {
    p->Next->Show();
    cout<<"输入任意字符!继续……";
    getch();
   }
   else
   {
    cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;
    cout<<"输入任意字符!继续……";
    getch();
   }
  }break;
 }
}
void Hmassage::Save()
{
	out.open("High.txt");
    for(High *p=H_Head->Next;p!=H_End;p=p->Next)
		out<<p->name<<"\t"<<p->id<<"\t"<<p->sex<<"\t"<<p->age<<"\t"<<p->chinese<<"\t"<<p->math<<"\t"<<p->eng<<"\t"
		<<p->geo<<"\t"<<p->history<<"\t"<<p->hgsum<<endl;
    out.close();
}
void Hmassage::ModifyItem()
{
	 char name[20];
 High * p=NULL;
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
 if(p=FindItem(name))
 {
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
}
void Hmassage::RemoveItem()
{
	char name[20];
 High * p=NULL,*temp=NULL;
 cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
 if(p=FindItem(name))
 {
  temp=p->Next;
  p->Next=p->Next->Next; 
  delete temp;
  cout<<"\t\t删除成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
     cout<<"输入任意字符!继续……";
  getch();
 }
}
int Hmassage::ListCount()
{
	if(! H_Head)
  return 0;
 int n=0;
 for(High * p=H_Head->Next;p!=H_End;p=p->Next)
 {
  n++;
 }
 return n;
}
void Hmassage::Average()
{
	if(! H_Head)
		return;
 int n=0,i=0;
 for(High * p=H_Head->Next;p!=H_End;p=p->Next)
 {
  n+=p->hgsum;i++;
 }
 double avg = static_cast<double>(n) / static_cast<double>(i);
 cout<<"总体平均分:"<<avg<<endl;
	 cout<<"输入任意字符!继续……";
	 getch();
}
void Hmassage::Display()
{
	for(High* p=H_Head->Next;p!=H_End;p=p->Next)
	 p->Show();
  cout<<"输入任意字符!继续……";
  getch();
}
void Hmassage::AddItem()
{
begin:
	char id[15];High *p;
	cout<<"请创建一个id号:";cin>>id;
     if(p=FindID(id))
     {
		   cout<<"学号已存在,重新输入学生信息"<<endl;
		   cout<<"输入任意字符!继续……";
		   getch();
		   goto begin;
		}
	   else
	   {
	  H_End->Input();
	  H_End->Next=new High;
	  H_End=H_End->Next;
	  cout<<"添加成功!"<<endl;
	  cout<<"输入任意字符!继续……"<<endl;
	  getch();
	   }
}
High *Hmassage::FindItem(char * name)
{
	for(High * p=H_Head;p->Next!=H_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->name,name))return p;
   return NULL;
}
High *Hmassage::FindID(char * id)
{
	for(High * p=H_Head;p->Next!=H_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
   if(!strcmp(p->Next->id,id))return p;
   return NULL;
}


//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌小学生信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Pmassage::Pmassage()
{
	P_Head=new Primary;
	P_Head->Next=new Primary;
	 P_End=P_Head->Next;
	 in.open("Primary.txt");
	 if(!in)
		cout<<"这是一个新系统,无学生信息。请先输入。"<<endl;
	 else
	 {
		  while(!in.eof())
			  {
			   P_End->ReadFile(in);
			   if(P_End->name[0]=='\0')break;
				   P_End->Next=new Primary;
				   P_End=P_End->Next;
			  }
		  in.close();
		  cout<<"\t\t读取学生信息成功!"<<endl;
	 }
}
Pmassage::~Pmassage()
{
	 for(Primary * temp;P_Head->Next!=P_End;)
 {
  temp=P_Head->Next;
  P_Head->Next=P_Head->Next->Next;
  delete temp;
 }
 delete P_Head,P_End;
 }
void Pmassage::ShowMenu()
{
  cout<<"********************************************************************************"<<endl;
  cout<<"------------------------   学 生 成 绩 管 理 系  统     -----------------------"<<endl;
  cout<<"-----------------------          **************         -----------------------"<<endl;
  cout<<"-----------------------          1.增加学生             -----------------------"<<endl;
  cout<<"-----------------------          2.显示学生             -----------------------"<<endl;
  cout<<"-----------------------          3.全班总分平均分数     -----------------------"<<endl;
  cout<<"-----------------------          4.查找学生             -----------------------"<<endl;
  cout<<"-----------------------          5.删除学生             -----------------------"<<endl;
  cout<<"-----------------------          6.修改学生信息         -----------------------"<<endl;
  cout<<"-----------------------          7.统计学生总数         -----------------------"<<endl;
  cout<<"-----------------------          0.安全退出系统         -----------------------"<<endl;
 
 cout<<"\n\t\t\n\t\t请选择:";
}
void Pmassage::Find()
{
char name[20] ,Id[10];
 int x;
 Primary * p=NULL;
 cout<<"\n\t\t*********************************\n";
 cout<<"\t\t※ 1.按学生的姓名查找\n\t\t※ 2.按学生学号查找";
 cout<<"\n\t\t*********************************\n请选择:";
 cin>>x;
 switch(x)
 {
 case 1:{cout<<"\t\t请输入要查找的学生的姓名:";cin>>name;
  if(p=FindItem(name))
  {
   p->Next->Show();
   cout<<"输入任意字符!继续……";
   getch();
  }
  else
  {
   cout<<"\t\t没有找到该姓名的学生!"<<'\n'<<endl;
   cout<<"输入任意字符!继续……";
   getch();
  }
     }break;
 case 2:
  {
   cout<<"\t\t请输入要查找的学生的学号:";cin>>Id;
   if(p=FindID(Id))
   {
    p->Next->Show();
    cout<<"输入任意字符!继续……";
    getch();
   }
   else
   {
    cout<<"\t\t没有找到该学好的学生!"<<'\n'<<endl;
    cout<<"输入任意字符!继续……";
    getch();
   }
  }break;
 }
 
}
void Pmassage::Save()
{
	out.open("Primary.txt");
 for(Primary *p=P_Head->Next;p!=P_End;p=p->Next)
  out<<p->name<<"\t"<<p->id<<"\t"<<p->sex<<"\t"<<p->age<<"\t"<<p->chinese<<"\t"<<p->math<<"\t"<<p->eng<<"\t"<<p->prsum<<endl;
 out.close();
}
void Pmassage::ModifyItem()
{
  char name[20];
 Primary * p=NULL;
 cout<<"\t\t请输入要修改的人的姓名:";cin>>name;
 if(p=FindItem(name))
 {
  cout<<"\t\t已找到学生的信息,请输入新的信息!"<<endl;
  p->Next->Input();
  cout<<"修改成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
}
void Pmassage::RemoveItem()
{
	char name[20];
 Primary * p=NULL,*temp=NULL;
 cout<<"\t\t请输入要删除的学生的姓名:"<<endl;cin>>name;
 if(p=FindItem(name))
 {
  temp=p->Next;
  p->Next=p->Next->Next; 
  delete temp;
  cout<<"\t\t删除成功!"<<endl;
  cout<<"输入任意字符!继续……";
  getch();
 }
 else
 {
  cout<<"\t\t没有找到!"<<endl;
     cout<<"输入任意字符!继续……";
  getch();
 }
}
int Pmassage::ListCount()
{
	if(! P_Head)
  return 0;
 int n=0;
 for(Primary * p=P_Head->Next;p!=P_End;p=p->Next)
 {
  n++;
 }
 return n;
}
void Pmassage::Average()
{
	if(! P_Head)
		return;
 int n=0,i=0;
 for(Primary * p=P_Head->Next;p!=P_End;p=p->Next)
 {
  n+=p->prsum;i++;
 }
 double avg = static_cast<double>(n) / static_cast<double>(i);
 cout<<"总体平均分:"<<avg<<endl;
	 cout<<"输入任意字符!继续……";
	 getch();
}
void Pmassage::Display()
{
	for(Primary* p=P_Head->Next;p!=P_End;p=p->Next)
		 p->Show();
	 cout<<"输入任意字符!继续……";
	 getch();
}
void Pmassage::AddItem()
{
begin:
	char id[15];Primary *p;
	cout<<"请创建一个id号:";cin>>id;
     if(p=FindID(id))
     {
		   cout<<"学号已存在,重新输入学生信息"<<endl;
		   cout<<"输入任意字符!继续……";
		   getch();
		   goto begin;
		}
	   else
	   {
	  P_End->Input();
	  P_End->Next=new Primary;
	  P_End=P_End->Next;
	  cout<<"添加成功!"<<endl;
	  cout<<"输入任意字符!继续……"<<endl;
	  getch();
	   }
}
Primary *Pmassage::FindItem(char * name)
{
	for(Primary * p=P_Head;p->Next!=P_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
		if(!strcmp(p->Next->name,name))
			return p;
	return NULL;
}
Primary *Pmassage::FindID(char * id){
	for(Primary * p=P_Head;p->Next!=P_End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
    if(!strcmp(p->Next->id,id))return p;
    return NULL;
}

#include "system.h"
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
int y=3;
 while(y!=0){
 cout<<"\t\t----------------------------------------------------"<<endl;
 for(int i=0;i<3;i++)
  cout<<"\t\t----------------------------------------------------"<<endl;
 cout<<"\t\t----------【  欢迎进入学生成绩管理系统  】----------"<<endl;
 for(int i=0;i<3;i++)
  cout<<"\t\t----------------------------------------------------"<<endl;
 cout<<"\t\t----------------------------------------------------\n"<<endl;
 
 
	 char name[15],sct[10];
	 Studentmassage Grade;
	 cout<<endl;
	 cout<<"登陆账号:";cin>>name;
	 cout<<endl;
	 cout<<"登陆密码:";cin>>sct;
	 cout<<endl;
	 if(Grade.FindItem(name)!=NULL&&Grade.FindID(sct)!=NULL&&Grade.FindItem(name)==Grade.FindID(sct)){
		  y==0;
		  cout<<"按任意键开始……";
		  getch();
	 bool quit=false;
	 while(!quit)
	 {
	  system("cls");
	  Grade.ShowMenu();
	 int x;
	 cin>>x;
	 switch(x)
  {
  case 0:Grade.Save();quit=true;break;
  case 1:Grade.AddItem();Grade.Save();break;
  case 2:Grade.Display();Grade.Save();break;
  case 3:Grade.Find();Grade.Save();break;
  case 4:Grade.RemoveItem();Grade.Save();break;
  case 5:Grade.ModifyItem();Grade.Save();break;
  case 6:{cout<<"\t\t学生总人数:"<<Grade.ListCount()<<endl;
	  cout<<"输入任意字符!继续……";getch();break;}
  case 7:{
	      int choice;
		  system("cls");
		  cout<<"\t\t----------------------------------------------------"<<endl;
		  cout<<"\t\t----------------------------------------------------"<<endl;
		  cout<<"\t\t[1--小学生],[2--中学生],[3--大学生]"<<endl;
		  cout<<"\t\t----------------------------------------------------"<<endl;
		  cout<<"\t\t----------------------------------------------------"<<endl;
		  cout<<"查询身份信息:"; cin>>choice;
		  cout<<endl;
		  cout<<"输入任意字符!继续……";
		  getch();
			  switch(choice)
			  {
				  case 1:{
				  bool stop=false;
  				  while(!stop)
			 	 {
			      system("cls");
				  Pmassage stu;
				  stu.ShowMenu();
				  int j;
				  cin>>j;
				  switch(j)
					{
					case 0:stu.Save();stop=true;break;exit(0);
					case 1:stu.AddItem();stu.Save();break;
					case 2:stu.Display();stu.Save();break;
					case 3:stu.Average();break;
					case 4:stu.Find();stu.Save();break;
					case 5:stu.RemoveItem();stu.Save();break;
					case 6:stu.ModifyItem();stu.Save();break;
					case 7:{cout<<"\t\t学生总人数:"<<stu.ListCount()<<endl;
						   cout<<"输入任意字符!继续……";getch();break;}
					default:cout<<"此功能正在开发"<<endl;cout<<"输入任意字符!继续……";getch();break;
			}
		 }
						 }
	  case 2:{
		  bool stop=false;
  		  while(!stop)
	 	 {
	      system("cls");
		  Hmassage stu;
		  stu.ShowMenu();
		  int j;
		  cin>>j;
		  switch(j)
			{
			  case 0:stu.Save();stop=true;break;exit(0);
			  case 1:stu.AddItem();stu.Save();break;
			  case 2:stu.Display();stu.Save();break;
			  case 3:stu.Average();break;
			  case 4:stu.Find();stu.Save();break;
			  case 5:stu.RemoveItem();stu.Save();break;
			  case 6:stu.ModifyItem();stu.Save();break;
			  case 7:{cout<<"\t\t学生总人数:"<<stu.ListCount()<<endl;
				  cout<<"输入任意字符!继续……";getch();break;}
			  default:cout<<"此功能正在开发"<<endl;cout<<"输入任意字符!继续……";getch();break;
			 }
		 }
			 }
	   case 3:{
		   bool stop=false;
  		  while(!stop)
	 	 {
	      system("cls");
		  Cmassage stu;
		  stu.ShowMenu();
		  int j;
		  cin>>j;
		  switch(j)
			{
			  case 0:stu.Save();stop=true;break;exit(0);
			  case 1:stu.AddItem();stu.Save();break;
			  case 2:stu.Display();stu.Save();break;
			  case 3:stu.Average();break;
			  case 4:stu.Find();stu.Save();break;
			  case 5:stu.RemoveItem();stu.Save();break;
			  case 6:stu.ModifyItem();stu.Save();break;
			  case 7:{cout<<"\t\t学生总人数:"<<stu.ListCount()<<endl;
				  cout<<"输入任意字符!继续……";getch();break;}
			  default:cout<<"此功能正在开发"<<endl;cout<<"输入任意字符!继续……";getch();break;
			 }
		 }
	     }
  }
	 }
  default:cout<<"此功能正在开发"<<endl;cout<<"输入任意字符!继续……";getch();break;
	 }
	 }
	 }
	 else
	 {
		 cout<<"登录信息错误,请重新确认信息!"<<endl;
		 --y;cout<<"输入任意字符!继续……";getch();system("cls");
	 }
	 if(y==0){exit(0);}
	 }
 return 0;
}
  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值