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

📄 posreckoningwindow.c

📁 在linux平台下模拟超市的收银系统即POS机
💻 C
📖 第 1 页 / 共 3 页
字号:
						currentRecNo--;
						number--;
					}

				}
				else  
				{
					// 不在第一行的时候进行的处理
					currentRecNo--;
					cursorLocation--;
				}
				count=0;
				p=firstRecPoint;				
				tempNumber=number;
				while(p!=NULL)
				{
					pSaleProduct=(saleProduct *)(p->node_data);
					mvwprintw(printRecordWin,count,0,"%-6d%-10s%-30s%-6s%-7s%-7.2f%-6d%-6.2f",tempNumber++,pSaleProduct->bar_code,pSaleProduct->product_name,pSaleProduct->unit,pSaleProduct->spec,pSaleProduct->sale_price,pSaleProduct->amount,pSaleProduct->money);
					p=p->next;
					count++;
					if(count>=lineCount || p==NULL)
					{
						count=0;
						break;
					}
				}
				saleRecord_reverse(printRecordWin,cursorLocation,currentRecNo,printlist);				
// 				mvwprintw(printRecordWin,14,0,"4当前光标位置:%d当前记录号:%d",cursorLocation,currentRecNo);
 				wrefresh(printRecordWin);
 			}
			break;
		case KEY_DOWN:
			{
				if(printlist->head==NULL)
				{
					break;
				}
				wclear(printRecordWin);
				if( (cursorLocation<lineCount) && (currentRecNo<printlist->count) )
				{
					currentRecNo++;
					cursorLocation++;
				}
				else if((cursorLocation>=lineCount) && (currentRecNo<printlist->count))
				{
					currentRecNo++;
					firstRecPoint=firstRecPoint->next;
					number++;
					cursorLocation=lineCount;
				}
				count=0;
				p=firstRecPoint;
				saleProduct * pSaleProduct;
				tempNumber=number;
				while(p!=NULL)
				{
					pSaleProduct=(saleProduct *)(p->node_data);
					mvwprintw(printRecordWin,count,0,"%-6d%-10s%-30s%-6s%-7s%-7.2f%-6d%-6.2f",tempNumber++,pSaleProduct->bar_code,pSaleProduct->product_name,pSaleProduct->unit,pSaleProduct->spec,pSaleProduct->sale_price,pSaleProduct->amount,pSaleProduct->money);
					p=p->next;
					count++;
					if(count>=lineCount || p==NULL)
					{
						count=0;
						break;
					}
				}
				saleRecord_reverse(printRecordWin,cursorLocation,currentRecNo,printlist);
				
				wrefresh(printRecordWin);
			}
			break;
		case KEY_F(2):
			{

				NODE * node=get_node_by_index(printlist,currentRecNo);
				if(node==NULL)
				{
					Message_Box(10,30,10,10,RED_WHITE,"消息","当前没有数据无法添加");
				}
				else
				{
					saleProduct * pSaleProduct=(saleProduct *)node->node_data;
					int result;
// 					mvwprintw(printRecordWin,10,10,"%d",pSaleProduct->amount);
// 					wrefresh(printRecordWin);
// 					GetChar(printRecordWin,0,0);
					result=Add_List(10,10,pSaleProduct);
					if(result==0)//添加成功时再刷新
					{
						wclear(printRecordWin);
						wrefresh(printRecordWin);
						count=0;
						p=firstRecPoint;				
						tempNumber=number;
						while(p!=NULL)
						{
							pSaleProduct=(saleProduct *)(p->node_data);
							mvwprintw(printRecordWin,count,0,"%-6d%-10s%-30s%-6s%-7s%-7.2f%-6d%-6.2f",tempNumber++,pSaleProduct->bar_code,pSaleProduct->product_name,pSaleProduct->unit,pSaleProduct->spec,pSaleProduct->sale_price,pSaleProduct->amount,pSaleProduct->money);
							p=p->next;
							count++;
							if(count>=lineCount || p==NULL)
							{
								count=0;
								break;
							}
						}
						saleRecord_reverse(printRecordWin,cursorLocation,currentRecNo,printlist);				
		// 				mvwprintw(printRecordWin,14,0,"4当前光标位置:%d当前记录号:%d",cursorLocation,currentRecNo);
 						wrefresh(printRecordWin);
					}
				}
			}
			break;
 		case KEY_F(3): //删除明细
			{
				int result;
				NODE * node=get_node_by_index(printlist,currentRecNo);
				if(node==NULL)
				{
					Message_Box(10,30,10,10,RED_WHITE,"消息","当前没有数据无法删除");
					break;
				}
				saleProduct * pSaleProduct=(saleProduct *)node->node_data;
				result=Del_List(10,10,pSaleProduct);
				if(result==-1) //就是
				{
					//del_link_index(printlist,currentRecNo);
					if(currentRecNo==1)
					{
						//当前节点等于尾节点也就只剩一个节点时
						if((printlist->head==printlist->rearptr) && (1==printlist->count) )
						{
							del_head_link(printlist);
							link_init(printlist);
							wclear(printRecordWin);
							wrefresh(printRecordWin);
							break;
						}
						else
						{
							del_head_link(printlist);
							firstRecPoint=printlist->head;
							tempNumber=1;
						}
					}
					else if(currentRecNo==printlist->count) //当从尾节点开始删除的时候
					{
						int step=printlist->count-lineCount;  //计算出上一页第一条记录位置
						NODE * temp=get_node_by_index(printlist,step);//得到指定记录的指针
						del_rear_link(printlist); //将尾结点删掉
						currentRecNo--; //当前记录号减一
						cursorLocation--;//光标位置也减一
						if(cursorLocation<1)//当光标位置小于1的时候说明要上翻一页
						{
							//当记录总数还大于每页显示的条数时
							if(printlist->count>lineCount)
							{
								cursorLocation=lineCount;
								firstRecPoint=temp;
								number-=5;

							}
							else
							{
								cursorLocation=printlist->count;
								firstRecPoint=printlist->head;
								number=1;
							}
						}
					}
					else if(cursorLocation==1)//当光标为第一位的时候
					{
						NODE * temp =get_node_by_index(printlist,currentRecNo+1);
						del_link_index(printlist,currentRecNo);
						firstRecPoint=temp;
					}
					else 
					{
						del_link_index(printlist,currentRecNo);
					}
				}
				wclear(printRecordWin);
				wrefresh(printRecordWin);
				count=0;
				p=firstRecPoint;				
				tempNumber=number;
				while(p!=NULL)
				{
					pSaleProduct=(saleProduct *)(p->node_data);
					mvwprintw(printRecordWin,count,0,"%-6d%-10s%-30s%-6s%-7s%-7.2f%-6d%-6.2f",tempNumber++,pSaleProduct->bar_code,pSaleProduct->product_name,pSaleProduct->unit,pSaleProduct->spec,pSaleProduct->sale_price,pSaleProduct->amount,pSaleProduct->money);
					p=p->next;
					count++;
					if(count>=lineCount || p==NULL)
					{
						count=0;
						break;
					}
				}
				saleRecord_reverse(printRecordWin,cursorLocation,currentRecNo,printlist);				
		// 		mvwprintw(printRecordWin,14,0,"4当前光标位置:%d当前记录号:%d",cursorLocation,currentRecNo);
 				wrefresh(printRecordWin);

			}
			break;
		case KEY_F(4): //收银结帐
			{
				//要封函数参数要 LINKList  交易号  员工号 时间
				float totalMoney=0;
				NODE * pNode=printlist->head;
				saleProduct * pSaleProduct;
				char sale_id_str[20]={'\0'};//销售号
				char trans_ids_str[10]={'\0'};//存放交易号
				if(printlist->head==NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前没有商品无法结帐");
					break;
				}
				while(pNode!=NULL)
				{
					pSaleProduct=(saleProduct *)(pNode->node_data);
					totalMoney+=pSaleProduct->money;
					pNode=pNode->next;
				}
				int result=Reckoning_Window(5,31,totalMoney);
				if(result==0) //结帐成功
				{
					Save_Sale_Result(printlist,trans_id,id,time,totalMoney,1);
// 					sprintf(trans_ids_str,"%d",trans_id);//将交易ID转成字符串
// 					strcpy(sale_id_str,time);//将时间存放到销售号中去
// 					strcat(sale_id_str,trans_ids_str);//再将交易号再加进去
// 					//Message_Box(10,50,10,10,RED_BLACK,"测试",sale_id_str);
// 					InsertIntoSale(sale_id_str,trans_ids_str,id,time,totalMoney);//插入到销售表中
// 
// 					NODE * pNode=printlist->head;
// 					while(pNode!=NULL)
// 					{
// 						saleProduct* pSaleProduct=(saleProduct *)pNode->node_data;
// 						char bar_code[10];
// 						char sale_id[20];
// 						char detail_id[20];
// 						int detail_seque=Get_Detail_Seque();
// 						char detail_seque_str[10];
// 						int count=0;
// 						float sale_price;
// 						int sale_state;
// 						strcpy(bar_code,pSaleProduct->bar_code);//商品条形码
// 						strcpy(sale_id,sale_id_str);//销售ID号
// 						//商品明细编号为  日期加交易号
// 						strcpy(detail_id,time);//将日期给明细字段
// 						sprintf(detail_seque_str,"%d",detail_seque);
// 						strcat(detail_id,detail_seque_str);//将数据库序列产生的编号加进去
// 						count=pSaleProduct->amount;//出售数量
// 						sale_price=pSaleProduct->sale_price;//商品单价
// 						sale_state=1;//出售商品的状态 出售状态为1
// 						
// // 						mvwprintw(printRecordWin,5,0,detail_id);
// // 						mvwprintw(printRecordWin,6,0,sale_id);
// // 						mvwprintw(printRecordWin,7,0,bar_code);
// // 						mvwprintw(printRecordWin,8,0,"%d",count);
// // 						mvwprintw(printRecordWin,9,0,"%f",sale_price);
// // 						mvwprintw(printRecordWin,10,0,"%d",sale_state);
// // 						wrefresh(printRecordWin);
// 						//getch();
// 						Insert_To_Sale_Detail(detail_id,sale_id,bar_code,count,sale_price,sale_state);
// 						ReduceStock(pSaleProduct->bar_code,pSaleProduct->amount);
// 
// 						pNode=pNode->next;
// 					}					
					free_list(printlist);
					wclear(printRecordWin);
					wrefresh(printRecordWin);

					memset(time,'\0',sizeof(time));//将时间清空
					GetSystemTime(time);//重新取得时间
					mvwprintw(win,1,58,time);//打印时间
					trans_id=Get_Trans_Seque();
					mvwprintw(win,1,35,"交易号: %d",trans_id);//打印交易号 交易号这个号是由数据库的序列产生的
					wrefresh(win);
					//重置反白光标的位置,和记录序列的起始值
					number=1;
					cursorLocation=1;
					currentRecNo=1;
				}
			}

			break;
 		case KEY_F(5): //挂单
			{
				if(printlist->head==NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前没有商品无法挂单");
					break;
				}
				int resutl;
				resutl=DialogWindow(10,30,10,10,"是否挂单",RED_BLACK);
				if(resutl==0)//0为进行挂单
				{
					Save_Sale_Result(printlist,trans_id,id,time,0,0);//最后一个参数为0时是挂单 
					free_list(printlist);

					wclear(printRecordWin);
					wrefresh(printRecordWin);

					memset(time,'\0',sizeof(time));//将时间清空
					GetSystemTime(time);//重新取得时间
					mvwprintw(win,1,58,time);//打印时间
					trans_id=Get_Trans_Seque();
					mvwprintw(win,1,35,"交易号: %d",trans_id);//打印交易号 交易号这个号是由数据库的序列产生的
					wrefresh(win);
					//重置反白光标的位置,和记录序列的起始值
					number=1;
					cursorLocation=1;
					currentRecNo=1;
				}
			}
			break;
 		case KEY_F(6)://取单
 			{
				if(printlist->head!=NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前商品没有结帐无法取单");
					break;
				}
				int result;
				int recourdNo;//记录号
				number=1;
 				LINKLIST *billList;//挂单列表
				billList=(LINKLIST *)malloc(sizeof(LINKLIST));//链表分配空间
				link_init(billList);
				result=Get_Hang_Bill_List(billList,id);
				if(billList->head==NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前没有挂单记录");
					break;
				}
				recourdNo=HangBillDialog(10,10,billList);//这里的recourdNo是在取单列表中选的记录号
				//当recordNo小于1时表示没有选择
				if(recourdNo<1) 
				{
					break;	
				}
				result=get_product_by_hang_id((char *)(get_node_by_index(billList,1)->node_data),printlist);
				//mvwprintw(printRecordWin,12,0,(char *)(get_node_by_index(billList,1)->node_data));
				wclear(printRecordWin);
				wrefresh(printRecordWin);
				count=0;
				currentRecNo=1;
				cursorLocation=1;
				firstRecPoint=printlist->head;
				p=firstRecPoint;				
				tempNumber=number;
				saleProduct * pSaleProduct;
				while(p!=NULL)
				{
					pSaleProduct=(saleProduct *)(p->node_data);
					mvwprintw(printRecordWin,count,0,"%-6d%-10s%-30s%-6s%-7s%-7.2f%-6d%-6.2f",tempNumber++,pSaleProduct->bar_code,pSaleProduct->product_name,pSaleProduct->unit,pSaleProduct->spec,pSaleProduct->sale_price,pSaleProduct->amount,pSaleProduct->money);
					p=p->next;
					count++;
					if(count>=lineCount || p==NULL)
					{
						count=0;
						break;
					}
				}
				saleRecord_reverse(printRecordWin,cursorLocation,currentRecNo,printlist);				
		// 		mvwprintw(printRecordWin,14,0,"4当前光标位置:%d当前记录号:%d",cursorLocation,currentRecNo);
 				wrefresh(printRecordWin);
				Delete_Bill((char *)(get_node_by_index(billList,1)->node_data));
				memset(time,'\0',sizeof(time));//将时间清空
				GetSystemTime(time);//重新取得时间
				mvwprintw(win,1,58,time);//打印时间
				trans_id=Get_Trans_Seque();
				mvwprintw(win,1,35,"交易号: %d",trans_id);//打印交易号 交易号这个号是由数据库的序列产生的
				wrefresh(win);
				wrefresh(printRecordWin);
				free_list(billList);
 			}
 			break;
		case KEY_F(7)://撤单
			{
				if(printlist->head!=NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前商品没有结帐无法撤单");
					break;
				}
				int result;
				int recourdNo;//记录号
 				LINKLIST *billList;//挂单列表
				billList=(LINKLIST *)malloc(sizeof(LINKLIST));//链表分配空间
				link_init(billList);
				result=Get_Hang_Bill_List(billList,id);
				if(billList->head==NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前没有挂单记录");
					break;
				}
				Cancle_Hang_Bill_Dialog(10,10,billList);
				wrefresh(win);
			}
			break;
 		case KEY_F(8)://退货
			{
				if(printlist->head!=NULL)
				{
					Message_Box(10,30,10,10,RED_BLACK,"警告","当前商品没有结帐无法退货");
					break;
				}
				int result;
				result=InputAdminPwdWin(10,20);
				//result=0;
				if(0==result) //管理员登入完才可以退货
				{
					result=ReturningAProductWin(10,20);
					if(0==result)//退货成功就提示退多少钱
					{
						//计算要的钱,并提示
					}
				}
			}
			wrefresh(win);
			break;
 		case KEY_F(9)://退出收银界面
			{
				if(printlist->head!=NULL)
				{
					Message_Box(10,40,10,10,RED_BLACK,"警告","当前商品没有结帐无法退出收银界面");
					break;
				}
				int isExit;
				isExit=DialogWindow(10,30,10,10,"是否退收银窗口",RED_BLACK);
				if(isExit==0)//代表退出收营
				{
					goto exit;
				}
			}
			break;
		}
	}
	//测试F1
// 	keypad(stdscr,TRUE);
// 	int ch=wgetch(stdscr);
// 	switch(ch)
// 	{
// 		case KEY_F(1):
// 			mvprintw(10,20,"press F1 key");
// 			break;
// 	}



	//mvprintw(23,9," ");
	//mvprintw(23,25," ");
// 	move(24,9);
// 
// 	//输入指定个数字符串
// 	getnstr(getstr,16);
// 	attroff(A_REVERSE);	
// 	mvprintw(10,20,getstr);
exit:
	wclear(win);
	DestroyWindow(inputBarcode);
	DestroyWindow(printRecordWin);
}


⌨️ 快捷键说明

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