math-tool/src/main.rs
2024-03-14 17:16:50 -05:00

129 lines
3.9 KiB
Rust

/*
Written by: James Musselman
On: 3/14/2024
Updated: Never
Description:
This tool was writen as part of my 100DaysOfCode commitment for the 2024 year to help establish a
habit of programming daily and fuel my continious drive to learn.
The tool below should allow the user to run basic, intermediate, and advanced math computations.
The user will select the equation or type of math they want to be done, enter the data, and
then recive the result of the computation.
Future work could include showing how the answer was calculated, showing graphs, and exporting to
a text file.
*/
use std::io;
fn main() {
// TODO: Greet and explain tool
// Get user choice on what they want to use
loop {
//Print choices
println!("Here are the current math tools:\n");
println!("1. Additon");
println!("2. Subtraction");
println!("3. Multiplication");
println!("4. Division");
// Get user input
let mut user_input = String::new();
println!("Please select a function above or use 'q' to quit:");
io::stdin().read_line(&mut user_input)
.expect("Failed to read line");
if user_input.trim().eq_ignore_ascii_case("q") {
break;
}
let num: Result<i32, _> = user_input.trim().parse();
// Match statement to run choice
match num {
Ok(num) => {
let result = run_function(num);
println!("The result was: {}", result);
}
Err(_) => println!("Invalid input. Please try again."),
}
}
}
fn run_function(num: i32) -> i32 {
// run choice, then ask again or quit if the user selects that option
match num {
1 => addition(),
2 => subtraction(),
3 => multiplacation(),
4 => division(),
_ => {
println!("{} is not a valid selection, please select one of the options below", num);
0
}
}
}
fn addition() -> i32 {
println!("Please enter the value of the first number:");
let mut x = String::new();
io::stdin().read_line(&mut x).expect("Failed to read x value");
let x: i32 = x.trim().parse().expect("Failed to parse x value");
println!("Please enter the value of the second number:");
let mut y = String::new();
io::stdin().read_line(&mut y).expect("Failed to read y value");
let y: i32 = y.trim().parse().expect("Failed to parse y value");
x + y
}
fn subtraction() -> i32 {
println!("Please enter the value of the first number:");
let mut x = String::new();
io::stdin().read_line(&mut x).expect("Failed to read x value");
let x: i32 = x.trim().parse().expect("Failed to parse x value");
println!("Please enter the value of the second number:");
let mut y = String::new();
io::stdin().read_line(&mut y).expect("Failed to read y value");
let y: i32 = y.trim().parse().expect("Failed to parse y value");
x - y
}
fn multiplacation() -> i32 {
println!("Please enter the value of the first number:");
let mut x = String::new();
io::stdin().read_line(&mut x).expect("Failed to read x value");
let x: i32 = x.trim().parse().expect("Failed to parse x value");
println!("Please enter the value of the second number:");
let mut y = String::new();
io::stdin().read_line(&mut y).expect("Failed to read y value");
let y: i32 = y.trim().parse().expect("Failed to parse y value");
x * y
}
fn division() -> i32 {
println!("Please enter the value of the first number:");
let mut x = String::new();
io::stdin().read_line(&mut x).expect("Failed to read x value");
let x: i32 = x.trim().parse().expect("Failed to parse x value");
println!("Please enter the value of the second number:");
let mut y = String::new();
io::stdin().read_line(&mut y).expect("Failed to read y value");
let y: i32 = y.trim().parse().expect("Failed to parse y value");
x / y
}