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

📄 bookshop.c

📁 多线程的出版商和用户的过程的模拟
💻 C
字号:
#include"Source.h"

unsigned long BookShopID=1;










//----------------------function complete begin----------------------------
TBookShop *BookShopCreate(char *name)
{
    TBookShop *temp=NULL;
	int i;
    temp=malloc(sizeof(TBookShop));
    if(temp==NULL)
	{
		printf("create bookshop fail!\n");
		return NULL;
	}
	temp->BookShopID=BookShopID++;
	temp->OrderList=NULL;
	for(i=0; i<7; i++)
	temp->BookList[i]=NULL;
	strcpy(temp->BookShopName,name);
	temp->bill_buy=NULL;
	temp->bill_sell=NULL;
	for(i=0; i<7; i++)
	  temp->typenum[i]=0;
	if(strcmp(name,"C")==0)
	{
		temp->typenum[0]=500;
		temp->typenum[1]=200;
		temp->typenum[6]=200;
	}
	else
	if(strcmp(name,"D")==0)
	{
		temp->typenum[0]=200;
		temp->typenum[1]=500;
		temp->typenum[2]=200;
		temp->typenum[6]=200;
	}
    else
	{
		for(i=0; i<7; i++)
			temp->typenum[i]=200;
	}
	return temp;
}




int BuyNewBook(TPublisher *p,TBookShop *b)
{
   TBook *temp=NULL,*temp1=NULL;
   TBill_Pub *bill_pub=NULL;
   TBill_BookShop_Buy *bill_buy=NULL;
   int i;
   TBookShopInFo *ptr=NULL;
   ptr=p->registedshop;
  
   while(ptr!=NULL)
   {
	   if(ptr->BookShopID==b->BookShopID)  
		   break;
	   ptr=ptr->next;
   }
   for(i=0; i<7; i++)
   { 
     if(ptr->type[i]>0)
	 {
	   temp=p->BookList[i];
	   while(temp!=NULL)
	   {
		   temp1=malloc(sizeof(TBook));

		   if(temp1==NULL)
		   {
			   printf("bookshop's create book fail!\n");
			   return 0;
		   }
           memcpy(temp1,temp,sizeof(TBook));
          if(temp->Num>=ptr->type[i])
		   {
			   temp->Num-=ptr->type[i];
               temp1->Num=ptr->type[i];
			   fprintf(work,"%s have buy new books %-10s %d from %s\n",b->BookShopName,temp->BookName,ptr->type[i],p->PublisherName);
		       printf("%s have buy new books %-10s %d from %s\n",b->BookShopName,temp->BookName,ptr->type[i],p->PublisherName); 
		       bill_pub=malloc(sizeof(TBill_Pub));
			   bill_buy=malloc(sizeof(TBill_BookShop_Buy));
			   if(bill_pub==NULL || bill_buy==NULL)
				   return 0;
			   strcpy(bill_pub->bookname,temp->BookName);
			   strcpy(bill_pub->bookshopname,b->BookShopName);
			   bill_pub->num=ptr->type[i];
			   bill_pub->next=NULL;
			   strcpy(bill_buy->bookname,temp->BookName);
			   strcpy(bill_buy->publishername,p->PublisherName);
			   bill_buy->num=ptr->type[i];
			   bill_buy->next=NULL;
		  }
		  else
		   {
               temp1->Num=temp->Num;
			   temp->Num=0;
               
		   }
               
			   temp1->next=b->BookList[i];
			   b->BookList[i]=temp1;
		       
			   bill_pub->next=p->bill;
			   p->bill=bill_pub;

			   bill_buy->next=b->bill_buy;
               b->bill_buy=bill_buy;

               temp=temp->next;
	   }
	 }
   }

   
   return 1;
}

int OrderFromPub(TPublisher *p,TBookShop*bp,TBook *b,int num)
{
	TOrderFromPub *temp=NULL;

    temp=malloc(sizeof(TOrderFromPub));
	if(temp==NULL)
	{
		printf("create OrderFromPub Node fail!\n");
		return 0;
	}

	temp->type=b->type;
	strcpy(temp->BookName,b->BookName);
	temp->BookShopID=bp->BookShopID;
	temp->number=num;
	temp->CallBack=BuyBook;
	temp->ptr=b;
	temp->bp=bp;
	temp->next=p->OrderList;
	p->OrderList=temp;
	fprintf(work,"bookshop %s order book %s %d from publisher %s\n",bp->BookShopName,b->BookName,num,p->PublisherName);
    printf("bookshop %s order book %s %d from publisher %s\n",bp->BookShopName,b->BookName,num,p->PublisherName);
	return 1;
}

int BuyBook(TPublisher *p,BookClass type,int number,TBookShop *bp,TBook *ptr)
{

   TBook *temp=NULL;
   TOrderFromShop *order=NULL;
   TBill_Pub *bill_pub=NULL;
   TBill_BookShop_Buy *bill_buy=NULL;
   
   temp=p->BookList[type];
   
  
   
   while(temp!=NULL)
   {
	   if(strcmp(temp->BookName,ptr->BookName)==0)
	   {
		   //printf("111111111111111111111111111111111111111111");
		   temp->Num-=number;  
           ptr->Num+=number;
		   fprintf(work,"%s rebuy book %s %d from %s\n",bp->BookShopName,ptr->BookName,number,p->PublisherName);
		   printf("%s rebuy book %s %d from %s\n",bp->BookShopName,ptr->BookName,number,p->PublisherName);
		   bill_pub=malloc(sizeof(TBill_Pub));
			bill_buy=malloc(sizeof(TBill_BookShop_Buy));
			   if(bill_pub==NULL || bill_buy==NULL)
				   return 0;
			   strcpy(bill_pub->bookname,temp->BookName);
			   strcpy(bill_pub->bookshopname,bp->BookShopName);
			   bill_pub->num=number;
			   bill_pub->next=NULL;
			   strcpy(bill_buy->bookname,temp->BookName);
			   strcpy(bill_buy->publishername,p->PublisherName);
			   bill_buy->num=number;
			   bill_buy->next=NULL;
		       bill_pub->next=p->bill;
			   p->bill=bill_pub;

			   bill_buy->next=bp->bill_buy;
               bp->bill_buy=bill_buy;
		   break;
	   }
	   temp=temp->next;
   }
   
   
   
   order=bp->OrderList;
   
	   if(order!=NULL)
	   {
           bp->OrderList=order->next;
		   order->CallBack(bp,ptr,order->user,order->number);
	   	   
		   free(order);                    order=NULL;
        
	   }
	  
   
   
   
   
   

   
   
   return 1;
}


int FreeBookShop(TBookShop *bookshop)
{
	TBook *book=NULL;
	TOrderFromShop *orderlist=NULL;
	TBill_BookShop_Buy *bill_buy=NULL;
    TBill_BookShop_Sell *bill_sell=NULL;
    int i;

  for(i=0; i<7; i++)
  {
    book=bookshop->BookList[i];
	while(book!=NULL)
	{
		bookshop->BookList[i]=book->next;
		free(book);
		book=bookshop->BookList[i];
	}
  }
  orderlist=bookshop->OrderList;
  while(orderlist!=NULL)
  {
	  bookshop->OrderList=orderlist->next;
	  free(orderlist);
	  orderlist=bookshop->OrderList;
  }
  bill_buy=bookshop->bill_buy;
  while(bill_buy!=NULL)
  {
	  bookshop->bill_buy=bill_buy->next;
	  free(bill_buy);
	  bill_buy=bookshop->bill_buy;
  }
  bill_sell=bookshop->bill_sell;
  while(bill_sell!=NULL)
  {
	  bookshop->bill_sell=bill_sell->next;
	  free(bill_sell);
	  bill_sell=bookshop->bill_sell;
  }
  free(bookshop);
  bookshop=NULL;
  return 1;
}
//----------------------function complete end-------------------------------

⌨️ 快捷键说明

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