Copyright © T. H. Merrett COMP 612 Principles of Database Programming Week 1 4 of 4 /* Program using the "makes" and "makptr" files of the Cars database to find */ /* the parent and children of a given node (e.g., "BUICK") */ import java.io.*; public class week1j2 { private static String make="", father="", brother="", son="", kposStr=""; public static void main(String[] args) { int cmpr= 0, indx= 0, ptr= 0; byte fill; try { DataInputStream makptrd = new DataInputStream(new BufferedInputStream( new FileInputStream("/course/cs612/carsdata/makptr"),2389)); int dsize= makptrd.readInt(), psize= makptrd.readInt(); // sizes int[] makptr= new int[psize]; int[] faptr= new int[psize]; int[] brptr= new int[psize]; int[] soptr= new int[psize]; int[] kpos= new int[psize]; for(int enumerate= 0; enumerate<psize; enumerate++) { makptr[enumerate]= makptrd.readInt(); faptr[enumerate]= makptrd.readInt(); brptr[enumerate]= makptrd.readInt(); soptr[enumerate]= makptrd.readInt(); kpos[enumerate]= makptrd.readInt(); } makptrd.close(); RandomAccessFile makesd= new RandomAccessFile("/course/cs612/carsdata/makes", "r"); // :using direct access to makes String findMake= args[0].trim(); // supplied as argument to call // sequential search looking up makptr: could use binary search: for(indx= 0; indx<psize; indx++) { makesd.seek(41*makptr[indx]); make= strRead(makesd, 41, true).trim(); cmpr= findMake.compareTo(make.substring(kpos[indx])); // compare Strings if (cmpr==0) break; // success else if (cmpr<0) {indx= psize; break;} // end unsuccessfully } if (indx==psize) System.out.println(findMake + " not found"); else { ptr= faptr[indx]; if (ptr<0) father= "NO PARENT"; else { makesd.seek(41*makptr[ptr]); father= strRead(makesd,41,true).trim(); } System.out.println(findMake + ": " + make + " " + father); indx= soptr[indx]; // first child if (indx<0) System.out.print(" NO CHILD"); else while(indx>=0) { makesd.seek(41*makptr[indx]); brother= strRead(makesd,41,true).trim(); System.out.print(" " + brother); indx= brptr[indx]; // next child } System.out.println(" "); } } catch(IOException e) { System.out.print("Error: " + e); System.exit(1); } } private static String strRead(DataInput filed, int size, boolean crlf) throws IOException { byte[] record= new byte[size]; filed.readFully(record, 0, size); return bytechars.byte2string(record).substring(0, size - (crlf?1:0)); // if reading whole record, it will include crlf; field will not } } // class week1j2