[proofplan]
Let $\mathcal{C}_1, \ldots, \mathcal{C}_k$ be the conjugacy classes of $G$ with class sums $C_j = \sum_{x \in \mathcal{C}_j} x \in \mathbb{C}G$. The proof has three parts. First, each $C_j \in Z(\mathbb{C}G)$: conjugation permutes elements within each conjugacy class, so $h C_j h^{-1} = C_j$ for every $h \in G$, which extends linearly to commutativity with all of $\mathbb{C}G$. Second, the $C_j$ span $Z(\mathbb{C}G)$: if $z = \sum_g \alpha_g g$ is central, the equation $h z h^{-1} = z$ forces the coefficients $\alpha$ to be constant on conjugacy classes, so $z = \sum_j \alpha_j C_j$. Linear independence follows because the conjugacy classes are pairwise disjoint, so the $C_j$ have disjoint supports in the basis $\{g : g \in G\}$ of $\mathbb{C}G$. Third, the structure constants $a_{ij\ell}$ are the integer counts $|\{(x, y) \in \mathcal{C}_i \times \mathcal{C}_j : xy = g_\ell\}|$ — non-negative integers by inspection of the product expansion.
[/proofplan]
[step:Verify each class sum $C_j$ lies in $Z(\mathbb{C}G)$]
For $j \in \{1, \ldots, k\}$, define the class sum
\begin{align*}
C_j := \sum_{x \in \mathcal{C}_j} x \in \mathbb{C}G.
\end{align*}
Fix $h \in G$. Conjugation by $h$ defines a bijection $\mathcal{C}_j \to \mathcal{C}_j$ via $x \mapsto h x h^{-1}$ (this is the defining property of a conjugacy class — conjugation by any element of $G$ permutes the elements of each class). Therefore
\begin{align*}
h C_j h^{-1} = h \left(\sum_{x \in \mathcal{C}_j} x\right) h^{-1} = \sum_{x \in \mathcal{C}_j} h x h^{-1} = \sum_{y \in \mathcal{C}_j} y = C_j,
\end{align*}
where in the third equality we have re-indexed by the bijection $x \mapsto y = h x h^{-1}$.
Equivalently, $h C_j = C_j h$ for every $h \in G$. Extending linearly, for any $z = \sum_h \beta_h h \in \mathbb{C}G$,
\begin{align*}
z C_j = \sum_h \beta_h h C_j = \sum_h \beta_h C_j h = C_j \sum_h \beta_h h = C_j z.
\end{align*}
Hence $C_j \in Z(\mathbb{C}G)$.
[/step]
[step:Show $C_1, \ldots, C_k$ are linearly independent]
The group elements $\{g : g \in G\}$ form a basis of $\mathbb{C}G$ as a complex vector space. The class sum $C_j = \sum_{x \in \mathcal{C}_j} x$ has support exactly $\mathcal{C}_j \subseteq G$.
Since the conjugacy classes $\mathcal{C}_1, \ldots, \mathcal{C}_k$ partition $G$, in particular they are pairwise disjoint: $\mathcal{C}_i \cap \mathcal{C}_j = \varnothing$ for $i \neq j$. So the class sums $C_1, \ldots, C_k$ have pairwise disjoint supports in the basis $\{g : g \in G\}$.
Suppose $\sum_{j=1}^k \beta_j C_j = 0$ in $\mathbb{C}G$. Expanding in the basis,
\begin{align*}
\sum_{j=1}^k \sum_{x \in \mathcal{C}_j} \beta_j x = 0.
\end{align*}
Since each $g \in G$ appears in exactly one $\mathcal{C}_j$, the coefficient of $g$ on the left-hand side is $\beta_{j(g)}$, where $j(g)$ is the index of the class containing $g$. Equating coefficients with the zero on the right gives $\beta_{j(g)} = 0$ for every $g \in G$, hence $\beta_j = 0$ for every $j \in \{1, \ldots, k\}$. So the $C_j$ are linearly independent.
[/step]
[step:Show $C_1, \ldots, C_k$ span $Z(\mathbb{C}G)$]
Let $z = \sum_{g \in G} \alpha_g g \in Z(\mathbb{C}G)$ be central. We show the function $g \mapsto \alpha_g$ is constant on each conjugacy class.
Fix $h \in G$. Centrality gives $h z = z h$, equivalently $h z h^{-1} = z$. We compute
\begin{align*}
h z h^{-1} = \sum_{g \in G} \alpha_g (h g h^{-1}) = \sum_{g' \in G} \alpha_{h^{-1} g' h} g',
\end{align*}
where in the second equality we have re-indexed by $g' = h g h^{-1}$, so $g = h^{-1} g' h$. Equating with $z = \sum_{g'} \alpha_{g'} g'$ and comparing coefficients of $g'$ in the basis $\{g' : g' \in G\}$,
\begin{align*}
\alpha_{h^{-1} g' h} = \alpha_{g'} \qquad \text{for all } g', h \in G.
\end{align*}
That is, $\alpha$ is constant under conjugation. Since two elements of $G$ are conjugate iff they lie in the same conjugacy class, $\alpha_g$ depends only on the conjugacy class of $g$. Let $\alpha_j$ denote the common value of $\alpha_g$ for $g \in \mathcal{C}_j$. Then
\begin{align*}
z = \sum_{j=1}^k \sum_{g \in \mathcal{C}_j} \alpha_j g = \sum_{j=1}^k \alpha_j C_j.
\end{align*}
Combining Steps 1, 2, and 3: the class sums $C_1, \ldots, C_k$ are linearly independent, span $Z(\mathbb{C}G)$, and lie in $Z(\mathbb{C}G)$, so they form a basis of $Z(\mathbb{C}G)$.
[guided]
The two directions of the spanning argument work hand-in-hand. Step 1 shows $C_j \in Z(\mathbb{C}G)$, so any $\mathbb{C}$-linear combination $\sum_j \alpha_j C_j$ lies in $Z(\mathbb{C}G)$ (which is a subspace, so closed under linear combinations). Conversely, Step 3 shows that any $z \in Z(\mathbb{C}G)$ has coefficients constant on conjugacy classes, hence is a linear combination of the $C_j$. The implication "$z$ is central $\implies \alpha_{h^{-1}gh} = \alpha_g$" uses only the relation $hz = zh$ for elements $h \in G$ — it would suffice to check centrality against the basis elements of $\mathbb{C}G$, since centrality against a basis implies centrality against everything by linearity.
The reason this argument is genuine and not circular: the basis $\{g : g \in G\}$ of $\mathbb{C}G$ is fixed and preferred, and the conjugacy classes are the orbits of $G$ acting on this basis by conjugation. Class functions on the basis correspond exactly to elements of $Z(\mathbb{C}G)$.
[/guided]
[/step]
[step:Compute the structure constants $a_{ij\ell}$ as non-negative integer counts]
Since $C_1, \ldots, C_k$ form a basis of $Z(\mathbb{C}G)$ (by the previous step) and $Z(\mathbb{C}G)$ is closed under multiplication (the centre of any ring is a subring), the product $C_i C_j$ lies in $Z(\mathbb{C}G)$ and so admits a unique expansion
\begin{align*}
C_i C_j = \sum_{\ell=1}^k a_{ij\ell} C_\ell
\end{align*}
with coefficients $a_{ij\ell} \in \mathbb{C}$. We show these coefficients are non-negative integers.
Fix $\ell \in \{1, \ldots, k\}$ and choose any representative $g_\ell \in \mathcal{C}_\ell$. We compute the coefficient of $g_\ell$ in $C_i C_j$ in two ways.
**Direct expansion.** From the definitions,
\begin{align*}
C_i C_j = \left(\sum_{x \in \mathcal{C}_i} x\right) \left(\sum_{y \in \mathcal{C}_j} y\right) = \sum_{x \in \mathcal{C}_i} \sum_{y \in \mathcal{C}_j} xy = \sum_{w \in G} N_{ij}(w)\, w,
\end{align*}
where
\begin{align*}
N_{ij}(w) := |\{(x, y) \in \mathcal{C}_i \times \mathcal{C}_j : xy = w\}| \in \mathbb{Z}_{\geq 0}.
\end{align*}
So the coefficient of $g_\ell$ in $C_i C_j$ is $N_{ij}(g_\ell)$.
**Class-sum expansion.** Substituting $C_\ell = \sum_{w \in \mathcal{C}_\ell} w$,
\begin{align*}
\sum_{\ell'=1}^k a_{ij\ell'} C_{\ell'} = \sum_{\ell'=1}^k \sum_{w \in \mathcal{C}_{\ell'}} a_{ij\ell'} w.
\end{align*}
The coefficient of $g_\ell$ in this expression is $a_{ij\ell}$, since $g_\ell \in \mathcal{C}_\ell$ and the conjugacy classes are disjoint (so $g_\ell \notin \mathcal{C}_{\ell'}$ for $\ell' \neq \ell$).
Comparing the two expressions in the basis $\{g : g \in G\}$,
\begin{align*}
a_{ij\ell} = N_{ij}(g_\ell) = |\{(x, y) \in \mathcal{C}_i \times \mathcal{C}_j : xy = g_\ell\}|.
\end{align*}
This is a count of pairs in a finite set, hence a non-negative integer.
[guided]
The structure constants are integer-valued because we are doing arithmetic in the integral group ring $\mathbb{Z}G \subseteq \mathbb{C}G$: each class sum $C_j$ has all coefficients equal to $1$, so $C_j \in \mathbb{Z}G$, and the product $C_i C_j$ stays in $\mathbb{Z}G$. The integrality of $a_{ij\ell}$ is then a consequence of the centre $Z(\mathbb{Z}G)$ being a free $\mathbb{Z}$-module with basis the class sums (the same argument as Steps 2 and 3 works over $\mathbb{Z}$).
The non-negativity is sharper: $a_{ij\ell}$ counts something concrete — the number of factorisations $g_\ell = xy$ with $x \in \mathcal{C}_i$ and $y \in \mathcal{C}_j$. This count does not depend on the choice of representative $g_\ell \in \mathcal{C}_\ell$: if $g_\ell' = h g_\ell h^{-1}$ is another representative, then $(x, y) \mapsto (h x h^{-1}, h y h^{-1})$ is a bijection between the factorisations of $g_\ell$ and the factorisations of $g_\ell'$ (using that conjugation preserves $\mathcal{C}_i$ and $\mathcal{C}_j$).
[/guided]
[/step]