Skip to content
Snippets Groups Projects
Commit 70593a61 authored by Jari Lehto's avatar Jari Lehto
Browse files

Published version

parents
Branches
No related tags found
No related merge requests found
contracts/
.classpath
.project
.history/
.idea
.jqwik-database
.lib/
.worksheet
.settings/
*.iml
*.ipr
*.iws
*.log
project/boot/
project/plugins/project/
project/project/
project/*-shim.sbt
project/target/
target/
openjfx/
public/report.txt
public/surefire-report.html
image: maven:3-eclipse-temurin-17
variables:
# This will supress any download for dependencies and plugins or upload messages which would clutter the console log.
# `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work.
MAVEN_OPTS: "-Dhttps.protocols=TLSv1.2 -Dmaven.repo.local=$CI_PROJECT_DIR/.m2/repository -Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=WARN -Dorg.slf4j.simpleLogger.showDateTime=true -Djava.awt.headless=true"
MAVEN_CLI_OPTS: "--batch-mode --errors --fail-at-end --show-version"
# -DinstallAtEnd=true -DdeployAtEnd=true"
# Cache downloaded dependencies and plugins between builds.
# To keep cache across branches add ''
cache:
key: "$CI_JOB_NAME"
paths:
- .m2/repository
build:
stage: build
script:
- mvn compile
artifacts:
paths:
- target/
test:
stage: test
script:
- mvn test
artifacts:
paths:
- target/
pages:
stage: deploy
script:
- ./report.sh || true
artifacts:
paths:
- public
only:
- master
# DTEK0066 exercise 3 template
## Tehtävänanto
Tehtävänanto löytyy Villestä. Osa tehtävistä tehdään Villessa ja osa palautetaan Gitlabin kautta. Linkki omaan repositorioon ilmoitetaan Villessä.
Forkkaa itsellesi tämä projekti pohjaksi. Huomaa, että kaikki harjoituskerran 3 tehtävät tehdään samaan projektiin eli pohja forkataan vain kerran.
Main.java luokka sisältää ohjelman käynnistävän main-rutiinin. Muihin luokkiin ei tule main-rutiinia lisätä. Harjoitustyöpohja on rakennettu niin,
että Main-luokan ajamalla kaikki harjoitustehtävät suoritetaan.
Huomaa, että testit täytyy kuitenkin ajaa erikseen.
## Tehtäviin vastaaminen
- Tehtävät
- Tehtävä 3
- Tehtävä 4
- Tehtävä 5
- Tehtävä 6
- Tehtävä 7
- Tehtävä 8
Maven-projektissa testit sijoitetaan test-hakemiston alle.
## Työnkulku
1. [Forkkaa tämä projekti](https://tech.utugit.fi/soft/tools/lectures/dtek2074/2023-fi/git/gitlab/#gitlab-projektin-forkkaus)
2. [Kloonaa oma kopiosi projektista](https://tech.utugit.fi/soft/tools/lectures/dtek2074/2023-fi/git/gitlab/#gitlab-projektin-haku-paikalliseksi)
3. Tee tehtäviä
4. [Tallenna muutokset gitiin](https://tech.utugit.fi/soft/tools/lectures/dtek2074/2023-fi/git/usage/#ty%C3%B6kopion-ja-indeksin-k%C3%A4sittely)
5. [Lähetä muutokset takaisin GitLabiin](https://tech.utugit.fi/soft/tools/lectures/dtek2074/2023-fi/git/gitlab/#paikallisen-muutoksen-l%C3%A4hett%C3%A4minen-gitlabiin)
Tarvittaessa toista vaiheet 3 -- 5.
## Mavenin käskyjä
Jos käytät jotain integroitua kehitysympäristöä (IntelliJ Idea, Eclipse, VS Code), et todennäköisesti tarvitse alla olevia komentoja.
[Lue tarvittaessa ohjeet](https://tech.utugit.fi/soft/tools/lectures/dtek2074/2023-fi/build/basic/).
```bash
$ mvn clean
$ mvn compile
$ mvn test
$ mvn exec:java
```
pom.xml 0 → 100644
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>fi.utu.tech</groupId>
<artifactId>ooj-exercise3</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<properties>
<!-- Configures the main class for this project (i.e. what to launch) -->
<project.mainclass>fi.utu.tech.ooj.exercise3.Main</project.mainclass>
<project.mainmodule>fi.utu.tech.ooj.exercise3</project.mainmodule>
<project.launcher>myapp</project.launcher>
<!-- The source encoding should always be utf-8. Don't change. -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- Version numbers for various modules -->
<jdk.version>17</jdk.version>
<jqwik.version>1.8.4</jqwik.version>
<junit.version>5.10.2</junit.version>
<junitplatform.version>1.10.2</junitplatform.version>
</properties>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Central Repository</name>
<url>https://repo.maven.apache.org/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>${junitplatform.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>net.jqwik</groupId>
<artifactId>jqwik</artifactId>
<version>${jqwik.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>com.diffplug.spotless</groupId>
<artifactId>spotless-maven-plugin</artifactId>
<version>2.43.0</version>
<configuration>
<formats>
<format>
<includes>src/**/*.java</includes>
<prettier>
<devDependencies>
<prettier>2.8.1</prettier>
<prettier-plugin-java>2.0.0</prettier-plugin-java>
</devDependencies>
<config>
<tabWidth>4</tabWidth>
<parser>java</parser>
</config>
</prettier>
</format>
<format>
<includes>
<include>pom.xml</include>
</includes>
<prettier>
<devDependencyProperties>
<property>
<name>prettier</name>
<value>2.8.1</value>
</property>
<property>
<name>@prettier/plugin-xml</name>
<value>2.2.0</value>
</property>
</devDependencyProperties>
<config>
<tabWidth>4</tabWidth>
<printWidth>100</printWidth>
<parser>xml</parser>
</config>
</prettier>
</format>
<format>
<includes>
<include>*.md</include>
<include>.gitignore</include>
</includes>
<trimTrailingWhitespace />
<endWithNewline />
<indent>
<spaces>true</spaces>
<spacesPerTab>4</spacesPerTab>
</indent>
</format>
</formats>
<java>
<includes>
<include>src/**/*.java</include>
</includes>
<trimTrailingWhitespace />
<endWithNewline />
<indent>
<spaces>true</spaces>
<spacesPerTab>4</spacesPerTab>
</indent>
<importOrder />
<removeUnusedImports />
<googleJavaFormat>
<version>1.15.0</version>
<style>AOSP</style>
</googleJavaFormat>
</java>
</configuration>
</plugin>
<!-- Run this app with exec:java -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>${project.mainclass}</mainClass>
</configuration>
</plugin>
<!-- Make the packaged jar executable -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<!-- DO NOT include log4j.properties file in your Jar -->
<excludes>
<exclude>**/log4j.properties</exclude>
</excludes>
<archive>
<manifest>
<!-- Jar file entry point -->
<mainClass>${project.mainclass}</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- JDK source/target versions -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version>
<configuration>
<compilerArgument>-Xlint:unchecked</compilerArgument>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
</configuration>
</plugin>
<!-- Also create a jar of the sources -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- JShell (jshell:run) -->
<plugin>
<groupId>com.github.johnpoth</groupId>
<artifactId>jshell-maven-plugin</artifactId>
<version>1.4</version>
</plugin>
<!-- UTU DbC Javadoc annotations -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<tags>
<tag>
<name>toDo</name>
<placement>a</placement>
<head>To do:</head>
</tag>
<tag>
<name>classInvariant</name>
<placement>t</placement>
<head>Class invariant:</head>
</tag>
<tag>
<name>classInvariantProtected</name>
<placement>t</placement>
<head>Protected class invariant:</head>
</tag>
<tag>
<name>classInvariantPrivate</name>
<placement>t</placement>
<head>Private class invariant:</head>
</tag>
<tag>
<name>abstractionFunction</name>
<placement>t</placement>
<head>Abstraction function:</head>
</tag>
<tag>
<name>pre</name>
<placement>cm</placement>
<head>Precondition:</head>
</tag>
<tag>
<name>post</name>
<placement>cm</placement>
<head>Postcondition:</head>
</tag>
<tag>
<name>postProtected</name>
<placement>cm</placement>
<head>Protected postcondition:</head>
</tag>
<tag>
<name>postPrivate</name>
<placement>cm</placement>
<head>Private postcondition:</head>
</tag>
<tag>
<name>time</name>
<placement>cmf</placement>
<head>Time complexity:</head>
</tag>
<tag>
<name>space</name>
<placement>cmf</placement>
<head>Space complexity:</head>
</tag>
<tag>
<name>correspondence</name>
<placement>a</placement>
<head>Correspondence:</head>
</tag>
<tag>
<name>download</name>
<placement>a</placement>
<head>Download:</head>
</tag>
</tags>
<show>protected</show>
<failOnError>false</failOnError>
<sourceFileExcludes>
<sourceFileExclude>**/module-info.java</sourceFileExclude>
</sourceFileExcludes>
</configuration>
</plugin>
<!-- JUnit & JQwik test integration -->
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.2.5</version>
</plugin>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>3.2.5</version>
</plugin>
</plugins>
</build>
</project>
public/favicon-32x32.png

1.61 KiB

<!DOCTYPE html>
<html>
<head>
<meta charSet="utf-8"/>
<link rel="icon" href="favicon-32x32.png" type="image/png"/>
<link rel="stylesheet" href="style.css">
<title>UTU / OOJ project report</title>
</head>
<body>
<div class="layout">
<div class="layout-container">
<header>
<div class="header">
<div class="header-content">
<a href="https://www.utu.fi">
<img class="sitebranding" alt="University of Turku" src="utulogo.png" />
</a>
<nav>
<ul>
<li class="active"><a href="/">Report</a></li>
</ul>
</nav>
</div>
</div>
</header>
<div class="main-content">
<h2>Project report</h2>
</div>
<div class="main-content">
<iframe src="report.txt" title="Build"></iframe>
</div>
<div class="main-content">
<iframe src="surefire-report.html" title="Surefire report"></iframe>
</div>
<footer>
<div class="footer">
<div class="footer-content">
<a href="https://www.utu.fi">
<img class="sitebranding" alt="University of Turku" src="utulogow.png"/>
</a>
<nav>
<ul>
<li>© 2019 <a href="https://soft.utu.fi/">Software engineering</a></li>
</ul>
</nav>
</div>
</div>
</footer>
</div>
</div>
</body>
</html>
@font-face {
font-family: "brother-1816";
src: url("https://use.typekit.net/af/e4f93d/00000000000000003b9b03cb/27/l?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=i3&v=3") format("woff2"), url("https://use.typekit.net/af/e4f93d/00000000000000003b9b03cb/27/d?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=i3&v=3") format("woff"), url("https://use.typekit.net/af/e4f93d/00000000000000003b9b03cb/27/a?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=i3&v=3") format("opentype");
font-style: italic;
font-weight: 300;
font-display: auto;
}
@font-face {
font-family: "brother-1816";
src: url("https://use.typekit.net/af/deeb73/00000000000000003b9b03d0/27/l?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n5&v=3") format("woff2"), url("https://use.typekit.net/af/deeb73/00000000000000003b9b03d0/27/d?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n5&v=3") format("woff"), url("https://use.typekit.net/af/deeb73/00000000000000003b9b03d0/27/a?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n5&v=3") format("opentype");
font-style: normal;
font-weight: 500;
font-display: auto;
}
@font-face {
font-family: "brother-1816";
src: url("https://use.typekit.net/af/f5cf85/00000000000000003b9b03d2/27/l?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n7&v=3") format("woff2"), url("https://use.typekit.net/af/f5cf85/00000000000000003b9b03d2/27/d?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n7&v=3") format("woff"), url("https://use.typekit.net/af/f5cf85/00000000000000003b9b03d2/27/a?primer=8c6cdece1802ac03951c30593622b1b6185a07621a4f8858e37fe29080c384e2&fvd=n7&v=3") format("opentype");
font-style: normal;
font-weight: 700;
font-display: auto;
}
:root {
--pageWidth: 894px;
--backgroundColor: #fff;
--colorUtu1: #8b5dcb;
--colorUtu2: #78c8d2;
--colorUtu3: #f8485e;
--colorUtu4: #adcb00;
--colorUtu5: #000;
--colorUtu6: #868686;
--colorUtu7: #b1b1b0;
--colorUtu8: #d9d9d9;
--colorUtu9: #ffffff;
}
html {
font: 120% brother-1816, sans-serif;
box-sizing: border-box;
overflow-y: scroll;
-ms-text-size-adjust: 100%;
-webkit-text-size-adjust: 100%;
margin: 0;
padding: 0;
}
.layout {
background-color: var(--colorUtu8);
padding-right:0;
padding-left:0;
}
.layout-container {
background-color: var(--colorUtu9);
margin: 0 auto;
max-width:100rem;
}
.main-content {
display: flex;
align-items: flex-start;
align-content: space-between;
flex-wrap: wrap;
}
.toc-container {
margin-left: -5em;
margin-right: 1em;
width: 20%;
flex-grow: 1;
position: sticky;
display: block;
border-radius: 15px;
padding: 0.5em;
padding-top: 2em;
padding-bottom: 2em;
background: var(--colorUtu8);
border: 2px solid var(--colorUtu5);
}
.toc-container a {
color: var(--colorUtu5);
text-decoration: none;
}
.toc-container a:hover {
color: var(--colorUtu5);
text-decoration: underline solid var(--colorUtu5);
}
.header a:hover {
color: var(--colorUtu5);
text-decoration: underline solid var(--colorUtu5);
}
.main-header {
}
.main-lecture {
max-width: 80%;
}
.main-content {
flex-grow: 1;
}
@media (max-width:60em) {
.main-content {
display: block;
}
.main-lecture {
max-width: 100%;
}
.toc-container {
margin: 1em auto 1em auto;
padding: 0.5em;
width: 90%;
}
}
.lecture-grid-container {
display: grid;
grid-template-columns: auto auto;
border-top: 1px solid var(--colorUtu5);
border-bottom: 1px solid var(--colorUtu5);
padding: 2px;
align-items: center;
width: 100%;
}
.lecture-grid-container2 {
display: grid;
grid-template-columns: auto;
border-top: 1px solid var(--colorUtu5);
border-bottom: 1px solid var(--colorUtu5);
padding: 2px;
align-items: center;
width: 100%;
}
.lecture-grid-item {
border: 0;
padding: 10px;
font-size: 16px;
text-align: center;
max-width: 100%;
margin: 0 auto;
}
.controls-right button {
margin-left: 0.5em;
}
.controls-left button {
margin-right: 0.5em;
}
.lecture-grid-item2:first-child {
border-right: 2px solid var(--colorUtu8);
}
@media (min-width:50em) {
.layout {
padding-right: 2em;
padding-left: 2em;
}
.main-content {
padding-right: 2.5em;
padding-left: 2.5em;
padding-bottom: 2.5em;
}
}
@media (min-width:60em) {
.layout {
padding-right: 3em;
padding-left: 3em;
}
.main-content {
padding-right: 3.25em;
padding-left: 3.25em;
padding-bottom: 3.25em;
}
}
@media (min-width:80em) {
.layout {
padding-right: 4em;
padding-left: 4em;
}
.main-content {
padding-right: 4em;
padding-left: 4em;
padding-bottom: 4em;
}
}
article,
aside,
details,
figcaption,
figure,
footer,
header,
main,
menu,
nav,
section,
summary {
display: block;
}
audio,
canvas,
progress,
video {
display: inline-block;
}
audio:not([controls]) {
display: none;
height: 0;
}
progress {
vertical-align: baseline;
}
[hidden],
template {
display: none;
}
a {
background-color: transparent;
-webkit-text-decoration-skip: objects;
}
a:active,
a:hover {
outline-width: 0;
}
abbr[title] {
border-bottom: none;
text-decoration: underline;
text-decoration: underline dotted;
}
b,
strong {
font-weight: inherit;
font-weight: bolder;
}
dfn {
font-style: italic;
}
h1 {
font-size: 2em;
margin: 0.67em 0;
}
mark {
background-color: #ff0;
color: #000;
}
small {
font-size: 80%;
}
sub,
sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
img {
border-style: none;
}
svg:not(:root) {
overflow: hidden;
}
code,
kbd,
pre,
samp {
font-family: monospace, monospace;
font-size: 1em;
}
figure {
margin: 1em 40px;
}
hr {
box-sizing: content-box;
height: 0;
overflow: visible;
}
button,
input,
optgroup,
select,
textarea {
font: inherit;
margin: 0;
}
optgroup {
font-weight: 700;
}
button,
input {
overflow: visible;
}
button,
select {
text-transform: none;
}
[type="reset"],
[type="submit"],
button,
html [type="button"] {
-webkit-appearance: button;
}
[type="button"]::-moz-focus-inner,
[type="reset"]::-moz-focus-inner,
[type="submit"]::-moz-focus-inner,
button::-moz-focus-inner {
border-style: none;
padding: 0;
}
[type="button"]:-moz-focusring,
[type="reset"]:-moz-focusring,
[type="submit"]:-moz-focusring,
button:-moz-focusring {
outline: 1px dotted ButtonText;
}
fieldset {
border: 1px solid silver;
margin: 0 2px;
padding: 0.35em 0.625em 0.75em;
}
legend {
box-sizing: border-box;
color: inherit;
display: table;
max-width: 100%;
padding: 0;
white-space: normal;
}
textarea {
overflow: auto;
}
[type="checkbox"],
[type="radio"] {
box-sizing: border-box;
padding: 0;
}
[type="number"]::-webkit-inner-spin-button,
[type="number"]::-webkit-outer-spin-button {
height: auto;
}
[type="search"] {
-webkit-appearance: textfield;
outline-offset: -2px;
}
[type="search"]::-webkit-search-cancel-button,
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
::-webkit-input-placeholder {
color: inherit;
opacity: 0.54;
}
::-webkit-file-upload-button {
-webkit-appearance: button;
font: inherit;
}
* {
box-sizing: inherit;
}
*:before {
box-sizing: inherit;
}
*:after {
box-sizing: inherit;
}
body {
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
margin: 0;
padding: 0;
color: hsla(0, 0%, 0%, 0.8);
font-weight: normal;
word-wrap: break-word;
font-kerning: normal;
-moz-font-feature-settings: "kern", "liga", "clig", "calt";
-ms-font-feature-settings: "kern", "liga", "clig", "calt";
-webkit-font-feature-settings: "kern", "liga", "clig", "calt";
font-feature-settings: "kern", "liga", "clig", "calt";
}
img {
max-width: 100%;
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
h1 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 2.25rem;
line-height: 1.1;
}
h2 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1.62671rem;
line-height: 1.1;
}
h3 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1.38316rem;
line-height: 1.1;
}
h4 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 1rem;
line-height: 1.1;
}
h5 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 0.85028rem;
line-height: 1.1;
}
h6 {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
color: inherit;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
font-weight: bold;
text-rendering: optimizeLegibility;
font-size: 0.78405rem;
line-height: 1.1;
}
hgroup {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
ul {
margin-left: 1.45rem;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
list-style-position: outside;
list-style-image: none;
}
ol {
margin-left: 1.45rem;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
list-style-position: outside;
list-style-image: none;
}
dl {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
dd {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
p {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
figure {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
pre {
margin-left: 0;
margin-right: 0;
margin-top: 0;
margin-bottom: 1.45rem;
font-size: 0.85rem;
line-height: 1.42;
background: hsla(0, 0%, 0%, 0.04);
border-radius: 3px;
overflow: auto;
word-wrap: normal;
padding: 1.45rem;
}
table {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
font-size: 1rem;
line-height: 1.45rem;
border-collapse: collapse;
width: 100%;
}
fieldset {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
blockquote {
margin-left: 1.45rem;
margin-right: 1.45rem;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
form {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
noscript {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
iframe {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
width: 100%;
min-height: 90vh;
}
hr {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: calc(1.45rem - 1px);
background: hsla(0, 0%, 0%, 0.2);
border: none;
height: 1px;
}
address {
margin-left: 0;
margin-right: 0;
margin-top: 0;
padding-bottom: 0;
padding-left: 0;
padding-right: 0;
padding-top: 0;
margin-bottom: 1.45rem;
}
b {
font-weight: bold;
}
strong {
font-weight: bold;
}
dt {
font-weight: bold;
}
th {
font-weight: bold;
}
li {
margin-bottom: calc(1.45rem / 2);
}
ol li {
padding-left: 0;
}
ul li {
padding-left: 0;
}
li > ol {
margin-left: 1.45rem;
margin-bottom: calc(1.45rem / 2);
margin-top: calc(1.45rem / 2);
}
li > ul {
margin-left: 1.45rem;
margin-bottom: calc(1.45rem / 2);
margin-top: calc(1.45rem / 2);
}
blockquote *:last-child {
margin-bottom: 0;
}
li *:last-child {
margin-bottom: 0;
}
p *:last-child {
margin-bottom: 0;
}
li > p {
margin-bottom: calc(1.45rem / 2);
}
code {
font-size: 0.85rem;
line-height: 1.45rem;
}
kbd {
font-size: 0.85rem;
line-height: 1.45rem;
}
samp {
font-size: 0.85rem;
line-height: 1.45rem;
}
abbr {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
}
acronym {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
}
abbr[title] {
border-bottom: 1px dotted hsla(0, 0%, 0%, 0.5);
cursor: help;
text-decoration: none;
}
thead {
text-align: left;
}
td,
th {
text-align: left;
border-bottom: 1px solid hsla(0, 0%, 0%, 0.12);
font-feature-settings: "tnum";
-moz-font-feature-settings: "tnum";
-ms-font-feature-settings: "tnum";
-webkit-font-feature-settings: "tnum";
padding-left: 0.96667rem;
padding-right: 0.96667rem;
padding-top: 0.725rem;
padding-bottom: calc(0.725rem - 1px);
}
th:first-child,
td:first-child {
padding-left: 0;
}
th:last-child,
td:last-child {
padding-right: 0;
}
tt,
code {
background-color: hsla(0, 0%, 0%, 0.04);
border-radius: 3px;
font-family: "SFMono-Regular", Consolas, "Roboto Mono", "Droid Sans Mono",
"Liberation Mono", Menlo, Courier, monospace;
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
}
pre code {
background: none;
line-height: 1.42;
}
code:before,
code:after,
tt:before,
tt:after {
letter-spacing: -0.2em;
content: " ";
}
pre code:before,
pre code:after,
pre tt:before,
pre tt:after {
content: "";
}
@media only screen and (max-width: 480px) {
html {
font-size: 100%;
}
}
header, footer {
padding-top: 0.6rem;
padding-bottom: 0.6rem;
}
footer {
background: var(--colorUtu5);
color: var(--colorUtu9);
}
.header, .footer {
font-size: 87.4975%;
padding-left: 3.25rem;
padding-bottom: 0.875rem;
padding-right: 3.25rem;
padding-top: 0.875rem;
}
.header-content {
width: 100%;
border-bottom: 1px solid var(--colorUtu8);
display: flex;
flex-wrap: wrap;
align-items: flex-end;
justify-content: space-between;
}
.footer-content {
width: 100%;
display: flex;
flex-wrap: wrap;
align-items: flex-start;
justify-content: space-between;
}
.header nav, .footer nav {
display: block;
flex: 1 0 auto;
padding-bottom: 0.5em;
}
.footer nav {
display: block;
flex: 1 0 auto;
padding-top: 0.5em;
padding-bottom: 0;
}
.header ul, .footer ul {
float: right;
margin: 0 -0.5em;
padding: 0;
display: flex;
}
.header li, .footer li {
list-style: none;
padding: 0;
margin: 0 1em;
text-transform: uppercase;
font-weight: bold;
}
.header a {
color: var(--colorUtu5);
text-decoration: none;
}
.footer a {
color: var(--colorUtu9);
text-decoration: none;
}
.header a:hover {
color: var(--colorUtu5);
text-decoration: underline solid var(--colorUtu5);
}
.header .active {
color: var(--colorUtu5);
text-decoration: underline solid var(--colorUtu5);
}
.footer a:hover {
color: var(--colorUtu9);
text-decoration: underline solid var(--colorUtu9);
}
.sitebranding {
width: 14.040rem;
height: 3.967rem;
flex: 0 0 auto;
flex-shrink: 0;
margin: 0;
margin-bottom: 1em;
}
@media (min-width:50em) {
.header, .footer {
font-size: 91.665%;
padding-left: 3.1rem;
padding-bottom: 0.94rem;
padding-right: 3.1rem;
padding-top: 0.94rem;
}
.sitebranding {
width: 15.100rem;
height: 4.267rem;
}
}
@media (min-width:60em) {
.header, .footer {
font-size: 87.4975%;
padding-left: 4rem;
padding-bottom: 1.1rem;
padding-right: 4rem;
padding-top: 1.1rem;
}
.sitebranding {
width: 16.400rem;
height: 4.634rem;
}
}
@media (min-width:80em) {
.header, .footer {
font-size: 83.33%;
padding-left: 5rem;
padding-bottom: 1.25rem;
padding-right: 5rem;
padding-top: 1.25rem;
}
.sitebranding {
width: 17.700rem;
height: 5.002rem;
}
}
public/utulogo.png

13 KiB

public/utulogow.png

19.7 KiB

#!/bin/sh
find src > public/report.txt
mvn clean test 2>&1 >> public/report.txt
mvn surefire-report:report
cp target/site/surefire-report.html public/
package fi.utu.tech.ooj.exercise3;
import fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma.AsiakasRekisteriohjelmanKaynnistin;
import fi.utu.tech.ooj.exercise3.opintorekisteri.OpintorekisterinKaynnistin;
public class Main {
public static void main(String[] args) {
System.out.println("DTEK0066 2024 syksy, Tehtäväkerta 3");
/* Tämä main-metodi on ainoa, joka tarvitaan kaikkien tehtävien suorittamiseksi.
Alla olevat kutsut suorittavat kaikkien harjoitustehtävien ajot.
*/
System.out.println("Tehtäväpohja käynnistyy");
AsiakasRekisteriohjelmanKaynnistin.kaynnistaOhjelma();
OpintorekisterinKaynnistin.kaynnistaOhjelma();
System.out.println("Tehtävien suoritus on päättynyt");
}
}
package fi.utu.tech.ooj.exercise3.asiakasrekisteriohjelma;
public class AsiakasRekisteriohjelmanKaynnistin {
public static void kaynnistaOhjelma() {
System.out.println("------ Asiakas- ja tuoterekisteriohjelman demo käynnistyy ------");
/*
* Tämä rutiini suoritetaan automaattisesti, kun tehtäväpohja suoritetaan
*
* Lisää tähän Asiakas- ja tuoterekisteriohjelman demonstrointiin tarvittava koodi
*
* */
System.out.println("------ Asiakas- ja tuoterekisteriohjelman demo päättyy ------");
}
}
package fi.utu.tech.ooj.exercise3.opintorekisteri;
public class OpintorekisterinKaynnistin {
public static void kaynnistaOhjelma() {
System.out.println("------ Opintorekisteriohjelman demo käynnistyy ------");
/*
* Tämä rutiini suoritetaan automaattisesti, kun tehtäväpohja suoritetaan
*
* Jos haluat kokeilla opintorekisterisi toimintaa, voit tehdä sen tässä rutiinissa
*
* */
System.out.println("------ Opintorekisteriohjelman demo päättyy ------");
}
}
module fi.utu.tech.ooj.exercise3 {
exports fi.utu.tech.ooj.exercise3;
opens fi.utu.tech.ooj.exercise3;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment