I'm assuming you mean where pushing say up, it moves in the direction the ship is facing. left and right rotate the ship. And down moves in reverse direction of the direction the ship is pointing.
You can use a bunch of trig to pull this off, but you should always avoid trig unless necessary (sin, cos, tan... etc).
I'd use a vector... you don't have a vector class, so just use the point class or 2 variables representing 2 slots of a vector.
For Vectors there are a few things you should know that make them so great.
Vectors are denoted in math: <i,j> where i is the amount of magnitude in the x direction and j is the amount of magnitude in the y direction
A) vectors have magnitude and direction. Magnitude is the amount of "force" the vector has (hence in physics they say a vector has force and direction... not accurate though as force is a physical action... and Vectors don't have to represent physical forces). Direction is which way you are moving... it could be viewed kind of like 'slope' as well. There is no position to the vector, it is 100% free floating, which means you can apply the magnitude and direction of the vector to any object no matter where it stands.
i.e. a mass can have the force of gravity applied to it anywhere on earth... <0, -9.8> meters per second squared
B) The unit vector is a vector who has the direction, but who's magnitude is 1. These vectors can be easily manipulated because of the identity theorem (x * 1 = x). Thusly if you have a unit vector you can multiply it by any 'speed' and get a vector with that magnitude with very little work.
We use pythagorean theorem to get the unit vector.
unit vector of <i,j> = <i,j> / sqrt(i^2 + j^2)
thusly the unit vector of <5,5> is <5,5> / sqrt(50) = <.7071, .7071>
if you make a unit vector represent the direction your ship is facing you can do several things.
When updating position forward you just add the vector * speed to the position of the object. Subtract when moving backwards. And rotate the vector when turning (which does use trig as it is faster then resolving unit vectors)
here is a vector class I wrote filled with useful methods.
it could use some more tweeking to make it user friendly to most. Just keep in mind, base methods always change the vector you run the method from, static methods should be used if you want to return a new vector with out effecting the inputs.