C++随机点名程序

#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
using namespace std;
class Class;
class Student{
string Name;//学生姓名
string ID;//学生学号
string Number;//学生序号
public:
string GetName();
string GetNumber();
string GetID();
friend class Class;
};
string Student::GetID()
{
return ID;
}
string Student::GetName()
{
return Name;
}
string Student::GetNumber()
{
return Number;
}
class System
{
public:
void menu();
};
class Class{
Student *student;
int number;
public:
Class(string);
~Class(){delete []student;};
int GetNumber();
friend void System::menu();
};

void System::menu()
{
string temp;
cout<<"请输入学生名单文件(*.txt)的全路径(输入exit为退出本程序):";
cin>>temp;
if(temp=="exit")exit(0);
Class cls(temp);
char tmp,tp;
loop: cout<<"Enter 1 or 0<1抽取,0退出,其它无效>:";
cin>>tmp;
if(tmp=='1')
{
int NUM;//被选中学生的号码
time_t NowTime;
again: NowTime=time(NULL);//利用系统时间
NowTime=NowTime%cls.GetNumber();//用取余的方式求出NUM
NUM=NowTime;
cout<<"被抽中的是:"<<endl;
cout<<"学生序号:"<<cls.student[NUM].GetNumber()<<endl;
cout<<"学生学号:"<<cls.student[NUM].GetID()<<endl;
cout<<"学生姓名:"<<cls.student[NUM].GetName()<<endl;
againchoose: cout<<"Enter 1 or 0<1为继续抽取,0为退出,其它无效>:";
cin>>tp;
if(tp=='1')goto again;
else if(tp=='0')exit(0);
else goto againchoose;
}
else if(tmp=='0')exit(0);
else goto loop;
}
Class::Class(string temp)
{
string tmp;
number=0;
char *p=new char[100];
while(1)
{
fstream File;
File.open(temp.c_str());
if(File.is_open())
{
cout<<"文件打开成功......"<<endl;
while(!File.eof()){File.getline(p,100);number++;}
cout<<number<<endl;
student=new Student[number];
File.seekg(0, ios_base::beg);
for(int i=0;i<number;i++){
File>>tmp;
student[i].Number=tmp;
File>>tmp;
student[i].ID=tmp;
File>>tmp;
student[i].Name=tmp;
}
File.close();
break;
}
else
{
cout<<"Warnning:Cannot open this file!"<<endl;
File.close();

}
}
cout<<"已经初始化....."<<endl;
cout<<"该班学生人数为:"<<number<<"人"<<endl;
}
int Class::GetNumber()
{
return number;
}
int main()
{
System sys;
sys.menu();
return 0;
}

txt文件内容为
1 2 ss
2 4 aa

第1个回答  推荐于2017-12-15
//当文件流为eof状态时需先clear再seek
#include <iostream>
#include <string>
#include <fstream>
#include <ctime>
using namespace std;
class Class;
class Student{
string Name;//学生姓名
string ID;//学生学号
string Number;//学生序号
public:
string GetName();
string GetNumber();
string GetID();
friend class Class;
};
string Student::GetID()
{
return ID;
}
string Student::GetName()
{
return Name;
}
string Student::GetNumber()
{
return Number;
}
class System
{
public:
void menu();
};
class Class{
Student *student;
int number;
public:
Class(string);
~Class(){delete []student;};
int GetNumber();
friend void System::menu();
};

void System::menu()
{
string temp;
cout<<"请输入学生名单文件(*.txt)的全路径(输入exit为退出本程序):";
cin>>temp;
if(temp=="exit")exit(0);
Class cls(temp);
char tmp,tp;
loop: cout<<"Enter 1 or 0<1抽取,0退出,其它无效>:";
cin>>tmp;
if(tmp=='1')
{
int NUM;//被选中学生的号码
time_t NowTime;
again: NowTime=time(NULL);//利用系统时间
NowTime=NowTime%cls.GetNumber();//用取余的方式求出NUM
NUM=NowTime;
cout<<"被抽中的是:"<<endl;
cout<<"学生序号:"<<cls.student[NUM].GetNumber()<<endl;
cout<<"学生学号:"<<cls.student[NUM].GetID()<<endl;
cout<<"学生姓名:"<<cls.student[NUM].GetName()<<endl;
againchoose: cout<<"Enter 1 or 0<1为继续抽取,0为退出,其它无效>:";
cin>>tp;
if(tp=='1')goto again;
else if(tp=='0')exit(0);
else goto againchoose;
}
else if(tmp=='0')exit(0);
else goto loop;
}
Class::Class(string temp)
{
string tmp;
number=0;
char *p=new char[100];
while(1)
{
ifstream File;
File.open(temp.c_str());
if(File.is_open())
{
cout<<"文件打开成功......"<<endl;
while(!File.eof()){File.getline(p,100);number++;}
cout<<number<<endl;
student=new Student[number];
File.clear(); // must clear when the stream is in the eof statue!!!
File.seekg(0);
cout << p << endl;
for(int i=0;i<number;i++){
File>>tmp;
student[i].Number=tmp;
File>>tmp;
student[i].ID=tmp;
File>>tmp;
student[i].Name=tmp;
}
File.close();
break;
}
else
{
cout<< "Warnning:Cannot open this file!" <<endl;
File.close();

}
}
cout<<"已经初始化....."<<endl;
cout<<"该班学生人数为:"<<number<<"人"<<endl;
}
int Class::GetNumber()
{
return number;
}
int main()
{
System sys;
sys.menu();
return 0;
}本回答被提问者采纳
第2个回答  2012-05-10
问题是什么?

求C++的随机点名程序。。。要有随机点名和顺序点名
2、使用fopen读取学生名单到一个char*的缓冲区, 使用stl string来处理这段缓冲区, 并使用stl vector<SStudentInfo*> 存储学生信息 struct SStudentInfo { };vector<SStudentInfo*> m_vInfo;3、使用C语言随机函数取得随机数,srand((unsigned)time(0)); int rid = rand()%m_vInfo.size() - ...

C++随机点名程序
string temp;cout<<"请输入学生名单文件(*.txt)的全路径(输入exit为退出本程序):";cin>>temp;if(temp=="exit")exit(0);Class cls(temp);char tmp,tp;loop: cout<<"Enter 1 or 0<1抽取,0退出,其它无效>:";cin>>tmp;if(tmp=='1'){ int NUM;\/\/被选中学生的号码 time_t Now...

C++实现随机点名
ADT 学生{学号;姓名;性别;};ADT 班级{学生们;学生人数;班级标识;\/\/比如 2014 水产 28班};我们想要的东西基本上都有了。接下来我们看怎么去实现。随机数,用标准库的就可以了。随机数与学生数取模后加1就可以随机的标识第几个学生,于是,我们的过程就好了。最后,程序是应该有输入和输出的。学生...

...有2中点名方式。一种是全点,一种是随机点名。求C
目测不会有人帮你写了,学软件的自己努力吧。想清结构和函数,不会的百度,写一次以后就都会了。我是来混五十个字的

高手速度来啦。。高分跪求!!做完了再加200分!说到做到。
一个高手没有几个小时都弄不下来。要是我给你做,估计要几天,好多技术细节我也不太会啊。建议你到图书馆借一本《VisualC++数据库编程实例》上面的例题和你的题目一样的不再少数。那对着书做起来,几个小时也就完了!!是吧!!万事开头难,你努力吧!!!相信你一定行!!!

西北工业大学有哪些教授的课是必须要去蹭的?
首先说的是航模,西工大有门选修课大概是叫航模制作,航空模型简单来说就是用木料,碳纤维,泡沫等各种材料做的,安装了电子设备,遥控的,可以飞上天的各种小飞机。西工大还有个航模队,也很出名。这个选修课做的飞机相较于航模队的比较简单,毕竟航模队是要代表学校参加全国比赛的,选修课大概就是起...

中山大学大一学生要选公选课吗?
我上的时候教的是用MFC做一些小程序,基本上是画图程序. 老师上课可能讲得不会十分详细,但引导性很强.作业适合各个层次的同学.但你不去听课的话估计也不会做(高 手例外).值得一提的是老师人很好,很照顾基础不太好的同学.上课极少点名. 基本上每节课都去上的话就可以学到不错的东西.考试完全不用担心.(我...

怎么在PPT里面插入一个随机数生成器
2009-05-06 随机数生成器 51 2013-04-06 求一个能产生随机数的ppt 12 2009-02-13 随机数函数如何使用 25 2012-03-23 C++产生随机数的 384 2011-12-27 java随机数 81 更多关于随机数的知识 > 网友都在找: PPT产生随机数 PPT随机点名 简单随机数生成器 PPT命令按钮 ...

电子信息工程是干什么的~~以后做什么工作~~
一般向电器类发展~~或者高科技产品!以后可以做程序员51单片机编程。。。设计OR画PCB板~~或者以后出去可以做一些仪器。。。机器部件的销售!!如果有志向的话。。可以考研。。。以后做科研都行~我们这个专业很广。。。还可以到工厂里面去修机器!修电器。。。给人焊电路板~~ 本回答被提问者采纳...

求大神用C++编写课堂随机点名程序,是C++。是用班级名单中的序号进行随...
这样吧,主函数写一行吧.做一个类class APP{ public APP(){ \/\/多余的都写这里...我知道有些人喜欢只写一个main函数,把它当你的main来用就可以了 } } int main(){ APP app;}

相似回答