📄 front.c
字号:
#include"window.h"
#include"login.h"
#include"front.h"
char s_time[20]="";//时间
char sale_id[5]="";//交易号最后4位
C_CLASS LINKLIST hang;//挂单信息链表
/**********************************************************************
功能:前台界面及流程
参数:无
返回值:无
***********************************************************************/
void show_front()
{
init_color_info();
refresh();
C_CLASS LINKLIST list;
NODE *start;
NODE *cur;
NODE *temp;
int i,j=1,k=1,res;
GOD *p=(GOD *)malloc(sizeof(GOD));
WIN mainwin1={25,80,0,0,4,"欢迎光临博洋超市",1};
WIN mainwin2={15,78,5,1,1,"",0};
TEXT txt1={21,8,2,1,"CN"};
TEXT txt2={21,10,10,1,""};
WIN *cashwin1=make_win(&mainwin1);
WIN *cashwin2=make_win(&mainwin2);
TEXT *t1=make_textbox(&txt1);
TEXT *t2=make_textbox(&txt2);
draw_line(cashwin1->win,2,80);
draw_line(cashwin1->win,4,80);
draw_line(cashwin1->win,20,80);
draw_line(cashwin1->win,22,80);
TrimSpace(login.staff_name);
get_saleID(sale_id);
get_time(s_time);
mvwprintw(cashwin1->win,1,1,"%-24s%-19s%-16s%-5s%s","收银员:","等级:普通职员","交易号:","时间:",s_time);
mvwprintw(cashwin1->win,3,1,"%-6s%-10s%-25s%-8s%-8s%-8s%-5s%7s","序号","条形码","商品名称","规格","单位","单价","数量","金额");
mvwprintw(cashwin1->win,23,1," F2:新增明细 F3:删除明细 F4:收银 F5:挂单 F6:取单 F7:撒单 F8:退货 F9:退出");
mvwprintw(cashwin1->win,21,1,"%-4s%-40s%-5s%-4s","条形码:","","销售状态: ","正常");
mvwprintw(cashwin1->win,1,8,"%s",login.staff_name);
mvwprintw(cashwin1->win,1,51,"%s",sale_id);
cashwin1->show_win(cashwin1);
cashwin2->show_win(cashwin2);
t1->show_text(t1);
t2->show_text(t2);
link_init(&list);
link_init(&hang);
do
{
if(list.count!=0)
{
Print_Data(cashwin2->win,&list,start,cur,0);
}
do
{
char code[7]="";
wclear(t2->win);
i=GetString(t2->win,code,6,1);
if(i==0)
{
char barcode[9]="CN";
strcat(barcode,code);
temp=link_get_node_by_key(&list,barcode,(int (*)(void *,void *))God_Compare);
if(temp!=NULL&&list.count>0)
{
((GOD *)temp->data)->num=1+((GOD *)temp->data)->num;
cur=temp;
if(list.count<=15)
{
start=list.head->next;
}
else
{
start=temp;
}
break;
}
if(insert_goodslink(&list,p,barcode)==1)
{
show_msg("该条形码商品不存在",0);
continue;
}
if(list.count<=15)
{
start=list.head->next;
}
else
{
start=link_get_node_by_index(&list,list.count-14);
}
cur=link_get_node_by_index(&list,list.count);
Print_Data(cashwin2->win,&list,start,cur,0);
}
if(i!=0)
{
break;
}
}
while (1);
if(list.count!=0)
{
j = list.get_index_by_key( &list,cur->data,(int (*)(void *,void *))God_Compare );
k = list.get_index_by_key( &list,start->data,(int (*)(void *,void *))God_Compare );
}
if ( i==1 ) //向上键
{
if ( j==1 )
{
continue;
}
j--;
cur = cur->prior;
if ( j<k&&k>0 )
{
k--;
start = start->prior;
}
continue;
}
if ( i==2 ) //向下键
{
if ( j<list.count )
{
j++;
cur = cur->next;
}
if ( j-k>=15 && j<=list.count )
{
k++;
start = start->next;
}
continue;
}
if(i==3)//F2
{
add_delete_goods(&list,cur,0);
continue;
}
if(i==4)//F3
{
if(add_delete_goods(&list,cur,1)==0)//删除后商品为0并删链表该节点的情况
{
if(list.count==0)//删除只有一条
{
werase(cashwin2->win);
wrefresh(cashwin2->win);
continue;
}
else
{
if(j==k)//当前删除行为第一行
{
if(k>1)
{
start=start->prior;
}
else
{
start=start->next;
}
cur=start;
}
else
{
if(j==list.count+1)
{
cur=link_get_node_by_index(&list,j-1);
}
else
{
cur=link_get_node_by_index(&list,j);
}
if(k+14==list.count+1&&(list.count+1)>15)
{
start=start->prior;
}
}
continue;
}
}
}
if(i==5)//F4
{
if(list.count==0)
{
show_msg("当前无商品需要结帐",0);
continue;
}
else
{
if(cash_money(&list)==0)
{
wclear(cashwin2->win);
wrefresh(cashwin2->win);
link_del(&list);
link_init(&list);
get_saleID(sale_id);
get_time(s_time);
mvwprintw(cashwin1->win,1,51,"%s",sale_id);
mvwprintw(cashwin1->win,1,65,"%s",s_time);
wrefresh(cashwin1->win);
}
continue;
}
}
if(i==6)//F5
{
if(list.count==0)
{
show_msg("当前无商品需要挂单",0);
continue;
}
link_del(&hang);
link_init(&hang);
get_hang_list(&hang,login.staff_id);
if(hang.count>=5)
{
show_msg("挂单5条空间已满",0);
continue;
}
if(hang_list(&list)==0)
{
wclear(cashwin2->win);
wrefresh(cashwin2->win);
get_saleID(sale_id);
get_time(s_time);
mvwprintw(cashwin1->win,1,51,"%s",sale_id);
mvwprintw(cashwin1->win,1,65,"%s",s_time);
wrefresh(cashwin1->win);
link_del(&list);
link_init(&list);
}
continue;
}
if(i==7)//F6
{
if(list.count!=0)
{
show_msg("还未结账,不能取单",0);
continue;
}
link_del(&hang);
link_init(&hang);
get_hang_list(&hang,login.staff_id);
if(hang.count==0)
{
show_msg("没有挂单,无单可取",0);
continue;
}
link_del(&list);
link_init(&list);
if(get_list(&list)!=0)
{
start=list.head->next;
cur=start;
}
continue;
}
if(i==8)//F7
{
if(list.count==0)
{
show_msg("当前窗口无商品,不能撤单",0);
continue;
}
if(delete_list(&list)==0)
{
link_del(&list);
link_init(&list);
wclear(cashwin2->win);
wrefresh(cashwin2->win);
}
continue;
}
if(i==9)//F8
{
if(list.count!=0)
{
show_msg("还未结账,无法退货",0);
continue;
}
else
{
if(back_products(&list)==0)
continue;
}
}
if(i==10)//F9
{
if(list.count!=0)
{
show_msg("还未结账,不能退出",0);
continue;
}
res=show_msg("确定是否退出",1);
if(res==1)
{
continue;
}
if(res==0)
{
break;
}
}
}
while (1);
endwin();
}
/**********************************************************************
功能:插入前台商品信息到链表表
参数:链表 结构体 条形码
返回值:0成功 1失败
***********************************************************************/
int insert_goodslink(C_CLASS LINKLIST *link,GOD *good,char *barcode)
{
GOODS *p=(GOODS *)malloc(sizeof(GOODS));
if(getgoods_by_barcode(p,barcode)==1)
{
return 1;
}
strcpy(good->bar_code,p->bar_code);
strcpy(good->goods_name,p->goods_name);
strcpy(good->unit,p->unit);
strcpy(good->spec,p->spec);
good->sale_price=p->sale_price;
good->purchase_price=p->purchase_price;
good->stock=p->stock;
good->discount=p->discount;
good->num=1;
link->insert_rear(link,good,sizeof(GOD));
return 0;
}
/**********************************************************************
功能:增加,删除明细
参数:链表 当前反白位置节点指针 模式(0-增加 1-删除)
返回值:0成功 非0失败
***********************************************************************/
int add_delete_goods(C_CLASS LINKLIST *link,NODE *cur,int type)
{
int cur_num,stock_num,j;
char num[3]="1";
scr_dump("front.scr");
WIN mainatt1={13,40,7,20,4,"新增明细",1};
WIN mainatt2={13,40,7,20,4,"删除明细",1};
TEXT box1={9,38,16,1,""};
TEXT box2={11,38,16,1,""};
TEXT box3={9,27,11,4,"商品条形码:"};
TEXT box4={11,29,9,4,"商品名称:"};
TEXT box5={13,29,9,4,"增加数量:"};
TEXT box6={13,29,9,4,"删除数量:"};
TEXT box7={13,38,16,1,""};
BUTTON but1={8,3,15,27,"确定",4,4};
BUTTON but2={8,3,15,44,"返回",4,4};
WIN *w1=NULL;
TEXT *t5=NULL;
if(type==0)//增加
{
w1=make_win(&mainatt1);
t5=make_textbox(&box5);
}
if(type==1)//删除
{
w1=make_win(&mainatt2);
t5=make_textbox(&box6);
}
TEXT *t1=make_textbox(&box1);
TEXT *t2=make_textbox(&box2);
TEXT *t3=make_textbox(&box3);
TEXT *t4=make_textbox(&box4);
TEXT *t6=make_textbox(&box7);
BUTTON *b1=make_button(&but1);
BUTTON *b2=make_button(&but2);
wprintw(t1->win,"%s",((GOD *)cur->data)->bar_code);
wprintw(t2->win,"%s",((GOD *)cur->data)->goods_name);
wprintw(t6->win,"%s",num);
w1->show_win(w1);
t1->show_text(t1);
t2->show_text(t2);
t3->show_text(t3);
t4->show_text(t4);
t5->show_text(t5);
t6->show_text(t6);
b1->show_button(b1);
b2->show_button(b2);
int i=1,res;
do
{
if(i==1)
{
res=GetString(t6->win,num,2,1);
if(res==0||res==2||res==13)
{
i=2;
continue;
}
}
if(i==2)
{
b1->print_white(b1);
noecho();
cbreak();
keypad(b1->win3,true );
res=wgetch(b1->win3);
if(res==259)
{
i=1;
b1->delete_white(b1);
continue;
}
if(res==27||res==261)
{
i=3;
b1->delete_white(b1);
continue;
}
if(res==10)
{
if(type==0)
{
cur_num=((GOD *)cur->data)->num+atoi(num);
((GOD *)cur->data)->num=cur_num;
}
if(type==1)
{
cur_num=((GOD *)cur->data)->num-atoi(num);
if(cur_num<0)
{
show_msg("删除数量超出当前商品数量",0);
i=1;
continue;
}
else if(cur_num==0)
{
j=link->get_index_by_key(link,cur->data,(int (*)(void *,void *))God_Compare);
link->link_delete_node_by_index(link,j);
scr_restore("front.scr");
refresh();
return 0;
}
else
{
((GOD *)cur->data)->num=cur_num;
}
}
scr_restore("front.scr");
refresh();
return 1;
}
}
if(i==3)
{
b2->print_white(b2);
noecho();
cbreak();
keypad(b2->win3,true );
res=wgetch(b2->win3);
if(res==259)
{
i=1;
b2->delete_white(b2);
continue;
}
if(res==260)
{
i=2;
b2->delete_white(b2);
continue;
}
if(res==10)
{
b2->focus_button(b2);
scr_restore("front.scr");
refresh();
return 1;
}
}
}while (1);
}
/**********************************************************************
功能:收银结账
参数:链表
返回值:0成功 非0失败
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -