[proofplan]
We first classify an arbitrary irreducible finite-dimensional module by finding a genuine highest weight vector. The generalized eigenspace decomposition for the operator $h$ gives a maximal generalized $h$-weight, and the raising relation forces $e$ to vanish on that generalized eigenspace. From a genuine eigenvector in it, the lowering string under $f$ is computed using the $\mathfrak{sl}_2$ commutation relations; finite-dimensionality forces the highest weight to be a nonnegative integer and the string to span the whole irreducible module. Finally, for each nonnegative integer $m$, we check the defining relations on the displayed basis and prove irreducibility from the lowering string, giving existence and uniqueness.
[/proofplan]
[step:Choose a highest weight vector in an arbitrary irreducible module]
Let $V$ be a nonzero finite-dimensional irreducible $\mathfrak{sl}_2(\mathbb C)$-module. For $\lambda\in\mathbb C$, define the generalized $h$-eigenspace
\begin{align*}
V[\lambda]:=\{v\in V:(h-\lambda I_V)^N v=0\},
\end{align*}
where $N:=\dim_{\mathbb C}V$ and $I_V:V\to V$ is the identity map.
By the generalized eigenspace decomposition for a linear operator on a finite-dimensional complex [vector space](/page/Vector%20Space), the operator $h:V\to V$ has at least one eigenvalue, its set of eigenvalues is finite, and $V$ is the [direct sum](/page/Direct%20Sum) of its nonzero generalized $h$-eigenspaces. From
\begin{align*}
[h,e]=2e
\end{align*}
we get
\begin{align*}
(h-(\lambda+2)I_V)e=e(h-\lambda I_V)
\end{align*}
for every $\lambda\in\mathbb C$. Hence $e(V[\lambda])\subset V[\lambda+2]$.
Choose $\lambda\in\mathbb C$ such that $V[\lambda]\ne 0$ and $V[\lambda+2]=0$, which is possible because only finitely many generalized eigenspaces are nonzero along every chain $\lambda+2\mathbb Z_{\ge 0}$. Then $e(V[\lambda])=0$. The restriction of $h-\lambda I_V$ to $V[\lambda]$ is nilpotent, so its kernel is nonzero. Choose $v_0\in V[\lambda]$ with $v_0\ne 0$ and
\begin{align*}
(h-\lambda I_V)v_0=0.
\end{align*}
Thus
\begin{align*}
hv_0=\lambda v_0.
\end{align*}
Also,
\begin{align*}
ev_0=0.
\end{align*}
So $v_0$ is a highest weight vector of highest weight $\lambda$.
[guided]
We need a vector killed by $e$ and simultaneously an honest eigenvector for $h$. Since $h$ may not be diagonalizable at the start of the proof, we work first with generalized eigenspaces. Let $N:=\dim_{\mathbb C}V$, and for each $\lambda\in\mathbb C$ define
\begin{align*}
V[\lambda]:=\{v\in V:(h-\lambda I_V)^N v=0\},
\end{align*}
where $I_V:V\to V$ is the identity map.
By the generalized eigenspace decomposition for a finite-dimensional complex operator, $h:V\to V$ has at least one eigenvalue, its set of eigenvalues is finite, and $V$ is the direct sum of its nonzero generalized $h$-eigenspaces. This is the spectral input that lets us choose a top generalized weight later. The relation $[h,e]=2e$ means $he-eh=2e$, and rearranging gives
\begin{align*}
he=e(h+2I_V).
\end{align*}
Equivalently, for every $\lambda\in\mathbb C$,
\begin{align*}
(h-(\lambda+2)I_V)e=e(h-\lambda I_V).
\end{align*}
Raising this identity to the $N$-th power gives
\begin{align*}
(h-(\lambda+2)I_V)^N e=e(h-\lambda I_V)^N.
\end{align*}
Therefore, if $v\in V[\lambda]$, then
\begin{align*}
(h-(\lambda+2)I_V)^N ev=e(h-\lambda I_V)^N v=0,
\end{align*}
so $ev\in V[\lambda+2]$. This proves that $e$ shifts generalized $h$-weights upward by $2$.
Because there are only finitely many nonzero generalized eigenspaces, we may choose a nonzero generalized weight space $V[\lambda]$ at the top of one of these upward chains, so that $V[\lambda]\ne 0$ and $V[\lambda+2]=0$. Then the shift property gives
\begin{align*}
e(V[\lambda])\subset V[\lambda+2]=0,
\end{align*}
so $e$ kills every vector in $V[\lambda]$.
It remains to make the vector an actual eigenvector rather than merely a generalized eigenvector. On the nonzero finite-dimensional space $V[\lambda]$, the operator $h-\lambda I_V$ is nilpotent by definition of generalized eigenspace. A nilpotent operator on a nonzero finite-dimensional vector space has nonzero kernel. Hence there exists $v_0\in V[\lambda]$ such that $v_0\ne 0$ and
\begin{align*}
(h-\lambda I_V)v_0=0.
\end{align*}
Since $e$ kills all of $V[\lambda]$, the same vector also satisfies $ev_0=0$. Thus
\begin{align*}
hv_0=\lambda v_0.
\end{align*}
Also,
\begin{align*}
ev_0=0.
\end{align*}
This is the desired highest weight vector.
[/guided]
[/step]
[step:Compute the lowering string generated by the highest weight vector]
For each $i\in\mathbb Z_{\ge 0}$, define
\begin{align*}
w_i:=f^i v_0\in V.
\end{align*}
Using $[h,f]=-2f$, induction on $i$ gives
\begin{align*}
hw_i=(\lambda-2i)w_i.
\end{align*}
We also claim that for every $i\ge 1$,
\begin{align*}
[e,f^i]=i f^{i-1}(h-i+1).
\end{align*}
For $i=1$, this is $[e,f]=h$. If it holds for $i$, then using $[A,BC]=[A,B]C+B[A,C]$ gives
\begin{align*}
[e,f^{i+1}]=[e,f^i]f+f^i[e,f].
\end{align*}
Substituting the induction hypothesis and using $hf=f(h-2)$ gives
\begin{align*}
[e,f^{i+1}]=i f^{i-1}(h-i+1)f+f^i h.
\end{align*}
Thus
\begin{align*}
[e,f^{i+1}]=i f^i(h-i-1)+f^i h=(i+1)f^i(h-i).
\end{align*}
This proves the identity.
Since $ev_0=0$ and $hv_0=\lambda v_0$, the identity gives, for every $i\ge 1$,
\begin{align*}
ew_i=e f^i v_0=i f^{i-1}(h-i+1)v_0=i(\lambda-i+1)w_{i-1}.
\end{align*}
[/step]
[step:Use finite dimensionality to force the highest weight to be a nonnegative integer]
The nonzero vectors among the $w_i$ are $h$-eigenvectors with pairwise distinct eigenvalues $\lambda-2i$. Since $V$ is finite-dimensional, not all $w_i$ can be nonzero. Let $r\in\mathbb Z_{\ge 0}$ be the largest integer such that $w_r\ne 0$. Then
\begin{align*}
w_{r+1}=0.
\end{align*}
Applying $e$ to this equality and using the formula from the previous step gives
\begin{align*}
0=ew_{r+1}=(r+1)(\lambda-r)w_r.
\end{align*}
Because $r+1\ne 0$ in $\mathbb C$ and $w_r\ne 0$, we obtain
\begin{align*}
\lambda=r.
\end{align*}
Therefore the highest weight is a nonnegative integer. Write $m:=r$.
The subspace
\begin{align*}
W:=\operatorname{span}_{\mathbb C}\{w_i:0\le i\le m\}
\end{align*}
is nonzero and is stable under $h$, $f$, and $e$ by the formulas above and by $w_{m+1}=0$. Hence $W$ is a nonzero $\mathfrak{sl}_2(\mathbb C)$-submodule of $V$. Since $V$ is irreducible, $W=V$. Thus $V$ has basis $\{w_i:0\le i\le m\}$ and action
\begin{align*}
hw_i=(m-2i)w_i
\end{align*}
for $0\le i\le m$,
\begin{align*}
fw_i=w_{i+1}
\end{align*}
for $0\le i<m$,
\begin{align*}
fw_m=0,
\end{align*}
\begin{align*}
ew_i=i(m-i+1)w_{i-1}
\end{align*}
for $1\le i\le m$, and
\begin{align*}
ew_0=0.
\end{align*}
[/step]
[step:Construct the module with the displayed action for every nonnegative highest weight]
Fix $m\in\mathbb Z_{\ge 0}$. Let $L(m)$ be the complex vector space with basis
\begin{align*}
\{v_i:0\le i\le m\}.
\end{align*}
Define linear maps $e,f,h:L(m)\to L(m)$ on this basis by
\begin{align*}
hv_i=(m-2i)v_i
\end{align*}
for $0\le i\le m$,
\begin{align*}
fv_i=v_{i+1}
\end{align*}
for $0\le i<m$,
\begin{align*}
fv_m=0,
\end{align*}
\begin{align*}
ev_i=i(m-i+1)v_{i-1}
\end{align*}
for $1\le i\le m$, and
\begin{align*}
ev_0=0.
\end{align*}
We check the defining relations on the basis $\{v_i:0\le i\le m\}$. Since equality of linear maps is determined by equality on a basis, it is enough to compare the two sides on each $v_i$. For $0\le i\le m$,
\begin{align*}
[h,e]v_i=2ev_i,
\end{align*}
where both sides are zero when $i=0$, and for $i\ge 1$ this follows from comparing the $h$-weights of $v_i$ and $v_{i-1}$. Similarly,
\begin{align*}
[h,f]v_i=-2fv_i
\end{align*}
for all $0\le i\le m$, with both sides zero when $i=m$. Finally, for $1\le i<m$,
\begin{align*}
[e,f]v_i=e v_{i+1}-f e v_i=(i+1)(m-i)v_i-i(m-i+1)v_i=(m-2i)v_i=hv_i.
\end{align*}
For $i=0$,
\begin{align*}
[e,f]v_0=ev_1=m v_0=hv_0.
\end{align*}
For $i=m$,
\begin{align*}
[e,f]v_m=-f e v_m=-m v_m=hv_m.
\end{align*}
Thus the formulas define an $\mathfrak{sl}_2(\mathbb C)$-module.
The vector $v_0$ satisfies
\begin{align*}
ev_0=0.
\end{align*}
Also,
\begin{align*}
hv_0=mv_0.
\end{align*}
Since $v_0$ is a basis vector, $v_0\ne 0$, so $L(m)$ has highest weight $m$.
[/step]
[step:Prove the constructed module is irreducible]
Let $0\ne U\subset L(m)$ be an $\mathfrak{sl}_2(\mathbb C)$-submodule. Choose a nonzero vector
\begin{align*}
u=\sum_{i=0}^m a_i v_i\in U,
\end{align*}
where $a_i\in\mathbb C$. Let $j$ be the largest index such that $a_j\ne 0$. Since $U$ is stable under $e$, the vector $e^j u$ lies in $U$. For $0\le i<j$, we have $e^j v_i=0$, while
\begin{align*}
e^j v_j=j!m(m-1)\cdots(m-j+1)v_0\ne 0.
\end{align*}
Hence $e^j u$ is a nonzero scalar multiple of $v_0$, so $v_0\in U$. Since $U$ is stable under $f$ and
\begin{align*}
v_i=f^i v_0
\end{align*}
for every $0\le i\le m$, all basis vectors $v_i$ belong to $U$. Therefore $U=L(m)$, proving irreducibility.
[/step]
[step:Identify all irreducible finite-dimensional modules uniquely]
The classification argument above shows that every nonzero irreducible finite-dimensional $\mathfrak{sl}_2(\mathbb C)$-module is isomorphic to one of the constructed modules $L(m)$ with $m\in\mathbb Z_{\ge 0}$.
It remains to prove uniqueness of $m$. In $L(m)$, the highest weight vector has $h$-eigenvalue $m$, and the set of $h$-eigenvalues is
\begin{align*}
\{m,m-2,\dots,-m\}.
\end{align*}
The largest eigenvalue in this string is $m$. Therefore, if $L(m)\cong L(n)$ as $\mathfrak{sl}_2(\mathbb C)$-modules, the corresponding linear isomorphism intertwines the action of $h$ and preserves the set of $h$-eigenvalues. Hence $m=n$. This proves that every irreducible finite-dimensional $\mathfrak{sl}_2(\mathbb C)$-module is isomorphic to exactly one $L(m)$.
[/step]