天天看點

系統級售票系統開發流程

牛刀小試:售票系統

功能:詢問是否購票,輸入y/Y表示購票,輸入其他字元表示不購票,跳轉到退票功能。退票功能輸入Y/y退票,輸入其他字元再跳轉到購票功能。讓使用者在購票和退票功能之間選擇。

代碼:

#include <pthread.h>
 #include <stdio.h>
 #include <unistd.h>
 #include <stdlib.h>
 #include <string.h>void *task_sale(void *arg);
 void *task_add(void *arg);pthread_t tid[2];
 pthread_mutex_t lock;
 int ticket = 5;int main(void)
 {
 int ret;
 pthread_mutex_init(&lock,NULL);
 pthread_create(&tid[0],NULL,task_sale,(void*)1);
 pthread_create(&tid[1],NULL,task_add,(void*)2);      
pthread_join(tid[0],NULL);
pthread_join(tid[1],NULL);

pthread_mutex_destroy(&lock);
pthread_exit(NULL);      
}
void *task_sale(void *arg)
 {
 char s[1];
 printf(“This thread %ld\r\n”,(intptr_t)(int *)arg);
 while(1)
 {
 memset(s,0,sizeof(s));
 pthread_mutex_lock(&lock);
 printf(“現在有餘票:%d\r\n”,ticket);
 if(ticket > 0)
 {
 printf(“是否購票?購票請輸入Y/y\r\n”);
 scanf("%s",s);
 if(strncmp(s,“y”,1)==0)
 {
 ticket–;
 printf(“購票成功,剩餘:%d\r\n”,ticket);
 sleep(1);
 pthread_mutex_unlock(&lock); 
 }
 else
 {
 pthread_mutex_unlock(&lock);
 usleep(500);
 }      
}
  else
  {
    printf("沒票了還買啥,走路去吧\r\n");
    pthread_mutex_unlock(&lock);
    sleep(2);
  }
}
pthread_exit(NULL);      
}
void *task_add(void *arg)
 {
 char a[1];
 printf(“這是退票視窗%ld\r\n”,(intptr_t)(int *)arg);
 while(1)
 {
 memset(a,0,sizeof(a));
 pthread_mutex_lock(&lock);
 printf(“現在票倉有票:%d\r\n”,ticket);
 if(ticket <5 )
 {
 printf(“是否退票?退票請輸入Y/y\r\n”);
 scanf("%s",a);
 if(strncmp(a,“y”,1)==0)
 {
 ticket++;
 printf(“退票成功,剩餘:%d\r\n”,ticket);
 //system(“clear”);
 sleep(1);
 pthread_mutex_unlock(&lock);      
}
    
    else
    {
      //printf("不退湊啥熱鬧\r\n");
      //system("clear");
      pthread_mutex_unlock(&lock);
      usleep(500);
    }
    
  }
  else
  {
    printf("你都沒買你退啥,玩兒呢?\r\n");
    pthread_mutex_unlock(&lock);
    sleep(1);
  }
}
pthread_exit(NULL);