#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <stdlib.h>
#include <conio.h>
#include <stdio.h>
#include <process.h>
using namespace std;
class Date
{
private:
int y,m,d;
public:
Date(int yy=1,int mm=1,int dd=1):y(yy),m(mm),d(dd){}
void Print()
{
  cout<<y<<'/'<<m<<'/'<<d<<endl;
}
};
class Volunteer
{
private:
string Name;
string ID;
string Major;
string Blood_Type;
int class_NO;
int Age;
Date L_Date;
static int Count;
public:
Volunteer(string s1="",string s2="",string s3="",string s4="",int a1=0,int a2=0,Date x=0):L_Date(x)
{
  Name=s1;ID=s2;Major=s3;Blood_Type=s4;class_NO=a1;Age=a2;
}
string Get_Name()     {return Name;}
string Get_ID()       {return ID;}
string Get_Major()    {return Major;}
static int Set_Count(){return Count++;}
static int Get_Count(){return Count;}
Volunteer *pNext;
void Print2()
{
cout<<setw(8)<<Name
<<setw(9)<<ID
<<setw(20)<<Major
<<setw(8)<<class_NO
<<setw(8)<<Blood_Type
<<setw(8)<<Age;
    L_Date.Print();
}
};
int Volunteer::Count=0;void SearchByName(Volunteer *pHead)
{
 system("cls");
 Volunteer *p;
 string s;
 cout<<"请输入要查询的姓名"<<endl;
 cin>>s;
 system("cls");
 cout<<setw(8)<<"姓名"
 <<setw(9)<<"学号"
 <<setw(20)<<"专业"
 <<setw(8)<<"班级"
 <<setw(8)<<"血型"
 <<setw(8)<<"年龄"
 <<setw(18)<<"离校日期"<<endl;
 for(p=pHead->pNext;p;p=p->pNext)  if(p->Get_Name()==s) p->Print2();getch(); 
}void SearchByID(Volunteer *pHead)
{
 system("cls");
 Volunteer *p;
 string s;
 cout<<"请输入要查询的学号"<<endl;
 cin>>s;
 system("cls");
 cout<<setw(8)<<"姓名"
 <<setw(9)<<"学号"
 <<setw(20)<<"专业"
 <<setw(8)<<"班级"
 <<setw(8)<<"血型"
 <<setw(8)<<"年龄"
 <<setw(18)<<"离校日期"<<endl;
 for(p=pHead->pNext;p;p=p->pNext)  if(p->Get_ID()==s) p->Print2();getch(); 
}void SearchByMajor(Volunteer *pHead)
{
 Volunteer *p;
 system("cls");
 string s;
 cout<<"请输入要查询的专业"<<endl;
 cin>>s;
 system("cls");
 cout<<setw(8)<<"姓名"
 <<setw(9)<<"学号"
 <<setw(20)<<"专业"
 <<setw(8)<<"班级"
 <<setw(8)<<"血型"
 <<setw(8)<<"年龄"
 <<setw(18)<<"离校日期"<<endl;
 for(p=pHead->pNext;p;p=p->pNext)  if(p->Get_Major()==s) p->Print2();getch();
}void Inquire(Volunteer *pHead)
{
  system("cls");
  int k;
  system("cls");
  cout<<"1:按姓名查询"<<endl;
  cout<<"2:按学号查询"<<endl;
  cout<<"3:按专业查询"<<endl;
  cout<<"0:返回上级菜单"<<endl;
  cout<<"Esc:退出"<<endl;
  k=getch();
  switch(k)
  {
  case 49:SearchByName(pHead);break;     
  case 50:SearchByID(pHead);break;
  case 51:SearchByMajor(pHead);break;
  case 48:return;
  case 27:exit(0);
  } 
}Volunteer *Add(Volunteer *pHead)
{
   system("cls");
   string s[4];
   int a[5];
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者姓名:";
   cin>>s[0];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者学号:";
   cin>>s[1];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者专业:";
   cin>>s[2];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者血型(型):";
   cin>>s[3];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者班级:";
   cin>>a[0];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者年龄(岁):";
   cin>>a[1];cout<<endl;
   cout<<setiosflags(ios::left)<<setw(25)<<"请输入志愿者离校日期(年/月/日):";
   cin>>a[2]>>a[3]>>a[4];cout<<endl;
   Volunteer *p=new Volunteer(s[0],s[1],s[2],s[3],a[0],a[1],Date(a[2],a[3],a[4])),*p1;
   p1=pHead->pNext;
   p->pNext=p1;
   pHead->pNext=p;
   Volunteer::Set_Count();
   return pHead;
}void Save(Volunteer *pHead)
{
  Volunteer *p;
  ofstream MyFile("wang.txt",ios::binary);
  for(p=pHead->pNext;p;p=p->pNext)  
  {
    MyFile.write((char*)p,sizeof(Volunteer));
  }
  MyFile.close();
  system("cls");
  cout<<"已保存";getch();
}//Volunteer *Deletevoid Show(Volunteer *pHead)

   Volunteer *p;
   system("cls");
   cout<<Volunteer::Get_Count()<<endl;
   for(p=pHead->pNext;p;p=p->pNext)  p->Print2();
   getch();
}void main()
{
  Volunteer *pHead=new Volunteer,*p,*p1;
  pHead->pNext=NULL;
  ifstream MyFile("wang.txt",ios::binary);
  while(!MyFile.eof())
  {
  p=new Volunteer;
    MyFile.read((char*)p,sizeof(Volunteer));
//if(MyFile.eof()) break;
    p1=pHead->pNext;
p1=p->pNext;
    pHead->pNext=p;
Volunteer::Set_Count();
  } 
  MyFile.close();
  int k;
  while(1)
  {
  system("cls");
  cout<<"西南交大抗灾救灾志愿者管理系统"<<endl;
  cout<<"1:查询志愿者信息"<<endl;
  cout<<"2:添加志愿者信息"<<endl;
  cout<<"3:保存志愿者信息"<<endl;
  cout<<"4:删除志愿者信息"<<endl;
  cout<<"5:显示总人数"<<endl;
  cout<<"Esc:退出"<<endl;
  k=getch();
  switch(k)
  {
  case 49:Inquire(pHead);break;
  case 50:pHead=Add(pHead);break;
  case 51:Save(pHead);break;
//  case 52:pHead=Delete(pHead);break;
  case 53:Show(pHead);break;
  case 27:exit(0);break;
  }
  }
}