0% found this document useful (0 votes)
28 views21 pages

Chapter 26 Answers

Uploaded by

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

Chapter 26 Answers

Uploaded by

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

Chapter 26: File processing and exception

handling: Answers to coursebook


questions and tasks
Task 26.01
Python # sequential file handling Task 26.01
import pickle # this library is required to create
binary files
from datetime import date

MAXCARS = 10

class CarRecord:
def __init__(self):
self.VehicleID = "dummy"
self.Registration = ""
self.DateOfRegistration = date(1990,1,1)
self.EngineSize = 0
self.PurchasePrice = 0.00

def SaveData(Car):
# file channel for car records
CarFile = open('CarFile.DAT','wb') # open file for
binary write
for i in range(MAXCARS + 1): # loop for each array
element
# write a whole record to the binary file
pickle.dump(Car[i], CarFile)
CarFile.close() # close file

def LoadData():
CarFile = open('CarFile.DAT','rb') # open file for
binary read
Car = [] # start with empty list
EoF = False
while not EoF: # check for end of file
try :
Car.append(pickle.load(CarFile)) # append
record from file to end of list
except:
EoF = True
CarFile.close()
return Car

def OutputRecords(Car):
for i in range(1, MAXCARS + 1): # loop for each

© Cambridge University Press 2019


array element
print(Car[i].VehicleID) # show one field

def AddRecords(Car):
i = int(input('Record Number? '))
while i != 0:
Car[i].VehicleID = input('Vehicle ID: ')
Car[i].Registration = input('Registration: ')
Car[i].DateOfregistration = (input('Registration
Date: '));
Car[i].EngineSize = int(input('Engine size: '))
Car[i].PurchasePrice = float(input('Purchase
price: '))
i = int(input('next Record Number? '))
return Car

def main():
Car =[CarRecord() for i in range(MAXCARS + 1)] #
only run this 1st time
SaveData(Car) # only run this first time
Car = LoadData() # from existing file
OutputRecords(Car)
Car = AddRecords(Car)
OutputRecords(Car)
SaveData(Car)

main()
VB.NET ' sequential file handling Task 26.01
Option Explicit On
Imports System.IO

Module Module1
Structure CarRecord
Dim VehicleID As String
Dim Registration As String
Dim DateOfRegistration As Date
Dim EngineSize As Integer
Dim PurchasePrice As Decimal
End Structure

Const MAXCARS = 10
Dim CarFileWriter As BinaryWriter
Dim CarFileReader As BinaryReader
Dim CarFile As FileStream
Dim Car(MAXCARS) As CarRecord ' declare an array of
CarRecord type

Sub SaveData()
'link file to filename
CarFile = New FileStream("CarFile.DAT",
FileMode.Create)
' create a new file and open it for writing
CarFileWriter = New BinaryWriter(CarFile)
For i = 0 To MAXCARS ' loop for each array element

© Cambridge University Press 2019


CarFileWriter.Write(Car(i).VehicleID) ' write a
field to the binary file
CarFileWriter.Write(Car(i).Registration)
CarFileWriter.Write(Car(i).DateOfRegistration)
CarFileWriter.Write(Car(i).EngineSize)
CarFileWriter.Write(Car(i).PurchasePrice)
Next
CarFileWriter.Close() 'close file channel
CarFile.Close()
End Sub

Sub LoadData()
Dim i As Integer
CarFile = New FileStream("CarFile.DAT",
FileMode.Open) 'link to filename
' create a new file and open it for reading
CarFileReader = New BinaryReader(CarFile)
i = 0
' loop until end of binary file reached
Do While CarFile.Position < CarFile.Length
' read fields from the binary file
Car(i).VehicleID = CarFileReader.ReadString()
Car(i).Registration = CarFileReader.ReadString()
Car(i).DateOfRegistration =
CarFileReader.ReadString()
Car(i).EngineSize = CarFileReader.ReadInt32()
Car(i).PurchasePrice =
CarFileReader.ReadDecimal()
i = i + 1
Loop
CarFileReader.Close() 'close file channel
CarFile.Close()
End Sub

Sub OutputRecords()
For i = 1 To MAXCARS
Console.WriteLine("Vehicle ID: " &
Car(i).VehicleID)
Console.WriteLine("Registration: " &
Car(i).Registration)
Console.WriteLine("Registration Date: " &
Car(i).DateOfRegistration)
Console.WriteLine("Engine Size: " &
Car(i).EngineSize)
Console.WriteLine("Purchase Price: " &
Car(i).PurchasePrice)
Next
End Sub

Sub InitialiseArray()
For i = 0 To MAXCARS
Car(i) = New CarRecord
Car(i).VehicleID = "dummy"
Car(i).Registration = "X"

© Cambridge University Press 2019


Car(i).DateOfRegistration = #01/01/2010#
Car(i).EngineSize = 0
Car(i).PurchasePrice = 0.00
Next
End Sub

Sub AddRecords()
Dim i As Integer
Console.Write("Record number? ")
i = Console.ReadLine()
Do While i <> 0
Console.Write("Vehicle ID: ")
Car(i).VehicleID = Console.ReadLine()
Console.Write("Registration: ")
Car(i).Registration = Console.ReadLine()
Console.Write("Registration Date: ")
Car(i).DateOfRegistration = Console.ReadLine()
Console.Write("Engine Size: ")
Car(i).EngineSize = Console.ReadLine()
Console.Write("Purchase Price: ")
Car(i).PurchasePrice = Console.ReadLine()
Console.Write("next Record Number: ") : i =
Console.ReadLine()
Loop
End Sub

Sub Main()
InitialiseArray()
LoadData()
OutputRecords()
AddRecords()
OutputRecords()
SaveData()
Console.ReadLine()
End Sub

End Module

Java // sequential file handling Task 26.01


package main;
import java.util.Scanner;
import java.io.*;

public class Main


{
static Scanner console = new Scanner(System.in);
static final int MAXCARS = 10;
static class CarRecord
{
String vehicleID;
String registration;
String dateOfRegistration;
int engineSize;
double purchasePrice;

© Cambridge University Press 2019


public CarRecord()
{
vehicleID = "dummy";
registration = "";
dateOfRegistration = "01/01/2010";
engineSize = 0;
purchasePrice = 0.00;
}
}

static CarRecord[] Car = new CarRecord[MAXCARS + 1];

static void initialiseArray()


{for (int index = 0; index <= MAXCARS; index ++)
{
Car[index] = new CarRecord();
}
}

static void saveData()


{
String fileName = "CarFile.DAT";
try
{
FileOutputStream fos = new
FileOutputStream(fileName);
ObjectOutputStream oos = new
ObjectOutputStream(fos);
for (int index = 0; index <= MAXCARS; index++)
{
oos.writeObject(Car[index].vehicleID);
oos.writeObject(Car[index].registration);
oos.writeObject(Car[index].engineSize);

oos.writeObject(Car[index].dateOfRegistration);
oos.writeObject(Car[index].purchasePrice);
}
oos.close();
}
catch (EOFException x)
{
System.out.println("End of file reached");
}
catch (IOException x)
{
System.out.println("This is the error: " + x);
}
}

static void loadData()


{
String fileName = "CarFile.DAT";
try

© Cambridge University Press 2019


{
//Read array from file.
FileInputStream fis = new
FileInputStream(fileName);
ObjectInputStream ois = new
ObjectInputStream(fis);
int i = 0;
while (i <= MAXCARS)
{
Car[i].vehicleID = (String)
ois.readObject(); // write field to array record
Car[i].registration= (String)
ois.readObject();
Car[i].engineSize = (int) ois.readObject();
Car[i].dateOfRegistration = (String)
ois.readObject();
Car[i].purchasePrice = (double)
ois.readObject();
i += 1;
}
}
catch (EOFException x)
{
System.out.println("End of File reached" + x);
}
catch (Exception x)
{
System.out.println("exception: " + x);
}

static void addRecords()


{
System.out.print("Record Number? ");
int i = console.nextInt();
while (i != 0)
{
System.out.print("Vehicle ID: ");
Car[i].vehicleID = console.next();
System.out.print("Registration: ");
Car[i].registration = console.next();
System.out.print("Registration Date: ");
Car[i].dateOfRegistration = console.next();
System.out.print("Engine size: ");
Car[i].engineSize = console.nextInt();
System.out.print("Purchase price: ");
Car[i].purchasePrice =
Double.valueOf(console.next());
System.out.print("Record Number? ");
i = console.nextInt();
}
}

© Cambridge University Press 2019


static void outputRecords()
{
for (int index = 0; index <= MAXCARS; index++)
{
System.out.println(Car[index].vehicleID); //
show one field
}
}

public static void main(String[] args)


{
initialiseArray();

//saveData(); // only run this first time through

loadData(); // run the remaining lines


subsequently
outputRecords();
addRecords();
outputRecords();
saveData();
}
}

Task 26.02
Python # random access file handling Task 26.02
# does not take into account collisions
# need to validate registration so it starts with an
uppercase letter

import pickle # this library is required to create


binary files

RECORDSIZE = 70 # 20 + 10 + 10 + 4 + 8
MAXCARS = 100

class CarRecord:
def __init__(self):
VehicleID = "dummy"
VehicleID = VehicleID.ljust(20)
self.VehicleID = VehicleID.encode('utf-8')
Registration = "X"
Registration = Registration.ljust(10)
self.Registration = Registration.encode('utf-8')
DateOfRegistration = "01/01/2010"
DateOfRegistration =
DateOfRegistration.ljust(10)
self.DateOfRegistration =
DateOfRegistration.encode('utf-8')
self.EngineSize = 0

© Cambridge University Press 2019


self.PurchasePrice = 0.0

def InitialiseFile():
CarFile = open('CarFileRandom.DAT','wb') # file
for car records
for i in range(MAXCARS): # loop for each dummy
record
NewCar = CarRecord()
Address = i * RECORDSIZE + 1
CarFile.seek(Address)
# write a whole record to the binary file
pickle.dump(NewCar, CarFile)
CarFile.close() # close file

def InputNewRecordData():
ThisCar = CarRecord()
VehicleID = input('Vehicle ID: ')
VehicleID = VehicleID.ljust(20)
ThisCar.VehicleID = VehicleID.encode('utf-8')
Registration = input('Registration: ')
Registration = Registration.ljust(10)
ThisCar.Registration = Registration.encode('utf-8')
DateOfRegistration = (input('Registration Date: '));
DateOfRegistration = DateOfRegistration.ljust(10)
ThisCar.DateOfRegistration =
DateOfRegistration.encode('utf-8')
ThisCar.EngineSize = int(input('Engine size: '))
ThisCar.PurchasePrice = float(input('Purchase
price: '))
return ThisCar

def Hash(reg):
result = (ord(reg[0]) - 65) * RECORDSIZE + 1
print('Hashed to ',result)
return result

def SaveToFile(ThisCar, CarFile):


Address = Hash(ThisCar.Registration.decode('utf-
8'))
CarFile.seek(Address)
pickle.dump(ThisCar, CarFile)# write a whole
record to the binary file

def OpenFileForUpdate():
CarFile = open('CarFileRandom.DAT','rb+') # open
file for update
return CarFile

def FindRecord(Reg, CarFile):


Address = Hash(Reg)
CarFile.seek(Address)
ThisCar = pickle.load(CarFile) # load record from
file

© Cambridge University Press 2019


Registration = ThisCar.Registration.decode('utf-8')
Reg = Reg.ljust(10)
if Reg != Registration:
print("Record not found")
else:
OutputData(ThisCar)
return ThisCar

def OutputData(ThisCar):
print(ThisCar.VehicleID.decode('utf-8')) # write
one field
print(ThisCar.Registration.decode('utf-8'))
print(ThisCar.DateOfRegistration.decode('utf-8'))
print(ThisCar.EngineSize)
print(ThisCar.PurchasePrice)

def main():
InitialiseFile() # only run this procedure the
first time
ThisCar = CarRecord()
CarFile = OpenFileForUpdate()
# add records
Answer = input('add a record? (Y/N) ')
while Answer == 'Y':
ThisCar = CarRecord()
ThisCar = InputNewRecordData()
SaveToFile(ThisCar, CarFile)
Answer = input('add a record? (Y/N) ')

# find records
Answer = input('find a record? (Y/N) ')
while Answer == 'Y':
Reg = input('Give vehicle registration: ')
ThisCar = FindRecord(Reg, CarFile)
Answer = input('find a record? (Y/N) ')
CarFile.close()

main()
VB.NET ' random access file handling Task 26.02
Option Explicit On
Imports System.IO

Module Module1
Structure CarRecord
<VBFixedString(20)> Dim VehicleID As String
<VBFixedString(10)> Dim Registration As String
Dim DateOfRegistration As Date
Dim EngineSize As Integer
Dim PurchasePrice As Decimal
End Structure

Const RecordSize = 88 ' 40 + 20 + 8 + 4 + 16


Const MAXCARS = 100

© Cambridge University Press 2019


Dim ThisCar As CarRecord ' declare an array of
CarRecord type

Sub InitialiseFile()
' set up a dummy record and store in each record
position in file
ThisCar.VehicleID = "dummy"
ThisCar.Registration = "X"
ThisCar.DateOfRegistration = #1/1/1900#
ThisCar.EngineSize = 0
ThisCar.PurchasePrice = 0.0
For i = 1 To MAXCARS ' loop for each array
element
FilePut(1, ThisCar, i)
Next
End Sub

Sub InputNewRecordData()
Console.Write("Vehicle ID: ")
ThisCar.VehicleID = Console.ReadLine()
Console.Write("Registration: ")
ThisCar.Registration = Console.ReadLine()
Console.Write("Registration Date: ")
ThisCar.DateOfRegistration = Console.ReadLine()
Console.Write("Engine Size: ")
ThisCar.EngineSize = Console.ReadLine()
Console.Write("Purchase Price: ")
ThisCar.PurchasePrice = Console.ReadLine()
End Sub

Function Hash(r) As Integer


Dim Position As Integer
Position = Asc(r(1))
Return Position
End Function

Sub SaveToFile()
Dim Position As Integer
Position = Hash(ThisCar.Registration)
FilePut(1, ThisCar, Position)
End Sub

Sub OpenFileForUpdate()
'link the file to the filename
FileOpen(1, "CarFileRandom.DAT", OpenMode.Random,
, , RecordSize)
End Sub

Sub FindRecord(reg)
Dim Position As Integer
Position = Hash(reg)
FileGet(1, ThisCar, Position)
If reg <> ThisCar.Registration.TrimEnd Then
Console.WriteLine("Record not found")

© Cambridge University Press 2019


Else
OutputData()
End If
End Sub

Sub OutputData()
Console.WriteLine("Vehicle ID: " &
ThisCar.VehicleID)
Console.WriteLine("Registration: " &
ThisCar.Registration)
Console.WriteLine("Registration Date: " &
ThisCar.DateOfRegistration)
Console.WriteLine("Engine Size: " &
ThisCar.EngineSize)
Console.WriteLine("Purchase Price: " &
ThisCar.PurchasePrice)

End Sub

Sub Main()
Dim Answer, Reg As String
OpenFileForUpdate()
'InitialiseFile() ' only use this first time
round
'add records
Console.Write("add a record? (Y/N) ")
Answer = Console.ReadLine()
Do While Answer = "Y"
InputNewRecordData()
SaveToFile()
Console.Write("add a record: (Y/N) ")
Answer = Console.ReadLine()
Loop
' find records
Console.Write("find a record? (Y/N) ")
Answer = Console.ReadLine()
Do While Answer = "Y"
Console.Write("Give vehicle registration: ")
Reg = Console.ReadLine()
FindRecord(Reg)
Console.Write("find a record: (Y/N) ")
Answer = Console.ReadLine()
Loop
FileClose(1)
Console.ReadLine()
End Sub

End Module

Java // random access file handling Task 26.02


// not catered for collisions
package main;
import java.util.Scanner;

© Cambridge University Press 2019


import java.io.*;

public class Main


{
static Scanner console = new Scanner(System.in);
static final int RECORDSIZE = 50;
static final int MAXCARS = 100;

static class CarRecord


{
String vehicleID;
String registration;
String dateOfRegistration;
int engineSize;
double purchasePrice;

public CarRecord()
{
vehicleID = "dummy";
registration = "X";
dateOfRegistration = "01/01/1990";
engineSize = 0;
purchasePrice = 0.00;
}
}

static void initialiseFile()


{
CarRecord thisCar;

try // set up a file with MAXCARS dummy records


{
RandomAccessFile writer = new
RandomAccessFile("CarsRandom.DAT", "rw");
for (int i = 0; i < MAXCARS; i++) // loop
for each array element
{
thisCar = new CarRecord();
writer.seek(i * RECORDSIZE + 1);
writer.writeUTF(thisCar.vehicleID);
writer.writeUTF(thisCar.registration);

writer.writeUTF(thisCar.dateOfRegistration);
writer.writeInt(thisCar.engineSize);

writer.writeDouble(thisCar.purchasePrice);
}
writer.close();
}
catch (IOException x)
{

}
}

© Cambridge University Press 2019


static CarRecord inputNewRecordData()
{
CarRecord thisCar = new CarRecord();
System.out.print("Vehicle ID: ");
thisCar.vehicleID = console.next();
System.out.print("Registration: ");
thisCar.registration = console.next();
System.out.print("Registration Date: ");
thisCar.dateOfRegistration = console.next();
System.out.print("Engine size: ");
thisCar.engineSize = console.nextInt();
System.out.print("Purchase price: ");
thisCar.purchasePrice =
Double.valueOf(console.next());
return thisCar;
}

static int hash(String reg)


{
int result = ((int) reg.charAt(0) - 65) *
RECORDSIZE + 1;
return result;
}

static void saveToFile(CarRecord thisCar,


RandomAccessFile writer)
{
try
{
int address = hash(thisCar.registration);
writer.seek(address);
writer.writeUTF(thisCar.vehicleID);
writer.writeUTF(thisCar.registration);
writer.writeUTF(thisCar.dateOfRegistration);
writer.writeInt(thisCar.engineSize);
writer.writeDouble(thisCar.purchasePrice);
}
catch (IOException x)
{

}
}

static void findRecord(String reg,


RandomAccessFile reader)
{
CarRecord thisCar = new CarRecord();
try
{
int address = hash(reg);
reader.seek(address);
thisCar.vehicleID = reader.readUTF();
thisCar.registration = reader.readUTF();

© Cambridge University Press 2019


thisCar.dateOfRegistration =
reader.readUTF();
thisCar.engineSize = reader.readInt();
thisCar.purchasePrice = reader.readDouble();
if (reg.equals(thisCar.registration))
{
outputData(thisCar);
}
else
{
System.out.println("record not found");
}
}
catch (IOException x)
{

}
}

static void outputData(CarRecord car)


{
System.out.println("Vehicle ID: " +
car.vehicleID); // show 1 field
System.out.println("Registration: " +
car.registration);
System.out.println("Date of registration: " +
car.dateOfRegistration);
System.out.println("Engine size: " +
car.engineSize);
System.out.println("Purchase price: " +
car.purchasePrice);

public static void main(String[] args)


{
try
{
//initialiseFile(); // only run this first
time through
RandomAccessFile writer = new
RandomAccessFile("CarsRandom.DAT", "rw");
RandomAccessFile reader = new
RandomAccessFile("CarsRandom.DAT", "r");
// add records
System.out.print("add a record? (Y/N) ");
String answer = console.next();
while (answer.equals("Y"))
{
CarRecord car = inputNewRecordData();
saveToFile(car, writer);
System.out.print("add a record? (Y/N) ");
answer = console.next();
}

© Cambridge University Press 2019


// find records
System.out.print("find a record? (Y/N) ");
answer = console.next();
while (answer.equals("Y"))
{
System.out.print("Give vehicle
registration ");
String reg = console.next();
findRecord(reg, reader);
System.out.print("find a record? (Y/N) ");
answer = console.next();
}
reader.close();
writer.close();
}
catch (IOException x)
{

}
}
}

Task 26.03
Python EoF = False
while not EoF: # check for end of file
try :
Car.append(pickle.load(CarFile))
except:
EoF = True

VB.NET Sub SaveToFile()


Dim Position As Integer
Position = Hash(ThisCar.Registration)
Try
FilePut(1, ThisCar, Position)
Catch ex As Exception
Console.WriteLine("File not open")
End Try
End Sub

Java boolean eOF = false;


while (eOF == false)
{
try
{
Car[i].vehicleID = (String)
ois.readObject();
Car[i].registration= (String)
ois.readObject();
Car[i].engineSize = (int) ois.readObject();
Car[i].dateOfRegistration = (String)
ois.readObject();

© Cambridge University Press 2019


Car[i].purchasePrice = (double)
ois.readObject();
i += 1;
}
catch (EOFException x)
{
System.out.println("End of File reached" );
eOF = true;
}
}

Exam-style Questions
1 a i Python class CustomerRecord :
def __init__(self) :
self.CustomerID = 0
self.CustomerName = ''
self.TelNumber = ''
self.TotalOrders = 0.00

VB.NET Structure CustomerRecord


Dim CustomerID As Integer
Dim CustomerName As String
Dim TelNumber As String
Dim TotalOrders As Decimal
End Structure
Java static class CustomerRecord
{
int customerID;
String customerName;
String telNumber;
double totalOrders;

public CustomerRecord()
{
customerID = 0;
customerName = "";
telNumber = "";
totalOrders = 0.00;
}
}

Marking guidance:
1 mark for correct record heading
1 mark for each correct field with suitable data type/initial value
1 mark for correct end to record declaration

© Cambridge University Press 2019


ii Python CustomerData = [CustomerRecord() for i in
range(1000)]

VB.NET Dim CustomerData(999) As CustomerRecord

Java CustomerRecord[] CustomerData = new


CustomerRecord[1000];

Marking guidance:
1 mark for correct declaration of array (name and size)
1 mark for correct data type
b i Python def Hash(CustomerID) :
Address = CustomerID % 1000
return(Address)

VB.NET Function Hash(CustomerID) As Integer


Dim Address As Integer
Address = CustomerID Mod 1000
Return Address
End Function

Java static int hash(int customerID)


{
int address = customerID % 1000;
return address;
}

Marking guidance:
1 mark for correct function header including parameter
1 mark for correct calculation of Address
1 mark for returning Address

ii Python def AddRecord(CustomerData, Customer)


Address = Hash(Customer.CustomerID)
while CustomerData(Address).CustomerID != 0:
Address += 1
if Address = 1000:
Address = 0
CustomerData[Address] = Customer

VB.NET Sub AddRecord(Customer As CustomerRecord)


Dim Address As Integer
Address = Hash(Customer.CustomerID)
Do While CustomerData(Address).CustomerID <> 0
Address += 1
If Address = 1000 Then Address = 0
Loop
CustomerData(Address) = Customer
End Sub

© Cambridge University Press 2019


Java static void addRecord(CustomerRecord Customer)
{
int address = hash(Customer.customerID);
while (CustomerData[address].customerID <> 0)
{
address += 1;
if (address == 1000)
{
address = 0;
}
}
customerData[address] = Customer;
}

Marking guidance:
1 mark for correct procedure header including parameter
1 mark for correct call of Hash function with correct parameter
1 mark for a WHILE loop
1 mark for correct Boolean expression
1 mark for within WHILE loop checking if wrap-round required
1 mark for adjusting address when wrap-round required
1 mark for adding customer record in correct location in array after the loop

iii Python def FindRecord(CustomerData, CustomerID)


Address = Hash(CustomerID)
while CustomerData[Address].CustomerID !=
CustomerID
Address += 1
if Address = 1000:
Address = 0
return (Address)

VB.NET Function FindRecord(CutomerID) As Integer


Dim Address As Integer
Address = Hash(CustomerID)
Do While CustomerData(Address).CustomerID <>
CustomerID
Address += 1
If Address = 1000 Then Address = 0
Loop
Return Address
End Function

Java static int findRecord(int customerID)


{
int address = hash(customerID);
while (CustomerData[address].customerID <>
customerID)
{

© Cambridge University Press 2019


address += 1;
if (address == 1000)
{
address = 0;
}
}
return address;
}

Marking guidance:
1 mark for correct function header including parameter
1 mark for correct call of Hash function with correct parameter
1 mark for a WHILE loop
1 mark for correct Boolean expression
1 mark for within WHILE loop checking if wrap-round required
1 mark for adjusting address when wrap-round required
1 mark for returning record address
c Python import pickle
def SaveData(CustomerData) :
CustomerFile = open('CustomerData.DAT','wb')
for i in range(1000) :
pickle.dump(CustomerData[i], CustomerFile)
CustomerFile.close()

VB.NET Sub SaveData()


CustomerFile = New
IO.FileStream("CustomerData.DAT", IO.FileMode.Create)
' create a new file and open it for writing
CustomerFileWriter = New
IO.BinaryWriter(CustomerFile)
For i = 0 To 999 ' loop for each array element
' write fields to the binary file

CustomerFileWriter.Write(CustomerData(i).CustomerID)

CustomerFileWriter.Write(CustomerData(i).CustomerName)

CustomerFileWriter.Write(CustomerData(i).TelNumber)

CustomerFileWriter.Write(CustomerData(i).TotalOrders)
Next
CustomerFileWriter.Close() 'close file channel
CustomerFile.Close()
End Sub

Java import java.io.*;


static void saveData()
{

© Cambridge University Press 2019


try
{
FileOutputStream fos = new
FileOutputStream("CustomerData.DAT");
ObjectOutputStream oos = new
ObjectOutputStream(fos);
for (int i = 0; i < 1000; i++)
{
oos.writeObject(CustomerData [i].customerID);
oos.writeObject(CustomerData
[i].customerName);
oos.writeObject(CustomerData [i].telNumber);
oos.writeObject(CustomerData
[i].totalOrders);
}
oos.close();
}
catch (Exception x)
{

}
}

Marking guidance:
1 mark for correct procedure header
1 mark for creating a binary file
1 mark for opening file for writing
1 mark for loop to work with each element
1 mark for writing record (or each field of the record) to the file within the loop
1 mark for closing the file

d Marking guidance:
1 mark per point:
 Set up fixed-length dummy records
 save dummy records to a random file
 write a hashing function that gets to the beginning of the required record
 AddRecord needs to update the correct record in the random file
 FindRecord needs to read the random file
 Don’t need the SaveData procedure at the end of program execution.

© Cambridge University Press 2019


2 Python def OpenFile():
FileName = input("Which file do you want to use? ")
try:
Channel = open(FileName, 'rb+')
except:
print("This file does not exist")
VB.NET Sub OpenFile()
Dim FileName As String
Console.Write("Which file do you want to use? ")
FileName = Console.ReadLine()
Try
FileOpen(1, FileName, OpenMode.Random)
Catch ex As Exception
Console.WriteLine("This file does not exist")
End Try
End Sub
Java static Scanner console = new Scanner(System.in);

static void openFile()


{
System.out.print("Which file do you want to use? ");
String fileName = console.next();
try
{
FileInputStream fis = new
FileInputStream(fileName);
ObjectInputStream ois = new
ObjectInputStream(fis);
}
catch (Exception x)
{
System.out.println("This file does not
exist");
}
}

Marking guidance:
1 mark for output asking user to enter file name and input statement assigning file name
1 mark for adding TRY keyword in correct place
1 mark for opening file
1 mark for CATCH/EXCEPT in correct place
1 mark for suitable error message within CATCH/EXCEPT section of the code

© Cambridge University Press 2019

You might also like