[proofplan]
We compare the two induced maps on an arbitrary homology class represented by a cycle $z \in C_n$. The chain homotopy identity expresses $f_n(z)-g_n(z)$ as the sum of a boundary in $D_n$ and a term involving $d_n^C(z)$. Since $z$ is a cycle, the second term vanishes, so $f_n(z)$ and $g_n(z)$ differ by a boundary and therefore determine the same class in $H_n(D_\bullet)$.
[/proofplan]
[step:Fix a homology class and choose a cycle representative]
Fix $n \in \mathbb Z$. Define the cycle and boundary submodules
\begin{align*}
Z_n(C_\bullet) &:= \ker(d_n^C: C_n \to C_{n-1}), \\
B_n(C_\bullet) &:= \operatorname{im}(d_{n+1}^C: C_{n+1} \to C_n),
\end{align*}
and similarly define $Z_n(D_\bullet)$ and $B_n(D_\bullet)$ for $D_\bullet$.
Let $[z] \in H_n(C_\bullet)$ be an arbitrary homology class, represented by a cycle $z \in Z_n(C_\bullet)$. Thus $z \in C_n$ and
\begin{align*}
d_n^C(z) = 0.
\end{align*}
[/step]
[step:Verify that the images of the cycle are cycles in $D_\bullet$]
Since $f: C_\bullet \to D_\bullet$ is a chain map, its components satisfy
\begin{align*}
d_n^D \circ f_n = f_{n-1} \circ d_n^C.
\end{align*}
Applying this identity to $z$ gives
\begin{align*}
d_n^D(f_n(z)) = f_{n-1}(d_n^C(z)) = f_{n-1}(0) = 0.
\end{align*}
Hence $f_n(z) \in Z_n(D_\bullet)$.
The same argument applied to the chain map $g: C_\bullet \to D_\bullet$ gives
\begin{align*}
d_n^D(g_n(z)) = g_{n-1}(d_n^C(z)) = g_{n-1}(0) = 0,
\end{align*}
so $g_n(z) \in Z_n(D_\bullet)$. Therefore both homology classes $[f_n(z)]$ and $[g_n(z)]$ are defined in $H_n(D_\bullet)$.
[/step]
[step:Use the chain homotopy identity to show the two images differ by a boundary]
By the chain homotopy identity in degree $n$,
\begin{align*}
f_n(z) - g_n(z)
&= d_{n+1}^D(h_n(z)) + h_{n-1}(d_n^C(z)).
\end{align*}
Since $z$ is a cycle, $d_n^C(z) = 0$. Since $h_{n-1}: C_{n-1} \to D_n$ is $R$-linear, $h_{n-1}(0) = 0$. Therefore
\begin{align*}
f_n(z) - g_n(z)
&= d_{n+1}^D(h_n(z)).
\end{align*}
Here $h_n(z) \in D_{n+1}$, so $d_{n+1}^D(h_n(z)) \in \operatorname{im}(d_{n+1}^D) = B_n(D_\bullet)$. Hence
\begin{align*}
f_n(z) - g_n(z) \in B_n(D_\bullet).
\end{align*}
[/step]
[step:Conclude equality of the induced homomorphisms on homology]
Since $f_n(z)$ and $g_n(z)$ are cycles in $D_n$ and their difference lies in $B_n(D_\bullet)$, they represent the same coset in
\begin{align*}
H_n(D_\bullet) = Z_n(D_\bullet) / B_n(D_\bullet).
\end{align*}
Thus
\begin{align*}
H_n(f)([z]) = [f_n(z)] = [g_n(z)] = H_n(g)([z]).
\end{align*}
The class $[z] \in H_n(C_\bullet)$ was arbitrary, so
\begin{align*}
H_n(f) = H_n(g): H_n(C_\bullet) \to H_n(D_\bullet).
\end{align*}
Since $n \in \mathbb Z$ was arbitrary, the equality holds in every degree.
[/step]