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

📄 user.c

📁 多线程的出版商和用户的过程的模拟
💻 C
字号:
#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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -