0% found this document useful (0 votes)
79 views

BIKE Databse

The document contains code for a script that simulates interactions with a bike rental shop. It includes functions for the main menu, renting a bike, and returning a bike. The main menu prompts the user to choose an option and calls the appropriate function. The rent and return functions check the database for bike and customer information, prompt for additional details, and make necessary updates to the database to complete the transaction.

Uploaded by

Divya Sriju
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
79 views

BIKE Databse

The document contains code for a script that simulates interactions with a bike rental shop. It includes functions for the main menu, renting a bike, and returning a bike. The main menu prompts the user to choose an option and calls the appropriate function. The rent and return functions check the database for bike and customer information, prompt for additional details, and make necessary updates to the database to complete the transaction.

Uploaded by

Divya Sriju
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 4

// Here are two examples of the output of a passing script:

~~~~~ MY SALON ~~~~~

Welcome to My Salon, how can I help you?

1) cut
2) color
3) perm
4) style
5) trim
10

I could not find that service. What would you like today?
1) cut
2) color
3) perm
4) style
5) trim
1

What's your phone number?


555-555-5555

I don't have a record for that phone number, what's your name?
Fabio

What time would you like your cut, Fabio?


10:30

I have put you down for a cut at 10:30, Fabio.

// Next example:

~~~~~ MY SALON ~~~~~

Welcome to My Salon, how can I help you?

1) cut
2) color
3) perm
4) style
5) trim
2

What's your phone number?


555-555-5555

What time would you like your color, Fabio?


11am

I have put you down for a color at 11am, Fabio.


###########################################################

#!/bin/bash

PSQL="psql -X --username=freecodecamp --dbname=bikes --tuples-only -c"


echo -e "\n~~~~~ Bike Rental Shop ~~~~~\n"

MAIN_MENU() {
if [[ $1 ]]
then
echo -e "\n$1"
fi

echo "Welcome to my salon,How may I help you?"


echo -e "\n1. cut\n2. color\n3. perm \n4.style \n5.trim \n6.Exit "
read MAIN_MENU_SELECTION

case $MAIN_MENU_SELECTION in
1) RENT_MENU ;;
2) RETURN_MENU ;;
3) EXIT ;;
*) MAIN_MENU "Please enter a valid option." ;;
esac
}

RENT_MENU() {
# get available bikes
AVAILABLE_BIKES=$($PSQL "SELECT bike_id, type, size FROM bikes WHERE available =
true ORDER BY bike_id")

# if no bikes available
if [[ -z $AVAILABLE_BIKES ]]
then
# send to main menu
MAIN_MENU "Sorry, we don't have any bikes available right now."
else
# display available bikes
echo -e "\nHere are the bikes we have available:"
echo "$AVAILABLE_BIKES" | while read BIKE_ID BAR TYPE BAR SIZE
do
echo "$BIKE_ID) $SIZE\" $TYPE Bike"
done

# ask for bike to rent


echo -e "\nWhich one would you like to rent?"
read BIKE_ID_TO_RENT

# if input is not a number


if [[ ! $BIKE_ID_TO_RENT =~ ^[0-9]+$ ]]
then
# send to main menu
MAIN_MENU "That is not a valid bike number."
else
# get bike availability
BIKE_AVAILABILITY=$($PSQL "SELECT available FROM bikes WHERE bike_id =
$BIKE_ID_TO_RENT AND available = true")

# if not available
if [[ -z $BIKE_AVAILABILITY ]]
then
# send to main menu
MAIN_MENU "That bike is not available."
else
# get customer info
echo -e "\nWhat's your phone number?"
read PHONE_NUMBER

CUSTOMER_NAME=$($PSQL "SELECT name FROM customers WHERE phone =


'$PHONE_NUMBER'")

# if customer doesn't exist


if [[ -z $CUSTOMER_NAME ]]
then
# get new customer name
echo -e "\nWhat's your name?"
read CUSTOMER_NAME

# insert new customer


INSERT_CUSTOMER_RESULT=$($PSQL "INSERT INTO customers(name, phone)
VALUES('$CUSTOMER_NAME', '$PHONE_NUMBER')")
fi

# get customer_id
CUSTOMER_ID=$($PSQL "SELECT customer_id FROM customers WHERE
phone='$PHONE_NUMBER'")

# insert bike rental


INSERT_RENTAL_RESULT=$($PSQL "INSERT INTO rentals(customer_id, bike_id)
VALUES($CUSTOMER_ID, $BIKE_ID_TO_RENT)")

# set bike availability to false


SET_TO_FALSE_RESULT=$($PSQL "UPDATE bikes SET available = false WHERE
bike_id = $BIKE_ID_TO_RENT")

# get bike info


BIKE_INFO=$($PSQL "SELECT size, type FROM bikes WHERE bike_id =
$BIKE_ID_TO_RENT")
BIKE_INFO_FORMATTED=$(echo $BIKE_INFO | sed 's/ |/"/')

# send to main menu


MAIN_MENU "I have put you down for the $BIKE_INFO_FORMATTED Bike, $(echo
$CUSTOMER_NAME | sed -r 's/^ *| *$//g')."
fi
fi
fi
}

RETURN_MENU() {
# get customer info
echo -e "\nWhat's your phone number?"
read PHONE_NUMBER

CUSTOMER_ID=$($PSQL "SELECT customer_id FROM customers WHERE phone =


'$PHONE_NUMBER'")

# if not found
if [[ -z $CUSTOMER_ID ]]
then
# send to main menu
MAIN_MENU "I could not find a record for that phone number."
else
# get customer's rentals
CUSTOMER_RENTALS=$($PSQL "SELECT bike_id, type, size FROM bikes INNER JOIN
rentals USING(bike_id) INNER JOIN customers USING(customer_id) WHERE phone =
'$PHONE_NUMBER' AND date_returned IS NULL ORDER BY bike_id")

# if no rentals
if [[ -z $CUSTOMER_RENTALS ]]
then
# send to main menu
MAIN_MENU "You do not have any bikes rented."
else
# display rented bikes
echo -e "\nHere are your rentals:"
echo "$CUSTOMER_RENTALS" | while read BIKE_ID BAR TYPE BAR SIZE
do
echo "$BIKE_ID) $SIZE\" $TYPE Bike"
done

# ask for bike to return


echo -e "\nWhich one would you like to return?"
read BIKE_ID_TO_RETURN

# if not a number
if [[ ! $BIKE_ID_TO_RETURN =~ ^[0-9]+$ ]]
then
# send to main menu
MAIN_MENU "That is not a valid bike number."
else
# check if input is rented
RENTAL_ID=$($PSQL "SELECT rental_id FROM rentals INNER JOIN customers
USING(customer_id) WHERE phone = '$PHONE_NUMBER' AND bike_id = $BIKE_ID_TO_RETURN
AND date_returned IS NULL")

# if input not rented


if [[ -z $RENTAL_ID ]]
then
# send to main menu
MAIN_MENU "You do not have that bike rented."
else
# update date_returned
RETURN_BIKE_RESULT=$($PSQL "UPDATE rentals SET date_returned = NOW()
WHERE rental_id = $RENTAL_ID")

# set bike availability to true


SET_TO_TRUE_RESULT=$($PSQL "UPDATE bikes SET available = true WHERE
bike_id = $BIKE_ID_TO_RETURN")

# send to main menu


MAIN_MENU "Thank you for returning your bike."
fi
fi
fi
fi
}

EXIT() {
echo -e "\nThank you for stopping in.\n"
}

MAIN_MENU

You might also like