📄 cash_manage.c
字号:
/*#include "dialog_frame.h"*/
#include "cash_manage.h"
#include "roll_bar.h"
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int node_exist_judge(LINK *link,char *str);
/*
scr_dump(scan.dat);//屏幕保存
scr_restore(scan.dat);//屏幕恢复
*/
extern int (*fp1)(NODE *node,char * key);
////////////////////////////////////////////////////////辅助函数
int getInputString(ROLL_BAR *r)
{
int sign=0;
sign=(*(r->input))->input_char(*(r->input),1,1,1);
return sign;
}
int (*fp11)(ROLL_BAR *r)=getInputString;
/*
typedef struct sell_goods_list
{
int sell_list_id;
char bar_code[9];
int sell_ID;
int total_count;
float sell_price;
}SELL_GOODS_LIST;*/
void print_a_node(ROLL_BAR *r,int choise)
{
NODE *temp=NULL;
temp=(*(r->link))->get_node_by_index((*(r->link)),r->current_suffix);
if(choise)
{
(*(r->frame+1))->color=*(r->colors+1);
}
else
{
(*(r->frame+1))->color=*(r->colors);
}
mvwprintw((*(r->frame+1))->win,0,0,"%-8d%-12s%-8d%-8d%-8.2f",
((SELL_GOODS_LIST *)(temp->data))->sell_list_id,((SELL_GOODS_LIST *)(temp->data))->bar_code,((SELL_GOODS_LIST *)(temp->data))->sell_ID
,((SELL_GOODS_LIST *)(temp->data))->total_count,((SELL_GOODS_LIST *)(temp->data))->sell_price);
(*(r->frame+1))->draw(*(r->frame+1));
}
void print_aa_page(ROLL_BAR *r)
{
int i=0;
if((*(r->link))->count < r->height_and_length[0])
{
r->current_suffix++;
for (i=1;i<(*(r->link))->count;i++)
{
mvwin((*(r->frame+1))->win,r->startXY[0]+i,r->startXY[1]);
print_a_node(r,0);
r->current_suffix++;
}
}
else
{
r->current_suffix++;
for (i=1;i< r->height_and_length[0];i++)
{
mvwin((*(r->frame+1))->win,r->startXY[0]+i,r->startXY[1]);
print_a_node(r,0);
r->current_suffix++;
}
}
r->current_suffix=1;
mvwin((*(r->frame+1))->win,r->startXY[0],r->startXY[1]);
print_a_node(r,1);
}
///////////////////////////////////////////////////////////////////////////////////删除全部
void del_all_list(LINK *note)
{
del_sell_list_by_sell_id(((SELL_GOODS_LIST *)(note->head->next->data))->sell_ID);
note->del_all_data(note);
}
///////////////////////////////////////////////////////////////////////////////////删除一个
void del_one_record(LINK *note,ROLL_BAR *r)
{
NODE *temp=note->get_node_by_index(note,r->current_suffix);
del_sell_list_by_bar_code(((SELL_GOODS_LIST *)(note->head->next->data))->bar_code);
note->del_node_by_index(note,r->current_suffix);
}
///////////////////////////////////////////////////////////////////////////////////滚动界面控制
void action_roll_bar(ROLL_BAR *r,LINK *note)
{
int result=0;
int sign=1;
int i=0;
int place=0;
BUTTON *b[3];
b[0]=createButton(22,17,3,8,"全删");
b[1]=createButton(22,27,3,8,"删除");
b[2]=createButton(22,37,3,8,"退出");
b[0]->setColor(b[0],3,1,4);
b[1]->setColor(b[1],3,1,4);
b[2]->setColor(b[2],3,1,4);
b[0]->show(b[0]);
b[1]->show(b[1]);
b[2]->show(b[2]);
do
{
result=r->get_input_string(r,fp11);
switch (result)
{
case 1:
if(0 == (*(r->link))->count)
{
continue;
}
if (r->current_place>1)
{
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1,r->startXY[1]);
print_a_node(r,0);
r->current_place--;
r->current_suffix--;
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1,r->startXY[1]);
print_a_node(r,1);
}
else
{
if (r->current_suffix>1)
{
r->current_suffix--;
mvwin((*(r->frame+1))->win,r->startXY[0],r->startXY[1]);
print_a_node(r,1);
for (i=1;i<r->height_and_length[0];i++)
{
r->current_suffix++;
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place+i-1,r->startXY[1]);
print_a_node(r,0);
}
r->current_suffix-=r->height_and_length[0]-1;
}
else
{
continue;
}
}
break;
case 2:
if(0 == (*(r->link))->count)
{
continue;
}
if(r->current_suffix<(*(r->link))->count)
{
if (r->current_place<r->height_and_length[0])
{
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1,r->startXY[1]);
print_a_node(r,0);
r->current_place++;
r->current_suffix++;
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1,r->startXY[1]);
print_a_node(r,1);
}
else
{
r->current_suffix++;
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1,r->startXY[1]);
print_a_node(r,1);
for (i=1;i<r->height_and_length[0];i++)
{
r->current_suffix--;
mvwin((*(r->frame+1))->win,r->startXY[0]+r->current_place-1-i,r->startXY[1]);
print_a_node(r,0);
}
r->current_suffix+=r->height_and_length[0]-1;
}
}
else
{
continue;
}
break;
case 9:
do
{
if(place == 4)
{
place = 1;
}
else
{
place++;
}
if(place == 4)
{
break;
}
switch (place)
{
case 1:
b[0]->pitch_on(b[0]);
sign=b[0]->attack(b[0],3,2,2);
if(sign == 0)
{
del_all_list(note);
messagebox(stdscr,7,19,44,12,PAUSE,"退货成功");
}
break;
case 2:
b[1]->pitch_on(b[1]);
sign=b[1]->attack(b[1],1,3,3);
if(sign == 0)
{
del_one_record(note,r);
sign=9;
place--;
}
break;
case 3:
b[2]->pitch_on(b[2]);
sign=b[2]->attack(b[2],2,1,1);
break;
}
}
while (1);
break;
}
}
while (sign);
b[0]->free(&b[0]);
b[1]->free(&b[1]);
b[2]->free(&b[2]);
}
////////////////////////////////////////////////////////////////////////////添加明细
void show_add_list(DIALOG *d)
{
scr_dump("scan.dat");//屏幕保存
box((*(d->f))->win,0,0);
mvwprintw((*(d->f))->win,0,12,"%s",*(d->str));
mvwprintw((*(d->f))->win,2,3,"%s",*(d->str+1));
mvwprintw((*(d->f))->win,4,5,"%s",*(d->str+2));
mvwprintw((*(d->f))->win,6,1,"%s",*(d->str+3));
(*(d->f))->draw(*(d->f));
(*((d->f)+1))->draw(*((d->f)+1));
(*((d->f)+2))->draw(*((d->f)+2));
(*(d->b))->setColor(*(d->b),3,1,4);
(*((d->b)+1))->setColor(*((d->b)+1),3,1,4);
(*(d->b))->show(*(d->b));
(*((d->b)+1))->show(*((d->b)+1));
WINDOW *input=derwin((*(d->f))->win,1,2,2,10);
wattron(input,COLOR_PAIR(1));
wbkgd(input,COLOR_PAIR(1));
mvwprintw(input,0,0,"CN");
touchwin(input);
wrefresh(input);
}
void (*fp2)(DIALOG *d)=show_add_list;
int action(DIALOG *d)
{
int result=0,sign=1;
int node_exist=0;
int count=0,i=0;
NODE *temp=NULL;
int len=strlen((*(d->i))->str)+3;
char *t=(char *)malloc(len);
memset(t,0,len);
do
{
switch (sign)
{
case 1:
sign=(*(d->i))->input_char(*(d->i),1,0,1);
if(sign==27)
{
sign=messagebox(stdscr,7,19,44,12,YORN,"确认要退出");
if(sign)
{
sign=0;
break;
}
else
{
sign=1;
}
}
del_blank((*(d->i))->str);
if(isdigital((*(d->i))->str) == 0 || strlen((*(d->i))->str) == 0)
{
/*请输入数字*/
messagebox(stdscr,7,19,44,12,PAUSE,"请输入数字");
sign=1;
}
break;
case 2:
strcpy(t,"CN");
strcat(t,(*(d->i))->str);
count=select_db_goods(t);//数据库中有几个该货物
if (count == -1)//数据库中无该货物
{
sign=1;
/*显示不存在*/
messagebox(stdscr,7,19,44,12,PAUSE,"仓库中没这东西");
}
else//数据库中有该货物
{
mvwprintw((*(d->f))->win,4,10," \b\b\b\b%d",count);//显示库存
wrefresh((*(d->f))->win);
sign=(*((d->i)+1))->input_char(*((d->i)+1),1,0,1);//输入个数
/*数目有没有超过*/
del_blank((*((d->i)+1))->str);
if(isdigital((*((d->i)+1))->str)&&strlen((*((d->i)+1))->str)!=0)//输入的数目不否合法*************
{
i=atoi((*((d->i)+1))->str);
if (i > count)//输入的数量超过库存
{
/*提示超过库存量*/
messagebox(stdscr,7,19,44,12,PAUSE,"您输入的数量超出库存量");
sign=2;
}
}
else
{
sign=2;
messagebox(stdscr,7,19,44,12,PAUSE,"请输入数字");
/*提示有非数字字符*/
}
}
break;
case 3:
(*(d->b))->pitch_on(*(d->b));
sign=(*(d->b))->attack(*(d->b),2,4,4);
if(sign == 0)
{
result=1;
}
break;
case 4:
(*((d->b)+1))->pitch_on(*((d->b)+1));
sign=(*((d->b)+1))->attack(*((d->b)+1),3,1,1);
if(sign == 0)
{
result=0;
}
break;
}
}
while (sign);
free(t);
return result;
}
int (*fp3)(DIALOG *d)=action;
/*
f->free(&f);
f1->free(&f1);
b->free(&b);
b1->free(&b1);
i1->free(&i1);
i2->free(&i2);
*/
void free_dialog(DIALOG **d)
{
(*((*d)->f))->free(&(*((*d)->f)));
(*(((*d)->f)+1))->free(&(*(((*d)->f)+1)));
(*(((*d)->f)+2))->free(&(*(((*d)->f)+2)));
(*((*d)->b))->free(&(*((*d)->b)));
(*(((*d)->b)+1))->free(&(*(((*d)->b)+1)));
(*((*d)->i))->free(&(*((*d)->i)));
(*(((*d)->i)+1))->free(&(*(((*d)->i)+1)));
free((*d));
}
void (*fp4)(DIALOG **d)=free_dialog;
int node_exist_judge(LINK *link,char *str)
{
int result=0;
result=link->get_index_by_key(link,str,(int (*)(void *,void*))fp1);
return result;
}
GMSG *add_list(ROLL *r)
{
FRAME *f[3];
BUTTON *b[2];
INPUT *i[2];
int result=0;
GMSG *msg=(GMSG *)malloc(sizeof(GMSG));
memset(msg,0,sizeof(GMSG));
char *str[4]={"新增明细","条形码:","库存:","添加个数:"};
f[0]=creat_frame(3,19,13,34,3);
f[1]=creat_frame(5,31,1,16,1);
f[2]=creat_frame(9,29,1,18,1);
b[0]=createButton(11,25,3,8,"确定");
b[1]=createButton(11,39,3,8,"取消");
i[0]=create_input(f[1],6,0,2,2);
i[1]=create_input(f[2],4,1,3,3);
//DIALOG *create_dialog(FRAME **f,INPUT **i,BUTTON **b,char **str,LINK *link);
DIALOG *d=create_dialog(f,i,b,str,r->link);
if(r->link->count != 0)
{
NODE *temp=r->link->get_node_by_index(r->link,r->current_suffix);
char bar[7]={0};
strcpy(bar,((UNS *)(temp->data))->bar_code+2);
strcpy((*(d->i))->str,bar);
mvwprintw((*(d->f+1))->win,0,0,"%s",bar);
char *t=((UNS *)((r->link->get_node_by_index(r->link,r->current_suffix))->data))->bar_code;
mvwprintw((*(d->f))->win,4,10,"%d",select_db_goods(t));
}
d->show(d,(void (*)(void *))fp2);
result=d->control(d,(int (*)(void *))fp3);
if(result)
{
msg->num=atoi((*(d->i+1))->str);
strcpy(msg->bar_code,(*(d->i))->str);
}
else
{
free(msg);
msg=NULL;
}
free(d);
f[0]->free(&f[0]);
f[1]->free(&f[1]);
f[2]->free(&f[2]);
b[0]->free(&b[0]);
b[1]->free(&b[1]);
i[1]->free(&i[1]);
i[0]->free(&i[0]);
scr_restore("scan.dat");//屏幕恢复
return msg;
}
///////////////////////////////////////////删除明细
void show_del_list(DIALOG *d)
{
scr_dump("scan2.dat");//屏幕保存
box((*(d->f))->win,0,0);
mvwprintw((*(d->f))->win,0,12,"%s",*(d->str));
mvwprintw((*(d->f))->win,2,3,"%s",*(d->str+1));
mvwprintw((*(d->f))->win,4,5,"%s",*(d->str+2));
mvwprintw((*(d->f))->win,6,1,"%s",*(d->str+3));
(*(d->f))->draw(*(d->f));
(*((d->f)+1))->draw(*((d->f)+1));
(*(d->b))->setColor(*(d->b),3,1,4);
(*((d->b)+1))->setColor(*((d->b)+1),3,1,4);
(*(d->b))->show(*(d->b));
(*((d->b)+1))->show(*((d->b)+1));
}
int action_del_list(DIALOG *d,ROLL *r)
{
int result=0,sign=1;
int node_exist=0;
int count=0,i=0;
NODE *temp=NULL;
do
{
switch (sign)
{
case 1:
sign=(*((d->i)))->input_char(*((d->i)),1,0,1);//输入个数
if(sign==27)
{
sign=messagebox(stdscr,7,19,44,12,YORN,"确认要退出");
if(sign)
{
sign=0;
break;
}
else
{
sign=1;
}
}
/*数目有没有超过*/
del_blank((*(d->i))->str);
if(isdigital((*(d->i))->str)&&strlen((*(d->i))->str)!=0)//输入的数目不否合法
{
i=atoi((*(d->i))->str);
count=((UNS *)((r->link->get_node_by_index(r->link,r->current_suffix))->data))->total_count;
if (i > count)//输入的数量超过库存
{
/*提示超过库存量*/
messagebox(stdscr,7,19,44,12,PAUSE,"您输入的数量超出数量");
sign=1;
}
}
else
{
sign=1;
messagebox(stdscr,7,19,44,12,PAUSE,"请输入数字");
/*提示有非数字字符*/
}
break;
case 2:
(*(d->b))->pitch_on(*(d->b));
sign=(*(d->b))->attack(*(d->b),1,3,3);
if(sign == 0)
{
result=1;
}
break;
case 3:
(*((d->b)+1))->pitch_on(*((d->b)+1));
sign=(*((d->b)+1))->attack(*((d->b)+1),2,1,1);
if(sign == 0)
{
result=0;
}
break;
}
}
while (sign);
return result;
}
GMSG *del_list(ROLL *r)
{
if(r->link->count == 0)
{
messagebox(stdscr,7,19,44,12,PAUSE,"没有可以删除的货物");
return NULL;
}
FRAME *f[2];
BUTTON *b[2];
INPUT *i;
int result=0;
GMSG *msg=(GMSG *)malloc(sizeof(GMSG));
memset(msg,0,sizeof(GMSG));
char *str[4]={"删除明细","条形码:","个数:","删除个数:"};
f[0]=creat_frame(3,19,13,34,3);
f[1]=creat_frame(9,29,1,18,1);
b[0]=createButton(11,25,3,8,"确定");
b[1]=createButton(11,39,3,8,"取消");
i=create_input(f[1],4,0,2,2);
DIALOG *d=create_dialog(f,&i,b,str,r->link);
NODE *temp=r->link->get_node_by_index(r->link,r->current_suffix);
mvwprintw((*(d->f))->win,2,10,"%s",((UNS *)(temp->data))->bar_code);
int t=((UNS *)((r->link->get_node_by_index(r->link,r->current_suffix))->data))->total_count;
mvwprintw((*(d->f))->win,4,10,"%d",t);
show_del_list(d);
result=action_del_list(d,r);
if(result)
{
msg->num=atoi((*(d->i))->str);
strcpy(msg->bar_code,((UNS *)(temp->data))->bar_code);
}
else
{
free(msg);
msg=NULL;
}
free(d);
f[0]->free(&f[0]);
f[1]->free(&f[1]);
b[0]->free(&b[0]);
b[1]->free(&b[1]);
i->free(&i);
scr_restore("scan2.dat");//屏幕恢复
return msg;
}
///////////////////////////////////////////////收银
void show_settle_accounts(DIALOG *d)
{
scr_dump("scan3.dat");//屏幕保存
box((*(d->f))->win,0,0);
mvwprintw((*(d->f))->win,0,13,"%s",*(d->str));
mvwprintw((*(d->f))->win,2,5,"%s",*(d->str+1));
mvwprintw((*(d->f))->win,4,1,"%s",*(d->str+2));
mvwprintw((*(d->f))->win,6,1,"%s",*(d->str+3));
mvwprintw((*(d->f))->win,8,1,"%s",*(d->str+4));
mvwprintw((*(d->f))->win,10,5,"%s",*(d->str+5));
(*(d->f))->draw(*(d->f));
(*((d->f)+1))->draw(*((d->f)+1));
(*(d->b))->setColor(*(d->b),3,1,4);
(*((d->b)+1))->setColor(*((d->b)+1),3,1,4);
(*(d->b))->show(*(d->b));
(*((d->b)+1))->show(*((d->b)+1));
}
float accounts(LINK *link)
{
float count=0;
NODE *temp=link->head->next;
while (temp->next!=NULL)
{
count=count+(((UNS *)(temp->data))->total_pay);
temp=temp->next;
}
return count;
}
int action_settle_accounts(DIALOG *d,ROLL *r)
{
int result=0,sign=1;
int node_exist=0;
float count=0;
float i=0;
NODE *temp=NULL;
do
{
switch (sign)
{
case 1:
sign=(*((d->i)))->input_char(*((d->i)),1,0,1);//输入个数
if(sign==27)
{
sign=messagebox(stdscr,7,19,44,12,YORN,"确认要退出");
if(sign)
{
sign=0;
break;
}
else
{
sign=1;
}
}
/*数目有没有超过*/
del_blank((*(d->i))->str);
if(isdigital((*(d->i))->str)&&strlen((*(d->i))->str)!=0)//输入的数目不否合法
{
i=atof((*(d->i))->str);
count=accounts(r->link);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -