Due Date: See class website for due date of Lab #3 design and of Lab #3 assignment

(see instructions on website for how to turn this in)

 

Grade value;10% (out of 100% for all grades) of total of lab grades.

 

Topic objectives: Linked list Structs

Enumerated types and unions Pointers

File input Recursion

Modular programming structure Program design

Error checking Programming style

 

The goal for this lab is to practice the design and development of linked lists of structs for data representation and storage. This lab will use strings and file input. As in Lab #1 you will be required to create a design document and turn it in prior to the due date of the lab. All material that has previously been covered may also be used in this lab.

 

This assignment has an overview section, a task description section, an implementation requirements section, a grading scale, and a deductions section. If there is additional info needed it will be in a miscellaneous section at the end of this lab assignment. Read ALL of the assignment before you start trying to develop the program. Be sure to check the DEDUCTIONSsection at the end of this assignment to avoid penalties. You may NOTuse global variables, the exit command, goto, break (except in a switch), or continue.

• -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • -- • --

 

In Lab #1 you started developing the Campus Activity System, CAS. Throughout the course of this semester you will work on your CAS. Each lab assignment will build on the previous assignments and will also implement changes to make the system more efficient and so on. In this Lab#3 you will be modifying this program to make the data representation more flexibleand you will be adding some functionality to the program. You will also be finding information about more of the UTA campus activities and groups. Your goal for this program will be to continue to develop a computer system that helps students learn about activities and groups on campus that they might want to get involved in.

 

The tasks for this Lab #3 assignment will be:

 

¨                   Introduce the Campus Activities System to a new user.

¨                   Define a struct data type to hold all the information about a campus activity/group

¨                   Allocate a struct to store the first CAS organization in, read its data in and store it then see if there are more organizations to be read in. If so, allocate space for another struct and repeat until data input is complete.

¨                   Create and display a screen menu of the following choices for the user.

1) Using the data in the linked list,

A) Search for activity and group choices and data by

i. Group number

ii. Group name

iii. Meeting day

iv. Purpose

B) Count how many groups/activities have a specific purpose

C) List all the groups/activities that meet a certain criteria

i. Member type including groups that allow supersets of the member type, i.e. if you are looking for groups that allow sophomores ‘2’, then you must also include groups that allow all undergraduates ‘U’ and groups that allow all students ‘A’.

ii. Size

D) Calculate

i. Cost to join all groups/activities

ii. Average cost to join any activity of a particular purpose (e.g. average cost to join any social group)

iii. Find maximum length of a group meeting

E) Sort data in the linked list based on

i. Group number

ii. Group name

iii. Meeting weekday and time

iv. Next meeting date

2) Update the data in the linked list–this will take the user to a submenu for doing updates

3) Remove an organization from the linked list

4) End the program

 

Each of these tasks is described in more detail below. There are also some simplifying assumptions for this lab. Many of these simplifications will be eliminated in later labs.

 

Simplifying assumptions for the lab #3:

a) Various constants will be given for use in lab #3.

b) All groups/activities will have a unique number.

c) Your program must check data VALUES at input but not data TYPES. The user is responsible for putting in the correct data type as long as your program clearly tells the user what to do. If the use inputs the wrong type (char when int is required), then this type of error is NOT counted as an execution error in your program.

 

Task Descriptions:

 

¨                   Introduce the Campus Activity System to a new user.

For this task your system must provide an introduction/welcome screen to the user. The screen should briefly describe what the system will do. You may have the welcome screen stay up for a fixed period of time or you may let the user press a key to continue on with the program. Make sure you tell the user what to do if you want them to press a key. (You do NOT have to clear the screen after the menu. Just let it scroll off the screen as more data is printed.)

 

¨                   Define a struct data typeto hold all the information about a campus activity/group

Define a struct data type that is global to the program. The struct should be able to hold all of the data listed below for any ONE group or activity. The struct type will then be used to create the linked list of struct variables to hold the data values.

 

For lab #3, the following data will be used:

 

1. Number representing the group or activity

 

2. Name of group or activity (can be multiple words but no word will start with a digit, i.e. “UTA Students4 Peace” is legal but “UTA Students 4 Peace” is not.)

 

3. Meeting time consisting of

a. time of day given as hour and minute and then an ‘a’ for a.m. or a ‘p’ for p.m.

b. day of the week given as one letter (MTWRFSN)

c. week of the month given as ‘1’ for first week, ‘2’ for second week, ‘3’ for third, ‘4’ for fourth

d. next meeting date given as mm/dd(with the slash mark)

 

4. Meeting location consisting of

a. UTA building abbreviation (no more than 4 chars in length, all one word) Ex. NH, MAC, UC…

b. a room number in the building (no more than 5 chars in length, all one word)

 

5. Purpose of the group. The purpose must be one of the following as denoted by the letter preceding it:

F – fun and social organization/activity just to meet like minded people

V – volunteer organization/activity that does service activities of any type

A – academic; offers some sort of academic focused purpose such as tutoring, mentoring, study group, etc.

S – sports; opportunities to play or support teams

P – professional; focused on providing support to student for future professions

M – fine arts; music, dance, art, theatre and other types of arts activities

L – leadership; opportunities for leadership on campus or learning skills for leadership

C – cultural; offers support and education related to a specific culture or group of cultures

O – other

 

6. Member type. Specifies what types of students are eligible to be members. If more than one of these categories applies, then for Lab #2 select the category that includes the largest number of potential members. Member types are;

A – all students

G – graduate students only

M – Master’s level graduate students only

P – Doctoral level graduate students only

U – undergraduate students only

4 – seniors only

3 – juniors only

2 – sophomores only

1 – freshmen only

E – engineering majors only

B – business majors only

L – liberal arts majors only

S – science majors only

R – architecture students only

N – nursing students only

S – social work students only

 

7. Size. Gives number of group members or activity participants

 

8. Cost. Gives cost to participate in the group or activity for one year

 

9. National affiliation. Enumerated type value to indicate if this is part of a larger national group or local to UTA. The enumerated type values should be NONE, STDT, UNIV, and REG.

 

10.Local affiliation. Union type indicating information about how this group is affiliated at a state or nat’l level. If a group is a STDT affiliate then the union value is the cost to pay national student dues (part of the overall costamount) called stdtdues. If the group is a REG subgroup the the associated union value is an integer that gives the subgroupcode. If the group is a UNIV chapter, then the union value is a 4 character array that gets a schoolabbreviation (like ‘U’,’T’,‘A’). If the group has no affiliation (NONE), then the union value is an integer that gives the year that the group started.

 

11.Meeting length. – The length of the groups meeting in minutes.

 

12.Next organization. A pointer to another structure of the same type.

 

 

The details for the members of the struct data type are described below:

 

o   Group/activity number- the numeric code associated with a specific group or activity. (ex. The Big Event = 004, SWE = 132, Student Senate = 488, etc.). For all the other pieces of data, the information that is in the same struct inside the linked list will refer to the same activity/group. (See the group/activity code list at the end of this assignment and you can add to it if desired.)

o   Group name - the string giving the name of the associated group/activity. This should be declared in the struct as a char pointer. Each name string should be read in to a temporary array, the length of the string should be found, space should then be malloced to the char pointer in the struct to hold the size of the name, then the name should be copied from the temp array to the struct char pointer space.

o   Meeting time - the hour and minute info for the meeting time of the associated group/activity. The time is represented as HH.MM as a floating point number. Make sure that the meeting hour and minute that are entered are valid.

o   Meeting half day- the a.m. or p.m. info for the meeting time of the associated group/activity. Make sure that the character that is entered is valid.

o   Meeting day - the day of the week info for the meeting time of the associated group/activity. Make sure that the character that is entered is valid, i.e. that it is one of the allowed characters.

o   Meeting week - the week info for the meeting of the associated group/activity. Make sure that the meeting week that is entered is valid, e.g. how many weeks could there be in a month?

o   Next meeting day– the date of the next meeting as a two digit number. Be sure to check for validity.

o   Next meeting month– the month of the next meeting as a two digit number. Be sure to check for validity.

o   Meeting building- the 4-letter building designation for the meeting location of the associated group/activity. Declare this as a 4 char array in the struct.

o   Meeting room - the 5-character room designation for the meeting location of the associated group/activity. Ex. 314A. Declare this as a 5 char array in the struct.

o   Group/activity purpose- the code of the purpose of the associated group/activity. Make sure that the character that is entered is valid, i.e. that it is one of the allowed characters.

o   Group/activity member type- the code of the types of students allowed to be members of the associated group/activity. Make sure that the character that is entered is valid, i.e. that it is one of the allowed characters.

o   Group/activity size- the number of people involved in the associated group/activity.

o   Group/activity cost- the amount in dollars and cents that it costs to participate in the associated group/activity. Make sure this amount is not negative but it can be free to participate.

o   National - Enumerated type indicating type of national affiliation. Declare this type above the struct type and include this value inside the struct. See the info in the previous section for the enumerated type values.

o   Local - Union type indicating type of affiliation. Declare this type above the struct type and include this value inside the struct. See the info in the previous section for the union members.

o   Meeting length– an integer giving the length of the meeting in minutes.

o   Next org – Pointer to organization structure type

 

 

 

¨                   Allocate a structto store the first CAS organization in, read its data in and store it then see if there are more organizations to be read in. If so, allocate space for another struct and repeat until data input is complete.

 

For Lab #3 you will be creating a linked list to store the organization data in. For testing purposes there is must be a minimum of 12 groups but there is no actual minimum or maximum number of groups. [Note for development: start with a smaller number of activity/groups then increase to 12 when program is working well ] You will NOT know how many groups there are and you should NOT ask the user for this info.

 

You should start by allocating space for one struct and assigning that space to a pointer, then using that struct pointer space to store the information for the first organization. When that is read in, you should either ask the user if there is more data or check for the end of the file depending on which method you are using. If there is more data, allocate new space and read date into it, then link the new space to the old space using the next orgpointer of the old space. Repeat until all data is read in.

 

For lab #3, you must implement at least two methods of input and file input must be one of the input methods. The three forms of the input and the input data file are described below: Individual data method, line of data input method, or file of lines input method.

 

Individual data method (These can be done in any order)

a. Ask the user for the activity/group code (don’t forget to supply a list of names and codes for them.) Read in their number, make sure it is a valid code and then store it in the Group/activity numbermember of the struct at the new location.

b. For the group size do the same things using the code descriptions where appropriate (don’t forget to supply a list of codes for them) and making sure to check that the input values are meaningful. Store them in theGroup/activity sizemember in the same struct [Note: checking validity where appropriate means to check the value IF there is something to check against. For meeting hours there is a clock to check against. For group size, as long as it is a positive number, there isn’t anything else to check against for this lab.]

c. Ask the user for the week of the month that the activity/group meets. Make sure it is a valid number and then store it in the same struct.

d. Ask the user for the meeting time in the format HH.MM. Make sure the hour values and the minute values are valid. Store the time value in the same struct.

d. For the meeting half-day ask the user for the value and make sure it is valid. Store it in the same struct.

e. For the remaining data values that are letter codes (Meeting day, Purpose, Activity/group member type),ask the user for the data using the single character descriptions (don’t forget to supply a list of abbreviations for them.) Read in their char, make sure it is a valid abbreviation and then store it in the appropriate members of the same struct.

f. For the name string, read in each string into a temporary array, check to make sure the string length is valid, then if it is, copy the string into the character array in the same struct.. If the string is too long, copy only part of the string into the character array.

g. For the remaining numeric values, read the associated values for that activity/group. Make sure they are valid values and then store them in the same struct..

h. For the Nationalaffiliation, you should give the user the four choices of enumerated type values and let them input a number to choose a value. Your program should then store the appropriate value in the enumerated type.

i. For the Localvalue you must check the Nationalvalue and ask the user for the appropriate piece of information based on the enumerated type value in National. The Local value must be stored in a union that is part of the struct.

j. Set the pointer to NULL.

 

 

Line of data input method

Your program may ask the user to enter all the information for one activity/group on the same line. This data would be an integer for activity/group code, an int for size, an int for week of the month, float or double for meeting hour and meeting minute, chars for half day and day of week, chars for purpose and member type, chars/strings for building abbreviation, room number and group name, a float or double for cost, plus the integer meeting length, an int to tell which enumerated type to use and the appropriate union member type for the union data. You must tell the user exactly how to enter the line of data. The data for a single activity/group will be entered by the user as values on one line as follows. There must be one space only between the values, and the building must have 4 chars (blanks are OK), and the room number must have 5 chars.

 

> 132 43 1 12.0 p M 10/12 P E NH 110 15.00 45 1 5.00 Society of Women Engineers

 

which represents the SWE (Group 132) with 43 members meeting in the 1stweek of the month at 12:00pm (which is noon) on Monday. The next meeting is 10/12. It is a professional organization for engineering students, it meets in Nedderman Hall room 110, the yearly cost is $15.00, the meetings are 45 minutes long, they are a student affiliate of a national organization, the national student dues are $5.00, and the group name is “Society of Women Engineers”. Another example would be:

 

> 8 120 3 6.0 p F 10/9 S A MAC VB1 20.00 20 0 1987 Oozeball

 

which represents Oozeball (Group 8) with 120 members meeting in the 3rd week of the month at 6:00pm on Friday. The next meeting is 10/9. It is a social organization for all students, it meets at the MAC in room VB1, the yearly cost is $20.00, the meetings are 20 minutes long, they have no national organization, the group started in 1987, and the group name is “Oozeball”.

 

Your program will read the first number and store it in group number member of the new struct, then read and store the size and store it in the group sizemember of the same struct. All the other pieces of data would be read into the appropriate members of the same struct except the name string which should be read into a temporary array as described earlier. Your program should read multiple input values within a single input command but multiple input (scanf) commands can be used. Your program should read in as many lines of input for activity/groups as the user enters asking the user if there is more data after each line, until they indicate they are done.

 

File of lines input method

You must use a file that contains at least 12 lines of activity/group data and you must read the data from this file. To do this will requires creating file variables, opening the file and linking it to the file variable, and then reading the data from the file variable in the same way that a line of data would be read from the screen. This must be done using C file commands. All the lines in the file will have the same format as the line of data described above. There is no countline in the file.

 

Input verification:

When the user has entered all of their desired activity/groups, print out all the input activity/group data in an easily readable form, ex. use a table with headings, or columns with headings or rows with labels. It is required that this printing be written as a separate function that can be called at any time in the program to print the current contents of the linked list.

 

¨                   Create and display a screen menu of the following choices for the user.

Once all the data is read into the linked list your program should give the user a screen menu with the following choices: (use any number scheme you wish)

 

i.        Search for a type of activity/group by number

ii.      Search for a type of activity/group by name

iii.    Search for a type of activity/group by meeting day

iv.    Search for a type of activity/group by purpose

v.      Count how many groups/activities have a specific purpose

vi.    List all the activity/groups that accept a certain member type

vii.  List all the activity/groups that are equal or greater than a certain size

viii.Calculate cost to join all groups/activities

ix.    Calculate average cost to join a groups/activities of a particular purpose

x.      Find maximum length of a group meeting

xi.    Sort data by group number

xii.  Sort data by group name

xiii.Sort data by meeting weekday and time

xiv.Sort data by next meeting date

xv.  List all the activity/groups with all their data

xvi.Update the data in the linked list

xvii.          Remove an organization from the linked list

xviii.        End the program

 

i. The search by group number should use linear search to determine if the group number is in the linked list. It should find any group with the matching group number, then print a sentence stating that matching code was or was not found and if found, it should also print the code and the name and other data of the group/activity.

 

ii, iii, iv. The other search functions should let the user choose group name or meeting day or purpose code and then look through the list to find the first activity/group that matches that type, then print a sentence stating that matching code/day was or was not found and if found, it should also print the code and the name of the group/activity.

 

v. The count function should let the user choose a purpose code and then go through the data and count (#) how many groups/activities have that purpose. The output should be a sentence stating that the number of groups/activities with that purpose is #.

 

vi. The member type list function should let the user choose a member type (using the codes your program gives them) and then should print all the groups/activities that allow that member type. This one is a little tricky in that some groups are subgroups of others, e.g. if the user chooses type 3 for juniors then any group that accepts U undergrads also accepts juniors and any group that accepts A all students also accepts juniors. Make sure to print a message at the top of the list explaining what is being printed.

 

vii. The size list functions should let the user choose a size value and then should print all the groups/activities that are of that size or larger. Make sure to print a message at the top of the list explaining what is being printed.

 

viii. The calculate function simply goes through and sums up all the costs for all the groups/activities. Print this sum with a message.

 

ix. The calculate average cost function asks the user to choose a purpose (from the list of purpose codes), then goes through the list sums all the costs of groups with that purpose and then divides by the number of those groups to get the average cost of that type of group.

 

x. The find maximum meeting length function goes through the list and finds the longest meeting length and prints the group info.

 

xi, The sort data by group number will do a bubble sorton the list and order the structs in the list from smallest group number to largest group number. Print all the sorted data.

 

xii. The sort data by group name will do a bubble sorton the list and order the list alphabetically by name. Print all the sorted data.

 

xiii. The sort data by meeting time and day will do a bubble sort on the list and order the list from first day of the week, earliest time in the morning, to last day of the week and latest time at night the groups meet. Print all the sorted data.

 

xiv. The sort by next meeting time can use any sort method to order the list from soonest date to latest date. If two meetings have the same date, sort those by earlier to latest meeting time. If the meeting time is also the same, any order is OK. Print all the sorted data.

 

xv. The list activity/groups function is the same as the print function described for input verification.

 

xvi. The update option should take the user to a second screen to allow them to update information in the linked list. This screen should ask for a activity/group code from the user and search for that activity/group. Once the correct activity/group is determined, give the user a menu of the following options:

 

o        Change Group name in that struct

o        Change Meeting time, half day, day, or week

o        Change Meeting building, or room

o        Change Purpose

o        Change Member type

o        Change Size

o        Change Cost

o        Return to main menu

 

For any change the user wishes to make, do the same error checking as in the original data entry section. After each change is made, print all of the activity/group info for the activity/group. [Hint: If you write your data entry section with little functions for each input check then you can reuse them all here.]

 

xvii. The remove option should ask the user for a activity/group code and search for that activity/group. Once the correct activity/group is determined, print the organization’s data and ask the user to verify that this is the group to delete. Once the user has verified yes, then change the links in the surrounding structs to remove the selected organization from the list. Once it is removed, the remove option should print the whole list to verify that the group is no longer in the list.

 

xviii. When the user chooses “End the program” from the main menu, print a concluding message and then gracefully end the program.

 

Implementation requirements:

 

DESIGN YOUR PROGRAM FIRST BEFORE CODING. The design should include a list of the functions you expect to write with brief (one line) descriptions and a diagram showing what function calls what other functions. This diagram should start with the main function at the top and all others below it. Each function should accomplish one main purpose and each function at a lower level should have a more specific purpose than the function that calls it. This design documentation is required to be turned in for Lab 2. The lab design is due at least ONE WEEK before the lab is due. The design may be text, graphics, handwritten or whatever. If not computer generated, please scan it in (go to the computer lab or library). E-mail your design document to the Lab2 TA (not same as Lab1 TA) for you turn it in. Use a name for your document that starts with “Lab3 Design xxx1234” where xxx1234 is your login ID. Design documents must be turned in in order for Lab assignments to be graded.

 

Program requirements

 

For Lab #3 the program should use the following data structures:

Struct data type to hold all activity/group data for one group

Linked list of structs to hold data for any number of groups

Global CONSTANTS for specific index and/or maximum values given in this assignment. Constants can be done with

#define or with the const declaration. Examples:

 

#define GROUPMAX 20

const int GROUPMIN = 12;

 

The program should use the following control structures:

Function calls to perform tasks

Bubble sort on linked list

A while or for loop to read the input data

If, if-else, nested ifs, or switches to error check and implement the menu options

 

The program should NOTuse:

global variables

exit

break (except in switch)

continue

any topic not covered in class before the lab DUE date unless approved by the instructor

 

The program should be implemented as a set of functions with a main routine and at least one function for menu operations, two for getting input, one for printing, one for a binary search function, one for a general search function, three for sorting, and two for calculating. You may use many more functions than this but you must use at least this many.

 

The program should perform the following actions in the given order:

Declare and initialize the variables

Print a welcome screen for the user that introduces the system

Get the needed input values from the keyboard

Print the appropriate outputs

Let the user enter additional values until the user indicates that they are finished.

 

The program should have a program headerwhich gives, at least, your name, the number of the lab assignment, your class and section, the assignment date, the due date, and a description of the program. If multiple files are used, each file should contain a similar header. See your instructor’s website for SPECIFIC instructions about the program header.

 

Each programmer-defined function, i.e. each function you write, should have a function headersimilar to those used in the examples in the textbook. This header should include at least the function name, the purpose of the function, and its inputs and outputs.

 

This program must be run with two different sets of test data for the team member constant data. You must create one data set in addition to the one that I will give you and run your program with both of them. You may run it two times within a single execution or you may execute the program two different times so that you have a total of two different data sets. The sample data set that you create must meet the guidelines given in the problem definition.

 

The program must be run and the output recorded in a script file from OMEGA using the gcccompiler. If you do not know how to create a script file, it is your responsibilityto ask the TA, look for help on the class website, or OIT how to use this function.

 

Programs turned in for credit must compile and run without any compilation errors or runtime errors. Programs may be partially complete but all completed functions must run without any errors. A program has a runtime error if it runs but then crashes in any situation, i.e. if there is any set of choices the user can make that will make the program crash. EXCEPTION: Your program must check data VALUES at input but not data TYPES. The user is responsible for putting in the correct data type as long as your program clearly tells the user what to do. If the user inputs the wrong type (e.g. char when int is required), then this type of error is NOT counted as an execution/runtime error in your program.

 

 

Grading scale:

Code: (53%)

Program header and function headers for all functions (2 points)

Comments (line comments and block comments) (4 points)

Modularity (division of the problem into small tasks, each one assigned to its own function and called from main() or from another function when appropriate--do notcode the entire program in main!) (2 points)

Style (indentation, consistency, meaningful identifiers, lateral separation of code from line comments, etc.) (2 points)

Correct definition of struct

All members defined as needed including new elements (6 pts)

Correct use of internal struct pointer (1 pt)

Correct definition of enumerated type (2 pt)

Correct definition of union (3 pt)

Correct use of union for input (4 pt)

Correct use of required file input (3 pts)

Correct input of name string as defined (3 pt)

Correct creation of linked list with data input (8 pts)

Correct linked list traversal (2 pt)

Correct implementation of bubble sort for linked list (3 points)

Correct use of required control structures (3 points)

Correct function structure as required (2 points)

Proper implementation of data input and input error checking (3 points)

Output: (47%)

User clearly understands what is being requested for input (3 points)

Linear search (find) tasks perform correctly (4 points)

Bubble sort tasks perform correctly (8 points)

List member type task perform correctly (4 points)

Calculate tasks perform correctly (4 points)

Count tasks perform correctly (2 point)

Find maximum tasks perform correctly (2 points)

Update tasks perform correctly (4 points)

Remove task performs correctly (3 pts)

Output of enumerated type and union done clearly and correctly (3 pts)

Input verification shows valid values and list of inputs correctly saved and printed (3 points)

Output gives clear information to explain the values to the user (3 points)

Output contains all the given test data and one additional data set (4 points)

Grading Deductions:

Use of global variableswill result in an overall grade of 0 (zero)

Use of the exit, break (outside a switch), or continuecommand will result in an overall grade of 0 (zero)

Labs which have execution errors in them and do not terminate normally will receive an overall grade of 0 (zero)

EXCEPTION: Your program must check data VALUES at input but not data TYPES. The user is responsible for putting in the correct data type as long as your program clearly tells the user what to do. If the user inputs the wrong type (e.g. char when int is required), then this type of error is NOT counted as an execution/runtime error in your program.

Labs which have compilation errors in them and do not compile will receive an overall grade of 0 (zero)

No submission of design document to appropriate TA will result in an overall grade of 0 (zero)

Late submission of softcopy of code and/or script fileto appropriate TA will result in an overall grade of 0 (zero) without prior instructor approval

Use of C language elements not yet discussed in class by the lab due date will result in potential deduction of points – discuss with instructor before using.

 

Miscellaneous:

 

Activity/group code list:

The Big Event = 004

Oozeball = 008

Bed Races = 010

JCEO/ESC = 130

SWE = 132

SHPE = 133

NSBE = 134

TSPE = 135

ACM = 140

GDC = 141

IEEE = 150

IIE = 160

BMESS = 170

BMES = 171

SACNAS = 221

Concert choir = 512

Marching band = 525

Student Senate = 488

FLOC = 490

UTA Volunteers = 491

BSA = 610

FSI = 630

 

Sample data:

 

490 88 3 12.30 p W 10/7 V A UC 212A 0.0 90 3 UTA Freshman Leaders on Campus

132 43 1 12.0 p M 10/12 P E NH 110 15.00 45 1 5.00 Society of Women Engineers

8 120 3 6.0 p F 10/9 S A MAC VB1 20.00 20 0 1987 Oozeball