📄 db.pc
字号:
#include"db.h"
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
EXEC SQL INCLUDE sqlca;
/*******************************************************************
功能:创建用户
参数:无
返回值:无
*******************************************************************/
void Creat_User()
{
EXEC SQL CONNECT :"system" IDENTIFIED BY :"manager";
EXEC SQL drop user pos cascade;
EXEC SQL CREATE USER pos identified by pos;
EXEC SQL grant resource,create table,connect to pos;
}
/*******************************************************************
功能:连接数据库
参数:数据库ID,密码
返回值:0成功 非0失败
*******************************************************************/
int ConnectDB(char* userID,char* passwd)
{
EXEC SQL WHENEVER SQLERROR GOTO connect_error;
EXEC SQL CONNECT:userID IDENTIFIED BY:passwd;
return 0;
connect_error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
return -1;
}
/*******************************************************************
功能:断开数据库
参数:数据库ID,密码
返回值:0成功 非0失败
*******************************************************************/
int DisconnectDB()
{
EXEC SQL COMMIT WORK RELEASE;
}
/********************************************************************
功能:查找帐户是否存在
参数:帐户表结构体,帐户名与密码
返回值:0成功 非0失败
*********************************************************************/
int get_account(STAFFS *staff,char * staff_id)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT * into :staff
FROM T_Employee
WHERE Cashier_ID=:staff_id;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:验证登陆
参数:帐户表结构体,帐户名与密码
返回值:0成功 非0失败
***********************************************************************/
int LoginDB(STAFFS *staff,char* staff_id,char* staff_pwd)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT * into :staff
FROM T_Employee
WHERE Cashier_ID=:staff_id and Passwd=:staff_pwd;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
printf("code=%d,str=%s\n",sqlca.sqlcode,sqlca.sqlerrm.sqlerrmc);
/*Err_Log(sqlca.sqlerrm.sqlerrmc);*/
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:通过销售ID获取商品信息
参数:链表,ID
返回值:0成功 非0失败
***********************************************************************/
int getgoods_by_saleID(C_CLASS LINKLIST *mylink,char *saleID)
{
GOODS p;
GOD temp;
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL DECLARE sd_cursor CURSOR FOR
SELECT bar_code,amount FROM t_sales_detail WHERE SALE_ID=:saleID;
EXEC SQL OPEN sd_cursor;
while(1)
{
if (sqlca.sqlcode==0)
{
EXEC SQL FETCH sd_cursor into
:temp.bar_code,:temp.num;
EXEC SQL SELECT * INTO :p FROM t_goods WHERE bar_code=:temp.bar_code;
strcpy(temp.bar_code,p.bar_code);
strcpy(temp.goods_name,p.goods_name);
strcpy(temp.unit,p.unit);
strcpy(temp.spec,p.spec);
temp.sale_price=p.sale_price;
temp.purchase_price=p.purchase_price;
temp.stock=p.stock;
temp.discount=p.discount;
link_insert_rear(mylink,&temp,sizeof(temp));
}
else
break;
}
EXEC SQL CLOSE sd_cursor;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:通过条形码获取商品信息
参数:结构体指针,条形码
返回值:0成功 非0失败
***********************************************************************/
int getgoods_by_barcode(GOODS *temp,char *barcode)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT * INTO :temp
FROM t_goods
WHERE BAR_CODE=:barcode;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
/*Err_Log(sqlca.sqlerrm.sqlerrmc);*/
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:取的4为交易号
参数:交易号
返回值:0成功 非0失败
***********************************************************************/
int get_saleID(char *saleID)
{
char temp_id[5]={0};
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT seq_trans_id.nextval into :temp_id
FROM dual;
strcpy(saleID,temp_id);
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:取得销售明细
参数:交易号
返回值:0成功 非0失败
***********************************************************************/
int get_sale_detailID(char * detailID)
{
char temp_id[5]={0};
EXEC SQL WHENEVER SQLERROR GOTO GET_SEQERR;
EXEC SQL WHENEVER NOT FOUND GOTO NOT_FOUND_SEQ;
EXEC SQL SELECT seq_detail_id.nextval INTO :temp_id From dual;
strcpy(detailID,temp_id);
return 0;
GET_SEQERR:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK RELEASE;
return -1;
NOT_FOUND_SEQ:
return -1;
}
/**********************************************************************
功能:取的库存
参数:交易号
返回值:0成功 非0失败
***********************************************************************/
int getgoods_amount(char *barcode,int num)
{
int i;
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT COUNT into :i
FROM PRODUCT
where BAR_CODE=:barcode;
num=i;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:检查交易号是否存在
参数:交易号
返回值:0成功 非0失败
***********************************************************************/
int check_saleID(char *saleID)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT sale_id INTO :saleID
FROM t_sale
WHERE sale_id=:saleID;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:检查条形码是否存在
参数:销售明细结构体,销售ID,条形码
返回值:0成功 非0失败
***********************************************************************/
int check_barCode(DETAIL *temp,char *saleID,char *barCode)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL SELECT * into :temp FROM t_sales_detail WHERE sale_id=:saleID AND bar_code=:barCode;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:插入销售表
参数:销售结构体
返回值:0成功 非0失败
***********************************************************************/
int Insert_Sale(SALE *sale)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL INSERT INTO t_sale VALUES(:sale->sale_id,:sale->staff_id,:sale->trans_id,
TO_DATE(:sale->sale_date,'YYYYMMDDhh24miss'),
:sale->give_sum,:sale->real_sum,:sale->sale_money,
:sale->change,:sale->sale_state);
EXEC SQL COMMIT;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:插入销售明细表
参数:销售明细结构体
返回值:0成功 非0失败
***********************************************************************/
int Insert_Sale_Detail(DETAIL *detail)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL INSERT INTO t_sales_detail
VALUES(:detail->detail_id,:detail->sale_id,:detail->goods_id,
:detail->num,:detail->sale_price,:detail->sale_state);
EXEC SQL COMMIT;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:更新销售表
参数:销售ID 金额
返回值:0成功 非0失败
***********************************************************************/
int change_sale(char *sale_id,float money)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL UPDATE T_SALE
SET pay_money=pay_money-:money, receive_money=receive_money-:money ,sale_state=-1
WHERE sale_id=:sale_id ;
EXEC SQL COMMIT;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:更新销售明细表
参数:销售明细结构体
返回值:0成功 非0失败
***********************************************************************/
int change_sale_detail(char *sale_id,char *barcode,int num)
{
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL UPDATE t_sales_detail
SET amount =amount-:num ,sales_status=-1
where BAR_CODE=:barcode and sale_id=:sale_id;
EXEC SQL COMMIT;
return 0;
error:
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK ;
return -1;
not_find:
return 1;
}
/**********************************************************************
功能:获取所有商品信息
参数:链表
返回值:0成功 非0失败
***********************************************************************/
int get_all_goods(C_CLASS LINKLIST *mylink)
{
GOODS temp;
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL WHENEVER NOT FOUND GOTO not_find;
EXEC SQL DECLARE product_cursor CURSOR FOR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -