below are the ranges you could use, starting with the class B base address 172.16.0.0/16
Subnet ID: 172.16.0.0
Subnet Mask: 255.255.255.240
Host Address Range: 172.16.0.1 - 172.16.0.14
Subnet ID: 172.16.0.32
Subnet Mask: 255.255.255.224
Host Address Range: 172.16.0.33 - 172.16.0.62
Subnet ID: 172.16.0.64
Subnet Mask: 255.255.255.192
Host Address Range: 172.16.0.65 - 172.16.0.126
Subnet ID: 172.16.0.128
Subnet Mask: 255.255.255.128
Host Address Range: 172.16.0.129 - 172.16.0.254
Subnet ID: 172.16.1.0
Subnet Mask: 255.255.255.128
Host Address Range: 172.16.1.1 - 172.16.1.126
Subnet ID: 172.16.2.0
Subnet Mask: 255.255.255.0
Host Address Range: 172.16.2.1 - 172.16.1.254
Subnet ID: 172.16.4.0
Subnet Mask: 255.255.254.0
Host Address Range: 172.16.4.1 - 172.16.5.254
Subnet ID: 172.16.8.0
Subnet Mask: 255.255.252.0
Host Address Range: 172.16.8.1 - 172.16.11.254
Subnet ID: 172.16.12.0
Subnet Mask: 255.255.252.0
Host Address Range: 172.16.12.1 - 172.16.15.254
Subnet ID: 172.16.64.0
Subnet Mask: 255.255.192.0
Host Address Range: 172.16.64.1 - 172.16.127.254
"2. I need to determine the Ip address myself, I only know the Ip address is from class B, is it correct?"
Cannot say if correct or not. A single class B address block allows for 64K addresses, so that appears large enough to cover all the subnets needed, but so would a class A. Further, classful addressing is generally obsolete, although we still use those addresses, but not as classful.
You could also "supernet" (also obsolete) what was class C addresses, to provide address blocks to cover all your address block needs.
You also need to determine whether you're going to use "public" or "private" addresses. (The former is allowed on the Internet, but needs to be allocated by the Internet address authority [and I believe what was class B public IPv4 addresses are exhausted], the latter are not allowed to be "visible" on the Internet, used for "internal" networks.)
"3. How to know the most suitable Ip address which is from class B and start to do subnetting."
That's done by using a network prefix that provides enough addresses for the number of listed hosts.
e.g. a /25 provides 128 addresses, less two for network and broadcast; /24 provides 256 addresses, again less two; /25 provides 512. etc. Address blocks are powers of two.
Address blocks can only started on specific addresses for their size.
e.g. 172.16.0.0/23 or /24 okay, 172.16.1.0/24 okay, 172.16.1.0/23 not okay, but 172.16.2.0/23 okay.
Address block should not overlap for actual networks. However, they can overlap for routing aggregation purposes.
e.g. 172.16.0.0/23 or (172.16.0.0/24 and 172.16.1.0/24) okay for network allocations, but 172.16.0.0/23 can be used for an aggregate of the two /24s (aggregation likely beyond your question, but did want to mention there are cases when addresses blocks can and cannot overlap).
How to suballocate - there are several methods, you can do what Georg shows (although perhaps "easier" if you allocate from large to small). What can be a bit "tricky" is leaving address space for later allocations of large sizes too.
If you allocate 172.16.0.0/30, you cannot allocate 172.16.0.0/16, /17, /18, . . . /28 or /29.
Further 172.16.0.4/30 can be allocated, but 172.16.0.4 is not an acceptable /29 or larger address block, the latter, regardless of whether 172.16.0.0/30 is allocated for not.
"4. Can anyone help me to solve this problem?"
Georg has provided a solution, but again, doing this "right" can, sometimes, be a bit tricky. Long term, if you're looking to be a network engineer, this is a subject worth additional study, otherwise, you can find you've cannot allocate an address block, of a size needed, although you have lots of unused address space.
Also BTW, when doing this for real, not only do you need to take into account the number of addresses needed NOW, but possibly for future growth. Also, regarding future growth, since address blocks are power of twos, doubling a very small address block (e.g. /28) doesn't "waste" too much address space, but doubling something like an address block for 12,000 IPs does. (In the real world, geneally we would not use an address block for 12,000 hosts other then perhaps as an aggregate.)
When subneting you need to reserve your address block as much possible and not try to underutilise (waste address space)
With an address block of class B (x.x.0.0/16) you would begin to split this down into smaller address space to accommodate your host requirements
The sub total of your hosts is 14,260, now given you have /16 subnet (65534 host) you can immediately divide your address pool into half and reserve it for later use
10.0.0.0/17 (32766 hosts)
10.0.128.0/17 (32766 hosts) -reserved
So using the 10.0.0.0/17 we can begin to accommodate your network by dividing this /17 into subnets that should not overlap and are continuous .
10.0.0.0/18 <> 10.0.64.0/18
12,000 hosts = 10.0.0.0/18 (16382 host)
ip range 10.0.0.1 to 10.0.63.254 mask 255.255.192.0
1,000 hosts = 10.0.64.0/22 (1022 host)
ip range 10.0.64.1 to 10.0.67.254 mask 255.255.252.0
600 hosts = 10.0.68.0./22 (1022 host)
ip range 10.0.68.1 to 10.0.71.254 mask 255.255.252.0
400 hosts = 10.0.72.0/23 (510 host)
ip range 10.0.72.1 to 10.0.73.243 mask 255.255.255.254
200 hosts = 10.0.74.0/24 (254 host) mask 255.255.255.0
ip range 10.0.74.1 to 10.0.74.254
100 hosts = 10.0.75.0/25 (126 host) mask 255.255.255.128
ip range 10.0.75.1 to 10.0.75.126
70 hosts = 10.0.75.128/25 (126 host) mask 255.255.255.128
ip range 10.0.75.129 to 10.0.75.254
50 hosts = 10.0.76.0/26 (62 hosts) mask 255.255.255.192
ip range 10.0.76.1 to 10.0.76.62
20 host = 10.0.76.64/27 (30 hosts) mask 255.255.255.224
ip range 10.0.76.65 to 10.0.76.94
10 host = (10.0.76.96/28) (14 hosts)
ip range 10.0.76.97 to 10.0.76.110