[Question]
  [
Given a positive integer < 100 (from 1 to 99, including 1 and 99), output that many lockers.
A locker is defined as the following:
```
+----+
|    |
|    |
|    |
| nn |
+----+
```
where `nn` is the locker number, in base 10. If there is 1-digit number, it is expressed with a 0 in front of it. For example, locker number 2 displays the number `02`.
Lockers can be stacked, but only up to 2 high:
```
+----+
|    |
|    |
|    |
| on |
+----+
|    |
|    |
|    |
| en |
+----+
```
`on` denotes an odd number, `en` an even number. Lockers can also be put next to each other.
```
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+
```
Notice that locker number 5 is an odd-numbered locker that is on the bottom. This is because when you have odd-numbered input, the last locker should be placed on the floor (because a hovering locker costs too much). The above example therefore is the expected output for n=5. n=0 should return an nothing.
**Rules:** Standard methods of input/output. Input in any convenient format, output as a string. Standard loopholes apply.
**Test cases:**
```
Input
Output
---------------------
1
+----+
|    |
|    |
|    |
| 01 |
+----+
--------------------- (newlines optional in case 1)
4
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+
|    |    |
|    |    |
|    |    |
| 02 | 04 |
+----+----+
---------------------
5
+----+----+
|    |    |
|    |    |
|    |    |
| 01 | 03 |
+----+----+----+
|    |    |    |
|    |    |    |
|    |    |    |
| 02 | 04 | 05 |
+----+----+----+
---------------------
16
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 01 | 03 | 05 | 07 | 09 | 11 | 13 | 15 |
+----+----+----+----+----+----+----+----+
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
|    |    |    |    |    |    |    |    |
| 02 | 04 | 06 | 08 | 10 | 12 | 14 | 16 |
+----+----+----+----+----+----+----+----+
```
This is [code-golf](/questions/tagged/code-golf "show questions tagged 'code-golf'"), so shortest code wins!
  
[Answer]
# [Pyth](https://github.com/isaacg1/pyth), 66 bytes
```
A.[Y2m+.rKXJr6j" | "++km.[\02`kdkjkUT;" -|+"+*3]KJ_.T_McSQ2js[GHhH
```
[Test suite.](http://pyth.herokuapp.com/?code=A.%5BY2m%2B.rKXJr6j%22+%7C+%22%2B%2Bkm.%5B%5C02%60kdkjkUT%3B%22+-%7C%2B%22%2B%2a3%5DKJ_.T_McSQ2js%5BGHhH&test_suite=1&test_suite_input=1%0A4%0A5%0A16&debug=0)
[Answer]
# Python 2, ~~201~~ ~~191~~ ~~185~~ ~~175~~ ~~171~~ ~~166~~ ~~164~~ 163 bytes
```
n=input()
for j in 0,1:c=n/2+n%2*j;m='+----'*c+'+\n';print['\n',m+('|    '*c+'|\n')*3+''.join('| %02d '%-~i for i in range(j,n-n%2,2)+n%2*j*[~-n])+'|\n'+m*j][c>0],
```
[Try it Online!](https://tio.run/nexus/python2#JY3LDoMgFET3/Qo25AoXWsRdDf0RyqKxj0DC1Ri7M/66hTqryZxkzk4u0vRdGnF6jzNLLBIzqr0Oji4WiVuZ@uwAdQnIAQHvBP00R1o8lKoyNrCykj9dyyRkhwDnNEaqiBv7ZMD1Flk1xGqYH/R5NUmRLgZlxSGSftMUxPGCWabgh5sJat/bHw)
[Answer]
# PHP, 191 Bytes
```
for(;a&$k="01112344453"[$i++];print"$l\n")for($l="",$b="+||"[$k%3],$n=0;$n++<$a=$argn;)$l.=$i<6&$n%2&$n!=$a|$i>5&($n%2<1|$n==$a)?($l?"":"$b").["----+","    |",sprintf(" %02d |",$n)][$k%3]:"";
```
[Try it online!](https://tio.run/nexus/php#JY7BDoIwEETvfgVOFkJTJJSCB0rlQ5ADxKANpBL02H/HgnPYw9vZma2b5bWcqF@fVstSbeN7jVUf0aSRCSFyWRRFKdGS4bxTy2rsFzTfLdjupFkDCQ0a3DlvmkLZJWR1pshyXlOvj2TFaE41mfoakQ1zP85@4cjcyijeSS2cv/KMNT6zASrQAJa2uHhxJAi8HJLP8cEYIwiz/LETsqz7F1eA2rYf "PHP – TIO Nexus")
# PHP, 235 Bytes
```
for(;$i++<$a=$argn;)$r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0);for(;$j<6;)$l[]=($a<2&$j<3?"":[$p("+",$c=($j<3?floor:ceil)($a/2)*5+1,"----+"),$p("|",$c,"    |"),"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n";echo strtr("01112344453",$l);
```
Case 1 with optional newlines
[Try it online!](https://tio.run/nexus/php#JY7NjsMgDITvfYrI8lZQaBpC2pVKUB8kiyqU/hFFAbE95t2zTtcnz@cZa9pLeqUN@vyc7LdZHjEzg0GIFr39UMMxdxgsqVntMWyV65xlmOzvO1@Tv3GGQdaykhU3//GhPVFq/Nh8W28J6AvAucPEQIDEng4re4wx5nN/DyM98Yea745CSdjTCOBytc@rXUJBMxOCuYByiGFiUNAq127DQTtekgbHSQnxpV0JPxOYe/@KBdV8ZwaVUqrWTdMcNcVGbpblDw "PHP – TIO Nexus")
Expanded
```
for(;$i++<$a=$argn;)
  $r[$i==$a|1-$i&1][]=($p=str_pad)($i,2,0,0); # make an 2D array 0:odd values 1:even values and last value  
for(;$j<6;) # create 6 strings for each different line
  $l[]=($a<2&$j<3 # if last value =1 and line number under 3 
    ?"" # make an empty string empty [] as alternative
    :[$p("+",$c=($j<3 # else make the 0 or 3 line and store the count for next line
      ?floor # if line number =0 count=floor ($a/2)  multiply 5 and add 1
      :ceil)($a/2)*5+1,"----+") # else count= ceil($a/2) multiply 5 and add 1
    ,$p("|",$c,"    |") # make lines 1 and 4
    ,"| ".join(" | ",$r[$j/3])." |"])[$j++%3]."\n"; #make lines 2 odd values and 5 even values and last value
echo strtr("01112344453",$l); # Output after replace the digits with the 6 strings
```
# PHP, 300 Bytes
```
for(;$i++<$a=$argn;)$r[$i==$a||!($i%2)][]=($p=str_pad)($i,2,0,0);echo strtr("01112344453",($a>1?[$p("+",$c=($a/2^0)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[0])." |\n"]:["","",""])+[3=>$p("+",$c=ceil($a/2)*5+1,"----+")."\n",$p("|",$c,"    |")."\n","| ".join(" | ",$r[1])." |\n"]);
```
replace `["","",""]` with `["\n","\n","\n"]` if you want newlines for case `1`
[Try it online!](https://tio.run/nexus/php#pY5NbgIxDIX3PUVquVJCAk3mZ0MIHCRNq2iYliA0E6Usc/epQUIcoJYX9ntP/rw75FN@wVh@Jmd6u3zPhVtMUu4wurtsBRaPydFW6yvH9NaI4IPjmN3vtXzleBSkqkZppYUdh9PMSL8WDtoY07Rd1/UtKI5xbw4eMwcJCgc6EN@bTy1WvTQK1lQSxAY@JnIpVG8hBYyqPnSoDDbnOU0cGI2KPtOBPFbJDVsPFLl1ENK3bv9kDWO63Hn/pJknTdhl@QM "PHP – TIO Nexus")
[Answer]
# Ruby, ~~256~~ ~~239~~ ~~201~~ ~~191~~ 183 bytes
```
n=gets.to_i;a=n/2;z=a+n%2;t=a*2;q="+----+";r=->x{q*x+?\n+("|    |"*x+?\n)*3+"| n |"*x+?\n};u=r[a]+r[z]+q*z;n.times{|i|j=2*i+1;u[?n]="%02d"%(i<a ?j:i>=t ?j-t:j-t+1)};puts u.squeeze'+|'
```
This is awfully long. I'll work on golfing it more.
[Answer]
# [C (gcc)](https://gcc.gnu.org/), ~~426~~ ~~335~~ ~~300~~ ~~294~~ ~~282~~ ~~252~~ ~~249~~ ~~246~~ ~~244~~ 237 bytes
This really needs to be golfed down
```
#define L puts("")
#define P(s)printf(&s[i>1]
#define F(x)for(i=0;i++<x;)P(
#define O(x,y)F(x)"+----+"));for(j=0;L,j++<3;)F(x)"|    |"));j=y;F(x)"| %02d |")
e,i,j;f(n){e=n/2+n%2;O(n/2,-1),j+=2);L;O(e,0),j+=i^e?2:2-n%2);L;F(e)"+----+"));}
```
[Try it online!](https://tio.run/nexus/c-gcc#jc/Pa8IwFAfwe/6KEnG8RxOWpM7Dsm43TwW9bw5EE0xhUayDivpn79wl1blRelgOj@R9P/nVDFbGOm@SItl@7iugFMlPawYVbnfO7y3cVa/uWc5v0QRqtJsduFxol6ZPtcYZ3NIp1OyA0dCUh5FSRB15GXjByrAh05f8lIRxinmZH/S1NRRqFZvEMMdKbcHj0eT@XqV@qPQUwoxxieGgXKEuQscw0S7du3lRj4oHF4MJmL9PODcfC@cByTHeSmKxIFC3s8v333zUXLSV02tmQfYp2VWqT6muyvpU1lWjPjXqqod/KTnuYXL8y8i5@fIbvlws1@Yb "C (gcc) – TIO Nexus")
[Answer]
## Batch, 305 bytes
```
@echo off
set/a"n=%1&-2
if %1 gtr 1 call:l %n% 1
call:l %1 2
echo %s: =-%
exit/b
:l
set s=+
set "t=|
for /l %%i in (%2,2,%n%)do call:c %%i
if %1 gtr %n% call:c %1
for %%s in ("%s: =-%" "%s:+=|%" "%s:+=|%" "%s:+=|%" "%t%")do echo %%~s
exit/b
:c
set s=%s%    +
set i=0%1
set "t=%t% %i:~-2% |
```
`+----+` and `| |` are both similar to `+ +` in that they can be generated via a single substitution, and it turns out to be slightly shorter than generating them separately (the extra quoting needed for `|`s doesn't help).
[Answer]
# Pyth - ~~97~~ ~~74~~ ~~86~~ ~~80~~ 75 bytes
```
V3K+:?&NtQ2 1Q2?NQYIlK+*+\+*\-4lK\+IqN2BFTU4+sm?qT3.F"| {:02d} "d+\|*\ 4K\|
```
[Try it here](https://pyth.herokuapp.com/?code=V3K%2B%3A%3F%26NtQ2+1Q2%3FNQYIlK%2B%2a%2B%5C%2B%2a%5C-4lK%5C%2BIqN2BFTU4%2Bsm%3FqT3.F%22%7C+%7B%3A02d%7D+%22d%2B%5C%7C%2a%5C+4K%5C%7C&input=15&debug=0)
[Answer]
# JavaScript ES6, 224 bytes
```
n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)
```
Used some ideas from [math junkie's Python answer](https://codegolf.stackexchange.com/a/117804/69583)
## Test Snippet
```
f=
n=>(r=(s,k)=>s.repeat(k),s="",[0,1].map(i=>(c=(n/2+n%2*i)|0,c&&(s+="+"+r(l="----+",c)+`
|`+r(r("    |",c)+`
|`,3),[...Array(c).keys()].map(j=>s+=` ${(h=2*j+(i+!(i&j>c-2&n%2)))>9?h:"0"+h} |`),s+=`
`+(i?`+${r(l,c)}
`:"")))),s)
O.innerHTML=f(I.value);
```
```
<input id="I" value="5" type="number" min="0" max="99" oninput="O.innerHTML=f(this.value)">
<pre id="O"></pre>
```
## Cleaned up
```
n => {
    r=(s,k)=>s.repeat(k);
    s="";
    [0,1].map(i => {
        c = (n/2 + n%2 * i)|0;
        if (c) {
            s += "+" + r(l="----+", c) + "\n|" + r(r("    |",c) + "\n|", 3);
            [...Array(c).keys()].map(j => {
                s += ` ${(h = 2*j + (i + !(i & j>c-2 & n%2))) > 9 ? h:"0"+h} |`;
            });
            s += "\n" + (i ? `+${r(l,c)}\n` : "");
        }
    });
    return s;
};
```
[Answer]
# [Charcoal](https://github.com/somebody1234/Charcoal), 37 bytes
```
ＮθＦ…·¹θ«Ｆ⁵¿﹪ι²¿⁼ιθ→↗↓Ｂ⁶±⁶↗→→0Ｐ←⮌Ｉι←←↙
```
[Try it online!](https://tio.run/##dY7LCsIwEEXX@hWDqwlUUEEXuvOxEFSk4AfEOq2BmLR5VEH89mi0iCIu7zl3HtmRm0xzGcJSld5t/GlPBis2aefaAC5VJr0VNaVcFYT9BCrG4NpuPe2QgcgB1/rgpUaRwIC9yKLyXNpIYn2ta8JxKoqjY0DSUkN25S@b67N6HG9N9QVHCWyo4I5wxCL7nnqDd9waoVyTE@j0Os@Ol06UL7Oi/CFSqslYwhm3DgX7WB39vxQfa8gthP4wdGt5Bw "Charcoal – Try It Online") Link is to verbose version of code. Explanation:
```
Ｎθ
```
Input the number of lockers into `q`.
```
Ｆ…·¹θ«
```
Loop over the lockers from `1` to `q` inclusive.
```
Ｆ⁵¿﹪ι²¿⁼ιθ→↗↓
```
Calculate the direction to the next locker, and repeat that 5 times (golfier than using jump movements).
```
Ｂ⁶±⁶
```
Draw the locker, starting at the bottom left corner. (The bottom right corner also takes 4 bytes while the top right corner takes 5. The top left corner only takes 3 bytes but then the locker number would take longer to draw.)
```
↗→→0
```
Draw the leading zero of the locker number, if necessary.
```
Ｐ←⮌Ｉι
```
Draw the locker number reversed and right-to-left, effectively right justifying it.
```
←←↙
```
Move back to the bottom left corner ready to calculate the direction to the next locker.
Edit: Later versions of Charcoal support this 32-byte solution:
```
Ｆ⪪…·¹Ｎ²«Ｆ⮌ι«↗→→0Ｐ←⮌Ｉκ↖↖↖↑ＵＲ⁶»Ｍ⁵χ
```
[Try it online!](https://tio.run/##lY/LDoIwEEXX8BUNq2mCCZjgQpeuSNQYDB9QyQCNtTSl7cbw7ZWHr63Le86dm0zVMl11THhfd5rARQluIJeVsD13WDDZIKQxyaWy5mTvV9RAaUzWlJJHGMw3BTrUPQJfWHDsHMK2VAVvWkN3H/LNZ82leYGYREm0tKwwXC3qgPVo3st71hu4UfozVqqp8ieYQ4GVGd8SCJspD@Gis5ikyQgG79PMr5x4Ag "Charcoal – Try It Online") Link is to verbose version of code. Explanation:
```
Ｆ⪪…·¹Ｎ²«
```
Take the numbers from `1` to the input number inclusive pairwise. (If the input number is odd the last array will only have one element.)
```
Ｆ⮌ι«
```
Loop over each pair in reverse order.
```
↗→→0
```
Draw the leading zero of the locker number, if necessary.
```
Ｐ←⮌Ｉι
```
Draw the locker number reversed and right-to-left, effectively right justifying it.
```
↖↖↖↑ＵＲ⁶
```
Move to the top left of the locker and draw it. This is also the bottom left of the next locker, so we're ready to draw the second locker of the pair if applicable.
```
»Ｍ⁵χ
```
Move to the next pair of lockers. (This should be before the inner loop for a saving of 1 byte but Charcoal generates incorrect output for an input of 1 for some reason.)
[Answer]
# [Vyxal](https://github.com/Lyxal/Vyxal), 127 bytes
```
½⌊:\+4-*\++,3(:\|4꘍*\|+,)?ɾ'∷n⁰≠∧;ƛS:₃[0p]`| `pð+;ṅ\|+,?½⌈:\+4-*\++,3(:\|4꘍*\|+,)?ɾ'₂n⁰=n∷∧∨;ƛS:₃[0p]`| `pð+;ṅ\|+,?½⌈:\+4-*\++,
```
[Try it Online!](http://lyxal.pythonanywhere.com?flags=&code=%C2%BD%E2%8C%8A%3A%5C%2B4-*%5C%2B%2B%2C3%28%3A%5C%7C4%EA%98%8D*%5C%7C%2B%2C%29%3F%C9%BE%27%E2%88%B7n%E2%81%B0%E2%89%A0%E2%88%A7%3B%C6%9BS%3A%E2%82%83%5B0p%5D%60%7C%20%60p%C3%B0%2B%3B%E1%B9%85%5C%7C%2B%2C%3F%C2%BD%E2%8C%88%3A%5C%2B4-*%5C%2B%2B%2C3%28%3A%5C%7C4%EA%98%8D*%5C%7C%2B%2C%29%3F%C9%BE%27%E2%82%82n%E2%81%B0%3Dn%E2%88%B7%E2%88%A7%E2%88%A8%3B%C6%9BS%3A%E2%82%83%5B0p%5D%60%7C%20%60p%C3%B0%2B%3B%E1%B9%85%5C%7C%2B%2C%3F%C2%BD%E2%8C%88%3A%5C%2B4-*%5C%2B%2B%2C&inputs=17&header=&footer=)
This is horrible.
]