#include <iostream>
#include <string.h>
using namespace std;
#define MAX 100
class CStudent
{private: char *name;
bool sex;
CDate date;
public: static int num;
CStudent(); void InputData();
friend void Sort();
friend void FindName();
friend void Statistic();
friend void Display();
int CStudent::num=0;
CStudent::CStudent() {}
void CStudent::InputData()
{
int p; char s[41];
cout<<
"请输入学生信息(NO."
<<num<<
"):\n"
;
cout<<
"姓名:"
; cin>>s;
name=
new
char[strlen(s)+1];
strcpy(name,s);
cout<<
"性别(1-男,0-女):"
;
cin>>p;
if
(p) sex=
true
;
else
sex=
false
; cin>>date;
cout<<endl;
}
void Sort()
{
int i,j,p,num; char *tn; bool ts;
CDate td;
num=CStudent::num;
for
(i=1; i<num; i++)
{
p=i;
for
(j=i+1; j<=num; j++)
if
(stu[j].date<stu[p].date) p=j;
if
(p==i)
continue
;
tn=stu[i].name;
stu[i].name=stu[p].name;
stu[p].name=tn;
ts=stu[i].sex;
stu[i].sex=stu[p].sex;
stu[p].sex=ts;
td=stu[i].date;
stu[i].date=stu[p].date;
stu[p].date=td;
}
}
void FindName()
{
char name[41];
int i,num;
cout<<
"请输入姓名:"
;
cin>>name;
num=CStudent::num;
for
(i=1; i<=num; i++)
if
(strcmp(stu[i].name,name)==0)
break
;
if
(i>num)
{
cout<<
"查无此人!"
<<endl<<endl;
return
;
}
cout<<
"姓名:"
<<stu[i].name<<endl;
cout<<
"性别:"
;
if
(stu[i].sex)
cout<<
"男"
<<endl;
else
cout<<
"女"
<<endl;
cout<<
"生日:"
<<stu[i].date<<endl;
cout<<endl;
}
void Statistic()
{
int i,num,s1,s0;
num=CStudent::num;
s1=0;
s0=0;
for
(i=1; i<=num; i++)
if
(stu[i].sex==1)s1++;
else
s0++;
cout<<
"男生人数:"
<<s1<<endl;
cout<<
"女生人数:"
<<s0<<endl;
cout<<endl;
}
void Display()
{
int i,num;
num=CStudent::num;
for
(i=1; i<=num; i++)
{
cout<<stu[i].name<<
"\t"
;
if
(stu[i].sex)
cout<<
"男"
;
else
cout<<
"女"
;
cout<<
"\t"
<<stu[i].date<<endl;
}
cout<<endl;
}
int main1()
{ char *menu[]= {
""
,
"输入信息"
,
"排序"
,
"按姓名查询"
,
"按性别统计"
,
"显示全部信息"
,
"退出"
};
int i,p; bool end;
end=
false
;
while
(!end)
{
for
(i=1; i<7; i++)
cout<<i<<
" "
<<menu[i]<<endl;
cin>>p;
switch
(p)
{
case
1:
CStudent::num++;
stu[CStudent::num].InputData();
break
;
case
2:
Sort();
break
;
case
3:
FindName();
break
;
case
4:
Statistic();
break
;
case
5:
Display();
break
;
case
6:
end=
true
;
break
;
}
}
return
0;
}