Вы находитесь на странице: 1из 17

Министерство Просвещения Республики Молдова

Технический Университет Молдовы


Факультет Вычислительной Техники, Информатики и Микроэлектроники
Департамент Программной Инженерии и Автоматики

Лабораторной работе № 2
по дисциплине «PAM»

Тема: Organiser Mobile Application (DAILY PLANNER)

Выполнила:

Проверил: Русу К.

Кишинев 2017
Scopul lucrării de laborator:
De realizat aplicație tip Organiser pe platforma aleasă.
La formarea și proiectarea aplicațiilor sunt introduse puncte stricte,
ce sunt obligatorii de respectat. La discreția personală rămâne designul aplicației
și API-ul/Framework-ul în care va fi dezvoltată lucrarea de laborator #2. Componentele
și structura fiecărei Activități va fi descrisă mai jos.
UI Components
Aplicația va conține minim 3 Activități de baza care vor fi numerotate în lucrare sub forma:
1. MainActivity (structura/componente)

 Calendar View (custom or default)


 Buttons (Add/Remove/Update)
 Căutare (caută conform cuvintelor cheie)

2. AddtActivity

 Data/Time controller
 Info TextBox
 Buttons
 și altele (la discreție conform specificului aplicației)

3. UpdateActivity - practic e una și aceeași activitate de la Add, doar ca completata deja.


Datele operaționale din interiorul aplicației vor fi stocate în fișier/e XML forma cărora rămâne
la discreția
personală. (cuvinte cheie, XML Serialization).
Logical/Operational Component

Ход работы:

Для реализации задания я работала в двух activity: MainActivity (для основного окна, где
будут располагаться календарь, текст-бокс для ввода поиска, кнопка поиска события и
activity с именем AddActivity. Листинги обоих activity и xml-представление layout-ов я
приведу ниже.

Язык XML предназначен для хранения и передачи данных. HTML же предназначен для
отображения данных.

Что такое XML?

 XML - аббревиатура от англ. eXtensible Markup Language (пер. расширяемый язык


разметки).
 XML – язык разметки, который напоминает HTML.
 XML предназначен для передачи данных, а не для их отображения.
 Теги XML не предопределены. Вы должны сами определять нужные теги.
 XML описан таким образом, чтобы быть самоопределяемым.

Разница между XML и HTML

XML не является заменой HTML. Они предназначены для решения разных задач: XML
решает задачу хранения и транспортировки данных, фокусируясь на том, что такое эти
самые данные, HTML же решает задачу отображения данных, фокусируясь на том, как эти
данные выглядят. Таким образом, HTML заботится об отображении информации, а XML о
транспортировке информации.
Для работы с календарём мы воспользовались разработкой компактного календаря
https://github.com/SundeepK/CompactCalendarView, подключив её как зависимость для
нашего проекта.
Органайзер является средством управления временем. Предварительное планирование дел
помогает повысить плодотворность любой деятельности, как личной, так и
профессиональной. Поэтому и человека, который консультирует организации и частных
лиц в сфере повышения эффективности управления временем, тоже иногда называют
«органайзер»; в США существует Национальная ассоциация профессиональных
органайзеров (NAPO).
В XXI веке под органайзером чаще понимается программное
обеспечение для ПК и мобильных устройств.
Скриншоты работы программы

Рисунок 1 – Главный экран


Рисунок 2 – Опции выбора
Рисунок 3 – Создание/Изменение события
Рисунок 4 – Поиск события
Рисунок 5 – Выбор события
Вывод:

В ходе данной лабораторной работы мы создали собственный Organiser Mobile


Application (DAILY PLANNER). Мы научились работать с XML файлами, создавать,
удалять и изменять события, подключили компактный календарь, различные библиотеки
для обработки событий. Также мы повысили свой уровень знания в области интерфейса
мобильного приложения. Таким образом, мы поняли, как можно взаимодействовать с
готовыми продуктами для создания собственного уникального приложения.
Библиография:

1. https://github.com/SundeepK/CompactCalendarView

2. http://developer.alexanderklimov.ru/android/theory/xmlparsers.php

3. http://msiter.ru/tutorials/uchebnik-xml-dlya-nachinayushchih/chto-takoe-xml

4. https://ru.wikipedia.org/wiki/XML
ПРИЛОЖЕНИЕ
Код программы
MainAcivity.java
package com.example.olgaa.pam_lab2;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.graphics.Color;
import android.os.Environment;
import android.support.v7.app.AlertDialog; import
android.support.v7.app.AppCompatActivity; import
android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;

import com.github.sundeepk.compactcalendarview.CompactCalendarView;
import com.github.sundeepk.compactcalendarview.domain.Event;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; import
javax.xml.transform.stream.StreamResult;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MainActivity extends AppCompatActivity {

@BindView(R.id.calendar_view)
CompactCalendarView calendar;

@BindView(R.id.etSearch)
EditText etSearch;

@BindView(R.id.btnSearch)
Button btnSearch;

@BindView(R.id.list)
ListView list;

private Date selectedDate;


ArrayList<XML_File.Event> events;
ArrayList<String> items = new
ArrayList<>(); AlertDialog dialog;

@Override
protected void onCreate(Bundle
savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);

final ArrayAdapter adapter = new


ArrayAdapter<>(this,
android.R.layout.simple_list_item_1,
items);

//………………………………………………………………………………………………………………….
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
if (requestCode == 1) {
try {
update();
} catch (IOException | SAXException |
ParserConfigurationException e) {
e.printStackTrace();
}
}
}
}

AddActivity.java
package com.example.olgaa.pam_lab2;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View; import
android.widget.Button;
import android.widget.EditText;
import android.widget.NumberPicker;
import org.xml.sax.SAXException;

import java.io.IOException;
import java.util.Date;
import java.util.HashMap;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.TransformerException;

import butterknife.BindView;
import butterknife.ButterKnife;

public class AddActivity extends AppCompatActivity {

@BindView(R.id.hours)
NumberPicker hours;

@BindView(R.id.minutes)
NumberPicker minutes;

@BindView(R.id.message)
EditText message;

@BindView(R.id.confirm)
Button confirm;

private Date date;


private boolean update;
String messageUpdate;
String id;

@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
ButterKnife.bind(this);

hours.setMinValue(0);
hours.setMaxValue(23);

minutes.setMinValue(0);
minutes.setMaxValue(59);

if

//………………………………………………………………………………………………..

} catch (IOException | ParserConfigurationException |


SAXException | TransformerException e) {
e.printStackTrace();
}
finish();
}
});
}
}
XML_Helper.java
package com.example.olgaa.pam_lab2;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.Environment;
import android.support.annotation.NonNull;
import android.util.Xml;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import
javax.xml.parsers.ParserConfigurationException; import
javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; import
javax.xml.transform.stream.StreamResult;

import static android.content.Context.ALARM_SERVICE;

public class XML_Helper {

private static File userData;

@NonNull
private static File getUserData() throws IOException {
//………………………………………………………………………………………..

private static void setAlarm(Context context, long time, String


message, int id) {
Intent intent = new Intent(context, Alarm.class);
intent.putExtra("message", message);

PendingIntent pendingIntent = PendingIntent.getBroadcast(context,


id, intent, 0);
AlarmManager alarmManager = (AlarmManager)
context.getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, time, pendingIntent);
}
}

XML_File.java
package com.example.olgaa.pam_lab2;

import android.os.Environment;
import android.util.Xml;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.util.ArrayList;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import
javax.xml.parsers.ParserConfigurationException;

public class XML_File{


public static ArrayList<Event> getFromXml() throws IOException,
SAXException, ParserConfigurationException {
File file = new
File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" +
"lab2" + "/");
file.mkdirs();
File file1 = new File(file, "userData.xml");
if (!file1.exists()) {
file1.createNewFile();
FileOutputStream fileos = new FileOutputStream(file1);
XmlSerializer xmlSerializer = Xml.newSerializer();
StringWriter writer = new StringWriter();
xmlSerializer.setOutput(writer);
xmlSerializer.startDocument("UTF-8", true);
xmlSerializer.startTag(null, "eventData");

xmlSerializer.endTag(null, "eventData");
xmlSerializer.endDocument();
xmlSerializer.flush();
String dataWrite = writer.toString();
fileos.write(dataWrite.getBytes());
fileos.close();
}

//……………………………………………………………………………………………………

static class Event {


long time;
String message;
String id;

Event(long time, String message, String id)


{ this.time = time;
this.message = message;
this.id = id;
}

}
}
Alarm.java
package com.example.olgaa.pam_lab2;

import android.app.Notification;
import android.app.NotificationManager;
import android.content.BroadcastReceiver;
import android.content.Context; import
android.content.Intent;
import android.widget.Toast;

import static android.content.Context.NOTIFICATION_SERVICE;

public class Alarm extends BroadcastReceiver


{ @Override
//………………………………………………………….

notificationManager.notify(0, n);
}
}