📄 loginwindow.c
字号:
print_sale_product(print_window,++cur);
}
break;
case '\n':
//读取数据库的商品信息
{
PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
NODE *n=NULL;
strcpy(pro_info->bar_code,barCode);
if(get_product_info(pro_info)==0)
{
scr_dump("dealwin.scr");
Message("没有这种商品",10,40);
scr_restore("dealwin.scr");
wrefresh(win);
wrefresh(print_window);
barCode[2]='\0';
mvwprintw(code,0,0,"CN ");
wrefresh(code);
cnt=2;
now_col=0;
now_row=2;
wmove(code,now_col,now_row);
break;
}
if(pro_info->count==0)
{
Message("这种商品已经售完",10,40);
scr_restore("dealwin.scr");
wrefresh(win);
wrefresh(print_window);
barCode[2]='\0';
mvwprintw(code,0,0,"CN ");
wrefresh(code);
cnt=2;
now_col=0;
now_row=2;
wmove(code,now_col,now_row);
break;
}
res=code_in_list(barCode);
if ( res )
{
cur = res;
NODE *n = salelist.get_node_by_index(&salelist,cur);
PRODUCT *pro = (PRODUCT *)malloc(sizeof(PRODUCT));
pro = (PRODUCT *)n->data;
pro->count++;
salelist.replace_node_by_index(&salelist,cur,pro,sizeof(PRODUCT));
wclear(print_window);
print_sale_product(print_window,cur);
}
else
{
Trim(pro_info->product_name);
Trim(pro_info->spec);
Trim(pro_info->unit);
pro_info->count=1;
salelist.insert_rear(&salelist,(void *)pro_info,sizeof(PRODUCT));
wclear(print_window);
print_sale_product(print_window,salelist.count);
cur=salelist.count;
}
barCode[2]='\0';
mvwprintw(code,0,0,"CN ");
wrefresh(code);
cnt=2;
now_col=0;
now_row=2;
wmove(code,now_col,now_row);
break;
}
default:
if (ch>='0'&&ch<='9'&&cnt<8)
{
now_row++;
waddch(code,ch);
barCode[cnt]=ch;
barCode[++cnt]='\0';
wrefresh(code);
break;
}
}
}
}
/*====================================================
function:打印销售产品信息
=====================================================*/
void print_sale_product(WINDOW *print_window,int cur)
{
int i=1,row=0;
wclear(print_window);
if(salelist.count==0)
{
return;
}
NODE *n=NULL;
PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
if (cur>14)
{
i=cur-13;
}
for(;i<=salelist.count;i++,row++)
{
if(cur>=14 && i==cur+1)
{
break;
}
n=salelist.get_node_by_index(&salelist,i);
if(n!=NULL)
{
pro_info=(PRODUCT *)n->data;
}
if(pro_info!=NULL)
{
if(i==cur)
{
wattron(print_window,A_REVERSE);
}
mvwprintw(print_window,row,0,"%-5d%-10s%-23s%-6s%-6s%-10.2f%-6d%-12.2f",i,
pro_info->bar_code, pro_info->product_name, pro_info->spec, pro_info->unit,
pro_info->sale_price, pro_info->count, (pro_info->sale_price*pro_info->count));
if(i==cur)
{
wattroff(print_window,A_REVERSE);
}
}
}
wrefresh(print_window);
}
/*===========================================================
function:新增明细窗口与功能实现
===========================================================*/
void add_new_detail_win(int index)
{
if (!salelist.count)
{
Message("没有销售商品",10,40);
return ;
}
int ch;
int now_col=0;
int now_row=0;
char bar_code[9]={'\0'};
char numberStr[5]="\0";
int number=0;
int cnt=0;
PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
NODE *node=salelist.get_node_by_index(&salelist,index);
if (node!=NULL)
{
pro_info=(PRODUCT *)node->data;
}
strcpy(bar_code,pro_info->bar_code);
PRODUCT *pro_dba_info=(PRODUCT *)malloc(sizeof(PRODUCT));
strcpy(pro_dba_info->bar_code,pro_info->bar_code);
get_product_info(pro_dba_info);
WINDOW *ware,*num;
WINDOW *dialog[3]={NULL};
print_dialog_box(10,40,"新增明细",1,dialog);
mvwprintw(dialog[0],2,2,"商品条形码:");
mvwprintw(dialog[0],4,8,"数量:");
wrefresh(dialog[0]);
keypad(dialog[1],TRUE);
keypad(dialog[2],TRUE);
//商品条形码窗口
ware=create_win(1,16,9,34);
keypad(ware,TRUE);
wbkgd(ware,COLOR_PAIR(4));
wprintw(ware,bar_code);
wrefresh(ware);
//商品数量窗口
num=create_win(1,16,11,34);
keypad(num,TRUE);
wbkgd(num,COLOR_PAIR(4));
wrefresh(num);
scr_dump("addware.scr");
NUMBER:
wmove(num,0,0);
while (1)
{
ch=wgetch(num);
switch (ch)
{
case KEY_BACKSPACE: //按退格键盘
if (cnt)
{
getyx(num,now_col,now_row);
mvwaddch(num,now_col,--now_row,' ');
numberStr[--cnt]='\0';
wmove(num,0,now_row);
wrefresh(num);
}
break;
case KEY_F(1):
return;
case KEY_DOWN:
case '\n':
goto ENSURE;
default:
if ( cnt<3 && (ch>='1'&&ch<='9') || (ch=='0'&&cnt!=0))
{
now_row++;
waddch(num,ch);
numberStr[cnt]=ch;
numberStr[++cnt]='\0';
wrefresh(num);
break;
}
}
}
ENSURE:
wattron(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
while (1)
{
ch=wgetch(dialog[1]);
switch (ch)
{
case KEY_F(1):
return;
case KEY_UP:
wattroff(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
goto NUMBER;
case KEY_RIGHT:
wattroff(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
goto CANCEL;
case '\n':
//修改链表中count值并重新打印一下商品信息
if (cnt==0)
{
Message("请输入数量",10,40);
scr_restore("addware.scr");
wrefresh(dialog[0]);
numberStr[0]='\0';
cnt=0;
now_row=0;
goto NUMBER;
}
number=atoi(numberStr);
if ( !(number>0&&number<=99) )
{
Message("数量只能输入[0-100]",10,40);
scr_restore("addware.scr");
wrefresh(dialog[0]);
numberStr[0]='\0';
cnt=0;
now_row=0;
goto NUMBER;
}
else if (pro_dba_info->count<number)
{
Message("没有这么多的库存",10,40);
scr_restore("addware.scr");
wrefresh(dialog[0]);
numberStr[0]='\0';
cnt=0;
now_row=0;
goto NUMBER;
}
else
{
pro_info->count+=number;
return;
}
}
}
CANCEL:
wattron(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
while (1)
{
ch=wgetch(dialog[2]);
switch (ch)
{
case KEY_F(1):
return;
case KEY_LEFT:
wattroff(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
goto ENSURE;
case '\n':
return;
}
}
}
/*========================================================
function:删除明细窗口与功能实现
=========================================================*/
int delete_detail_win(int index)
{
if (!salelist.count)
{
Message("没有销售商品",10,40);
return -1;
}
int ch;
int now_col=0;
int now_row=0;
char bar_code[9]={'\0'};
char numberStr[5]="\0";
int number=0;
int cnt=0;
PRODUCT *pro_info=(PRODUCT *)malloc(sizeof(PRODUCT));
NODE *node=salelist.get_node_by_index(&salelist,index);
if (node!=NULL)
{
pro_info=(PRODUCT *)node->data;
}
strcpy(bar_code,pro_info->bar_code);
PRODUCT *pro_dba_info=(PRODUCT *)malloc(sizeof(PRODUCT));
strcpy(pro_dba_info->bar_code,pro_info->bar_code);
get_product_info(pro_dba_info);
WINDOW *ware,*num;
WINDOW *dialog[3]={NULL};
print_dialog_box(10,40,"删除明细",1,dialog);
mvwprintw(dialog[0],2,2,"商品条形码:");
mvwprintw(dialog[0],4,8,"数量:");
wrefresh(dialog[0]);
keypad(dialog[1],TRUE);
keypad(dialog[2],TRUE);
//条形码窗口
ware=create_win(1,16,9,34);
keypad(ware,TRUE);
wbkgd(ware,COLOR_PAIR(4));
wprintw(ware,bar_code);
wrefresh(ware);
//数量输入窗口
num=create_win(1,16,11,34);
keypad(num,TRUE);
wbkgd(num,COLOR_PAIR(4));
wrefresh(num);
scr_dump("deletetail.scr");
NUMBER://数量输入
wmove(num,0,0);
while (1)
{
ch=wgetch(num);
switch (ch)
{
case KEY_BACKSPACE: //按退格键盘
if (cnt)
{
getyx(num,now_col,now_row);
mvwaddch(num,now_col,--now_row,' ');
numberStr[--cnt]='\0';
wmove(num,0,now_row);
wrefresh(num);
}
break;
case KEY_F(1):
return 0;
case KEY_DOWN:
case '\n':
goto ENSURE;
default:
if ( cnt<3 && (ch>='1'&&ch<='9') || (ch=='0'&&cnt!=0))
{
now_row++;
waddch(num,ch);
numberStr[cnt]=ch;
numberStr[++cnt]='\0';
wrefresh(num);
break;
}
}
}
ENSURE:
wattron(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
while (1)
{
ch=wgetch(dialog[1]);
switch (ch)
{
case KEY_F(1):
return 0;
case KEY_UP:
wattroff(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
goto NUMBER;
case KEY_RIGHT:
wattroff(dialog[1],A_REVERSE);
mvwprintw(dialog[1],1,2, "确定");
wrefresh(dialog[1]);
goto CANCEL;
case '\n':
//修改链表中count值并重新打印一遍;
if (cnt==0)
{
Message("请输入数量",10,40);
scr_restore("deletetail.scr");
wrefresh(dialog[0]);
numberStr[0]='\0';
cnt=0;
now_row=0;
goto NUMBER;
}
number=atoi(numberStr);
if ( number>pro_info->count )
{
Message("输入数量大于顾客购买的数量",10,40);
scr_restore("deletetail.scr");
wrefresh(dialog[0]);
numberStr[0]='\0';
cnt=0;
now_row=0;
goto NUMBER;
}
else
{
if (message_botton("确定要删除明细",10,40))
{
pro_info->count=pro_info->count-number;
if (pro_info->count==0)
{
salelist.delete_node_by_index(&salelist,index);
return 1;
}
}
return 0;
}
}
}
CANCEL:
wattron(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
while (1)
{
ch=wgetch(dialog[2]);
switch (ch)
{
case KEY_F(1):
return;
case KEY_LEFT:
wattroff(dialog[2],A_REVERSE);
mvwprintw(dialog[2],1,2, "取消");
wrefresh(dialog[2]);
goto ENSURE;
case '\n':
return 0;
}
}
}
/*==============================================================
function:收银窗口与功能实现
===============================================================*/
int finish_deal_win(SALE *sale_info)
{
if (!salelist.count)
{
Message("没有销售商品",10,40);
return 0;
}
int ch;
int now_col1,now_row1;
int now_col2,now_row2;
char secondStr[9]={'\0'};
char thirdStr[9]={'\0'};
float cashReceive=real_cash();//购买商品的总价格
float cashTotal=0;
float cashGive=0;
int cnt1=0;
int radixPoint=0;
NODE* n=NULL;
int i=0;
WINDOW *real,*given,*change;
WINDOW *dialog[3]={NULL};
print_dialog_box(12,40,"收银",1,dialog);
mvwprintw(dialog[0],2,8,"应收:");
mvwprintw(dialog[0],4,8,"实收:");
mvwprintw(dialog[0],6,8,"找零:");
wrefresh(dialog[0]);
keypad(dialog[1],TRUE);
keypad(dialog[2],TRUE);
real=create_win(1,16,8,34);
keypad(real,TRUE);
wbkgd(real,COLOR_PAIR(4));
wprintw(real,"%.2f",cashReceive);
wrefresh(real);
given=create_win(1,16,10,34);
keypad(given,TRUE);
wbkgd(given,COLOR_PAIR(4));
wrefresh(given);
change=create_win(1,16,12,34);
keypad(change,TRUE);
wbkgd(change,COLOR_PAIR(4));
wrefresh(change);
scr_dump("finish.scr");
MONEY:
wmove(given,0,0);
wprintw(given,secondStr);
wrefresh(given);
while (1)
{
ch=wgetch(given);
switch (ch)
{
case KEY_BACKSPACE: //按退格键盘
if (cnt1)
{
if (secondStr[cnt1-1]=='.')
{
radixPoint--;
}
getyx(given,now_col1,now_row1);
mvwaddch(given,now_col1,--now_row1,' ');
secondStr[--cnt1]='\0';
wmove(given,0,now_row1);
wrefresh(given);
}
break;
case KEY_F(1):
return 0;
case KEY_DOWN:
case '\n':
goto ENSURE;
default:
if ( (cnt1<8) && (ch>='1'&&ch<='9') || (ch=='0'&&cnt1!=0) || (ch=='.'&&radixPoint==0) )
{
now_row1++;
waddch(given,ch);
if (ch=='.')
{
radixPoint++;
}
secondStr[cnt1]=ch;
secondStr[++cnt1]='\0';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -