I2P Design Thinking Programming Challenge

As one of the most prestigious schools in Asia, Hong Kong International School offers a wide variety of extracurricular clubs for students to join in. We want to help students in HKIS access all these clubs easily through an online platform, where they can sign up, read about the clubs, and contact club leaders. This online platform will also provide a quiz that can help students identify what their passion is, conclusively suggesting some related clubs for them.

The first step that we took was to create a questionnaire and survey to see what our customers (students) need. Click here to see the results.

Then we created a list of equipment we needed for this project. This was the list we created:

  • List of all extracurricular clubs, excluding sport teams, the Senate, and any other organizations that should not be accessible simply through signing up.
  • Name and student number of club leaders in these clubs
  • Description of each of these clubs, written by the club leaders
  • Meeting times for each of these clubs and where they meet
  • Any prerequisites or requirements needed to fulfil (such as service credits)
  • Name of teacher sponsor of each club
  • Any posters/pictures of what the club does
  • Age restrictions (if any) of these clubs
  • Equipment required for these clubs
  • Requirements for signups (example: name, student number, grade) If already have a form, attach please

Next, we planned out our algorithm with a flow chart and the pseudo code.

I2P Discover Your Passion Quiz Flow Chart

After many rounds of trial and error, we finally succeeded in making in quiz. This is the final algorithm for the quiz.

function returnLastEntry(){// directing code to specific cell
 var numberOfQ = 10;
 var ss = SpreadsheetApp.openById("1OG1z7x3mZsEzAaH8EJo-4DKq-UMY4wZHzYRfOC6rZqs");
 var sheet = ss.getSheetByName("response1");
 var lastRow = sheet.getLastRow(); //get the last row, e.g. latest response
 var answerSet = sheet.getRange(lastRow,2,1,2+numberOfQ);
 processEntry(answerSet.getValues());
 }
function processEntry(lastEntry){
 //declare the values as local variables in the function
 var scoreLead = 0;
 var scoreService = 0;
 var scoreSTEM = 0;
 var scoreArts = 0;
 var scoreHum = 0;
 var scoreSports = 0;
 var scoreDebate = 0;
 var scoreOther = 0;
//read the email address
 var emailAdd = lastEntry[0][0];
 Logger.log(emailAdd);
 //detects the first character of the cell
 for (var i = 2; i<lastEntry[0].length; i++)
 {
 for (var choice = 1; choice <=10; choice++)
 {
 if (lastEntry[0][i].indexOf(""+choice)!=-1){//adds one point every time it sees the specific number as the first character
 Logger.log("Choice "+choice+" detected");
 if (choice == "1"){
 scoreLead = scoreLead + 1;
 Logger.log(scoreLead);}
 if (choice == "2"){
 scoreService = scoreService + 1;
 Logger.log(scoreService);}
 if (choice == "3"){
 scoreSTEM = scoreSTEM + 1;
 Logger.log(scoreSTEM);}
 if (choice == "4"){
 scoreArts = scoreArts + 1;
 Logger.log(scoreArts);}
 if (choice == "5"){
 scoreHum = scoreHum + 1;
 Logger.log(scoreHum);}
 if (choice == "6"){
 scoreSports = scoreSports + 1;
 Logger.log(scoreSports);}
 if (choice == "7"){
 scoreDebate = scoreDebate + 1;
 Logger.log(scoreDebate);}
 if (choice == "8"){
 scoreOther = scoreOther + 1;
 Logger.log(scoreOther);}
 }
 }
 }
 var scores = [scoreLead, scoreService, scoreSTEM, scoreArts, scoreHum, scoreSports, scoreDebate, scoreOther];
 var keys = Object.keys(scores);
 var max = keys[0];
 for (var i = 1, n = keys.length; i < n; ++i) {
 var k = keys[i];
 if (scores[k] > scores[max]) {
 max = k;//filters out the highest score and identifies which variable has the highest score
var ss = SpreadsheetApp.openById("1OG1z7x3mZsEzAaH8EJo-4DKq-UMY4wZHzYRfOC6rZqs");
 var sheet = ss.getSheetByName("response1");
 var lastRow = sheet.getLastRow();
 var name = sheet.getRange(lastRow,3,1,1);
 var suggestSheet = ss.getSheetByName("response2");
 var suggest0 = suggestSheet.getRange("A1");//referring to specific cells on another sheet
 var suggest1 = suggestSheet.getRange("A2");
 var suggest2 = suggestSheet.getRange("A3");
 var suggest3 = suggestSheet.getRange("A4");
 var suggest4 = suggestSheet.getRange("A5");
 var suggest5 = suggestSheet.getRange("A6");
 var suggest6 = suggestSheet.getRange("A7");
 var suggest7 = suggestSheet.getRange("A8");
if (max == "0"){//sending emails according to categories chosen
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest0.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/leader.html"+" to learn more about these clubs. Thank you!");}
 if (max == "1"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest1.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/service.html"+" to learn more about these clubs. Thank you!");}
 if (max == "2"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest2.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/stem.html"+" to learn more about these clubs. Thank you!");}
 if (max == "3"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest3.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/right-sidebar.html"+" to learn more about these clubs. Thank you!");}
 if (max == "4"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest4.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/publ.html"+" to learn more about these clubs. Thank you!");}
 if (max == "5"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest5.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/active.html"+" to learn more about these clubs. Thank you!");}
 if (max == "6"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest6.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/debate.html"+" to learn more about these clubs. Thank you!");}
 if (max == "7"){
 MailApp.sendEmail(emailAdd, "Club Marketplace Suggestions", "Hello, "+ name.getValues() +". Thank you for filling in the Club Marketplace: Discover Your Passion form. We suggest you try the "+ suggest7.getValues() + " clubs. Visit "+ "https://club-marketplace.github.io/other.html"+" to learn more about these clubs. Thank you!");}
 }}}

Here’s a video of the quiz working alongside with the email.

Along the way, we encountered some errors that we had difficulty solving. This is the testing document for this project.

In summary, here’s a video and slideshow summarizing our project.

To conclude, I thought this project was harder than I expected. There was a simple goal we wanted to achieve, but it took much more to reach that goal. This included learning the basics of JavaScript, learning how Google Script works, and knowing how to manipulate what we know in order to help us achieve our goal. Mia and I worked very well as a team, helping each other at different times. For me, she helped me on the basics of Javascript and I helped her on designing and the content of the website. The workload was evenly split between us, considering that she had to code an entire website and I had to learn an entire new language to code in Google Script. In the end, the effort was all worth it because our end product could potentially help a lot of people in the future.

Click here to visit the website

———————————————————————————-

Semester Reflection: 

In this semester, I would say that I learned more than I expected in Intro to Programming. Even thought majority of our class thought that we spent too much time on the Design Thinking unit, I think that it was worth it. Now reflecting on it, the Design Thinking cycle was worth spending time on because it can be applicable to the real world and is used in many different subjects, such as entrepreneurship and business. Learning Python was also worth the time because I got introduced to the world of code and also got a chance to experience different languages and compare them in this project. In summary, I would definitely recommend this course to other students.