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

📄 db.pc

📁 linux平台下用C开发的一个超市管理系统(结合了ORACLE数据库)
💻 PC
📖 第 1 页 / 共 2 页
字号:
#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 + -