📄 posreckoningwindow.c
字号:
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 + -