关于 oracle 和 c++ 的问题

jj_flair 2009-03-24 07:44:01

试题1:使用ORACLE编写一个完整的解决方案。已知数据库中有表A(ID NUMBER(18),SEQ NUMBER(18),START_DATE DATE,MSG VARCHAR(256)),B(ID NUMBER(18),SEQ NUMBER(18),START_DATE DATE,MSG VARCHAR(256)).请在数据库中建表,表名为(T_学员全名拼音_A,T_学员全名拼音_B),同时往表A中插入10万条数据,表B中插入10万条数据,其中表A中数据与表B中数据有重复数据不少1000条记录,重复的标志为ID、SEQ值相等。使用SQL语句查出A表重复记录值,然后把B表重复的记录删除掉,然后使用统计语句统计出A表每天的数据量。
要求:
1、解决全过程的SQL语句和代码按照执行顺序全部保留。
2、数据插入采用C++、OCCI实现,使用批量插入方式。
3、记录查找重复记录所用时间,使用ORACLE命令实现。
4、start_date按照10万/31的比率分配。时间指定为2008年/3月/1-31日。
5、查找重复记录和统计要求速度最快,如果没有性能优化,则此题扣减1/3分数。
6、ID、SEQ数值填写要求使用ORACLE的序列号功能。
7、表的主键为ID.

试题2:使用C++实现数据存储类。数据存储中有多种有名字数据类,每类数据有多条记录,每类数据的每条记录的大小均一致,单条记录的长度为255*32字节,每类数据可以存放的条数为1024条,一共可以支持16类数据,实现增加单条记录、删除某类数据的某条记录、清除某类数据、查询某类数据的指定某条数据功能。
已知:
1、使用MALLOC分配255*16字节的空间速度比较慢。
2、99%情况下每类数据每次使用时不会超过16条记录。
3、每类数据都有一个唯一的名字。
要求:
1、增加、删除和查询的函数格式至少要包括(数据类名)。
2、要求函数执行速度最快、占用内存空间最小。
3、数据类名存放采用MAP容器实现。
4、不得出现任何数字或者字符串常量,采用宏定义、enum方式解决。
5、所有命名规则按照某个熟悉的规则命名,比如匈牙利命名法。
6、每个变量和函数必须有相应的注释,注释格式采用/**/。在算法的关键处增加注释。
7、数据增加采用APPEND模式附加在最后。如果在数据中间有空闲空间,则增加到空闲空间中。
8、数据删除可以指定删除那条记录。
9、数据变化时要动态记录那个空间空闲、那个空间占用。
10、函数返回值为执行成功、失败原因,类型为int,失败原因可有多个。
11、数据类名与存储空间不存在一一对应的关系。
12、函数内变量的声明和函数逻辑分开,不得在函数执行过程中声明变量。
13、变量初始化按照使用前初始化的方式。
14、每个函数的行数不得超过200行。
15、不得使用任何全局或者静态变量。
16、在析构函数中实现释放所有分配空间。
17、单条记录声明为结构体,struct data{char rec[255*32]};此结构体非最终结构体,需要按照上述规则进行调整。
18、编写测试程序进行测试。

...全文
185 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jj_flair 2009-04-08
  • 打赏
  • 举报
回复
以下使自己在这次测试写的,请各位多提宝贵意见
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;

#define LENGTH 255*32
#define MAXDATE 1024 /*记录的最大条数*/
#define MAXDATECLASS 16 /*map 中存储数据类的最大条数*/
#define INITSIZE 100 /*对数据类初始时默认的记录条数*/

enum DataName {A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P}; /*标识16个数据类的名称*/

/*
结构体Data用于存储记录
*/
typedef struct {
char rec[LENGTH];
}Date;
/*
操作类,用于对数据类的增删改查
*/
class Ctrl{
public:
Ctrl(){

}
int addDate(string key,char *value); /*实现增加单条记录*/
int clearDate(string key); /*清除某类数据*/
int deleteDate(string key,char *value); /*删除某类数据的某条记录*/
int selectDate(string key,char *value); /*查询某类数据的指定某条数据功能*/
void showError(); /*打印错误信息*/
void doIt(){ /*对map和vector进行初始化,并打印出错误信息*/
initMap();
initVector();
showError();
}
~Ctrl(){ /*在析构函数中实现释放所有分配空间。*/
delete vData;
delete mData;
}
private:
int initMap(); /*对map进行初始化,map用于存储数据类*/
int initVector(); /*对vector进行初始化,用vector存储记录*/
vector<Data>* createVDate(); /*创建数据类的记录*/
private:
vector<Data> *vData; /*指针变量vData,用于存储记录。Data 是存储单条记录*/
map<string,vector<Data>*> *mData; /*mData的key 值为标识数据类的唯一的名称。value 为存储记录的容器指针变量*/
int error; /*标识错误号*/

};
/*
功能:给mData进行初始化
返回:返回错误标号,0表示初始化成功,1表示mData初始化未成功
*/
int Ctrl:: initMap(){

mData = new map<string,vector<Data>>;
DataName dataName ;
string dataClassName ;

int i;
try{
for(i = A; i <= P; i++){ /*通过遍历枚举,给mData初始化*/
vData = new vector<Data>();
dataName = DataName(i);
dataClassName = (string)dataName;
mData.insert(pair<string,vector<Data>>(dataClassName,vData));
}
error = 0;
}catch(...){
error = 1;
}
return error;
}
/*
功能:给vData的值,也就是数据类初始化
返回:返回错误标号,0表示初始化成功,2表示初始化未成功
*/
int Ctrl:: initVector(){

int i;
try{
for(i = 0 ; i < MAXDATECLASS; i++){ /*遍历mData,给数据类初始化*/
(*mData)[i] = createVData(); /*调用createVData()方法*/
}
error = 0;
}catch(...){
error = 2;
}
return error;

}
/*
功能:创建存储记录类的一个vector容器
返回:存储记录类的一个vector容器
*/
vector<Data>* Ctrl:: createVDate(){
int i ;
vector<Data> *vData ;
for(i = 0; i < INITSIZE; i++){ /*给vData的初始长度为100*/
Data data ;
data.rec[LENGTH] = ""; /*用空字符串标示该数据为空*/
vData->push_back(data);
}
return vData;
}
/*
功能:实现增加单条记录
参数:key 数据类名,value是要插入的值
返回:返回错误标号,0表示插入成功,3表示该数据类记录条数以到达1024条
*/
int Ctrl:: addDate(string key,char *value){
vData = mData[key];
vector<Data>::iterotar iter = vData.begin();

while(iter != vDate.end()){ /*如果在数据中间有空闲空间,则增加到空闲空间中*/
if((*iter).vec = ""){
(*iter).vec = value;
error = 0;
break;
}
}

if(vData.size() == MAXDATE){ /*如果数据类已经存储了1024条记录,就不能再增加*/
error = 3;
}

if(iter = vData.end()){ /*开辟新的空间,并增加记录*/
Data data;
data.rec = value;
vData->push_back(data);
error = 0;
}
return error;

}
/*
功能:清除某类数据
参数:key 数据类名
返回:返回错误标号,0表示清除成功,4表示清除失败
*/
int Ctrl:: clearDate(int key){
try{
vData = mData[key];
vData.clear();
error = 0;
}catch(...){
error = 4;
}

return error;
}
/*
功能:删除某类数据的某条记录
参数:key 数据类名,value是要删除的值
返回:返回错误标号,0表示删除成功,5删除失败
*/
int Ctrl:: deleteDate(string key,char *value){
error = 0;
vData = mData[key];
vector<Data>::iterotar iter = vData.begin();

while(iter != vDate.end()){
if((*iter).vec = value){
vData.erase(iter);
error = 0;
break;
}
}
return error;
}
/*
功能:查询某类数据的指定某条数据功能
参数:key 数据类名,value是要查询的值
返回:返回错误标号,0表示查询成功,6查询失败
*/
int Ctrl:: selectDate(string key,char *value){
error = 0;
vData = mData[key];
vector<Data>::iterotar iter = vData.begin();
while(iter != vDate.end()){
if((*iter).vec = value){
error = 6;
}
}
return error;
}
/*
功能:打印错误信息
返回:无返回值
*/
void Ctrl:: showError(){
switch(error){
case 1: cout<<"mData初始化未成功"<<endl;
case 2: cout<<"初始化未成功"<<endl;
case 3: cout<<"该数据类记录条数以到达1024条"<<endl;
case 4: cout<<"清除失败"<<endl;
case 5: cout<<"删除失败"<<endl;
case 6: cout<<"查询失败"<<endl;
default:cout<<"成功"<<endl;
}
}



/*进行测试*/
void main(){
Ctrl *ctrl = new Ctrl();

/*增加单条记录*/
string value = "我来测试!";
ctrl->addDate("A",value);
ctrl->showError(); //打印错误信息


/*查询某类数据的指定某条数据功能*/
ctrl->selectDate();
ctrl->showError("A",value); //打印错误信息

/*删除某类数据的某条记录*/
ctrl->deleteDate("A",value);
ctrl->showError(); //打印错误信息

/*清除某类数据*/
ctrl->clearDate("A");
ctrl->showError(); //打印错误信息

}
mr_michael_lee 2009-04-07
  • 打赏
  • 举报
回复
这贴为什么在Oracle非技术区里?C++...
sayoath 2009-04-04
  • 打赏
  • 举报
回复
顶下/
liliangbao 2009-04-04
  • 打赏
  • 举报
回复
帮顶~
jixingzhong 2009-03-28
  • 打赏
  • 举报
回复
直接求源码? 转非技术

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧