Student*searchnum(char*num)这样的成员函数得不到&stu[n]有效值
#include<iostream.h>
#include<string.h>
#include<string>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<fstream.h>
#include<time.h>
#include<windows.h>
typedef long time_t;
class Student
{
private:char stunum[20];
char Class[20];
char name[20];
int Comnum;
time_t st;
time_t et;
int money;
double counttime;
int sign;
public:
Student(){}
void Upcom(char num[20],char Cla[20],char na[20],int comnum)
{
strcpy(stunum,num);
strcpy(Class,Cla);
strcpy(name,na);
Comnum=comnum;
st=gettime();
sign=1;
}
time_t gettime(){return time(NULL);}
void endtime(){et=gettime();}
char *getstunum(){return stunum;}
char *getclass(){return Class;}
char *getname(){return name;}
double countime(){return difftime(et,st);}
void delsign(){sign=0;}
int getsign(){return sign;}
int getcomnum(){return Comnum;}
int cost()
{
if(((int)countime())%3600==0)
return ((int)countime())/3600;
return ((int)countime())/3600+1;
}
int downcom()
{
endtime();
delsign();
display();
return Comnum;
}
void display()
{
cout<<"学号:"<<stunum<<endl<<"班级:"<<Class<<endl;
cout<<"姓名:"<<name<<endl<<"上机号:"<<Comnum<<endl;
cout<<"开始上机时间:"<<asctime(localtime(&st))<<endl;
cout<<"上机总时间:"<<countime()/3600<<"小时"<<endl;
cout<<"上机费用:"<<cost()<<"元"<<endl;
}
void display2()
{
cout<<endl<<endl<<"上机成功!"<<endl;
cout<<"学号:"<<stunum<<endl<<"班级:"<<Class<<endl;
cout<<"姓名:"<<name<<endl<<"上机号:"<<Comnum<<endl;
cout<<"开始上机时间:"<<asctime(localtime(&st))<<endl;
}
};
class StuData:public Student
{
private:Student stu[30];
int i;
public:
StuData()
{
i=0;
Student s;
ifstream fin("student.txt");
while(1)
{
fin.read((char*)&s,sizeof(s));
if(!fin) break;
stu[i]=s;
i++;
}
fin.close();
}
Student *searchnum(char *num)
{
int n=0;
while(n<=i)
{
if(!strcmp(stu[n].getstunum(),num)&&stu[n].getsign()==1)
{return &stu[n];}
return NULL;
n++;
}
}
Student *searchcla(char *Cla)
{
int n=0;
while(n<=i)
{
if(!strcmp(stu[n].getclass(),Cla)&&stu[n].getsign()==1)
{return &stu[n];}
return NULL;
n++;
}
}
Student *searchname(char *na)
{
int n=0;
while(n<=i)
{
if(!strcmp(stu[n].getname(),na)&&stu[n].getsign()==1)
{return &stu[n];}
return NULL;
n++;
}
}
void dispcla(char *Cla)
{
for(int m=0;m<=i;m++)
if(!strcmp(stu[m].getclass(),Cla)&&stu[m].getsign()==1)
{
stu[m].display();
cout<<endl;
}
}
void dispall()
{
int n=0;
while(n<=i)
{
if(stu[n].getsign()==1)
{
stu[n].display();
cout<<endl;
n++;
}
}
}
void Upcom(char num[20],char Cla[20],char na[20],int comnum)
{
i++;
stu[i].Upcom(num,Cla,na,comnum);
}
void downcom(char *num)
{
Student *p;
p=searchnum(num);
p->downcom();
}
void search()
{
int c;
char name[20];
char stunum[20];
char Class[20];
Student *s;
cout<<endl<<endl<<"机房学生查询"<<endl<<endl;
cout<<"1.按学号查询"<<endl;
cout<<"2.按班级查询"<<endl;
cout<<"3.按姓名查询"<<endl;
cout<<"4.所有学生信息查询"<<endl;
cout<<"请选择查询方式";
cin>>c;
if(c==1)
{
system("cls");
cout<<"请输入学号:";cin.getline(stunum,20);
s=searchnum(stunum);
if(s==NULL){cout<<"机房没有此人"<<endl;}
s->display();
}
if(c==2)
{
system("cls");
cout<<"请输入班级:";cin.getline(Class,20);
s=searchcla(Class);
if(s==NULL){cout<<"机房没有此人"<<endl;}
s->display();
}
if(c==3)
{
system("cls");
cout<<"请输入姓名:";cin.getline(name,20);
s=searchname(name);
if(s==NULL){cout<<"机房没有此人"<<endl;}
s->display();
}
if(c==4)
{
system("cls");
cout<<endl<<endl<<"机房所有学生信息如下"<<endl<<endl;
dispall();
}
else
{
system("cls");
cout<<"输入有误,请重新输入:"<<endl;
}
}
~StuData()
{
ofstream fout("student.txt");
for(int n=0;n<=i;n++)
if(stu[n].getsign()==1)
fout.write((char*)&stu[n],sizeof(stu[n]));
fout.close();
}
};
那个new是一个运算符,系统编译的时候用它生成struct student类型的stu数组,元素有N个.gets()是获取一个字符串,后面的是把这个字符串转换成浮点数,atof()是一个系统转换函数.