版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、實(shí)驗(yàn) 15 簡(jiǎn)單數(shù)據(jù)庫應(yīng)用程序開發(fā)一、目的與要求 :1) 了解實(shí)際數(shù)據(jù)庫應(yīng)用系統(tǒng)的開發(fā)過程;2) 掌握 ODB (數(shù)據(jù)源的建立方法;3) 掌握在不同開發(fā)工具中使用 ODBC 或 ADO 等技術(shù)連接數(shù)據(jù)庫的根本方法;4) 初步掌握數(shù)據(jù)庫應(yīng)用程序的根本方法;5) 開發(fā)一個(gè)簡(jiǎn)單的數(shù)據(jù)庫應(yīng)用程序。二、背景知識(shí)用戶與 DBMS 交互,一種方式是直接借助 DBMS 系統(tǒng),采用 SQL 命令進(jìn)行,另一種 方式是用 戶通過數(shù)據(jù)庫應(yīng)用程序與 DBMS 交互,對(duì)非計(jì)算機(jī)專業(yè)用戶來說,這是最簡(jiǎn)單的 方式。數(shù)據(jù)庫應(yīng)用程 序通過一定方式與數(shù)據(jù)庫建立連接,然后與DBMS 建立交互。數(shù)據(jù)庫應(yīng)用程序的開發(fā)是信息系統(tǒng)建設(shè)的重要
2、組成局部。數(shù)據(jù)庫應(yīng)用程序與 DBMS 可以通過一系列的應(yīng)用程序接口(Application ProgrammingIn terface, API) 進(jìn)行通信,通過 API 調(diào)用傳遞 SQL 語句給 DBMS ,并使用 API 調(diào)用檢索結(jié)果。 常用的 數(shù)據(jù)庫應(yīng)用編程接口有ODBC 、 JDBC 、ADO 、 ADO.NET 和 OLE DB 等。目前數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)中通常使用兩種體系結(jié)構(gòu)即客戶機(jī)/效勞器 ( Client/Server,C/S)結(jié)構(gòu)和瀏覽器/效勞器(Browser/Server, B/S )結(jié)構(gòu)。C/S 結(jié)構(gòu)的效勞器上安裝數(shù)據(jù)庫及數(shù)據(jù)庫管理系統(tǒng),用于執(zhí)行DBMS 功能,稱為數(shù)據(jù)
3、庫效勞器;而客戶機(jī)那么安裝 DBMS 的外圍應(yīng)用開發(fā)工具即客戶端應(yīng)用程序,支持用戶的應(yīng) 用,稱為客 戶機(jī)。一般系統(tǒng)由一臺(tái)數(shù)據(jù)庫效勞器和多臺(tái)客戶機(jī)組成。B/S 結(jié)構(gòu)是隨著數(shù)據(jù)庫應(yīng)用系統(tǒng)規(guī)模的擴(kuò)大和 Internet 的迅速普及而產(chǎn)生的體系結(jié)構(gòu),在 B/S 結(jié)構(gòu)中,客戶機(jī)上只要安裝瀏覽器如 In ternet ExplORer 或 Netscape NavigatOR ,數(shù)據(jù) 庫效勞 器上安裝 DBMS 和數(shù)據(jù)庫,用戶界面完全通過 WWW 瀏覽器實(shí)現(xiàn),應(yīng)用邏輯在 Web 效勞器端實(shí)現(xiàn)。 瀏覽器通過 Web 效勞器同數(shù)據(jù)庫進(jìn)行數(shù)據(jù)交互。數(shù)據(jù)庫應(yīng)用系統(tǒng)的體系結(jié)構(gòu)不同, 其開發(fā)工具也有所不同。 目前比擬
4、主流的 C/S 結(jié)構(gòu)前 端開發(fā)工具有 Delphi 、Visual Basic 、Visual Basic.NET 、Visual C+ 、JAVA 和 PowerBuilder 等。 而B/S結(jié)構(gòu)的開發(fā)工具有 ASP、ASP.NET、JSP和PHP等。在開發(fā)工具中通??梢酝?過API如ODBC、 JDBC、 ADO 、 ADO.NET 和 OLE DB 等接口建立與后臺(tái)數(shù)據(jù)庫的連接。三、實(shí)驗(yàn)內(nèi)容 開發(fā)一個(gè)簡(jiǎn)單的數(shù)據(jù)庫應(yīng)用系統(tǒng),針對(duì) EDUC 數(shù)據(jù)庫,開發(fā)其簡(jiǎn)單的應(yīng)用程序界面, 能夠?qū)ζ渲?的表數(shù)據(jù)進(jìn)行操作。系統(tǒng)采用 C/S 體系結(jié)構(gòu),客戶端負(fù)責(zé)提供表達(dá)邏輯、顯示用戶界面信息、訪問數(shù)據(jù)庫效勞器
5、,自選一種開發(fā)工具(Visual C+,Visual Basic 或Delphi);服務(wù)器端那么用于提供數(shù)據(jù)效勞,采用 SQL Server2005 作為數(shù)據(jù)庫管理系統(tǒng)。四、實(shí)驗(yàn)步驟選擇的開發(fā)工具不同, 應(yīng)用程序與數(shù)據(jù)庫的連接方式及應(yīng)用程序的編寫方式就不同,面列舉在Visual C+工具下簡(jiǎn)單應(yīng)用界面的設(shè)計(jì)方法。1. 建立ODBC數(shù)據(jù)源在介紹具體方案之前,先為EDUC數(shù)據(jù)庫建立 ODBC數(shù)據(jù)源。方法如下:(1 )在Windows XP中選擇“開始| “控制面板 | “管理工具命令,出現(xiàn)如圖15-1幕gy悴功itw ±3rrt 甘 WarTttSTliJ 論嚴(yán)喚 迅IEIWILDS J
6、Ebid褪郎fFF其L乩 rMr 軍 L inmr 泳 Swmr所示的“管理工具窗口15-1“管理工具窗口圖15-2 “系統(tǒng)DSN選項(xiàng)卡窗Sfrtt.) ekd HI£ftKu'i T*iti4i 羽IMffrtnrr儡)雙擊“ ODBCH數(shù)據(jù)源,翻開“ ODBC數(shù)據(jù)源管理器對(duì)話框;選擇“系統(tǒng) DSN 博n雷存,2IH "'選項(xiàng)卡,如圖15-2所示。略云他o(3) 單擊“添加按鈕,出現(xiàn)如圖 15-3所示的對(duì)話框;選擇 SQL Server選項(xiàng),單擊“完 成2 n-按鈕。(4)出現(xiàn)“創(chuàng)立到SQL Server的新數(shù)據(jù)源對(duì)話框,如圖15-4所示;在“名稱文本框?qū)?/p>
7、5E I 1?疳碾9J中輸入XSGL,單擊“下一步按鈕。圖15遶誓去卻力旦建新數(shù)據(jù)源進(jìn)欣寸話框源對(duì)話框圖15-比于淫粧岳沁晦建到SQL Server的新數(shù)據(jù)S.rAr 的 CK融勞璟?(5)出現(xiàn)連連接TtSQLSever認(rèn)證的輸入框,選擇“使用用戶輸入登錄ID和密碼的SQLHi croa,a £CDE £for Ob' irlvHjT v udn DE LVRX* t*. -lb *Server驗(yàn)證單項(xiàng)選擇按鈕,在(*:»: J ID 文本框中輸入sa,在“密碼文本框中輸入效勞器登錄密碼,Twt-Tr+ibHr (* tit: +.civ) icrAiAf
8、 t FiFiQ 內(nèi)單擊“下一步按鈕,他進(jìn)入選擇數(shù)據(jù)庫的對(duì)話框。SftLIkLLT* Cliw.L(6 )選中“更改默認(rèn)的數(shù)據(jù)庫為復(fù)選框,從其下方的下拉列表框中選擇數(shù)據(jù)庫為XSGL,不更改其他默認(rèn)設(shè)置。 設(shè)置完畢后,單擊“下一步按鈕,進(jìn)入設(shè)置ODBC對(duì)話框, 如圖15-5所示。保持默認(rèn)選項(xiàng),單擊“完成按鈕,7出現(xiàn) ODBC 配置確實(shí)認(rèn)對(duì)話框,如圖 15-6 所示。單擊“測(cè)試數(shù)據(jù)源按鈕,即SQL SrTttr宣建tiff日函靈“仃的片數(shù)r總TFT冷巔廿亠.理豹曠KK護(hù)的Ilk n-*icft Sul:IFT ik JiWffM 03 昨 II IT5IfHU賣 ffVOI4確識(shí)a ?;了Jt4F
9、泓就齋吉1±崔*驢UFJi-.«r吐oflatf®2-"占諄WIIII護(hù)話曲貳円審厲血JCKrj 占涔;味S*-孕叮Mro rrN 曹缶劑 nln-Ibrf'-M-e任咗圖15-6 ODBC配置確認(rèn)對(duì)話框選擇應(yīng)用程序開發(fā)工具,然后實(shí)現(xiàn)I 上; wl <fa Ieduc已經(jīng)建成。圖15-5 “創(chuàng)立到SQL Server的新數(shù)據(jù)源對(duì)話框2. 建立數(shù)據(jù)庫應(yīng)用程序數(shù)據(jù)源建立后,可進(jìn)行簡(jiǎn)單數(shù)據(jù)庫應(yīng)用程序的編寫如下功能:1 系統(tǒng)歡送界面;2登錄界面; 3 應(yīng)用程序主界面菜單、工具欄等;4應(yīng)用程序的其它界面如數(shù)據(jù)維護(hù)、數(shù)據(jù)查詢、數(shù)據(jù)統(tǒng)計(jì)等;5報(bào)表設(shè)計(jì);對(duì)
10、于數(shù)據(jù)訪問界面,一般的步驟如下:1建立工程工程;2界面窗口設(shè)計(jì);添加數(shù)據(jù)庫連接控件。3添加數(shù)據(jù)顯示控件。4修改控件屬性,把控件和數(shù)據(jù)庫綁定。5利用控件直接操作數(shù)據(jù)庫。6退出宿主語言后,在 DBMS環(huán)境下觀察數(shù)據(jù)庫的變化。7在開發(fā)工具編程環(huán)境下為事件增加程序代碼,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫的操縱。具體方法請(qǐng)參閱相關(guān)開發(fā)工具的參考書。下面分別介紹幾種不同開發(fā)工具下與數(shù)據(jù)庫連接的方法和簡(jiǎn)單應(yīng)用程序界面設(shè)計(jì)的根本方法。包括增加新的記錄、刪除記錄、修改記錄。方案一:采用Visual C+作為前端開發(fā)工具在VC下開發(fā)基于ADO的數(shù)據(jù)庫要稍微復(fù)雜一些,本次開發(fā)基于c/s體系結(jié)構(gòu)的學(xué)生選課管理系統(tǒng),采用三層模式進(jìn)行開發(fā)。即
11、數(shù)據(jù)層,業(yè)務(wù)層,界面層。下面關(guān)于開發(fā)的一些基本步驟作一個(gè)簡(jiǎn)單介紹:(1)導(dǎo)入 ADO 動(dòng)態(tài)鏈接庫 msado15.dll 到“ StdAfx.h 文件中,以便工程編譯完 后,自動(dòng)生 成對(duì) ADO 對(duì)象的封裝:添加步驟:(I ) 根據(jù)安裝系統(tǒng)盤的路徑,查找至 U c:program files'common filessystemadomsado15.dll 文 件(H)在“ StdAfx.h 文件中,添加一條語句:#impORt "c:program filescommon filessystemadomsado15.dll" no_namespace rename
12、("EOF","adoEOF")說明:(A) 重命名 EOF 是必要的,因?yàn)榈湫偷腣C 應(yīng)用都已經(jīng)定義了 EOF 作為常數(shù) 1。(B) ADO 類的定義是作為一種資源存儲(chǔ)在ADO DLL(msado15.dll )中,在其內(nèi)部稱為類型庫。類型庫描述了自治接口,以及C+使用的COM vtable接口。當(dāng)使用# impORt指令時(shí),在運(yùn)行時(shí) Visual C + +需要從ADO DLL中讀取這個(gè)類型庫,并以此創(chuàng)立一組C+頭文件。這些頭文件具有.tli和.tlh擴(kuò)展名,讀者可以在工程的DEBUG目錄下找到這兩個(gè)文件。在 C +程序代碼中調(diào)用的ADO 類要在這些
13、文件中定義。(2)建立數(shù)據(jù)層類,實(shí)現(xiàn)與數(shù)據(jù)庫的連接、數(shù)據(jù)插入、刪除、查詢、數(shù)據(jù)更新操作。class ADOConnpublic:_ConnectionPtr m_pConnection; / 添加一個(gè)指向 Connection 對(duì)象的指針_RecORdsetPtr m_pRecORdset; / 添加一個(gè)指向 RecORdset 對(duì)象的指針/ 定義各種方法,實(shí)現(xiàn)數(shù)據(jù)庫的連接,數(shù)據(jù)的查詢,數(shù)據(jù)的增刪改ADOConn();virtual ADOConn();void OnInitADOConn(); / 初始化連接_RecORdsetPtr& GetRecORdSet(_bstr_t bs
14、trSQL); /執(zhí)行查詢BOOL ExecuteSQL(_bstr_t bstrSQL); / 執(zhí)行增刪改 SQL 語句, Insert Update _variant_t voidExitConnect();/退出數(shù)據(jù)庫連接;ADOConn:ADOConn()ADOConn:ADOConn()/ 初始化數(shù)據(jù)庫連接方法void ADOConn:OnInitADOConn()/ 初始化 OLE/COM 庫環(huán)境 , 由于 ADO 庫是一組 COM 動(dòng)態(tài)庫,應(yīng)用程序在調(diào)用 ADO 前,必 須先初始化 OLE/COM 庫環(huán)境,以便使調(diào)用 COM 的 API 工作正常。:CoInitialize(NU
15、LL);try m_pConnection.CreateInstance("ADODB.Connection"); /創(chuàng)立 Connection 對(duì)象/ 設(shè)置連接字符串,提供 DBMS 名稱,數(shù)據(jù)庫效勞器所在位置,數(shù)據(jù)庫的名稱, 用戶名, 口令_bstr_t strConnect = "driver=SQL Server; Server=; DATABASE=XSGL; UID=sa;PWD= ;"m_pConnection->Open(strConnect,"","",adModeUnkn
16、own);/ 捕捉異常 catch(_com_errOR e) AfxMessageBox(e.Description(); / 對(duì)數(shù)據(jù)庫執(zhí)行查詢的方法_RecORdsetPtr& ADOConn:GetRecORdSet(_bstr_t bstrSQL) /將查詢表達(dá)式作為參數(shù) 傳遞 try/ 連接數(shù)據(jù)庫,如果 Connection 對(duì)象為空,那么重新連接數(shù)據(jù)庫 if(m_pConnection=NULL) OnInitADOConn();/ 創(chuàng)立記錄集對(duì)象 m_pRecORdset.CreateInstance("ADODB.RecORdset");/ 取得表中
17、的記錄 m_pRecORdset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockO ptimistic,adCmdText);/ 捕捉異常 catch(_com_errOR e) AfxMessageBox(e.Description(); / 返回記錄集指針return m_pRecORdset;/ 對(duì)數(shù)據(jù)庫執(zhí)行插入、刪除、數(shù)據(jù)更新操作SQL 命令的方法BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) /將 SQL 命令作為參數(shù)傳遞try if(m_pConnectio
18、n = NULL)OnInitADOConn(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; catch(_com_errOR e)AfxMessageBox(e.Description(); return false;void ADOConn:ExitConnect()/ 關(guān)閉記錄集和連接if (m_pRecORdset != NULL)m_pRecORdset->Close();m_pConnection->Close();/ 釋放環(huán)境:CoUninitialize();(3) 建立業(yè)務(wù)層:在
19、 XSGL 信息系統(tǒng)中,學(xué)生表有插入、刪除、數(shù)據(jù)更新這樣的業(yè)務(wù)需求,因此,對(duì)數(shù)據(jù) 庫中的課 程表建立一個(gè)課程業(yè)務(wù)類, 封裝相應(yīng)的方法,以保證數(shù)據(jù)能夠正確操作。 同樣,課 程表與選課表也 有類似的業(yè)務(wù)需求,也需要建立相應(yīng)的業(yè)務(wù)類。class coursepublic:CString cno,cname,tname,room; / 對(duì)應(yīng)表中的字段int credit; / 對(duì)應(yīng)表中的字段course();virtual course();void sql_insert();void sql_delete(CString icno);void sql_update(CString icno);/ 按
20、課程編號(hào),判斷是否存在相同紀(jì)錄int havecno(CString icno);#include "ADOConn.h"course:course() course:course() /課程業(yè)務(wù)類插入數(shù)據(jù)的接口,在此接口中,調(diào)用數(shù)據(jù)層類,將數(shù)據(jù)插入到數(shù)據(jù)庫中void course:sql_insert()ADOConn adoconn;adoconn.OnInitADOConn();_bstr_t sqltemp;CString tempcredit; /_bstr_t 中只支持字符串的相加操作,所以必須把數(shù)值轉(zhuǎn)換成字符串tempcredit.FORmat("%
21、f", credit );sqltemp="insert into course values('"+cno+"','"+cname+"','"+tname+ "',"+ tempcredit +",'"+ room +"')"adoconn.ExecuteSQL(sqltemp); adoconn.ExitConnect();/課程業(yè)務(wù)類刪除數(shù)據(jù)的接口,在此接口中,調(diào)用數(shù)據(jù)層類,將數(shù)據(jù)從數(shù)據(jù)庫中刪除v
22、oid course:sql_delete(CString icno)ADOConn adoconn;adoconn.OnInitADOConn();_bstr_t sqltemp;sqltemp="delete from course where cno='"+icno+"'"adoc onn .ExecuteSQL(sqltemp);adoc onn .ExitC onn ect();/課程業(yè)務(wù)類更新數(shù)據(jù)的接口,在此接口中,調(diào)用數(shù)據(jù)層類,更新數(shù)據(jù)庫中的數(shù)據(jù)void course:sql_update(CStri ng icno)ADO
23、C onn adoc onn;adoc onn.Onlni tADOCo nn();_bstr_t sqltemp;sqltemp="update course set cn ame='"+c name+"',t name='"+t name+"' where eno='"+icno+"'"adoc onn .ExecuteSQL(sqltemp);adoc onn .ExitC onn ect();/按課程編號(hào),判斷是否存在相同紀(jì)錄int course:havec
24、no (CStri ng icno)/根據(jù)當(dāng)前用戶輸入的課程號(hào),判斷能否插入當(dāng)前記錄;如果存在,重新輸入,否那么插入ADOC onn adoc onn;_bstr_t sql;sql="select * from course where eno='"+icno+"'"_RecORdsetPtr m_precORdset; m_precORdset=adoco nn .GetRecORdSet(sql); if(m_precORdset->adoEOF)return -1;elsereturn 1;adoc onn .ExitC o
25、nn ect();(4 )建立表示層: 針對(duì)業(yè)務(wù)需求,建立相應(yīng)的窗體,如:課程(學(xué)生、選課)輸入、修改、刪 除窗體,這 類窗體和數(shù)據(jù)庫的數(shù)據(jù)傳遞,通過相應(yīng)的業(yè)務(wù)類實(shí)現(xiàn),所有信息的查詢窗體,可以通 過DataGrid控件較輕松地實(shí)現(xiàn)。(I)添加課程記錄界面的實(shí)現(xiàn)圖15-22添加課程紀(jì)錄界面in terface_course 中,添加如下所示的成員變量(A )首先建立如圖15-22所示的對(duì)話窗(B)在與對(duì)話窗對(duì)應(yīng)的類CStri ng m_cno;CStri ng m_c n ame;CStri ng m_cteacher;int m_credit;CStri ng m_room;在插入控件響應(yīng)函數(shù)
26、中,添加如下的代碼: void in terface_course:O nln sert()UpdateData(1); 獲得用戶界面輸入的信息 course temp;/定義課程類的對(duì)象if(m_c no="")MessageBox(" 課程編號(hào)不能為空 "); return;if(m_c name= " “)MessageBox(" 課程名不能為空 ;) return;if(m_cteacher="")MessageBox(" 任課教師不能為空 "); return;if(m_credit=
27、0)MessageBox(" 學(xué)分不能為空 ;)return;if(m_credit>5 && m_credit<0)return;MessageBox(" 學(xué)分必須在 0.5-5 的范圍內(nèi) ;) if(m_room="")MessageBox(" 教室不能為空 ;) return; if(temp.havecno(m_cno)=1)MessageBox(" 該課程編號(hào)已存在 ;) return;temp.c no=m_cno;temp.c name=m_c name;temp.credit=m_credit;temp.t n ame=m_cteacher;temp.room=m_room;temp.sqlnsert();II調(diào)用課程類對(duì)象的插入函數(shù),將表示層數(shù)據(jù)傳送到數(shù)據(jù)庫中if(temp.havec
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度全新碼頭租賃合同及港口物流配套服務(wù)協(xié)議3篇
- 2025年度人工智能教育與培訓(xùn)簡(jiǎn)易版勞動(dòng)合同書2篇
- 二零二五年度科技孵化器場(chǎng)地租賃管理服務(wù)合同2篇
- 2025農(nóng)村回遷房安置補(bǔ)償標(biāo)準(zhǔn)買賣合同2篇
- 二零二五年度個(gè)人與公司代收代付國際匯款合同范本3篇
- 二零二五年度環(huán)保型水泥產(chǎn)品采購合同3篇
- 二零二五年度貧困戶健康扶貧幫扶合同3篇
- 2025年度工業(yè)機(jī)器人機(jī)械定制開發(fā)合同3篇
- 二零二五年度農(nóng)副產(chǎn)品冷鏈物流設(shè)施建設(shè)合同3篇
- 二零二五年度學(xué)校防火門安全評(píng)估與維修改造合同3篇
- 外來人員車輛入廠安全須知
- 01S201室外消火栓安裝圖集
- 浪潮入職培訓(xùn)考試題目
- B2C網(wǎng)絡(luò)商店物流服務(wù)質(zhì)量及其與顧客忠誠的關(guān)系研究的中期報(bào)告
- 年同等學(xué)歷考研申碩綜合科復(fù)習(xí)指導(dǎo)(教育心理學(xué))課件
- 線段角動(dòng)點(diǎn)問題
- 劍橋英語PET真題校園版
- 【課件】沉心靜氣打贏最后一仗 課件-2022-2023學(xué)年高中主題班會(huì)
- 2021傳播心理學(xué)課程教學(xué)大綱
- HSk-lesson07part2-第-七-課-最好的醫(yī)生是自己
- 抖音直播電商項(xiàng)目計(jì)劃書抖音電商創(chuàng)業(yè)商業(yè)計(jì)劃書抖音直播帶貨計(jì)劃書抖音電商運(yùn)營方案
評(píng)論
0/150
提交評(píng)論