Additional Practice
Coding challenge 1
You have been given most of the code for all the classes in a program called "Medication". This program stores a list of medicines and their content. The main method provided to you also creates the medicines and their contents. You need to add necessary methods in the server classes, which can then be used in the main class (hint - compare the code with the class template). And you also need to write a method in the main class that writes the stored data in the collection medicines to a file called "medication.txt". The format for the text file should be consistent to the data stored so it can be read back using the same file. You do not need to write the code to read the file.
Hint: All methods may not be included in each of the provided classes. Only data to add items to the collections have been added. Perhaps consider starting there to find out what might be missing if it helps in writing the output to a file.
Content.java
public class Content
{
private String name;
private double dosage;
public Content()
{
name = "Unknown";
dosage = -1;
}
public Content(String name, double dosage)
{
this.name = name;
this.dosage = dosage;
}
public double getDosage()
{
return dosage;
}
public String getName()
{
return name;
}
public void setDosage(double dosage)
{
this.dosage = dosage;
}
public void setName(String name)
{
this.name = name;
}
}
Medication.java
import java.util.ArrayList;
import java.io.*;
public class Medication
{
private ArrayList<Medicine> medicines;
public Medication()
{
medicines = new ArrayList<Medicine>();
}
public Medication(ArrayList<Medicine> medicines)
{
this.medicines = medicines;
}
public ArrayList<Medicine> getMedicines()
{
return medicines;
}
public Medicine getSpecificMedicine(int index)
{
return medicines.get(index);
}
public static void main(String[] args)
{
Medication medication = new Medication();
medication.storeMedicines();
medication.writeToFile("medicine.txt");
}
public void storeMedicines()
{
Medicine medicine = new Medicine();
medicine.setName("Lomotil");
medicine.addContent("Diphenoxylate Hydrochloride", 20);
medicine.addContent("Atropine Suphate", 10);
medicines.add(medicine);
medicine = new Medicine();
medicine.setName("Cenovis Multi Vitamins");
medicine.addContent("Calcium", 80);
medicine.addContent("Zinc", 15);
medicine.addContent("Folic Acid", 0.3);
medicine.addContent("Boron", 1);
medicines.add(medicine);
medicine = new Medicine();
medicine.setName("Mega Zinc 40mg");
medicine.addContent("Zinc Amino Acid Chelate", 200);
medicine.addContent("Pyridoxine Hydrochloride", 20);
medicine.addContent("Betacarotene", 3);
medicines.add(medicine);
}
public void setMedicines(ArrayList<Medicine> medicines)
{
this.medicines = medicines;
}
public void setSpecificMedicine(int index, Medicine medicine)
{
medicines.set(index, medicine);
}
public void writeToFile(String fileName)
{
try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName)))
{
for (Medicine medicine : medicines)
{
writer.write(medicine.toString());
writer.newLine();
}
System.out.println("Successfully wrote " + medicines.size() +
"medicine to " + fileName);
}
catch (IOException e)
{
System.out.println("Error writing to " + fileName + " " + e.getMessage());
}
}
}Medicine.java
import java.util.ArrayList;
public class Medicine
{
private String name;
private ArrayList<Content> contents;
public Medicine()
{
name = "Unknown";
contents = new ArrayList<>();
}
public Medicine(String name, ArrayList<Content> contents)
{
this.name = name;
this.contents = contents;
}
public void addContent(String name, double dosage)
{
contents.add(new Content(name, dosage));
}
public ArrayList<Content> getContents()
{
return contents;
}
public String getName()
{
return name;
}
public Content getSpecificContent(int index)
{
return contents.get(index);
}
public void setContents(ArrayList<Content> contents)
{
this.contents = contents;
}
public void setName(String name)
{
this.name = name;
}
public void setSpecificContent(int index, Content content)
{
contents.set(index, content);
}
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append("Medicine name: ").append(name).append("\n");
sb.append("Medicine contents:\n");
if (contents.isEmpty())
{
sb.append("No contents.\n");
}
else
{
for (int i = 0; i < contents.size(); i++)
{
Content content = contents.get(i);
sb.append(" ").append(i + 1).append(". ");
sb.append(content.getName()).append(": ");
sb.append(content.getDosage()).append(" mg\n");
}
}
return sb.toString();
}
}