📄 posoracle.pc
字号:
#include <sqlca.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "posOracle.h"
#include "pub.h"
int conn_db(char * user , char * password ,char db)
{
EXEC SQL WHENEVER SQLERROR GOTO conn_err;
EXEC SQL CONNECT :user IDENTIFIED BY :password;
makelog("debug.log","connect success!");
return 0;
conn_err:
EXEC SQL WHENEVER SQLERROR CONTINUE;
/*EXEC SQL ROLLBACK RELEASE;*/
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -1;
}
int db_disconnect()
{
EXEC SQL WHENEVER SQLERROR CONTINUE;
/*EXEC SQL ROLLBACK RELEASE;*/
EXEC SQL COMMIT WORK RELEASE;
makelog("debug.log", "disconnect from database");
return 0;
}
int get_data(int empno)
{
EXEC SQL BEGIN DECLARE SECTION;
VARCHAR name[12];
/*memset(name,0,sizeof(name));*/
int sal;
int deptno;
EXEC SQL END DECLARE SECTION;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL WHENEVER SQLERROR GOTO get_err;
EXEC SQL SELECT ename,sal,deptno INTO :name,:sal,:deptno FROM EMP WHERE empno=:empno;
/* name.len=strlen(name.arr);*/
name.arr[name.len]='\0';
/*printf("name=%s,sal=%d,deptno=%d",name.arr,sal,deptno);*/
return 0;
not_find:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
makelog("debug.log","no data found");
return -1;
get_err:
EXEC SQL WHENEVER SQLERROR CONTINUE;
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -2;
}
int login(char * userName,char * password,int key)
{
char passwd[13];
char staff_id[7];
char staff_name[16];
int staff_type;
short sstaff_type;
short spasswd;
short sstaff_name;
memset(passwd,0,sizeof(passwd));
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO logerr;
EXEC SQL SELECT staff_pwd,staff_id,staff_name,staff_type INTO :passwd :spasswd,:staff_id,:staff_name :sstaff_name,:staff_type :sstaff_type FROM STAFF WHERE staff_id=:userName;
Trim(passwd);
Trim(staff_id);
Trim(staff_name);
/* makelog("debug.log","passwd=");
makelog("debug.log",passwd);*/
if(1==key)
{
if(staff_type!=0)
return 2;
}
if(strcmp(password,passwd)==0)
{
strcpy(g_staff_id,staff_id);
strcpy(g_staff_name,staff_name);
g_staff_type=staff_type;
makelog("debug.log","staff_type=");
char tmp[32]={0};
sprintf(tmp,"%d",g_staff_type);
makelog("debug.log",tmp);
return 0;
}
else
return 1;
not_found:
makelog("debug.log","user not found");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
return -1;
logerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
return -2;
}
int get_seq_trans_id()
{
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT seq_trans_id.nextval into :g_trans_id FROM dual;
return 0;
not_found:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
makelog("debug.log","seq_trans_id not_found");
return -1;
sqlerr:
EXEC SQL WHENEVER SQLERROR CONTINUE;
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -2;
}
int get_seq_detail_id()
{
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT seq_detail_id.nextval into :g_detail_id FROM dual;
return 0;
not_found:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
makelog("debug.log","seq_detail_id not_found");
return -1;
sqlerr:
EXEC SQL WHENEVER SQLERROR CONTINUE;
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -2;
}
int getBarInfo(char * barcode)
{
/*BARINFO productinfo;*/
BARINFO productinfo= (struct barinformation *) malloc(sizeof(struct barinformation));
short sproduct_name;
short sunit;
short sspec;
short ssale_price;
short spurchase_price;
short snum;
short sdiscount;
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
/*bar_code,product_name,unit,spec,sale_price,purchase_price,num,discount */
EXEC SQL SELECT * INTO :productinfo->bar_code,:productinfo->product_name :sproduct_name,:productinfo->unit :sunit,:productinfo->spec :sspec,:productinfo->sale_price :ssale_price,:productinfo->purchase_price :spurchase_price,:productinfo->num :snum,:productinfo->discount :sdiscount FROM PRODUCT WHERE bar_code=:barcode;
productinfo->salenum=1;
barInfoList.insert_rear(&barInfoList,(void *)productinfo,sizeof(struct barinformation));
memset(barcode,0,sizeof(barcode));
free(productinfo);
return 0;
not_found:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
makelog("debug.log","get barinfo not find");
free(productinfo);
return -1;
sqlerr:
EXEC SQL WHENEVER SQLERROR CONTINUE;
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
free(productinfo);
return -2;
}
int getSYSTime(char * time)
{
char systime[15];
memset(systime,0,sizeof(systime));
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT to_char(SYSDATE,'YYYYMMDDHH24MISS') INTO :systime FROM dual;
Trim(systime);
strcpy(time,systime);
return 0;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -1;
}
int checkOut()
{
char sale_id[19];
char trans_id[5];
char detail_id[19];
char systime[15];
char barcode[10];
char staff_id[7];
char tmp[40]={0};
int i=0,salenum,num;
/*int sale_state=g_sale_state;*/
NODE * node;
BARINFO barInfo;
float moneypay=0.0f,money=0.0f,moneyreturn=0.0f,moneyreal=0.0f,saleprice=0.0f;
memset(sale_id,0,sizeof(sale_id));
memset(trans_id,0,sizeof(trans_id));
memset(detail_id,0,sizeof(detail_id));
memset(systime,0,sizeof(systime));
memset(barcode,0,sizeof(barcode));
memset(staff_id,0,sizeof(staff_id));
get_seq_detail_id();
strcpy(systime,saleInfo->time);
sprintf(detail_id,"%s%04d",systime,g_detail_id);
sprintf(sale_id,"%s%04d",systime,g_trans_id);
sprintf(trans_id,"%04d",g_trans_id);
moneypay=saleInfo->moneypay;
sprintf(tmp,"saleInfo_moneypay=%f",moneypay);
makelog("debug.log",tmp);
money=saleInfo->money;
moneyreturn=saleInfo->moneyreturn;
moneyreal=saleInfo->money;
strcpy(staff_id,g_staff_id);
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto error;
EXEC SQL INSERT INTO sale(SALE_ID,TRANS_ID,STAFF_ID,SALE_DATE,GIVEN_SUM,REAL_SUM,SALE_MONEY,CHANGE,SALE_STATE) VALUES(:sale_id,:trans_id,:staff_id,to_date(:systime,'YYYYMMDDHH24MISS'),ROUND(:moneypay,2),ROUND(:money,1),ROUND(:money,2),ROUND(:moneyreturn,2),:g_sale_state);
for(i=1;i<=barInfoList.count;i++)
{
node=barInfoList.get_node_by_index(&barInfoList,i);
if (node!=NULL)
{
barInfo=(barinfo *)node->data;
}
saleprice=barInfo->sale_price;
strcpy(barcode,barInfo->bar_code);
salenum=barInfo->salenum;
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto error;
EXEC SQL INSERT INTO sale_detail(DETAIL_ID,SALE_ID,BAR_CODE,NUM,SALE_PRICE,SALE_STATE) VALUES(:detail_id,:sale_id,:barcode,:salenum,ROUND(:saleprice,2),:g_sale_state);
get_seq_detail_id();
sprintf(detail_id,"%s%04d",systime,g_detail_id);
}
makelog("debug.log","checkout found 1");
for(i=1;i<=barInfoList.count;i++)
{
node=barInfoList.get_node_by_index(&barInfoList,i);
if (node!=NULL)
{
barInfo=(barinfo *)node->data;
}
strcpy(barcode,barInfo->bar_code);
salenum=barInfo->salenum;
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto error;
EXEC SQL UPDATE product set num=num-:salenum WHERE bar_code=:barcode;
makelog("debug.log","checkout found 2");
}
EXEC SQL COMMIT;
return 0;
not_found:
makelog("debug.log","checkout not found");
EXEC SQL ROLLBACK;
return -1;
error:
makelog("debug.log","check out error");
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL ROLLBACK;
return -2;
return 0;
}
int hang()
{
char sale_id[19];
char staff_id[7];
char systime[15];
memset(sale_id,0,sizeof(sale_id));
memset(staff_id,0,sizeof(staff_id));
memset(systime,0,sizeof(systime));
strcpy(systime,saleInfo->time);
strcpy(staff_id,g_staff_id);
sprintf(sale_id,"%s%04d",systime,g_trans_id);
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto sqlerr;
EXEC SQL INSERT INTO sale_tmp(sale_id,staff_id) values(:sale_id,:staff_id);
checkOut();
barHang.insert_rear(&barHang,(void *)sale_id,sizeof(sale_id));
EXEC SQL COMMIT;
return 0;
not_found:
EXEC SQL ROLLBACK;
makelog("debug.log","hang not found");
return -1;
sqlerr:
EXEC SQL ROLLBACK;
makelog("debug.log","hang err");
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
return -2;
}
int getHangNum()
{
char sale_id[19];
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto sqlerr;
EXEC SQL DECLARE sale_cursor CURSOR FOR
SELECT sale_id FROM sale_tmp;
EXEC SQL OPEN sale_cursor;
barHang.del(&barHang);
for (;;)
{
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL FETCH sale_cursor INTO :sale_id;
Trim(sale_id);
makelog("debug.log","get hand found");
barHang.insert_rear(&barHang,(void *)sale_id,sizeof(sale_id));
}
EXEC SQL CLOSE sale_cursor;
return 0;
not_found:
makelog("debug.log","get hand not found");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL CLOSE sale_cursor;
return -1;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
return -2;
}
int fetch(char * sale_id)
{
char bar_code[10];
char product_name[32];
char unit[18];
char spec[18];
char trans_id[5];
char staff_id[7];
char sale_date[19];
char tmp[40]={0};
float sale_price;
makelog("debug.log",sale_id);
int sale_state,flag=-100;
float discount;
int salenum;
memset(bar_code,0,sizeof(bar_code));
memset(product_name,0,sizeof(product_name));
memset(unit,0,sizeof(unit));
memset(spec,0,sizeof(spec));
memset(trans_id,0,sizeof(trans_id));
memset(staff_id,0,sizeof(staff_id));
memset(sale_date,0,sizeof(sale_date));
BARINFO productinfo= (struct barinformation *) malloc(sizeof(struct barinformation));
EXEC SQL WHENEVER NOT FOUND goto not_found;
EXEC SQL WHENEVER SQLERROR goto sqlerr;
EXEC SQL DECLARE sale_cursor2 CURSOR FOR
SELECT bar_code,num,sale_price,sale_state FROM sale_detail WHERE sale_id=:sale_id;
EXEC SQL SELECT trans_id,staff_id,to_char(sale_date,'yyyymmddhh24miss') INTO :trans_id,:staff_id,:sale_date FROM SALE WHERE sale_id=:sale_id;
Trim(staff_id);
Trim(sale_date);
g_trans_id = atoi(trans_id);
strcpy(g_staff_id,staff_id);
strcpy(saleInfo->time,sale_date);
EXEC SQL OPEN sale_cursor2;
for (;;)
{
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL FETCH sale_cursor2 INTO :bar_code,:salenum,:sale_price,:sale_state;
flag=1;
Trim(bar_code);
EXEC SQL UPDATE product SET num=num+:salenum WHERE bar_code=:bar_code;
EXEC SQL SELECT product_name,unit,spec,sale_price,discount INTO :product_name,:unit,:spec,:sale_price,:discount FROM PRODUCT WHERE bar_code=:bar_code;
Trim(bar_code);
Trim(product_name);
Trim(unit);
Trim(spec);
strcpy(productinfo->bar_code,bar_code);
strcpy(productinfo->product_name,product_name);
strcpy(productinfo->unit,unit);
strcpy(productinfo->spec,spec);
productinfo->sale_price=sale_price;
productinfo->num=1;
productinfo->discount=discount;
productinfo->salenum=salenum;
sprintf(tmp,"sale_price=%f",productinfo->sale_price);
makelog("debug.log",tmp);
sprintf(tmp,"num=%d",productinfo->num);
makelog("debug.log",tmp);
barInfoList.insert_rear(&barInfoList,(void *)productinfo,sizeof(struct barinformation));
}
EXEC SQL CLOSE sale_cursor2;
EXEC SQL COMMIT;
free(productinfo);
return 0;
not_found:
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL CLOSE sale_cursor2;
makelog("debug.log","fetch not found");
if(flag==1)
{
EXEC SQL DELETE FROM SALE_TMP WHERE sale_id=:sale_id;
EXEC SQL DELETE FROM SALE_DETAIL WHERE sale_id=:sale_id;
EXEC SQL DELETE FROM SALE WHERE sale_id=:sale_id;
EXEC SQL COMMIT;
free(productinfo);
/*getHangNum();*/
makelog("debug.log","fetcheeerrr");
}
return -1;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
return -2;
}
int returnproduct(char * sale_id,char * bar_code,int num)
{
int salenum,flag=-100,n=-999;
float sale_price,realsum,salemoney,discount,price=0.0f;
char systime[40],detail_id[20],trans_id[10],saleid[20],tmp[40]={0};
memset(systime,0,sizeof(systime));
memset(detail_id,0,sizeof(detail_id));
memset(saleid,0,sizeof(saleid));
get_seq_trans_id();
get_seq_detail_id();
getSYSTime(systime);
sprintf(detail_id,"%s%04d",systime,g_detail_id);
sprintf(saleid,"%s%04d",systime,g_trans_id);
sprintf(trans_id,"%04d",g_trans_id);
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT num,sale_price INTO :salenum,:sale_price FROM sale_detail WHERE bar_code=:bar_code AND sale_id=:sale_id;
sprintf(tmp,"num=%d",num);
makelog("debug.log",tmp);
if(num>salenum)
return 3;
EXEC SQL SELECT SALE_PRICE,DISCOUNT INTO :sale_price,:discount FROM PRODUCT WHERE BAR_CODE=:bar_code;
makelog("debug.log","1");
price=-1*sale_price*num*discount;
sprintf(tmp,"price=%f",price);
makelog("debug.log",tmp);
makelog("debug.log",saleid);
n=IsSaleIDInTab(saleid);
if(n==-1)
{makelog("debug.log","2");
EXEC SQL INSERT INTO SALE VALUES(:saleid,:trans_id,:g_staff_id,to_date(:systime,'YYYYMMDDHH24MISS'),:price,:price,:price,0.0f,2);
}
else
{makelog("debug.log","3");
EXEC SQL UPDATE SALE SET given_sum=given_sum+:price,real_sum=real_sum+:price,sale_money=sale_money+:price;
}
makelog("debug.log","4");
EXEC SQL INSERT INTO SALE_DETAIL VALUES(:detail_id,:saleid,:bar_code,:num,:price,2);
makelog("debug.log","5");
EXEC SQL UPDATE PRODUCT SET num=num +:num WHERE bar_code=:bar_code;
makelog("debug.log","6");
EXEC SQL COMMIT;
return 0;
not_found:
makelog("debug.log","return not found");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
EXEC SQL ROLLBACK;
return -1;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
return -2;
}
int IsSaleIDInTab(char * sale_id)
{
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT * FROM SALE WHERE SALE_ID=:sale_id;
return 0;
not_found:
makelog("debug.log","IsSaleIDInTab not found");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
return -1;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
return -2;
}
int GetProductNum(char * bar_code)
{
int num;
EXEC SQL WHENEVER NOT FOUND GOTO not_found;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL SELECT NUM INTO :num FROM product WHERE bar_code=:bar_code;
return num;
not_found:
makelog("debug.log","GetProductNum not found");
EXEC SQL WHENEVER NOT FOUND CONTINUE;
return -1;
sqlerr:
makelog("debug.log",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
return -2;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -