January 23th Friday 2009 (一月 二十三日 金曜日)
来源:互联网 发布:淘宝上的点痣笔有用吗 编辑:程序博客网 时间:2024/04/30 14:11
This evening I am about to come back to Wuhan. I have to put up with no sleeping this night. Sometimes I hate a mass of people in this holiday. Where are they coming from?
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
#include <time.h>
using namespace std;
#define STR_DATA_MAX 128
class Record {
private:
int rec_no;
int data_size;
char data[STR_DATA_MAX];
public:
Record() {
rec_no = -1;
data_size = 0;
memset(data, 0, sizeof(data));
}
Record(char *strData) {
rec_no = -1;
setDataAsString(strData, strlen(strData));
}
~Record(){}
int getRecNo() { return rec_no; }
void setRecNo(int n) { rec_no = n; }
int getDataSize() { return data_size; }
void setDataSize(int n) { data_size = n; }
char * getDataAsString() { return data; }
void setDataAsString(char *strData, int data_len) {
data_size = data_len;
strncpy(data, strData, data_size);
}
};
class Index {
private:
int rec_no;
int pos;
public:
Index() {
rec_no = -1;
pos = -1;
}
int getRecNo() { return rec_no; }
void setRecNo(int n) { rec_no = n; }
int getPos() { return pos; }
void setPos(int p) { pos = p; }
};
char getRandChar(){
static char str[] = "abcdefghijklmnopqrstuvwxyz";
int j=1+(int)(26.0*rand()/(RAND_MAX+1.0));
if (j > 25) j = 25;
return str[j];
};
int getIndexFileName(char *name, char * index_name) {
char *p = NULL;
char name_len = 0;
memset(index_name, 0, STR_DATA_MAX);
p = strrchr(name, '.');
if (!p) return 0;
p++;
name_len = p - &name[0];
strncpy(index_name, name, name_len);
strncpy(&index_name[name_len], "idx", 3);
return 1;
}
#define RECORD_NUM 100
class DB {
private:
Record record_set[RECORD_NUM];
Index index_set[RECORD_NUM];
ifstream infile;
int record_num;
public:
DB() {
record_num = 0;
srand((int)time(0));
for (int i = 0; i < RECORD_NUM; i++)
record_set[i].setRecNo(-1);
}
~DB() {}
void init() {
char buf[STR_DATA_MAX];
for (int i = 0; i < RECORD_NUM; i++) {
memset(buf, 0, sizeof(buf));
//make a string by rand().
for (int n = 0; n < STR_DATA_MAX - 1; n++)
buf[n] = getRandChar();
record_set[i].setDataAsString(buf, strlen(buf));
}
}
void displayRecordSet() {
for (int i = 0; i < RECORD_NUM; i++){
cout<<i<<": "<<record_set[i].getDataAsString()<<endl;
}
}
void showRecord(int rec_no) {
char *cp = NULL;
if (rec_no >= RECORD_NUM && rec_no < 0) return;
for (int i = 0; i < RECORD_NUM; i++){
if (rec_no == record_set[i].getRecNo())
break;
}
if (i == RECORD_NUM){
i = loadRecord(rec_no);
if (i == -1) return;
}
cp = record_set[i].getDataAsString();
cout<<rec_no<<": "<<cp<<endl;
}
void writeToFile(char *filename) {
char *cp = NULL;
char index_name[STR_DATA_MAX];
//write data
ofstream of(filename, ios::binary | ios::out);
for (int i = 0; i < RECORD_NUM; i++) {
index_set[i].setRecNo(i);
index_set[i].setPos(0);
int pos = of.tellp();
index_set[i].setPos(pos);
record_set[i].setRecNo(i);
int data_size = record_set[i].getDataSize();
cp = record_set[i].getDataAsString();
of.write((char *)&data_size, sizeof(int));
of.write(cp, data_size);
}
//write index
getIndexFileName(filename, index_name);
ofstream oidx(index_name, ios::binary | ios::out);
for (int j = 0; j < RECORD_NUM; j++) {
int r = index_set[j].getRecNo();
int p = index_set[j].getPos();
oidx.write((char *)&r, sizeof(int));
oidx.write((char *)&p, sizeof(int));
}
}
void open(char* db_name){
char index_name[STR_DATA_MAX];
infile.open(db_name);
//load index
getIndexFileName(db_name, index_name);
ifstream indexfile(index_name, ios::binary | ios::in);
for (int i = 0; i < RECORD_NUM; i++) {
int rec_no = 0;
int pos = 0;
indexfile.read((char *)&rec_no, sizeof(int));
indexfile.read((char *)&pos, sizeof(int));
index_set[i].setRecNo(rec_no);
index_set[i].setPos(pos);
}
}
void close(){
infile.close();
}
int loadRecord(int rec_no) {
int len = 0;
char buf[STR_DATA_MAX];
memset(buf, 0, sizeof(buf));
record_set[record_num].setRecNo(rec_no);
infile.seekg(index_set[record_num].getPos(), ios::beg);
infile.read((char *)&len, sizeof(int));
infile.read(buf, len);
record_set[record_num].setDataSize(len);
record_set[record_num].setDataAsString(buf, len);
record_num++;
return record_num - 1;
}
};
int main() {
DB db;
//db.init();
//db.displayRecordSet();
//db.writeToFile("./test.db");
db.open("./test.db");
db.showRecord(99);
db.close();
return 0;
}
- January 23th Friday 2009 (一月 二十三日 金曜日)
- 2008 January 23th Wednesday (一月 二十三日 水曜日)
- 2008 January 25th Friday (一月 二十五日 金曜日)
- January 9th Friday 2009 (一月 九日 金曜日)
- January 13th Tuesday 2009 (一月 十三日 火曜日)
- March 23th Friday (三月 二十三日 金曜日)
- 2008 May 23th Friday (五月 二十三日 金曜日)
- 2008 January 4th Friday (一月 四日 金曜日)
- 2008 January 18th Friday (一月 十八日 金曜日)
- February 13th Friday 2009 (二月 十三日 金曜日)
- 2009 March 13th Friday (三月 十三日 金曜日)
- January 21th Wednesday 2009 (一月 二十一日 水曜日)
- January 22th Thursday 2009 (一月 二十二日 木曜日)
- Aprial 13th Friday (四月 十三日 金曜日)
- July 13th Friday (七月 十三日 金曜日)
- Februray 9th Friday (一月 九日 金曜日)
- 2008 January 22th Tuesday (一月 二十二日 火曜日)
- 2008 January 24th Thursday (一月 二十四日 木曜日)
- 转:XP开发模式
- ejb应用
- 莫之许:盗版将成中国后发劣势
- C# static的全部用法收集整理
- Using JQuery's ajax to call webservice and ashx handler in asp.net
- January 23th Friday 2009 (一月 二十三日 金曜日)
- 《the TRUMAN show》 观后感:不寒而栗
- Update整个数据库所有表某字段的值
- 新浪十年路 新浪的触角 新浪成年
- 如何判断操作系统所在磁盘
- 2008奢华品牌网上表现TOP100 2008奢华品牌网上表现分类排行榜—蓝调 2008奢华品牌网上表现分类排行榜—红调
- 【设计模式一】Decorator模式
- 设计模式之六——组合模式
- JNDI(Java 命名和目录接口)(一)