{"id":19973338,"url":"https://github.com/jsmith/contact-captain","last_synced_at":"2026-06-09T12:31:13.916Z","repository":{"id":131851017,"uuid":"178043953","full_name":"jsmith/contact-captain","owner":"jsmith","description":"Class project for SWE4403","archived":false,"fork":false,"pushed_at":"2019-04-18T13:40:26.000Z","size":91,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2026-01-31T19:34:38.806Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsmith.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-03-27T17:31:38.000Z","updated_at":"2019-04-18T13:40:28.000Z","dependencies_parsed_at":null,"dependency_job_id":"a6e75f18-a827-4eb6-babd-2560ebc53100","html_url":"https://github.com/jsmith/contact-captain","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jsmith/contact-captain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsmith%2Fcontact-captain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsmith%2Fcontact-captain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsmith%2Fcontact-captain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsmith%2Fcontact-captain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsmith","download_url":"https://codeload.github.com/jsmith/contact-captain/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsmith%2Fcontact-captain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34107865,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-09T02:00:06.510Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T03:11:14.453Z","updated_at":"2026-06-09T12:31:13.898Z","avatar_url":"https://github.com/jsmith.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Overview\nIn this project, you need to design and implement a software application which implements one or more architectural pattern and 12 or more design patterns. If you implement more than 12 patterns in your project, for each additional pattern implemented and documented correctly, there will be a 1% bonus toward your course total scores. \n\nYou can develop any application in which you are interested, as long as your implementation fulfils the requirement to have one or more architectural patterns and 12 design patterns. If you do not have your own idea about what application you can develop, a suggestion is provided in the paragraphs at the end of this document.\n\n## Constraints\nYour application should be developed using Java.\n \n## Deliverables\nProject due: Thursday, Apr. 18, 2019 at 4:30 pm (AST). Please note that due to University requirements, no extensions can be given.\n\nFor this project, you need to submit the following 3 artifacts in a single zip file with firstName “CS4015Project_studentname.zip”, “SWE4403Project_studentname.zip”, or “CS6075Project_studentname.zip” in the course D2L.\n\nExported Design model with the main class diagram of your software application in Rational Software Architect Designer. In the class diagram, you only need to give class names and their relationships without class attributes/variables and operations/methods. \nA PDF document in which you need to describe how each of the architectural and design patterns is implemented in your application.\nExported source code of your Java application in Eclipse or Rational Software Architect Designer.\n\n## Application Suggestion\nWrite an application to schedule courses for the Bachelor of Computer Science undergraduate program. The system works as follows: professors receive teaching assignments and enter them into the system; they express preferences on their teaching times and enter them into the system; then courses are all combined into a single timetable, maximizing the number of teaching time preferences that can be accommodated. Some constraints on the courses are that there is a limited number of classes, each with a specified capacity (the user can enter these classes in the system); that one professor cannot teach in two courses at the same time; and a student who attends the program as indicated in the program schedule (which as well can be entered by the user) will be able to attend every course in her/his schedule for the semester. Electives can be superimposed, but there must be at least enough scheduled separately that a student can complete every semester of a program; whereas core courses cannot be superimposed. If you wish to use a model for the program, feel free to adapt the Computer Science program in the calendar, although the program described is not sophisticated enough to understand the distinction among electives. The design of this program lends itself to the use of both architectural and design patterns. Feel free to use an object-based database (as simple as just serializable Java objects), but other more formal databases (like SQL) can be used. Please gauge the complexity of this program, especially the matching algorithms, very carefully: the project is not about succeeding in implementing an optimal scheduling algorithm, but rather about implementing architectural and design patterns to create the project. The timeliness of your submission is paramount.\n\n# Running\nThe simplest way to run this application is from the command line. Go to the `src` folder and run the following commands:\n```\njavac *.java\njava Client\n```\n\n# Design Patterns\n## Creational\n- [x] Factory Method\n- [ ] Abstract Factory\n- [x] Prototype\n- [ ] Builder\n- [x] Singleton\n\n## Structural\n- [x] Adaptor\n- [ ] Bridge\n- [x] Decorator\n- [x] Proxy\n\n## Structural patterns\n- [ ] Flyweight\n- [x] Facade\n\n## Behavioral patterns\n- [x] Iterator\n- [x] Visitor\n- [x] cCommand\n- [x] Memento\n- [x] Observer\n- [ ] Mediator\n- [ ] Chain of Responsibility\n- [ ] Strategy\n- [ ] State\n- [x] Template Method\n- [ ] Interpreter\n\n## BONUS\n- [x] Fluent pattern\n\n# Links\n- [Swing Overview](http://web.mit.edu/6.005/www/sp14/psets/ps4/java-6-tutorial/components.html)\n- [captain.commands.Command Pattern](https://www.cs.mcgill.ca/~hv/classes/CS400/01.hchen/doc/command/command.html)\n- [Memento](https://stackoverflow.com/questions/14076772/difference-between-memento-pattern-and-serialization)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsmith%2Fcontact-captain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsmith%2Fcontact-captain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsmith%2Fcontact-captain/lists"}