Музыкальный каталог

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    488,38 Кб
  • Опубликовано:
    2015-04-24
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Музыкальный каталог

Федеральное государственное бюджетное образовательное учреждение

высшего профессионального образования

"Самарский государственный аэрокосмический университет имени академика С.П. Королева

(национальный исследовательский университет)"

Факультет информатики

Кафедра технической кибернетики






Курсовой проект

Музыкальный каталог


Выполнили студенты:

Еникеев Р.М., Адушкин А.С.

Группа: 6407

Руководитель работы:

Белоусов А.А.



Самара 2014

Оглавление

Введение

. Структура базы данных

.1 Схема базы данных

.2 Описание таблиц

. Архитектура приложения

. Интерфейс пользователя

.1 Страница регистрации

.2 Главная страница

.3 Страница поиска

.4 Приложение для работы с базами данных

Приложение

Введение

Информационная система "Музыкальный каталог" предназначена для обеспечения удобной навигации пользователей в мире музыки. Обычным пользователям система предоставляет следующие возможности: регистрация на сервисе; поиск музыки по названиям песен; оценивание песен. Администратор может управлять базой данных с помощью отдельного приложения.

. Структура базы данных

.1 Схема базы данных

На рис. 1 приведена схема используемой базы данных.

Рисунок 1 -Схема базы данных.

SQL-скрипты создания таблиц приведены в приложении А.

.2 Описание таблиц

Краткое описание таблиц используемой схемы базы данных приведено в таблице 1.

Таблица 1. Описание таблиц базы данных.

Таблица

Атрибут

Описание

artists


Содержит информацию об исполнителях альбомов.


artist_id

Уникальный идентификатор исполнителя.


name

Имя исполнителя.

albums


Содержит информацию об альбомах.


album_id

Уникальный идентификатор альбома.


name

Название альбома.


released

Год выпуска альбома.

songs


Содержит информацию о конкретной песне.


song_id

Уникальный идентификатор песни.


name

Название песни.


duration

Продолжительность песни.

users


Содержит информацию о зарегистрированных в системе пользователях.


user_id

Уникальный идентификатор пользователя.


login

Логин пользователя.


password

Пароль пользователя. Хранится в хешированном виде.

Имя пользователя.

album_artists


Содержит информацию об авторах альбомов. Наличие записи в данной таблице означает, что исполнитель является автором указанного альбома (связь многие-ко-многим).


album_id

Уникальный идентификатор альбома.


artist_id

Уникальный идентификатор исполнителя.

album_songs


Содержит информацию о составе альбома. Наличие записи в данной таблице означает, что песня входит в указанный альбом (связь многие-ко-многим).


album_id

Уникальный идентификатор альбома.


song_id

Уникальный идентификатор песни.

ratings


Содержит информацию об оценках пользователей.


user_id

Уникальный идентификатор пользователя.


song_id

Уникальный идентификатор песни.


rating

Оценка пользователя (от 1 до 5).

genre


Содержит информацию о жанрах песен.


genre_id

Уникальный идентификатор жанра.


name

Название жанра.

genre_songs


Содержит информацию о составе жанров. Наличие записи в данной таблице означает, что песня имеет указанный жанр (связь многие-ко-многим).


genre_id

Уникальный идентификатор жанра.


song_id

Уникальный идентификатор песни.



. Архитектура приложения

При написании информационной системы были использованы следующие технологии:

·        MySQL Community Server - свободно распространяемый сервер баз данных;

·        Servlet - Web-сервер, который умеет работать с сервлетами, запускает Java-машину, которая в свою очередь выполняет сервлет, а сервлет отдает данные, которые он сформирует.

·        Java Server Pages - технология, позволяющая веб-разработчикам легко создавать содержимое, которое имеет как статические, так и динамические компоненты. Наша информационная система также использует библиотеку JSTL, расширяющую спецификацию JSP;

·        На уровне представления используются стандартные технологии: XHTML, CSS, JavaScript.

На рисунке 2 приведена общая архитектура приложения. Пример Servlet-класса - в приложении Б; JSP-страницы - в приложении B.

Рисунок 2 - Общая архитектура приложения.

. Интерфейс пользователя

.1 Страница регистрации

Рисунок 3 - Страница регистрации.

.2 Главная страница

Рисунок 4 - Главная страница.

.3 Страница поиска

Рисунок 5 - Страница поиска.

база данные каталог музыкальный

3.4 Приложение для работы с базами данных

Рисунок 6 - Приложение для работы с БД.

Приложение А

SQL-скрипты создания таблицSCHEMA IF NOT EXISTS `music` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; -- ----------------------------------

- Table `music`.`artists`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`artists` (

`id` INT NOT NULL AUTO_INCREMENT ,

`name` VARCHAR(32) NOT NULL , PRIMARY KEY (`id`) );

-- -----------------------------------------------------

- Table `music`.`albums`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`albums` (

`id` INT NOT NULL AUTO_INCREMENT ,

`name` VARCHAR(32) NOT NULL ,

`released` DATE NOT NULL ,KEY (`id`) );

- -----------------------------------------------------

- Table `music`.`songs`

`id` INT NOT NULL AUTO_INCREMENT ,

`name` VARCHAR(64) NOT NULL ,

`duration` INT NOT NULL ,KEY (`id`) );

- -----------------------------------------------------

- Table `music`.`users`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`users` (

`id` INT NOT NULL AUTO_INCREMENT ,

`login` VARCHAR(16) NOT NULL ,

`password` VARCHAR(32) BINARY NOT NULL ,

`name` VARCHAR(16) NOT NULL ,KEY (`id`) ,INDEX `login_UNIQUE` (`login` ASC) );

- -----------------------------------------------------

- Table `music`.`album_artists`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`album_artists` (

`album` INT NOT NULL ,

`artist` INT NOT NULL ,KEY (`album`, `artist`) ,`fk_album_artists__albums_idx` (`album` ASC) ,`fk_album_artists__artists_idx` (`artist` ASC) ,`fk_album_artists__albums`KEY (`album` )`music`.`albums` (`id` )DELETE NO ACTIONUPDATE NO ACTION,`fk_album_artists__artists`KEY (`artist` )`music`.`artists` (`id` )DELETE NO ACTIONUPDATE NO ACTION);

- -----------------------------------------------------

- Table `music`.`album_songs`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`album_songs` (

`album` INT NOT NULL ,

`song` INT NOT NULL ,KEY (`album`, `song`) ,`fk_album_songs__albums_idx` (`album` ASC) ,`fk_album_songs__songs_idx` (`song` ASC) ,`fk_album_songs__albums`KEY (`album` )`music`.`albums` (`id` )DELETE NO ACTIONUPDATE NO ACTION,`fk_album_songs__songs`KEY (`song` )`music`.`songs` (`id` )DELETE NO ACTIONUPDATE NO ACTION);

- -----------------------------------------------------

- Table `music`.`ratings`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`ratings` (

`user` INT NOT NULL ,

`song` INT NOT NULL ,

`rating` TINYINT UNSIGNED NOT NULL ,KEY (`user`, `song`) ,`fk_ratings__users_idx` (`user` ASC) ,`fk_ratings__songs_idx` (`song` ASC) ,`fk_ratings__users`KEY (`user` )`music`.`users` (`id` )DELETE NO ACTIONUPDATE NO ACTION,`fk_ratings__songs`

FOREIGN KEY (`song` ) REFERENCES `music`.`songs` (`id` )DELETE NO ACTIONUPDATE NO ACTION);

- -----------------------------------------------------

- Table `music`.`genre`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`genre` (

`id` INT NOT NULL AUTO_INCREMENT ,

`name` VARCHAR(64) NOT NULL ,KEY (`id`) );

- -----------------------------------------------------

- Table `music`.`genre_songs`

- -----------------------------------------------------TABLE IF NOT EXISTS `music`.`genre_songs` (

`genre` INT NOT NULL ,

`song` INT NOT NULL ,KEY (`genre`, `song`) ,`fk_genre_songs__genres_idx` (`genre` ASC) ,`fk_genre_songs__songs_idx` (`song` ASC) ,`fk_genre_songs__genres`KEY (`genre` )`music`.`genre` (`id` )DELETE NO ACTIONUPDATE NO ACTION,`fk_genre_songs__songs`KEY (`song` )`music`.`songs` (`id` )DELETE NO ACTIONUPDATE NO ACTION);

Приложение Б

Пример Сервлетаjava.io.*;java.util.*;java.sql.*;javax.servlet.*;javax.servlet.http.*;

public class Authentication extends HttpServlet {ServletConfig config;void init(ServletConfig config)

throws ServletException {.config = config;

}

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {connection = null;out = response.getWriter();rs;userName = new String("");passwrd = new String("");name = new String("");.setContentType("text/html");{.forName("com.mysql.jdbc.Driver");properties = new Properties();.setProperty("user", "root");.setProperty("password", "123");.setProperty("useUnicode", "true");.setProperty("characterEncoding", "utf8");= DriverManager.getConnection("jdbc:mysql://localhost:3306/music", properties);

//Заносим данные в базуsql = "select login,password,name from users";s = connection.createStatement();.executeQuery(sql);= s.getResultSet();(rs.next()) {= rs.getString("login");= rs.getString("password");= rs.getString("name");

}.close();.close();

} catch (Exception e) {.out.println("Exception is ;" + e);

}(userName.equals(request.getParameter("login"))

&& passwrd.equals(request.getParameter("pass"))) {session = request.getSession(true);.setAttribute("name", name);dispatcher= config.getServletContext().getRequestDispatcher("/music0.jsp");.forward(request, response);

} else {.println("You are not an authentic person");

}

}}

Приложение В

Пример JSP-страницы

<%@page import="java.sql.Date"%>

<%@page import="java.sql.Statement"%>

<%@page import="java.sql.DriverManager"%>

<%@page import="java.util.Properties"%>

<%@page import="java.sql.ResultSet"%>

<%@page import="java.sql.Connection"%>

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<meta http-equiv="X-UA-Compatible" content="IE=edge">

<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Music Catalog</title>

<link href="newcss.css" rel="stylesheet">

<link href="newcss1.css" rel="stylesheet">

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->

<!--[if lt IE 9]>

<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>

<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>

<![endif]-->

</head>

<%HttpSession s = request.getSession(true);connection = null;rs;song = new String("");artist = new String("");album = new String("");genre = new String("");released = null;duration = 0;ids = 0;ida = 0;idg = 0;idu = 0;idar = 0;rating = 0;.setContentType("text/html");{.forName("com.mysql.jdbc.Driver");properties = new Properties();.setProperty("user", "root");.setProperty("password", "123");.setProperty("useUnicode", "true");.setProperty("characterEncoding", "utf8");= DriverManager.getConnection("jdbc:mysql://localhost:3306/music", properties);

String sql = "select * from songs where name ='" + request.getParameter("search") + "'";

Statement st = connection.createStatement();.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("duration");= rs.getInt("id");

}= "select * from album_songs where song ='" + ids + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("album");

}= "select genre from genre_songs where song ='" + ids + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("genre");

}= "select * from albums where id ='" + ida + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getDate("released");= rs.getString("name");

}= "select * from genre where id ='" + idg + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getString("name");

}= "select artist from album_artists where album ='" + ida + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("artist");

}= "select * from artists where id ='" + idar + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getString("name");

}= "select * from users where name ='" + s.getAttribute("name") + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("id");

}= "select * from ratings where user ='" + idu + "' and song='" + ids + "'";.executeQuery(sql);= st.getResultSet();(rs.next()) {= rs.getInt("rating");

}.setAttribute("idu", idu);.setAttribute("ids", ids);.close();.close();

} catch (Exception e) {.out.println("Exception is ;" + e);

}

%>

<body>

<div id="container">

<div id="header"><h1>

<p>

</div>

<div id="content">

<ul>

<%if (ids != 0) {%>

<li><a>

<li><a>

<li><a href="#" data-toggle="modal" data-target="#musicInfo3">Album:<%=album%></a></li>

<li><a href="#" data-toggle="modal" data-target="#musicInfo4">Released:<%=released%></a></li>

<li><a href="#" data-toggle="modal" data-target="#musicInfo5">Duration:<%=duration%></a></li>

<li><a href="#" data-toggle="modal" data-target="#musicInfo5">Genre:<%=genre%></a></li>

<%if (rating == 0) { %>

<form role="form" action="Raiting" method="POST">

<li><a href="#" data-toggle="modal" data-target="#musicInfo5">Rating:<select name="mySelect">

<option>1</option>

<option>2</option>

<option>3</option>

<option>4</option>

<option>5</option>

</select></a></li>

<button id="submitSearch">estimate</button>

</form>

<%} else {%><li><a href="#" data-toggle="modal" data-target="#musicInfo5">Rating:<%=rating%></a></li>

<%}%>

<%} else {%> <li><a href="#" data-toggle="modal" data-target="#musicInfo5">Song not found please try again</a></li>

<%}%>

</ul>

</div>

<div id="sidebar">

<form role="form" action="music.jsp" method="POST">

<div id="sidebarUp">

<p>

<input id="musicSearch" name="search"/>

<button id="submitSearch">SEARCH</button>

</div>

</form>

</div>

<script src="js/bootstrap.min.js"></script>

</body>

</html>

Похожие работы на - Музыкальный каталог

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!