Skip to content
Snippets Groups Projects
Commit 4331ff66 authored by Christopher Bohn's avatar Christopher Bohn :thinking:
Browse files

Initial commit

parents
No related branches found
No related tags found
No related merge requests found
Showing
with 363 additions and 0 deletions
# Project-specific
# none (for now)
# Mac file finder metadata
.DS_Store
# Java files
*.class
# Emacs backup file
*~
# IntelliJ files
.idea/
out/
*.iml
*.iws
*.ipr
# Eclipse files
bin/
.settings/
.classpath
.project
# Visual Studio / VS Code files
.vs*/
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
*_i.c
*_p.c
*_h.h
*.ilk
*.meta
*.obj
*.iobj
*.pch
*.pdb
*.ipdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*_wpftmp.csproj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Netbeans files
nbproject/private/
build/
nbbuild/
dist/
nbdist/
nbactions.xml
nb-configuration.xml
# Maven
target/
# Miscellaneous
tmp/
*.tmp
*.bak
*.swp
# Simple Course Registration System
## Objectives
In this assignment, students will:
- Gain additional experience developing software with a partner
- Demonstrate good software engineering practices
- Learn three design patterns
- Façade Pattern
- Singleton Pattern
- Template Method Pattern
- Learn the Three-Tier architectural style
## Starter Code
- Directory structure for three-tier architecture
- `CSVReaderWRiter.java` in the backend directory to parse CSV file contents and prepare
`Maps` of field names to values that students' code can use to create `Student` and
`CourseOffering` objects
- CSV files in the resources directory with starter data for `Student` and
`CourseOffering` objects
This diff is collapsed.
pom.xml 0 → 100644
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>edu.unl.cse.csce361.course_registration</groupId>
<artifactId>course_registration</artifactId>
<version>1.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.2</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>edu.unl.cse.csce361.course_registration.Main</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
package edu.unl.cse.csce361.course_registration;
public interface CourseOffering {
String getCourseID();
String getCourseName();
int getSemester();
int getNumberOfStudentsRegistered();
void addStudent(Student student);
void removeStudent(Student student);
}
package edu.unl.cse.csce361.course_registration;
public enum MeetingTime {
MONDAY0830,
MONDAY0930,
MONDAY1030,
MONDAY1130,
MONDAY1230,
MONDAY1330,
MONDAY1430,
MONDAY1530,
MONDAY1630,
TUESDAY0800,
TUESDAY0930,
TUESDAY1100,
TUESDAY1230,
TUESDAY1400,
TUESDAY1530;
TUESDAY1700;
}
package edu.unl.cse.csce361.course_registration;
public interface Student {
String getName();
String getEmail();
String getMajor();
void registerForCourse(String courseID);
void removeCourse(String courseID);
boolean hasScheduleConflict(MeetingTime meetingTime);
}
/*
* CSV Reader/Writer, copyright (c) 2019 Christopher A. Bohn, bohn@unl.edu.
*/
package edu.unl.cse.course_registration.backend;
import java.io.*;
import java.net.URL;
import java.util.*;
public class CSVReaderWriter {
// this does not (yet) handle data elements that include commas and/or are surrounded by quotation marks
private static final String DELIMTER = ",";
private static final char BYTE_ORDER_MARK = '\ufeff';
public static Set<Map<String, String>> readCSV(String filename) {
Set<Map<String, String>> csvSet = null;
ClassLoader classLoader = CSVReaderWriter.class.getClassLoader();
try(InputStream inputStream = classLoader.getResourceAsStream("csv/"+filename)) {
csvSet = parseCSV(inputStream);
} catch (IOException ioException) {
System.err.println("Error loading " + filename + ". " + ioException);
}
return csvSet;
}
public static boolean writeCSV(String filename, Set<Map<String, String>> data) {
boolean wroteFile = true;
ClassLoader classLoader = CSVReaderWriter.class.getClassLoader();
URL resource = classLoader.getResource("csv/" + filename);
if (resource != null) {
File file = new File(resource.getPath());
try(OutputStream outputStream = new FileOutputStream(file)) {
placeCSVonStream(data, outputStream);
} catch (FileNotFoundException fileNotFoundException) {
System.err.println("Could not open " + filename + "; probably due to a bad pathname. " + fileNotFoundException);
wroteFile = false;
} catch (IOException ioException) {
System.err.println("Error opening " + filename + ". " + ioException);
wroteFile = false;
}
} else {
System.err.println("csv/" + filename + " not found. Cannot overwrite file unless it exists.");
wroteFile = false;
}
return wroteFile;
}
static Set<Map<String, String>> parseCSV(InputStream inputStream) throws IOException {
Set<Map<String, String>> csvSet = new HashSet<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
List<String> fieldNames = new ArrayList<>();
boolean header = true;
while ((line = reader.readLine()) != null) {
String[] elements = line.split(DELIMTER);
if (header) {
if (elements[0].charAt(0) == BYTE_ORDER_MARK) {
elements[0] = elements[0].substring(1); // remove text-encoding character sometimes added by Excel
}
fieldNames.addAll(Arrays.asList(elements));
header = false;
} else {
Map<String, String> row = new HashMap<>();
int column = 0;
for (String element: elements) {
row.put(fieldNames.get(column++), element);
}
csvSet.add(row);
}
}
return csvSet;
}
static void placeCSVonStream(Set<Map<String, String>> data, OutputStream outputStream) {
PrintStream writer = new PrintStream(outputStream);
Set<String> fieldNames = null;
int number_of_fields = 0;
for (Map<String, String> row: data) {
int field_number = 0;
if (fieldNames == null) {
fieldNames = row.keySet();
number_of_fields = fieldNames.size();
for (String field: fieldNames) {
writer.print(field);
writer.print(++field_number<number_of_fields ? "," : "\n");
}
}
field_number = 0;
for (String field: fieldNames) {
String value = row.get(field);
writer.print(value != null ? value : "");
writer.print(++field_number<number_of_fields ? "," : "\n");
}
}
}
/*
public static void main(String[] args) {
Set<Map<String, String>> demo = readCSV("demo.csv");
boolean success = writeCSV("out.csv", demo);
System.out.println(success ? "Wrote file!" : "Didn't write file");
}
*/
}
CourseID,Section,CourseName,Room,Days,StartTime,Semester,NumberOfStudentsRegistered,NumberOfAvailableSeats,URL,Prerequisite1,Prerequisite2
CSCE10,1,INTRODUCTION TO CSE,AVH115,TUESDAY,1700,1198,8,5,,,
CSCE10,2,INTRODUCTION TO CSE,LPH137,FRIDAY,1030,1198,16,5,,,
CSCE10,3,INTRODUCTION TO CSE,AVH111,TUESDAY,1600,1198,15,17,,,
CSCE10,5,INTRODUCTION TO CSE,KAUF112,TUESDAY,1530,1198,17,4,,,
CSCE100,1,INTRO TO INFORMATICS,HAH133,TUESDAY,1100,1198,17,2,,,
CSCE101,1,FUND OF COMPUTER SCI,AVH106,MONDAY,1130,1198,8,18,,,
CSCE101,ONLINE,FUND OF COMPUTER SCI,,,,1198,15,,https://xyzzy.edu/foo,,
CSCE120,1,LEARNING TO CODE,AVH110,TUESDAY,1700,1198,4,19,,,
CSCE155,250,COMP SCI I,HENZ124,MONDAY,1700,1198,7,20,,,
CSCE155,150,COMP SCI I,AVH119,TUESDAY,1100,1198,18,15,,,
CSCE155,250,COMP SCI I,BESY117,MONDAY,1430,1198,10,16,,,
CSCE155,ONLINE,COMP SCI I,,, ,1198,13,,https://xyzzy.edu/bar,,
CSCE155,150,COMP SCI I,AVH112,TUESDAY,0800,1198,1,10,,,
CSCE156,150,COMPUTER SCIENCE II,AVH106,TUESDAY,1400,1198,12,11,,CSCE155,
CSCE196,1,SPECIAL TOPICS,AVH115,TUESDAY,1700,1198,17,17,,,
CSCE196,2,SPECIAL TOPICS,LPH137,FRIDAY,1030,1198,16,3,,,
CSCE196,3,SPECIAL TOPICS,AVH111,TUESDAY,1600,1198,9,5,,,
CSCE230,150,COMPUTER ORGANIZATN,HAH112,MONDAY,0930,1198,2,7,,CSCE155,
CSCE231,150,COMP SYSTMS ENGINEERING,BL206,MONDAY,1230,1198,9,17,,CSCE235,
CSCE235,150,INTR DISCRETE STRUCT,LPH27,TUESDAY,1230,1198,13,10,,CSCE155,
CSCE251,ONLINE,UNIX PROGRAMMING,,,,1198,10,,https://xyzzy.edu/baz,,
CSCE310,150,DATA STRUCT & ALGORITH,AVH115,MONDAY,1330,1198,17,14,,CSCE156,CSCE235
CSCE310,1,DATA STRUCT & ALGORITH,AVH119,MONDAY,1230,1198,10,17,,CSCE156,CSCE235
CSCE322,1,PRGRM LANG CONCEPTS,AVH106,MONDAY,1030,1198,12,17,,CSCE156,
CSCE351,1,OPERATNG SYS KERNELS,HAH102,TUESDAY,0930,1198,9,19,,CSCE230 OR CSCE231,CSCE310
CSCE361,2,SOFTWARE ENGINEERING,AVH115,MONDAY,1430,1198,12,11,,CSCE310,
CSCE378,1,HUM-COMPUTR INTERACT,LPH105,MONDAY,1430,1198,15,1,,CSCE156,
CSCE378,2,HUM-COMPUTR INTERACT,LPH105,MONDAY,1530,1198,17,19,,CSCE156,
CSCE411,1,DATA MODELING SYST DEV,AVH108,MONDAY,1230,1198,4,20,,CSCE310,
CSCE413,1,DATABASE SYSTEMS,AVH119,MONDAY,1130,1198,20,20,,CSCE310,
CSCE423,1,DSGN & ANLYS ALGORTHMS,AVH106,MONDAY,1330,1198,13,3,,CSCE310,
CSCE428,1,AUTOMA COMP &LANG,AVH19,MONDAY,1230,1198,10,2,,CSCE310,
CSCE438,150,SENSOR NETWORKS,AVH106,MONDAY,0930,1198,1,20,,CSCE230,CSCE310
CSCE438,151,SENSOR NETWORKS,AVH21,MONDAY,0830,1198,11,12,,CSCE230,CSCE310
CSCE440,1,NUMERICAL ANALYSIS I,AVH19,MONDAY,1430,1198,9,17,,CSCE155,
CSCE457,1,SYSTEMS ADMINISTRATN,AVH119,TUESDAY,0800,1198,14,9,,CSCE310,
CSCE458,1,MOLECULAR AND NANO COMM,AVH119,MONDAY,1330,1198,7,16,,CSCE310,
CSCE461,1,ADV TOP IN SOFTWARE ENGR,BESY108,MONDAY,1230,1198,0,19,,CSCE361,
CSCE462,1,COMM NETWORKS,LPH27,MONDAY,1230,1198,16,17,,CSCE310,
CSCE467,1,TSTNG VERIFCTION & ANLYS,HAH110,TUESDAY,1100,1198,4,3,,CSCE361,
CSCE473,1,COMPUTER VISION,HAH133,TUESDAY,0930,1198,14,17,,CSCE156,
CSCE476,1,INTRO ARTIFCL INTELL,AVH118,MONDAY,1430,1198,1,13,,CSCE310,
CSCE476,2,INTRO ARTIFCL INTELL,AVH21,MONDAY,1530,1198,14,16,,CSCE310,
CSCE477,1,CRYPTOGRAPHY & SECURTY,AVH109,TUESDAY,1230,1198,15,13,,CSCE310,
CSCE478,1,INTRO MACHINE LRNG,AVH119,TUESDAY,0930,1198,20,4,,CSCE310,
CSCE478,2,INTRO MACHINE LRNG,BURN118,MONDAY,1700,1198,13,7,,CSCE310,
CSCE479,150,INTRO DEEP LEARNING,AVH119,MONDAY,1530,1198,9,0,,CSCE310,
CSCE479,151,INTRO DEEP LEARNING,AVH119,MONDAY,1630,1198,17,15,,CSCE310,
CSCE486,2,DESIGN STUDIO: CS,HAH104,TUESDAY,1400,1198,3,0,,CSCE361,
CSCE488,2,DESIGN STUDIO: CE,AVH118,TUESDAY,1400,1198,18,6,,CSCE236,CSCE361
CSCE496,2,SPECIAL TOPICS,LPH101,TUESDAY,1230,1198,20,13,,,
CSCE496,3,SPECIAL TOPICS,LPH101,TUESDAY,0930,1198,5,0,,,
\ No newline at end of file
Name,Major,RegisteredCourse1,RegisteredCourse2,RegisteredCourse3,RegisteredCourse4,RegisteredCourse5,RegisteredCourse6,RegisteredCourse7,RegisteredCourse8,CompletedCourse1,CompletedCourse2,CompletedCourse3,CompletedCourse4,CompletedCourse5,CompletedCourse6,CompletedCourse7,CompletedCourse8,CompletedCourse9,CompletedCourse10,CompletedCourse11,CompletedCourse12,CompletedCourse13,CompletedCourse14,CompletedCourse15,CompletedCourse16,CompletedCourse17,CompletedCourse18,CompletedCourse19,CompletedCourse20,CompletedCourse21,CompletedCourse22,CompletedCourse23,CompletedCourse24,CompletedCourse25
Stu Dent,Computer Science,CSCE156,,,,,,,,CSCE155,CSCE235,,,,,,,,,,,,,,,,,,,,,,,
Ima Coder,Computer Science,,,,,,,,,CSCE155,CSCE156,,,,,,,,,,,,,,,,,,,,,,,
Turanga Leela,Computer Engineering,CSCE156,,,,,,,,CSCE155,,,,,,,,,,,,,,,,,,,,,,,,
Philip Fry,Undecided,CSCE10,CSCE100,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Lisa Simpson,Computer Engineering,CSCE230,,,,,,,,CSCE155,CSCE156,CSCE235,CSCE310,,,,,,,,,,,,,,,,,,,,,
Bart Simposon,Computer Science,CSCE156,,,,,,,,CSCE155,CSCE235,,,,,,,,,,,,,,,,,,,,,,,
Moe Szyslak,Undecided,CSCE10,CSCE101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
I.P. Freely,Undecided,CSCE10,CSCE101,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Seymour Butz,Computer Science,CSCE235,,,,,,,,CSCE155,CSCE156,CSCE231,CSCE310,,,,,,,,,,,,,,,,,,,,,
Hugh Jass,Computer Engineering,CSCE230,,,,,,,,CSCE155,CSCE156,CSCE235,,,,,,,,,,,,,,,,,,,,,,
Anita Bath,Computer Science,,,,,,,,,CSCE155,CSCE156,CSCE231,CSCE235,CSCE310,CSCE361,,,,,,,,,,,,,,,,,,,
Ura Snotball,Computer Engineering,,,,,,,,,CSCE155,CSCE156,CSCE230,CSCE235,,,,,,,,,,,,,,,,,,,,,
Yuri Nator,Computer Science,,,,,,,,,CSCE155,CSCE156,CSCE231,CSCE235,,,,,,,,,,,,,,,,,,,,,
Moe Ron,Computer Science,,,,,,,,,CSCE155,CSCE156,CSCE231,CSCE235,CSCE310,,,,,,,,,,,,,,,,,,,,
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment