I've made a train that moves along the train track using CFrame, and tried so many ways to try to keep the player from falling off the train, including CFraming the player along with the train (way too hard for me to manage). So I decided to ask if there's an easier way to do this
Yes, there is a very simple way. You can use the BasePart properties named Velocity and RotVelocity. These will automatically move anything standing on them. So if your train is moving in its z-direction, make a script adjust the velocity of the part. Just keep in mind that this velocity is relative to the part, not the world. Hope this helps, if my answer isn't clear enough, I would gladly give an example.
There are "Seat" Instances in roblox, that will make the player seat and move wherever the seat goes. So add the seat inside the train, and make the player sit in.