Has anyone used the Sainsmart 1602 LCD shield?

I ordered this to use in my senior project and I have a few questions. I'm using an Arduino Uno to create an optical tachometer using IR components from Radioshack. I ordered this board because it was easy to instal, but I did not realize it had headers that took up EVERY digital pin on my uno. Does anyone know what pins this LCD requires to work? I planned on using 3, but I can realistically only need one pin, as I can run my +V and ground somewhere else on the Uno. I know this isnt the code forum, but I attached my code just in case someone might need it to reference to. Thanks in advance everyone!

#include <LiquidCrystal.h>         

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);   // DEFINE LCD PINS

volatile byte REV;       //  VOLATILE DATA TYPE TO STORE REVOLUTIONS
 
unsigned long int rpm;
unsigned long int maxRPM;  //  DEFINE RPM AND MAXIMUM RPM
 
unsigned long time;         //  DEFINE TIME TAKEN TO COVER ONE REVOLUTION
 
int ledPin = 12;           //   STATUS LED
 
int led = 0,RPMlen , prevRPM;  //  INTEGERS TO STORE LED VALUE AND CURRENT RPM AND PREVIOUS RPM
 
int flag = 0;             //  A VARIABLE TO DETERMINE WHETHER THE LCD NEEDS TO BE CLEARED OR NOT

long prevtime = 0;       //  STORE IDLE TIME TO TOGGLE MENU
    
 void setup()
 {
     Serial.begin (9600);  // GET VALUES USING SERIAL MONITOR
     
     lcd.begin(16, 2);     // INITIATE LCD
     
     attachInterrupt(0, RPMCount, RISING);     //  ADD A HIGH PRIORITY ACTION ( AN INTERRUPT)  WHEN THE SENSOR GOES FROM LOW TO HIGH
     
     REV = 0;      //  START ALL THE VARIABLES FROM 0
     
     rpm = 0;
     
     time = 0;
     
     pinMode; ledPin, OUTPUT;
     
     pinMode ;3, OUTPUT;           
     
     pinMode ;4, OUTPUT;
     
     digitalWrite(3, HIGH);             //  VCC PIN FOR SENSOR
     
     digitalWrite(4, LOW);              // GND PIN FOR SENSOR
     
     lcd.print("TACHOMETER");           //   STARTUP TEXT
     
     lcd.setCursor(0, 1);
     
     lcd.print("- Adam Gipe");      //  THAT'S ME
     
     delay(2000);
     
     lcd.clear();
     
 }
 
 void loop()
 {
  long currtime = millis();                 // GET CURRENT TIME
  
  long idletime = currtime - prevtime;        //  CALCULATE IDLE TIME
    
    if(REV >= 5 )                  //  IT WILL UPDATE AFETR EVERY 5 READINGS
   {
     
             
     if(flag==0)                     //  CLEAR THE LCD TO AVOID ANY GARBAGE TEXT
     {
       lcd.clear();
       
       lcd.print("SENSOR MEASURING");
       
       flag=1;                          //   AFTER FLAG = 1 , THE LOOP WILL NOT EXECUTE AGAIN
     }
     
     rpm = 30*1000/(millis() - time)*REV;       //  CALCULATE  RPM USING REVOLUTIONS AND ELAPSED TIME
     
     if(rpm > maxRPM)
     
     maxRPM = rpm;                             //  GET THE MAX RPM THROUGHOUT THE RUN
    
     time = millis();                            
     
     REV = 0;
     
     int x= rpm;    
     //  CALCULATE NUMBER OF DIGITS IN RPM
     while(x!=0)
     {
       x = x/10;
       
       RPMlen++;
     }       
          
     
     
     if(RPMlen!=prevRPM)                             // IF THE RPM FALLS TO A LOWER NUMBER WITH LESS DIGITS , THE LCD WILL GET CLEARED
     {
       lcd.clear();
       
       prevRPM = RPMlen;
       
       flag=0;
       
       lcd.print("SENSOR MEASURING");
     }
     
     lcd.setCursor(0, 1);
     
     lcd.print(rpm,DEC);                        //  PRINT RPM IN DECIMAL SYSTEM
     
     lcd.setCursor(6,1);
     
     lcd.print("RPM");
     
     delay(500);
     
     prevtime = currtime;                        // RESET IDLETIME
    
   }
   
   if(idletime > 5000 )                      //  IF THERE ARE NO READING FOR 5 SEC , THE SCREEN WILL SHOW MAX RPM
   {
     
     if(flag==1)                            // CLEAR THE LCD
     {
       lcd.clear();
       flag=0;
     }
     
     lcd.clear();
     
     lcd.print("MAXIMUM RPM");
     
     lcd.setCursor(0, 1);
     
     lcd.print(maxRPM,DEC);         // DISPLAY MAX RPM
     
     lcd.print("   RPM");
     
     delay(2000);
     
     lcd.clear();
     
     lcd.print("IDLE STATE");
     
     lcd.setCursor(0, 1);
     
     lcd.print("READY TO MEASURE");
     
     delay(2000);
     
     prevtime = currtime;
   }
     
 }
 
 void RPMCount()                                // EVERYTIME WHEN THE SENSOR GOES FROM LOW TO HIGH , THIS FUNCTION WILL BE INVOKED 
 {
   REV++;                                         // INCREASE REVOLUTIONS
   
   if (led == LOW)
   {
     
     led = HIGH;                                 //  TOGGLE STATUS LED
   } 
   
   else
   {
     led = LOW;
   }
   digitalWrite(ledPin, led);
 }

According to the code that you posted the LCD uses pins 4, 5, 6 ,7 8, and 9 which agrees with the schematic. The keypad uses pin A0.

If you go to the Sainsmart site here you will find a link to a Sample Code Download that, when unzipped, also provides a schematic diagram.

Most (maybe all) of the other Arduino I/O pins are passed through and available for your use.

Make sure you read the very first post in this forum section --> Warning to users of some vendors LCD keypad shields.

Don