自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

C#中一道關(guān)于多線(xiàn)程的基礎(chǔ)練習(xí)題——模擬倉(cāng)庫(kù)存銷(xiāo)過(guò)程

開(kāi)發(fā) 后端
假設(shè)某企業(yè)自產(chǎn)、自存、自銷(xiāo),需要將工廠生產(chǎn)的各類(lèi)產(chǎn)品不定時(shí)的運(yùn)到倉(cāng)庫(kù),與此同時(shí),需要將倉(cāng)庫(kù)中的貨物運(yùn)往超市和商場(chǎng)中進(jìn)行銷(xiāo)售,請(qǐng)編寫(xiě)一個(gè)程序模擬此過(guò)程(主要是存取這個(gè)過(guò)程)。

題目:模擬生產(chǎn)、入庫(kù)、銷(xiāo)售(50分)

 假設(shè)某企業(yè)自產(chǎn)、自存、自銷(xiāo),需要將工廠生產(chǎn)的各類(lèi)產(chǎn)品不定時(shí)的運(yùn)到倉(cāng)庫(kù),與此同時(shí),需要將倉(cāng)庫(kù)中的貨物運(yùn)往超市和商場(chǎng)中進(jìn)行銷(xiāo)售,請(qǐng)編寫(xiě)一個(gè)程序模擬此過(guò)程(主要是存取這個(gè)過(guò)程)。

評(píng)分標(biāo)準(zhǔn):

1. 倉(cāng)庫(kù)的存量是固定的,可以假設(shè)為一個(gè)常量,比如10。(5分)

2. 倉(cāng)庫(kù)滿(mǎn)的時(shí)候,不能再向倉(cāng)庫(kù)中存貨。(10分)

3. 倉(cāng)庫(kù)空的時(shí)候,不能賣(mài)出貨物。(10分)

4. 存貨和取貨是同時(shí)進(jìn)行的,不要出現(xiàn)先存滿(mǎn)再取完貨再存滿(mǎn)再取完的效果或者存一個(gè)取一個(gè)再存再取這樣的效果。(15分)

5. 思路清晰,輸出工整,編碼規(guī)范,有正確的異常處理。(10分)

用多線(xiàn)程模擬倉(cāng)庫(kù)存儲(chǔ)和銷(xiāo)售的過(guò)程代碼如下:

  1. using System; 
  2. using System.Collections.Generic; 
  3. using System.Linq; 
  4. using System.Text; 
  5. using System.Threading.Tasks; 
  6. using System.Threading; 
  7. using System.IO; 
  8.  
  9. namespace MultiThreadStore 
  10.     class Program 
  11.     { 
  12.         //入口 
  13.         static void Main(string[] args) 
  14.         { 
  15.             Goods goods = new Goods(); 
  16.             Thread storeGoods = new Thread(new ParameterizedThreadStart(store)); 
  17.             Thread sellGoods = new Thread(new ParameterizedThreadStart(sell)); 
  18.             storeGoods.Start(goods); 
  19.             sellGoods.Start(goods); 
  20.             Console.ReadLine(); 
  21.         } 
  22.         //存貨方法 
  23.         private static void store(object obj) 
  24.         { 
  25.             bool storeFlag = true
  26.             Random random = new Random(); 
  27.             while (storeFlag) 
  28.             { 
  29.                 try 
  30.                 { 
  31.                     Goods goods = obj as Goods; 
  32.                     if (goods.Num < goods.MaxNum) 
  33.                     { 
  34.                         goods.Num++; 
  35.                         Console.WriteLine("Store a goods, " + goods.Num + " goods left!"); 
  36.                     } 
  37.                     else  
  38.                     { 
  39.                         Console.WriteLine("The store is full now."); 
  40.                     } 
  41.                     Thread.Sleep(random.Next(500, 1000)); 
  42.                 } 
  43.                 catch (Exception ex) 
  44.                 { 
  45.                     WriteLog(ex); 
  46.                     storeFlag = false
  47.                 } 
  48.             } 
  49.         } 
  50.         //賣(mài)貨方法 
  51.         public static void sell(object obj)  
  52.         { 
  53.             bool sellFlag = true
  54.             Random random = new Random(); 
  55.             while (sellFlag) 
  56.             { 
  57.                 try 
  58.                 { 
  59.                     Goods goods = obj as Goods; 
  60.                     if (goods.Num > 0) 
  61.                     { 
  62.                         goods.Num--; 
  63.                         Console.WriteLine("Sell a goods, " + goods.Num + " goods left!"); 
  64.                     } 
  65.                     else  
  66.                     { 
  67.                         Console.WriteLine("There are no goods now."); 
  68.                     } 
  69.                     Thread.Sleep(random.Next(1000, 4000)); 
  70.                 } 
  71.                 catch (Exception ex) 
  72.                 { 
  73.                     WriteLog(ex); 
  74.                     sellFlag = false
  75.                 } 
  76.             } 
  77.         } 
  78.         //打log方法 
  79.         private static void WriteLog(Exception ex) 
  80.         { 
  81.             string logUrl = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory) + "\\MuliThreadStorelog.txt"
  82.             if (File.Exists(@logUrl)) 
  83.             { 
  84.                 using (FileStream fs = new FileStream(logUrl, FileMode.Append)) 
  85.                 { 
  86.                     using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)) 
  87.                     { 
  88.                         try 
  89.                         { 
  90.                             sw.Write(ex); 
  91.                         } 
  92.                         catch (Exception ex1) 
  93.                         { 
  94.                             WriteLog(ex1); 
  95.                         } 
  96.                         finally 
  97.                         { 
  98.                             sw.Close(); 
  99.                             fs.Close(); 
  100.                         } 
  101.                     } 
  102.                 } 
  103.             } 
  104.             else 
  105.             { 
  106.                 using (FileStream fs = new FileStream(logUrl, FileMode.CreateNew)) 
  107.                 { 
  108.                     using (StreamWriter sw = new StreamWriter(fs, Encoding.Default)) 
  109.                     { 
  110.                         try 
  111.                         { 
  112.                             sw.Write(ex); 
  113.                         } 
  114.                         catch (Exception ex1) 
  115.                         { 
  116.                             WriteLog(ex1); 
  117.                         } 
  118.                         finally 
  119.                         { 
  120.                             sw.Close(); 
  121.                             fs.Close(); 
  122.                         } 
  123.                     } 
  124.                 } 
  125.             } 
  126.         } 
  127.     } 
  128.     //貨品類(lèi) 
  129.     class Goods  
  130.     { 
  131.         public int Num { getset; } 
  132.         public int MaxNum { getset; } 
  133.         public Goods()  
  134.         { 
  135.             Num = 10; 
  136.             MaxNum = 50; 
  137.         }      
  138.     } 
運(yùn)行截圖:

責(zé)任編輯:王雪燕 來(lái)源: 博客園
相關(guān)推薦

2012-05-18 11:17:58

Java多線(xiàn)程

2009-08-11 10:12:07

C#算法

2009-08-11 14:59:57

一道面試題C#算法

2021-03-02 11:29:50

算法算法分析前端

2009-08-11 15:09:44

一道面試題C#算法

2009-08-12 18:04:44

編寫(xiě)C#多線(xiàn)程

2024-06-11 00:00:30

C#編程線(xiàn)程

2023-02-04 18:24:10

SeataJava業(yè)務(wù)

2024-10-21 16:59:37

C#編程多線(xiàn)程

2009-08-26 18:13:55

C#多線(xiàn)程lock

2011-04-25 14:42:10

C#lock

2009-08-28 16:43:57

C#多線(xiàn)程學(xué)習(xí)

2009-09-04 15:09:48

C#多線(xiàn)程啟動(dòng)Squa

2022-04-08 07:52:17

CSS面試題HTML

2022-03-16 16:13:50

數(shù)據(jù)倉(cāng)庫(kù)云供應(yīng)商

2024-03-18 13:32:11

2013-07-16 10:12:14

iOS多線(xiàn)程多線(xiàn)程概念多線(xiàn)程入門(mén)

2009-09-01 17:15:42

C#多線(xiàn)程應(yīng)用

2021-11-10 07:47:49

Python源碼代碼

2009-07-17 10:37:05

C#多線(xiàn)程
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)