RadioButtons are a bit tricky in GAS UI, they must have the same name to behave like radioButton but this makes it impossible to get their value using e.parameter.name as usual... (see also issue 506 and example here)
So the solution is to use client handlers that assign a value to a (hidden) textBox when you click a radioButton while giving them the same name in each group.
It might seem a bit complicated (or maybe I don't explain very well) so I wrote the code for you.
Here is the relevant modified part of your code and a working demo (I left both textBoxes visible for demo purpose but you should of course hide them using setVisible(false)
...
var lblStudentNum = app.createLabel('Number of Students:');
var txtStudentNum = app.createTextBox().setName('txtStudentNum');
var radioValGroup1 = app.createTextBox().setName(radioValGroup1);
var radioValGroup2 = app.createTextBox().setName(radioValGroup2);
var radSource1 = app.createRadioButton('group1', 'Hard-Copy').setFormValue('Hard-Copy').addClickHandler(app.createClientHandler().forTargets(radioValGroup1).setText('hardCopy'));
var radSource2 = app.createRadioButton('group1', 'Electronic-Copy').setFormValue('Electronic-Copy').addClickHandler(app.createClientHandler().forTargets(radioValGroup1).setText('Electronic-Copy'));
var radSource3 = app.createRadioButton('group2', 'Teacher-Made Exam').setFormValue('Teacher-Made Exam').addClickHandler(app.createClientHandler().forTargets(radioValGroup2).setText('Teacher-Made Exam'));
var radSource4 = app.createRadioButton('group2', 'Elements Exam').setFormValue('Elements Exam').addClickHandler(app.createClientHandler().forTargets(radioValGroup2).setText('Elements Exam'));
var radSource5 = app.createRadioButton('group2', 'Quia Exam').setFormValue('Quia Exam').addClickHandler(app.createClientHandler().forTargets(radioValGroup2).setText('Quia Exam'));
var btnCreate = app.createButton('Create Event');
vertMainPanel.add(radioValGroup1).add(radioValGroup2)
//Create handler which will execute 'createEvents(e)' on clicking the button
var evtHandler = app.createServerClickHandler('createEvents');
evtHandler.addCallbackElement(vertMainPanel);
//Add this handler to the button
btnCreate.addClickHandler(evtHandler);
vertMainPanel.add(radioValGroup1).add(radioValGroup2);// add 2 textBoxes to panel=callBackElement
...
In your server handler function you can simply retrieve these values using e.parameter.radioValGroup1
and e.parameter.radioValGroup2
just as any other widget.
EDIT : also, if I may suggest a small modification, it would be quite more easy to fill your list with a for loop iterating an array like below :
var lbxSubject = app.createListBox().setId('lbxSubject').setName('lbxSubject').setVisibleItemCount(5);
var listItems = ['-- Select One --','Algebra I (OCS)','Algebra II','Algebra II (Honors)','Agriscience Applications','Agriscience Applications (OCS)','Anatomy and Physiology','Anatomy and Physiology (Honors)','and so on...'];
listItems.sort();
for(var l=0;l<listItems.length;++l){
lbxSubject.addItem(listItems[l]);
}
It would be easier to maintain (if ever you need to add/remove an item, no need to care about order since it is automatically sorted) and more compact in your code...