版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
超市管理系統(tǒng)主講人:段江城計(jì)科11505采用技術(shù)語(yǔ)言:JAVA數(shù)據(jù)庫(kù):SQLServerUI:Swing(用于開(kāi)發(fā)Java應(yīng)用程序用戶界面的開(kāi)發(fā)工具包)UI(服務(wù))邏輯數(shù)據(jù)應(yīng)用程序SwingSQLServerJAVA問(wèn)題的定義及可行性分析目的用最小的代價(jià)在盡可能短的時(shí)間內(nèi)確定問(wèn)題能否解決三方面考慮技術(shù)可行性經(jīng)濟(jì)可行性操作可行性成本一般占總成本的5~10%需求分析信息來(lái)源用戶溝通用戶往往不能準(zhǔn)確、全面地提出系統(tǒng)需求設(shè)計(jì)開(kāi)發(fā)人員可按信息系統(tǒng)建設(shè)的思路來(lái)引導(dǎo)用戶必要時(shí)可先按照用戶最初的描述,建立系統(tǒng)原型設(shè)計(jì)開(kāi)發(fā)人員以往類似系統(tǒng)經(jīng)驗(yàn)(文檔)同行業(yè)類似系統(tǒng)的經(jīng)驗(yàn)通過(guò)操作使用類似軟件系統(tǒng),整理最初的需求文檔,并在此基礎(chǔ)上,與用戶溝通、改進(jìn)需求需求分析登錄功能主界面1.菜單2.工具3.功能面板需求分析——業(yè)務(wù)流程訂單供貨商商品采購(gòu)入庫(kù)信息到貨發(fā)貨出庫(kù)信息銷售商品銷售商需求分析——實(shí)體登錄管理員信息運(yùn)營(yíng)管理訂單(記錄)信息入庫(kù)(記錄)信息出庫(kù)(記錄)信息人員管理部門信息(部門+負(fù)責(zé)人)員工信息(基本信息+聯(lián)系方式+部門信息+職務(wù)信息)基本檔案供貨商信息銷售商信息商品信息倉(cāng)庫(kù)信息需求分析——實(shí)體聯(lián)系圖運(yùn)營(yíng)管理訂單信息入庫(kù)信息倉(cāng)庫(kù)信息出庫(kù)信息買存取1nn1n1供貨商信息銷售商信息商品信息賣1n需求分析——實(shí)體聯(lián)系圖公司管理基本信息部門信息職位信息屬于m1聯(lián)系信息擁有1擁有11需求分析——功能模塊超市管理系統(tǒng)基本檔案管理采購(gòu)訂貨管理倉(cāng)庫(kù)入庫(kù)管理倉(cāng)庫(kù)出庫(kù)管理人員管理部門管理供貨商管理銷售商管理貨品檔案管理倉(cāng)庫(kù)管理登錄需求分分析——需求列列表功能模塊子模塊功能描述基本檔案管理供貨商管理添加添加供貨商信息刪除刪除供貨商信息查詢根據(jù)供貨商名稱或地址,查詢供貨商信息修改修改供貨商信息銷售商管理添加添加銷售商信息刪除刪除銷售商信息查詢根據(jù)銷售商名稱或地址,查詢銷售商信息修改修改銷售商信息貨品檔案管理添加添加貨品信息刪除刪除貨品信息查詢根據(jù)貨品名稱,查詢貨品信息修改修改貨品信息倉(cāng)庫(kù)管理添加添加倉(cāng)庫(kù)信息刪除刪除倉(cāng)庫(kù)信息查詢根據(jù)倉(cāng)庫(kù)編號(hào)或者管理員,查詢倉(cāng)庫(kù)信息修改修改倉(cāng)庫(kù)信息需求分分析——需求列列表功能模塊功能描述采購(gòu)訂貨添加訂單添加一條新訂單(及相關(guān)信息)刪除訂單刪除所選擇的訂單查詢訂單根據(jù)條件(客戶、訂單號(hào)、交換日期)查詢訂單修改訂單修改所選擇的訂單由訂單入庫(kù)由訂單表入庫(kù),并改變訂單狀態(tài)(由“未入庫(kù)”改為“已經(jīng)入庫(kù)”狀態(tài))商品入庫(kù)添加入庫(kù)信息添加一條入庫(kù)信息——選擇一條已有訂單的(全部或部分)商品,將其轉(zhuǎn)移至指定的倉(cāng)庫(kù)中刪除入庫(kù)信息刪除所選擇的入庫(kù)信息查詢?nèi)霂?kù)信息根據(jù)條件(訂單號(hào)、入庫(kù)時(shí)間)查詢?nèi)霂?kù)信息修改入庫(kù)信息修改所選擇的入庫(kù)信息商品出庫(kù)添加出庫(kù)信息添加一條出庫(kù)信息——選擇倉(cāng)庫(kù)及該倉(cāng)庫(kù)中已有的商品,以及重量、時(shí)間等信息,同時(shí)更新剩余商品的數(shù)量刪除出庫(kù)信息刪除所選擇的出庫(kù)信息查詢出庫(kù)信息根據(jù)條件(倉(cāng)庫(kù)號(hào)、出庫(kù)時(shí)間)查詢出庫(kù)信息修改出庫(kù)信息修改所選擇的出庫(kù)信息需求分分析——需求列列表功能模塊功能描述人員管理添加新員工添加一條新員工信息——選擇部門、職位,并填寫姓名、年齡、性別等信息刪除員工刪除所選擇的員工信息查詢員工根據(jù)部門,查詢?cè)摬块T某員工信息(基本信息,及詳細(xì)的聯(lián)系方式)修改員工修改所選擇的員工信息部門管理添加新部門添加一條新部門信息——指定部門名稱及負(fù)責(zé)人刪除部門刪除所選擇的部門信息查詢部門信息根據(jù)條件(部門名稱、負(fù)責(zé)人)查詢部門信息修改部門信息修改所選擇的部門信息權(quán)限管理登錄管理員用戶、密碼登錄需求分分析——需求總總結(jié)超市管理系統(tǒng)商品管理公司管理買賣訂單入庫(kù)出庫(kù)人員管理部門管理登錄基本檔案需求分分析——需求總總結(jié)實(shí)體體登錄錄管理理員員信信息息運(yùn)營(yíng)營(yíng)管管理理訂單單((記記錄錄))信信息息入庫(kù)庫(kù)((記記錄錄))信信息息出庫(kù)庫(kù)((記記錄錄))信信息息人員管理理部門信息息員工信息息(基本本信息+聯(lián)系方式式+職務(wù)信息息)基本檔案案供貨商信信息銷售商信信息商品信息息倉(cāng)庫(kù)信息息需求分析析——實(shí)體聯(lián)系系圖運(yùn)營(yíng)管理理、基本本檔案訂單信息息入庫(kù)信息息倉(cāng)庫(kù)信息息出庫(kù)信息息買存取1nn1n1供貨商信信息銷售商信信息商品信息息賣1nn11nn1需求分析析——需求總結(jié)結(jié)實(shí)體聯(lián)系系圖——公司管理理基本信息部門信息職位信息屬于m1聯(lián)系信息擁有1擁有11總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)功能模塊表實(shí)體登錄tb_users管理員信息人員管理tb_basicMessage基本信息tb_contact聯(lián)系方式tb_headship職務(wù)信息部門管理tb_dept部門信息運(yùn)營(yíng)管理tb_stock訂單信息tb_joinDepot入庫(kù)信息tb_outDepot出庫(kù)信息基本檔案tb_provide供貨商信息tb_sell銷售商信息tb_ware貨品信息tb_depot倉(cāng)庫(kù)信息總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)管理員信信息表(tb_users)列名類型允許空描述idint不能為空主鍵userNamevarchar(20)用戶名passWordvarchar(20)密碼總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)基本檔案案——供貨商信信息表(tb_provide)列名類型允許空描述idint不能為空主鍵cNamevarchar(20)不能為空供貨商名稱addressvarchar(40)地址linkmanvarchar(50)聯(lián)系人linkPhonevarchar(20)電話faxesvarchar(20)傳真postNumvarchar(10)郵編bankNumvarchar(30)銀行賬號(hào)netAddressvarchar(30)網(wǎng)址emaillAddressvarchar(50)電子郵件remarkvarchar(200)
備注總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)基本檔案案——銷售商信信息表(tb_sell)列名類型允許空描述idint不能為空主鍵sellNamevarchar(50)銷售商名稱addressvarchar(50)地址linkmanvarchar(50)聯(lián)系人linkPhonevarchar(50)聯(lián)系地址faxNumvarchar(50)傳真postNumvarchar(50)郵編bankNumvarchar(50)銀行賬號(hào)netAddressvarchar(50)網(wǎng)址emaillAddressvarchar(50)電子郵件remarkvarchar(50)備注總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)基本檔案案——貨品檔案案信息表表(tb_ware)列名類型允許空描述idint不能為空主鍵wareNamevarchar(50)貨品名稱warBewritevarchar(50)貨品描述specvarchar(50)單位stockPricefloat進(jìn)貨價(jià)retailPricefloat零售價(jià)associatorPricefloat
會(huì)員價(jià)總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)基本檔案案——倉(cāng)庫(kù)管理理信息表表(tb_depot)列名類型允許空描述idint不能為空主鍵managevarchar(50)管理員functionalvarchar(200)描述總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)采購(gòu)訂貨貨信息表表(tb_stock)列名類型允許空描述idint不能為空主鍵sNamevarchar(50)客戶orderIdvarchar(50)訂單號(hào)consignmentDatevarchar(50)交貨日期baleNamevarchar(50)商品名countvarchar(50)數(shù)量moneyfloat
金額總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)倉(cāng)庫(kù)入庫(kù)庫(kù)信息表表(tb_joinDepot)列名類型允許空描述idint不能為空主鍵oidvarchar(50)訂單號(hào)dIdint倉(cāng)庫(kù)編號(hào)wareNamevarchar(40)貨品名稱joinTimevarchar(50)入庫(kù)時(shí)間weightfloat重量remarkvarchar(200)
備注總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)倉(cāng)庫(kù)出庫(kù)庫(kù)信息表表(tb_outDepot)列名類型允許空描述idint不能為空主鍵didint倉(cāng)庫(kù)編號(hào)wNamevarchar(50)貨品名稱outDatevarchar(50)出庫(kù)時(shí)間wightfloat重量remarkvarchar(500)備注總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)部門信息息表(tb_dept)職位信息息表(tb_headship)列名類型允許空描述idint不能為空主鍵dNamevarchar(50)部門名稱principalvarchar(50)負(fù)責(zé)人bewritevarchar(500)(部門)描述列名類型允許空描述idint不能為空主鍵headshipNamevarchar(50)(職位)描述總體設(shè)計(jì)計(jì)——數(shù)據(jù)庫(kù)設(shè)設(shè)計(jì)員工信息息表基本信息息表(tb_basicMessage)聯(lián)系方式式信息表表(tb_contact)列名類型允許空描述idint不能為空主鍵namevarchar(10)姓名ageint年齡sexvarchar(50)性別deptint部門headshipint
職務(wù)列名類型允許空描述idint不能為空主鍵hidint外鍵,與員工基本信息表主鍵對(duì)應(yīng)contactvarchar(20)手機(jī)officePhonevarchar(30)辦公室電話faxvarchar(20)不能為空傳真emailvarchar(50)電子郵件faddressvarchar(50)
家庭住址總體設(shè)計(jì)計(jì)——界面設(shè)計(jì)計(jì)Swing簡(jiǎn)介——百度百科科Swing是一個(gè)用用于開(kāi)發(fā)發(fā)Java應(yīng)用程序序用戶界界面的開(kāi)開(kāi)發(fā)工具具包。以抽象窗窗口工具具包(AWT)為基礎(chǔ)礎(chǔ),使跨跨平臺(tái)應(yīng)應(yīng)用程序序可以使使用任何何可插拔拔的外觀觀風(fēng)格。。AWT(AbstractWindowToolkit):提供了一套套與本地圖形形界面進(jìn)行交交互的接口,是Java提供的用來(lái)建建立和設(shè)置Java的圖形用戶界面面的基本工具。。Swing開(kāi)發(fā)人員只用用很少的代碼碼就可以利用用Swing豐富、靈活的的功能和模塊塊化組件來(lái)創(chuàng)創(chuàng)建優(yōu)雅的用用戶界面總體設(shè)計(jì)——界面設(shè)計(jì)Swing頂級(jí)容器圖形界面至少少要有一個(gè)頂頂級(jí)Swing容器頂級(jí)Swing容器為其它Swing組件在屏幕上上的繪制和處處理事件提供供支持常用的頂級(jí)容容器:JFrame(框架):表表示主程序窗窗口JDialog(對(duì)話框)::每個(gè)JDialog對(duì)象表示一個(gè)個(gè)對(duì)話框,對(duì)對(duì)話框?qū)儆诙?jí)窗口JApplet(小程序)::在瀏覽器內(nèi)內(nèi)顯示一個(gè)小小程序界面總體設(shè)計(jì)——界面設(shè)計(jì)JFrameJPanelJPanelJButtonJTextField...總體設(shè)計(jì)——界面設(shè)計(jì)主要控件功能JFrame框架控件,頂級(jí)容器JPanel面板控件,控件容器JScrollPane帶滾動(dòng)條的面板控件JTabbedPane標(biāo)簽面板控件,將幾個(gè)面板集成到一起JLabel靜態(tài)框JTextField編輯框JPasswordField顯示密碼的編輯框(密碼顯示為“*”)JTextArea多行顯示編輯框JButton按鈕JCheckBox多選按鈕ButtonGroup按鈕組控件,將幾個(gè)單選按鈕組合在一起JRadioButton單選按鈕JComboBox下列組合框JTree樹形控件JTable表控件Swing常用的標(biāo)準(zhǔn)控控件總體設(shè)計(jì)——界面設(shè)計(jì)Enter(JFrame)BackgroundPanel(JPanel)JLabelJButtonJTextFieldClockPanel(JPanel)登錄界面總體設(shè)計(jì)——界面設(shè)計(jì)登錄界面Enter.javaEnterBackgroundPanelJLabelJButtonJTextFieldClockPanelJFrameJPanel主要函數(shù)/類功能main()程序主入口函數(shù)Enter()構(gòu)造函數(shù)getLoginPanel()初始化BackgroundPanel面板函數(shù),及添加面板上各種控件,為構(gòu)造函數(shù)所調(diào)用TitleMouseAdapter類MouseAdapter子類,實(shí)現(xiàn)鼠標(biāo)事件監(jiān)聽(tīng)器,獲取鼠標(biāo)事件發(fā)生的位置,這個(gè)類被設(shè)置到BackgroundPanel中(冗余代碼,無(wú)意義)總體設(shè)計(jì)——界面設(shè)計(jì)Enter.java函數(shù)調(diào)用關(guān)系系主函數(shù)main()構(gòu)造函數(shù)Enter()getLoginPanel()添加面板上各各控件為按鈕添加監(jiān)監(jiān)聽(tīng)器,實(shí)現(xiàn)現(xiàn)登錄總體設(shè)計(jì)——界面設(shè)計(jì)Enter.java主函數(shù)publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable()
{publicvoidrun()
{try{
UIManager.setLookAndFeel(newNimbusLookAndFeel());
SwingUtilities.invokeLater(newRunnable()
{publicvoidrun(){
Entermostly=newEnter();//調(diào)用構(gòu)造函數(shù)mostly.setVisible(true);}});}catch(Exceptione){e.printStackTrace();}}});}調(diào)用invokeLater()方法以請(qǐng)求事件派發(fā)線程程(EDT)運(yùn)行特定代碼碼設(shè)置外觀風(fēng)格格總體設(shè)計(jì)——界面設(shè)計(jì)Enter.java構(gòu)造函數(shù)。。。publicEnter(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);//窗體居中
setTitle("登錄窗體");
setBounds(100,100,559,285);contentPane=getLoginPanel();contentPane.setBorder(newEmptyBorder(5,5,5,5));
setContentPane(contentPane);
contentPane.setLayout(null);}設(shè)置頂級(jí)容器器JFrame屬性創(chuàng)建BackgroundPanel,并設(shè)置其邊邊界屬性將BackgroundPanel添加到Jframe中總體設(shè)計(jì)——界面設(shè)計(jì)Enter.java——getLoginPanel函數(shù)創(chuàng)建BackgroundPanel設(shè)置BackgroundPanel屬性創(chuàng)建子控件設(shè)置子控件屬屬性添加子控件到到BackgroundPanel中返回BackgroundPanelBackgroundPanelJPanelJButtonJTextField...總體設(shè)計(jì)——界面設(shè)計(jì)Enter.java——登錄按鈕監(jiān)監(jiān)聽(tīng)器登錄按鈕enterButton監(jiān)聽(tīng)器用戶名、密密碼檢測(cè)正確?進(jìn)入主頁(yè)面面RemoveButtomFrame同時(shí)時(shí)銷銷毀毀登登錄錄窗窗體體提示示錯(cuò)錯(cuò)誤誤清空空用用戶戶名名及及密密碼碼NY總體體設(shè)設(shè)計(jì)計(jì)———main函數(shù)數(shù)邏邏輯輯main()創(chuàng)建建并并顯顯示示登登錄錄界界面面((Enter.java)設(shè)置置框框架架屬屬性性,,并并創(chuàng)創(chuàng)建建、、添添加加面面板板設(shè)置置面面板板屬屬性性,,并并創(chuàng)創(chuàng)建建、、添添加加各各種種控控件件為某某些些控控件件添添加加監(jiān)監(jiān)聽(tīng)聽(tīng)器器,,處處理理事事件件登錄錄按按鈕鈕登錄錄按按鈕鈕監(jiān)監(jiān)聽(tīng)聽(tīng)器器由控件獲取數(shù)據(jù)創(chuàng)建UserBean對(duì)象,并對(duì)其屬性賦值調(diào)用UserDAO的getUser函數(shù),根據(jù)用戶名、密碼查詢管理員ID是否存在該管理員創(chuàng)建并顯示主框架界面(RemoveButtomFrame)提示出錯(cuò),并請(qǐng)用戶再次輸入YN總體體設(shè)設(shè)計(jì)計(jì)———界面面設(shè)設(shè)計(jì)計(jì)功能能主主界界面面RemoveButtomFrameClockPanelJPanelJLabelCanlenderPanelMyJPanelBGPanelJPanelJPanelJLabelJScrollPanelJTreeSamllScrollPanel1243總體體設(shè)設(shè)計(jì)計(jì)———主框框架架界界面面設(shè)置框架屬性,并創(chuàng)建、添加主面板1.創(chuàng)建時(shí)鐘面板,并添加到主面板2.創(chuàng)建日歷面板,并添加到主面板4.調(diào)用getModuleButtonGroup(),添加上方控制面板3.調(diào)用getContentPanel(),添加右下方功能面板輔助助控控件件JLabel等JTree及其其監(jiān)監(jiān)聽(tīng)聽(tīng)器器由JTree控制制的的內(nèi)容容面面板板菜單單面面板板SmallScrollPanel添加加按鈕鈕面面板板,并并設(shè)設(shè)定定其其為為僅僅一一行行的的網(wǎng)網(wǎng)格格布布局局添加加各各按鈕鈕(GlassButton)及及其其監(jiān)監(jiān)聽(tīng)聽(tīng)器器總體體設(shè)設(shè)計(jì)計(jì)———界面面設(shè)設(shè)計(jì)計(jì)RemoveButtomFrameMyJPanelJPanelBGPanelCalenderPanelSmallScrollPanel主功能界面JFrameJPanelJLabelClockPanelJPanelJScrollPanelJTreeJLabelJPanel1234時(shí)鐘日歷功能菜單總體設(shè)計(jì)——界面設(shè)計(jì)事件響應(yīng)——監(jiān)聽(tīng)器tree.addTreeSelectionListener(newTreeSelectionListener(){@OverridepublicvoidvalueChanged(TreeSelectionEvente){if(!tree.isSelectionEmpty()){TreePathselectionPaths=tree.getSelectionPath();Objectpath=selectionPaths.getLastPathComponent();DefaultMutableTreeNodenode=(DefaultMutableTreeNode)path;StringuserObject=(String)node.getUserObject();repaint();if(userObject.equals("供貨商管理")){fristLabel.setText(“供貨商管理”);//改變功能區(qū)標(biāo)題
sellPanel.removeAll();//清空功能區(qū)原有子面板
sellPanel.add(panelFeel.getMessage());//為功能區(qū)添加供貨商子面板}elseif(userObject.equals("銷售商管理")){…}}});界面設(shè)計(jì)——時(shí)鐘面板獲取時(shí)鐘背景圖片、中心點(diǎn)坐標(biāo)啟動(dòng)子線程每個(gè)1秒,發(fā)送repaint事件主線程子線程paint()drawClock()界面設(shè)計(jì)——時(shí)鐘面板構(gòu)造函數(shù)。。publicClockPanel(){setOpaque(false);//設(shè)置為不透明background=newImageIcon(getClass().getResource(“Core.png”));//加載背景時(shí)鐘圖片//計(jì)算時(shí)鐘的中心(用于畫時(shí)、分、秒針)inticonWidth=background.getIconWidth();centerX=iconWidth/2;
inticonHeight=background.getIconHeight();centerY=iconHeight/2;
setPreferredSize(newDimension(532,286));//設(shè)置時(shí)鐘面板大小
newThread(this).start();//啟動(dòng)子線程}界面設(shè)計(jì)——時(shí)鐘面板paint函數(shù)。。。publicvoidpaint(Graphicsg){Graphics2Dg2=(Graphics2D)g.create();//獲取2D繪圖對(duì)象
Compositecomposite=g2.getComposite();//存儲(chǔ)當(dāng)前的Composite
g2.setComposite(AlphaComposite.SrcOver.derive(0.6f));//設(shè)置新的Composite
Calendarcalendar=Calendar.getInstance();//獲取當(dāng)前時(shí)間
drawClock(g2,calendar);//調(diào)用drawClock函數(shù),繪制時(shí)鐘
g2.setComposite(composite);//恢復(fù)原有的Compositeg2.drawImage(background.getImage(),0,0,this);//畫背景圖片
g2.dispose();//釋放資源}界面設(shè)計(jì)——時(shí)鐘面板drawClock函數(shù)由Calender對(duì)象獲取當(dāng)前前時(shí)間根據(jù)當(dāng)前時(shí)間間計(jì)算時(shí)、分、秒針針位置利用Gragh2D對(duì)象畫出時(shí)、、分、秒針界面設(shè)計(jì)——日歷面板工具欄:getToolBar():4個(gè)JCheckBox(年、月增1或者減1),1個(gè)JFormattedTextField(顯示示當(dāng)前前日期期)日歷顯顯示區(qū)區(qū):getJPanel1():第一行為星星期Label剩余行為日日期Label調(diào)用remark()函數(shù)畫小格格子日歷數(shù)據(jù):日歷類:封裝了日歷歷操作的方方法界面設(shè)計(jì)——日歷面板功能工具欄——更改年、月月,并在日日歷欄顯示示該月份日日期日歷欄——選擇/標(biāo)準(zhǔn)日期工具欄(JPanel)JCheckBoxJCheckBoxJFormattedTextFieldJCheckBoxJCheckBoxGridBagLayout布局日歷欄(JPanel)Jlabel(共7個(gè),顯示周周)Jlabel(共6*7個(gè),顯示日日期)有監(jiān)聽(tīng)器GridLayout布局年份減1月份減1月份加1年份加1恢復(fù)到當(dāng)前前年月界面設(shè)計(jì)——日歷面板工具欄年月控制按按鈕監(jiān)聽(tīng)器。。。jButton1.addActionListener(newActionAdapter()//
添加監(jiān)聽(tīng)器{@OverridepublicvoidactionPerformed(ActionEvente)//
監(jiān)聽(tīng)器響應(yīng)函數(shù)
{calendar.add(Calendar.MONTH,-1);//改變?nèi)諝v信息(月份減1)
calendarChanged();//觸發(fā)其他已注冊(cè)的日期改變事件監(jiān)聽(tīng)器(如果有)
initDayButtons();//根據(jù)改變后的年月,更新日歷欄
JCheckBoxsource=(JCheckBox)e.getSource();//獲取該事件發(fā)生的源控件
source.setSelected(false);//將該控件設(shè)為沒(méi)有選中(為了美觀)
super.actionPerformed(e);//調(diào)用父類所實(shí)現(xiàn)的函數(shù),更新日期文本框
}});界面設(shè)計(jì)——日歷面板工具欄日期文本框框監(jiān)聽(tīng)器。。。dateField.addMouseListener(newMouseAdapter(){
publicvoidmousePressed(MouseEvente){calendar.set(YEAR,MONTH,DAY);//設(shè)置當(dāng)天日期
initDateField();//恢復(fù)工具欄日期文本框initDayButtons();//恢復(fù)日歷欄日期按鈕calendarChanged();//觸發(fā)其他已注冊(cè)的日期改變事件監(jiān)聽(tīng)器(如果有)
}});界面設(shè)計(jì)——日歷面板日歷欄label監(jiān)聽(tīng)器privatefinalclassDayClientListenerextendsMouseAdapter//
監(jiān)聽(tīng)器類定義{@OverridepublicvoidmousePressed(MouseEvente)//
監(jiān)聽(tīng)接口實(shí)現(xiàn)
{JLabellabel=(JLabel)e.getSource();//
獲取事件發(fā)生的源控件
if(label.getText().isEmpty())//如果這個(gè)控件上沒(méi)有日期,什么都不做,直接返回return;
reMark();//
用紅色邊框標(biāo)記當(dāng)前日期
Stringtext=label.getText();
intdayNum=Integer.parseInt(text);//
獲取當(dāng)前天的日期
calendar.set(Calendar.DAY_OF_MONTH,dayNum);//改變當(dāng)前日歷緩存對(duì)象
initDateField();//更新工具欄日期文本框
label.setOpaque(true);//
利用給不透明度和背景標(biāo)記所選日期label.setBackground(newColor(0xeeee00));
calendarChanged();//觸發(fā)其他已注冊(cè)的日期改變事件監(jiān)聽(tīng)器(如果有)
}
}界面設(shè)計(jì)計(jì)——菜單面板板SmallScrollPanelJbutton左控制按鈕控制AlphaScrollPane的偏移位置AlphaScrollPane六個(gè)功能控制按鈕GlassButton(特殊的顯示效果)Jbutton右控制按鈕控制AlphaScrollPane的偏移位置為每個(gè)按鈕添加監(jiān)聽(tīng)器,實(shí)現(xiàn)內(nèi)容面板的內(nèi)容切換SmallScrollPanelGlassButtonAlphaScrollPane界面設(shè)計(jì)計(jì)——菜單面板板類父控件功能描述SmallScrollPanelRemoveButtomFrame功能菜單容器面板(內(nèi)含左右控制按鈕、各功能按鈕)AlphaScrollPaneSmallScrollPanel包含各功能按鈕的面板(在SmallScrollPanel內(nèi)部,但不包含左右控制按鈕)JButtonSmallScrollPanel左右移動(dòng)按鈕GlassButtonAlphaScrollPane功能按鈕界面設(shè)計(jì)計(jì)——菜單面板板AlphaScrollPane監(jiān)聽(tīng)器——控制左右右按鈕顯顯示privateclassScrollButtonShowListenerextendsComponentAdapterimplementsSerializable{privatestaticfinallongserialVersionUID=814596372430146361L;
@OverridepublicvoidcomponentResized(ComponentEvente)
{JScrollBarscrollBar=alphaScrollPane.getHorizontalScrollBar();//獲取橫向滾動(dòng)條
intscrollWidth=scrollBar.getMaximum();//獲取范圍限制參數(shù)
intpaneWidth=alphaScrollPane.getWidth();
if(paneWidth>=scrollWidth)//在容器大于包含內(nèi)容的時(shí)候隱藏左右微調(diào)按鈕
{getLeftScrollButton().setVisible(false);getRightScrollButton().setVisible(false);
}
if(paneWidth<scrollWidth)//在容器小于包含內(nèi)容的時(shí)候顯示左右微調(diào)按鈕
{getLeftScrollButton().setVisible(true);getRightScrollButton().setVisible(true);
}
}
}界面設(shè)計(jì)計(jì)——菜單面板板左右控制制按鈕監(jiān)監(jiān)聽(tīng)器——控制滾動(dòng)動(dòng)條位置置publicvoidmousePressed(MouseEvente){Objectsource=e.getSource();//獲取事件源
isPressed=true;
//判斷事件源是左側(cè)按鈕還是右側(cè)按鈕,并執(zhí)行相應(yīng)操作if(source==getLeftScrollButton())
{scrollMoved(-1);//左移滾動(dòng)條
}else
{scrollMoved(1);//右移滾動(dòng)條
}
}scrollMoved()函數(shù):?jiǎn)?dòng)一個(gè)個(gè)子線程程,鼠標(biāo)標(biāo)按下不不抬起時(shí)時(shí),每隔隔10毫秒更新新滾動(dòng)條條位置一一次(在在原有基基礎(chǔ)上+3或-3),并刷刷新界面面界面設(shè)計(jì)計(jì)——菜單面板板六個(gè)功能能按鈕((GlassButton)以“采購(gòu)購(gòu)進(jìn)貨””按鈕為為例progressButton=newGlassButton();//創(chuàng)建按鈕progressButton.setActionCommand(“采購(gòu)進(jìn)貨”);//設(shè)置按鈕事件名稱//設(shè)置按鈕(未選中)時(shí)顯示的圖片progressButton.setIcon(newImageIcon(getClass().getResource("/com/mingrisoft/frame/buttonIcons/caigou1.png")));//
創(chuàng)建另一個(gè)圖標(biāo)(當(dāng)該按鈕被選中是顯示這個(gè)圖標(biāo))ImageIconicon=newImageIcon(getClass().getResource("/com/mingrisoft/frame/buttonIcons/caigou2.png"));progressButton.setRolloverIcon(icon);//設(shè)置當(dāng)按鈕翻轉(zhuǎn)是顯示這個(gè)圖標(biāo)progressButton.setSelectedIcon(icon);//
設(shè)置當(dāng)按鈕被選中是顯示這個(gè)圖標(biāo)progressButton.addActionListener(newtoolsButtonActionAdapter());//為按鈕添加監(jiān)聽(tīng)器界面設(shè)計(jì)計(jì)——菜單面板板六個(gè)功能能按鈕((GlassButton)監(jiān)聽(tīng)器以“采購(gòu)進(jìn)貨貨”按鈕為例例if(e.getSource()==progressButton)//如果這個(gè)事件來(lái)自于“采購(gòu)進(jìn)貨”按鈕{
backPanel.removeAll();//
清空功能區(qū)面板的所有內(nèi)容(backPanel為功能區(qū)面板)
backPanel.add(label_1);//
功能區(qū)面板添加新的標(biāo)簽(firstLabel和label_1)
fristLabel.setBounds(133,38,123,15);//label_1顯示的是:“你當(dāng)前位置是:”標(biāo)簽大小位置設(shè)定
backPanel.add(fristLabel);//firstLabel顯示的是:“采購(gòu)訂貨”
panel_1.setBounds(10,63,611,386);//設(shè)置panel_1子面板大小
StockPanelstockPanl=newStockPanel();//
創(chuàng)建“采購(gòu)進(jìn)貨”功能子面板
fristLabel.setText("采購(gòu)訂貨");
backPanel.add(stockPanl);//添加自“采購(gòu)進(jìn)貨”子面板到backPanel面板上
repaint();//
刷新界面}界面設(shè)計(jì)——功能面板功能主界面RemoveButtomFrameClockPanelJPanelJLabelCanlenderPanelMyJPanelBGPanelJPanelJPanelJLabelJScrollPanelJTreeSamllScrollPanel1243界面設(shè)計(jì)——功能面板backPanellabel_1fristLabelStockPanelJoinDepotPanelOutDepotPanelDeptPanelPersonnelPanel采購(gòu)訂貨倉(cāng)庫(kù)入庫(kù)倉(cāng)庫(kù)出庫(kù)部門門管管理理人員員管管理理JPanel基本本檔檔案案管管理理FeelWarePanelSellPanelWarePanelDepotPanel供貨貨商商銷售售商商貨品品檔檔案案?jìng)}庫(kù)庫(kù)界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板功能能子子面面板板基基本本功功能能刪除除添加加更新新查詢?cè)僇ButtonJTextFieldJCombo輸入入文文本本框框選擇擇下下拉拉框框數(shù)據(jù)據(jù)JTable新的的窗窗口口監(jiān)聽(tīng)聽(tīng)器器(4個(gè)))界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板JTable控件件使使用用———維護(hù)護(hù)一一組組數(shù)數(shù)據(jù)據(jù)((記記錄錄))privateJTabletable;DefaultTableModeldm=newDefaultTableModel();//
創(chuàng)建DefaultTableModel對(duì)象…dm.setDataVector(newObject[][]{},//
表的內(nèi)容
new
Object[]{“是否入庫(kù)”,“編號(hào)”,“客戶”,“訂單號(hào)”,“交貨日期”,“商品名”,“金額”,“數(shù)量”});//表頭
table=newJTable(dm);//
根據(jù)DefaultTableModel對(duì)象,創(chuàng)建JTable對(duì)象JTableDefaultTableModel界面面數(shù)據(jù)據(jù)創(chuàng)建建JTable操作作JTable數(shù)據(jù)據(jù)dm.addRow(newObject[]{“入庫(kù)",stock.getId(),stock.getsName(),stock.getOrderId(),stock.getConsignmentDate(),stock.getBaleName(),stock.getMoney(),stock.getCount()});界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板Model類功能描述LocalTableModel
供貨商/銷售商表模型WareModel
貨品表模型DepotModel
倉(cāng)庫(kù)表模型StockModel
訂單表模型JoinDepotModel
入庫(kù)表模型OutDepotModel
出庫(kù)表模型DeptModel
部門表模型DefaultTableModel每個(gè)個(gè)數(shù)數(shù)據(jù)據(jù)庫(kù)庫(kù)表表定定義義自自己己的的DefaultTableModel(Model/*.java)界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板Model/XXXModel.javaDefaultTableModel的子子類類JTableXXXModel數(shù)據(jù)庫(kù)表常用函數(shù)功能getColumnName(intcolumn)返回列名稱。getRowCount()
返回此數(shù)據(jù)表中的行數(shù)。getColumnCount()
返回此數(shù)據(jù)表中的列數(shù)。getValueAt(introw,intcolumn)返回row和column處單元格的屬性值。setValueAt(ObjectaValue,introw,intcolumn)
設(shè)置column和row處單元格的對(duì)象值。addRow(Object[]rowData)在模型中添加一行。insertRow(introw,Object[]rowData)
在模型中的row位置插入一行。removeRow(introw)移除模型中row位置的行。界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板例::DepotModel(倉(cāng)倉(cāng)庫(kù)庫(kù)表表模模型型))publicclassDeptModelextendsDefaultTableModel//
繼承DefaultTableModel{Class[]types=newClass[]{java.lang.Object.class,java.lang.String.class,//
一條記錄中每個(gè)元素的類型java.lang.String.class,java.lang.String.class};boolean[]canEdit=newboolean[]{false,false,false,false};//JTable中每條表項(xiàng)是否可編輯(不可)publicDeptModel()//構(gòu)造函數(shù),調(diào)用其父類的構(gòu)造函數(shù),設(shè)定表頭{super(newObject[][]{},newString[]{"編號(hào)","部門名稱","負(fù)責(zé)人","描述"});}publicClassgetColumnClass(intcolumnIndex)//返回表中每列數(shù)據(jù)的類型(第3行定義){returntypes[columnIndex];}publicbooleanisCellEditable(introwIndex,intcolumnIndex)//返回表中每個(gè)單元是否可編輯(第5行定義){returncanEdit[columnIndex];}}界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板XXXModel.java方法輸入輸出描述XXXModel()無(wú)void構(gòu)造函數(shù),定義XXX表的每列的標(biāo)題getColumnClass()int(列)Class返回表中指定列的類型(整型?字符型?…)isCellEditable()int(行)boolean返回給定表格單元(行及列)是否可編輯int(列)屬性描述types表中每列數(shù)據(jù)的類型(列表)canEdit表中每列單元是否可編輯界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板添加加按按鈕鈕監(jiān)監(jiān)聽(tīng)聽(tīng)器器以““采采購(gòu)購(gòu)進(jìn)進(jìn)貨貨””按按鈕鈕為為例例insertButton.addActionListener(newActionListener()//添加監(jiān)聽(tīng)器{
publicvoidactionPerformed(ActionEvente)//實(shí)現(xiàn)監(jiān)聽(tīng)接口函數(shù){InserStockFrameframe=newInserStockFrame();//創(chuàng)建新的添加面板frame.setVisible(true);//顯示新的面板}});界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板修改改按按鈕鈕監(jiān)監(jiān)聽(tīng)聽(tīng)器器以““采采購(gòu)購(gòu)進(jìn)進(jìn)貨貨””按按鈕鈕為為例例updateButton.addActionListener(newActionListener()//添加監(jiān)聽(tīng)器{publicvoidactionPerformed(ActionEvente)//實(shí)現(xiàn)監(jiān)聽(tīng)接口函數(shù){introw=table.getSelectedRow();//調(diào)用JTable控件方法,獲取用戶選中表格的行數(shù)
if(row<0)//
如果沒(méi)選中任何行,那么輸出提示信息,并返回{JOptionPane.showMessageDialog(getParent(),"沒(méi)有選擇要修改的數(shù)據(jù)!","信息提示框",JOptionPane.INFORMATION_MESSAGE);
return;}else//否則,創(chuàng)建并顯示新的面板{
UpdateStockFrameframe=newUpdateStockFrame();//創(chuàng)建修改信息窗體frame.setVisible(true);}}});界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板刪除除按按鈕鈕監(jiān)監(jiān)聽(tīng)聽(tīng)器器以““采采購(gòu)購(gòu)進(jìn)進(jìn)貨貨””按按鈕鈕為為例例deleteButton.addActionListener(newActionListener()//添加監(jiān)聽(tīng)器{publicvoidactionPerformed(ActionEvente)//實(shí)現(xiàn)監(jiān)聽(tīng)接口函數(shù){introw=table.getSelectedRow();//調(diào)用JTable控件方法,獲取用戶選中表格的行數(shù)
if(row<0)//
如果沒(méi)選中任何行,那么輸出提示信息,并返回{JOptionPane.showMessageDialog(getParent(),"沒(méi)有選擇要?jiǎng)h除的數(shù)據(jù)!","信息提示框",JOptionPane.INFORMATION_MESSAGE);return;//退出程序}Stringcolumn=dm.getValueAt(row,1).toString();//由JTable控件,獲取表第一列(主鍵)的值(字符串形式)
dao.deleteStock(Integer.parseInt(column));//將字符串形式的主鍵轉(zhuǎn)換為整型JOptionPane.showMessageDialog(getParent(),"數(shù)據(jù)刪除成功!","信息提示框",JOptionPane.INFORMATION_MESSAGE);//給出提示信息}});界面面設(shè)設(shè)計(jì)計(jì)———功能能面面板板查詢?cè)儼窗粹o鈕監(jiān)監(jiān)聽(tīng)聽(tīng)器器以““采采購(gòu)購(gòu)進(jìn)進(jìn)貨貨””按按鈕鈕為為例例findButton.addActionListener(newActionListener()//添加監(jiān)聽(tīng)器{publicvoidactionPerformed(ActionEvente)//實(shí)現(xiàn)監(jiān)聽(tīng)接口函數(shù){dm.setRowCount(0);//將表格內(nèi)容清空Stringcondition=comboBox.getSelectedItem().toString();//獲取用戶選擇的查詢條件(JCombox)StringconditionText=conditionTextField.getText();//獲取用戶添加的查詢條件(JTextField)if(conditionText.equals(“”))//如果用戶沒(méi)有添加查詢條件,那么輸出提示信息,并返回{JOptionPane.showMessageDialog(getParent(),"請(qǐng)輸入查詢條件!","信息提示框",JOptionPane.INFORMATION_MESSAGE);//給出提示信息return;//退出程序}if(condition.equals(“貨品名稱”)){
…}//
按貨品名稱查詢if(condition.equals(“訂單號(hào)”)){…}//
按訂單號(hào)查詢if(condition.equals(“交貨日期”)){…}//
按交貨日期查詢}});界面設(shè)設(shè)計(jì)——功能面面板“采購(gòu)購(gòu)進(jìn)貨貨”查查詢按按鈕監(jiān)監(jiān)聽(tīng)器器按“貨貨品名名稱””查詢?cè)僫f(condition.equals("貨品名稱")){Listlist=dao.selectStockBySName(conditionText);//調(diào)用相應(yīng)的DAO對(duì)象的方法,實(shí)現(xiàn)按貨品名稱查詢法
for(inti=0;i<list.size();i++)//循環(huán)遍歷查詢結(jié)果,將其顯示到JTable控件上
{Stockstock=(Stock)list.get(i);//獲取查詢記錄集中第i條記錄(對(duì)象)Stringoid=stock.getOrderId();//獲取該記錄(對(duì)象)的訂單號(hào)信息intid=dao.selectJoinStockByOid(oid);//調(diào)用相應(yīng)的DAO對(duì)象的方法,查詢?cè)撚唵翁?hào)是否入庫(kù)if(id<=0)//如果該訂單的貨品在入庫(kù)表中不存在(尚未入庫(kù))
{//將該記錄添加到Jtable控件中,并顯示為“待入庫(kù)”dm.addRow(newObject[]{“入庫(kù)",stock.getId(),stock.getsName(),stock.getOrderId(),stock.getConsignmentDate(),stock.getBaleName(),stock.getMoney(),stock.getCount()});
}
else//如果指定訂單號(hào)的貨品名稱在入庫(kù)表中存在(已經(jīng)入庫(kù)){//將該記錄添加到Jtable控件中,并顯示為“已入庫(kù)”dm.addRow(newObject[]{"已經(jīng)入庫(kù)",stock.getId(),stock.getsName(),stock.getOrderId(),stock.getConsignmentDate(),stock.getBaleName(),stock.getMoney(),stock.getCount()});
}
}}業(yè)務(wù)邏邏輯超市管理系統(tǒng)基本檔案管理采購(gòu)訂貨管理倉(cāng)庫(kù)入庫(kù)管理倉(cāng)庫(kù)出庫(kù)管理人員管理部門管理供貨商管理銷售商管理貨品檔案管理倉(cāng)庫(kù)管理登錄業(yè)務(wù)邏邏輯刪除、、查詢?cè)兠姘灏澹≒anel/)beanDAO數(shù)據(jù)庫(kù)庫(kù)添加、、更新新面板板(Archive/)數(shù)據(jù)操操作數(shù)據(jù)映映射業(yè)務(wù)邏邏輯——Bean-DAO-數(shù)據(jù)庫(kù)庫(kù)實(shí)體表Bean類DAO類管理員信息tb_usersUserUserDao基本信息tb_basicMessageBasicMessagePersonnelDao聯(lián)系方式tb_contactContact職務(wù)信息tb_headshipHeaderShip部門信息tb_deptDeptDeptDao入庫(kù)信息tb_joinDepotJoinDepotJoinDepotDao出庫(kù)信息tb_outDepotOutDepotOutDepotDao訂單信息tb_stockStockStockDao倉(cāng)庫(kù)信息tb_depotDepotDepotDao供貨商信息tb_provideProvideFeelDao銷售商信息tb_sellSellSellDao商品信息tb_wareWareWareDao業(yè)務(wù)邏邏輯——Bean-DAO-數(shù)據(jù)庫(kù)庫(kù)業(yè)務(wù)邏邏輯——Panel-Frame-DAO實(shí)體查詢/刪除面板添加/更新面板DAO類管理員信息
Enter(登錄)無(wú)UserDao基本信息
PersonnelPanelInsertPersonnelFrameUpdatePersonnelFramePersonnelDao聯(lián)系方式職務(wù)信息部門信息
DeptPanelInsertDeptFrameUpdateDeptFrameDeptDao入庫(kù)信息
JoinDepotPanelInsertJoinDepotFrameUpdateJoinDepotFrameJoinDepo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 體育俱樂(lè)部運(yùn)營(yíng)管理會(huì)議制度
- 心理輔導(dǎo)中心未成年人保護(hù)制度
- 旅館業(yè)臨時(shí)隔離觀察制度
- 熱噴槍機(jī)器市場(chǎng)發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測(cè)報(bào)告
- 機(jī)器拉帶產(chǎn)品入市調(diào)查研究報(bào)告
- 牛油杯市場(chǎng)洞察報(bào)告
- 燈籠市場(chǎng)發(fā)展現(xiàn)狀調(diào)查及供需格局分析預(yù)測(cè)報(bào)告
- 印花花筒雕刻設(shè)備產(chǎn)品入市調(diào)查研究報(bào)告
- 外科用膠帶項(xiàng)目評(píng)價(jià)分析報(bào)告
- 電商培訓(xùn)合作協(xié)議書2024年
- 醫(yī)療廢物流失泄漏應(yīng)急處理流程圖
- 長(zhǎng)方形、正方形的面積和周長(zhǎng)復(fù)習(xí)課件
- WI-QA-02-034A0 燈具成品檢驗(yàn)標(biāo)準(zhǔn)
- 農(nóng)業(yè)信息技術(shù) chapter5 地理信息系統(tǒng)
- 信號(hào)與系統(tǒng)(第十章Z-變換)
- 部編版六年級(jí)上語(yǔ)文閱讀技巧及解答
- 斯派克max操作手冊(cè)
- 項(xiàng)目四 三人表決器ppt課件
- 結(jié)合子的機(jī)械加工工藝規(guī)程及銑槽的夾具設(shè)計(jì)
- 林武樟 完整陽(yáng)宅講義 筆記版[方案]
- 《會(huì)滾的汽車》ppt課件
評(píng)論
0/150
提交評(píng)論