Java课程设计-音乐播放器

Java课程设计-音乐播放器
Java课程设计-音乐播放器

程序设计课程设计

综合实验

音乐播放器

班级:

指导老师:

组员:

2014年12月2日

目录

1 程序功能描述 -------------------------------------------------------------------------------- 3

2 开发环境描述 -------------------------------------------------------------------------------- 3

3 开发技术介绍 -------------------------------------------------------------------------------- 3

4 详细设计--------------------------------------------------------------------------------------- 4 4.1功能模块划分 ------------------------------------------------------------------------------------ 4 4.2 用户界面设计 ----------------------------------------------------------------------------------- 5

4.2.1 歌曲列表面板 --------------------------------------------------------------------------------------------- 5

4.2.2 播放控制面板 --------------------------------------------------------------------------------------------- 8

4.2.3 搜索及展示面板 ------------------------------------------------------------------------------------------ 8

4.3 播放功能实现 ----------------------------------------------------------------------------------- 9

4.3.1播放歌曲 ---------------------------------------------------------------------------------------------------- 9

4.3.2 暂停及继续播放 ---------------------------------------------------------------------------------------- 11

4.3.3 音量控制 ------------------------------------------------------------------------------------------------- 12

4.3.4 播放模式 ------------------------------------------------------------------------------------------------- 12

4.3.5 时间进度条 ---------------------------------------------------------------------------------------------- 13

4.4 歌词展示实现 --------------------------------------------------------------------------------- 14

4.4.1 加载歌词文件 ------------------------------------------------------------------------------------------- 14

4.4.2 解析歌词文件 ------------------------------------------------------------------------------------------- 14

4.4.3 展示歌词 ------------------------------------------------------------------------------------------------- 15

4.5 搜索网络歌曲资源---------------------------------------------------------------------------- 16

4.5.1 获取HTML文本 --------------------------------------------------------------------------------------- 16

4.5.2 解析HTML文本 --------------------------------------------------------------------------------------- 18

4.5.3 抓取数据描述 ------------------------------------------------------------------------------------------- 20

4.6 网络歌曲资源处理---------------------------------------------------------------------------- 20

4.6.1 歌曲资源的载体 ---------------------------------------------------------------------------------------- 20

4.6.2 歌曲资源的操作 ---------------------------------------------------------------------------------------- 24

4.7 程序内置的游戏------------------------------------------------------------------------------- 26

4.7.1 2048 -------------------------------------------------------------------------------------------------------- 26

4.7.2 贪吃蛇 ---------------------------------------------------------------------------------------------------- 27

4.7.3 五子棋 ---------------------------------------------------------------------------------------------------- 27

5程序运行 -------------------------------------------------------------------------------------- 28 6 实验小结-------------------------------------------------------------------------------------- 30

1 程序功能描述

音乐播放器是一种用于播放各种音乐文件的多媒体播放软件。我们以酷狗音乐播放器的操作界面为原型,设计一个实现播放、搜索、下载歌曲的Java音乐播放器。此音乐播放器支持音乐格式较少,只有MID、WMA、MP3。最后,为音乐播放器置入一些游戏,增强播放器的娱乐性。

2 开发环境描述

IDE:Eclipse(Luna)、netbeans

JDK:1.8

图片处理:Photoshop

3 开发技术介绍

1)Java Sound :

Java Sound API是Java SE平台提供底层的处理声音接口。使用Java Sound API可以实现各种基于声音的应用,例如声音录制、音乐播放、音乐编辑等。同时其还提供了第三方的扩展接口(SPI),实现各种音乐格式的解码与转码。

2)Java Zoom :

为了支持MP3的播放,必须为JavaSound扩展MP3的SPI支持库。开源项目JavaZoom正是提供了一个兼容JavaSound的纯Java解码器。

引用:jl1.0.1.jar、mp3spi1.9.5.jar、tritonus_share.jar

3)Jaudiotagger :

开源项目Jaudiotagger提供一个Java类库用于编辑音频文件的tag信息(附有此音频的歌手、标题、专辑、音轨长度等的信息)。

引用:jaudiotagger-2.0.3.jar

4)Jsoup :

Jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API。

引用:jsoup-1.8.1.jar

5)Substance:

Swing自带提供了几种look and feel类,然而要设计一个非常精美的GUI 界面,却相当麻烦。使用java substance可以很简单地实现。Substance里面

有很多现成的非常漂亮的皮肤。

引用:substance.jar

4 详细设计

4.1功能模块划分

按结构化设计方法,划分出四个功能模块:歌曲列表、播放控制、搜索及音乐库。此四个模块正好对应酷狗用户界面的四部分。

酷狗音乐播放器如下:

Figure 4.1.1 Kugou

程序构建的包

main:主入口

ui、ui.tool:用户界面及其使用的一些工具类

song:包含有歌曲、歌词信息的类

player:播放相关的类

search:搜索相关的类

程序结构图如下:

Figure 4.1.2 程序结构图

4.2 用户界面设计

窗体(Frame):窗体初始大小为975*670;内容面板(ContentPane)由播放面板(PlayPanel)、歌曲列表面板(PlayListPanel)、搜索面板(SearchPanel)、展示面板(ShowPanel)构成,内容面板的布局采用的是BoxLayout+Box,PlayListPanel和SearchPanel对应都绑定了一个工具条(ButtonToolBar)程序引用了外包Substance 设计观感

4.2.1 歌曲列表面板

PlayListPanel由一个工具条(ButtonToolBar

extends JToolBar)、JPanel构成,其中JPanel采用

CardLayout布局,JPanel加入了3个歌曲列表面板

(SongListPanel extends JScrollPanel)、1个应用

面板(JScrollPanel)利用工具条的按钮切换显示面

Figure 4.2.1 1 歌曲目录

歌曲列表面板(SongListPanel)-列表的实现:

利用JTree实现二级目录。顾名思义,JTree是树状元件,它由众多节点构成,其中JTree需要一个根节点(root)。关于节点,我们用可派生节点DefaultMutableTreeNode类(implements TreeNode )即这种节点可以做“树干”也可以做“叶子”

1)利用一个节点构建一个JTree,该节点为根节点,即一级节点

其实我们要实现的歌曲列表是3级节点:根节点、歌曲目录、歌曲文件,这里我们需要隐藏点根节点:tree.setRootVisible(false); 否则我们将看到3层目录

2)根节点加入节点歌曲目录节点(rootNode.add(aNode))

第2级节点为歌曲目录,可派生歌曲节点:节点(TreeNode)的其中一个构造器是接受Object对象userObject

JTree是以节点的toString方法返回的字符串显示节点,而节点的toString 是由UserObjcet的toString决定,所以用String来构建歌曲目录节点即可

3)歌曲目录节点应该有一个计算当前歌曲数目并在目录中显示的方法

目录节点计算其的子节点数,并更新到目录名

4)歌曲目录节点加入歌曲文件节点

加入方法与上面一样。

这里每个歌曲(File)是一个节点,不可派生子节点

上面说到每个节点在JTree显示的字符串,都是由该节点的UserObject.toString()决定,File的toString返回的是该文件的路径,这里我们重写DefaultMutableTreeNode的toString 让它返回歌曲名,所以构造了SongNode类(extends DefaultMutableTreeNode)

5)弹出菜单

再做下面各种操作前,需要一个使用载体,我们利用弹出菜单来实现

Figure 4.2.1 2 弹出菜单

6)移除歌曲目录

因为用户只能选中第2、3级节点,这里需要判断当前选中的是第几级节点:获取选中的路径TreePath path = tree.getSelectionPath()(如果path==null 可以不往下执行),通过path.getPathCount()来判断,第3级节点是返回值是3。

如果是第3级节点,需获得它的上级节点(即歌曲目录)

获取末端组件DefaultMutableTreeNode node=(DefaultMutableTreeNode) path.getLastPathComponent()

获取上级节点DefaultMutableTreeNode aList=node. getParent()

如果是第2级节点,可直接获取选中路径的末端组件

aList=(DefaultMutableTreeNode)path.getLastPathComponent();

这样保证都从歌曲目录节点操作,

再按以下次序进行判断:

1.如果当前目录是默认目录,不移除,可以通过当前节点在根节点的位置判断root.getIndex(aList)

2.如果当前目录含有歌曲,进行提示是否移除,可以获取该目录节点的子节点数目(getChildCount)或者该节点是否为“叶子”(isLeaf)

3.如果当前目录播放着歌曲,终止播放,这里后面再叙述。

4.最后移除,aList .removeFromParent();

7)清空歌曲目录

与移除目录类似,最后清空使用的方法aList.removeAllChildren();

8)删除歌曲

可以参考移除目录的实现,需要注意的是,要保证当前选中的节点是第3

级节点,即歌曲文件,是第2级节点就不往下操作,删除方法同样是aSong. removeFromParent()

9)获取音频文件

通过JFileChooser打开个对话框,获取外部文件,并给其安装过滤器。

过滤器过滤出的格式为mid,mp3,wav

选择文件分为两种模式,1获取多个音频文件,2获取一个文件夹。需设置JFileChooser的选择模式setFileSelectionMode(int param)

关于第2种模式,获取了文件夹后,也要给文件夹进行过滤操作(直接判断或者安装过滤器)这里的过滤器是抽象类 FileFilter,这里定义了一个AFilter (extends FileFilter)

最后将这些files加入目录节点即可

10)鼠标右击选中当前节点

给JTree注册MouseListener.,先判断是否鼠标右击,再取与点击点坐标最近的节点tree.getPathForLocation(int x, int y)

应用面板(AppPanel)的实现:

应用面板用JScrollPane,加入多个按钮,一个按钮对应着Expandsion包附加的小游戏程序(Expandsion包导出游戏程序后,被删除)

以上,歌曲列表面板界面基本实现,注意每次对JTree操作后,请更新JTree 的状态,tree.updateUI(),否则有可能出现Bug。在我们实现歌曲播放面板操作功能时,与歌曲列表面板进行交互,会再往列表面板添加功能。

4.2.2 播放控制面板

PlayPanel由于Java Swing布局复杂,我们可以用Eclipse的WindowBuilder 或者netbeans的Matisse可视化构建

PlayPanel由以下组件构成

标签:歌曲名(songNameLabel)当前播放进度时间(currentTimeCountLabel)当前播放歌曲总时间(audioTotalTimeLabel)

按钮:上一首(backPlay)下一首(frontPlay)播放(Play)静音(voiceControl)

下载(download)标记(mark)分享(share)

这里用到的按钮,都用到图片;为简化代码,构建一个IconButton来定义上面的按钮

其它:组合框(JComboBox) mode控制播放模式

滑块条(JSlider) voiceAdjust控制音量

进度条(TimeProgressBar)这里用到的进度条timerProgressBar 由于要计时,所以也构建一个TimeProgressBar

Figure 4.2.2 2 播放控制面板

4.2.3 搜索及展示面板

SearchPanel/ShowPanel的布局可以参考PlayListPanel,这里说下折叠面

板效果的实现(下图选中的按钮)

折叠:SearchPanel/ShowPanel均设不可见,再设置Frame的大小和刷新。

展开:给Frame注册窗体状态监听器,如果用户按了最大化按钮,会产生一个事件给监听器,这里判断当前窗体的新状态是否为最大化,然后与折叠操作类似。(也可以不用“最大化”按钮判断,可以设置一个新按钮作事件源)

Figure 4.2.3 3 搜索及展示面板

4.3 播放功能实现

播放面板功能主要由BasicPlayer、HigherPlayer、TimeProgressBar,BasicPlayer实现的是底层操作(播放、暂停、继续播放、终止、获取音频总时间等)。HigherPlayer(extends BasicPlayer)处理面板间的交互,面板与BasicPlayer的交互。TimeProgressBar绑定了一个Timer,作计时功能。

4.3.1播放歌曲

为实现播放功能,我们这里用了Java Sound API,它可以实现各种基于声音的应用。

Java Sound API的输入/输出相当于IO流,TargetDataLine/SourceDataLine 接口对应输入/输出设备,要得到这个设备的对象,需要设备信息:它是输入还是输出设备,它处理的音频数据格式-即编码格式,不是“WAV/MP3”等文件格式AudioSystem在此过程中起着工厂类的作用

这里先关注SourceDataLine如何实现播放功能:

BasicPlayer中关于播放的属性

private AudioInputStream audioInputStream;

public SourceDataLine sourceDataLine;

public URL audio;

public Thread playThread;

1)获取audio URL

回到SongListPanel,在JTree已注册的MouseListener里增加响应mouseClicked的处理,进行判断,选取第3级节点。HigherPlayer在load方法里获取这节点的userObect(即File),再转成URL,这里在HigherPlayer,议保存这个节点,因为节点很容易获取它所在的列表节点。

2)从指定的URL获取音频输入流及音频编码格式

先获取音频输入流AudioSystem.getAudioInputStream(audio),再获取其

音频编码格式audioInputStream.getFormat()

Javax.Sound默认支持的编码格式有PCM_SIGNED、PCM_UNSIGNED、ALAW、ULAW,对于这些编码格式我们都不这么了解,只知道WAV与MID采用的是PCM_SIGNED 当要播放MP3档时,这里会报异常,因为Javax.Sound并不支持MPEG1L3

编码(MP3采用此格式编码)

3)将MPEG1L3编码转换成PCM_SIGNED

首先要扩展Javax.Sound的解码能力,之后再进行转码。Javax.Sound除了有实现声音处理的API外,同时它以SPI(服务提供接口)为基础,实现各种音乐格式的解码与转码,SPI以插件形式扩展了音频处理的能力,SPI随程序启动而被启动。

即我们只要给程序引入MP3的SPI支持库,这里用到的第3方支持库是JavaZoom,

获取其中的jl1.0.jar、mp3spil1.9.5.jar、tritonus_share.jar

因为程序解码能力扩展,所以上面不再报异常,接着往下转码

// MPEG1L3转PCM_SIGNED

if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) { audioFormat = new

AudioFormat(AudioFormat.Encoding.PCM_SIGNED,

audioFormat.getSampleRate(), 16,

audioFormat.getChannels(),

audioFormat.getChannels() * 2,

audioFormat.getSampleRate(), false);

audioInputStream =

AudioSystem.getAudioInputStream(audioFormat,

audioInputStream);

}

这里将audioFormat audioInputStream分别转换成PCM_SIGNED,对于此转码方法,我们作了搬运工

4)获取输出设备信息及对象

//根据上面的音频格式获取输出设备信息

https://www.360docs.net/doc/6610599902.html, info = new Info(SourceDataLine.class, audioFormat); //获取输出设备对象

sourceDataLine = (SourceDataLine) AudioSystem.getLine(info);

这里sourceDataLine extends Line

5)打开输出数据管道并进行IO操作

打开输出管道sourceDataLine.open();

允许此管道执行数据 I/O sourceDataLine.start();

到这里,我们从输入流读入数据,再将数据写入输出管道(输出管道会先进入混频器,再进入到端口,这里我们不管混频器,只要知道数据输入到扬声器)

最后,我们应该设置一个独立线程(playThread)启动播放过程,否则主线程会在播放结束前阻塞。

4.3.2 暂停及继续播放

为BasicPlayer加入属性:

public boolean IsPause = true;// 是否为暂停状态

public boolean NeedContinue;// 当播放同一首歌曲是否继续播放状态

1)暂停

这里IsPause初始为true,是为了后面Play按钮控制使用的

上面我们用到了playTread线程启动播放,那么“暂停”只要让此线程进入阻塞状态即可,“继续播放”则是唤醒线程。

playTread线程执行过程需要占有锁旗标,只要让它释放此锁旗标就达到暂停效果

这个锁旗标(Oject)我们设为BasicPlayer这个对象本身。(其实随便一个对象也可以)

记住wait(),notify()要在同步块中使用,synchronized (BasicPlayer.this){},否则报异常

在音频数据的I/O读写循环中,设置一个控制标记(IsPause),true时,进入暂停:BasicPlayer.this.wait();NeedContinue = true;

这里不需要设置IsPause为false,我们play按钮是如下判断,当前状态是暂停,则播放,当前是播放(即不是暂停),则暂停。

2)继续播放

当用户点击相同的歌曲,或者暂停后,再点击play按钮时,继续播放:方法与暂停播放相对

3)终止当前歌曲播放和播放新选中歌曲功能

BasicPlayer增加属性:public boolean IsComplete;

终止当前播放:即是销毁当前播放线程

如果当前歌曲播放完成,即线程run完,线程自动销毁

如果当前歌曲播放中,播放新歌曲,我们手工销毁当前播放线程,并初始化IsPause、NeedContinue、IsComplete,之后启动新线程播放新歌曲。

我们需要在HigherPlayer里记录当前播放的歌曲与加载的歌曲,判断两者是否是同一首歌曲。

如果这里用stop也有可能会产生Bug,不安全,我们想要终止当前线程,不一定要销毁,有点强暴,我们让线程执行完就可以,加入新标记boolean IsEnd,True时,完成这个线程(return)。这样播放新歌曲时,过渡平滑些

4)Play按钮状态

上面说到的方法:都是用于播放面板Play按钮的功能操作

点击Play按钮的5种状态:

1.载入歌曲为null时,没什么都不做

2.当前没播放歌曲,播放载入歌曲

3.当前播放着歌曲,让它暂停

4.当前播放歌曲已暂停,如果加载歌曲没变,让它继续播放

5.不管当前播放歌曲是否暂停,如果加载歌曲与播放歌曲不同,终止当前播放歌曲线程,播放载入歌曲

4.3.3 音量控制

输出设备对象sourceDataLine有获取各种控制的方法

获取当前输出设备对象的浮点控制器对象,类型为总音量控制sourceDataLine.getControl(FloatControl.Type.MASTER_GAIN);

然后通过floatVoiceControl.setValue()/getValue(),设置/获取当前音量(db)音量大概范围为-80F~6F 默认为0F

通过一个滑块组件(JSlider)设置其值

4.3.4 播放模式

1)上一首/下一首

获取当前歌曲节点的位置(通过其父节点获取的),再指向上一个/下一个,然后加载此歌曲节点,手工触发play按钮

2)单曲播放、循环等模式

因为是播放完,之后进行播放模式操作,给BasicPlayer增加属性boolean

IsComplete,判断当前是否播放完。因为线程播放期间,一直阻塞,所以在线程最后设置IsComplte=true;

组合框获取当前模式的值,进行判断。在当前歌曲播完后,这里可以先触发一下play按钮,成暂停状态,设置IsPause为true,等待下次播放,随后进行播放模式操作选择,这个与节点所在的位置有关。

4.3.5 时间进度条

要想实现进度条,需要得到当前播放歌曲的播放时长,再通过一个计时器,设置进度条的值。

1)获取歌曲播放时长

每个音频文件都要个文件头记录音频信息(作者、采样率、时长等),引用外包jaudiotagger.jar解析音频,步骤如下:

获取音频文件

//AudioFileIO是org.jaudiotagger.audio包的类

AudioFile file=new AudioFileIO.read(new File(URI));

获取音频文件头

AudioHeader audioHeader=file.getAudioHeader();

获取音频总长度

int timelength=audioHeader.getTrackLength();

这里的timelength是秒计,之后将timelength转成“0:00”格式即可。需要更新播放面板(PlayPanel)的当前歌曲总时间标签(audioTotalTimeLabel)

2)计时及更新进度条

这里构建了一个TimeProgressBar(extends JProgressBar),其中绑定了一个计时器Timer

当播放歌曲前,更新初始化TimeProgressBar的状态(TimeProgressBar的两个最值为0,timelength),重置Timer,启动Timer。暂停歌曲时,Timer阻塞。继续播放时,Timer唤醒。

Timer对应有个线程,执行一次(或定期重复执行)它的任务Task。

Timer.schedule(TimerTask task,long delay ,long period)。

给Timer安排一个任务,从指定延迟时间(delay)后执行task,之后按间隔时间(period 这里是1s)执行。

每次执行Task,更新TimeProgressBar的值和当前播放进度时间标签currentTimeCountLabel,当计时时间等于当前歌曲播放时长时,终止Timer,放弃所有任务,Timer.cancel(),当本次任务会执行完。

暂停/继续播放时,可以参考歌曲的处理,来处理Timer,Timer也共享IsPause,最后也是阻塞/唤醒计时线程。

4.4 歌词展示实现

4.4.1 加载歌词文件

加载歌词文件的方式,我们分为两种方式

1.在加入歌曲文件时,直接判断歌曲文件所在目录是否有对应的歌词文件,同名判断(隐式加入)

2.用户方加入歌词文件(显式加入)

这里加入方法为歌曲文件一样,打开文件对话框让用户选择。

获取歌词文件数组后,与歌曲文件匹配:

为了进行匹配,我们需要记录下当前程序已加载的歌曲

(Listsonglist),在程序加入歌曲时,把这些歌曲文件加入到集合即可。删除歌曲时,集合也要将其删除

之后对加入的歌词文件进行匹配(同名匹配):

利用JDK8的新特性,可以将songlist转成数据流,挑选出满足条件(是否同名)的数据组成子集合,子集合中的元素即是与此歌词匹配的歌曲。

4.4.2 解析歌词文件

观察下面的歌词文件(lrc),其实lrc是一种遵循特殊规范的文本文件

[ar:陈奕迅]

[ti:k歌之王]

[00:13.32]我唱得不够动人你别皱眉

[00:19.89]我愿意和你约定至死

它包含信息有歌手([ar:])、标题([ti:])、专辑([al:])、歌词(时间-歌词键值对)

从File lrc读取每一行文本,进行解析。我们定义一个类(LrcInfos)保存解析的信息

1.歌手、标题、专辑的解析

只要判断该行字符串的头部是否对应为[ar:、[ti:、[al:

2.歌词键值对的解析

时间键的格式形如[00:00.00],为了解析这种格式的文本,我们需要用到正则表达式,对应上面的时间格式的正则表达式为\[\d{2}:\d{2}\.\d{2}\],在正则表达式里[]、{}、.、\d为元字符(可以理解为关键字),\d为0-9数字,{2}表示匹配两次,其它为固定匹配,之后将此正则式装载到正则模式类Pattern https://www.360docs.net/doc/6610599902.html,pile(regex)

让字符串对这个模式进行匹配Matcher matcher = pattern.matcher(line); Matcher是保存已成功匹配子串信息的类:如匹配的子串的始末位置等。

判断是否有成功匹配的子串:matcher. find(),获取这个匹配的子串String

time = matcher.group()

这里的time就是[00:00.00]格式的字符串

这里将这个time解析成Integer,歌词是按秒展示的,这样可以对应前面的进度条,然后获取这个时间子串之后的歌词文本,然后将时间-歌词键值对保存到HashMap中,方便提取数据。

4.4.3 展示歌词

展示歌词的载体用JTextArea,就是把歌词按时间打印到JTextArea

这里很自然想到之前的计时进度条,当计时器到一定秒数,要显示歌词信息时,从Map lrcInfosMap提取信息

1.初始显示歌词

我们要做滚动歌词的效果,可以在计时器初始化时,从LrcInfosMap提取从0秒起的若干条歌词,打印到textArea,做歌词的初始显示。定义printNextLrcInTheTime(int time,int line),定time为0。(为了美观,初始显示歌词时 line为23)

2.歌词滚动

歌词滚动效果的实现,可以将textArea的第一行歌词剪去,整体上移,显示下一条歌词:剪去第一行歌词,同时整体上移,最后显示下一条

3.整体描述

当计时器到一定秒数,即要显示歌词时,我们将第一行歌词剪去,整体上移,现第一行歌词即是当前时间对应的歌词(即焦点在第一行),再显示现有的最后一条歌词的下一条。注意:初始显示歌词时,应该从第二行开始。如下图:

Figure 4.4.3 4 歌词展示

4.5 搜索网络歌曲资源

播放歌曲时,是用IO流将本地歌曲数据写入音频设备,那么很自然,同样应该可以用IO流将网络歌曲数据写入音频设备。这先要获取网络歌曲资源链接

4.5.1 获取HTML文本

1)使用Jsoup抓取HTML中数据

1.获取HTML代码

为了抓取数据,第一步当然要获取HTML代码,然后分析它。

可以利用URL打开要访问地址的一个连接,然后从这个连接对象获取输入流,最后IO流读写,读入的数据就是HTML代码,要注意HTML是用什么字符集编码的,URLConnection connection = new URL(searchUrl).openConnection() connection.getInputStream()

利用开源项目JSoup实现这个功能很简单

Document document = Jsoup.connect(searchUrl).get();获取HTML文档(代码)2.获取HTML代码中某标签的属性值或文本

HTML的标签可以看成一个节点,节点包含下级节点。

在Jsoup中获取节点对象,然后从这个节点对象获取它的属性值或者它的下级节点对象,如下:

利用Jsoup中的选择器(其中Elements、Element是Jsoup包中的类)

获取HTML文文件对象中含有class属性且属性值=number的span节点组:Elements spanNodes=document.select("span[class=number]")

获取span节点组的第一个节点对象:Element aNode=spanNodes.first()

获取节点对象的属性值,这里是获得该节点中href的绝对路径,去掉abs:得到的是相对路径:String href=aNode.attr("abs:href")

获取该节点的文本:String text=aNode.text();如Hello 获取的是Hello

Jsoup的API很友好

下面,我们将百度音乐作为我们的音乐库,它的HTML是以“utf-8”编码String baseUrl = "https://www.360docs.net/doc/6610599902.html,"

2)拼接搜索地址,获取搜索结果的HTML文档

Figure 4.5.1 5 百度音乐搜索结果列表

观察百度音乐搜索的地址,可以发现以下规则

“https://www.360docs.net/doc/6610599902.html,/search/song?”--基础地址

“s=1”--是否展开更多的歌曲

“key”--key的值为搜索的关键字

“start”--start的值为该结果页面第一首歌曲的序号,这个可以用来切换搜索结果页面

“size”--size的值为歌曲的数目,size应该为20,曾试过将size设为其它值,该页面还是显示20首歌曲

如要搜索“下雨天”搜索结果页是第二页

“https://www.360docs.net/doc/6610599902.html,/search/song?s=1&key=下雨天&start=20&size=20”

key值由我们searchPanel的文本框获取,注意编码方式,如果key的值不是“utf-8”编码,我们利用URLEncoder将它转换。

URLEncoder.encode(string key, string encode);

最后用Jsoup获取这个搜索地址的HTML文件(Document searchListDoc)

这里,我们可以去爬取百度音乐新歌榜的数据

地址:https://www.360docs.net/doc/6610599902.html,/top/new/month/

构建SearchSong类用于爬取歌曲资料,构建SongInfos类来保存歌曲资料

4.5.2 解析HTML文本

1)进入搜索结果页面每首歌曲信息页面对应的地址

每首歌曲对应的节点是

这个节点可以获取这个歌曲信息页面的地址,也可以获取歌曲名等一些信息如https://www.360docs.net/doc/6610599902.html,/song/7319923

7319923为歌曲的ID

然后获取这个歌曲信息页面的HTML文档,如下图:

Figure 4.5.2 6 百度音乐搜索结果列表分析

2)在歌曲信息页面中爬取歌手名、专辑名、歌词链接等数据

歌曲信息页面

Figure 4.5.2 2 百度音乐歌曲信息页面

其中两个有用节点,可以获取歌手名、专辑名、歌词链接数据

Figure 4.5.2 3 百度音乐歌曲信息页面HTML代码

这里说下,获取歌词链接,歌词链接在节点中,获取这个data-lyricdata的属性值,然后用正则式匹配出后面的链接,正则式可以(/.*\.lrc)

3)爬取歌曲资源链接

歌曲资源链接对于我们很重要。资源链接形式如下:

https://www.360docs.net/doc/6610599902.html,/data2/music/122140210/731992315480064.mp3?xcod e=a8fb6c9bb031c6b4b2c89ef4a1382bb8f012cab8a72c58b0&song_id=7319923 先看下百度音乐的下载页面,这个页面的地址很简单拼接,但是百度音乐用JavaScript做了登录函数并加密歌曲资源链接,我们对JavaScript不了解,也不知道怎么实现登录百度的效果和它的加密算法

Figure 4.5.2 4 百度音乐下载歌曲页面

我们只好从另一个页面爬取到数据

https://www.360docs.net/doc/6610599902.html,/x?op=12&count=1&title=因为爱情$$王菲,陈奕迅$$

这是百度音乐的一个老接口,指向的是一个XML档。这里有我们需要的资源链接,分析这个老接口的链接:

形式

https://www.360docs.net/doc/6610599902.html,/x?op=12&count=1&title=Song$$Singer$$

song和singer是我们要填入的内容,其它地方都是固定的。

下面请注意XML档里,节点,它们下级节点都有这个资源链接的一部分。

Figure 4.5.2 5 百度音乐XML

这里最好爬取里的链接,因为的链接更有可能指向错误的地方同时这里可以爬取到歌曲文件总字节数(size)和歌曲的比特率(bitRate,注意乘上1000,它的单位是kbps),这两个属性可以算出歌曲的时长(time)

time=size*8/bitRate这个计算出的时间不够准确,误差在2-4秒

4.5.3 抓取数据描述

最后,取到的数据包含歌名、歌手、专辑、歌曲资源链接、歌词链接等,如下图

Figure 4.5.3 1 抓取歌曲数据描述

4.6 网络歌曲资源处理

4.6.1 歌曲资源的载体

音乐库,是搜索网络资源的载体。可以使用JTable类来实现,这里构建了LibraryPanel类,来表示音乐库面板。这里用了机器(netbeans的Matisse)来构建音乐库面板, LibraryPanel上面的组件为JTable,下面为JToolBar,如下图:

大学java课程设计实验报告_计算器

JAVA课程设计报告 组员信息: 第(二)组 计算器的实现问题 问题描述:制作一个计算器 基本要求:要求实现类似Windows操作系统里面的标准计算器。 在此基础上实现部分科学性的功能。 测试数据:分别对加、减、乘、除和sin、cos、tan函数进行测试 算法思想:使用String定义的数组a[25]对每个按钮进行按钮赋值,创建一个Panel进行字符和数字的存放,调用 addActionListener()对各个时间进行监听。调用 系统库函数对数值进行运算。 模块划分:1、主函数main()创建一个计算器。 2、void actionPerformed(ActionEvent e)对鼠标 点击的事件进行响应以及在文本框中的显示。 3、各Buuton对应的功能: “开方”:对输入数字开方 “平方”:对输入数字平方

“getResult()”:对四则运算进行分别运算操 作 “backspace”:取消上一次的操作 “CE”:取消上一次运算的操作 “C”:清空作用 “sin”:对输入数据进行sin运算 “cos”:对输入数据进行cos运算 “tan”:对输入数据进行tan运算 “+/-”:对输入的数据取反 “+”,“-”,“*”,“/”:对数据进行四则 运算 源程序: package hechongwei; import https://www.360docs.net/doc/6610599902.html,ng.String; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.*; import https://www.360docs.net/doc/6610599902.html,ng.Math; class Calculator extends JFrame implements ActionListener

职工管理系统java课程设计简单实现

目录 一、绪论 (1) 1.1关键技术介绍 (1) 1.1.1JAVA技术 (1) 1.1.2SQL数据库 (1) 二、需求分析 (2) 三、系统概要设计: (3) 3.1问题描述 (3) 3.2要求 (3) 3.3数据库设计 (3) 四、系统详细设计 (5) 4.1新员工信息录入 (5) 4.2显示员工信息 (7) 4.3修改员工信息 (8) 4.4查询员工信息 (10) 4.5删除员工信息 (13) 4.6员工信息排序 (15) 4.7员工信息统计 (16) 4.8注销 (17) 五、系统测试 (18) 5.1系统登录 (18) 5.2系统主界面.................................. 错误!未定义书签。 5.3新员工信息录入.............................. 错误!未定义书签。 5.4显示员工信息................................ 错误!未定义书签。 5.5修改员工信息................................ 错误!未定义书签。 5.6查询员工信息................................ 错误!未定义书签。 5.7删除员工信息................................ 错误!未定义书签。 5.8排列系统.................................... 错误!未定义书签。 5.9统计界面.................................... 错误!未定义书签。

5.10注销....................................... 错误!未定义书签。 六、总结 (19) 八、附录.......................................... 错误!未定义书签。

Java课程设计--文本编辑器

淮 海 工 学 院 计算机工程学院
课程设计报告
设计名称: 选题名称: 姓 名: 专业班级: 系 (院): 设计时间: 设计地点:
面向对象课程设计
文本编辑器的设计与实现
俞凯 学 号: 中新软 111 国际学院
2013.6.17~2013.6.30 软件实验室、教室
指导教师评语:
成绩:
签名:
年月日
在各种埋地管道的应用过程中,能否达到规定长期使寿命一个关键因素就是铺设质量。而HDPE具有多独特性更加安全

1.课程设计目的
《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较 全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用 Java 语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生 的应用能力。
2.课程设计任务与要求:
2.1 文本编辑器的设计与实现:
设计一个类似于 Windows 记事本(Notepad)的 Java 程序。可以打开、新建、保存一个文本文件;对选中的文 本进行各种编辑操作(设置字体、字号、字型、对齐方式、背景、前景色、复制、粘贴、剪切、查找、替换等); 在文本中能够插入对象。
2.2 设计要求:
课程设计可选用 Eclipse、JBuilder、NetBeans 等作为开发平台以提高开发效率,通过资料查阅和学习尽可 能熟练掌握其中一种集成开发环境。
认真完成需求分析,建议采用 UML 建模技术进行系统的分析设计,在画出系统用例图和类图,并将 UML 图复 制到设计报告中。认真按时完成课程设计报告,课程设计报告内容包括:课程设计目的、设计任务与要求、设计 说明书、设计成果和设计心得五个部分,具体要求见设计报告模板。
通过这次设计,要求掌握以下内容: 1) 面向对象技术中的继承与多态(重载和覆盖)机制、各种修饰符的使用 2) 类、包、接口的定义与使用 3) 常用工具类与算法的实现(数组、向量、字符串、链表) 4) java.awt、javax.swing 中常用标准 GUI 组件及相应的事件处理 5) Java 的异常处理机制 6) Java 的数据库连接技术 7) Java 的多线程技术与动画制作 8) Java 的网络编程
在各种埋地管道的应用过程中,能否达到规定长期使寿命一个关键因素就是铺设质量。而HDPE具有多独特性更加安全

Java课程设计实验报告

Java课程设计实验报告 导语:日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。以下是小编为大家整理分享的Java课程设计实验报告,欢迎阅读参考。 1、加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2、使用本学期学习的Java SE技术完成多功能日历GUI 程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3、在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 1、问题描述准确、规范。 2、程序结构合理,调试数据准确、有代表性、。 3、界面布局整齐,人机交互方便。 4、输出结果正确。 5、正确撰写实验报告。 编写一个GUI程序实现日历的功能。一年日历用12页

显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农 历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报 时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 1、在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2、在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3、各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4、根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5、详细的上机实验步骤见任务分工及程序设计进度表。 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能

JAVA课程设计银行管理系统

大连科技学院java程序设计课程设计(B) 题目银行取款管理系统 学生姓名姚伟奇专业班级计算机(Z)13-1 指导教师李红职称讲师 所在单位信息科学系软件工程教研室 教学部主任王立娟 完成日期 2016年9月30日 课程设计报告单

综合评定: (优、良、中、及格、不及格)指导教师签字:2016年9月30日《java程序设计课程设计(B)》任务书 一、课程设计任务及要求: 任务:针对小型信息管理系统或若干综合性设计题目,选择一种软件开发模型,完成从需求分析、系统设计、系统实现,软件测试的全过程。 要求: (1) 根据软件系统开发的一般原则,完成相应系统的功能设计,完成主要功能模块的程序实现并进行测试训练,给出代码运行结果和相应的设计文档。可以分组进行,但所有学生必须经历整个系统的开发全过程,以便加深对系统开发全过程的认识。 (2)提交课程设计报告。 (3)指标: 要求完成课程设计报告3000字以上(约二十页);完成所设计的题目,设计题目的语句行数的和在200行语句以上。 二、工作量 2周(10个工作日)时间 三、计划安排 第1个工作日:查找相关资料、书籍,阅读示例文档,选择题目。 第2个工作日-第4个工作日:设计程序结构、模块图。 第5个工作日-第9个工作日:完成程序的编码,并且自己调试、测试。穿插进行课程设计报告的撰写。 第10个工作日:上交课程设计报告,由教师检查软件测试效果、检查课程设计报告,给出学生成绩。

指导教师签字:2016年9月19日

目录 题目:.................................................... 错误!未定义书签。 1.需求分析............................................ 错误!未定义书签。 2.概要设计............................................ 错误!未定义书签。 3.详细设计............................................ 错误!未定义书签。 4.编码................................................ 错误!未定义书签。 5.调试分析............................................ 错误!未定义书签。 6.测试结果及运行效果.................................. 错误!未定义书签。 7.系统开发所用到的技术................................ 错误!未定义书签。 8.课程设计总结........................................ 错误!未定义书签。参考文献................................................. 错误!未定义书签。5 附录全部代码............................................. 错误!未定义书签。

Java课程设计

武汉科技大学城市学院 课程设计报告 课程设计名称JAVA程序设计课程设计 题目 A C M 院系信息工程学部 专业软件工程 班级 姓名 指导教师 2017 年 6 月23 日

课程设计评分表

JA V A编程课程设计指导书 学时:1周,学分:1 1.课程设计目的:JAVA编程课程设计属于软件开发类课程设计。该课程设计培养学生熟练应用当前主流的JAVA软件开发语言,检验软件的设计、编码与测试,具备较强的JAVA语言软件开发能力。 2.课程设计方式: (1)JAVA编程课程设计方式采取ACM测试的方式,利用所学的面向对象程序设计(JAVA)知识,培养学生具有分析应用问题的能力,能够独立完成应用程序的编制与调试工作。 (3)每个同学必须完成8-12道题,每题写出解题报告,解题报告内容:○1.题目标题○2.题目描述○3.解题思路○4.源码○5.小结 3.课程设计平台: eclipse或Myeclipse 4.课程设计考核方式 (1)学生独立提交软件设计作品和“课程设计报告书”,指导教师根据学生组提交的软件设计作品和“课程设计报告书”的质量,为学生组评定“优”“良”“中”“及格”或“不及格”; (2)根据各组学生所选题目的难易程度以及验收结果,为学生评定“优”“良”“中”“及格”或“不及格”。 “课程设计报告书”包括:课程设计项目名称,课程设计任务, 课程设计任务(功能)说明及功能模块图,数据库设计,各模块功能说明,使用的算法描述(如果需使用算法),各模块界面设计,各模块中关键代码段功能说明与代码行注释,测试说明,参考文献等。 5.参考文献 [1] 张思民. Java语言程序设计(第2版)[M].北京:清华大学出版社,2012.1 [2] 姜华. Java项目实战教程[M]. 北京:清华大学出版社,2012.9 [3] 陈喧. Java程序设计教程[M]. 北京:清华大学出版社,2011.5 [4] [美]Echel,B .Java编程思想(第四版)[M].北京:机械工业出版社,2007 [5] Michael Main. 数据结构:Java语言描述(第二版)(国外经典计算机科学教材)[M]. 北京:中国电力出版社,2007

java课程设计报告书

《Java程序设计》课程设计报告2015—2016学年第二学期 设计题目:《数字连连看》 学生:黄杰 学号: 2 专业班级:软件工程1402 指导教师:国权 2016 年7 月2 日

目录 1.JAVA程序设计书 3 1.1《简易连连看》 3 1.1.1具体要求 3 1.2本系统设计的知识点 3 2.功能设计 3 2.1算法设计 3 2.2部分模块流程图 4 3.代码设计 5 4.界面及运行效果,测试工具与测试效果14 5.设计总结 16 5.1.程序调试情况:16 5.2.本人在程序设计中感想: 16 6.致 16 主要参考文献16

: 1.1Java程序课程设计任务书 1.1《简易连连看游戏》 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。 1.1.1具体要求(包括技术要求等): <1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。 <2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。 <3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 <4>. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。 1.2本系统涉及的知识点: 循环,javaGUI组件,函数,数组,分支等 2.功能设计 2.1算法设计 本系统需要实现的功能要求: 图一,数字按钮功能模块 图二,三个功能按钮模块

Java课程设计实验报告及全部源码流程图

课程设计 一、实验目的 1.加深对课堂讲授内容的理解,掌握解决实际应用问题时所应具有的查阅资料、技术标准和规范,以及软件编程、调试等能力,掌握面向对象的编程思想及Java语言程序设计的规律与技巧,为进一步学习web应用开发及今后从事专业工作打下基础。 2. 使用本学期学习的Java SE技术(也可以使用课堂教学中没有学习过的Java技术,但是应当以Java SE技术为主)完成多功能日历GUI程序的设计,使之具有如下基本功能:一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。 3.在完成基本功能的基础上发挥自己的想象力与创造力,使程序凸显出与众不同的特点与功能,形成本小组的特性色。 二、实验要求 1.问题描述准确、规范。 2.程序结构合理,调试数据准确、有代表性.。 3.界面布局整齐,人机交互方便。 4.输出结果正确。 5.正确撰写实验报告。 三、实验内容 编写一个GUI程序实现日历的功能。一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期以及当前农历,可以为每页日历选择背景图片。可以实现显示时钟,时钟能进行整点报

时。可以实现备忘记事功能,能在每天添加、修改、删除记事等操作。 四、实验步骤 1.在上机实验前,小组成员进行选题讨论,确定小组感兴趣而又伸缩性强的题目多功能日历。 2.在第一次上机实验时讨论分工,分工明确之后,分头合作进行。 3.各成员完成自己的任务后,最后进行统筹合并,以及程序最后的优化。 4. 根据实验结果,写出合肥工业大学实验报告。实验报告应当包括:实验内容,程序流程图,类结构,程序清单,运行结果,以及通过上机取得的经验。 5.详细的上机实验步骤见任务分工及程序设计进度表。 五、实验结果 经过小组成员的共同努力,最终我们小组设计的多功能日历程序能够实现实验的基本要求——一年日历用12页显示,每页显示一个月的日历。日历可以按年或月前后翻动,能够显示当前的日期,可以为每页日历选择背景图片。另外,在完成基本要求的基础上,我们增添了显示农历、显示时钟、添加备忘录、修改备忘录等功能。整体程序运行流畅、功能齐全、符合操作习惯。 下面是程序运行效果截图: 日历主界面(可以实现每个月的日历,可以按年或按月前后翻动,能够显示当前日期,并能够选择背景图片):

Javawebapp课程设计报告

《电子商务网站》课程设计报告 项目题目电子拍卖平台系统分析与设计 学生姓名 班级/ 学号 专业\ 指导教师 2011年10月制

1、系统概述 本系统实现的是一个网上拍卖系统,可以实现在线登录,注册;卖家上货,买家出价竞拍;拍卖商品列表、商品拍卖信息和商品搜索等功能,普通的Internet用户可以通过该系统注册成为会员后可以上传自己拍卖的产品和竞拍卖价的商品。 2、网站结构分析与设计 2.1目标设计 竞拍网站所要实现的功能如下。 会员注册:会员注册信息和会员登录验证 会员管理:会员资金管理 买家信息管理 卖家信息管理 2.2系统功能分析设计 竞拍网共分为三个模块:会员注册模块、会员个人管理模块和商品列表和搜索模块。其功能模块划分如图所示:

2.3数据库结构设计 根据系统功能的设计要求和模块划分,表结构设计如下:

2.4 数据库需求分析 数据项和数据结构如下。 会员信息表:自动编号、用户名、密码和身份证号码、资金、日期 商品信息表:自动编号、商品名、上传人、商品详情 卖家信息表:会员编号、商品编号、商品价格、截止时间 商品竞拍成功信息列表:商品名、用户名、竞拍时间、起初价格、最终价格、最成交时间 2.5、开发环境 开发工具:myeclipse 服务器软件:tomcat 数据库:MySQL 3.网站详细设计. 3.1网站流程设计

3.2数据库功能设计 三个存储过程: Onsell:展示拍卖信息,返回当时拍卖的所有信息; Buyingshow:展示某个商品详细信息 Buying:当用户竟拍是执行. 3.3 JA VA控制层设置 POJO包:与每一项功能相对应,设置对象类 DAO包:所有连接数据库的代码 Servlet:所有前台页面的操作过程. 3.4前台设计 以JSP为主,辅助以JS的主流技术,实现网页的动态效果和数据的动态接收,这里是项目最困难的地方. 4.网站的实施 前台\后台\控制分布实施: 4.1,初步软件结构实施 其中DAO包里全部是与数据库有关的连接数据库模式。 POJO包里全部是业务需要的数据结构类。 SERVLET包里全部是逻辑控制的控制模式。

Java课程设计报告模板

Java课程设计报告 模板

浙江科技学院 《Java程序设计》课程设计报告 设计题目:学生信息管理系统 姓名:邱焕明 学号: 所属院系:信息学院 专业:软件工程 小组成员:邱焕明 设计时间: -1-6 指导教师:虞建东

一、课程设计目的 (1)实验目的:结合开发的系统,给出学生信息管理系统 二、课程设计完成的任务 三、设计过程 (一)需求分析 1、基础资料管理 基础资料管理包括对院系、班级和学期的设置。该模块可实现以下功能: 添加、修改、删除和显示院系代码、院系名称和电话号码。 添加、修改、删除和显示班级代码、班级名称、学生人数和所属院系名。 添加、修改、删除和显示学期代码、学期名称。 2、学生信息管理 学生信息管理包括对学生档案和学籍的管理。该模块可实现以下功能: 添加、修改、查询和显示学生的基本信息、所属班级和院系。 记录学生学籍、学生离校信息和学生调动信息。 3、课程信息管理 课程信息管理包括对课程设置和班级选课的管理。该模块可实

现以下功能: 添加、修改、删除和显示课程代码、课程名称、学分和院系名称。 添加、删除和提交班级所选课程。 4、成绩信息管理 成绩信息管理包括对成绩录入和成绩分析的管理。该模块可实现以下功能: 录入班级课程成绩,以不同形式(列表统计、图表分析)显示班级课程成绩。 (二)系统设计概念、流程初定义 1、实体名:院系 2、实体名:班级 3、实体名:学生 4、实体名:课程 (三)系统内容规划 1、班级信息表 表3-1 班级信息表 2、课程信息表 表3-2 课程信息表

(四)系统总体设计 内 (五)系统详细设计 (六)系统测试 列名 数据类型 长度 备注 课程代码 char 10 主键 课程名称 varchar 50 无 学 分 tinyint 1 无 所属院系 varchar 50 无

JavaWeb课程设计实验报告

湖南科技大学计算机科学与工程学院 WEB编程课程设计报告 题目:网上购物商店 学号:1111111111 姓名: 1 指导老师: 1 完成时间:111111111

目录 一、设计内容 (3) 二、设计方法 (4) 1、网站的整体结构设计 (4) 2、网站设计的技术方案 (5) 3、网站的界面设计 (6) 三、实现方法 (8) 1、数据库的设计 (8) 2、网站具体的实现过程 (10) 开发环境: (10) 设计思路 (10) 四、心得体会 (11)

随着互联网时代的迅猛发展,人们的生活方式已经发生了翻天覆地的变化,传统的实体店购物方式已经不能满足人们的需求,传统购物方式购物不方便,非得出门才能购物,去到了实体店有不一定有自己满意的商品,有时候会浪费大量的时间和精力。 随着网络的全面覆盖,网上支付系统的逐步完善,物流业的快速兴起,网上购物已经成为了当今购物的潮流。 网上购物商店主要满足人们足不出户就能买到自己想要的物品的需要,同时也为商家省去了昂贵的门面租赁费用,而且商品还可以卖到全国各地,大大的扩大了客源又节省了成本。 网上购物商店主要有以下几个方面的功能: 顾客可以浏览整个网站的商品,可以再网站进行注册,注册之后可以登录并购买商品,同时也可以查看和修改自己的个人信息,为了安全的需求,还可以修改密码。 商家,也就是店主,管理员,可以管理网站所出售的所有商品,同时也可以对在网站进行注册的用户进行管理。 1、用户登录、注册功能 (1)注册功能:用户进入网站,如果有兴趣在该商店购买商品,那么用户就可以注册。 (2)登录功能。已经注册的用户可以登录,登录之后方可购买商品。 (3)查看、修改用户信息功能。 (4)修改密码,为了用户安全的需要,经常更换密码可以保证用户账户的安全。 2、购物功能 (1)物品浏览:顾客进入网站,就可以浏览网站的商品。 (2)商品购买:顾客注册自己的账户,并登录之后就可以在网站购买商品了。购买商品的步骤如下; a)添加商品到购物车 b)确定购买 3、商品管理:管理网站所出售的商品。 4、用户管理:管理员对在网站注册的用户进行管理。 5、订单管理:对用户的订单进行管理。

java课程设计实验报告

Java课程设计实验报告实验题目:打字游戏小程序 专业:计算机科学与技术系 班级:1202班 成员:

Java课程设计(打字游戏小程序) 一、课程设计目的 经过一学期的java学习,能灵活运用书中和实验中所学习的各类知识和技巧,并且能在程序开发中得以很好的运用和发挥。在以后的学习和工作中,可以从中获取很好的经验,并且锻炼自己开发程序和创新的意识。 二、课程设计内容 1.课程设计简介 设计的是一个打字的小游戏,屏幕上不断地有英文字母下落,键盘输入字母,屏幕上与输入的字母形同的就会消失,并计分,如果有没有消去的字母掉到屏幕底,将扣分。 2.设计说明 因为要进行键盘操作,所以引用了event包,还要注册事件监听。字母是随机产生的,又要用。注册了线程。还要对窗口定义坐标,防止字母出现在同一位子。并且通过一位数组来给随机出现的字母做坐标定义。主要通过一位数组来控制字母的坐标,并且通过字母坐标的改变来对整个游戏的流程进行控制。 3.设计流程图 4.实现功能 随机产生字母,运用了键盘操作当按对屏幕中出现的字母时,该字母全部消失,并且在分数上相应的增加或减少。 5.详细设计(源代码) 1) packageDownCharGame; import import import /** *下落的字母实体类 *@authorshenbf * */ publicclassCharEntity{ raw(g); } etY()>=480){ etX((int)()*580)+30); chs[i].setY(0);

chs[i].setColor(newColor((int)()*256), (int)()*256),(int)()*256))); chs[i].setCh((char)(65+(int)()*26))); } chs[i].down(); } repaint();tart(); } publicvoidkeyTyped(KeyEvente){ } publicvoidkeyPressed(KeyEvente){ } publicvoidkeyReleased(KeyEvente){ etCh()||key==chs[i].getCh()+32){ etY()

学生信息管理系统java课程设计源代码

JAVA程序设计课程设计报告 课题: 学生信息管理系统 姓名: 学号: 同组姓名: 专业班级: 指导教师: 设计时间: 评阅意见: 评定成绩: 指

目录 一、系统描述 (2) 1、需要实现的功能 (3) 2、设计目的 (3) 二、分析与设计 (3) 1、功能模块划分 (3) 2、数据库结构描述 (4) 3、系统详细设计文档 (6) 4、各个模块的实现方法描述 (9) 5、测试数据及期望结果 (11) 三、系统测试 (16) 四、心得体会 (23) 五、参考文献 (24) 六、附录 (24)

一、系统描述 1、需求实现的功能 1.1、录入学生基本信息的功能 学生基本信息主要包括:学号、姓名、年龄、出生地、专业、班级总学分,在插入时,如果数据库已经存在该学号,则不能再插入该学号。 1.2、修改学生基本信息的功能 在管理员模式下,只要在表格中选中某个学生,就可以对该学生信息进行修改。 1.3、查询学生基本信息的功能 可使用“姓名”对已存有的学生资料进行查询。 1.4、删除学生基本信息的功能 在管理员模式下,只要选择表格中的某个学生,就可以删除该学生。 1.5、用户登陆 用不同的登录权限可以进入不同的后台界面,从而实现权限操作。 1.6、用户登陆信息设置 可以修改用户登陆密码 2、设计目的 学生信息管理系统是一个教育单位不可缺少的部分。一个功能齐全、简单易用的信息管理系统不但能有效地减轻学校相关工作人员的工作负担,它的内容对于学校的决策者和管理者来说都至关重要。所以学生信息管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件档案、统计和查询数据,这种管理方式存在着许多缺点,如:效率低、保密性差、人工的大量浪费;另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少困难。随着科学技术的不断提高,计算机科学日渐成熟,

java课程设计实验报告

一实验目的 加深学生对课堂讲授内容的理解,从计算机语言的基本概念、程序设计的基本方法、语法规则等方面加深理解,打好程序设计、开发软件的良好基础。在上机实验中,提高学生对Java语言各部分内容的综合使用能力,逐步掌握Java语言程序设计的规律与技巧。在对Java 程序的调试过程中,提高学生分析程序中出现的错误和排除这些错误的能力。通过上机实践,加深学生对计算机软件运行环境,以及对操作系统与计算机语言支持系统相互关系的了解。 二、实验要求 (1)问题描述准确、规范; (2)程序结构合理,调试数据准确、有代表性; (3)界面布局整齐,人机交互方便; (4)输出结果正确; (5)正确撰写实验报告。 三、设计内容 1、计算器 计算器要有GUI界面,用户可以输入所需计算的数值,可以进行加、减、乘、除四种最基本的运算和混合运算,可以求一个数值的平方及倒数,可以进行阶乘运算,要能运算小数,并且不会产生精度损失,在必要情况下,可以进行四舍五入的运算。允许正负数间的运算。要求使用Applet实现该计算器,当用浏览器运行程序时,点击网页中的按钮,则计算器弹出,浮在网页上,再次点击按钮时,计算器消失。 2、文本编辑器 可以设置文本的字体、大小、颜色等基本参数,可以读取计算机中TXT文件,可以生成一个新的TXT文件。其他功能参照windows的文本编辑器。

四.实验步骤 (1)上机实验之前,为课程设计的内容作好充分准备。对每次上机需要完成的任务进行认真的分析,画出程序流程图,手工写出符合任务要求的程序清单,准备出调试程序使用的数据,以便提高上机实验的效率。 (2)按照实验目的和实验内容进行上机操作。录入程序,编译调试,反复修改,直到使程序正常运行,得出正确的输出结果为止。 (3)根据实验结果,写出实验报告。 五. 源代码及运行结果 1.计算器源代码 import .*; import .*; import .*; public class jisuanqi extends WindowAdapter { , "=", "+","n!" ,"关闭" }; static double a, sum=1; static String s, str ;rame(); } public void frame() { etBackground; txt = new TextField(""); (false);ddActionListener(new buttonlistener());ddActionListener(new close()); (this); (new BorderLayout());.计算器运行界面(1)计算器主界面

Java课程设计-万年历

河北科技大学课程设计报告 号:学生姓名:学 专业班级:程序设计课程设计Java课程名称:学期学年第 2 2 015 学年学期: 2 014 — 指导教师:刘伟月年 2 0

的?.................................................................. ................................1?? 2.需求分................................................................... .........析................................1? 3.总体设计................................................................... ........................................1? 4.详细设计................................................................... ........................................1?

5.软件测试................................................................... . (10) 6.课程设计总结................................................................... ................................11. 一、课程设计目的(1)熟练使用java语言编写程序,解决实际问题。? (2)初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能;? (3)学会自己调试程序的方法并掌握一定的技巧。 二、需求分析本程序的要求为: 1.使用图形用户界面;? 2.本程序能够实现日期与星期的查询。 ?三、总体设计(1)可以通过图形界面显示日历。? (2)能以月历形式显示日期与星期。? (3)支持用户自己输入年份,可以通过上一年,下一年等按钮来选择年份和月份。? ?四、详细设计1.总天数的算法:首先用if语句判断定义年到输入年之间每一年是否为闰年,是闰年,该年的总天数为366,否则,为365。 ,0若是取余得几既为星期几,7使总天数除以输出月份第一天为星期几的算法:2. 则为星期日。? 3.算出输出月份第一天为星期几的算法:算出输出月份第一天为星期几后,把该日期以前的位置用空格补上,并总该日起一次输出天数直到月底,该月中的天数加上该月一日为星期几的数字再除以7得0换行,即可完整的输出该月的日历。? 4.查询年份必须为四位有效数字,否则不予显示。 程序源代码: import import import import import import; import import import ; import ; import import import java.awt.*; import import java.text.*; import ;

Java课程设计学生信息管理系统

《面向对象程序设计》课程设计报告题目:《**********》课程设计 学院:信息工程学院 姓名: *** **** ****** 学号: ** ** ** 专业:计算科学与技术 班级: ***** 指导教师: ***** 2015 年 12月

目录 目录 ................................................................... 摘要 ................................................................... 1.引言 ................................................................. 2.设计目的与任务 ........................................................ 3. 设计方案 ............................................................. 3.1总体设计...................................................... 3.2开发环境...................................................... 3.3层次图........................................................ 3.4界面预览...................................................... 3.4.1登录界面 .................................................. 3.4.2该管理员不存在( 用户名:name 用户密码:psw ) ............. 3.4.3学生信息管理界面 .......................................... 3.4.4填写学生信息 .............................................. 3.4.5录入学生信息 .............................................. 3.4.6查询学生信息 ..............................................

javaweb课设报告

洛阳理工学院 课程设计报告 课程名称 Java web程序开发入门 专业计算机应用技术 _ 班级 _ 学号 _ 姓名 完成日期 _

目录 第一总体设计 (4) 1.1、设计目的: (4) 1.2设计题目: (4) 1.3.设计要求: (4) 第二设计容: (5) 2.1 题目一 (5) 2.1.1Tomcat服务器启动 (5) 2.1.2下载安装JDK (6) 2.1.3下载Eclipse安装包 (7) 2.2题目二 (8) 2.2.1分析 (8) 2.2.2用户注册设计思想 (9) 2.2.3用户注册功能实现 (9) 2.3题目三 (15) 2.3.1聊天室设计思想 (15) 2.3.2聊天室模块划分 (15)

2.3.3系统功能结构图 (18) 2.3.4 chatroom的模块设计分析 (16) 2.3.5ChatRoom 的关键技术 (19) 2.3.6 代码设计 (17) 2.3.7 聊天室功能实现 (20) 2.4题目四 (21) 2.4.1开发环境: (21) 2.4.2 系统分析: (25) 2.4.3功能实现: (26) 第三实训心得 (29)

第一总体设计 1.1、设计目的: 1、培养学生运用所学课程《Web程序设计(Java)》的理论知识和技能解决实际问题的能力,使学生在系统开发中得到Java Web编程方法及技能的综合训练。 2、培养学生调查研究、查阅技术文献以及编写技术报告的能力。 1.2设计题目: 1.下载并安装JDK、Tomcat、MySQL和Eclipse,完成Java Web应用程序开发环境的搭建。 2.使用JSP Model2模型,开发一个用户注册模块,要求:使用Servlet、JSP和Java Bean技术;界面友好;具有用户输入校验功能,并且在用户输入错误时给出出错信息。 3.使用JSP和JavaScript技术实现一个网络聊天室,功能要求具备一个使用用户昵称登录的页面,在聊天主窗口左侧有当时在线成员列表(建议采用AJAX技术),通过鼠标可以选择说话的对象(不允许自己对自己说话),在聊天时可以设置说话时表情,输入说话的容,单击发送按钮完成会话的发送,会话容实时显示在聊天主窗口,包括发言人、聊天对象、聊天容和会话发起的时间,选作的功能是将会话容保存在数据库中。

java课程设计2013级大纲以及设计报告

珠海学院课程教学大纲 课程名称:java程序课程设计 适用专业: 2013级计算机科学与技术 课程类别:专业基础课 制订时间:2014年12月 计算机科学与技术系制

目录 1java程序课程设计教学大纲 2 java程序课程设计说明书 3 java程序课程设计报告(模板) 4 java程序课程设计成绩评定表 java程序课程设计教学大纲 (2011年制订,2014年修订) 一、课程编号: 二、前修课程:java程序设计 三、学分:2学分 四、学时: 32学时 五、课程性质与任务: 1.课程性质:《java程序课程设计》是吉林大学珠海学院计算机科学与技术系为本科生各专业开设的专业实践课。计算机科学与技术系本科生在完成《java 程序设计》课程学习后,通过本课程进入专业实践训练环节,其主要目的是使学生深入理解并实践在《java程序设计》课程中所学的有关知识,通过课程设计增强学生的实践动手能力,提高学生独立分析和解决实际问题的能力。培养学生配合完成任务的能力,为学生毕业后的实际工作打好基础。 课程设计是培养学生综合运用所学知识锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。Java语言的应用十分广泛,例如大型信息系统、通信、网络控制等。java课程设计对增强学生对基础知识的掌握和综合运用是非常必要,对后续许多专业课程的学习和实践训练都具十分重要的意义。 2.课程任务:本课程要求学生在学习了java基础编程的相关技术后,将课本中多个章节的编程技术灵活运用到一些复杂的综合例题中去,使学生了解应用问题

的分析方法和设计解决实际问题的具体过程,掌握应用java进行程序设计的基本规范和技巧,掌握面向对象编程的设计思想,重点掌握java的基本语法规则、输入输出方法、网络编程、多线程编程、小应用程序、数据库编程的综合应用。通过编程掌握调试java程序的基本技巧、模块化应用程序和测试运行复杂应用程序的基本流程。 六、课程教学基本要求提供足够多的程序设计选题,题目应覆盖面较为广泛,部分题目要具有开放性,要求每个学生根据自己的实际情况选择题目,经教师批准后即可进入实际工作阶段。 课程设计结束对每个学生进行验收,要求每个学生提交合格的课程设计报告,还要保证程序能够运行,能够讲清楚自己的工作。老师在检查过程中可针对程序提出问题,学生回答,若程序无法运行得到结果并且具有大量编译错误,而且对程序的内容无法正确解释,则实践老师可以根据实际情况给予评分为不及格,若程序可以运行,但完成的界面以及方法不够完善,则酌情扣分,若程序运行无问题,则提问回答不好的也要相应扣分。课程设计课程集中安排在第十一周。每个同学都要提交初期、中期和最后的文档,提交课程设计报告,要求在规定时间内提交文档。最后验收时,若文档不全,成绩受到一定影响。 七、学时分配表 2011年 12 月8日 java程序课程设计说明书