求好心人帮忙用C++写一个《随机抽取座位》的代码 20
题目二1.课题名称:随即抽取座位2.功能描述上机考试时从学生信息文件中读取学生姓名,然后为所有学生抽取座位号。学生信息文件的内容如下:薛子刚李蔚龚波胡子航郭阳王子潇3.功...
题目二
1. 课题名称:随即抽取座位
2. 功能描述
上机考试时从学生信息文件中读取学生姓名,然后为所有学生抽取座位号。
学生信息文件的内容如下:
薛子刚
李蔚
龚波
胡子航
郭阳
王子潇
3. 功能要求及说明
输入学生信息源文件文件名
输入考场座位总数
为学生随即分配座位号
将学生及座位信息存储到新文件
结 展开
1. 课题名称:随即抽取座位
2. 功能描述
上机考试时从学生信息文件中读取学生姓名,然后为所有学生抽取座位号。
学生信息文件的内容如下:
薛子刚
李蔚
龚波
胡子航
郭阳
王子潇
3. 功能要求及说明
输入学生信息源文件文件名
输入考场座位总数
为学生随即分配座位号
将学生及座位信息存储到新文件
结 展开
展开全部
1 编译如果报错,请按照提示修改,可能头文件不一样什么,我不知道,因为我是linux环境。
2 运行时,会提示输入最大座位数,和读文件路径和写文件路径。读文件里写上学生名字,1行写一个。
#include <fstream>
#include <iostream>
#include <map>
#include <set>
#include <stdlib.h>
using namespace std;
class RandomFile
{
public:
RandomFile();
~RandomFile() {};
void readFile(void);
void writeFile(void);
private:
void init();
void doRandom(void);
bool randomMap(const string& name, int random);
private:
int m_totalSize;
string m_readPath;
string m_writePath;
map<int,string> m_nameMap;
set<string> m_nameSet;
};
RandomFile::RandomFile()
{
m_nameMap.clear();
m_nameSet.clear();
init();
}
void RandomFile::init()
{
// for seat-size
cout << "seat-total-size:";
cin >> m_totalSize;
// read-file-path
cout << "read-file-path:";
cin >> m_readPath;
// write-file-path
cout << "write-file-path:";
cin >> m_writePath;
}
void RandomFile::readFile(void)
{
printf("reading...\n");
string str;
fstream f;
f.open(m_readPath.c_str(), fstream::in);
while(f.peek() != EOF)
{
f >> str;
m_nameSet.insert(str);
}
f.close();
printf("name-total-size[%d]\n", (int)m_nameSet.size());
doRandom();
}
void RandomFile::writeFile(void)
{
printf("writing...\n");
fstream f;
f.open(m_writePath.c_str(), fstream::out|fstream::app);
map<int,string>::const_iterator itMaper = m_nameMap.begin();
for(;itMaper != m_nameMap.end(); itMaper++)
{
f << itMaper->first << " " << itMaper->second.c_str() << endl;
}
f << "====" << endl;
f.close();
}
void RandomFile::doRandom(void)
{
srand(time(0));
int random;
map<int,string> nameMap;
set<string>::iterator itSeter = m_nameSet.begin();
for(;itSeter != m_nameSet.end();++itSeter)
{
// for random
random = rand();
//printf("random[%d]\n",random);
const string& name = *itSeter;
if(!randomMap(name,random))
{
break;
}
}
}
bool RandomFile::randomMap(const string& name, int random)
{
int randStart,randPos;
randStart = random % m_totalSize;
randPos = randStart;
map<int,string>::iterator itMaper = m_nameMap.find(randPos);
while(itMaper != m_nameMap.end())
{
randPos = (randPos + 1) % m_totalSize;
if(randPos == randStart)
{
printf("map full!\n");
return false;
}
itMaper = m_nameMap.find(randPos);
}
//printf("save in pos[%d]\n",randPos);
m_nameMap.insert(pair<int,string>(randPos,name));
return true;
}
int main()
{
// file obj
RandomFile file;
// read in set-stl
file.readFile();
// write out
file.writeFile();
return 0;
}
2 运行时,会提示输入最大座位数,和读文件路径和写文件路径。读文件里写上学生名字,1行写一个。
#include <fstream>
#include <iostream>
#include <map>
#include <set>
#include <stdlib.h>
using namespace std;
class RandomFile
{
public:
RandomFile();
~RandomFile() {};
void readFile(void);
void writeFile(void);
private:
void init();
void doRandom(void);
bool randomMap(const string& name, int random);
private:
int m_totalSize;
string m_readPath;
string m_writePath;
map<int,string> m_nameMap;
set<string> m_nameSet;
};
RandomFile::RandomFile()
{
m_nameMap.clear();
m_nameSet.clear();
init();
}
void RandomFile::init()
{
// for seat-size
cout << "seat-total-size:";
cin >> m_totalSize;
// read-file-path
cout << "read-file-path:";
cin >> m_readPath;
// write-file-path
cout << "write-file-path:";
cin >> m_writePath;
}
void RandomFile::readFile(void)
{
printf("reading...\n");
string str;
fstream f;
f.open(m_readPath.c_str(), fstream::in);
while(f.peek() != EOF)
{
f >> str;
m_nameSet.insert(str);
}
f.close();
printf("name-total-size[%d]\n", (int)m_nameSet.size());
doRandom();
}
void RandomFile::writeFile(void)
{
printf("writing...\n");
fstream f;
f.open(m_writePath.c_str(), fstream::out|fstream::app);
map<int,string>::const_iterator itMaper = m_nameMap.begin();
for(;itMaper != m_nameMap.end(); itMaper++)
{
f << itMaper->first << " " << itMaper->second.c_str() << endl;
}
f << "====" << endl;
f.close();
}
void RandomFile::doRandom(void)
{
srand(time(0));
int random;
map<int,string> nameMap;
set<string>::iterator itSeter = m_nameSet.begin();
for(;itSeter != m_nameSet.end();++itSeter)
{
// for random
random = rand();
//printf("random[%d]\n",random);
const string& name = *itSeter;
if(!randomMap(name,random))
{
break;
}
}
}
bool RandomFile::randomMap(const string& name, int random)
{
int randStart,randPos;
randStart = random % m_totalSize;
randPos = randStart;
map<int,string>::iterator itMaper = m_nameMap.find(randPos);
while(itMaper != m_nameMap.end())
{
randPos = (randPos + 1) % m_totalSize;
if(randPos == randStart)
{
printf("map full!\n");
return false;
}
itMaper = m_nameMap.find(randPos);
}
//printf("save in pos[%d]\n",randPos);
m_nameMap.insert(pair<int,string>(randPos,name));
return true;
}
int main()
{
// file obj
RandomFile file;
// read in set-stl
file.readFile();
// write out
file.writeFile();
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询