軟件課程設計實驗報告個人報告_第1頁
軟件課程設計實驗報告個人報告_第2頁
軟件課程設計實驗報告個人報告_第3頁
軟件課程設計實驗報告個人報告_第4頁
軟件課程設計實驗報告個人報告_第5頁
已閱讀5頁,還剩21頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGE軟件課程設計實驗報告(個人報告)課題:音樂播放器設計班級:電信1103班成員:成俊文學號:U201113148指導老師:許毅平老師課設評價: 課設成績:一、需求分析1)引言···················································32)預期功能·············································33)設計目標·············································4二、界面方案設計說明1)擬選用的開發平臺和工具介紹····························42)系統框圖··············································53)軟件各功能模塊劃分······································64)模塊間的相互關系·····································85)開發計劃··············································8三、詳細設計說明1)主界面輪廓設計及初始化·······························82)界面外框和關閉最小化等的實現·························103)菜單添加歌曲設計·····································13菜單界面設計:4)播放列表list的實現···································13播放列表的界面設計5)播放的控制部分·······································14播放按鈕、進度條等的控制面板設計:6)歌名、歌詞、目錄顯示的部分···························16歌詞界面設計(含有全部顯示和滾動兩部分):四、測試過程說明1)測試用例說明········································182)測試情況說明········································203)測試經歷與想法21五、功能模塊使用說明22六、開發總結·············································24需求分析引言本課程《軟件課程設計》,旨在運用所學課程中有關數據結構、操作系統、數據庫系統知識來進行本課程設計,熟練掌握高級程序設計技術,加深對課程內容的理解、提高軟件應用設計能力及編程和調試能力。同時加強學生的自我學習能力和團隊協作能力,讓同學學會面對問題,并學會獨立去解決問題,也能觸發學生的創新能力。此次,我們班抽的任務是任選一門自己熟悉或擅長喜歡的語言設計一個基于windows平臺的音樂播放器軟件,要能實現對音樂庫的管理和基本播放功能。隨著信息時代的到來以及網絡的日益發展,音樂播放器軟件隨處可見,人人都在使用自己喜歡的播放應用軟件。其中也不乏一些優秀的成品,如酷狗、天天動聽、qq音樂播放器等。對于各色各樣的播放器,用戶心中都有自己的評價,如今我們作為它們的使用者,以用戶的角度重新來設計一個音樂播放器,不僅要實現播放等最基本功能,最重要的是要提供一個良好的用戶體驗,即給使用者簡潔,明了,方便,功能豐富的感受。這依賴于我們課堂知識基礎、課下大量的資料查閱、自主學習思考,以及小組成員之間的討論、糾正與創新。在我們參考了很多的播放器軟件,查閱了很多java的有關媒體播放器的知識后,我們才正式開始設計我們自己的播放器,并有了如下的成果。預期功能**軟件基本要求1.有圖形界面;2.提供基本播放功能:播放、暫停、快進、快退、停止;3.支持播放模式:單曲播放、單曲循環、順序播放和隨機播放;4.支持播放信息顯示:歌曲名、播放時間;5.支持播放列表管理:歌曲增加、歌曲刪除、歌曲播放次序調整。**可選要求1.支持歌詞顯示和同步播放;2.支持本地歌曲搜索和管理;3.均衡器管理:支持不同風格的音樂模式播放;4.自動記憶播放功能(程序關閉時能記憶當前播放的歌曲,重啟后繼續播放);5.提供更良好的操作界面;6.其他功能。3)設計目標對于功能完成方面,力求在出色完成所有預期基本功能的基礎上,基本實現所有可選要求,并且努力創新出新的功能。對于用戶界面設計方面,力求簡潔明了,做到即便對沒有任何編程基礎的人也能無障礙使用我們設計的播放器。對于程序編寫方面,力求用簡單的語句實現更多復雜的功能,不重復,不綴余。對于軟件穩定方面,力求軟件運行不出錯,力求穩定無bug。總體方案設計說明開發平臺和工具經過小組商定,因為之前有接觸過java,所以我們選用了java語言,而java語言,其本身相對于其他編程語言也有著非常大的優勢,作為一門面向對象的語言,java具有很強的靈活性、模塊化、透明性、可重用性強的優點。相對C++,java更加強大、健壯、安全,而且又很簡單,容易入門和掌握。個人在初次接觸java之后就非常喜歡這門語言,之前也用java編寫過爬蟲帶哦嗎所以我們選用了以下的開發平臺和工具開發平臺——JavaEclipse:Eclipse是一個開放源代碼的、基于Java的可擴展開發平臺。就其本身而言,它只是一個框架和一組服務,用于通過插件組件構建開發環境。個人覺得用eclipse寫java非??旖莘奖?,也很容易debug糾錯。運行平臺——Jdk(JavaDevelopmentKit):java的運行環境。工具——windowsoffice2013:用于編寫項目過程計劃書、項目報告等。2)系統框圖 本人在此次軟件課設中主要負責界面設計和繪制和課設報告的代碼分析。個人認為,音樂播放器作為一個交互性較強的,著重于用戶體驗的一個應用程序軟件,對于其界面設計的要求是比較高的,要力求簡單完善,但又要功能強大簡潔明了,讓任何一個人都可以很快的用起來得心應手而又愛不釋手,希望用戶體驗能有新奇和愉悅感。這次的軟件課設,本人負責界面設計,所以用到了java語言的swing和JMF,初次使用,學到了很多東西,覺得JMF非常強大,對Swing也長生了濃厚的興趣。本人負責的部分在系統框圖中顯示如下:音樂播放器音樂播放器監聽器設計模塊功能設計模塊界面設計模塊監聽器設計模塊功能設計模塊界面設計模塊界面背景圖片歌詞顯示界面播放列表界面播放控制界面歌名顯示和菜單界面背景圖片歌詞顯示界面播放列表界面播放控制界面歌名顯示和菜單界面整體框架部分界面整體框架部分基本模塊劃分1、界面整體框架劃分整個框架是用的javaswing的Frame:publicclassMusicPlayerextendsJFrame{}由于panel的雙緩沖性能,故選擇了在frame里套上一個panel,然后再在panel的基礎上繪制組件,并實現對其劃分模塊:JPanelframe=newJPanel();//偽frame,實則是panel,因為panel有緩沖,更有利于在其上畫組件 frame.setLayout(newBorderLayout()); this.add(frame,BorderLayout.CENTER);考慮到界面美化情況,選擇了去除原JFrame的邊框,自己繪制邊框和關閉響應this.setUndecorated(true);//去掉frame框架加監聽器使邊框可以隨鼠標移動(原去邊框后無此功能)this.addMouseListener(newMouseAdapter(){}this.addMouseMotionListener(newMouseMotionAdapter(){}添加關閉按鈕:JButtoncloseButton=newJButton();closeButton.addActionListener(newActionListener(){}//關閉操作界面最小化到托盤的實現,需要調用java的systemTray類:SystemTraysystemTray;systemTray=SystemTray.getSystemTray();//構建托盤實例界面格局劃分 JSplitPanejspp1=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true)JSplitPanejspp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,ctropanel,list);歌名顯示和添加菜單labelfilepath=newJLabel("播放目錄:"); labelfilename=newJLabel("播放文件:"); menubar=newJMenuBar(); menufile=newJMenu("打開文件");menubar.add(menufile);播放控制界面按鈕組:JButtonlastBttn=newJButton("上一曲"); JButtonnextBttn=newJButton("下一曲"); JButtonplayBttn=newJButton("播放"); JButtonwaitBttn=newJButton("暫停"); JButtonquickBttn=newJButton("快進"); JButtonslowBttn=newJButton("快退"); JButtonstopBttn=newJButton("停止");各個button會設置相應的形狀顏色及背景圖片,加上相應的監聽器播放進度條控制:jSlider=newJSlider();音量:(最終因響應的功能未實現而放棄)slider2=newJSlider(JSlider.HORIZONTAL,0,100,50); JLabellabel=newJLabel(""),//音量標簽 label1=newJLabel("-"), label2=newJLabel("+");播放列表界面list=newList();JSplitPanejspp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,ctropanel,list);歌詞顯示界面全部歌詞顯示界面:textArea=newJTextArea(); textArea.setFont(newFont("宋體",Font.ITALIC,15));滾動歌詞顯示界面:lyricsJTextField=newJTextField();lyricsJTextField.setFont(newFont("serif",Font.BOLD,20));6、界面背景圖片背景圖片重繪:publicvoidpaint(Graphicsg){ g.drawImage(image,0,0,this.getSize().width,this.getSize().height,this); super.paint(g);}4)模塊間的相互關系監聽器模塊實現對鼠標的監聽,當鼠標點擊界面上設置的不同功能按鍵時,由監聽器進入不同的功能模塊,實現具體的功能。而鼠標點擊的界面按鍵是由界面設計模塊完成,同時功能模塊中的歌詞模塊和播放列表管理模塊的可視性也是由界面設計模塊完成的。總體而言,各個模塊互相依賴,彼此支持,缺一不可。5)開發計劃6-7周確定項目功能,分配任務8-11周個人根據個人任務學習,查閱資料12周設定基本框架和方案13周考試周不作安排14周對最初的模板進行討論完善,完成期中報告15-16周各自開發16-17周集中開發18周各個模塊調試、測試,就現實的完成程度討論優化及方案詳細設計說明代碼程序分析主界面輪廓設計及初始化privatestaticfinallongserialVersionUID=1L; privatelongtime=0; privateintN=0; privateintmemorytime=0; privatelongjumpSecond=5000000; privateStringlrc; privatelonglrctime; privatelongsongtime; privateintfileIndex=0; booleanisStop=true;//控制播放線程 booleanhasStop=true;//播放線程狀態 booleanisPause=false; booleanhasPause=false; Stringitem1; Stringitem2; Stringfilepath;//播放文件目錄 Stringfilename;//播放文件名稱 AudioInputStreamaudioInputStream;//音頻文件流 AudioFormataudioFormat;//音頻文件格式 privateClipclip;//接口:源數據行,可以寫入音頻數據 Listlist;//文件列表 JTextAreatextArea; JMenuBarmenubar; JMenumenufile; JMenuItemmenuopensong; JPanelpanelmain; Containercontainer; JPanelpaneright; MenuItemmenu_add;MenuItemmenu_del; JTextFieldtextField; JTextFieldlyricsJTextField; Containercontainer2; PopupMenupopupMenu; JLabellabelfilepath;//播放目錄顯示標簽 JLabellabelfilename;//播放文件顯示標簽 staticinttesttimethread=0; TimeThreadtimeThread; privateTimertimer; privateJLabelstartPoint; privateJLabelendPoint; JSliderjSlider; JSliderslider2; intxOld=0;intyOld=0;SystemTraysystemTray;2)界面外框和關閉最小化等的實現this.setLayout(newBorderLayout()); this.setTitle("音樂播放器"); this.setSize(800,600); this.setUndecorated(true);//去掉frame框架 this.setVisible(true);//最下面也有一行次代碼,最好是保留那一行的 ImageIconicon=newImageIcon("Image\\player.jpg");this.setIconImage(icon.getImage());//設置應用程序的圖標顯示//添加監聽器使窗體可以移動this.addMouseListener(newMouseAdapter(){publicvoidmousePressed(MouseEvente){ xOld=e.getX();//得到鼠標的位置yOld=e.getY(); } });this.addMouseMotionListener(newMouseMotionAdapter(){publicvoidmouseDragged(MouseEvente){intxOnScreen=e.getXOnScreen();intyOnScreen=e.getYOnScreen();intxx=xOnScreen-xOld; intyy=yOnScreen-yOld; MusicPlayer.this.setLocation(xx,yy); }});//去掉了框體,所以要自己加一個關閉按鈕,此關閉按鈕實則是實現最小化到托盤JButtoncloseButton=newJButton();closeButton.setIcon(newImageIcon("Image\\close.jpg"));//設置托盤圖標closeButton.setPreferredSize(newjava.awt.Dimension(30,27));closeButton.setContentAreaFilled(false); closeButton.setBorder(null); closeButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ dispose();//如果點擊按鈕則關閉窗體但不關閉應用程序 } });//托盤的右鍵菜單的添加和實現 PopupMenupop=newPopupMenu();//構造一個右鍵彈出式菜單 MenuItemshow=newMenuItem("打開程序(s)"); MenuItemexit=newMenuItem("退出程序(x)"); pop.add(show); pop.add(exit); ImageIconimage=newImageIcon("Image\\player.jpg");//設置托盤圖標 TrayIcontrayIcon=newTrayIcon(image.getImage(),"MusicPlayer!",pop);//設置托盤的圖標,延時顯示內容,添加右鍵菜單 trayIcon.setImageAutoSize(true);//顯示圖標 trayIcon.isImageAutoSize(); systemTray=SystemTray.getSystemTray();//構建托盤實例 try{ systemTray.add(trayIcon); }catch(AWTExceptionex){ System.out.println("系統托盤不可用"); } trayIcon.addMouseListener(newMouseAdapter(){ publicvoidmouseClicked(MouseEvente){ if(e.getClickCount()==2)//雙擊托盤窗口再現 setVisible(true); //systemTray.remove(trayIcon);//從系統的托盤實例中移除托盤圖標 } }); show.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ //systemTray.remove(trayIcon);//從系統的托盤實例中移除托盤圖標 setVisible(true);//顯示窗口 } }); exit.addActionListener(newActionListener()//點擊“退出演示”菜單后退出程序 { publicvoidactionPerformed(ActionEvente){ FileWriterfw1=null;//退出時保存當前播放信息 try{ fw1=newFileWriter("D:\\MusicPlayer_log.txt"); }catch(IOExceptione1){ e1.printStackTrace(); }//setroute BufferedWriterbw1=newBufferedWriter(fw1); try{ bw1.write("list_number="); Stringn=String.valueOf(N); bw1.write(n); bw1.newLine(); bw1.write("filepath="); bw1.write(filepath); bw1.newLine(); bw1.write("song="); bw1.write(list.getSelectedItem()); bw1.newLine(); bw1.write("time="); Stringplaytime=String.valueOf(toMillisecond(clip.getMicrosecondPosition())); bw1.write(playtime); bw1.flush(); fw1.flush(); }catch(IOExceptione2){ e2.printStackTrace(); } FileWriterfw2=null; try{ fw2=newFileWriter("D:\\list_log.txt"); }catch(IOExceptione3){ e3.printStackTrace(); }//setroute BufferedWriterbw2=newBufferedWriter(fw2); try{ inti=0; while(i<N){ list.select(i); bw2.write(list.getSelectedItem()); bw2.newLine(); i++; } bw2.flush(); fw2.flush(); }catch(IOExceptione4){ e4.printStackTrace(); } System.exit(0);//退出程序 } });3)菜單添加歌曲設計 menubar=newJMenuBar(); menufile=newJMenu(); menufile.setIcon(newImageIcon("Image\\addfile.png")); menuopensong=newJMenuItem("打開歌曲"); menufile.add(menuopensong); menubar.add(menufile); menuopensong.setBackground(newColor(240,255,255)); menubar.setBackground(newColor(240,255,255)); JPanelframe=newJPanel();//偽frame,實則是panel,因為panel有緩沖,更有利于在其上畫組件 Borderborder=BorderFactory.createLineBorder(Color.black,1); frame.setBorder(border); frame.setLayout(newBorderLayout()); this.add(menubar,BorderLayout.SOUTH); this.add(frame,BorderLayout.CENTER); menubar.setBorder(border);4)播放列表list的界面list=newList(); popupMenu=newPopupMenu();//右鍵彈出的菜單設計添加 menu_add=newMenuItem("向列表中添加"); menu_del=newMenuItem("從列表中刪除"); popupMenu.add(menu_add); popupMenu.add(menu_del); this.add(popupMenu);5)播放的控制部分播放按鈕、進度條等的控制面板設計: panelmain=newJPanel(); JPanelctropanel=newJPanel(); //按鈕的具體繪制情況 JButtonlastBttn=newJButton("上一曲"); lastBttn.addActionListener(handler); JButtonnextBttn=newJButton("下一曲"); nextBttn.addActionListener(handler); JButtonplayBttn=newJButton("播放"); JButtonwaitBttn=newJButton("暫停"); JButtonquickBttn=newJButton("快進"); quickBttn.addActionListener(handler); JButtonslowBttn=newJButton("快退"); slowBttn.addActionListener(handler); JButtonstopBttn=newJButton("停止"); lastBttn.setPreferredSize(newjava.awt.Dimension(60,30)); lastBttn.setContentAreaFilled(false);//只須加上此句 lastBttn.setBorder(null); lastBttn.setIcon(newImageIcon("Image\\last.png")); nextBttn.setPreferredSize(newjava.awt.Dimension(60,30)); nextBttn.setContentAreaFilled(false); nextBttn.setBorder(null); nextBttn.setIcon(newImageIcon("Image\\next.png")); playBttn.setPreferredSize(newjava.awt.Dimension(60,40)); playBttn.setContentAreaFilled(false); playBttn.setBorder(null); playBttn.setIcon(newImageIcon("Image\\play.png")); waitBttn.setPreferredSize(newjava.awt.Dimension(60,40)); waitBttn.setContentAreaFilled(false); waitBttn.setBorder(null); waitBttn.setIcon(newImageIcon("Image\\stop.png"));// stopBttn.setPreferredSize(newjava.awt.Dimension(60,40));// stopBttn.setContentAreaFilled(false);// stopBttn.setBorder(null);// stopBttn.setIcon(newImageIcon("Image\\restart.png")); stopBttn.setContentAreaFilled(false); quickBttn.setContentAreaFilled(false); slowBttn.setContentAreaFilled(false); jSlider=newJSlider(); jSlider.setValue(0); jSlider.addMouseListener(clickHandler); jSlider.addMouseMotionListener(moveHandler); timer=newTimer(100,handler); slider2=newJSlider(JSlider.HORIZONTAL,0,100,50); jSlider.setPreferredSize(newDimension(350,60)); JLabellabel=newJLabel(""),//音量標簽 label1=newJLabel("-"), label2=newJLabel("+"); label.setOpaque(false); label.setIcon(newImageIcon("Image\\音量.png")); JComboBox<String>c=newJComboBox<String>();// c.setBackground(newColor(240,255,255)); String[]modem={"單曲播放","單曲循環","順序播放","隨機播放","列表循環"}; intcount=0; for(inti=0;i<5;i++) { c.addItem(modem[count++]); }startPoint=newJLabel("00:00"); endPoint=newJLabel("--:--"); startPoint.setSize(5,5); endPoint.setSize(5,5); startPoint.setOpaque(false); endPoint.setOpaque(false); JPanelctropanel1=newJPanel(); ctropanel1.setLayout(newBorderLayout()); ctropanel1.add(startPoint,BorderLayout.WEST); ctropanel1.add(endPoint,BorderLayout.EAST); ctropanel1.setOpaque(false); JPanelctropanel2=newJPanel(); ctropanel2.setOpaque(false); ctropanel2.setLayout(newBorderLayout()); ctropanel2.add(ctropanel1,BorderLayout.CENTER); ctropanel2.add(jSlider,BorderLayout.NORTH); ctropanel.setLayout(newBorderLayout()); ctropanel.add(ctropanel2,BorderLayout.NORTH); //按鈕控制組 container=newContainer(); container.setLayout(newGridLayout(2,1)); JPanelbttnpanel1=newJPanel();//b1主要含進度控制按鈕 bttnpanel1.add(c); bttnpanel1.add(slowBttn); bttnpanel1.add(quickBttn); bttnpanel1.add(stopBttn); JPanelbttnpanel2=newJPanel();//b2主要含播放控制按鈕組 bttnpanel2.add(lastBttn); bttnpanel2.add(playBttn); bttnpanel2.add(waitBttn); bttnpanel2.add(nextBttn); //音量控制組 JPanelvoicepanel=newJPanel(); voicepanel.add(label); voicepanel.add(label1); voicepanel.add(slider2); voicepanel.add(label2); //設置透明,是圖片可以顯示出來 jSlider.setOpaque(false); slider2.setOpaque(false); voicepanel.setOpaque(false); bttnpanel1.setOpaque(false); bttnpanel2.setOpaque(false); ctropanel.setOpaque(false); //整體布局 container.add(bttnpanel1,BorderLayout.CENTER); container.add(bttnpanel2,BorderLayout.SOUTH); ctropanel.add(container,BorderLayout.CENTER);6)歌名、歌詞、目錄顯示的部分歌詞界面設計(含有全部顯示和滾動兩部分): //在分割窗上使用paint重繪的方法繪制圖片,添加背景圖片 JSplitPanejspp1=newJSplitPane(JSplitPane.HORIZONTAL_SPLIT,true){ ImageIconimageIcon=newImageIcon("Image\\主界面.jpg"); Imageimage=imageIcon.getImage(); { setOpaque(false); } publicvoidpaint(Graphicsg){ g.drawImage(image,0,0,this.getSize().width,this.getSize().height,this); super.paint(g);} }; frame.add(panelmain,BorderLayout.NORTH); frame.add(jspp1,BorderLayout.CENTER); labelfilepath=newJLabel("播放目錄:"); labelfilename=newJLabel("播放文件:"); labelfilepath.setPreferredSize(newjava.awt.Dimension(340,20)); labelfilename.setPreferredSize(newjava.awt.Dimension(410,20)); labelfilepath.setOpaque(false); labelfilename.setOpaque(false); closeButton.setOpaque(false); panelmain.add(labelfilepath); panelmain.add(labelfilename); panelmain.add(closeButton); panelmain.setBackground(newColor(240,255,255)); // 全部歌詞部分的顯示 textArea=newJTextArea(); textArea.enableInputMethods(false); textArea.setOpaque(false); textArea.setFont(newFont("宋體",Font.ITALIC,15)); JScrollPanejsc2=newJScrollPane(textArea); jsc2.setOpaque(false); jsc2.getViewport().setOpaque(false); jsc2.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); paneright=newJPanel(); paneright.setOpaque(false);paneright.setBorder(null);//滾動歌詞部分的顯示方式 lyricsJTextField=newJTextField(); lyricsJTextField.setOpaque(false); lyricsJTextField.setForeground(newColor(0,127,255)); lyricsJTextField.setFont(newFont("serif",Font.BOLD,20)); paneright.setLayout(newBorderLayout()); paneright.add(textArea,BorderLayout.CENTER); paneright.add(lyricsJTextField,BorderLayout.SOUTH); JSplitPanejspp2=newJSplitPane(JSplitPane.VERTICAL_SPLIT,true,ctropanel,list); jspp2.setOneTouchExpandable(true); jspp2.setDividerLocation(210); jspp2.setDividerSize(2);//設置分隔線寬度的大小,以pixel為計算單位。 jspp2.setBorder(null);// jspp2.setResizeWeight(0.1);jspp1.add(jspp2);jspp1.add(paneright);jspp1.setOpaque(false);jspp1.setContinuousLayout(true);//逐漸可以睡分割線移動而變化jspp1.setOneTouchExpandable(true);jspp1.setDividerSize(1);jspp1.setDividerLocation(340);jspp1.setOpaque(false);jspp2.setOpaque(false);四、測試過程說明1)測試用例說明整體界面菜單添加歌曲右鍵添加或刪除歌曲當前播放歌曲名和播放目錄顯示界面最小化到托盤及其右鍵菜單設計2)測試結果與測評已完成的基本功能1.圖形界面可視;2.基本播放功能:播放、暫停、快進、快退均已實現;3.各種播放模式:單曲播放、單曲循環、順序播放、隨機播放均已實現;4.播放列表管理:添加歌曲,刪除歌曲均已實現;5.播放信息顯示:歌曲名,播放時間均已實現;6.支持進度條,拖動進度條可實現歌曲的前進,后退。已完成的拓展功能1.歌詞顯示和歌詞的同步播放均已實現;2.支持自動記憶播放功能(程序關閉時能記憶當前播放的歌曲,重啟后繼續播放);3.對界面外觀進行了優化,界面成果優美,簡潔;4.支持用戶依據個人喜好改變界面不同分區大小的功能;5.支持界面的最小化和還原;6.支持循環播放功能;7.支持本地查看播放列表添加曲目。待改善功能1.有時候選擇不同播放模式時會出現死機情況;2.有極少的次數,歌曲歌詞不能顯示,還不夠穩定。測試經歷與想法在整個軟件應用程序設計過程之中和設計完成之后,我們都進行了較長時間的測試調節。由于對java掌握還不算透徹,對javamediaframe

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論