傅聰 張艷紅 付冬梅 楊燾
【關(guān)鍵詞】服務(wù)通告;人工工時(shí);Web技術(shù);軟件設(shè)計(jì)
【中圖分類號(hào)】TP393.09;U695.2【文獻(xiàn)標(biāo)識(shí)碼】A【文章編號(hào)】1674-0688(2021)06-0053-04
0 引言
服務(wù)通告人工工時(shí)包括最短施工時(shí)間和總?cè)斯すr(shí)。最短施工時(shí)間是指完成一項(xiàng)工程,在人力資源充足、工人操作嫻熟且沒(méi)有發(fā)生特殊狀況的情況下,工程施工周期的最小值。與最短施工時(shí)間不同,總?cè)斯すr(shí)是指完成一項(xiàng)工程所有工序,在工人操作嫻熟且沒(méi)有發(fā)生特殊狀況的情況下,所有工人花費(fèi)的工時(shí)之和。由于工程施工期間可以讓多道工序同時(shí)進(jìn)行,所以最短施工時(shí)間一般小于總?cè)斯すr(shí) [1]。
目前,服務(wù)通告人工工時(shí)的制定主要依賴專業(yè)工程技術(shù)人員的經(jīng)驗(yàn),人為主觀因素影響很大,沒(méi)有相對(duì)科學(xué)的理論依據(jù)作為支撐,而實(shí)際的工程工序時(shí)長(zhǎng)具有一定的時(shí)間不確定性,使得這種憑借經(jīng)驗(yàn)的人工工時(shí)的可靠性較低。
本文旨在利用Web等技術(shù) [2-5],通過(guò)分析某型飛機(jī)制造商已發(fā)布的部分服務(wù)通告,借助網(wǎng)絡(luò)計(jì)劃理論 [6],設(shè)計(jì)和開發(fā)一套能夠計(jì)算服務(wù)通告人工工時(shí)的軟件,提高服務(wù)通告制定效率,減少服務(wù)通告人工工時(shí)制定過(guò)程中受主觀因素的影響,提升服務(wù)通告的參考價(jià)值。
1 軟件總體功能說(shuō)明
本文設(shè)計(jì)開發(fā)的軟件主要具有三大功能:經(jīng)驗(yàn)數(shù)據(jù)查詢、人工工時(shí)計(jì)算、數(shù)據(jù)提取更新。用戶可以通過(guò)輸入關(guān)鍵字和給定精確度查詢數(shù)據(jù)庫(kù)中已有的服務(wù)通告人工工時(shí)統(tǒng)計(jì)數(shù)據(jù)、工序數(shù)和文件下載鏈接;通過(guò)軟件提供的數(shù)據(jù)提取更新功能,數(shù)據(jù)庫(kù)管理者只需要上傳服務(wù)通告PDF文件,就可以自動(dòng)提取并統(tǒng)計(jì)數(shù)據(jù);在工序時(shí)長(zhǎng)和前后關(guān)系已知的情況下,用戶通過(guò)輸入工序表信息,可以得到理論人工工時(shí)計(jì)算結(jié)果。軟件功能結(jié)構(gòu)圖如圖1所示。
2 軟件開發(fā)與設(shè)計(jì)說(shuō)明
服務(wù)器端運(yùn)行Linux系統(tǒng),使用Nginx作為靜態(tài)服務(wù)器,使用uWSGI作為應(yīng)用程序服務(wù)器運(yùn)行Python程序,軟件采用基于Python語(yǔ)言的Flask后端框架 [7-10]和基于JavaScript [11]語(yǔ)言的Vue前端框架 [12-13]相耦合,前端使用BootStrap實(shí)現(xiàn)響應(yīng)式布局,用戶使用瀏覽器輸入服務(wù)器的網(wǎng)址即可使用軟件。
2.1 服務(wù)器
服務(wù)器的Python CGI腳本作為數(shù)據(jù)I/O模塊,能夠處理不同請(qǐng)求。
(1)請(qǐng)求查詢數(shù)據(jù)時(shí):將收到的關(guān)鍵字符串交給Python數(shù)據(jù)庫(kù)模塊的查詢接口,使用數(shù)據(jù)搜索算法查找結(jié)果,然后將查詢的結(jié)果發(fā)送給客戶端。
(2)請(qǐng)求下載文件時(shí):根據(jù)請(qǐng)求的文件名將文件發(fā)送給客戶端。
(3)請(qǐng)求上傳文件時(shí):首先將上傳的數(shù)據(jù)轉(zhuǎn)交給Python數(shù)據(jù)提取模塊,借助正則表達(dá)式和數(shù)據(jù)提取算法進(jìn)行字符匹配和提取,然后交給Python數(shù)據(jù)庫(kù)模塊的更新接口,使用在線數(shù)據(jù)統(tǒng)計(jì)算法更新數(shù)據(jù)庫(kù)的數(shù)據(jù),最后將處理成功與否返回給客戶端。
2.2 客戶端
當(dāng)客戶端請(qǐng)求主頁(yè)Html和Javascript文件后,客戶端Vue按Html模板渲染網(wǎng)頁(yè),基于Vue的Javascript腳本數(shù)據(jù)I/O模塊作為客戶端運(yùn)行的核心,協(xié)調(diào)內(nèi)部數(shù)據(jù),使由Html文件和Bootstrap構(gòu)成的GUI模塊能夠動(dòng)態(tài)響應(yīng)用戶輸入。
(1)當(dāng)用戶輸入時(shí):數(shù)據(jù)I/O模塊自動(dòng)檢查并更新GUI模塊中的數(shù)據(jù),使用自動(dòng)糾錯(cuò)算法糾正錯(cuò)誤輸入。
(2)當(dāng)用戶要計(jì)算數(shù)據(jù)時(shí):數(shù)據(jù)I/O模塊將GUI模塊中的數(shù)據(jù)交給工時(shí)計(jì)算模塊,使用樹枝圖算法計(jì)算最短施工時(shí)間和總?cè)斯すr(shí)結(jié)果,將返回的結(jié)果更新到GUI模塊中。
(3)當(dāng)用戶要查詢或更新數(shù)據(jù)時(shí):數(shù)據(jù)I/O模塊將GUI模塊中的數(shù)據(jù)發(fā)送給服務(wù)器數(shù)據(jù)更新接口,將返回的結(jié)果更新到GUI模塊中。
2.3 數(shù)據(jù)庫(kù)
在數(shù)據(jù)庫(kù)結(jié)構(gòu)方面,軟件使用的數(shù)據(jù)庫(kù)由服務(wù)通告元數(shù)據(jù)表(命名sb)和統(tǒng)計(jì)數(shù)據(jù)表(命名count)組成,其定義如圖2所示。數(shù)據(jù)表sb用來(lái)記錄數(shù)據(jù)提取模塊產(chǎn)生的數(shù)據(jù),數(shù)據(jù)表count用來(lái)統(tǒng)計(jì)數(shù)據(jù)表sb中的數(shù)據(jù)記錄。
2.4 算法設(shè)計(jì)
2.4.1 樹枝圖算法
算法的輸入:工序表,工序表中每道工序具有名稱、時(shí)長(zhǎng)、緊前工序3個(gè)基本屬性,其中緊前工序的名稱與工序名稱是對(duì)應(yīng)的。算法的輸出:最短施工時(shí)間、關(guān)鍵工序、總?cè)斯すr(shí)。
樹枝圖算法的關(guān)鍵是選取可選工序和獲得所有工序路線施工時(shí)間的最大值。對(duì)于前者,程序應(yīng)該在每次選擇之前判斷哪些工序可以選擇;對(duì)于后者,程序需要找出所有工序路線,比較各條工序路線的施工時(shí)間,然后得到所有工序路線施工時(shí)間的最大值,作為工程最短施工時(shí)間。
算法運(yùn)行過(guò)程:①以一個(gè)空數(shù)組和初始時(shí)刻0為初始參數(shù)開始,遍歷所有工序表中可選的工序;②每次將一道可選工序的名稱加入數(shù)組,并將初始時(shí)刻加上該工序時(shí)長(zhǎng)得到新的時(shí)刻,如果沒(méi)有可選工序,則轉(zhuǎn)到過(guò)程?譼?訛;③以所得到的數(shù)組和新的時(shí)刻為初始參數(shù)開始重復(fù)上述過(guò)程?譹?訛;④將數(shù)組和時(shí)刻作為一條結(jié)果保存在結(jié)果數(shù)組中,由于所有可選工序都遍歷了一遍,所以結(jié)果數(shù)組中保存的就是所有的工序路線;⑤利用基本的排序與求和算法找到最大值和工序時(shí)長(zhǎng)之和,即可得到最短施工時(shí)間和總?cè)斯すr(shí)。
圖3是利用樹枝圖算法計(jì)算所有路線及其總工時(shí)的算法流程圖,其中“能否放入隊(duì)列”是一個(gè)布爾表達(dá)式,“調(diào)用自身”指的是程序遞歸調(diào)用自身,括號(hào)部分是調(diào)用時(shí)輸入的參數(shù)。
2.4.2 自動(dòng)邏輯檢測(cè)
算法的輸入:當(dāng)前操作的工序節(jié)點(diǎn)、工序表。算法的輸出:經(jīng)過(guò)調(diào)整(禁用錯(cuò)誤選項(xiàng))的工序表。
幫助用戶避免錯(cuò)誤選項(xiàng)的原理是禁用錯(cuò)誤選項(xiàng),所以算法的核心是設(shè)法得到每道工序需要禁用的選項(xiàng),每次用戶對(duì)緊前工序做出改變時(shí),就可能需要重新設(shè)置工序的禁用選項(xiàng),用戶既能添加緊前工序,也能刪除緊前工序,所以程序既需要能禁用選項(xiàng),也需要能恢復(fù)選項(xiàng),為了方便理解,以下論述把“緊前工序”稱為“依賴”。
禁用選項(xiàng):假設(shè)工序A增加了一個(gè)依賴B,則工序B的依賴不能選擇工序A,所以工序B將A加入禁用選項(xiàng)中,這只解決了部分問(wèn)題,如果工序C是工序B的依賴,當(dāng)工序C選擇A作為依賴時(shí),錯(cuò)誤就會(huì)發(fā)生,因?yàn)锳等待B完成,B等待C完成,C卻等待A完成,解決方法是將A加入B、B的依賴、B的依賴的依賴、B的依賴的依賴的依賴(簡(jiǎn)稱B的依賴路徑)……的禁用選項(xiàng)中,可以使用遞歸算法實(shí)現(xiàn)。
恢復(fù)選項(xiàng):假設(shè)工序A刪除了一個(gè)依賴B,這時(shí)不能盲目地將B的禁用選項(xiàng)A刪除,因?yàn)楣ば駻可能有一個(gè)依賴C,而C的依賴是B,根據(jù)禁用選項(xiàng)部分的論述,B依然不能將A作為依賴,即B的禁用選項(xiàng)A不能恢復(fù)。這種情況發(fā)生的根源是A存在其他含有B的依賴路徑,所以解決方法是將B的依賴路徑減去A依賴路徑與B依賴路徑的交集,所剩余的依賴為恢復(fù)選項(xiàng),即從禁用選項(xiàng)中刪除。
算法運(yùn)行過(guò)程:①根據(jù)節(jié)點(diǎn)判斷需要禁用還是恢復(fù)過(guò)程;②遞歸查找禁用(恢復(fù))列表;③根據(jù)禁用(恢復(fù))列表調(diào)整工序表。自動(dòng)檢測(cè)算法流程圖如圖4所示。
2.4.3 自動(dòng)提取數(shù)據(jù)
算法的輸入:服務(wù)通告PDF原件。算法的輸出:服務(wù)通告中的最短施工時(shí)間、總?cè)斯すr(shí)、工序步驟。
PDF文件不便于數(shù)據(jù)提取,所以選擇使用工具將PDF轉(zhuǎn)化為文本文件,這里選擇了Python工具pdftotext,使用layout選項(xiàng)以保留頁(yè)面布局,文本轉(zhuǎn)化好之后,可以利用Perl的文本處理功能提取數(shù)據(jù),因?yàn)镻erl原生支持正則表達(dá)式,使用Perl正則表達(dá)式進(jìn)行文本匹配時(shí),程序在循環(huán)中進(jìn)行,每次只匹配一行,每個(gè)文件中關(guān)于人工工時(shí)部分的信息重復(fù)出現(xiàn)了兩次,所以需要設(shè)置一個(gè)變量作為開關(guān),當(dāng)匹配了一次結(jié)果后就關(guān)閉開關(guān)以避免重復(fù)。
對(duì)于標(biāo)題部分,原標(biāo)題是一個(gè)用“-”連接的整體,并且使用了不同的編碼表示“-”,這非常不便于數(shù)據(jù)拆分統(tǒng)計(jì),所以標(biāo)題需要經(jīng)過(guò)二次處理,利用正則表達(dá)式的替換功能,把各種編碼的“-”替換稱制表符,只有這樣,統(tǒng)計(jì)分析模塊才能分析處理。
對(duì)于工序部分,服務(wù)通告內(nèi)的工序非常復(fù)雜,有的工序包含子工序,甚至子工序的子工序,為了處理方便和數(shù)據(jù)簡(jiǎn)潔,程序只處理到第一層工序(即不包含子工序),這樣仍然不能正常提取,單行的工序與子工序之間幾乎沒(méi)有格式上的差異(即使人工比較單行工序也很難發(fā)現(xiàn)差異),仔細(xì)思考人理解文件的方式后發(fā)現(xiàn),人可以進(jìn)行上下文比對(duì),而程序是單行匹配的,為了讓程序也能上下文比對(duì),而不破壞逐行匹配的模式,程序使用了一些上下文變量以提供上下文比對(duì)的功能,匹配前先檢查上下文變量以決定是否匹配當(dāng)前行,以及上一行匹配結(jié)果是否有效,這樣處理后,程序匹配工序失誤的概率顯著降低。
2.4.4 自動(dòng)統(tǒng)計(jì)數(shù)據(jù)
算法的輸入:新加入的服務(wù)通告最短施工時(shí)間、總?cè)斯すr(shí),數(shù)據(jù)的原統(tǒng)計(jì)結(jié)果。算法的輸出:數(shù)據(jù)的新統(tǒng)計(jì)結(jié)果。
數(shù)據(jù)統(tǒng)計(jì)可以使用離線算法,也可以使用在線算法,離線算法需要輸入所有數(shù)據(jù),沒(méi)有利用已完成的統(tǒng)計(jì)結(jié)果,效率低下,所以使用在線算法。
在數(shù)據(jù)庫(kù)中,使用一張數(shù)據(jù)表存儲(chǔ)所有數(shù)據(jù),使用另一張數(shù)據(jù)表存儲(chǔ)中間結(jié)果和統(tǒng)計(jì)量,其中每一條記錄代表標(biāo)題屬性相同的同類數(shù)據(jù),為了統(tǒng)計(jì)最大值、最小值、平均值、眾數(shù)等統(tǒng)計(jì)量,需要在每條記錄中存儲(chǔ)已統(tǒng)計(jì)過(guò)的數(shù)據(jù),這樣統(tǒng)計(jì)時(shí)就不用從所有數(shù)據(jù)中搜索同類數(shù)據(jù)。
由于數(shù)據(jù)庫(kù)很難存儲(chǔ)復(fù)雜的數(shù)據(jù)(比如數(shù)組),所以已經(jīng)統(tǒng)計(jì)過(guò)的數(shù)據(jù)不能以數(shù)組結(jié)構(gòu)存儲(chǔ),解決方法是使用一種變通策略,將數(shù)組轉(zhuǎn)化為字符串存儲(chǔ)在數(shù)據(jù)庫(kù)中,在使用時(shí)將字符串轉(zhuǎn)化為數(shù)組。為了實(shí)現(xiàn)這種策略,轉(zhuǎn)化為字符串時(shí)應(yīng)遵循某種規(guī)則,保證這種轉(zhuǎn)化是可逆的。在本程序的轉(zhuǎn)化中,數(shù)組元素之間插入了特殊符號(hào),在解析字符串時(shí)以這種符號(hào)將字符串分割為數(shù)組,這樣帶來(lái)的好處是不需要修改數(shù)據(jù)庫(kù)的定義就可以存儲(chǔ)自定義的數(shù)據(jù),而且可以方便地重新定義數(shù)據(jù)。
獲得了已統(tǒng)計(jì)過(guò)的數(shù)據(jù)后,統(tǒng)計(jì)量的計(jì)算就變得非常簡(jiǎn)單,將新統(tǒng)計(jì)的數(shù)據(jù)與原最大值、最小值比較可以獲得新的最大值、最小值,搜索新數(shù)據(jù)的出現(xiàn)頻率與原眾數(shù)出現(xiàn)頻率,然后比較得到新的眾數(shù)值,其他統(tǒng)計(jì)量的計(jì)算過(guò)程類似,此處不再贅述。
2.4.5 數(shù)據(jù)搜索算法
算法的輸入:搜索關(guān)鍵字、搜索精確度。算法的輸出:匹配到的相關(guān)服務(wù)通告最短施工時(shí)間、總?cè)斯すr(shí)等數(shù)據(jù)。
要實(shí)現(xiàn)數(shù)據(jù)搜索,直接使用數(shù)據(jù)庫(kù)的查詢功能是不行的,因?yàn)镾ELECT語(yǔ)句擅長(zhǎng)根據(jù)其他屬性篩選數(shù)據(jù),所以屬性值必須完全符合才能正確匹配,而數(shù)據(jù)搜索功能更像常用網(wǎng)頁(yè)搜索引擎的模糊匹配功能,即使輸入不精確的信息也能得到想要的結(jié)果。
為了實(shí)現(xiàn)模糊匹配功能,程序需要對(duì)輸入關(guān)鍵字進(jìn)行拆分,由于將關(guān)鍵字拆分為單個(gè)詞匯在不使用自然語(yǔ)言處理技術(shù)的情況下可能比較困難,而使用自然語(yǔ)言處理技術(shù)已經(jīng)超出能力范圍,所以程序?qū)㈥P(guān)鍵字拆分成字符而非詞匯。
獲得分割好的各級(jí)別的字符集(簡(jiǎn)稱為源字符)后,程序每次掃描一條數(shù)據(jù)的標(biāo)題部分,以相同的方式對(duì)標(biāo)題各級(jí)別進(jìn)行分割得到字符集(簡(jiǎn)稱目標(biāo)字符)。每次掃描一個(gè)源字符,如果源字符與某一個(gè)目標(biāo)字符相同,稱為一次命中,命中的次數(shù)與源字符個(gè)數(shù)之比稱為匹配度,完成源字符掃描后,計(jì)算匹配度,如果匹配度超過(guò)設(shè)定的閾值,則該數(shù)據(jù)匹配成功,否則失敗。
為了更精準(zhǔn)地匹配同級(jí)關(guān)鍵字,同時(shí)具有匹配非同級(jí)關(guān)鍵字的能力,只需對(duì)以上算法稍做修改:增加一次對(duì)同級(jí)別字符的掃描,計(jì)算匹配度時(shí)將源字符個(gè)數(shù)乘2,其他不變,這樣同級(jí)匹配權(quán)值為1,不同級(jí)匹配權(quán)值為0.5,在閾值較高時(shí),可以排除非同級(jí)關(guān)鍵字匹配;當(dāng)閾值較低時(shí),可以匹配非同級(jí)關(guān)鍵字。當(dāng)閾值達(dá)到100%時(shí),程序?qū)⒉辉龠M(jìn)行模糊匹配,而只有關(guān)鍵字完整連續(xù)匹配時(shí),才能匹配成功,這樣做可以適應(yīng)更高的匹配需求。
3 軟件界面與應(yīng)用
基于Python語(yǔ)言開發(fā)了服務(wù)器端程序,包括數(shù)據(jù)I/O模塊、數(shù)據(jù)庫(kù)模塊、數(shù)據(jù)提取模塊;基于JavaScript語(yǔ)言開發(fā)了瀏覽器端程序,包括數(shù)據(jù)I/O模塊、工時(shí)計(jì)算模塊、GUI交互模塊,主頁(yè)包括頂部導(dǎo)航欄、數(shù)據(jù)輸入欄、表格展示區(qū)、底部裝飾欄4個(gè)區(qū)域。
假設(shè)已知某服務(wù)通告的大致類別為空調(diào)-軟管。在數(shù)據(jù)輸入欄的查詢區(qū)分別輸入“空調(diào)”“軟管”,點(diǎn)擊查詢即可快速獲得參考工時(shí)。調(diào)節(jié)查詢精準(zhǔn)度:移動(dòng)數(shù)據(jù)輸入欄的滑塊,重新點(diǎn)擊查詢即可,查詢的結(jié)果中的“詳情”可在點(diǎn)擊后顯示此記錄所統(tǒng)計(jì)的服務(wù)通告工序數(shù)和文件下載鏈接。
假設(shè)當(dāng)前工程需要3道工序P1、P2、P3,其中P2和P3互不影響,但必須在完成P1后才能開始,在已知每道工序的最小時(shí)長(zhǎng)、最大時(shí)長(zhǎng)、平均時(shí)長(zhǎng)的條件下,計(jì)算人工工時(shí)。首先,在左側(cè)數(shù)據(jù)輸入欄的計(jì)算區(qū)輸入工序數(shù)3,點(diǎn)擊“確定”后在右側(cè)生成工序表,填寫工序表各項(xiàng)數(shù)據(jù)時(shí)分別在P2和P3的“緊前工序”中選擇P1,點(diǎn)擊“計(jì)算”即可得到人工工時(shí)計(jì)算結(jié)果。在填寫工序表時(shí),如果左側(cè)數(shù)據(jù)輸入欄中的邏輯檢測(cè)功能處于開啟狀態(tài),則會(huì)為每道工序的“緊前工序”剔除所有會(huì)造成邏輯錯(cuò)亂的選項(xiàng),避免因誤填而導(dǎo)致的錯(cuò)誤。
軟件內(nèi)部數(shù)據(jù)來(lái)自已發(fā)布的服務(wù)通告文件,可實(shí)現(xiàn)文件到數(shù)據(jù)的自動(dòng)轉(zhuǎn)換。應(yīng)用內(nèi)的數(shù)據(jù)一般在后端添加和處理,為了方便數(shù)據(jù)更新,本應(yīng)用還提供了從瀏覽器端更新數(shù)據(jù)的功能,由于上傳行為受網(wǎng)絡(luò)狀況影響較大,所以建議不要以此方式更新大量數(shù)據(jù)。
在數(shù)據(jù)輸入欄點(diǎn)擊“選擇文件”按鈕,瀏覽器調(diào)用系統(tǒng)的文件瀏覽器,選擇需要上傳的PDF文件(按住Ctrl可多選),點(diǎn)擊“打開”,按鈕右側(cè)會(huì)顯示已選擇了幾個(gè)文件,點(diǎn)擊“上傳”按鈕,如果沒(méi)有后端正在更新數(shù)據(jù),也沒(méi)有其他客戶端正在更新數(shù)據(jù)時(shí),后端會(huì)接收文件,提取數(shù)據(jù),添加到數(shù)據(jù)庫(kù),并更新統(tǒng)計(jì)數(shù)據(jù)以供查詢,之后瀏覽器提示文件處理情況,后端的所有操作全部自動(dòng)完成,不需要人為干預(yù)。如果有后端正在更新數(shù)據(jù),或者其他客戶端正在更新數(shù)據(jù),瀏覽器會(huì)彈出提示,請(qǐng)耐心等待其他數(shù)據(jù)更新完畢。
4 結(jié)語(yǔ)
采用先進(jìn)的Web應(yīng)用技術(shù)和網(wǎng)絡(luò)計(jì)劃理論,開發(fā)了服務(wù)通告人工工時(shí)計(jì)算的軟件,實(shí)現(xiàn)了一整套數(shù)據(jù)提取、統(tǒng)計(jì)、搜索的人工工時(shí)數(shù)據(jù)庫(kù)系統(tǒng),提供有價(jià)值的工時(shí)參考數(shù)據(jù),解決了僅憑工程經(jīng)驗(yàn)估計(jì)工時(shí)的人為主觀影響和時(shí)間不確定性的問(wèn)題。軟件采用跨平臺(tái)用戶界面,在不同需求下都具有良好的交互體驗(yàn)。
參 考 文 獻(xiàn)
[1]嚴(yán)煥迪,邢廣華.民用飛機(jī)服務(wù)通告編制及管理分析[J].航空工程進(jìn)展,2019,10(2):194-200.
[2]李寧,吳之明.網(wǎng)絡(luò)計(jì)劃技術(shù)的新發(fā)展——項(xiàng)目關(guān)鍵鏈管理(CCPM)[J].公路,2002(10):85-88.
[3]葉鋒.Python最新Web編程框架Flask研究[J].電腦編程技巧與維護(hù),2015(15):27-28.
[4]李廣宏.vue.js前端應(yīng)用技術(shù)分析[J].中國(guó)新通信,2019,21(20):115.
[5]劉志洋.ajax技術(shù)在web程序開發(fā)中的運(yùn)用探討[J].輕紡工業(yè)與技術(shù),2020,49(2):169-170.
[6]孫紀(jì)周,朱鋒,趙芳,等.基于WEB及APP的設(shè)備維修管理系統(tǒng)[J].軟件,2020,41(1):165-169.
[7]牛作東,李捍東.基于Python與flask工具搭建可高效開發(fā)的實(shí)用型MVC框架[J].計(jì)算機(jī)應(yīng)用與軟件,2019,
36(7):21-25.
[8]李超,徐云龍,華中偉,等.一種基于Python Flask的Web服務(wù)器端設(shè)計(jì)[J].信息與電腦(理論版),2019(8):87-88.
[9]鄧成,孫書會(huì).MVVM設(shè)計(jì)模式的前端應(yīng)用[J].電腦知識(shí)與技術(shù),2019(29):249-250.
[10]呂英華.漸進(jìn)式JavaScript框架Vue.js的全家桶應(yīng)用[J].電子技術(shù)與軟件工程,2019(22):39-40.
[11]劉鵬.移動(dòng)Web3.0時(shí)代AJAX技術(shù)在個(gè)性化開發(fā)中的作用[J].電子技術(shù)與軟件工程,2018(22):59-60.
[12]盧愛(ài)芬.基于H5中的Bootstrap框架技術(shù)的應(yīng)用與研究[J].電腦知識(shí)與技術(shù),2020,16(7):54-56.
[13](美)格林布戈.Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實(shí)戰(zhàn)[M].安道,譯.北京:人民郵電出版社,2015.