Разработка сайта интернет-магазина готовой продукции с системой расчета стоимости перевозки продукции со склада

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Фрагмент текста работы

процессе проектирования курсового проекта был разработан интернет-магазин по продажам товаров для домашних животных.

Интернет-магазин предназначен для продажи различных товаров через интернет. Областью применения данного Web-приложения выступает интернет-торговля.

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

Интернет-магазин имеет удобный и понятный интерфейс, благодаря которому не требуется излишних усилий в освоении работы с сайтом. Вся информация не содержит ничего лишнего.

Результаты проверки показали, что система работает без ошибок, имеется возможность работы с веб-сайтом во всех популярных браузерах.

В результате разработки курсового проекта были отточены навыки в дизайне сайтов, проектировки интерфейсов, разработке логотипов. Приобретены практические умения JavaScript, HTML и CSS верстки сайтов.


Список литературы

1.  Node.js Разработка серверных веб-приложений на JavaScript/ Дэвид Хэррон Изд-во: ДМК Пресс, 2012 – 146 с.

2.  Изучаем JavaScript // Майкл Моррисон — СПб.: Питер, 2012. — С.608

3.  Титтел Эд, Бурмейстер Мэри. HTML 4 для "чайников". 6-е издание. М.: Из-дательский дом “Диалектика -Вильямс” – 2009. - 368с.

4.  Веб-приложения на JavaScript. Год: 2012. // Маккоу — СПб.: Питер, 2012. — С.560 608.

5.  Большая книга CSS3. // Дэвид Макфарланд. — СПб.: Питер, 2014. — С. 608.

6.  HTML5 и CSS3. Веб-разработка по стандартам нового поколения // Брайан Хоган — СПб.: Питер, 2014. — С. 272.

7.  Лебедев А. Руководство Лебедев А. – Москва.: Издательство Студии Артемия Лебедева, 2011. – 452 с.

8.  Спейнауэр С. Справочник Web-мастера. СПб.: BHV, 1997. – 368 с.

9.  Ратшиллер Т., Геркен Т. PHP4: разработка Web-приложений. - СПб: Питер, 2001. - 384 с.

10.  Томсон Л., Веллинг Л. Разработка Web-приложений на PHP и MySQL. - К.: "ДиаСофт", 2001. - 672 с

11.  Яргер Р., Риз Дж., Кинг Т. MySQL и mSQL. Базы данных для небольших предприятий и Интернета. - СПб: Символ-Плюс, 2000 - 560 с.

12.  Орлов С.Д. Технологии разработки программного обеспечения. Учеб. пособие. 2-е изд. СПб.: Питер, 2003. – 480 с.


Приложение

Листинг файла package.json

{
  "dependencies": {
    "async": "^2.4.1",
    "body-parser": "^1.17.2",
    "connect-mongo": "^1.3.2",
    "cookie-parser": "^1.4.3",
    "express": "^4.15.3",
    "express-session": "^1.15.3",
    "mongoose": "^4.10.3",
    "serve-favicon": "^2.4.3"
  }
}

Листинг файла config.js

module.exports = {
    port: 49002,
    mongodb: {
        "main": "mongodb://127.0.0.1:27017/main"
    },
    session: "aXVmN7y{Xw5|9zN%El2m"
};

Листинг файла createDB.js

var mongoose = require('./lib/mongoose'); var async = require('async'); async.series([     open,     dropDatabase,     requireModels,     createUsers,     createCategory,     createGoods ], function(err) {     console.log(arguments); }); function open(callback) {     mongoose.connection.on('open', callback); } function dropDatabase(callback) {     var db = mongoose.connection.db;     db.dropDatabase(callback); } function requireModels(callback) {     require('./models/user');     require('./models/category');     require('./models/goods');     async.each(Object.keys(mongoose.models), function(modelName, callback) {         mongoose.models[modelName].ensureIndexes(callback);     }, callback); } function createUsers(callback) {     var users = [         {username: 'Вася', password: 'supervasya'},         {username: 'Петя', password: '123'},         {username: 'admin', password: 'thetruehero'}     ];     async.each(users, function(userData, callback) {         var user = new mongoose.models.User(userData);         user.save(callback);     }, callback); } function createCategory(callback) {     var categories = [         {id: 0, name: 'Товары для собак', img: 'dogs.jpg'},         {id: 1, name: 'Товары для котов', img: 'cats.jpg'}     ];     async.each(categories, function(categoryData, callback) {         var category = new mongoose.models.Category(categoryData);         category.save(callback);     }, callback); } function createGoods(callback) {     var goods = [         {id: 0, category: 0, price: 10, name: 'Корм для собак Чаппи', img: 'dogs1.jpg'},         {id: 1, category: 0, price: 20, name: 'Корм для собак Trainer Natural Mini Adult', img: 'dogs2.jpg'},         {id: 2, category: 1, price: 30, name: 'Корм Brit Care Crazy для котят', img: 'cats1.jpg'},         {id: 3, category: 0, price: 40, name: 'Корм для собак Acana PACIFICA DOG', img: 'dogs3.jpg'},         {id: 4, category: 1, price: 50, name: 'Корм для кошек Gourmet Кусочки в соусе', img: 'cats2.jpg'},         {id: 5, category: 1, price: 60, name: 'Консервированный корм для кошек Friskies', img: 'cats3.jpg'},     ];     async.each(goods, function(goodsData, callback) {         var good = new mongoose.models.Goods(goodsData);         good.save(callback);     }, callback); }

Листинг файла error.js

var util = require('util');
var http = require('http');

// ошибки для выдачи посетителю
function HttpError(status, message) {
    Error.apply(this, arguments);
    Error.captureStackTrace(this, HttpError);

    this.status = status;
    this.message = message || http.STATUS_CODES[status] || "Error";
}

util.inherits(HttpError, Error);

HttpError.prototype.name = 'HttpError';

exports.HttpError = HttpError;

Листинг файла index.js

'use strict';

const http = require('http'),
    express = require('express'),
    cookieParser = require('cookie-parser'),
    bodyParser = require('body-parser'),
    favicon = require('serve-favicon'),
    config = require('./config'),
    path = require('path');

var app = express(), port, server;

app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(cookieParser());
app.use(bodyParser.urlencoded({limit: '<100mb>'}));
app.use(require('./middleware/session'));
app.use(require('./middleware/sendHttpError'));
app.use(require('./middleware/loadUser'));

port = config.port || 49001;
app.set('port', port);

server = http.createServer(app);

server.on('error', serverError);

server.on('listening', serverListening);

require('./routes')(app);

app.use(express.static(path.join(__dirname, 'public')));

server.listen(port);

require('./createDB');

function serverError(error) {
    if (error.syscall !== 'listen') {
        throw error;
    }

    var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;

    if (error.code === 'EACCES') {
        console.error(bind + ' requires elevated privileges');
        process.exit(1);
    } else if (error.code === 'EADDRINUSE') {
        console.error(bind + ' is already in use');
        process.exit(1);
    } else {
        throw error;
    }
}

function serverListening() {
    var address = server.address(),
        bind = typeof address === 'string' ? 'pipe ' + address : 'port ' + address.port;
    console.log('Listening on ' + bind);
}

Листинг файла routes.js

var path = require('path'),
    checkAuth = require('./middleware/checkAuth');

module.exports = function(app) {

  app.get('/', function(req, res) {
      res.sendFile(path.join(__dirname + '/public/template/index.html'));
  });

  app.post('/register', require('./routes/register').post);

  app.post('/login', require('./routes/login').post);

  app.get('/login', checkAuth, require('./routes/login').get);

  app.post('/logout', require('./routes/logout').post);

  app.get('/categories', checkAuth, require('./routes/categories').get);

  app.post('/goods', checkAuth, require('./routes/goods').post);

};

Листинг файла lib/mongoose.js

var mongoose = require('mongoose');
var config = require('../config');

mongoose.connect(config.mongodb.main);

module.exports = mongoose;

Листинг файла lib/session_store.js

const session = require('express-session');
const MongoStore = require('connect-mongo')(session);

module.exports = function (mongoose) {
    return new MongoStore({ mongooseConnection: mongoose.connection })
};

Листинг файла middleware/checkAuth.js

module.exports = function(req, res, next) {
  if (!req.session.user) {
      return res.status(401).send({ error: "Вы не авторизованы" });
  }

  next();
};

Листинг файла middleware/loadUser.js

var User = require('../models/user').User;

module.exports = function(req, res, next) {
  req.user = res.locals.user = null;

  if (!req.session.user) return next();

  User.findById(req.session.user, function(err, user) {
    if (err) return next(err);

    req.user = res.locals.user = user;
    next();
  });
};

Листинг файла middleware/sendHttpError.js

module.exports = function (req, res, next) {
    res.sendHttpError = function (error) {
        res.status(error.status);
        if (res.req.headers['x-requested-with'] == 'XMLHttpRequest') {
            res.json(error);
        } else {
            res.send(error.message);
        }
    };
    next();
};

Листинг файла middleware/session.js

var session = require('express-session'),
    config = require('../config'),
    mongoose = require('../lib/mongoose'),
    sessionStore = require('../lib/session_store')(mongoose);

module.exports = session({
    secret:            config.session,
    name:              'sid',
    resave:            false,
    saveUninitialized: false,
    cookie:            {
        maxAge: null
    },
    store:             sessionStore
});

Листинг файла models/category.js

var util = require('util');

var mongoose = require('../lib/mongoose'),
    Schema = mongoose.Schema;

var schema = new Schema({
    id: {
        type: Number,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    img: {
        type: String,
        required: true
    }
});

exports.Category = mongoose.model('Category', schema);

Листинг файла models/goods.js

var util = require('util');

var mongoose = require('../lib/mongoose'),
    Schema = mongoose.Schema;

var schema = new Schema({
    id: {
        type: Number,
        required: true
    },
    name: {
        type: String,
        required: true
    },
    img: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    },
    category: {
        type: Number,
        required: true
    },
    quantity: {
        type: Number,
        required: true,
        default: 0
    }
});

exports.Goods = mongoose.model('Goods', schema);

Листинг файла models/user.js

var crypto = require('crypto'); var async = require('async'); var util = require('util'); var mongoose = require('../lib/mongoose'),     Schema = mongoose.Schema; var schema = new Schema({     username: {         type: String,         unique: true,         required: true     },     hashedPassword: {         type: String,         required: true     },     salt: {         type: String,         required: true     },     created: {         type: Date,         default: Date.now     } }); schema.methods.encryptPassword = function (password) {     return crypto.createHmac('sha1', this.salt).update(password).digest('hex'); }; schema.virtual('password')     .set(function (password) {         this._plainPassword = password;         this.salt = Math.random() + '';         this.hashedPassword = this.encryptPassword(password);     })     .get(function () {         return this._plainPassword;     }); schema.methods.checkPassword = function (password) {     return this.encryptPassword(password) === this.hashedPassword; }; schema.statics.authorize = function (username, password, callback) {     var User = this;     async.waterfall([         function (callback) {             User.findOne({username: username}, callback);         },         function (user, callback) {             if (user) {                 if (user.checkPassword(password)) {                     callback(null, user);                 } else {                     callback(new AuthError("Неправильный пароль"));                 }             } else {                 callback(new AuthError("Пользователь с таким логином не зарегистрирован"));             }         }     ], callback); }; schema.statics.register = function (username, password, repeat, callback) {     var User = this;     async.waterfall([         function (callback) {             User.findOne({username: username}, callback);         },         function (user, callback) {             if (user) {                 callback(new AuthError("Такой пользователь уже зарегистрирован"));             } else {                 if (password === repeat) {                     var user = new User({username: username, password: password});                     user.save(function (err) {                         if (err) return callback(err);                         callback(null, user);                     });                 } else {                     callback(new AuthError("Пароли не совпадают"));                 }             }         }     ], callback); }; exports.User = mongoose.model('User', schema); function AuthError(message) {     Error.apply(this, arguments);     Error.captureStackTrace(this, AuthError);     this.message = message; } util.inherits(AuthError, Error); AuthError.prototype.name = 'AuthError'; exports.AuthError = AuthError;

Листинг файла public/app.js

'use strict'; angular .module('myApp', ['ui.router']) .config(['$stateProvider', '$urlRouterProvider',     function ($stateProvider, $urlRouterProvider) {         $stateProvider.state('home', {             url: '/home',             templateUrl: 'template/home.html',             pageTitle: 'Главная',             params: {}         }).state('chat', {             url: '/chat',             templateUrl: 'template/chat.html',             pageTitle: 'Чат',             params: {}         }).state('login', {             url: '/login',             templateUrl: 'template/login.html',             pageTitle: 'Вход',             params: {}         }).state('logout', {             url: '/logout',             pageTitle: 'Выход',             params: {},             controller: function ($http, $state) {                 $http({method: 'POST', url: '/logout'});                 $state.go('home');                 window.location.reload();             }         }).state('categories', {             url: '/categories',             templateUrl: 'template/categories.html',             pageTitle: 'Каталог',             params: {},             resolve:{                 access:  function($http){                     return $http({method: 'GET', url: '/login'}).then(function (res) {                         return res;                     }, function (res) {                         return res;                     });                 },             }         }).state('goods', {             url: '/goods',             templateUrl: 'template/goods.html',             pageTitle: 'Товары',             params: {                 category: null             },             resolve:{                 access:  function($http){                     return $http({method: 'GET', url: '/login'}).then(function (res) {                         return res;                     }, function (res) {                         return res;                     });                 },             }         }).state('cart', {             url: '/cart',             templateUrl: 'template/cart.html',             pageTitle: 'Корзина',             params: {                 category: null             },             resolve:{                 access:  function($http){                     return $http({method: 'GET', url: '/login'}).then(function (res) {                         return res;                     }, function (res) {                         return res;                     });                 },             }         }).state('about', {             url: '/about',             templateUrl: 'template/about.html',             pageTitle: нас',             params: {}         }).state('shipping', {             url: '/shipping',             templateUrl: 'template/shipping.html',             pageTitle: 'Доставка',             params: {}         }).state('profile', {             url: '/profile',             templateUrl: 'template/profile.html',             pageTitle: 'Личный кабинет',             params: {}         });         $urlRouterProvider.otherwise('/home');         $stateProvider.state("otherwise", {url: '/otherwise'});     }]) .run(['$state', '$rootScope', '$stateParams', 'userService', '$http',     function ($state, $rootScope, $stateParams, userService, $http) {         $rootScope.$state = $state;         $rootScope.$stateParams = $stateParams;         $rootScope.$on("$includeContentLoaded", function () {             $('body').scrollTop(0);         });         $rootScope.$on('$stateChangeSuccess', function () {             userService.navChange();         });         $http({             url: "/login",             method: "GET"         }).then(function (res) {             userService.username = res.data.username;         }, function (res) {             userService.username = false;         });     }]) .service('userService', function () {     return {         goods: null,         username: null,         order: {}     }; }) .controller('navController', function ($state, userService, $http, $scope, $rootScope) {     var vm = this;     userService.navChange = function () {         var tabs = {             home: {name: 'Главная', url: 'home', active: false},             login: {name: 'Авторизация', url: 'login', active: false},             logout: {name: 'Выход', url: 'logout', active: false},             categories: {name: 'Каталог', url: 'categories', active: false},             cart: {name: 'Корзина', url: 'cart', active: false},             about: {name: нас', url: 'about', active: false},             profile: {name: 'Личный кабинет', url: 'profile', active: false},             shipping: {name: 'Доставка', url: 'shipping', active: false}         };         if (tabs[$state.current.name]) {             tabs[$state.current.name].active = true;         } else {             tabs['categories'].active = true;         }         if (userService.username) {             vm.tabs = [tabs.home, tabs.about, tabs.shipping, tabs.categories, tabs.cart, tabs.profile, tabs.logout];         } else {             vm.tabs = [tabs.home, tabs.about, tabs.shipping, tabs.login];         }     } }) .controller('homeController', function ($state, $scope, $rootScope) {     var vm = this; }) .controller('aboutController', function ($state, $scope, $rootScope) {     var vm = this; }) .controller('shippingController', function ($state, $scope, $rootScope) {     var vm = this; }) .controller('profileController', function ($state, $scope, $rootScope) {     var vm = this; }) .controller('loginController', function ($state, $http, userService, $scope, $rootScope) {     var vm = this;     vm.loginRegister = true;     vm.registerForm = function () {         vm.loginRegister = false;         vm.error = false;     };     vm.loginForm = function () {         vm.loginRegister = true;         vm.error = false;     };     vm.register = function () {         if (vm.password === vm.repeat) {             $http({                 url: "/register",                 method: "POST",                 headers: {                     "content-type": 'application/x-www-form-urlencoded'                 },                 data: 'username=' + vm.username + '&password=' + vm.password + '&repeat=' + vm.repeat             }).then(function (res) {                 userService.username = vm.username;                 userService.navChange();                 $state.go('categories');             }, function (res) {                 if (res.status === 403) {                     vm.error = res.data.message;                 } else {                     $state.go('error');                 }             });         } else {             vm.error = 'Введенные пароли не совпадают';         }     };     vm.login = function () {         $http({             url: "/login",             method: "POST",             headers: {                 "content-type": 'application/x-www-form-urlencoded'             },             data: 'username=' + vm.username + '&password=' + vm.password         }).then(function (res) {             userService.username = vm.username;             userService.navChange();             $state.go('categories');         }, function (res) {             if (res.status === 403) {                 vm.error = res.data.message;             } else {                 $state.go('error');             }         });     } }) .controller('categoriesController', function ($state, $http, $scope, $rootScope) {     var vm = this;     $state.current.resolve.access($http).then(function(res){         if (res.status === 401) {             vm.error  = res.data.error;         }     });     $http({         url: "/categories",         method: "GET"     }).then(function (res) {         vm.categories = res.data;     }, function (res) {         vm.error  = res.data.error;     });     vm.openCategory = function (id) {         $state.go('goods', { category: id })     }; }) .controller('goodsController', function ($state, $http, $scope, $rootScope

Похожие материалы

Информация о работе

Тип:
Курсовые работы
Размер файла:
2 Mb
Скачали:
0

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.