📄 proscenium.c
字号:
#include <stdlib.h>
#include "public.h"
#include "posdb.h"
#include "posui.h"
#include "linklist.h"
#include "proscenium.h"
void proscenium_body(char *user)//前台界面
{
noecho();
WINDOW *pre = NULL;
staff_info *print;
print =(staff_info *)malloc(sizeof(staff_info));
memset(print,0,sizeof(staff_info));
pre = create_default_window(25,80,0,0);
mvwprintw(pre,0,33,"欢迎光临xxx超市");
mvwprintw(pre,1,1,"收银员:");
mvwprintw(pre,1,20,"等级:");
mvwprintw(pre,1,36,"交易号:");
mvwprintw(pre,1,54,"时间:");
draw_line(pre,2);
mvwprintw(pre,3,1,"序号");
mvwprintw(pre,3,8,"条形码");
mvwprintw(pre,3,20,"商品名称");
mvwprintw(pre,3,36,"规格");
mvwprintw(pre,3,45,"单位");
mvwprintw(pre,3,54,"单价");
mvwprintw(pre,3,61,"数量");
mvwprintw(pre,3,68,"金额");
mvwprintw(pre,23,1,"F2:新增明细 F3:删除明细 F4:收银 F5:挂单 F6:取单 F7:撤单 F8:退货 F9:退出");
mvwprintw(pre,21,1,"条形码:");
mvwprintw(pre,21,40,"销售状态:");
draw_line(pre,20);
draw_line(pre,4);
draw_line(pre,22);
mvwhline(pre,21,8,' ',14);
user_confirm(user,print);
mvwprintw(pre,1,8,print->name);
mvwprintw(pre,1,25,print->remark);
free(print);
wrefresh(pre);
delwin(pre);
}
int back_body(char *user,sale_record *temp)
{
noecho();
WINDOW *pre = NULL;
staff_info *print;
print =(staff_info *)malloc(sizeof(staff_info));
memset(print,0,sizeof(staff_info));
pre = create_default_window(25,80,0,0);
mvwprintw(pre,0,33,"欢迎光临xxx超市");
mvwprintw(pre,1,38,"退货");
draw_line(pre,2);
mvwprintw(pre,3,1,"收银员:");
mvwprintw(pre,3,20,"等级:");
mvwprintw(pre,3,36,"交易号:");
mvwprintw(pre,3,54,"时间:");
draw_line(pre,4);
mvwprintw(pre,5,1,"序号");
mvwprintw(pre,5,8,"条形码");
mvwprintw(pre,5,20,"商品名称");
mvwprintw(pre,5,36,"规格");
mvwprintw(pre,5,45,"单位");
mvwprintw(pre,5,54,"单价");
mvwprintw(pre,5,61,"数量");
mvwprintw(pre,5,68,"金额");
mvwprintw(pre,23,4,"F3:退货商品");
mvwprintw(pre,23,20,"F4:退货");
mvwprintw(pre,23,35,"F9:退出");
mvwprintw(pre,23,60,"销售状态:");
mvwprintw(pre,23,69,"退货");
draw_line(pre,6);
draw_line(pre,22);
user_confirm(user,print);
mvwprintw(pre,3,8,print->name);
mvwprintw(pre,3,25,print->remark);
mvwprintw(pre,3,43,temp->trans_id);
mvwprintw(pre,3,59,temp->date);
free(print);
wrefresh(pre);
delwin(pre);
return 1;
}
void proscenium_manager(char *user)//前台管理
{
int result = 0;
int ch = 0,flag = 0,i = 0,change = 0,offset = 0,limit = 15;
int *cur = &flag,*offtmp = &offset;
char product_code[20] ={0};
strcpy(product_code,"CN");
product_info *check;
check =(product_info *)malloc(sizeof(product_info));
memset(check,0,sizeof(product_info));
sale_record *s_record;
s_record = (sale_record *)malloc(sizeof(sale_record));
LINKLIST *linklist,*sale_temp,*backlist;//linklist 商品销售明细,sale_temp 挂单,back_list退货
linklist = (LINKLIST *)malloc(sizeof(LINKLIST));
sale_temp = (LINKLIST *)malloc(sizeof(LINKLIST));
backlist = (LINKLIST *)malloc(sizeof(LINKLIST));
link_init(linklist);
link_init(sale_temp);
link_init(backlist);
NODE *p;
WINDOW *input = NULL,*info = NULL;
proscenium_body(user);
init_sale_record(s_record,user);
display_saleid(s_record);
info = newwin(15,78,5,1);
wbkgd(input,COLOR_PAIR(1));
input = newwin(1,12,21,8);
wbkgd(input,COLOR_PAIR(1));
mvwaddstr(input,0,0,"CN");
wmove(input,0,2);
keypad(input,true);
while(1)
{
wmove(input,0,strlen(product_code));
ch = wgetch(input);
if(ch == KEY_DOWN||ch == KEY_UP)
{
if (linklist->count == 0)
{
continue;
}
change = *cur;
print_info(info,linklist,flag,offset,0);
KEY_UP_DOWN(linklist->count,ch,cur);
change = *cur - change;
if(display_control(cur,offtmp,change,limit))
{
print_all(info,linklist,cur,offtmp);
if(ch == KEY_UP)
{
print_info(info,linklist,flag,offset,0);
*cur = (*cur)-limit+1;
*offtmp = 1;
print_info(info,linklist,flag,offset,1);
}
}
else
print_info(info,linklist,flag,offset,1);
}
else if(ch == 10)
{
if(s_record->sale_state == 1)
continue;
if(flag == 0)
*offtmp = 0;
if(get_product(product_code,check))
{
if (check->count == 0)
{
message("已售完!",10,30);
}
else
{
change = flag;
if(i = is_new(linklist,product_code))
{
print_info(info,linklist,flag,offset,0);
*cur = i;
p = get_node_by_index(linklist,i);
if (++((for_sale *)(p->node_data))->count > check->count)
{
message("库存为空!",10,30);
((for_sale *)(p->node_data))->count--;
}
else
{
((for_sale *)(p->node_data))->count++;
((for_sale *)(p->node_data))->sum = ((for_sale *)(p->node_data))->sale_price * ((for_sale *)(p->node_data))->discount * ((for_sale *)(p->node_data))->count;
}
}
else
{
for_sale *temp;
temp = (for_sale *)malloc(sizeof(for_sale));
memset(temp,0,sizeof(for_sale));
get_product_info(temp,check);
temp->count = 1;
temp->sum = (temp->sale_price)*(temp->discount);
insert_rear_link(linklist,temp);
print_info(info,linklist,flag,offset,0);
*cur = linklist->count;
}
}
change = flag - change;
if(display_control(cur,offtmp,change,limit))
print_all(info,linklist,cur,offtmp);
else
print_info(info,linklist,flag,offset,1);
}
else
{
message("没有此商品!",8,20);
}
memset(check,0,sizeof(product_info));
memset(product_code,0,20*sizeof(char));
strcpy(product_code,"CN");
mvwaddstr(input,0,0,"CN ");
wmove(input,0,2);
}
else if(ch>=KEY_F(2)&&ch<=KEY_F(9))
{
result = sale_option(linklist,sale_temp,backlist,s_record,cur,offtmp,ch);
if(result == 9)
{
delwin(input);
delwin(info);
free(check);
free(s_record);
free_list(linklist);
free_list(backlist);
free_list(sale_temp);
return;
}
if (result == 2)
{
print_info(info,linklist,flag,offset,1);
}
if(result == 1)
{
if(linklist->count == 0)
{
*cur = 0;
*offtmp = 0;
}
else
{
*cur = (*cur)-(*offtmp)+1;
*offtmp = 1;
}
print_all(info,linklist,cur,offtmp);
}
if (result == 6)
{
*cur = 0;
*offtmp = 0;
print_all(info,linklist,cur,offtmp);
strcpy(s_record->staff_id,user);
display_saleid(s_record);
}
if(result == 4 ||result == 5)
{
if (result == 4)
{
init_sale_record(s_record,user);
display_saleid(s_record);
}
free_all_node(linklist);
free_all_node(backlist);
flag = 0;
werase(info);
wrefresh(info);
}
print_info(info,linklist,flag,offset,1);
}
else
{
if(s_record->sale_state == 1)
continue;
get_info(input,product_code,ch,1,10);
}
}
}
void print_info(WINDOW *win,LINKLIST *linklist,int cur,int offfset,int style)//打印一行商品信息
{
if(cur == 0)
return;
if(style == 0)
wattroff(win,A_REVERSE);
else
wattron(win,A_REVERSE);
NODE *p;
p = get_node_by_index(linklist,cur);
mvwhline(win,offfset-1,0,' ',78);
mvwprintw(win,offfset-1,1,"%d",cur);
mvwprintw(win,offfset-1,8,((for_sale *)(p->node_data))->bar_code);
mvwprintw(win,offfset-1,20,((for_sale *)(p->node_data))->name);
mvwprintw(win,offfset-1,36,((for_sale *)(p->node_data))->spec);
mvwprintw(win,offfset-1,45,((for_sale *)(p->node_data))->unit);
mvwprintw(win,offfset-1,54,"%.2f",((for_sale *)(p->node_data))->sale_price);
mvwprintw(win,offfset-1,61,"%d",((for_sale *)(p->node_data))->count);
mvwprintw(win,offfset-1,68,"%.2f",((for_sale *)(p->node_data))->sum);
wrefresh(win);
}
void KEY_UP_DOWN(int limit,int ch,int *cur)//上下键选择商品的操作
{
if(ch == KEY_UP)
{
if(*cur == 1)
return;
else
{
(*cur)--;
}
}
if(ch == KEY_DOWN)
{
if(*cur == limit)
return;
else
{
(*cur)++;
}
}
}
void get_product_info(for_sale *temp,product_info *copy)
{
strcpy(temp->bar_code,copy->bar_code);
strcpy(temp->name,copy->name);
strcpy(temp->unit,copy->unit);
strcpy(temp->spec,copy->spec);
temp->sale_price = copy->sale_price;
temp->discount = copy->discount;
temp->storage = copy->count;
}
int is_new(LINKLIST *linklist,char *num)//是否是新的商品
{
if(linklist->count == 0)
return 0;
else
{
NODE *p;
p = linklist->head;
int i = 1;
for(i;i <= linklist->count;i++)
{
if(strcmp(num,((for_sale *)(p->node_data))->bar_code) == 0)
return i;
p = p->next;
}
}
return 0;
}
void display_saleid(sale_record *temp)//显示时间和交易号
{
WINDOW *id = NULL,*time = NULL,*state = NULL;
id = newwin(1,10,1,43);
time = newwin(1,17,1,59);
state = newwin(1,5,21,50);
mvwprintw(id,0,0,"%s",temp->trans_id);
wrefresh(id);
mvwprintw(time,0,0,temp->date);
wrefresh(time);
if(temp->sale_state == 0)
mvwprintw(state,0,0,"正常");
else if(temp->sale_state == 1)
mvwprintw(state,0,0,"退货");
else
mvwprintw(state,0,0,"挂单");
wrefresh(state);
delwin(id);
delwin(time);
delwin(state);
}
int sale_option(LINKLIST *linklist,LINKLIST *sale_temp,LINKLIST *backlist,sale_record *temp,int *cur,int *offtmp,int ch)//功能键操作
{
int temp1 = *cur;
int i = 0;
if(ch == KEY_F(9))
{
i = sale_optionf9(linklist,sale_temp,temp);
}
if(ch == KEY_F(2))
{
if(temp1 >0 &&temp->sale_state != 1)
i = option_f2f3(linklist,backlist,cur,ch,0);
}
else if (ch == KEY_F(3))
{
if(temp1 != 0)
i = option_f2f3(linklist,backlist,cur,ch,0);
}
else if(ch == KEY_F(4))
{
if(temp1 != 0 ||temp->sale_state == 1)
i = sale_optionf4(linklist,backlist,temp);
}
else if (ch == KEY_F(5))
{
if(temp1 >0 &&temp->sale_state != 1)
i = sale_optionf5(linklist,sale_temp,temp);
}
else if (ch == KEY_F(6))
{
if(temp->sale_state != 1)
i = sale_optionf6(linklist,sale_temp,temp);
}
else if(ch == KEY_F(7))
{
if(temp->sale_state != 1)
i = sale_optionf7(linklist,sale_temp,temp);
}
else if (ch == KEY_F(8))
{
if(temp1 == 0)
{
scr_dump("temp3.scr");
i = sale_optionf8(linklist,backlist,temp);
scr_restore("temp3.scr");
}
}
return i;
return 0;
}
int option_f2f3(LINKLIST *linklist,LINKLIST *backlist,int *cur,int ch,int style)//删除明细和增加明细的操作
{
scr_dump("temp1.scr");
char str[8] = {0};
int ch1 = 0,nums = 0,temp = *cur,i = 0;
NODE *p;
p = get_node_by_index(linklist,temp);
WINDOW *new_product = NULL;
WINDOW *num = NULL,*amount = NULL;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -