⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 roll_frame.c

📁 LINUX下POS收银系统,可以对货物及工作人员进行管理.近本实现增删改查的功能
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "roll_frame.h"
#include "control_db.h"
#include "cash_manage.h"
/*#include "message.h"*/
#include <malloc.h>
#include <math.h> 
#include <time.h>

void clear_roll(ROLL *r);
extern int (*fp1)(NODE *node,char * key);



NODE *get_node_by_suffix(LINK *l,int suffix)
{
	int i=1;
	NODE *temp=l->rearptr->prior;
	while(temp != NULL)
	{
		if(i == suffix)
		{
			return temp;
		}
		else
		{
			temp=temp->prior;
			i++;
		}
	}
	return NULL;
}
void print_node_frame(ROLL *r,int suffix,int color)
{
	NODE *temp=NULL;
	temp=get_node_by_suffix(r->link,suffix);
	r->f->color=color;
	mvwprintw(r->f->win,0,0,"%-7d%-12s%-28s%-6s%-6s%-8.2f%-6d%-8.2f",((UNS*)(temp->data))->num,
		((UNS*)(temp->data))->bar_code,((UNS*)(temp->data))->commodity_name,((UNS*)(temp->data))->spec,
		((UNS*)(temp->data))->unti,((UNS*)(temp->data))->sell_price,((UNS*)(temp->data))->total_count,
		((UNS*)(temp->data))->total_pay);
	r->f->draw(r->f);
}
/*挂单*/
FRAME * hang_and_change_link(ROLL *r,LINK *link,char *date,char *number)
{
	if(link->count == 5)
	{
		messagebox(stdscr,7,19,44,12,PAUSE,"挂单的个数已有5个,不能再挂了");
		return ;
	}
	HMSG h={NULL,"\0","\0"};
	clear_roll(r);
	h.link=r->link;
	strcpy(h.date,date);
	strcpy(h.number,number);
	link->insert_front(link,&h,sizeof(HMSG));
	memset(date,0,strlen(date));
	memset(number,0,strlen(number));
	FRAME *f=creat_frame(21,60,1,10,2);
	f->draw(f);
	mvwprintw(f->win,0,0,"挂单个数:%d",link->count);
	wrefresh(f->win);
	r->link=new_link();
	return f;
}
/*取单*/
void print_one_page(ROLL *r)
{
	int i=0,cur_x=5,cur_y=1;
	r->current_place=1;
	r->current_suffix=1;
	mvwin(r->f->win,cur_x,cur_y);
	print_node_frame(r,r->current_suffix,1);
	if(r->link->count<r->height_and_length[0])
	{
		for(i=0;i<r->link->count-1;i++)
		{
			mvwin(r->f->win,cur_x+1+i,cur_y);
			print_node_frame(r,r->current_suffix+i+1,2);
		}
	}
	else
	{
		for(i=0;i<r->height_and_length[0]-2;i++)
		{
			mvwin(r->f->win,cur_x+1+i,cur_y);
			print_node_frame(r,r->current_suffix+i+1,2);
		}
	}
}
void get_list_and_change_link(ROLL *r,LINK *link,FRAME *f,int index,char *date,char *number)
{
	NODE *temp=link->get_node_by_index(link,index);
	strcpy(date,((HMSG *)(temp->data))->date);
	strcpy(number,((HMSG *)(temp->data))->number);
	r->link=((HMSG *)(temp->data))->link;
	link->del_node_by_index(link,index);
	if(link->count)
	{
		mvwprintw(f->win,0,0,"挂单个数:%d",link->count);
		wrefresh(f->win);
	}
	else
	{
		werase(f->win);
		wrefresh(f->win);
		f->free(&f);
	}
	mvprintw(1,45,"%s",number);
	mvprintw(1,58,"时间:%s",date);
	refresh();
	print_one_page(r);
}
int GetInputString(ROLL *r)
{
	int sign=0;
	sign=r->i->input_char(r->i,1,1,1);
	return sign;
}
void insert_to_roll(ROLL *r,GMSG *msg)
{
	NODE *temp=subm_bar(r->link,msg->bar_code,msg->num);
	int maxSize=r->link->len(r->link);
	int cur_x=5,cur_y=1,i=0,node_index=0;
	if(temp == NULL)
	{
		if(maxSize > 1)
		{
			if(maxSize<r->height_and_length[0])
			{
				print_node_frame(r,r->current_suffix,2);
				r->current_suffix=maxSize;
				r->current_place=maxSize;
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
			else
			{
				r->current_suffix=maxSize;
				r->current_place=r->height_and_length[0] - 1;
				for (i=0;i<r->height_and_length[0]-1;i++)
				{
					mvwin(r->f->win,cur_x+i,cur_y);
					print_node_frame(r,r->current_suffix - r->height_and_length[0] + 2 + i,2);
				}
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
		}
		else
		{
			if(maxSize == 1)
			{
				r->current_suffix=1;
				r->current_place=1;
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
		}	

	}
	else
	{
		node_index=(r->link)->get_index_by_key(r->link,((UNS *)(temp->data))->bar_code,(int (*)(void *,void *))fp1);
		if(abs(r->current_suffix + r->height_and_length[0] - 1 -r->current_place-node_index )<r->height_and_length[0]-1)
		{
			if(r->current_suffix + r->height_and_length[0] - 1 -r->current_place-node_index>=0)
			{
				print_node_frame(r,r->current_suffix,2);
				r->current_place+=(node_index-r->current_suffix);
				r->current_suffix=node_index;
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
			else
			{
				r->current_suffix=node_index;
				r->current_place=r->height_and_length[0]-1;
				for (i=0;i<r->height_and_length[0]-2;i++)
				{
					mvwin(r->f->win,cur_x+i,cur_y);
					print_node_frame(r,r->current_suffix-r->current_place+1+i,2);
				}
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
		}
		else
		{
			if(node_index - r->current_suffix >0)
			{
				r->current_suffix=node_index;
				r->current_place=r->height_and_length[0]-1;
				for (i=0;i<r->height_and_length[0]-2;i++)
				{
					mvwin(r->f->win,cur_x+i,cur_y);
					print_node_frame(r,r->current_suffix-r->current_place+1+i,2);
				}
				mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
				print_node_frame(r,r->current_suffix,1);
			}
			else
			{
				r->current_suffix=node_index;
				r->current_place=1;
				for (i=0;i<r->height_and_length[0]-2;i++)
				{
					mvwin(r->f->win,cur_x+r->current_place+i,cur_y);
					print_node_frame(r,r->current_suffix+i+1,2);
				}
				mvwin(r->f->win,cur_x,cur_y);
				print_node_frame(r,r->current_suffix,1);
				r->i->del_str(r->i);
			}
		}
	}
}


void del_from_roll(ROLL *r,GMSG *msg)
{
	NODE *temp=NULL;
	int sign=0;
	temp=r->link->get_node_by_index( r->link,r->current_suffix);
	int leave_print_row=0,leave_node=0,i=0,cur_x=5,cur_y=1;
	leave_print_row=r->height_and_length[0] - r->current_place;
	leave_node=r->link->count - r->current_suffix;
	/*将数据库中对应的此项数据的总数相应的扣去*/
	updata_goods_from_link(r->link,msg->bar_code,msg->num);

	if((((UNS *)(temp->data))->total_count) - (msg->num)>0)
	{
		((UNS *)(temp->data))->total_count-=msg->num;
		print_node_frame(r,r->current_suffix,1);
	}
	else
	{

		if(r->link->count >= r->height_and_length[0])
		{
			if(leave_print_row <= leave_node)
			{
				r->link->del_node_by_index(r->link,r->current_suffix);
				r->current_suffix--;
				print_node_frame(r,r->current_suffix,1);
				for(i=1;i<leave_print_row;i++)
				{
					mvwin(r->f->win,cur_x+r->current_place+i,cur_y);
					print_node_frame(r,r->current_suffix+i,2);
				}
			}
			else
			{
				r->link->del_node_by_index(r->link,r->current_suffix);
				r->current_suffix--;
				print_node_frame(r,r->current_suffix,1);
				for(i=1;i<r->height_and_length[0] - leave_print_row;i++)
				{
					mvwin(r->f->win,cur_x+r->current_place-i-1,cur_y);
					print_node_frame(r,r->current_suffix-i,2);
				}
			}
		}
		else
		{
			if (r->link->count == 1)
			{
				r->f->color=2;
				r->f->draw(r->f);
				r->f->clearout(r->f);
				wrefresh(r->f->win);
				r->current_suffix=0;
				r->current_place=0;
				sign=r->link->del_node_by_index(r->link,1);
			}
			else
			{
				if(r->current_place == r->link->count)
				{
					sign=r->link->del_node_by_index(r->link,r->current_suffix);
					r->f->color=2;
					r->f->draw(r->f);
					r->f->clearout(r->f);
					wrefresh(r->f->win);
					r->current_place--;
					r->current_suffix--;
					mvwin(r->f->win,cur_x+r->current_place-1,cur_y);
					print_node_frame(r,r->current_suffix,1);
				}
				else
				{
					sign=r->link->del_node_by_index(r->link,r->current_suffix);
					print_node_frame(r,r->current_suffix,1);
					for(i=1;i<leave_node;i++)
					{
						mvwin(r->f->win,cur_x+r->current_place+i-1,cur_y);
						print_node_frame(r,r->current_suffix+i,2);
					}
					mvwin(r->f->win,cur_x+r->current_place+i-1,cur_y);
					r->f->color=2;
					r->f->draw(r->f);
					r->f->clearout(r->f);
					wrefresh(r->f->win);
				}
			}
		}		
	}

}
void clear_roll(ROLL *r)
{
	int i=0,cur_x=5,cur_y=1;
	r->current_suffix=0;
	r->current_place=0;
	for(i=0;i<r->height_and_length[0]-1;i++)
	{
		mvwin(r->f->win,cur_x+r->current_place+i,cur_y);
		r->f->color=2;
		r->f->draw(r->f);
		r->f->clearout(r->f);
	}
}
void del_link(ROLL *r,SELL_LIST *list)
{
	SELL_GOODS_LIST s;
	memset(&s,0,sizeof(SELL_GOODS_LIST));
	SELL_GOODS_LIST *sgl=&s;

	int i=0;
	NODE *temp=NULL;
	clear_roll(r);
	insert_sell_list(list);
	sgl->sell_ID=list->sell_ID;
	for (i=0;i<r->link->count ;i++ )
	{
		temp=r->link->get_node_by_index(r->link,i+1);
		sgl->sell_list_id=get_sell_list_id();
		strcpy(sgl->bar_code,((UNS *)(temp->data))->bar_code);
		sgl->total_count=((UNS *)(temp->data))->total_count;
		sgl->sell_price=((UNS *)(temp->data))->sell_price;
		insert_sell_goods_list(sgl);
	}
	
	r->link->del_all_data(r->link);
}

void create_business_number_and_date(char *date,char *number)
{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -