Below is a C# Bitcoin Price Converter program. This program fetches the current price of Bitcoin using a public API and allows the user to convert a given amount of Bitcoin to USD or vice versa. The program uses HttpClient to interact with the API.
Full Code
using System; using System.Net.Http; using System.Threading.Tasks; class BitcoinPriceConverter { static async Task Main(string[] args) { Console.WriteLine("Welcome to the Bitcoin Price Converter!"); while (true) { Console.WriteLine("\nChoose an option:"); Console.WriteLine("1. Convert Bitcoin to USD"); Console.WriteLine("2. Convert USD to Bitcoin"); Console.WriteLine("3. Exit"); Console.Write("Enter your choice: "); string choice = Console.ReadLine(); switch (choice) { case "1": await ConvertBitcoinToUSD(); break; case "2": await ConvertUSDToBitcoin(); break; case "3": Console.WriteLine("Goodbye!"); return; default: Console.WriteLine("Invalid choice. Please try again."); break; } } } static async Task<double> GetBitcoinPriceInUSD() { try { using HttpClient client = new HttpClient(); string apiUrl = "https://api.coindesk.com/v1/bpi/currentprice/USD.json"; HttpResponseMessage response = await client.GetAsync(apiUrl); if (!response.IsSuccessStatusCode) { Console.WriteLine("Failed to fetch the Bitcoin price. Please try again later."); return 0; } string json = await response.Content.ReadAsStringAsync(); dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json); return (double)data.bpi.USD.rate_float; } catch (Exception ex) { Console.WriteLine($"An error occurred while fetching the Bitcoin price: {ex.Message}"); return 0; } } static async Task ConvertBitcoinToUSD() { Console.Write("Enter the amount of Bitcoin: "); if (!double.TryParse(Console.ReadLine(), out double bitcoinAmount) || bitcoinAmount <= 0) { Console.WriteLine("Invalid input. Please enter a positive numeric value."); return; } double price = await GetBitcoinPriceInUSD(); if (price > 0) { double usdAmount = bitcoinAmount * price; Console.WriteLine($"{bitcoinAmount} BTC = {usdAmount:F2} USD (Current BTC Price: {price:F2} USD)"); } } static async Task ConvertUSDToBitcoin() { Console.Write("Enter the amount of USD: "); if (!double.TryParse(Console.ReadLine(), out double usdAmount) || usdAmount <= 0) { Console.WriteLine("Invalid input. Please enter a positive numeric value."); return; } double price = await GetBitcoinPriceInUSD(); if (price > 0) { double bitcoinAmount = usdAmount / price; Console.WriteLine($"{usdAmount:F2} USD = {bitcoinAmount:F8} BTC (Current BTC Price: {price:F2} USD)"); } } }
Explanation
- Fetching Bitcoin Price:
- The method GetBitcoinPriceInUSD fetches the current price of Bitcoin in USD from the CoinDesk API:
- API URL: https://api.coindesk.com/v1/bpi/currentprice/USD.json
- The method uses HttpClient to send an HTTP GET request to the API and parse the JSON response.
- The price is extracted using the Newtonsoft.Json library, which deserializes the JSON data.
string apiUrl = "https://api.coindesk.com/v1/bpi/currentprice/USD.json"; HttpResponseMessage response = await client.GetAsync(apiUrl); string json = await response.Content.ReadAsStringAsync(); dynamic data = Newtonsoft.Json.JsonConvert.DeserializeObject(json); return (double)data.bpi.USD.rate_float;
- The method GetBitcoinPriceInUSD fetches the current price of Bitcoin in USD from the CoinDesk API:
- Converting Bitcoin to USD:
- The method ConvertBitcoinToUSD takes the user’s input (amount of Bitcoin), validates it, and multiplies it by the current price of Bitcoin (fetched using GetBitcoinPriceInUSD).
double usdAmount = bitcoinAmount * price; Console.WriteLine($"{bitcoinAmount} BTC = {usdAmount:F2} USD");
Example:
- Input: 0.05 BTC
- Price: 40000 USD
- Output: 0.05 BTC = 2000 USD
- Converting USD to Bitcoin:
- The method ConvertUSDToBitcoin takes the user’s input (amount in USD), validates it, and divides it by the current price of Bitcoin to calculate the equivalent Bitcoin value.
double bitcoinAmount = usdAmount / price; Console.WriteLine($"{usdAmount} USD = {bitcoinAmount:F8} BTC");
Example:
- Input: 2000 USD
- Price: 40000 USD
- Output: 2000 USD = 0.05000000 BTC
- Input Validation:
- Both ConvertBitcoinToUSD and ConvertUSDToBitcoin validate user inputs to ensure they are positive numeric values using double.TryParse.
if (!double.TryParse(Console.ReadLine(), out double bitcoinAmount) || bitcoinAmount <= 0) { Console.WriteLine("Invalid input. Please enter a positive numeric value."); return; }
- Error Handling:
- The program handles potential errors (e.g., API failure or invalid responses) gracefully, displaying a meaningful message to the user.
catch (Exception ex) { Console.WriteLine($"An error occurred while fetching the Bitcoin price: {ex.Message}"); }
- JSON Parsing:
- The program uses the Newtonsoft.Json library to parse the API response. Ensure you install the Newtonsoft.Json NuGet package for this to work:
dotnet add package Newtonsoft.Json
- The program uses the Newtonsoft.Json library to parse the API response. Ensure you install the Newtonsoft.Json NuGet package for this to work:
Sample Run
Run the program:
Welcome to the Bitcoin Price Converter!
Choose an option:
- Convert Bitcoin to USD
- Convert USD to Bitcoin
- Exit Enter your choice: 1 Enter the amount of Bitcoin: 0.05 0.05 BTC = 2000.00 USD (Current BTC Price: 40000.00 USD)
Another run:
Choose an option: 2. Convert USD to Bitcoin Enter the amount of USD: 15000 15000.00 USD = 0.37500000 BTC (Current BTC Price: 40000.00 USD)
Invalid Input Example:
Enter your choice: 1
Enter the amount of Bitcoin: -0.5
Invalid input.
Please enter a positive numeric value.
Features
1. Live Bitcoin Price:
– Fetches the current Bitcoin price in real-time using the CoinDesk API.
2. Two-Way Conversion:
– Converts Bitcoin to USD and vice versa.
3. Error Handling:
– Handles API errors and invalid user inputs gracefully.
4. Dynamic JSON Parsing:
– Uses the Newtonsoft.Json library to parse JSON responses dynamically.
Ideas for Enhancement
1. **Add Support for Other Currencies**:
– Allow users to choose currencies like EUR, GBP, etc.
– Update the API URL to fetch rates for other currencies.
Example: string apiUrl = "https://api.coindesk.com/v1/bpi/currentprice/EUR.json";
- Historical Prices:
- Fetch historical Bitcoin prices using the CoinDesk historical API.
- Custom Formatting:
- Display the prices in localized formats for different currencies.
- Graphical Interface:
- Use Windows Forms or WPF to create a GUI version of the converter.
- Advanced Options:
- Allow users to calculate profit/loss based on their Bitcoin holdings and purchase prices.
This C# Bitcoin Price Converter demonstrates how to interact with an external API, validate user input, and perform calculations in real-time.