当前位置:文档之家› OCCI使用指南

OCCI使用指南

OCCI使用指南
OCCI使用指南

1.OCCI编程模式

1.1. 总体流程图

编写OCCI程序的总体流程图,如下所示:

1.2. 执行SQL语句的流程图

在OCCI中处理SELECT语句跟处理INSERT、UPDATE、CREATE等语句的方法是不一样的,其中SELECT语句是有返回结果,其它语句没有返回结果,所以必须区分SQL语句是否为查询语句,然后按照各自的流程处理。流程图如下所示:

注:标*号的过程为可选项

2.流程图具体说明

2.1. 创建与终止OCCI环境变量

创建OCCI环境变量

Environment类是OCCI程序的基础类,所有的OCCI对象的建立都是依计Environment 对象来创建的,所以Environment对象的建立必须放在第一位,而且也必须是最后一个被终止的。例如:首先创建一个Environment对象env,然后通过env创建一个Connection对象conn,conn是连接了数据库的对象;终止时,却反过来先终止对象conn,再终止对象env。具体Environment对象的创建方法如下所示:

Environment *env = Environment::createEnvironment();

注意:createEnvironment()方法有以下几个参数模式:

1.在线程环境中运行分为互斥线程(THREADEC_MUTEXED)、并行线程(THREADEC_UMMUTEXED)。

2.使用对象(OBJECT)。

3.利用共享数据结构(SHARED)。

终止OCCI环境变量

Environment对象的终止必须是放在最后一位,即等所有其它OCCI对象被终止完后再终止Environment对象。终止Environment对象的方法如下所示:

Environment::terminateEnvironment(env);

2.2. 连接与断开数据库

连接数据库

创建完一个Environment对象env后,可以调用Environment类下的方法createConnection()来创建一个Connection对象conn;通过createConnection()方法我们可以连接到任意一个数据库中。连接数据库的具体方法如下所示:

Connection *conn = env->createConnection(usename,password,[connectionstring]);

参数说明:usename是登录数据库的用户名;

password是登录数据库用户的密码;

connectstingr是数据库的连接串(可选)。

断开数据库

当对数据库操作完成之后,我们必须断开程序与数据库的连接,断开数据库的连接方法与创建的方法一样来自Environment类下的terminateConnection()函数。方法如下所示:

env->terminateConnection(conn);

2.3. 创建与断开连接池

创建连接池

对于很多共享服务器或中间层应用程序而言,数据库的连接必须要能被许多线程所使用,如果为每个线程都开一个数据库连接的话,当数量一大效率会明显的降低,所以我们通过创建连接池来处理这样的情况。创建完一个Environment对象env后,可以调用Environment

类下的方法createConnectionPool()来创建一个Connection对象connPool;通过createConnectionPool()方法我们可以连接到任意一个数据库中。连接池创建的具体方法如下所示:

ConnectionPool *connPool = env->createConnectionPool(

const string &poolUseName,

const string &poolPassWord,

const string &connectstring,

unsigned int minConn,

unsigned int maxConn,

unsigned int incrConn);

参数说明:poolUseName是连接池的用户名;

poolPassWord是连接数据库的密码;

connectstring是数据库连接串;

minConn是最小连接数;

maxConn是最大连接数;

incrConn是指所有已连接数处于繁忙中且小于最大连接数时,每次增加的连接

数。

断开连接池

当对数据库操作完成之后,我们必须断开程序与数据库的连接,断开数据库的连接方法与创建的方法一样来自Environment类下的terminateConnectPool()函数。方法如下所示:

env->terminateConnectPool(connPoll);

2.4. 创建与终止Statement对象

2.4.1.创建Statement对象

Statement类包含了执行SQL语句的所有方法,是对数据库操作的具体实现。Statement 对象stmt的创建是通过调用Connection类下的createStatement()函数实现,所以Statement 对象的创建必须是在Connection对象创建之后。createStatement()函数可以带参数或不带参数,如果带参数的话,参数必须是一个SQL语句;如果没有带参数,则在后面必须用Statement 类下setSQL()函数为Statement对象赋一个SQL语句。Statement对象的创建方法如下所示:

Statement *stmt = conn->createStatement();

终止Statement对象

当对数据库的操作完成时,我们必须先终止Statement对象,再断开Connection对象。终止Statement对象的方法如下所示:

Conn->terminateStatement(stmt);

3.执行SQL语句(Statement类)

3.1. 执行SQL语句的方法

执行SQL的所有方法都包含在Statement类下。SQL语句按返回结果分,可以分为两种:一种是有返回值的(查询语句),另外一种是没有返回值的(非查询语句)。一般情况下,在执行查询SQL语句我们使用executeQurey()函数,在执行非查询SQL语句时我们使用executeUpdate()函数。

1.stmt->execute();执行所有非特殊声明的SQL语句。

2.stmt->executeUpdate();执行所有DDL和DML(一条记录)的SQL语句。

3.stmt->executeQurey();执行所有查询SQL语句。

4.stmt->executeArrayUpdate();执行多记录的DML的SQL语句。

例如:

stmt->executeUpdate(“create table student (sno number(10),sname varchar2)”);

stmt->executeUpdate(“insert into student (sno,sname) values(1,’ZHANGSAN’)”);

stmt->executeQurey(“select sno from student ”);

3.2. 执行非查询语句

当我们创建了一个Statement对象stmt后,可以通过Statement类下的方法setSQL()为stmt设置不同的SQL语句。

3.2.1.准备SQL语句

stmt->setSQL(string &sql);

例如:

stmt->setSQL(“insert into student (sno,sname) values(:1,:2)”)

其中::1、:2是参数,通过给参数赋不同的值来实现。

与之对应的函数getSQL()是取出当前对象对应的SQL语句。

3.2.2.绑定输入参数值

在Statement类中包含了所有参数的赋值方法,赋值方法set×××(unsigned int paramindex,type values),其中paramindex参数是代表所赋值参数在SQL语句中的第几个参数,×××与type代表中所赋值的类型,values是所赋的值。×××可以是Int、String、Date 等等。

例如:

stmt->setString(1,’zhangsan’);指把’zhangsan’赋值给第一个参数,参数类型为字符串型。

stmt->setInt(2,1009);指把1009赋值给第二个参数,参数类型为整型。

3.2.3.执行非查询语句

当SQL语句准备好后,就可以执行SQL语句了,方法如下所示:

stmt->executeUpdate();

3.3. 执行查询语句(SELECT)

在执行查询语句时有返回查询结果(可能是一条,也可能是多条),我们必须创建一个ResultSet对象来处理,通过使用ResultSet对象的next()方法我们可以一条一条(或批量)地处理结果集。具体使用如下所示:

3.3.1.准备SQL语句

详见3.2.1。

3.3.2.绑定输入参数值

详见3.2.2。

3.3.3.执行查询语句

ResultSet *rs = stmt->executeQuery();

3.3.

4.定义输出变量

根据SELECT语句查询的列的类型定义对应的变量,此变量用于存储SELECT查询的结果集。

3.3.5.推进或处理数据

如果结果集为多条记录,我们可以批量或者一条条处理数据,使用ResultSet类下的方法next(unsigned int numRows)。

在Statement类中包含了所有参数的取值方法。取值方法get×××(unsigned int paramindex),其中paramindex参数是代表所取值列在SQL语句中的第几列,×××代表该列对应的类型。×××可以是Int、String、Date等等。

例如:

rs->next(unsigned int numRows);//其中numRows为批量处理的记录行数。

stmt->getInt(paramindex);获取整型参数值,其中paramindex为参数所在的位置;

stmt->getString(paramindex);获取字符型参数值其中paramindex为参数所在的位置;

3.4. 输出参数声明

在调用存储过程时,有时候有返回参数,这些返回参数都必须在调用之前先用Statement 类下的registerOutParam()方法声明,声明方法的使用如下所示:

stmt->registerOutParam(paramName,paramType,paramSize);

其中:paramName是参数名或者参数所在位置;

paramType是参数类型(比如:TYPE::OCCIINT);

paramSize是参数的大小。

3.5. 事务提交

3.5.1.手动提交

当事务的提交设置为手动时,每完成一个事务我们都必须调用Connection类下的commit()或rollback()方法来提交一个事务。使用方法如下所示:

手动提交必须调用以下函数:

Connection::commit();

Connection::rollback();

3.5.2.自动提交

在对数据库进行操作的过程中,一个事务的提交是用手动还是自动,我们可以调用Statement类下的setAutoCommit()方法来设置。使用方法如下所示:

设置自动提交:

Statement:: setAutoCommit (TRUE);

设置手动提交:

Statement::setAutoCommit(FALSE);

4.OCCI常用类简要介绍

4.1. Environment类

Environment类提供了管理OCCI对象的内存及其它资源的一个环境,包含以下方法:1.createConnection(const string usename,const string password,const string connstring);指与数据库建立一个连接。

2.createConnectionPoll(

const string &poolUseName,

const string &poolPassWord,

const string &connectstring,

unsigned int minConn,

unsigned int maxConn,

unsigned int incrConn); 创建连接池。

参数说明:poolUseName是连接池的用户名;

poolPassWord是连接数据库的密码;

connectstring是数据库连接串;

minConn是最小连接数;

maxConn是最大连接数;

incrConn是指所有已连接数处于繁忙中且小于最大连接数时,每次增加的连

接数。

3.createEnironment(Mode mode );创建一个环境对象,其中mode是模式(可选DEFAULT、THREADED_MUTEXED、THREADED_UN-MUTEXED、OBJECT、SHARED值)。4.getCurrentHeapSize();指在同一环境下已经分配的内存数。

5.getOCIEnironment();返回一个OCI环境指针。

6.terminateConnection(Connection *conn);断开与数据库的连接。7.terminateConnection(ConnectionPool *poolconn);断开与数据库的连接池。8.terminateEnironment(Einironment *env);终止OCCI环境变量。

4.2. Connection类

Connection类提供了C++程序与指定数据库的连接,包含以下方法:1.changePassword(const string &user,const string &oldPassword,const string &newPassword);

改变当前用户的密码。

2.Commit();提交事务。

3.createStatement(const string &sql=””);创建一个Statement对象。

4.flushCache();

5.rollback();事务的回滚。

6.terminateStatement(Statement *stmt).终止一个Statement对象,并释放它占有的所有资源。

4.3. ConnectionPool类

ConnectionPoll类提供了C++程序与指定数据库间的连接池,包含以下方法:1.createConnection(const string &username,const string &password);创建一个连接。2.getBusyConnections();返回连接池中被占用的连接数量。

3.getMaxConnections();返回连接池的最大连接数。

4.getMinConnections();返回连接池的最小连接数。

5.getOpenConnections();返回连接池中已经被打开的连接数。

6.getPollName();返回连接池的名称。

7.getTimeOut();返回连接池的超时时间。

8.setErrorOnBusy();设置异常,当连接池处于繁忙或达到最大连接数后。9.serPoolSize(unsigned int minConn,unsigned int maxConn,unsigned int incrConn);设置连接池的大小,其中参数minConn是最小连接数,maxConn是最大连接数,incrConn是递增连接数。

10.setTimeOut();设置超时时间。

11.terminateConnection(Connection *conn);断开连接。

4.4. Statement类

Statement对象主要被用来执行SQL语句,它可以运行一个查询语句返回一个结果集也可以运行UPDATE、DELETE等SQL语句。

1.addIteration();增加一个循环。

2.closeResultSet(ResultSet *rs);关闭一个结果集。

3.closeStream(Stream *stream);关闭一个已定义的流。

4.execute(const string &sql = “”);执行一个SQL语句,如果前面使用的setSQL()方法,则参数sql可以为空。

5.executeArrayUpdate(unsigned int arrayLength);同时修改多条记录,前面必须使用了setDataBuffer()方法设置一个数量或设置了一个流(stream)。

6.executeQuery();执行一个查询语句。

7.executeUpdate();执行DDL、DML语句,如:INSERT、UPDA TE、DELETE、CREATE 等等。

8.getAutoCommit();返回是否事务自动提交。

9.getDate(unsigned int paramindex);返回DATE型数据。

10.getDouble(unsigned int paramindex);返回DOUBLE型数据。

11.getFloat(unsigned int paramindex);返回FLOAT型数据。

12.getInt(unsigned int paramindex);返回INT型数据。

13.getNumber(unsigned int paramindex);返回NUMBER型数据。

14.getRef(unsigned int paramindex);返回REF参数值。

15.getResultSet();得到一个结果集(ResultSet)。

16.getSQL();返回当前的SQL语句。

17.getString(unsigned int paramindex);返回STRING型数据。18.getUpdateCount();返回被更新的数量。

19.isNull(unsigned int paramindex);判断第X个值是否为空。20.isTruncated(unsigned int paramindex);判断第X个值是否被截取。21.setAutoCommit(bool autocommit);设置事务是否自动提交。

22.setDouble(unsigned int paramindex,double x);赋一个double型的值。23.setFloat(unsigned int paramindex,float x);赋一个float型的值。

24.setInt(unsigned int paramindex,int x);赋一个INT型的值。

25.setNull(unsigned int paramindex,TYPE type);某参数设置为空。26.setNumber(unsigned int paramindex,const number &x);赋一个Number型的值。27.setObject(unsigned int paramindex,PObject *x);赋一个PObject型的值。28.setString(unsigned int paramindex,const string &x);赋一个string型的值。29.setSQL(const string &sql);设置一个SQL语句。

30.Status();返回当前的状态。

4.5. ResultSet类

ResultSet类是查询数据表的结果集,它包含以下方法:

1.cancel();取消结果集。

2.closeStream(Stream *stream);关闭一个流。

3.getDouble(unsigned int colIndex);返回double型的值。

4.getFloat(unsigned int colIndex);返回float型的值。

5.getInt(unsigned int colIndex);返回int型的值。

6.getMaxColumnSize(unsigned int colIndex);返回某列包含的数据量。7.getNumber(unsigned int colIndex);返回number型的数据。

8.getPObject(unsigned int colIndex);返回PObject型的数据。

9.getRowid(unsigned int colIndex);返回rowid值。

10.getString(unsigned int colIndex);返回string型的数据。

11.isNull(unsigned int colIndex);判断值是否为空。

12.isTruncated(unsigned int colIndex);判断值是否被删。

13.next(unsigned int numRows);取下numRows条记录。

14.status();返回当前状态。

PObject类包含以下方法:

1.fush();

2.Connection *getConnection();从一个实例化的永久对象中返回连接。

3.isLocked();判断永久对象是否被锁(TRUE或FALSE)。

4.isNull();判断永久对象是否为空(TRUE或FALSE)。

5.Lock(PObject::LockOption lock_option);在数据库中锁住一个对象,其中lock_option取值为OCCI_LOCK_WAIT、OCCI_LOCK_NOW AIT。

6.markDelete();删除数据库中的永久对象。

7.markModified();修改永久对象。

8.PObject &operator(const PObject &obj);赋值(对象)。

9.operator delete(void *obj,size_t size);删除对象,但不能删除数据库中的对象。

10.*operator new(size_t size);创建临时对象。

11.*operator new(size_t size,const Connection *x,const string &tablename,const char *type_name);创建永久对象。

12.pin();

13.setNull();设置对象为空。

14.unmark();不标记永久对象为删除或修改。

15.unpin(UnpinOption mode);其中,mode的取值为OCCI_PINCOUNT_RESET、OCCI_PINCOUNT_DECR。

4.7. SQLException类

SQLException类提供错误代码及其错误信息,包含以下方法:

1.getErrorCode();返回数据库中的错误编码。

2.getMessage();返回错误信息,没有则为空。

4.8. Date类

Date类包含以下方法:

1、addDays(int i);返回增加i天后的日期。

2、addMonths(int i);返回增加i个月后的日期。

3、intervalDS daysBetween(const Date &d);返回与d相差的天数。

4、getDate(int &year,unsigned int &month,unsigned int &day,unsigned int &hour,unsigned int

&minute,unsigned int &second );返回分年月日小时分秒格式。

5、getSystemDate(const Environment *env);返回系统日期。

6、isNull();判断是否为空;

7、lastDay();返回当月的最后一天日期。

8、setDate(int &year=1,unsigned int &month=1,unsigned int &day=1,unsigned int

&hour=0,unsigned int &minute=0,unsigned int &second=0);设置日期值。

9、setNull();设置为空。

Number类包含以下常用方法:

1、abs();返回绝对值。

2、floor();向下取整。

3、isNull();判断是否为空。

4、operator+(const Number &a,const Number &b);两数相加。

5、operator-( const Number &a,const Number &b);两数相减(a-b)。

6、operator*(const Number &a,const Number &b);两数相乘。

7、operator/(const Number &a,const Number &b);两数相除。

8、operator%(const Number &a,const Number &b);求余。

9、operator<(const Number &a,const Number &b);a是否小于b。

10、operator<=(const Number &a,const Number &b);a是否小于等于b。

11、operator>(const Number &a,const Number &b);a是否大于b。

12、operator>=(const Number &a,const Number &b);a是否大于等于b。

13、operator==(const Number &a,const Number &b);a与b是否相等。

14、operator!=(const Number &a,const Number &b);判断a是否不等于b。

15、operator char();将number型转化为char型。

16、operator signed char();将number型转化为有符号char型。

17、operator double();将number型转化为double型。

18、operator float();将number型转化为float型。

19、operator int();将number型转化为int型。

20、operator long();将number型转化为long型。

21、operator short();将number型转化为short int型。

22、setNull();设置为空。

23、trunk();取整。

5.附录:代码示例

5.1. 查询流程处理示例

下面给出了一个查询的例子qrystudent.cpp,通过使用OCCI接口函数查询数据库表student的信息(学号,学生姓名)。

#include

#include

using namespace oracle::occi;

using namespace std;

int main ()

{

Environment *env;

Connection *conn;

Statement *stmt;

ResultSet *rs;

string username = “ipd”;

string password = “ipd”;

string connstring = “ora9i”;

string sql,strname;

int isno;

env = Environment::createEnvironment(); //创建一个环境变量

conn = env->createConnection(username,password,connstring); //创建一个数据库连接对象stmt = conn->createStatement(); //创建一个Statement对象

sql = “ SELECT sno,sname FROM student “;//拼接一个SQL语句

stmt->setSQL(sql); //设置SQL语句到Statement对象中

try {

rs = stmt->executeQuery();//执行SQL语句

while (rs->next()) { //用循环,一条一条地取得查询的结果记录

isno = rs->getInt(1);//取出第一列的值(对应为int型)

strname=rs->getString(2); //取出第二列的值(对应为string型)

cout << isno << “AND “ << strname << endl;

}

cout << “SELECT ――SUCCESS” << endl;

} catch (SQLException ex) {

cout << “ Error Number : “<< ex.getErrorCode() << endl; //取出异常代码

cout << ex.getMessage() << endl; //取出异常信息

}

conn->terminateStatement(stmt); //终止Statement对象

env->terminateConnection(conn); //断开数据库连接

Environment::terminateEnvironment(env); //终止环境变量

return 1;

}

5.2. 非查询流程处理示例

下面给出了一个insert例子inserttab.cpp,通过使用OCCI接口函数往数据库表student 中插入信息(学号,学生姓名)。

#include

#include

using namespace oracle::occi;

using namespace std;

int main ()

{

Environment *env;

Connection *conn;

Statement *stmt;

string username = “ipd”;

string password = “ipd”;

string connstring = “ora9i”;

string sql;

env = Environment::createEnvironment(); //创建一个环境变量

conn = env->createConnection(username,password,connstring); //创建一个数据库连接对象

stmt = conn->createStatement(); //创建一个Statement对象

sql = “INSERT INTO student (sno,sname) V ALUES ( :x,:y) “; //拼接SQL语句

stmt->setSQL(sql); //设置SQL语句到Statement对象中

try {

stmt->setInt(1,10001); //给第一个参数x赋值

stmt->setString(2,”zhangsan”); //给第二个参数y赋值

stmt->executeUpdate(); //执行SQL语句

cout << “INSERT ――SUCCESS” << endl;

} catch (SQLException ex) {

cout << “ Error Number : “<< ex.getErrorCode() << endl; //获得异常代码

cout << ex.getMessage() << endl; //获得异常信息

}

conn->terminateStatement(stmt); //终止Statement对象

env->terminateConnection(conn); //断开数据库连接

Environment::terminateEnvironment(env); //终止环境变量

return 1;

}

5.3. 批量处理非查询语句

在批量处理非查询语句时,首先必须使用m_stmt->setMaxIterations(unsigned int maxnum)方法设置最大的批处理数;然后使用setMaxParamSize(unsigned int paramindex,int paramsize)方法设置对应参数的大小,对于有固定长度的参数可以不必重新设置,如int,double;最后

循环绑定参数使用set×××()方法,每循环一次必须使用addIteration()方法再进行下一次循环,直到最后一次。例子如下所示:

#include

#include

using namespace oracle::occi;

using namespace std;

int main ()

{

Environment *env;

Connection *conn;

Statement *stmt;

string username = "bill";

string password = "bill";

string connstring = "jftest";

string sql;

int isno[2]={21,22},i,iage[2]={18,19};

string csname[2]={"namea","nameb"};

try {

env = Environment::createEnvironment();

conn = env->createConnection(username,password,connstring);

stmt = conn->createStatement();

stmt->setAutoCommit(false);

sql = " INSERT INTO student (sno,sname,age) VALUES (:x,:y,:z) ";

m_stmt->setSQL(sql);

m_stmt->setMaxIterations(2);

m_stmt->setMaxParamSize(1,sizeof(int));

m_stmt->setMaxParamSize(2,sizeof(string));

m_stmt->setMaxParamSize(3,sizeof(int));

cout<<"setMaxIterations success !"<

//cout<<"getMaxIterations = "<getMaxIterations()<

for (i=0;i<2;i++)

{

m_stmt->setInt(1,isno[i]);

m_stmt->setString(2,csname[i]);

m_stmt->setInt(3,iage[i]);

//cout <

if (i!=1) m_stmt->addIteration();

}

cout<<"getMaxIterations = "<getMaxIterations()<

cout<<"set success"<

inum = m_stmt->executeUpdate();

m_conn->commit();

cout << "INSERT ¨D¨D SUCCESS" << endl;

} catch (SQLException ex) {

inum = m_stmt->getUpdateCount();

cout << "ON" << inum+1 << " shi fail !" << endl;

cout << " INSERT Error Number : "<< ex.getErrorCode() << endl;

cout << ex.getMessage() << endl;

m_conn->rollback();

return 0;

}

conn->terminateStatement(stmt);

env->terminateConnection(conn);

Environment::terminateEnvironment(env);

cout << "PROGRAM IS END ." << endl;

return 1;

}

5.4. 查询语句中批量取数

在批量取数时,使用setDataBuffer()方法来设置接收数据缓冲区大小,例子如下所示:#include

#include

using namespace oracle::occi;

using namespace std;

int main ()

{

Environment *env;

Connection *conn;

Statement *stmt;

ResultSet *rs;

string username = "bill";

string password = "bill";

string connstring = "jftest";

string sql;

int i,numrows=5,isnum,ilnum,ipos=0;

int isno[5],vsno[20],ii=0,x[20];

ub2 isnolen[5],snamelen[5];

char sname[5][20],vsname[20][20];

for (i=0;i<20;i++)

{

isnolen[i]=sizeof(isno[i]);

snamelen[i]=strlen(sname[i]+1);

}

cout << "PROGRAM START ..." << endl;

try {

env = Environment::createEnvironment();

conn = env->createConnection(username,password,connstring);

stmt = conn->createStatement();

sql = " SELECT sno,sname FROM student ";

stmt->setSQL(sql);

rs = stmt->executeQuery();

rs->setDataBuffer(1,isno,OCCIINT,sizeof(int));

rs->setDataBuffer(2,sname,OCCI_SQLT_STR,sizeof(sname[0]),snamelen);

ilnum = rs->getNumArrayRows();

cout << " ilnum = " << ilnum <

while (rs->next(numrows)) {

isnum = rs->getNumArrayRows();

cout << " isnum = " << isnum <

for(i=0;i

{

vsno[ipos] = isno[i];

vsname[ipos] = sname[i];

ipos = ipos+1;

}

}

ilnum = rs->getNumArrayRows();

cout << " ilnum = " << ilnum <

for(i=0;i

{

vsno[ipos] = isno[i];

vsname[ipos] = sname[i];

ipos = ipos+1;

}

cout << "SELECT RESULT IS ..." << endl;

for(i=0;i

{

cout<

}

cout << "SELECT RESULT END !" << endl;

cout << "SELECT ¨D¨D SUCCESS" << endl;

} catch (SQLException ex) {

cout << " Error Number : "<< ex.getErrorCode() << endl;

cout << ex.getMessage() << endl;

}

conn->terminateStatement(stmt);

env->terminateConnection(conn);

Environment::terminateEnvironment(env);

cout << "PROGRAM END !" << endl;

return 1;

}

5.5. MERGE语句的使用

在使用MEGER语句时,USING部分的取值应该使用表或者SELECT param1,param2 FROM DUAL,其中param1,param2是常量值,可以通过数组赋值,并且每列值都应该取别名,在后面的使用中就只用别名。例子如下所示:

#include

#include

using namespace oracle::occi;

using namespace std;

int main ()

{

Environment *env;

Connection *conn;

Statement *stmt;

string username = "bill";

string password = "bill";

string connstring = "jftest";

string sql;

int isno[2]={21,22},i,iage[2]={18,19};

try {

env = Environment::createEnvironment();

conn = env->createConnection(username,password,connstring);

stmt = conn->createStatement();

stmt->setAutoCommit(false);

sql = " merge into student a ";

sql += " using (select :x bid,:y bage from dual) b ";

sql += " on (a.sno = b.bid) ";

sql += " when matched then ";

sql += " update set a.age= a.age+b.bage ";

sql += " when not matched then ";

sql += " insert (a.sno,a.age) ";

sql += " values (b.bid,b.bage) ";

stmt->setSQL(sql);

stmt->setMaxIterations(2);

stmt->setMaxParamSize(1,sizeof(int));

//stmt->setMaxParamSize(2,sizeof(string));

cout<<"setMaxIterations success !"<

//cout<<"getMaxIterations = "<getMaxIterations()<

for (i=0;i<2;i++)

{

stmt->setInt(1,isno[i]);

stmt->setInt(2,iage[i]);

if (i!=1) stmt->addIteration();

}

cout<<"getMaxParamSize = "<getMaxParamSize(2)<

cout<<"getMaxIterations = "<getMaxIterations()<

cout<<"set success"<

stmt->executeUpdate(); //?′DDSQLó???

conn->commit();

cout << "INSERT ¨D¨D SUCCESS" << endl;

} catch (SQLException ex) {

cout << " Error Number : "<< ex.getErrorCode() << endl;

cout << ex.getMessage() << endl;

conn->rollback();

}

conn->terminateStatement(stmt);

env->terminateConnection(conn);

Environment::terminateEnvironment(env);

cout << "PROGRAM IS END ." << endl;

return 1;

}

管理体系过程方法的概念和使用指南

最新国际质量管理文件 管理体系过程方法的概念和使用指南 1 引言 本文件为理解“过程方法”的概念、意图及其在ISO9000族质量管理体系标准中的应用提供指南。本指南也可用于其他管理体系采用过程方法,不论组织的类型和规模如何。 本指南的目的是推动描述过程的方法的一致性,并使用与过程有关的术语。 过程方法的目的是提高组织在实现规定的目标方面的有效性和效率。 过程方法的好处有: ?对过程进行排列和整合,使策划的结果得以实现; ?能够在过程的有效性和效率上下功夫; ?向顾客和其他相关方提供组织一致性业绩方面的信任; ?组织内运作的透明性; ?通过有效使用资源,降低费用,缩短周期; ?获得不断改进的、一致的和可预料的结果; ?为受关注的和需优先安排的改进活动提供机会; ?鼓励人员参与,并说明其职责。 2 什么是过程? “过程”可以定义为“将输入转化为输出的一组相互关联、相互作用的活动”。这些活动需要配置资源,如人员和材料。图1所示为通用的过程。

与其他方法相比,过程方法的主要优点是对这些过程间的相互作用和组织的职能层次间的接口进行管理和控制(在第4章中详细说明)。 输入和预期的输出可以是有形的(如设备、材料和元器件)或无形的(如能量或信息)。输出也可能是非预期的,如废料或污染。 每一个过程都有顾客和受过程影响的其他相关方(他们可以是组织内部的,也可以是外部的),他们根据其需求和期望规定所需要的输出。 应通过系统进行收集数据、分析数据,以提供有关过程业绩的信息,并确定纠正措施或改进的需求。 所有过程都应与组织的目标相一致,要规定所有过程都增值,与组织的规模和复杂程度相适应。 过程的有效性和效率可通过内部和外部评审过程予以评审。 3 过程的类型 可规定以下类型的过程 ——组织的管理过程。包括与战略策划、制定方针、建立目标、提供沟通、确保获得所需的资源和管理评审有关的过程。 ——资源管理过程。包括为组织的管理、实现、测量过程提供所需资源的所有过程。 ——实现过程。包括提供组织预期输出的所有过程。 ——测量、分析和改进过程。包括测量和收集业绩分析及提高有效性和效率的数据的那些过程,如测量、监视和审核过程,纠正和预防措施,它们是管理、资源管理和实现过程不可缺少的一部分。 4 过程方法的理解 过程方法是一种对如何使活动为顾客和其他相关方创造价值进行组织和管理的有力方法。

小程序说明

小程序说明 Company Document number:WTUT-WT88Y-W8BBGB-BWYTT-19998

微信小程序介绍 一,产品概述 产品简介 客户丰富场景,持续支持 提供各种行业解决方案,深挖需求,解决行业痛点,持续更新功能,不断提升用户体验 百变魔方,自由组合 提供了更多想象空间,提供了更多运营可能,模块间搭配使用,自由组合,让思路更开阔 独立后台,自主编辑 后台可以对自己账户下面每个小程序进行管理和编辑,小程序端及时更新。 并且方便打包更新审核 资料全面,方便学习 不仅提供图文教学,更有视频教程,方便代理和终端用户快速掌握平台的使用方法和技巧。并且会有更多的成功案例分享,成功运营经验分享 模块概览 图 1 模块概览 二,模块介绍 内容管理 模块介绍

小程序的内容管理系统,主要适用于资讯发布和公告发布板块,可以进行二级分类。支持内容留言、点赞功能。将产品与内容进行深度融合,未来内容营销趋势不可缺少的模块。 图 2 内容管理 微商城 模块介绍 微商城类似于手机淘宝,可实现商品展示,搜索,下单,功能齐全,可通过微信二维码直接进入,支持优惠券,分销管理推广,模块化设置,商家只需简单设置即可拥有自己的商城,省时省力! 图 3 微商城

模块介绍 微名片是基于微信平台的个人商务电子名片,优点在于可在微信聊天窗口里直接分享,并且融入了排名等激励机制,促使用户尽可能多的分享名片,迅速曝光,通过交换个人电子名片可是无限制沉淀自己人脉关系。 图 4 微名片 微拼团 模块介绍 微商拼团是商品营销和售卖的一种方式,通过社交关系链分享传播,可自由设置开团人数,开团价格。用户在分享时,小程序卡片上可以做到实时显示当前的拼团信息,比如已经有多少人参与拼团,现在的价格是多少等,比传统h5 有更好的传播效果。 图 5 微拼团 功能说明

营销中心小程序使用说明

营销中心小程序使用说 明 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

营销中心小程序使用说明 超级顾问 1.名词解释 营销中心小程序:超级顾问为企业客户定制的营销中心,以小程序的形式呈现,目前支持对接驷惠系统的订单管理、优惠券领取与转介绍功能,后续将加入微信会员等级制度,并支持线上充值与消费。 小程序界面截图 展示企业地址与工作时间,点击首图可进入企业介绍页。并提供优惠券领取的列表,客户领取之后可以直接使用。 领取的优惠券会在这里展示 包含已领取优惠券的入口、我的订单和一键导航。 目前我们已对接驷惠系统,凡是企业有安装驷惠系统且将客户信息记录在案,客户下单之后,就能在这里找到自己的订单明细。并且能直接联系客服。如果是主流物流公司配送的订单,比如德邦,会自动同步物流信息。 小程序入口 目前主流入口有四个:发现入口、公众号入口、微信首页入口、线下小程序二维码入口。 打开微信-发现-小程序,进入小程序列表,只会展示你打开过的小程序,根据打开的时间先后顺序排列。 也可以直接通过搜索小程序名字找到对应的小程序,但是有时候会搜索不到。

公众号介绍页和自定义菜单可配置小程序链接,点击即可进入小程序。 在微信首页往下拉会显示最近使用过的小程序,点击即可进入 也可以直接搜索使用过的小程序的名字找到小程序。 从小程序后台获取专属的二维码,制作成海报并彩印出来,张贴在线下门店显眼位置,引导客户扫码进入,这也是最重要的入口。 2.优惠券 添加优惠券 打开超级助理APP点击服务—营销中心—优惠券管理—添加优惠券 编辑优惠券 输入相应的优惠券信息点击提交即可。 优惠券类型分为四种:优惠券、计次券、结伴券和折扣券。 需要注意的是目前推广方式仅支持用户领取 优惠券也可以称之为满减券,是最常用的优惠券类型。可以满足企业营销最基本的需要。比如可设置若干100元的新客体验券,满388减100。 面额:优惠券可抵扣的额度 满元使用:满足多少额度才能使用的限制条件。 推广方式:目前只支持用户领取,后续将支持二维码发放,让客户扫码领取。开始领取时间和结束领取时间:能够领取优惠券的时间,领取之后,即使过了优惠券领取时间,依然可以使用。 生效时间和失效时间:一般生效时间等于领取时间,但失效时间一定要比结束时间晚一点。 领取页面在小程序首页

半天工程序操作指南

一.实名登记完整流程 二.半天工程序操作指南 (一)主页(功能简介) 半天工程序了实现工地现场的务工人员实名登记管理、实名考勤管理、工资发放信息公示和其他系统管理功能。 (二)专户信息登记 1.管理工程 左键单击【专户信息登记】→【管理工程】,点击项目名称左边的图标,可查看项目专户信息,该信息不可更改,如需更改请联系半天工客服人员。

2.基本信息 左键单击【专户信息登记】→【基本信息】,可填写项目的基本信息。 注意:请程序操作人员(劳资专管员)正确填写本人身份证号,同时关注半天工微信公众号,在微信号内绑定个人身份证号码即可接收工人登记信息提醒。 3.微信用户管理 左键单击【专户信息登记】→【微信用户管理】,填写人员身份证信息,添加多个微信用户,关注微信公众号并绑定后即可接收工人登记信息提醒。 (三)实名登记管理 注意:务工人员实名制登记时,请严格按照【用工单位登记】→【务工班组登记】→【务工人员实名制进场登记】的顺序来操作。 1. 用工单位管理

左键单击【实名登记管理】→【用工单位管理】,填写用工单位信息。 2. 务工班组登记 左键单击【实名登记管理】→【务工班组登记】,添加务工班组信息(请准确选择务工班组所属企业)。如需删除或修改务工班组信息,请点击班组名称左边图标进行编辑操作。 3. 务工人员实名制进场登记 注意:务工人员实名制登记进场有两种操作方法,一是在【实名登记管理】→【务工人员实名制进场登记】界面进行人员进场登记,二是在【实名登记管理】→【工人花名册】界面进行人员进场登记。这里先介绍第一种方法,第二种方法在下面会介绍。 (1)左键单击【实名登记管理】→【务工人员实名制进场登记】,点击左侧的[全部班组] →[xxx单位] →[xxx班组],然后点击右侧的[进场登记],开始进场登记操作。

智昂小程序商城使用手册

智昂小程序商城使用手册 什么是智昂 智昂基于云服务模式向商户提供强大的小程序商城系统和完整的移动零售解决方案,并致力于为广大商家、消费者提供好用、强大的品牌展示工具。携手智昂小程序商城共掘万亿市场。 企业为什么使用小程序 移动互联网的趋势 据微信官方数据,2017年微信用户数达8.89亿,涵盖各年龄阶层的人群。腾讯自2017年1月份推出微信小程序以来,一直将其作为重点扶持对象,小程序独有的稳定性及兼容性为用户提供了完美流畅的体验。 除此之外,腾讯为小程序开放多个流量入口,打破了以往用户只能通过公众号了解商家的局限。许多商家及开发者纷纷转战小程序市场。 智昂平台优势 操作简洁 智昂小程序商城平台的管理界面简单易用、操作方便,大量人性化设计,一分钟开启微信营销,无需安装任何软件,全自动“云”平台。 功能强大 通过智昂平台,商家可以收集小程序商城日常访客数据、首页装修版块不受限,彻底打破常规手机端商城装修通俗单一的传统,让商家能够更完美的展示品牌价值。 专业团队 一站式管理,平台支持,强大精英团队提供专业的技术支持,专属客服7*12小时实时在线为您提供专业指导。 常见问题 使用智昂小程序商城需要什么条件? 首先您需要注册一个微信小程序账号,并确保其已通过认证,同时开通微信支付功能,如您的商城不需要支付功能,则无需开通微信支付功能。(微信官方收取小程序账号认证服务费为300元/年,微信支付功能服务费为300元/年) 智昂商城是否收取交易手续费? 客户在您商城中交易的一切资金,均为实时直达您的微信账户,智昂小程序商城平台只保证您的交易安全,不做交易干涉,更不收取任何交易手续费。(微信官方收取%0.6资金提现手续费)

资兴消费小程序操作指南商户端

“资兴消费”小程序操作指南(商户端) 说明: 1.“资兴消费”小程序是基于微信APP使用,使用前请确保手机已经安装微信,并且能够正常使用。 2.小程序的使用群体为资兴市公职人员、在资兴市注册登记的商户(主要为餐饮住宿、商业零售、扶贫惠农、家政服务、教育培训等第三产业领域商户)及资兴市贫困户使用。 3.以下功能介绍仅从商户者及贫困户(收款者)角度介绍小程序使用方法。 使用说明: 商户端“资兴消费”小程序主要功能有:激活、固定收款码、设置金额收款、收入明细、结算明细、个人信息等信息。 一、进入小程序 进入小程序主要有五种途径: (一)首页搜索 打开微信首页,点击右上角放大镜图标,输入“资兴消费”,点击下边自动出现的“搜一搜”搜索“资兴消费”,会跳出搜索结果,选择“资兴消费-小程序”,即可进入小程序

页面。 (二)发现页搜索 打开微信,点击微信下方的发现,点击“搜一搜”,进入搜一搜页面,在文本框中输入“资兴消费”后点击搜索,进入搜索结果页面,选择“资兴消费-小程序”,即可进入小程序页面。 (三)直接扫码 打开微信扫一扫,直接扫码下面小程序码或二维码,即

可打开“资兴消费”小程序。 (四)若之前使用过“资兴消费”小程序,可以直接在微信首页向下拉动列表,即可打开最近使用过的小程序页面,点击对应的“资兴消费”小程序即可进入小程序。 (五)若之前使用过“资兴消费”小程序,可以在“发现”页,点击“小程序”进入小程序列表,点击对应的“资兴消费”小程序即可进入小程序。

二、激活 首次打开小程序后,会提示用户公开信息授权,请点击“确定”按钮,提示申请获取权限时,请点击“授权登录”按钮,提示获取昵称与头像时,请点击“允许”按钮,提示获取位置信息时,请点击允许,同意以上授权后,方可正常使用小程序。

小程序使用说明文档

小程序使用说明文档 1.登录角色: 本次小程序主要支持的登录角色有:代理商、业务员两种角色 2.功能模块: 本次一期小程序主要实现的功能有三个,第一个商户经营状况查询;第二个商户预警提醒功能;第三个数据罗盘。 (1)商户经营状况 商户经营状况中,可以查看到所登录角色下属的所有活跃商户的交易状况(如果某个商户某一天一条交易记录都没有,那么它不会出现在当天的经营状况列表里面) 商户经营状况可以按照商户名查询某一个商户的经营状况;也可以按照具体某一天,或者按月来查询下属商户的交易状况;当然,这两个条件是可以组合使用的,你可以查询下属商户某一天或者某一个月份的经营情况! (2)商户预警 预警提醒功能分两个页签:“预警信息”和“等待确认”,都可支持按照商户名进行搜索 预警提醒中会显示登录角色下属的所有昨天交易量相对前天有所下降的商户,并且会按照下降比例从高到低的顺序进行排序。在预警提醒中,可以预警商户进行操作。 对于处于正常波动范围内的商户,点击长按,在弹出框中点击“忽略”,即可从预警信息列表中清楚该数据。

对于下降比例不正常的商户,点击长按,在弹出框中选择“等待确认”,即可把该条记录添加到等待确认列表中(预警列表中的数据每天都会刷新,所以请务必记得把异常商户及时添加到等待确认列表!)。 等待确认列表列表中显示当前登录角色从预警信息列表中添加过来的所有商户数据,在改列表中可以对商户进行处理。 对于不小心误操作过来的商户,可以点击长按,选择“正常”,从该列表中清楚该条数据。 对于无法挽回的商户,点击长按,在弹出框中选择“确认流失”,填写流失原因说明(必填!)后可从该列表中移出该条数据。 对于已经做出处理并挽回的商户,点击长按,在弹出框中选择“确认处理”,填写处理方法(必填)后,可从该列表中移出该记录。 对于所有添加到等待确认列表中的商户,具体的处理方法和处理说明记录,都有在数据库做记录。 (3)数据罗盘 数据罗盘主要是展示当前登录角色下的所有商户的交易情况的一些汇总信息。如:昨日交易总金额、较上周昨日同比增长或下降比例,昨日交易总笔数、较上周昨日同比增长或下降比例,累计开户数、本月新开户数;以及下属商户的星级占比饼图。 昨日交易总金额、较上周昨日同比增长或下降比例:昨日交易金额是指当前登录角色昨天的首款总额;较上周昨日同比增长或下降比例是指,昨天的交易总额和上周的同一天(如昨天是周二,就和上周二进行比较)的交易总额的上浮或下降比例[(昨天交易金额-上周昨日交易金额)/上周昨日交易金额] 昨日交易总笔数、较上周昨日同比增长或下降比例:比较方式与昨日交易总金额一样,只是以笔数为统计单位。 累计开户数和本月新开户数:累计开户数是当前登录角色下属所有的商户个数;本月新开是指进件日期为当前月份的商户个数。 星级排行:即后台的商户星级排行功能以饼图形式的展现,类别“其它”是指暂时没有星级的

微信小程序的计指南和建议

微信小程序的计指南和建议 基于微信小程序轻快的特点,拟定了小程序界面设计指南和建议。设计指南建立在充分尊重用户知情权与操作权的基础之上。旨在微信生态体系内,建立友好、高效、一致的用户体验,同时最大程度适应和支持不同需求,实现用户与小程序服务方的共赢。 一、友好礼貌 为了避免用户在微信中使用小程序服务时,注意力被周围复杂环境干扰,小程序在设计时应该注意减少无关的设计元素对用户目标的干扰,礼貌地向用户展示程序提供的服务,友好地引导用户进行操作。 重点突出 每个页面都应有明确的重点,以便于用户每进入一个新页面的时候都能快速地理解页面内容,在确定了重点的前提下,应尽量避免页面上出现其他干扰项影响用户的决策和操作。 二、清晰明确 一旦用户进入我们的小程序页面,我们就有责任和义务清晰明确地告知用户身在何处、又可以往何处去,确保用户在页面中游刃有余地穿梭而不迷路,这样才能为用户提供安全的愉悦的使用体验。 导航明确,来去自如

导航是确保用户在网页中浏览跳转时不迷路的最关键因素。导航需要告诉用户,我在哪,我可以去哪,如何回去等问题。首先在微信系统内的所有小程序的全部页面,均会自带微信提供的导航栏,统一解决我在哪,如何回去的问题。在微信层级导航保持体验一致,有助于用户在微信内形成统一的体验和交互认知,无需在各小程序和微信切换中新增学习成本或改变使用习惯。 三、便捷优雅 从PC时代的物理键盘鼠标到移动端时代手指,虽然输入设备极大精简,但是手指操作的准确性却大大不如键盘鼠标精确。为了适应这个变化,需要开发者在设计过程中充分利用手机特性,让用户便捷优雅的操控界面。 减少输入 由于手机键盘区域小且密集,输入困难的同时还易引起输入错误,因此在设计小程序页面时因尽量减少用户输入,利用现有接口或其他一些易于操作的选择控件来改善用户输入的体验。 统一稳定 除了以上所提到的种种原则,建议接入微信的小程序还应该时刻注意不同页面间的统一性和延续性,在不同的页面尽量使用一致的控件和交互方式。

软件使用说明书模板

(仅供内部使用) 文档作者:_____________________ 日期:___/___/___ 说明书校对:_____________________ 日期:___/___/___ 产品经理:_____________________ 日期:___/___/___ 请在这里输入公司名称 版权所有不得复制

软件使用说明书模板 1引言 1 .1编写目的 编写本使用说明的目的是充分叙述本软件所能实现的功能及其运行环境,以便使用者了解本软件的使用范围和使用方法,并为软件的维护和更新提供必要的信息。 1 .2参考资料 略 1 .3术语和缩写词 略 2 软件概述 2 .1软件用途 本软件的开发是为具有电能质量仪表,可以获取电能数据的技术人员提供一个有利的分析工具。 2 .2软件运行 本软件运行在PC 及其兼容机上,使用WINDOWS 操作系统,在软件安装后,直接点击相应图标,就可以显示出软件的主菜单,进行需要的软件操作。 2 .3系统配置 本软件要求在PC 及其兼容机上运行,要求奔腾II以上CPU,64兆以上内存,10G 以上硬盘。软件需要有WINDOWS 98 操作系统环境。 2 .4软件结构 略 2 .5软件性能 略 2 .6输入、处理、输出 2 .6.1输入 略 2 .6.2处理 略 2 .6.3输出 分析数据为: 略

图表有: 略 3 软件使用过程 3 .1软件安装 直接点击软件的安装软件SETUP.EXE ;然后按照软件的提示进行。 3 .2运行表 略 3 .3运行步骤 略 3 .4运行说明 略 3 .4.1控制输入 按照软件的说明,将测试数据加入到软件中;具体过程如下: 略 3 .4.2管理信息 软件运行过程中的密码键入: 略 3 .4.3输入输出文件 略 3 .4.4输出报告 略 3 .4.5输出报告复制 略 3 .4.6再启动及恢复过程 略 3 .5出错处理 软件运行过程中可能雏形的出物及处理如下: 略 3 .6非常规过程 如果出现不可能处理的问题,可以直接与公司的技术支持人员联系:略

小程序客服使用教程

小程序客服 一、步骤 1、第一步 开发——开发设置——消息推送——启用——管理员扫码

第二步绑定客服人员 使用网页版与移动端小程序客服工具前,小程序管理员需在小程序后台完成客服人员的绑定。目前小程序支持绑定不多于100个客服人员。

二、客服工具 1、移动端客服小助手 已被绑定的小程序客服人员可微信搜索“客服小助手”或扫码登录客服小助手小程序,并选择对应的小程序帐号,登录后即可看到与小程序对话的用户,可选择接入对话。 切换客服状态 点击在线状态,可以选择在线状态、离开状态:选择在线状态后,即使退出客服小程序,仍可在“服务通知”中接收到用户咨询的消息提醒;选择离开状态后,将无法收到客服消息与消息提醒。 接收与发送消息 首次打开小程序后,会自动接入客服消息,后续有新的客服消息,可点击顶部接

入栏进行接入;已经接入的会话,客服人员可以在48小时内和用户进行对话,目前支持发送文本、图片类型的消息。 2、PC端微信公众平台网页客服 已被绑定的小程序客服人员可扫码登录微信公众平台网页版客服工具,并选择对应的小程序帐号,登录后即可看到与小程序对话的用户,可选择接入对话。 切换客服状态 点击在线状态,可以选择在线状态、离开状态或退出登录

接收消息 手动接入:客服人员上线后,点击“待接入”,即可在“待接入”列表中,手动接入待回复的对话 自动接入:当待接入的对话太多时,可以在设置/接入设置中,开启自动接入重新接入:退出登录,或对话超过半小时,需要重新接入,激活对话 发送消息 已经接入的会话,客服人员可以在48小时内和用户进行对话,目前支持发送文本、图片类型的消息。

微信小程序入门指南

目 录 关于作者 (3) 前言 (5) 第一节 什么是小程序? (7) 第二节 小程序将给我们带来什么改变 (12) 第三节 小程序上手案例 (18) 知了交通 (19) 剁手吗 (24) 知了地铁 (32) 解忧室 (36) 第四节 如何转行小程序开发? (41) 第五节 如何拥有自己的小程序? (45) 如何注册微信小程序 (46) 如何搞定微信认证? (52) 如何完善小程序信息? (59) 开发者工具怎么用? (65) 小程序的审核与发布 (74) 第六节 小程序官方文档解读 (83) 开发文档解读 (84) 设计文档解读 (94) 运营文档解读 (104) 第七节 电商类小程序开发教程 (112) 如何做轮播图 (113) 如何做商品列表 (123) 数据加载和图文排版 (134) 写在最后 (148) 附录 (149) 小程序大事记 (149)

关于作者 爱范儿是首批获得微信小程序内测资格的200 个公司之一,也是全球第一个开发出微信小程序的公司。 知晓程序,是爱范儿旗下专注小程序生态的新品牌。 我们提供最全面、新鲜的小程序资讯、观点、教程、Demo、活动等内容和服务,在这里你能了解到关于小程序的一切。 我们还跟全国各地的小程序关注者开展了深入交流,形成了面向小程序开发者的未来小程序·黑客马拉松/面向非技术从业人员(产品/运营/市场等)的未来小程序·workshop/面向小程序爱好者的未来小程序·MindTalk 的活动矩阵。 目前,知晓程序共包含四大版块: l知晓程序微信公众号:小程序资讯媒体 l知晓程序商店:小程序应用商店; l知晓程序社区:小程序交流平台; l知晓程序BaaS:小程序后端服务平台。

Win32程序快速入门指南

Win32程序快速入门指南 1.程序说明 示例程序放在Win32ShapeOrg中 1.1_tWinMain _tWinMain是程序入口。 while (GetMessage(&msg, NULL, 0, 0))开始为消息处理循环。 如果程序运行到此处将进入一个消息响应过程,即如果有消息就会进入消息响应函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 1.2全局初始化 如果要做全局初始化可以在tWinMain函数中while (GetMessage(&msg, NULL, 0, 0))前1.3消息响应机制 win32程序是基于消息响应的,最核心的模块是消息响应函数 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 消息是依附在某个窗口的。其中hWnd是窗口句柄,windows程序里,每一个窗口都有一个HWND类型的句柄用于标识这个窗口。 message是UINT类型的消息,实质上整数,消息的其它信息包含在wParam和lParam中 1.4绘制函数 WM_PAINT是绘制消息,所有和绘制相关的代码都放在WM_PAINT消息响应部分(具体在hdc = BeginPaint(hWnd, &ps);和EndPaint(hWnd, &ps);之间),win32所有绘制函数都带有一个HDC类型设备上下文句柄的参数。 InvalidateRect(hWnd, NULL, true);语句会发出绘制消息。如果需要更新绘制画面,就可以调用此语句。 Windows绘制机制的基础是图像设备交互(GDI,Graphics Device Interface)。 Brush是用来填充的刷子,绘制的东西是实心的。Pen相当于画笔,用来描述绘制直线曲线时的颜色粗细样式等等。如果不做设置,系统会提供默认的设置。 直线和曲线函数在这里,这是一个直线段的例子。 //显示文字 char cMessage[128]; sprintf(cMessage, "%d, %d", g_xPos, g_yPos); SetBkMode(hdc, TRANSPARENT); //设置背景透明显示模式 TextOut(hdc, g_xPos+10, g_yPos-10, cMessage, strlen(cMessage)); //实心椭圆 int r = 9; Ellipse(hdc, g_xPos-r, g_yPos-r, g_xPos+r, g_yPos+r); //当前位置坐标&位置+直径: //空心椭圆 MoveToEx(hdc, g_xPos+r, g_yPos, 0); AngleArc(hdc, g_xPos, g_yPos, r, 0, 360); //画线

软件使用指南

MATLAB 软件使用指南 2009年3月 中国科学院计算机网络信息中心超级计算中心

目录 MATLAB 软件使用指南 (1) 目录 (2) 1. 软件介绍 (3) 2. 软件的安装与测试 (4) 2.1 安装目录及安装信息 (4) 2.2 测试结果 (5) 3. 软件的运行使用方法 (13)

1. 软件介绍 MATLAB 是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。使用 MATLAB,您可以较使用传统的编程语言(如C、C++ 和 Fortran)更快地解决技术计算问题。 MATLAB 的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用MATLAB 函数集)扩展了 MATLAB 环境,以解决这些应用领域内特定类型的问题。 MATLAB 提供了很多用于记录和分享工作成果的功能。可以将您的 MATLAB 代码与其他语言和应用程序集成,来分发您的 MATLAB 算法和应用。 主要功能 此高级语言可用于技术计算 此开发环境可对代码、文件和数据进行管理 交互式工具可以按迭代的方式探查、设计及求解问题 数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等 二维和三维图形函数可用于可视化数据 各种工具可用于构建自定义的图形用户界面 各种函数可将基于 MATLAB 的算法与外部应用程序和语言(如C、C++、Fortran、Java、COM 以及 Microsoft Excel)集成 更多详细信息,请参考以下网页: https://www.doczj.com/doc/5210903144.html,/products/matlab/description1.html

HPDS2017教程程序使用说明

公路路面设计程序系统(HPDS2017)使用说明 本说明由十一个部分和四个附件组成,它们是: 一、系统总说明 ----------------------------------------------------------------------- 1 二、系统主菜单窗口使用说明 ----------------------------------------------------------- 5 三、改建路段留用路面结构顶面当量回弹模量计算程序(HOC)使用说明----------------------- 6 四、沥青路面设计与验算程序(HAPDS)使用说明 ------------------------------------------ 8 五、路基验收时路段内实测路基顶面弯沉代表值计算程序(HOCG)使用说明-------------------- 15 六、路面交工验收时路段内实测路表弯沉代表值计算程序(HOCA)使用说明-------------------- 17 七、改建路段原路面当量回弹模量计算程序(HOC1)使用说明-------------------------------- 19 八、新建单层水泥混凝土路面设计程序(HCPD1)使用说明 ---------------------------------- 21 九、新建复合式水泥混凝土路面设计程序(HCPD2)使用说明 -------------------------------- 28 十、旧混凝土路面上加铺层设计程序(HCPD3)使用说明 ------------------------------------ 33 十一、基(垫)层或加铺层及新建路基交工验收弯沉值计算程序(HCPC)使用说明 ------------- 38 附件一、沥青路面材料代码与材料名称对照表 --------------------------------------------- 40 附件二、水泥混凝土路面基(垫)层材料代码与材料名称对照表 ----------------------------- 43 附件三、版权声明 --------------------------------------------------------------------- 44 附件四、作者简介 --------------------------------------------------------------------- 44 现分别叙述如下: 一、系统总说明 1.本系统是根据新发行的《公路沥青路面设计规范》JTG D50-2017和已发行的《公路水泥混凝土路面设计 规范》JTG D40-2011的有关内容编制的,共包括如下九个程序: (1)改建路段留用路面结构顶面当量回弹模量计算程序HOC (2)沥青路面设计与验算程序HAPDS (3)路基验收时路段内实测路基顶面弯沉代表值计算程序HOCG (4)路面交工验收时路段内实测路表弯沉代表值计算程序HOCA (5)改建路段原路面当量回弹模量计算程序HOC1 (6)新建单层水泥混凝土路面设计程序HCPD1 (7)新建复合式水泥混凝土路面设计程序HCPD2 (8)旧混凝土路面上加铺层设计程序HCPD3 (9)基(垫)层或加铺层及新建路基交工验收弯沉值计算程序HCPC 2.系统的特点 (1)采用Visual Basic 6.0 for Windows 语言编程,在Windows系统下运行,有良好的用户界面; (2)功能齐全,凡公路路面设计与计算所需的程序应有尽有; (3)计算速度快,精度高;

微信小程序运营规则

微信小程序平台运营规 一、原则及相关说明 微信最核心的价值,就是连接——提供一对一、一对多和多对多的连接方式,从而实现人与人、人与智能终端、人与社交化娱乐、人与硬件设备的连接,同时连接服务、资讯、商业。 微信团队一直致力于将微信打造成一个强大的、全方位的服务工具。在此基础上,我们推出了微信小程序这个产品,提供给微信小程序的开发者在微信搭建和实现特定服务、功能的平台。通过全面开放的能力,我们将更多连接的可能给予企业和服务提供者,并为微信小程序提供基础的接入能力、运营环境和规则体系,进而帮助更多的企业和服务提供者建立自己的品牌,将商业机会带给整个微信产业链。 在开始微信小程序的开发前,我们希望微信小程序开发者(以下也称为“你”)已经仔细阅读了《微信小程序接入指南》、《微信小程序设计规》、《微信小程序开发指南》等;同时,我们也为你准备了微信小程序平台常见拒绝情形。希望这些指南和规,能够一定程度上帮助你解决开发、运营微信小程序过程中所遇到的疑问。 我们希望你提交的微信小程序,能够符合微信团队一直以来的价值观,那就是:一切以用户价值为依归、让创造发挥价值、好的产品是用完即走,以及让商业化存在于无形之中。在切实符合用户的合理需求和利益的前提下,通过微信小程序所提供的功能和服务,为海量微信用户提供具有持续价值和高品质的服务。我们期待你来提交你的微信小程序。 二、具体运营规 使用微信小程序平台的服务,你必须阅读并遵守《微信小程序平台服务条款》,以及腾讯为此制定的专项规则等。本运营规是在上述协议及规则基础上进行解释和说明,相关容旨在帮助你更加清晰地理解和遵守相关协议和规则,以便能够更加顺利地在微信小程序平台进行运营,而不是修改或变更上述协议及规则中的任何条款。如果我们认为你的微信小程序违反了我们的条款、相关平台规则或法律法规,或对微信公众平台、微信开放平台造成了影响,则微信有权对你的微信小程序采取强制措施,包括但不限于限制你的微信小程序访问平台功能、下架小程序、要求删除数据、终止协议等。 1.注册提交规 1.1提供给用户可以联络到开发者的或电子等有效联系方式。 1.2提供给平台联络到开发者的管理员微信号,并保证该微信号真实有效。 1.3你所提交的微信小程序,不得关联至你不具有完整合法权益或不具备完整授权的、应用程序、产品或服务等。

GRRM 程序指南

GRRM 1.00
Chemistry is a wonderful world with lots of unexplored materials, which is producible from ca. one hundred kinds of chemical elements. More than thirty millions of compounds have already been known, and now two millions of new chemical compounds are produced annually. Invention and discovery of chemical reactions among compounds have extensively been made by chemists. Eighty years ago, when quantum mechanics was discovered, all problems in chemistry seemed to be insolvable. Equations for chemical problems are so complex that many theoreticians had abandoned to solve the problems at that time. However, some theoretical chemists had continually made efforts to improve approximation techniques solving chemical problems until many problems could have been solved effectively by means of electronic computers and computational techniques. By virtue of recent developments, the range of quantum chemical treatments has rapidly been widened so that we are now able to apply them to various chemical problems. A theoretical technique based on quantum chemical calculations has made it possible to determine a stable geometrical structure and its energy in good accuracy for a chemical system without experiments. This is called “structure-optimization”, which can be used by anyone in nowadays. However, it requires an initial guess, which should be made on the basis of our experience or chemical intuition. Since no general method exists to find out suitable initial guesses, one cannot avoid try-and-errors before one finally obtains some valuable conclusions such as new compounds or new chemical reaction pathways. It follows that a global search of isomers and reaction pathways among them has never been accomplished except for very small systems not larger than a four atom system. It has been an unexplored summit to perform a global search of isomers and inter-conversion reaction pathways among them for a chemical system composed of more than four atoms. 1 GRRM 1.00 / Ohno&Maeda

实验五SRIM程序使用指南

实验五 SRIM计算重离子在材料中的剂量分布 一、实习目的和要求 (一)实习目的: 1、熟悉SRIM程序的基本使用方法,以及在辐射剂量和防护计算中的应用。 2、通过此程序仿真模拟重带电粒子入核的过程,获得离子在材料中的剂量分布。 3、通过进一步自学,利用SRIM程序解决实际工作中的碰到的一些实际问题。 (二)实习要求: 1、掌握SRIM软件的基本组成、操作方法; 2、利用SRIM对离子在不同物质中的射程进行计算分析; 3、对质子在不同固体靶中的径迹及剂量分布进行简单的计算,并对计算结果进行分析并绘图,得出结论。 二、SRIM程序简介 1、SRIM软件介绍 SRIM是模拟计算离子在靶材中能量损失和分布的程序组。它采用Monte Carlo方法,利用计算机模拟跟踪一大批入射粒子的运动。粒子的位置、能量损失以及次级粒子的各种参数都在整个跟踪过程中存储下来,最后得到各种所需物理量的期望值和相应的统计误差。该软件可以选择特定的入射离子及靶材种类,并可设置合适的加速电压。可以算不同粒子,以不同的能量,从不同的位置,以不同的角度入射到靶中的情况。SRIM中包含一个TRIM运算软件。 TRIM(Transport of Ions in Matter)是一个非常复杂的程序。它不仅可以描述离子在物质中的射程,还可以详细计算注入离子在慢化过程中对靶产生损伤等其他信息。它可以使用动画让你看到离子注入到靶中的全过程,并给你展示级联反冲粒子和靶原子混合在一起的情形。为了精确估计每个离子和靶原子间相遇时的物理情形,程序只能一次对一个粒子进行计算。这样的话,计算可能消耗可观的时间——计算每个离子花费的时间从一秒到几分钟不等。而精确度由模拟采用的离子数来决定。典型的情况是,应用1000个离子进行计算将得到好于10%的精确度。 软件特点:

微信小程序安徽省大学生就业服务平台网络签约使用指南

微信小程序(安徽省大学生就业服务平台) —网络签约使用指南 一、网络签约—协议书签约指南 第一步 毕业生: 1、微信搜索小程序“安徽省大学生就业服务平台”,打开后选择本校并输入“姓名+学号+身份证号”登录(若出现无法登录的情况,请联系辅导员老师解除原来的绑定)。 2、在“我的”中打开“二维码名片”,向用人单位发送二维码,并告知用人单位使用微信扫描“二维码名片”。 备注:在签约前请务必在“派遣”“生源信息维护”确认信息与本人信息完全一致,否则不能签约。

第二步 用人单位: 打开微信,使用扫一扫功能,扫描毕业生提供的二维码名片后,会出现填写签约信息页面;首先验证毕业生信息,确认下一步后,填写本单位基本信息和联系方式,并选择签约毕业生的工作岗位,然后点击“确认签约”后提交。 第三步 辅导员: 登录省就业派遣系统,依次点击“就业派遣”、“就业协议书”、“打印申请登记表”,会出现已经提交的协议书打印申请。 点击学生姓名,进入审核页,点击“审核通过”或“审核不通过”

完成审核。 第四步 毕业生: 正式开学后,待辅导员正式通知后,毕业生自行线下与用人单位

对接,用学校发放的纸质《三方协议》或《劳动合同》、《就业证明函件》进行正式签约。 二、网络签约—协议书解约指南 第一步 毕业生: 登录微信小程序—安徽省大学生就业服务平台,点击“派遣”,进入“解除就业协议申请”,上传解约申请材料(仅需上传与用人单位达成的解约协议图片即可,且用人单位务必盖公章,否则无效)。

第二步 辅导员: 登录省就业派遣系统,点击最上方主菜单“就业派遣”,再点击左下角“解约申请登记表”,点击申请学生姓名,进入审核页,点击“同意毁约”或“不同意毁约”即可。 备注:辅导员审核时,应认真查看毕业生提交的解约申请材料内容是否清晰,且如未盖用人单位公章的材料一律无效,不同意毁约。 第三步 毕业生: 辅导员老师系统同意毁约后,毕业生可重新签约。

标准操作流程(SOP)编写指南

标准操作流程(SOP)编写指南 (XMABR20-1-2012.内部) 1 总则 (1) 目的 (1) 范围 (1) 篇章 (1) 2 术语和定义 (1) 标准操作流程(SOP) (1) 关键控制点 (1) 3 SOP编写原则 (1) 4 SOP编写要点 (2) SOP编制流程 (2) SOP文件分类及审批要求 (2) SOP的组成要求、模版 (3) 5 附则 (9) 1总则 1.1目的 为规范标准操作流程(SOP)的编写,根据相关标准化的文件要求,及结合本公司的特点,特制定本编写指南。 1.2范围 本指南适用于XMABR集团成员企业。 1.3篇章 本指南共分为5章,2个附录。 2术语和定义 2.1标准操作流程(SOP) SOP,是Standard Operation Procedure三个单词中首字母的大写,即标准作业流程,是将某一事件的标准操作步骤和要求以统一的格式描述出来,用来指导和规范日常的工作;是对某一程序中的关键控制点进行细化、量化和最优化的操作层面的程序。 2.2关键控制点 能够控制并使过程中的不利因素得到预防、消除或降低到可接受水平的某一点、某一步骤或程序。 3SOP编写原则 SOP编写须具备条理化、规范化、形象化;清晰的逻辑性;准确性、精确性、可操作性;以及便于核查或考核。 4SOP编写要点

4.1SOP编制流程 SOP编制涉及的相关部门需要履行的职责,及具体的操作流程依此编制流程图执行。 SOP编制流程图 1 4.2SOP文件分类及审批要求 4.2.1SOP的分类 公司依据不同管理需求将SOP分为生产、技术与质量、环境与安全、研发、采购、营销行政管理、财务、环境及职业健康、信息、检测、工程设计服务、标准化及内部审核等类别。 4.2.2SOP的审批 各类型的SOP的审核审批权限按表1规定执行。

相关主题
文本预览
相关文档 最新文档