Пользовательский интерфейс
СОДЕРЖАНИЕ
Введение
Целью
моего курсового проекта
Все действия в программе должны выполнятся на интуитивно–понятном уровне, так, чтобы человек, который впервые работает в среде, не испытывал трудностей при работе.
Современные приложения должны быть безопасны, высокопроизводительны, работать в распределенной среде, быть нейтральны к архитектуре. Требования к переносимости заставили отказаться от традиционного способа создания и доставки бинарных файлов, содержащих машинные коды и, следовательно, привязанных к определенной платформе. Созданная компанией Sun Microsystems система разработки Java удовлетворяет всем этим требованиям.
Java – объектно-ориентированный язык, удобный и надёжный в эксплуатации благодаря таким своим достоинствам, как многозадачность, поддержка протоколов Internet и многоплатформенность. Java – это интерпретируемый язык, и каждая Java-программа компилируется для гипотетической машины, называемой Виртуальная Машина Java. Результатом такой компиляции является байт-код Java, который в свою очередь может выполняться на любой операционной системе при условии наличия там системы времени выполнения Java, которая интерпретирует байт-код в реальный машинный код конкретной системы.
Для создания программного комплекса была выбрана среда разработки Eclipse. Она наиболее удобна для написания программ на Java. Eclipse – это расширяемая платформа разработчика, предназначенная для поддержки любого языка программирования. Гибкость Eclipse обеспечивается за счёт подключаемых модулей, благодаря чему возможна разработка не только на Java, но и на других языках, таких как C/C++, Perl, Python, PHP, Erlang и прочие. Eclipse – это проект с открытым исходным кодом. Если понадобится какая-то функциональность, то с большой степенью вероятности найдется бесплатный подключаемый модуль, обеспечивающий эту функциональность в Eclipse.
- ПРОГРАММНЫЙ ИНТЕРФЕЙС
- Описание классов
Разработанный проект включает десять классов, содержащих переменные и процедуры для считывания, обработки и записи данных в файлы. Классы распределены по пакетам для удобства использования.
Класс public class Vuz находится в пакете by.gsu.asoi, является базовым классом и содержит поля, описывающие элементы множества данных:
– name типа String – описывает краткое название ВУЗа;
– year типа int – описывает дату создания;
– nomStud типа double – описывает количество студентов.
Все поля имеют идентификатор доступа private.
В данном классе содержатся процедуры, обеспечивающие доступ к полям класса, вывод информации на экран, а также конструкторы:
public Vuz(String name, int year, double nomStud) – конструктор, инициализирующий все переменные класса, значениями, заданными в качестве параметров, а именно название ВУЗа, дата основания, количество студентов;
public Vuz() – конструктор без параметров, очищающий переменные объекта класса;
public String getName() – возвращает название ВУЗа строкового типа;
public void setName(String name) – конструктор заполнения объекта из потока, заносит название ВУЗа. В конструктор передается переменная строкового типа;
public double getNomStud() – возвращает количество студентов вещественного типа;
public void setNomStud(double nomStud) – конструктор заполнения объекта из потока, заносит количество студентов. В конструктор передается переменная вещественного типа;
public int getYear() – возвращает дату создания целого типа;
public void setYear(int year) – конструктор заполнения объекта из потока, заносит дату основания ВУЗа. В конструктор передается переменная целого типа;
public String toString() – конструктор приведения из строки символов (возвращает поля класса, разделенные символом «точка с запятой»).
Класс public class Academ находится в пакете by.gsu.asoi, является наследником класса Vuz, содержит поля, имеющие идентификатор доступа private:
– profil типа String – описывает учебный профиль академии;
– oplata типа double – описывает сумму оплаты за обучение;
– srocObuch типа int – описывает срок обучения;
В данном классе содержатся процедуры, обеспечивающие доступ к полям класса, подсчет и вывод информации на экран, а также конструкторы:
public Academ(String name, int year, double nomStud, String profil, double oplata, int srocObuch) – конструктор, инициализирующий все переменные класса, значениями, заданными в качестве параметров, а именно поля базового класса (name, year, nomStud) и собственные поля (profil, oplata, rocObuch);
public double getOplata() – возвращает сумму оплаты за обучение вещественного типа;
public void setOplata(double oplata) – конструктор заполнения объекта из потока, заносит сумму оплаты. В конструктор передается переменная вещественного типа;
public String getProfil() – возвращает профиль академии строкового типа;
public void setProfil(String profil) – конструктор заполнения объекта из потока, заносит профиль академии. В конструктор передается переменная строкового типа;
public int getSrocObuch() – возвращает срок обучения целого типа;
public void setSrocObuch(int srocObuch) – конструктор заполнения объекта из потока, заносит срок обучения. В конструктор передается переменная целого типа;
public double oneVipl() – подсчитывает и возвращает размер выплат в полугодие вещественного типа;
public String toString() – конструктор приведения из строки символов (возвращает поля класса, разделенные символом «точка с запятой», а также результат вычисления размера оплаты за полугодие).
Класс public class Univer находится в пакете by.gsu.asoi, является наследником класса Vuz, содержит поля, имеющие идентификатор доступа private:
– facult типа String – описывает факультеты университета;
– budzet типа int – описывает количество бюджетных мест;
– platno типа int – описывает количество платных мест;
В данном классе содержатся процедуры, обеспечивающие доступ к полям класса, подсчет и вывод информации на экран, а также конструкторы:
public Univer(String name, int year, double nomStud, String facult, int budzet, int platno) – конструктор, инициализирующий все переменные класса, значениями, заданными в качестве параметров. В конструктор передаются значения полей базового класса (String name, int year, double nomStud) и собственных полей (String facult, int budzet, int platno) соответствующих типов;
public int getBudzet() – возвращает количество бюджетных мест целого типа;
public void setBudzet(int budzet) – конструктор заполнения объекта из потока, заносит количество бюджетных мест. В конструктор передается переменная целого типа;
public String getFacult() – возвращает название факультета строкового типа;
public void setFacult(String facult) – конструктор заполнения объекта из потока, заносит название факультета. В конструктор передается переменная строкового типа;
public int getPlatno() – возвращает количество платных мест целого типа;
public void setPlatno(int platno) – конструктор заполнения объекта из потока, заносит количество платных мест. В конструктор передается переменная целого типа;
public int sumStud() – вычисляет и возвращает общее количество студентов на факультете целого типа;
public String toString() – конструктор приведения из строки символов (возвращает поля класса, разделенные символом «точка с запятой» и результат вычисления количества студентов на факультете).
Класс public class Institut находится в пакете by.gsu.asoi, является наследником класса Vuz, содержит поля, имеющие идентификатор доступа private:
– otdelen типа String – описывает учебное отделение;
– kolStud типа int – описывает количество студентов на отделении;
– sumStip типа double – описывает сумму стипендий;
В данном классе содержатся процедуры, обеспечивающие доступ к полям класса, подсчет и вывод информации на экран, а также конструкторы:
public Institut(String name, int year, double nomStud, String otdelen, int kolStud, double sumStip) – конструктор, инициализирующий все переменные класса, значениями, заданными в качестве параметров. В конструктор передаются значения полей базового класса (String name, int year, double nomStud) и собственные поля (String otdelen, int kolStud, double sumStip) соответствующих типов;
public int getKolStud() – возвращает количество студентов на отделении целого типа;
public void setKolStud(int kolStud) – конструктор заполнения объекта из потока, заносит количество студентов на отделении. В конструктор передается переменная целого типа;
public String getOtdelen() – возвращает название отделения строкового типа;
public void setOtdelen(String otdelen) – конструктор заполнения объекта из потока, заносит название отделения. В конструктор передается переменная строкового типа;
public double getSumStip() – возвращает сумму стипендий вещественного типа;
public void setSumStip(double sumStip) – конструктор заполнения объекта из потока, заносит сумму стипендий. В конструктор передается переменная вещественного типа;
public double averStip() – подсчитывает и возвращает среднюю стипендию;
public String toString() – конструктор приведения из строки символов (возвращает поля класса, разделенные символом «точка с запятой» и размер средней стипендии).
Класс public class CompList подключает интерфейс Comparator<Vuz>, находится в пакете by.gsu.asoi. Данный класс предназначен для сортировки записей по названиям ВУЗов и принадлежности их к определенным классам.
Сравнение записей происходит при помощи процедуры public int compare(Vuz ref1, Vuz ref2), в которую передаются два значения сравниваемых переменных типа Vuz, а возвращается результат целого типа.
Класс public abstract class ListVuz – это суперкласс для классов создаваемых Factory. Он включает абстрактные процедуры, которые будут переопределены в классах-наследниках:
public abstract void readFile(String fileName);
public abstract void print();
public abstract void insert(Vuz ref);
public abstract int delete(int index);
public abstract Vuz getItem(int index);
public abstract int getSize();
public abstract int find(Vuz obj);
public abstract List<Vuz> getVuzList();
public abstract void setVuzList(List<Vuz> vuzList);
public abstract void saveCsv (String fileName);
public abstract void saveDb (String fileName).
Класс public class ClassFactory – это класс-фабрика, реализующий подключение определенного класса в зависимости от формата файла, с которым предстоит работать. Данный класс содержит перечисление enum Signs {DB1, VUZ}, где элементами являются имена имеющихся файлов и статическую процедуру public static ListVuz getClassFromFactory(String id), с помощью которой происходит выбор класса из Factory.
Класс public class ReadCsv является подклассом ListVuz, служит для обработки данных из файлов с расширением *.csv. Содержит поле List<Vuz> vuzList, организующее список. Включает процедуры для чтения из файла и записи в коллекцию данных о ВУЗах, обработки данных в коллекции и записи из коллекции в файл:
public ReadCsv() – конструктор без параметров;
public void readFile(String vuzCsv) – процедура, осуществляющая чтение из файла. Определяет тип записи по значению идентификатора и заносит в коллекцию. В процедуру передается переменная строкового типа, являющаяся именем считываемого файла;
public void print() – вывод записей из коллекции на экран в виде: одна запись – одна строка;
public void insert(Vuz ref) – процедура записывает элемент в конец коллекции. В процедуру передается переменная типа Vuz;
public int delete(int index) – удаление элемента с соответствующим индексом. В процедуру передается переменная целого типа, являющаяся индексом записи. Если индекс меньше нуля, то он просто возвращается, если он больше размера коллекции, то возвращается размер коллекции, а если запись найдена, то она удаляется;
public getItem(int index) – возвращает запись типа Vuz с соответствующим индексом;
public int getSize() – возвращает количество записей в коллекции, значение целого типа;
public int find(Vuz obj) – поиск определенной записи в коллекции. В процедуру передается переменная типа Vuz, которая сравнивается с записями в коллекции, если такая же запись найдена, то возвращается ее индекс целого типа, а если не найдена, то выводится соответствующее сообщение;
public List<Vuz> getVuzList() – возвращает коллекцию;
public void setVuzList(List<Vuz> vuzList) – конструктор заполнения из потока. В конструктор передается переменная параметризованного типа List<Vuz>;
public void saveCsv(String filename) – процедура записывает в файл с расширением *.csv. В процедуру передается переменная строкового типа, являющаяся именем записываемого файла;
public void saveDb(String filename) – процедура записывает в файл с расширением *.mdb. В процедуру передается переменная строкового типа, являющаяся именем записываемого файла.
Класс public class ReadDb является подклассом ListVuz, служит для обработки данных из файлов с расширением *.mdb. Содержит поле List<Vuz> vuzList, организующее список. Чтение из файла и запись в файл производится при помощи SQL-запросов. Включает процедуры для чтения из файла и записи в коллекцию данных о ВУЗах, обработки данных в коллекции и записи из коллекции в файл:
public ReadDb() – конструктор без параметров;
public void readFile(String vuzDb) – процедура, осуществляющая чтение из базы данных при помощи SQL–запросов, заносит полученные результаты в коллекцию. В процедуру передается переменная строкового типа, которая является именем считываемой базы данных;
public void print() – вывод записей из коллекции на экран в виде: одна запись – одна строка;
public void insert(Vuz ref) – процедура записывает элемент в конец коллекции. В процедуру передается переменная типа Vuz;
public int delete(int index) – удаление элемента с соответствующим индексом. В процедуру передается переменная целого типа, являющаяся индексом записи. Если индекс меньше нуля, то он просто возвращается, если он больше размера коллекции, то возвращается размер коллекции, а если запись найдена, то она удаляется;
public getItem(int index) – возвращает запись типа Vuz с соответствующим индексом;
public int getSize() – возвращает количество записей в коллекции, значение целого типа;
public int find(Vuz obj) – поиск определенной записи в коллекции. В поцедуру передается переменная типа Vuz, которая сравнивается с записями в коллекции, если такая же запись найдена, то возвращается ее индекс целого типа, а если не найдена, то выводится соответствующее сообщение;
public List<Vuz> getVuzList() – возвращает коллекцию;
public void setVuzList(List<Vuz> vuzList) – конструктор заполнения из потока. В конструктор передается переменная параметризованного типа List<Vuz>;
public void saveCsv(String filename) – процедура записывает в файл с расширением *.csv. В процедуру передается переменная строкового типа, являющаяся именем записываемого файла;
public void saveDb(String filename) – процедура записывает в файл с расширением *.mdb. В процедуру передается переменная строкового типа, являющаяся именем записываемого файла.
Класс public class Runner включает процедуру public static void main(String[] args), благодаря которой происходит запуск разработанной программы. В данной процедуре происходит определение объектов класса ListVuz. В дальнейшем эти объекты по запросу Пользователя вызывают необходимые процедуры обработки данных: считывание из файла, вывод на экран, поиск записи, добавление и удаление записи, сортировка коллекции, запись в файл. Вся информация и результаты обработки выводятся на консоль.
- Описание файлов
Программа считывает данные из файлов различных форматов, которые должны иметь определенную структуру.
Разработанный программный комплекс осуществляет считывание и запись файлов с расширениями *.csv и *.mdb, в которых содержится информация о ВУЗах.
Файл с расширением *.csv представляет собой таблицу, колонки которой содержат соответствующую информацию: название ВУЗа, дата основания, количество студентов, тип (академия, институт, университет), дополнительная информация в зависимости от типа ВУЗа.
Файл с расширением *.mdb представляет собой базу данных, состоящую из четырех таблиц:
Vuz – данная таблица содержит общую информацию о ВУЗах (название, дата основания, количество студентов);
Univer – данная таблица содержит информацию об университетах (названия факультетов, количество бюджетных мест, количество платных мест);
Institut – данная таблица содержит информацию об институтах (учебный профиль, количество стипендиатов, сумма стипендий);
Academ – данная таблица содержит информацию об академиях (учебный профиль, оплата, срок обучения);
Ниже в таблице 1 представлена структура таблицы «Vuz».
Таблица 1 – Структура таблицы «Vuz»
| Название поля | Тип поля | Описание поля |
| idName | Счетчик | Код ВУЗа |
| name | Текстовый | Название ВУЗа |
| year | Числовой | Дата создания |
| nomStud | Числовой | Количество студентов |
В отношении, состоящем из этих атрибутов, можно выделить первичный ключ – это поле idName.
Далее в таблице 2 представлена структура таблицы «Univer».
Таблица 2 – Структура таблицы «Univer»
| Название поля | Тип поля | Описание |
| idName | Числовой | Код ВУЗа |
| fakultet | Текстовый | Название факультета |
| butzet | Числовой | Количество бюджетных мест |
| platno | Числовой | Количество платных мест |
В данной таблице нет необходимости вводить ключевое поле, так как она носит дополнительную информацию о ВУЗе и не имеет уникальных полей. Поле idName является внешним ключом и обеспечивает возможность установить связь данных таблицы «Univer» с таблицей «Vuz».
Далее в таблице 3 представлена структура таблицы «Institut».
Таблица 3 – Структура таблицы «Institut»
| Название поля | Тип поля | Описание |
| idName | Числовой | Код ВУЗа |
| profil | Текстовый | Учебный профиль |
| kolStud | Числовой | Количество стипендиатов |
| sumStip | Числовой | Сумма стипендий |
В данной таблице не вводится ключевое поле, так как она не имеет уникальных полей и носит дополнительную информацию о ВУЗе. Поле idName является внешним ключом и обеспечивает возможность установить связь данных таблицы «Institut» с таблицей «Vuz».
Далее в таблице 4 представлена структура таблицы «Academ».
Таблица 4 – Структура таблицы «Academ»
| Название поля | Тип поля | Описание |
| idName | Числовой | Код ВУЗа |
| profil | Текстовый | Учебный профиль |
| oplata | Числовой | Размер оплаты |
| srocObuch | Числовой | Срок обучения |
В данной таблице нет ключевого поля, так как она не имеет уникальных полей и носит дополнительную информацию о ВУЗе. Поле idName является внешним ключом и обеспечивает возможность установить связь данных таблицы «Academ» с таблицей «Vuz».
Схема данных отражающая связи в данных представлена на рисунке 1.
Рисунок 1 – Схема данных базы данных «ВУЗы Гомеля»
Из рисунка 1 видно, что основной таблицей базы является таблица «Vuz». Остальные таблицы связаны с этой таблицей.
- ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС
Для того чтобы начать работу с программой необходимо в среде разработки Eclips открыть проект OopKurs. В нем выбрать файл Runner.java и запустить на выполнение.
Так как разрабатывалось консольное приложение, то весь диалог с пользователем производится через консоль. Данный диалог реализован посредством вывода на консоль программой понятного пользователю запроса, последующего считывания ответа и соответствующей обработки. После начала работы на консоль выводится просьба ввести имя файла, из которого будет считываться информация для дальнейшей обработки.
В
контрольном примере будут
Рисунок 2 – Ввод имен файлов
Если такие файлы найдены, то происходит обработка данных, а если нет, то выводится сообщение об ошибке.
Для контрольного примера будут использован файл vuz.csv, содержимое которого представлено на рисунке 3, и база данных db1.mdb.