Stephanie Lukin 1 Stephanie Lukin Final Phase Implementation Instrument Parts I began in Access by selecting the Create ribbon, then the Table Design button. I named this table Instrument Parts and entered the field names, data types, and data definitions. I selected File # and Instrument as the primary key. Next I opened the Relationships window under the Database Tools ribbon. This is where I established the foreign key reference between this new table and the existing music table. I created a one to many relationship, where a single instance of the octavo exists in Music Library but multiple instrument parts can exist.
Stephanie Lukin 2 I then populated my Instrument Parts table: To create queries, I opened the Query Design button in the Create ribbon. I used the query wizard (below) for the first query to see the format of the SQL Access uses. For the remainder of the queries, I typed SQL code. Q1. Show the entire music library with instrument parts. Q2. Show all the flute music Q3. Show parts for Abide, O Spirit of Life
Stephanie Lukin 3 Barcode Scanner I began by creating the Rehearsal Dates table and data definition, making pmonth, pdate, and pyear the primary key. I then populated the table. Next, I created the Attends table and data definition. For this table, mo, date, yr, and CID are the primary key.
Stephanie Lukin 4 I populated the Attends table. I opened the Relationships view and set the foreign key references from mo, date, yr in Attends to pmonth, pdate, and pyear in Rehearsal Dates as well as CID in Attends to ID in Choir.
Stephanie Lukin 5 Q4. Show all practices and members who attended Q5. Show all rehearsals Stephanie Lukin has attended Q6. Show all members who attended on 12/11/2010
Stephanie Lukin 6 I then implemented an interactive form so that it easy to enter in information without tedious repetition or transfer of data via excel documents. Furthermore, the user can use the barcode scanner to enter in the choir ID number automatically and directly into the database. I began with the Form Wizard button in the Create ribbon This walked me through a series of steps helping me create the form.
Stephanie Lukin 7 The user can now enter information about a rehearsal date in one location, then scan the barcodes which will appear in the CID box. This information will be directly updated in the respective tables.
Q7. Show members who attended before 2010. Stephanie Lukin 8
Stephanie Lukin 9 Birthday Calendar This portion of the project called for a calendar to display the names of the choir members who have a birthday in the corresponding box on the calendar. For this, I created a query asking for all the birthdays of the choir members Q8. Show all birthdays of choir members
Stephanie Lukin 10 I exported the query results to a text file delimited by commas. I then built a simple display using the Processing programming language environment. I was not able to make it a true GUI concerning the data input, but it is clearly explained at the top of the Processing file what to change and what parameters to use.
Q9. Show all members with birthday in July Stephanie Lukin 11
Q10. Show all birthdays in August Stephanie Lukin 12
Stephanie Lukin 13 monthly_calendar.pde // the calendar month [0-12] int currmonth = 7; // number of days in the month [28-31] int numdays = 31; // day of the week the month begins // [Sun, Mon, Tues, Wed, Thurs, Fri, Sat] String startday = "Wed"; //.txt file from Birthday_export query String file = "Birthday_export.txt"; // font size int fontsize = 15; // height and width of the date boxes int HEIGHT = 180, WIDTH = 200; int topspace=50; //////////////////////////////////////////////////////////////// // no need to look below here :) //////////////////////////////////////////////////////////////// PFont fonta; GregorianCalendar gcal = new GregorianCalendar(); String[] dates = new String[31]; int startdate; boolean startdraw = false; ArrayList[] months = new ArrayList[12]; String[] week = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thrusday", "Friday", "Saturday"; String[] mon = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"; BufferedReader reader; Scanner scan; String line; void setup() { size(7*width, 5*HEIGHT+topspace); background(255); fonta = loadfont("ziggurat-htf-black-32.vlw"); textfont(fonta, fontsize); // determines the index of the first day of the month if (startday.equals("sun")) startdate = 0; else if (startday.equals("mon")) startdate = 1; else if (startday.equals("tues")) startdate = 2; else if (startday.equals("wed")) startdate = 3; else if (startday.equals("thurs")) startdate = 4; else if (startday.equals("fri")) startdate = 5; else if (startday.equals("sat")) startdate = 6; else startdate = -1;
Stephanie Lukin 14 // opens the birthday file to read reader = createreader(file); initmonths(); parsefile(); drawheader(); drawframe(); /* * Instantiates the ArrayLists to store the choir member's birthdays */ void initmonths() { for (int i = 0; i < months.length; i++) { months[i] = new ArrayList(); /* * Examines the text file of birthdays and separates the members into ArrayLists by birth month */ void parsefile() { try { // while not eof while (reader.ready()) { line = reader.readline(); if (line!= null) { String[] person = split(line, ","); // determines the month of birth if (!person[0].equals("")) { int mo = Integer.parseInt(person[0]); // puts the remainder of the line into the corresponding month array months[mo-1].add(person[1] + "," + person[2] + "," + person[3]); catch (IOException e){line = null; void drawheader() { fill(0); text(mon[currmonth-1], width/2, topspace/2); for (int i = 0; i < 7; i++) { text(week[i], WIDTH*i+fontSize/2, topspace-fontsize/2); /* * Draws the date boxes as well as the members born on that day */ void drawframe() { for (int i = 0; i < 5; i++) { for (int j = 0; j < 7; j++) { int currdate = (7*i+j)-startDate+1; // deterrmines which day of the week to start drawing boxes if (i >= 0 && j >= startdate) startdraw=true; // don't exceed the number of days in the month if (currdate > numdays) startdraw = false; if (startdraw) {
Stephanie Lukin 15 // draw the date box fill(255); rect(width*j, HEIGHT*i+topspace, WIDTH, HEIGHT); // write the date fill(0); text(currdate, WIDTH*j+fontSize/2, HEIGHT*i+topspace+fontSize/2); int count = 0; // search months for currdate ArrayList mo = months[currmonth-1]; for (int k = 0; k < mo.size(); k++) { // finds the next person who has a birthday in current month String person = mo.get(k).tostring(); // determines the date int d = Integer.parseInt(person.substring(0, person.indexof(","))); // if the date is the date of the box being drawn if (d == currdate) { // parses the name of the person person = person.substring(person.indexof(",")+2, person.length()-1); String last = person.substring(person.indexof(",")+2, person.length()); String first = person.substring(0, person.indexof(",")-1); // increases the number of people on this day to display text without overlap count++; text(first + " " + last, WIDTH*j+fontSize/2, HEIGHT*i+topspace+(count+1)*fontSize);
Stephanie Lukin 16 User Manual Instrument Parts 1. Open Instrument Parts table 2. Add the file # corresponding to the octavo, the instrument, and number of parts 3. View or modify the Octavo Instrument Parts query Barcode Scanner 1. Open Barcode scanner form form 2. Click New (blank) record button at botton of screen 3. Enter the current month, date, year, any notes 4. Click in the CID box and scan barcodes 5. Information is updates in Rehearsal Dates and Attends tables 6. Modify Choir rehearsals query to get specifics Birthdays 1. Open Birthday_export query 2. Export to.txt file in G:\dbtest\monthly_calendar 3. Open Processing C:\Documents and Settings\minstu\My Documents\processing 1.2.1\processing 1.2.1 4. Open monthly_calendar.pde in G:\dbtest\monthly_calendar 5. Make changes to following fields a. currmonth [1 12] b. numdays [29 31] c. startday [Sun, Mon, Tues, Wed, Thurs, Fri, Sat] 6. Click the triangle run button
Stephanie Lukin 17 11 4 2010: Met with George Miller, music ministry director, to discuss the project. Redirected me to music ministry interns to deal directly with the database and their needs. Met with Sean Gallagher, music ministry intern, to discuss these needs in detail. 11 12 2010: Met with client Sean Gallagher to discuss the requirements and gained approval. 12 10 2010: Met with client Sean and discussed needs and functionality to ensure I was on the right track 12 14 2010: Demoed barcode scanner and instrument library for client Sean Gallagher and left this instruction sheet and gained approval for demos. 12 14 2010: Demoed birthday calendar and others for client Michael Powell, music ministry intern and gained approval for remaining demos. The DB designed by has been demoed for me. I find that it (does/does not) meet my needs. Comments: signed printed name and position