It's hard to say mainly since a bitcoin wallet is security sensitive since it deals with users funds.
I think the easiest way is to decide the type of client you want to create then start going through the source code of similar projects and check their different parts to get the idea. Then start your own work.
You could check out
bitcoin.org to get a list of wallets categorized based on their type and features they offer with all their links.
But I like to categorize them this way:
1. A full node.This would be something like Armory for instance where you build your wallet which could be additional functionality and more advanced UI on top of bitcoin core. A lot of the basic functionalities are already accessible though core's JSON RPC including signing transactions, handling keys, scripts,...
This would probably be easiest to create (less work and knowledge of protocol required) but has only niche usages since it is a full node.
Armory (link found on bitcoin.org).
Bitcoin core. There are lots of good information including RPC commands on [https://developer.bitcoin.org/index.html]developers documentation[/url]
2. SPV clientThis requires more knowledge of Bitcoin protocol and the amount of code to write will be a lot more compared to #1 because you'll have to handle everything from key generation and transaction signing to a communication protocol that the wallet has to use.
You'll also have to be familiar with the attack vectors against SPV clients since they do less verification compared to a full node.
I categorize them into two sub groups:
2.A. SPV using bloom filtersThis is a bit more decentralized and provides better privacy compared to the other type but it takes more effort and bad implementation of it could lead to privacy leaks.
BitcoinJ library (written in Java) and some of the SPV wallets that use it are using this method.
2.B. SPV using Electrum protocolThis provides less privacy but it is probably easier to work with and is slightly faster. Basically the client connects to an Electrum node that has an indexed blockchain and looks up its history and also opens a socket listening for new incoming blocks or transactions for the addresses it subscribes to.
Electrum (written in Python) is the implementation.
PS. Platform could also be a determining factor, for instance you'll have more restrictions working on a phone compared to PC.