📄 advicebussiness.pc
字号:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sqlca.h>
#include <process.h>
int query_all_after();
int query_all_supply();
int query_suppy();
int insert_into_agreement(char* tCustomerID,char* tProviderID,char* tPartID,float tfPrice,float tfQuantity);
int delete_after(char* customerID,char* partID);
int update_supply(char* tProviderID,char* tPartID,float tPrice,float tQuantity);
void advice_bussiness();
int advice_supply(char* ,char* ,char* ,char* );
extern void bus_Menu();
int query_all_after()
{
EXEC SQL BEGIN DECLARE SECTION;
char customerID[10];
char PartID[10];
char Price[8];
char Quantity[8];
EXEC SQL END DECLARE SECTION;
int total_number = 0;
EXEC SQL DECLARE advice_after_cursor CURSOR FOR SELECT * FROM After;
EXEC SQL OPEN advice_after_cursor;
while(1)
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH advice_after_cursor INTO :customerID,:PartID,:Price,:Quantity;
++total_number;
if( total_number == 1 )
{
printf("\n所有的需求信息如下:");
printf("\n\n--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4s%-10s%-10s%-8s%-8s\n","N","customerID","PartID","Price","Quantity");
printf("--- --------- ------------------- ---------------------------- ----------\n");
}/*if*/
printf("%-4d%-10s%-10s%-8s%-8s\n",total_number,customerID,PartID,Price,Quantity);
printf("--- --------- ------------------- ---------------------------- ----------\n");
}/*while*/
EXEC SQL CLOSE advice_after_cursor;
if(!total_number)
{
printf("WARING:(query_all_after)There is no after part.\t\n\n");
return -1;
}else
return 0; /*success*/
}/*query_all_after()*/
int query_all_supply()
{
EXEC SQL BEGIN DECLARE SECTION;
char providerID[10];
char PartID[10];
char Price[8];
char Quantity[8];
EXEC SQL END DECLARE SECTION;
int total_number = 0;
EXEC SQL DECLARE query_supply_cursor CURSOR FOR SELECT * FROM Supply;
EXEC SQL OPEN query_supply_cursor;
while(1)
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH query_supply_cursor INTO :providerID,:PartID,:Price,:Quantity;
++total_number;
if( total_number == 1 )
{
printf("\n所有的供应信息如下:");
printf("\n\n--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4s%-10s%-10s%-8s%-8s\n","N","providerID","PartID","Price","Quantity");
printf("--- --------- ------------------- ---------------------------- ----------\n");
}/*if*/
printf("%-4d%-10s%-10s%-8s%-8s\n",total_number,providerID,PartID,Price,Quantity);
printf("--- --------- ------------------- ---------------------------- ----------\n");
}/*while*/
EXEC SQL CLOSE query_supply_cursor;
if(!total_number)
{
printf("WARING:(query_all_supply)There is no supply part.\t\n\n");
return -1;
}else
return 0; /*success*/
}/*query_all_supply()*/
void advice_bussiness()
{
EXEC SQL BEGIN DECLARE SECTION;
char customerID[10];
char partID[10];
char Price[8];
char Quantity[8];
EXEC SQL END DECLARE SECTION;
char t;
int total_number = 0;
EXEC SQL DECLARE advice_bussiness_cursor CURSOR FOR SELECT * FROM After;
EXEC SQL OPEN advice_bussiness_cursor;
puts("\t\t推荐交易\n");
/* puts("\n\n以下为所有需求信息:\n");*/
if( query_all_after() ){
printf("WARING:(advice_bussiness)There is no after part.\t\n\n");
puts("没有任何需求信息,返回上级菜单\n");
bus_Menu();
}/*if*/
/* puts("\n\n以下为所有供应信息:\n");*/
if( query_all_supply() ){
printf("WARING:(advice_bussiness)There is no supply part.\t\n\n");
puts("没有任何供应信息,返回上级菜单\n");
bus_Menu();
}/*if*/
printf("\n需要为每项需求推荐供应信息吗?(y/n)>");
t = getchar();
if( t=='n' || t=='N' ){
printf("\n不做处理,点击任意键直接返回上级菜单\n");
getchar();
}else{
while(1)
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH advice_bussiness_cursor INTO :customerID,:partID,:Price,:Quantity;
++total_number;
printf("\n第%d条需求信息如下:\n",total_number);
printf("\n\n--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4s%-10s%-10s%-8s%-8s\n","N","customerID","partID","Price","Quantity");
printf("--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4d%-10s%-10s%-8s%-8s\n",total_number,customerID,partID,Price,Quantity);
printf("--- --------- ------------------- ---------------------------- ----------\n");
if( t = advice_supply(customerID,partID,Price,Quantity) ) {
printf("为%s对于%s的需求共推荐了%d条供应信息\n",customerID,partID,t);
delete_after(customerID,partID);
printf("点击任意键开始下一个推荐\n");
getchar();
}/*if*/
}/*while*/
printf("交易推荐完毕,点击任意键返回上一级菜单!\n");
getchar();
}/*else*/
bus_Menu();
}/*advice_bussiness()*/
int advice_supply(char* tCustomerID,char* tPartID,char* tPrice,char* tQuantity)
{/*成功,返回推荐个数,否则,0*/
EXEC SQL BEGIN DECLARE SECTION;
char customerID[10];
char cPartID[10];
char cPrice[8];
char cQuantity[8];
char providerID[10];
char pPartID[10];
char pPrice[8];
char pQuantity[8];
EXEC SQL END DECLARE SECTION;
int total_number = 0;
int doN = 0;
float cfPrice;
float pfPrice;
float cfQuantity;
float pfQuantity;
char t;
strcpy(customerID,tCustomerID);
strcpy(cPartID,tPartID);
strcpy(cPrice,tPrice);
strcpy(cQuantity,tQuantity);
cfPrice = (float)atof(tPrice);
cfQuantity = (float)atof(tQuantity);
/*printf("%-10s%-10s%-8s%-8s\n",tCustomerID,tPartID,tPrice,tQuantity);
printf("%-10s%-10s%-8s%-8s\n",customerID,cPartID,cPrice,cQuantity);*/
EXEC SQL DECLARE advice_supply_cursor CURSOR FOR SELECT * FROM Supply WHERE PartID = :cPartID;/* AND QUANTITY >= :fQuantity ; */
EXEC SQL OPEN advice_supply_cursor;/*PROVIDERID,PARTID,PRICE,QUANTITY*/
while(1)
{
EXEC SQL WHENEVER NOT FOUND DO break;
EXEC SQL FETCH advice_supply_cursor INTO :providerID,:pPartID,:pPrice,:pQuantity;
pfQuantity = (float)atof(pQuantity);
if(pfQuantity >= cfQuantity ){
++total_number;
printf("\n第%d条符合零件%s需求的供应信息为:\n",total_number,tPartID);
printf("\n\n--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4s%-10s%-10s%-8s%-8s\n","N","providerID","PartID","Price","Quantity");
printf("--- --------- ------------------- ---------------------------- ----------\n");
printf("%-4d%-10s%-10s%-8s%-8s\n",total_number,providerID,pPartID,pPrice,pQuantity);
printf("--- --------- ------------------- ---------------------------- ----------\n");
printf("推荐本笔交易吗?(y/n)>");
fflush(stdin);
t = getchar();
if( t=='n' || t=='N'){
puts("\n本供应信息不做推荐!\n");
}else{
if( !insert_into_agreement(customerID,providerID,cPartID,cfPrice,cfQuantity) ){
printf("本供应信息已推荐,点击任意键开始下条供应信息.\n");
getchar();
++doN;
pfPrice = (float)atof(pPrice);
update_supply(providerID,cPartID,pfPrice,pfQuantity-cfQuantity);
}else printf("ERROR:(advice_supply(...))\n");
}/*else*/
}/*if*/
}/*while*/
EXEC SQL CLOSE query_supply_cursor;
if(!total_number)
{
printf("WARING:(advice_supply)There is no supply part.\t\n\n");
return 0;
}else
return doN; /*success*/
}/*advice_supply(...)*/
int insert_into_agreement(char* tCustomerID,char* tProviderID,char* tPartID,float tfPrice,float tfQuantity)
{
EXEC SQL BEGIN DECLARE SECTION;
char customerID[10];
char PartID[10];
float Price;
float Quantity;
char providerID[10];
EXEC SQL END DECLARE SECTION;
strcpy(customerID,tCustomerID);
strcpy(providerID,tProviderID);
strcpy(PartID,tPartID);
Price = tfPrice;
Quantity = tfQuantity;
EXEC SQL WHENEVER SQLERROR GOTO error;
EXEC SQL INSERT INTO Agreement
VALUES(:customerID,:providerID,:PartID,:Price,:Quantity,'no','01-1月-01','no','01-1月-01');
EXEC SQL COMMIT;
return 0;
error:
printf("ERROR:(insert_into_agreement)\n");
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\nORACLE error detected:\n");
printf("\n%.70s\n",sqlca.sqlerrm.sqlerrmc);
/*EXEC SQL ROLLBACK RELEASE; */
return 1;
}/*insert_into_agreement(...)*/
int delete_after(char* tCustomerID,char* tPartID)
{
/*puts("delete_after(char* customerID,char* partID)\n");*/
EXEC SQL BEGIN DECLARE SECTION;
char CustomerID[10];
char PartID[10];
EXEC SQL END DECLARE SECTION;
strcpy(CustomerID,tCustomerID);
strcpy(PartID,tPartID);
/*printf("%s\t%s\t%s\n",CustomerID,PartID);*/
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL DELETE FROM After WHERE CustomerID =:CustomerID AND PartID=:PartID;
EXEC SQL COMMIT;
printf("\n%s,%s dropped.\n",CustomerID,PartID);
return 0;
notfound:
printf("\nWARING:(delete_after)The agreement %s,%s, does not exist.\t",CustomerID,PartID);
return -1;
sqlerr:
printf("\n(delete_after)删除不成功!\n");
printf("%70s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
return -1;
}/*delete_after(...)*/
int update_supply(char* tProviderID,char* tPartID,float tPrice,float tQuantity)
{
/*puts("alter_supply_quantity(char* customerID,char* partID,char* fQuantity)\n");*/
EXEC SQL BEGIN DECLARE SECTION;
char ProviderID[10];
char PartID[10];
float Price;
float Quantity;
EXEC SQL END DECLARE SECTION;
strcpy(ProviderID,tProviderID);
strcpy(PartID,tPartID);
Price=tPrice;
Quantity=tQuantity;
EXEC SQL WHENEVER SQLERROR GOTO sqlerr;
EXEC SQL WHENEVER NOT FOUND GOTO notfound;
EXEC SQL UPDATE supply SET ProviderID=:ProviderID,PartID=:PartID,Price=:Price,Quantity=:Quantity
WHERE ProviderID=:ProviderID AND PartID=:PartID;
EXEC SQL COMMIT;
printf("\n%s,%s updated.\n",ProviderID,PartID);
return 0;
notfound:
printf("WARING:(update_supply)supply %s,%s does not exist.\t",ProviderID,PartID);
return -1;
sqlerr:
printf("ERROR:(update_supply(...))");
printf("%70s\n",sqlca.sqlerrm.sqlerrmc);
EXEC SQL WHENEVER SQLERROR CONTINUE;
EXEC SQL ROLLBACK;
return -1;
}/*update_supply(...)*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -