⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 posoracle.pc

📁 一个不错的POS系统
💻 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 + -