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

📄 poslink.c

📁 一个不错的POS系统
💻 C
字号:
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include "posLink.h"


void link_init(C_CLASS LINKLIST* link)
{
	NODE* node;
    link->THIS = link; 
    node = (NODE*)malloc(sizeof(NODE));
	
    init_node(node);
	
    link->head = node; 
    link->rearptr = link->head;
    link->count = 0;
	
    link->insert_rear = link_insert_rear;
    link->get_node_by_index = link_get_node_by_index;
    link->get_node_by_key = link_get_node_by_key;
    link->get_index_by_key = link_get_index_by_key;
    link->delete_node_by_key = link_delete_node_by_key;
    link->clear = link_clear;
    link->del = link_del;
	link->del_node_by_index=link_delete_node_by_index;
	/*link->del_node_by_key=link_del_node_by_key;*/
}


void link_insert_rear(C_CLASS LINKLIST* link,void *data,int size)
{
	NODE* node;
	node = (NODE*)malloc(sizeof(NODE));
	init_node(node);
	link->rearptr->next=node;
	node->prior=link->rearptr;
	
	link->rearptr=node;
	link->count++;
	
	node->data=(void *)malloc(size);
	memcpy(node->data,data,size);
	
}

NODE* link_get_node_by_index(C_CLASS LINKLIST* link,int index)
{
	
	if(index>link->count||index<0)
	{
		printf("index is invalid  ");
		return NULL;
	}
	else
	{
		NODE * head=link->head;
		int i=0;
		for(i=1;i<=index;i++)
		{
			head=head->next;
		}
		return head;
	}
}


NODE* link_get_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
	NODE * head=link->head;
	
	int i=0;
	for(i=1;i<=link->count;i++)	
	{
		head=head->next;	
		if(condition(head->data,key)==0)
			break;
	}
	return head;
}

int link_get_index_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
	NODE * head =link->head;
	int i=0;
	for(i=1;i<=link->count;i++)
	{
		head=head->next;	
		if(condition(head->data,key)==0)
			break;
	}
	return i;
}

int link_delete_node_by_index(C_CLASS LINKLIST* link,int index)
{
	if(index>link->count||index<0)
	{
		printf("index is invalid");
		return 0;
	}
	else
	{
		NODE * head =link->head;
		NODE * indexprior,* indexnext;
		int i=0;
		for(i=1;i<=index;i++)
		{
			head=head->next;		
		}
		indexprior=head->prior;
		indexnext=head->next;
		if(indexnext==NULL)
		{
			indexprior->next=NULL;
			link->rearptr=indexprior;
		}
		else
		{
			indexprior->next=indexnext;
			indexnext->prior=indexprior;
		}
		free_node(head);
		link->count--;
		
	}
	return 1;
}

int link_delete_node_by_key(C_CLASS LINKLIST* link,char* key,int (*condition)(void *p1,void *p2))
{
	NODE * head =link->head;
	NODE * indexprior,* indexnext;
	int i=0;
	for(i=1;i<=link->count;i++)
	{
		head=head->next;
		if(condition(head->data,key)==0)
			break;
	}
	indexprior=head->prior;
	indexnext=head->next;
	if(indexnext==NULL)
	{
		indexprior->next=NULL;
		link->rearptr=indexprior;
	}
	else
	{
		indexprior->next=indexnext;
		indexnext->prior=indexprior;
	}
	free_node(head);
	link->count--;
	return 0;
}

void link_clear(C_CLASS LINKLIST* link)
{
	link_del(link);
	free(link->head);
}


void link_del(C_CLASS LINKLIST* link)
{
	int i,k=link->count;
	for(i=1;i<=k;i++)
		link_delete_node_by_index(link,1);
}

void init_node(NODE* n)
{
	n->data=NULL;
	n->next=NULL;
	n->prior=NULL;
}

NODE* create_node(void *data,int size)
{
	return NULL;
}

void free_node(NODE *n)
{
	free(n->data);
	free(n);
}
int condition_product(void * data,char *barcode)
{
	BARINFO barInfo;	
	
	barInfo=(BARINFO)data;
	if (strcmp(barInfo->bar_code,barcode)==0)
	{
		return 0;
	}
	else
		return 1;
}

⌨️ 快捷键说明

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