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

📄 functionlib.c

📁 linux环境下结合ncurse库
💻 C
📖 第 1 页 / 共 5 页
字号:
			{
				if (plink->count==0)
				{
					MessageBox("没有已购买的商品","按任意键返回",NOBTN);
				}
				else
				{
					AddDelDetail(plink,current,ADDMODE);	
					PrintLinkInfo(plink,pNewWin,beginsub,current);
				}	
			}				
			break;
			case KEY_F(3):
			{
				if (plink->count==0)
				{
					MessageBox("没有已购买的商品","按任意键返回",NOBTN);
				}
				else
				{
					AddDelDetail(plink,current,DELMODE);
					if(plink->count==0)
					{
						current=0;
						beginsub=0;
						werase(pNewWin);
						wrefresh(pNewWin);
					}
					else
					{
						werase(pNewWin);
						wrefresh(pNewWin);
						if(current==1)
						{
							current=current+1;
						}
						current=current-1;
						if(current>15)
						{
							beginsub=current-14;
						}
						PrintLinkInfo(plink,pNewWin,beginsub,current);
					}
				}				
			}					
			break;
			case KEY_F(4):
			{
				int res=-1;
				KindMoney kindmoney;
				if (plink->count==0)
				{
					MessageBox("无商品被购买不能收银","按任意键返回",NOBTN);
				}
				else
				{
					res=IncomeWin(plink,&kindmoney);
				}
				


				if(1==res)
				{
					SaleTableInfo saleinfo;
					memset(&saleinfo,0,sizeof(SaleTableInfo));
					// 销售ID
					char saleid[19];memset(saleid,0,19);
					strncpy(saleid,TimeStr,14);
					strncpy(&saleid[14],tranid,4);
					strcpy(saleinfo.sale_id,saleid);

					// 交易号
					
					strncpy(saleinfo.trans_id,tranid,4);

					saleinfo.trans_id[5]='\0';
					//员工ID
					strncpy(saleinfo.staff_id,staff.staff_id,6);
					saleinfo.staff_id[7]='\0';

					//日期
					//memset(saleinfo.sale_date,0,16);
					// 实际付款 原价
					// 应付款  打折后
					// 金额
					// 找钱
					strncpy(saleinfo.sale_date,TimeStr,8);
					saleinfo.sale_date[9]='\0';
					saleinfo.give_sum=kindmoney.give_sum;
					saleinfo.real_sum=kindmoney.real_sum;
					saleinfo.money=kindmoney.money;
					saleinfo.change=kindmoney.change;
					saleinfo.sale_state=0;

				
					int kk=InsertSaleTable(&saleinfo);
					// 要写入销售详细表的数据
					DUNODE * p=plink->head->next;
					while (p!=plink->head)
					{
						
						SaleDetailInfo saledetailinfo;
						// 销售明细表
						memset(&saledetailinfo,0,sizeof(SaleDetailInfo));
						strncpy(saledetailinfo.detail_id,TimeStr,14);
						char identifynum[5];
						GetTradeID(identifynum);
						MoveRightSpace(identifynum);
						strncpy(&saledetailinfo.detail_id[14],identifynum,4);
						
						strcpy(saledetailinfo.sale_id,saleinfo.sale_id); // 销售单号 - 外键
						saledetailinfo.sale_state=1; // 状态
						saledetailinfo.count= (((SellGoods *)(p->data))->product_count); // 数量
						
						saledetailinfo.sale_price=(((SellGoods *)(p->data))->sale_price); // 销价
						strcpy(saledetailinfo.bar_code,(((SellGoods *)(p->data))->bar_code)); // 条形码	
						DepletionCount(saledetailinfo.bar_code,saledetailinfo.count);
						int kk=InsertSaleDetailTable(saledetailinfo);
						p=p->next;
					}
						link_del(plink);
						wclear(pNewWin);
						wrefresh(pNewWin);
						
						// 收银结束更新交易号
						GetTradeID(tranid);
						MoveRightSpace(tranid);
						mvprintw(1,34,"交易号:****");
						mvprintw(1,41,"%s",tranid);
						refresh();
			//			PrintLinkInfo(&link,pNewWin,beginsub,current);
					
				}
			}
			break;
			case KEY_F(5):
			{
				if (plink->count==0)
				{
					MessageBox("无已购商品不能挂单","任意键返回",NOBTN);
				}
				else if(listarr[2]!=NULL)
				{
					MessageBox("挂单数已满,挂单失败","按任意键返回",NOBTN);
			
				}else
				{							
					int res=MessageBox("提示","是否挂单",YESNO);
					if ((BUTTONID+1)==res)
					{
						char saleidstr[19];
						memset(saleidstr,0,19);
						strcpy(saleidstr,TimeStr);
						GetTradeID(tranid);
						strncpy(&saleidstr[14],tranid,4);
						List_Up(&plink,saleidstr); // 挂单函数
						wclear(pNewWin);
						wrefresh(pNewWin);
					}
				}
			}		
			break;

			case KEY_F(6):
			{
				// 取单
				if (plink->count!=0)
				{
					MessageBox("当前商品未结算无法取单","按任意键返回",NOBTN);
				}
				else if(listarr[0]==NULL)
				{
					MessageBox("没有挂单不能取单","按任意键返回",NOBTN);
				}
				else
				{
					List_Down(&plink);
					beginsub=1;
					current=1;
					PrintLinkInfo(plink,pNewWin,beginsub,current);
				}
			}			
			break;

			case KEY_F(7):
			{
				// 撤单
				if (listarr[0]==NULL)
				{
					MessageBox("没有挂单不能撤单","按任意键返回",NOBTN);
				}
				else
				{
					List_Del();
				}
				
			}					
			break;
			case KEY_F(8):
			{
				// 退货
				if (plink->count!=0)
				{
					MessageBox("当前清单未结算不能退货","按任意键返回",NOBTN);
				}
				else
				{
					ReturnGoods();
				}
			}

			break;
			case KEY_F(9):
			{ 
				// 退出

				if (plink->count!=0 && listarr[0]!=NULL)
				{
					if(plink->count!=0)
					MessageBox("当前清单未结算不能退出","按任意键返回",NOBTN);
					else
					MessageBox("挂单中有清单不能退出","按任意键返回",NOBTN);

				}
				else
				{
						int res=MessageBox("提示","是否要退出收银",YESNO);
					if (res==BUTTONID+1)
					{
						flag=1;
					}
					else
					{
						
					}
				}	
			}				
			break;
		}
		if(1==flag)
		{
			break;
		}
	}
	while (1);
	FreeTextBox(pBarCodeText);
}

/**********************************************************
  Function:打印商品信息函数
  Param:DUNODE * 数据结点指针  WINDOW * 显示屏指针 int i ,int num控制序号相关变量
  return :无
***********************************************************/
void PrintProcutInfo(DUNODE * pnode ,WINDOW * pwin,int i ,int num)
{
	int number=0;
	
	char tempstr[120];
			MoveRightSpace(((Goods *)(pnode->data))->bar_code);
			MoveRightSpace(((Goods *)(pnode->data))->product_name);
			MoveRightSpace(((Goods *)(pnode->data))->unit);
			MoveRightSpace(((Goods *)(pnode->data))->spec);
			//MoveRightSpace();
		sprintf(tempstr,"%-5d%-10s%-17s%-5s%-10s%-10.2f%-7.2f%-6d%-6.2f",num,
			((Goods *)(pnode->data))->bar_code,
			((Goods *)(pnode->data))->product_name,
			((Goods *)(pnode->data))->unit,
			((Goods *)(pnode->data))->spec,
			(((Goods *)(pnode->data))->sale_price),
			(((Goods *)(pnode->data))->purchase_price),
			((Goods *)(pnode->data))->count,
			((Goods *)(pnode->data))->discount
			);
		mvwprintw(pwin,i,1,"%s",tempstr);
		wrefresh(pwin);
}

/**********************************************************
 Function:打印已购商品信息
  Param:无
  return :无
***********************************************************/
void PrintSellInfo(DUNODE * pnode,WINDOW * pwin,int i,int num)
{
	int number=0;
	char tempstr[80];
		sprintf(tempstr,"%-5d%-10s%-26s%-6s%-7s%-10.2f%-6d%-6.2f",num,
			((SellGoods *)(pnode->data))->bar_code,
			((SellGoods *)(pnode->data))->product_name,
			((SellGoods *)(pnode->data))->spec,
			((SellGoods *)(pnode->data))->unit,
			(((SellGoods *)(pnode->data))->sale_price),
			((SellGoods *)(pnode->data))->product_count,
			((SellGoods *)(pnode->data))->sum_money
			);
		mvwprintw(pwin,i,1,"%s",tempstr);
		wrefresh(pwin);
}

/**********************************************************
 Function:打印单条记录函数
  Param:C_CLASS LINKLIST * 链表指针 WINDOW * 显示屏窗口指针 beginsub起始 currsub当前选中
							void(*p)() 打印具体某一类型的函数指针
  return :无
***********************************************************/
void PrintOneView(C_CLASS LINKLIST * link,WINDOW * pwin ,int beginsub ,
int currsub,void (*printRed)(DUNODE * pnode, WINDOW * pwin,int k,int num))
{
	int i;
	DUNODE * p=NULL;
	p=link_get_node_by_index(link,beginsub);
	
	for(i=beginsub;i<beginsub+15;i++)
	{
		if(currsub>link->count || i>(link->count) || p==link->head)
		{
			break;
		}
			if(i==currsub)
			{wattron(pwin,A_REVERSE);}
			printRed(p,pwin,i-beginsub,i);
			if(i==currsub)
			{wattroff(pwin,A_REVERSE);}
			p=p->next;	
	}
}

/********************************************
	打印链表函数
***********************************************/
void PrintLinkInfo(C_CLASS LINKLIST * link,WINDOW * pwin,int begin,int currsub)
{
	PrintOneView(link,pwin,begin,currsub,PrintSellInfo);
}

/************************************************************
	Function:消息提示框
	Param: ptitle 提示标题  pcontent 提示内容  mode  是否有按妞模式
	return : 返回 按下按妞的ID号
*************************************************************/
int MessageBox(char * ptitle,char * pcontent,enum MSGMODE mode)
{
	scr_dump("SaveScr.scr");
	MyWindow * pMsgWindow=NULL;
	pMsgWindow=MakeMyWindow(pMsgWindow);
	pMsgWindow->m_color=WHITE_BLUE;
	pMsgWindow->m_sizex=32;
	
	if(mode!=NOBTN)
	{
		pMsgWindow->m_sizey=12;
	}else
	{
		pMsgWindow->m_sizey=6;
	}
	pMsgWindow->m_px=25;
	pMsgWindow->m_py=7;
	ChangeMyWindow(&pMsgWindow);
	int sizex=pMsgWindow->m_sizex;
	int sizey=pMsgWindow->m_sizey;
	pMsgWindow->DrawHline(pMsgWindow,2,1);
	pMsgWindow->DrawWords(pMsgWindow,1,(sizex-strlen(ptitle))/2,ptitle);
	pMsgWindow->DrawWords(pMsgWindow,3,(sizex-strlen(pcontent))/2,pcontent);
	if(YESNO==mode)
	{
		pMsgWindow->DrawHline(pMsgWindow,sizey-6,1);
		// 是按扭
		Button * pButton1=NULL;
		pButton1=MakeButton(pButton1);
		strcpy(pButton1->m_name,"是");
		pButton1->m_kind=YESBUTTON;
		pButton1->m_buttonid=BUTTONID+1;
		pButton1->m_sizey=3;
		pButton1->m_color_foot=WHITE_BLUE;
		pButton1->ChangeButton(&pButton1);
		
		// 取消按妞
		Button * pButton2=NULL;
		pButton2=MakeButton(pButton2);
		strcpy(pButton2->m_name,"否");
		pButton2->m_buttonid=BUTTONID+2;
		pButton2->m_kind=NOBUTTON;
		pButton2->m_color_foot=WHITE_BLUE;
		pButton2->m_sizey=3;
		pButton2->ChangeButton(&pButton2);
		pMsgWindow->AddActiveElement(pMsgWindow,pButton1,ISBUTTON,sizey-5,4);
		pMsgWindow->AddActiveElement(pMsgWindow,pButton2,ISBUTTON,sizey-5,sizex-10);
	}
	else if(CANCEL==mode)
	{
		pMsgWindow->DrawHline(pMsgWindow,sizey-6,1);
		Button * pButton3=NULL;
		pButton3=MakeButton(pButton3);
		strcpy(pButton3->m_name,"返回");
		pButton3->m_buttonid=BUTTONID+3;
		pButton3->m_sizey=3;
		pButton3->m_color_foot=WHITE_BLUE;
		//pButton3->m_isbox=FALSE;
		pButton3->ChangeButton(&pButton3);
		pMsgWindow->AddActiveElement(pMsgWindow,pButton3,ISBUTTON,sizey-5,(sizex-pButton3->m_sizex)/2);
	}else
	{
		
	}
	int keyres=0;
	pMsgWindow->ShowMyWindow(pMsgWindow);
	keyres=pMsgWindow->RunMyWindow(pMsgWindow);
	DelMyWindow(pMsgWindow);
	// keyres 为被按下按钮的ID号
	scr_restore("SaveScr.scr");
	return keyres;
}

/************************************************************
	Function:结帐窗口
	Param: 无
	return : 无
*************************************************************/
int IncomeWin(C_CLASS LINKLIST* link,KindMoney * kindmoney)
{
	scr_dump("SaveScr2.scr");
	MyWindow * pIncomeWin=NULL;
	pIncomeWin=MakeMyWindow(pIncomeWin);
	pIncomeWin->m_color=WHITE_BLUE;
	pIncomeWin->m_sizex=30;
	pIncomeWin->m_sizey=12;
	pIncomeWin->m_px=25;
	pIncomeWin->m_py=7;
	ChangeMyWindow(&pIncomeWin);
	int sizex=pIncomeWin->m_sizex;
	int sizey=pIncomeWin->m_sizey;
	float statmoney=0;
	float costmoney=0;
	DUNODE * pnode=link->head->next;
	float temp1=0;
	float temp2=0;
	while (pnode!=link->head)
	{
		statmoney+=( ((SellGoods *)(pnode->data))->sum_money); // Statmoney 打折后的钱
		temp1=(((SellGoods *)(pnode->data))->sale_price)/(((SellGoods *)(pnode->data))->discount);
		temp2=((SellGoods *)(pnode->data))->product_count;
		costmoney+=(temp1*temp2);
		pnode=pnode->next;
	}
	
	char temp[10];
	memset(temp,0,10);
	sprintf(temp,"%.2f",statmoney);
	pIncomeWin->DrawWords(pIncomeWin,1,2,"应收:");
	pIncomeWin->DrawWords(pIncomeWin,1,8,temp);
	pIncomeWin->DrawHline(pIncomeWin,2,1);
	pIncomeWin->DrawWords(pIncomeWin,3,2,"实收:");
	pIncomeWin->DrawHline(pIncomeWin,4,1);
	pIncomeWin->DrawWords(pIncomeWin,5,2,"找零:");
	pIncomeWin->DrawHline(pIncomeWin,6,1);

	// 数量文本
	TextBox * pRealText=NULL;
	pRealText=MakeTextBox(pRealText);
	pRealText->m_strmaxlen=6;
	pRealText->m_spc.s_px=33;
	pRealText->m_spc.s_py=10;
	pRealText->m_isInteger=TRUE;
	pRealText->m_isPasswd=FALSE;
	pRealText->m_isFn2_9=FALSE;
	ChangeTextBox(&pRealText);
	
	// 是按扭
	Button * pButton1=NULL;
	pButton1=MakeButton(pButton1);
	strcpy(pButton1->m_name,"收银");
	pButton1->m_kind=YESBUTTON;
	pButton1->m_buttonid=BUTTONID+1;
	pButton1->m_sizey=3;
	pButton1->m_color_foot=WHITE_BLUE;
	pButton1->ChangeButton(&pButton1);

	// 取消按妞
	Button * pButton2=NULL;
	pButton2=MakeButton(pButton2);
	strcpy(pButton2->m_name,"返回");
	pButton2->m_buttonid=BUTTONID+2;
	pButton2->m_kind=NOBUTTON;
	pButton2->m_color_foot=WHITE_BLUE;
	pButton2->m_sizey=3;
	pButton2->ChangeButton(&pButton2);

	pIncomeWin->AddActiveElement(pIncomeWin,pButton1,ISBUTTON,sizey-5,4);
	pIncomeWin->AddActiveElement(pIncomeWin,pButton2,ISBUTTON,sizey-5,sizex-10);
	pIncomeWin->ShowMyWindow(pIncomeWin);
	
	float earn=0.0;
	do
	{
		
		pRealText->InputString(pRealText);
		if(strlen(pRealText->m_str)==0)
		{
			earn=0.0;
		}
		else
		{
			char temp[10];
			memset(temp,0,10);
			strcpy(temp,pRealText->m_str);
			int k=0;
			int flag=0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -