user.c

来自「多线程的出版商和用户的过程的模拟」· C语言 代码 · 共 135 行

C
135
字号
#include"Source.h"

TUser *CreateUser(char *name)
{
	TUser *temp=NULL;
	temp=malloc(sizeof(TUser));
	if(temp==NULL)
		return NULL;
	strcpy(temp->name,name);
	temp->bill=NULL;
	return temp;

}

TBook *QueryBookShop(TBookShop *bp,BookClass type1,BType type2)
{
	TBook *temp=NULL;
	temp=bp->BookList[type1];
	while(temp!=NULL)
	{
		if(temp->type==type2)
			return temp;
		temp=temp->next;
	}
	return NULL;
}


int UserOrderBook(TBookShop *bp,TBook *b,TUser *u,int num)
{
	TOrderFromShop *temp=NULL;

    temp=malloc(sizeof(TOrderFromShop));
	if(temp==NULL)
	{
		printf("create OrderFromShop Node fail!\n");
		return 0;
	}
	temp->type=b->type;
	strcpy(temp->BookName,b->BookName);
    temp->user=u;
	temp->number=num;
	temp->CallBack=UserBuyBook;
	temp->next=bp->OrderList;
	bp->OrderList=temp;
	fprintf(work,"%s order book %s %d from %s\n",u->name,b->BookName,num,bp->BookShopName);
    printf("%s order book %s %d from %s\n",u->name,b->BookName,num,bp->BookShopName);
	return 1;
}


int UserBuyBook(TBookShop *bp,TBook *b,TUser *u,int num)
{       
	TBill_User *bill_user=NULL;
	TBill_BookShop_Sell *bill_sell=NULL;
	

     bill_user=malloc(sizeof(TBill_User));
	 bill_sell=malloc(sizeof(TBill_BookShop_Sell));
	 if(bill_user==NULL || bill_sell==NULL)
	    return 0;
     strcpy(bill_user->bookname,b->BookName);
		
	strcpy(bill_user->bookshopname,bp->BookShopName);
        bill_user->next=NULL;
        strcpy(bill_sell->bookname,b->BookName);
		strcpy(bill_sell->username,u->name);
        bill_sell->next=NULL;
	if(b->Num>=num)  
	{
		b->Num-=num;
	
		fprintf(work,"user %s buy book %s %d from %s\n",u->name,b->BookName,num,bp->BookShopName);
		printf("user %s buy book %s %d from %s\n",u->name,b->BookName,num,bp->BookShopName);
		
	    
		
		bill_user->num=num;
		
		bill_sell->num=num;
		
        bill_sell->next=bp->bill_sell;
		bp->bill_sell=bill_sell;
		bill_user->next=u->bill;
		u->bill=bill_user;
		
			return 1;
	}
	else        if(b->Num>0)
	{
      
	   fprintf(work,"user %s buy book %s %d from %s\n",u->name,b->BookName,b->Num,bp->BookShopName);
       printf("user %s buy book %s %d from %s\n",u->name,b->BookName,b->Num,bp->BookShopName); 
	   
	   bill_user->num=b->Num;
	   
	   bill_sell->num=b->Num;
	   

        bill_sell->next=bp->bill_sell;
		bp->bill_sell=bill_sell;
		bill_user->next=u->bill;
		u->bill=bill_user;

	   UserOrderBook(bp,b,u,num-b->Num);
           b->Num=0;
	   
	  
	   return 2;
	}
	
}

int FreeUser(TUser *user)
{
	TBill_User *temp=NULL;
	
  if(user==NULL) return 0;
  temp=user->bill;
  while(temp!=NULL)
  {
	  user->bill=temp->next;
	  temp=temp->next;
	  free(temp);
	  temp=user->bill;
  }
  free(user);
  user=NULL;
  return 1;
}

⌨️ 快捷键说明

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