(i) put-call parity for European options always holds, and doesn’t depend on the model you are using to price the options.
If you have a portfolio consisting of a long call and a short put C-P,
the pay-off when it expires will always be S-X, and the present value of that is S-Xe^{-rT}.
So the value of the portfolio is C-P=S-e^{-rT}X.
That is put-call parity for European options.
You have a typo and missed the factor e^{-rT}

(ii) This can be rearranged as C=S-e^{-rT}X+P.
If you want an expression for the put, just rearrange the expression for the call to get P=e^{-rT}X-S+C.
Again, these expressions don’t depend on the model you are using,

What you can do is put the BSM expressions for C and P in put-call parity to verify that put-call parity holds

C=SN(d_1)-e^{-rT}XN(d_2) and P=e^{-rT}XN(-d_2)-SN(-d_1), so C-P=S\left[N(d_1)+N(-d_1)\right]-e^{-rT}X\left[N(d_2)+N(-d_2)\right]

If x is a normally distributed random variable with mean 0, then the distribution of x is symmetric about 0 and N(-d)=\textrm{probability}(x<-d)=\textrm{probability}(x>d)=1-N(d)
so that N(d)+N(-d)=1, and if we use that in the expression above C-P=S\left[N(d_1)+N(-d_1)\right]-e^{-rT}X\left[N(d_2)+N(-d_2)\right]=S-e^{-rT}X