国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

express搭建圖書銷售系統(tǒng)

felix0913 / 1207人閱讀

摘要:結(jié)構(gòu)設(shè)計文件結(jié)構(gòu)所有數(shù)據(jù)庫操作代碼靜態(tài)資源庫,如路由操作,對應(yīng)工具包代碼模板文件系統(tǒng)入口數(shù)據(jù)文件,可導(dǎo)入部分?jǐn)?shù)據(jù)流圖用戶留言賣家添加圖書買家購書部分算法設(shè)計首先對于留言評論,防止惡意用戶刷留言評論,設(shè)置了定時銷毀器。

圖書銷售系統(tǒng) —— 書窩

書窩線上地址
GitHub地址
由于時間有限,事務(wù)較重,系統(tǒng)實(shí)現(xiàn)只好從簡。

需求分析

需交課程設(shè)計報告和軟件(源代碼)。課程設(shè)計報告將存檔。報告內(nèi)容包括:需求分析、算法思想描述、數(shù)據(jù)流圖、E-R圖、數(shù)據(jù)字典、程序結(jié)構(gòu)、收獲與體會等。
功能要求:實(shí)現(xiàn)一個基于web的網(wǎng)上圖書的銷售管理系統(tǒng),能提供多種條件的查詢,還應(yīng)具有會員管理、意見反饋、銷售分析等功能。將留言板、圖表分析、文件上傳等思想納入其中。

用戶系統(tǒng)

需要用戶系統(tǒng),用戶是系統(tǒng)的根源,是數(shù)據(jù)的源頭,該系統(tǒng)的用戶就是要求中所說的會員,所以需要提供如下功能:

用戶注冊

用戶登錄

用戶信息查看

用戶既可以是賣家,亦可以是買家

用戶留言(信息反饋)

為了逐漸完善系統(tǒng),提供用戶與建站者的交流通道,并且該通道不僅限于用戶與建站者,用戶與用戶之間也能夠互相交流,提高趣味性。具體功能如下:

用戶留言

留言查看

賣家買家系統(tǒng)

買賣離不開賣家買家,該系統(tǒng)亦是如此,需要如下功能列表:

賣家

圖書上架

圖書修改

圖書查看

銷售情況圖表

買家

圖書查看購買

買書記錄查看

圖書評論與刪除

設(shè)計文檔

該部分將涉及整個系統(tǒng)從無到有的設(shè)計思路,自底向上有

數(shù)據(jù)庫選擇和設(shè)計

服務(wù)器框架選擇和設(shè)計

前端框架選擇和設(shè)計

并且將針對具體細(xì)節(jié)給出相關(guān)表示,如數(shù)據(jù)字典,ER圖,數(shù)據(jù)流圖,算法設(shè)計等。

數(shù)據(jù)庫選擇和設(shè)計 選擇與原因

該系統(tǒng)我選擇了MySQL數(shù)據(jù)庫,具體原因如下:

MySQL十分輕量,相比課堂上講的SQL Server數(shù)據(jù)庫,一個安裝包2GB,MySQL的500MB簡直小巫見大巫(最近看到屬于NoSQLMongoDB居然只有100MB)。

短時間需要完成該系統(tǒng),同時對于MySQL十分熟悉,之前做在線訂票系統(tǒng),在線考試系統(tǒng)等都是建立在MySQL上。

具有SQLYog這種強(qiáng)大方便的圖形操作軟件,輕松導(dǎo)入導(dǎo)出數(shù)據(jù),輕松連接遠(yuǎn)程服務(wù)器傳遞數(shù)據(jù)。

基于以上原因,因此選擇了MySQL

數(shù)據(jù)字典

用戶

字段 類型 備注
username varchar(12) 用戶名,唯一, 6-12位
email varchar(20) 電子郵箱,唯一
password varchar(12) 密碼,6-12位
registerDate date 注冊日期

留言

字段 類型 備注
username varchar(12) 留言者用戶名
content text 留言內(nèi)容
datetime datetime 留言時間

圖書

字段 類型 備注
bookID char(8) 圖書ID,唯一,如BK123456
title varchar(25) 書名
author varchar(25) 作者
press varchar(25) 出版社
price decimal(10,1) 價格,保留小數(shù)點(diǎn)后一位
quantity int(11) 庫存量(本)
image mediumblob 封面圖片
seller varchar(12) 賣家用戶名
importDate date 上架日期

圖書評論

字段 類型 備注
username varchar(12) 評論人用戶名
bookID char(8) 被評論圖書
datetime datetime 評論時間
content text 評論內(nèi)容

交易
因為交易完成后,賣家仍然可以對圖書進(jìn)行修改,所以我將買進(jìn)時圖書信息都存放在此表中,表示買進(jìn)時圖書的信息。

字段 類型 備注
tradeID char(10) 交易記錄ID,唯一,如TD12345678
tradeDate date 交易日期
buyer varchar(12) 買家用戶名
bookID char(8) 書本ID
title varchar(25) 書名
author varchar(25) 作者
press varchar(25) 出版社
price decimal(10,1) 買進(jìn)價格
quantity int(11) 庫存
image mediumblob 封面
seller varchar(12) 賣家
E-R圖

服務(wù)器框架選擇和設(shè)計 選擇與原因

作為JS動態(tài)語言的受益者,我服務(wù)器肯定就選擇nodejs了。

未使用過nodejs開發(fā)一個相對完整的系統(tǒng),打算就將該系統(tǒng)作為入門了。

nodejs非常適合IO密集型的應(yīng)用,采用的是異步事件隊列的機(jī)制。

JS語言簡潔靈活有趣。

nodejsexpress

nodejs
基于ChromeV8引擎,以JS作為宿主語言的一個虛擬環(huán)境,JSNodeJs可以看做是JavaJVMNodeJs現(xiàn)在正在不斷發(fā)展中,目標(biāo)是與Java一樣,能夠形成一套十分完備的庫,目前NodeJs的生態(tài)環(huán)境非常好,第三方模塊層出不窮,而且由于npm,這些包是否方便管理與下載。

express
介紹完nodejs,那么express是什么呢?expressnodejs的一個第三方Web框架,開發(fā)者可以用該框架非常方便有效的建立HTTP服務(wù)。

結(jié)構(gòu)設(shè)計
文件結(jié)構(gòu)


db/ 所有數(shù)據(jù)庫操作代碼
public/ 靜態(tài)資源庫,如js,css
routes/ 路由操作diam,對應(yīng)url
utils/ 工具包代碼
views/ Jade模板文件
app.js 系統(tǒng)入口
mysql.sql mysql數(shù)據(jù)文件,可導(dǎo)入

部分?jǐn)?shù)據(jù)流圖

用戶留言

賣家添加圖書

買家購書

部分算法設(shè)計

首先對于留言評論,防止惡意用戶刷留言評論,設(shè)置了定時銷毀器。
算法設(shè)計如下:

var _timer = {};

var Timer = {
    set : function (key,mill) { //設(shè)置定時器的關(guān)鍵字與銷毀時間
        this.remove(key);
        _timer[key] ={mill:mill};
        _timer[key].code = setTimeout(function () {
            delete _timer[key];
        },mill);
    },
    isExist : function(key){
        return !!_timer[key];
    },
    remove : function(key){
        if(this.isExist(key)){
            clearTimeout(_timer[key].code);
            delete _timer[key];
            return true;
        }
        return false;
    }
}

該系統(tǒng)具有銷售分析,如某賣家所有銷售情況的折線圖,x軸表示日期,y軸表示該日售出書籍?dāng)?shù)目。
算法設(shè)計如下:

// all 表示所有賣家銷售記錄,0-N 時間從現(xiàn)在到以前
function makeLineChart(all) {
    if(all==null || all.length==0)
        return;
    //返回數(shù)據(jù)中 keys表示日期數(shù)組,data表示對應(yīng)keys日期的銷售量
    return all.reduceRight((p,n)=>{ // 從右向左歸并
        var date = n.tradeDate;
        if(p.keys[p.keys.length-1]!=date){
            p.keys.push(date);
            p.data.push(1);
        }else{
            p.data[p.data.length-1]++;
        }
        return p;             
    },{keys:[],data:[]});
}

銷售分析中還具有周最受歡迎圖書餅圖,表示一周內(nèi)各個圖書銷售情況。
算法設(shè)計如下:

// all 表示所有賣家銷售記錄,0-N 時間從現(xiàn)在到以前
function makePieChart(all) {
    if(all==null || all.length==0)
        return;
    var pivot = all[all.length-1];  // 取出最后一個交易記錄,也就是最近的
    var end = new Date(pivot.tradeDate).setHours(24); // 根據(jù)最近時間的時間得到第二天0點(diǎn)時間
    var start = new Date(end - 1000*60*60*24*7); // 減去7天毫秒數(shù),得到七天前時間
    var data = {keys:[pivot.title],data:[1]},titleMap = {};
    titleMap[pivot.title]=0; //初始化參數(shù)
    for(var i=all.length-2;i>=0;i--){
        if(new Date(all[i].tradeDate)
前端框架選擇和設(shè)計
選擇與原因

針對于用戶之間接觸的前端界面,我選擇了Bootstrap3.0 UIjQuerymarked.jshighlight.jspace.js,下面做出相關(guān)介紹與說明:

BootStrap3.0
一套完備的UI框架,包括美觀的css樣式和一些基于jQuery的組件。可以讓開發(fā)者用最少的時間建立一個美觀的界面。

jQuery
因為BootStrap組件需要,而且能夠方便進(jìn)行DOM操作,強(qiáng)大的選擇器與鏈?zhǔn)秸{(diào)用。

marked.js
一個將markdown文本翻譯為HTML的庫,api簡單。

highlight.js
marked.js配套使用,能夠?qū)⒋a段解析為具有樣式類的庫。

pace.js
通過檢查瀏覽器加載的狀態(tài),判斷文檔加載進(jìn)度,并且提供了一系列的css樣式,能夠在頁面加載的時候顯示頁面加載進(jìn)度。

文件結(jié)構(gòu)
public/
├── javascripts/
│   ├── addbook.js
│   ├── Ajaxdelete.js
│   ├── indexjs.js
│   ├── msgAnimate.js
│   ├── msgjs.js
│   ├── popImage.js
│   ├── search.js
│   ├── selljs.js
│   ├── utils.js
└── stylesheets/
    ├── bootstrap/
    ├── style.less
    ├── style.css
    ├── hljs-github-min.css
    └── markdown.less

stylesheets/文件夾放的是樣式文件,其中的style.less是入口,style.css是利用node模塊壓縮后真正傳送的樣式文件

特殊功能說明

提示框動態(tài)固定顯示

方法一:(固定width)

.messages{
  .box-shadow(0px 0px 8px 3px #bbb);
  z-index: 10000;
  position: fixed;
  width: 340px;
  height: 50px;
  left: 50%;
  top : -50px;
  margin-left: -170px;

  -webkit-transition: all 2s;
  -moz-transition: all 2s;
  -ms-transition: all 2s;
  -o-transition: all 2s;
  transition: all 2s;
  opacity:0;
}
window.onload = function () {
    $(".messages")
        .css({"transform":"translate(0,120px)",opacity:1})
}

方法二:width自適應(yīng)

.messages{
  .box-shadow(0px 0px 8px 3px #bbb);
  z-index: 10000;
  position: fixed;
  left: 50%;
  top : 0px;
  -webkit-transform: translate(-50%,-50%);
  -moz-transform: translate(-50%,-50%);
  -ms-transform: translate(-50%,-50%);
  -o-transform: translate(-50%,-50%);
  transform: translate(-50%,-50%);

  -webkit-transition: all 2s;
  -moz-transition: all 2s;
  -ms-transition: all 2s;
  -o-transition: all 2s;
  transition: all 2s;
  opacity:0;
}
window.onload = function () {
    $(".messages")
        // .css({"transform":"translate(0,120px)",opacity:1})
        .css({"margin-top":"140px",opacity:1})
}

跳至評論,評論區(qū)高亮

@keyframes blinking {
    0% {
        //opacity: 0;
    }
    30%{
        background-color: #fcf8e3;
    }
    100% {
        background-color: #fcf8e3;
        //opacity: 1;
    }
}
.blink{
    .animation(blinking 2.8s)
}
$("[role=link-msg]").click(function (e) {
        var x = $(this.hash).next().children().removeClass("blink")
        setTimeout(function () {
            x.addClass("blink").children("textarea").focus();
        },0)
    });

markdown編輯區(qū)可粘貼網(wǎng)絡(luò)圖片

input.onpaste = function (e) {
        var clipboardData, pastedData;

        // Get pasted data via clipboard API
        clipboardData = e.clipboardData || window.clipboardData;
        var text = clipboardData.getData("text/plain");
        if(!text){
            var img = clipboardData.getData("text/html");
            img.replace(/{
                e.preventDefault();
                // 調(diào)用
                document.execCommand("insertText", false, "![ClipboardImage]("+c+")");
            })
        }
    };

代碼段右上角顯示語言

系統(tǒng)截圖

收獲與體會

感受到了nodejsexpress的魅力

增強(qiáng)了系統(tǒng)的整體把控架構(gòu)能力

掌握了一些常見具體問題的處理方式

不足在于后端異步結(jié)構(gòu)代碼比較冗雜,難于管理

參考資料

nodejs express4.x 文件上傳

Jade 完整教程

page.js

javascript-get-clipboard-data-on-paste-event-cross-browser

www.haorooms.com/post/jq_js_xxjdt

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/79723.html

相關(guān)文章

  • nodejs+express+mongodb+react+layui完整的小說閱讀系統(tǒng)--悅讀

    摘要:一起源本人是一個前端攻城獅,本著對全棧工程師的向往,學(xué)習(xí)了搭建服務(wù)器,根據(jù)所學(xué)知識自己設(shè)計制作了一個簡易的小說閱讀系統(tǒng)悅讀。先睹為快悅讀這套系統(tǒng)包括后臺服務(wù)數(shù)據(jù)庫存儲后臺管理端客戶端。 一、起源 本人是一個前端攻城獅,本著對全棧工程師的向往,學(xué)習(xí)了nodejs搭建web服務(wù)器,根據(jù)所學(xué)知識自己設(shè)計制作了一個簡易的小說閱讀系統(tǒng)——悅讀。先睹為快:悅讀這套系統(tǒng)包括:后臺服務(wù)、數(shù)據(jù)庫存儲、后...

    laoLiueizo 評論0 收藏0
  • 我用ionic框架寫了個豆瓣圖書

    摘要:集移動應(yīng)用與框架與一身的框架利用我們可以輕易制造出一款帶有原生應(yīng)用與體驗的移動這次我們就搭建一個圖書還能聽歌看電影實(shí)現(xiàn)了一些基本的功能,搜索圖書類型,查看圖書詳情,搜索圖書標(biāo)簽,查看圖書筆記等。前端交互采用了與綁定的。 ionic : 集移動應(yīng)用UI與 angularjs 框架與一身的 Hybrid App 框架 利用 ionic 我們可以輕易制造出一款帶有原生應(yīng)用UI與體驗的移動A...

    eechen 評論0 收藏0
  • 2017年 JavaScript 框架回顧 -- 后端框架

    摘要:本文是年框架回顧系列的最后的一篇文章,主要介紹的后端框架情況。葡萄城公司成立于年,是全球領(lǐng)先的集開發(fā)工具商業(yè)智能解決方案管理系統(tǒng)設(shè)計工具于一身的軟件和服務(wù)提供商。 本文是2017年 JavaScript 框架回顧系列的最后的一篇文章,主要介紹 JavaScript 的后端框架情況。 showImg(https://segmentfault.com/img/bV2TPd?w=735&h=...

    xiaoqibTn 評論0 收藏0
  • NodeJS+Express搭建個人博客-環(huán)境搭建(一)

    摘要:本項目持續(xù)更新中,開源免費(fèi)與各位愛好技術(shù)達(dá)人共勉,注現(xiàn)階段仍在開發(fā)中。。。。。 NodeJS+Express+MongoDb開發(fā)的個人博客 NodeJS+Express搭建個人博客-環(huán)境搭建(一)NodeJS+Express搭建個人博客-gulp自動化構(gòu)建工具使用(二)NodeJS+Express搭建個人博客-Express+Mongodb組合架構(gòu)介紹(三)NodeJS+Express...

    Clect 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<