目录
题目要求:
代码实现:
源.cpp:
Client.h:
Client.cpp:
题目要求:
模拟从各种客户端访问一个网站
1)随机生成ip地址
2)记录不同ip地址的数量
ip地址分类方式:
Class A: 0.0.0.0 – 127.255.255.255 Class B: 128.0.0.0 – 191.255.255.255 Class C: 192.0.0.0 – 223.255.255.255 Class D: 224.0.0.0 – 239.255.255.255 Class E: 240.0.0.0 – 247.255.255.255代码实现:
源.cpp:
#include
#include
#include
#include
#include
#include"Client.h"
using namespace std;
int cnt[5];
void getData(fstream &x)//随机生成一组数据
{
int a, b, c, d, f, g, h, i, j;
a = rand() % 256;
b = rand() % 256;
c = rand() % 256;
d = rand() % 256;
f = rand() % 12 + 1;
g = rand() % 30 + 1;
h = rand() % 24;
i = rand() % 60;
j = rand() % 60;
Client clientData(a, b, c, d, 2022, f, g, h, i, j);
x.write(reinterpret_cast(&clientData), sizeof(Client));
clientData.printAddress();
cout << " ";
clientData.printDate();
cout << " ";
clientData.printTime();
cout << endl;
}
int main()
{
fstream outData("data.dat", ios::out | ios::binary);//创建一个fstream对象,打开一个文件以二进制输出
if (!outData)
{
cerr << "File could not be oppened" << endl;
exit(EXIT_FAILURE);
}
srand(0);
for (int i = 0; i < 100; i++)
{
getData(outData);
}
outData.close();//在不使用文件时立刻关闭文件
ifstream inData("data.dat", ios::in | ios::binary);
Client clientData;
if (!inData)
{
cerr << "File could not be oppened" << endl;
exit(EXIT_FAILURE);
}
inData.read(reinterpret_cast(&clientData), sizeof(Client));//以二进制形式读取文件
while (inData && !inData.eof())//用ios函数判断是否达到文件末尾
{
if (clientData.fAddress() >= 0 && clientData.fAddress() < 128) cnt[0]++;
else if (clientData.fAddress() >= 128 && clientData.fAddress() < 192) cnt[1]++;
else if (clientData.fAddress() >= 192 && clientData.fAddress() < 224) cnt[2]++;
else if (clientData.fAddress() >= 224 && clientData.fAddress() < 247) cnt[3]++;
else if (clientData.fAddress() >= 247 && clientData.fAddress() < 256) cnt[4]++;
inData.read(reinterpret_cast(&clientData), sizeof(Client));//以二进制形式读取文件
}
inData.close();
cout << "nNumber of class A addresses: " << cnt[0] << endl
<< "Number of class B addresses: " << cnt[1] << endl
<< "Number of class C addresses: " << cnt[2] << endl
<< "Number of class D addresses: " << cnt[3] << endl
<< "Number of class E addresses: " << cnt[4] << endl;
system("pause");
return 0;
}
#include#include #include #include #include #include"Client.h" using namespace std; int cnt[5]; void getData(fstream &x)//随机生成一组数据 { int a, b, c, d, f, g, h, i, j; a = rand() % 256; b = rand() % 256; c = rand() % 256; d = rand() % 256; f = rand() % 12 + 1; g = rand() % 30 + 1; h = rand() % 24; i = rand() % 60; j = rand() % 60; Client clientData(a, b, c, d, 2022, f, g, h, i, j); x.write(reinterpret_cast (&clientData), sizeof(Client)); clientData.printAddress(); cout << " "; clientData.printDate(); cout << " "; clientData.printTime(); cout << endl; } int main() { fstream outData("data.dat", ios::out | ios::binary);//创建一个fstream对象,打开一个文件以二进制输出 if (!outData) { cerr << "File could not be oppened" << endl; exit(EXIT_FAILURE); } srand(0); for (int i = 0; i < 100; i++) { getData(outData); } outData.close();//在不使用文件时立刻关闭文件 ifstream inData("data.dat", ios::in | ios::binary); Client clientData; if (!inData) { cerr << "File could not be oppened" << endl; exit(EXIT_FAILURE); } inData.read(reinterpret_cast (&clientData), sizeof(Client));//以二进制形式读取文件 while (inData && !inData.eof())//用ios函数判断是否达到文件末尾 { if (clientData.fAddress() >= 0 && clientData.fAddress() < 128) cnt[0]++; else if (clientData.fAddress() >= 128 && clientData.fAddress() < 192) cnt[1]++; else if (clientData.fAddress() >= 192 && clientData.fAddress() < 224) cnt[2]++; else if (clientData.fAddress() >= 224 && clientData.fAddress() < 247) cnt[3]++; else if (clientData.fAddress() >= 247 && clientData.fAddress() < 256) cnt[4]++; inData.read(reinterpret_cast (&clientData), sizeof(Client));//以二进制形式读取文件 } inData.close(); cout << "nNumber of class A addresses: " << cnt[0] << endl << "Number of class B addresses: " << cnt[1] << endl << "Number of class C addresses: " << cnt[2] << endl << "Number of class D addresses: " << cnt[3] << endl << "Number of class E addresses: " << cnt[4] << endl; system("pause"); return 0; }
ps :时间戳我随便设定的,可以自己改改
Client.h:
#pragma once
class Client
{
public:
Client(int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0, int = 0);
void setAddress(int, int, int, int);
void setyear(int);
void setmonth(int);
void setday(int);
void sethour(int);
void setminute(int);
void setsecond(int);
void printAddress();
void printDate();
void printTime();
int fAddress();
private:
int address[4];
int year, month, day, hour, minute, second;
};
Client.cpp:
#include "Client.h"
#include
#include
using namespace std;
Client::Client(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j)
{
setAddress(a, b, c, d);
setyear(e);
setmonth(f);
setday(g);
sethour(h);
setminute(i);
setsecond(j);
}
void Client::setAddress(int a, int b, int c, int d)
{
address[0] = a;
address[1] = b;
address[2] = c;
address[3] = d;
}
void Client::setyear(int x)
{
year = x;
}
void Client::setmonth(int x)
{
month = x;
}
void Client::setday(int x)
{
day = x;
}
void Client::sethour(int x)
{
hour = x;
}
void Client::setminute(int x)
{
minute = x;
}
void Client::setsecond(int x)
{
second = x;
}
void Client::printAddress()
{
cout << address[0] << "." << address[1] << "." << address[2] << "." << address[3];
}
void Client::printDate()
{
cout << year << "-" << setw(2) << setfill('0') << month << "-" << setw(2) << setfill('0') << day;//如果个位小于十需要补零
}
void Client::printTime()
{
cout << setw(2) << setfill('0') <
#include "Client.h" #include#include using namespace std; Client::Client(int a, int b, int c, int d, int e, int f, int g, int h, int i, int j) { setAddress(a, b, c, d); setyear(e); setmonth(f); setday(g); sethour(h); setminute(i); setsecond(j); } void Client::setAddress(int a, int b, int c, int d) { address[0] = a; address[1] = b; address[2] = c; address[3] = d; } void Client::setyear(int x) { year = x; } void Client::setmonth(int x) { month = x; } void Client::setday(int x) { day = x; } void Client::sethour(int x) { hour = x; } void Client::setminute(int x) { minute = x; } void Client::setsecond(int x) { second = x; } void Client::printAddress() { cout << address[0] << "." << address[1] << "." << address[2] << "." << address[3]; } void Client::printDate() { cout << year << "-" << setw(2) << setfill('0') << month << "-" << setw(2) << setfill('0') << day;//如果个位小于十需要补零 } void Client::printTime() { cout << setw(2) << setfill('0') <



