Student*searchnum(char*num)这样的成员函数得不到&stu[n]有效值 - 爱问答

(爱问答)

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()是一个系统转换函数.

下一篇:为什么solr增量更新修改过的数据在solr中显示不出来了

上一篇:计算机输入命令不执行,会弹出一堆字符怎么办,别人的也不是这样啊?

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?