import java.sql.*;
import com.sybase.jdbcx.SybDriver;
import java.io.*;
import java.util.*;
import java.io.InputStream;
import java.io.InputStreamReader;

//Jason Kim
//CSE670 AU 05
//Assignment 8
class DBnav {
  public static void main (String args[]) {
 BufferedReader buffr;
	  //get sybase driver
	  try {
      SybDriver sybdriver =
      (SybDriver) Class
         . forName("com.sybase.jdbc2.jdbc.SybDriver")
         . newInstance();
sybdriver.setVersion(
     com.sybase.jdbcx.SybDriver.VERSION_5 );
DriverManager.registerDriver(sybdriver);
//get connection
      Connection connection = null;
String server = "database";
String port = "4101";
String database = "c670aa";
String username = args[0];
String password = args[1];
String url =   "jdbc:sybase:Tds:"
             + server + ":"
             + port + "/"
             + database;
connection =
  DriverManager.getConnection(url, username, password);

      Statement stat = connection.createStatement(
     ResultSet.TYPE_SCROLL_SENSITIVE,
     ResultSet.CONCUR_READ_ONLY);
		//set tables up from figure 1.2 pg 7


		//create Student Table
		stat.executeUpdate(
     "CREATE TABLE STUDENT (Name CHAR(10), StudentNumber INT(10), Class INT(10), Major CHAR(10), PRIMARY KEY(StudentNumber))" );
	//insert values into student
		stat.executeUpdate(
     "INSERT INTO STUDENT VALUES ( 'Smith', '17', '1', 'CS')" );
		stat.executeUpdate(
	 "INSERT INTO STUDENT VALUES ( 'Brown', '8', '2', 'CS')");

		//create Course Table
		stat.executeUpdate(
	"CREATE TABLE COURSE (CourseName CHAR(30), CourseNumber VARCHAR(30), CreditHours INT(10), Department CHAR(10), PRIMARY KEY(CourseNumber))");
// insert values into course
		stat.executeUpdate(
	"INSERT INTO COURSE VALUES ( 'Intro to Computer Science', 'CS1310', '4', 'CS' )");
		stat.executeUpdate(
	"INSERT INTO COURSE VALUES ( 'Data Structures', 'CS3320', '4', 'CS' )");
		stat.executeUpdate(
	"INSERT INTO COURSE VALUES ( 'Discrete Mathematics', 'MATH2410', '3', 'MATH' )");
		stat.executeUpdate(
	"INSERT INTO COURSE VALUES ( 'Database', 'CS3380', '3', 'CS' )");

		//create section table
		stat.executeUpdate(
	"CREATE TABLE SECTION (SectionIdentifier INT(10), CourseNumber VARCHAR(30), Semester CHAR(10), Year CHAR(10), Instructor CHAR(20), PRIMARY KEY(SectionIdentifier), FOREIGN KEY(CourseNumber) REFERENCES COURSE(CourseNumber))");
// insert values into section
		stat.executeUpdate(
	"INSERT INTO SECTION VALUES ('85','MATH2410','Fall','98','King')");
		
		stat.executeUpdate(
			"INSERT INTO SECTION VALUES ('92','CS1310','Fall','98','Anderson')");
		
		stat.executeUpdate(
			"INSERT INTO SECTION VALUES ('102','CS3320','Spring','99','Knuth')");
		
		stat.executeUpdate(
			"INSERT INTO SECTION VALUES ('112','MATH2410','Fall','99','Chang')");
		
		stat.executeUpdate(
			"INSERT INTO SECTION VALUES ('119','CS1310','Fall','99','Anderson')");
		
		stat.executeUpdate(
			"INSERT INTO SECTION VALUES ('135','CS3380','Fall','99','Stone')");

		//create table grade_report
		stat.executeUpdate(
	"CREATE TABLE GRADE_REPORT (StudentNumber INT(10), SectionIdentifier INT(10), Grade CHAR(10), FOREIGN KEY(StudentNumber) REFERENCES STUDENT(StudentNumber), FOREIGN KEY(SectionIdentifier) REFERENCES SECTION(SectionIdentifier))");
//insert values into table
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('17','112','B')");
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('17','119','C')");
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('8','85','A')");
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('8','92','A')");
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('8','102','B')");
		stat.executeUpdate(
			"INSERT INTO GRADE_REPORT ('8','135','A')");
//create table Prequisite
		stat.executeUpdate(
	"CREATE TABLE PREREQUISITE (CourseNumber INT(10), PrequisiteNumber VARCHAR(30), FOREIGN KEY(CourseNumber) REFERENCES COURSE(CourseNumber), FOREIGN KEY(PrequisiteNumber) REFERENCES COURSE(CourseNumber))");
//insert values into table
		stat.executeUpdate(
     "INSERT INTO PREREQUISITE VALUES ( 'CS3380', 'CS3320')" );
		stat.executeUpdate(
			"INSERT INTO PREREQUISITE VALUES ( 'CS3380', 'MATH2410')" );
		stat.executeUpdate(
			"INSERT INTO PREREQUISITE VALUES ( 'CS3320', 'CS1310')" );

		  //read student name 
		  // Read a line of text from the user.
		  InputStreamReader isr = new InputStreamReader(System.in);
		  buffr = new BufferedReader(isr);//input from console
		  String inputname = buffr.readLine();

		  //run queries
		ResultSet query =
			stat.executeQuery("SELECT * FROM STUDENT WHERE Name='" + inputname + "'");
		  String snum = query.getString("StudentNumber");
		  stat.executeQuery("SELECT * FROM GRADE_REPORT WHERE StudentNumber='" + snum + "'");
		  String grade;
		  double gpa=0,total=0,numclass=0;
		  while( query.relative( 1 ) ){
  
			  grade = query.getString( "Grade" );
			  if(grade=="A")
			  {
				  total=total+4;
			  }
			  else if(grade=="B")
			  {
				  total=total+3;
			  }
			  else if(grade=="C")
			  {
				  total=total+2;
			  }
			  else if(grade=="D")
			  {
				  total=total+1;
			  }
			  else
				  total=total+0;

			  numclass=numclass+1;
			  }
		
		gpa = total/numclass;

		System.out.println("Student Name: " + inputname + " GPA is: " + gpa);
		stat.close();
      
		connection.close();
    }
    catch (Exception e) { System.out.println( "error " + e ); }
} }
