河北科技大学
课程设计报告
学生姓名: 学 号:
专业班级:
课程名称:
学年学期: 2 0 —2 0 学年第 学期
指导教师:
2 0 年 月
课程设计成绩评定表
目 录
一、引言………………………………………………………………….
二、系统概要设计……………………………………………………….
三、系统详细设计……………………………………………………….
四、设计效果…………………………………………………………….
五、结论………………………………………………………………….
六、存在的不足和下一步的改进建议………………………………….
参考文献………………………………………………………………….
一、引言
随着计算机的普及,以及对计算机的广泛应用,使得计算机的技术正以日新月异的方式不断地进步,使得传统的管理方法已经不能适应现代社会的需要,因此采用电脑管理存储、管理等诸多环节已成为管理的先决条件,管理信息子系统是各大中小型信息管理部门,所需要使用的一个管理系统。
对于大型高校,需要完成对大量学生宿舍信息的存储、编制、管理等操作。然而,传统的人工管理模式已经远远不能满足有效、快捷地处理管理中产生的大量信息数据的需要,从而使得宿舍管理层无法及时、准确地掌握一线资料,继而影响对学生住宿及其他安排的有效管理。因此设计了一个宿舍管理子系统,该系统主要完成对宿舍人员的信息的,增删改查功能,还增加了新闻发布的功能,宿舍人员可以不用登录查看发布新闻的信息功能,使宿舍管理更加的方便,快捷;
二、系统概要设计
三详细设计
正文字体: 中文字体宋体,英文字符字体Times New Roman;
正文字号:小四号,字符间距1.25倍。
一级标题字体:三号黑体(中:宋体;英:Times New Roman),标题段前段后空1行(空行为5号字体)。二级标题字体:四号黑体(中:宋体;英:Times New Roman),标题段前段后空0.5行(空行为5号字体)。
代码字体:五号Times New Roman,单倍间距,段前段后无空行
图下有图注,如:
图1. 整体方法对比图
表上有表注(三线表),如:
表1 数据表设计结构
课程设计报告书写要求:
1、 条理清晰,内容详尽,数据准确;
2、 撰写应符合课程设计大纲和课程设计报告撰写格式要求;
3、 成绩为五级记分制。即优秀、良好、中等、及格、不及格;
4、 不交课程设计报告者不得参加成绩评定;
5、 课程设计报告一律使用A4纸,左侧装订。
(该页不装订)
第二篇:《Perl程序设计与数据挖掘》课程设计报告
《Perl程序设计与数据挖掘》课程设计报告
姓名:程辉 班级:计算机06-2 学号:0611310201
一、问题描述:
我们常用百度MP3搜索来下载歌曲,但需要一首一首地来下载,而且下载每首歌需要打开多个页面,甚是麻烦。平时常用的迅雷下载工具非常适合批量下载,若能从百度MP3网页中批量获取歌曲的URL,并存入文件,建立迅雷能够识别的下载列表,此问题即解决。
二、编程思路:
以百度的“歌曲TOP500”列表页为例:http://list.mp3.baidu.com/topso/mp3topsong.html?top2。分以下几步骤:
1、下载列表页,并存入临时文件;
2、分析列表页HTML,抽取每道歌的歌名,作者,以歌曲的搜索页。以排名第一的歌曲为例:歌名是《北京欢迎你》,作者是群星,搜索页是:http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=500&word=%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3+%C8%BA%D0%C7;
3、将2中搜索页地址传递给processURL1,此函数打开并下载该网页,分析HTML,抽取第一个搜索项的URL:http://220.181.38.82/m?ct=134217728&tn=baidusg,%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3%20%20&word=mp3,http://attachment.forum.nubb.com/dz/month_0804/Y2JjbGVqaHGQZ5RrlmZsbpZmbJVpZ2uaaWtqmWumsYiUrJ1rfp1uo2oy.mp3,,[%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3+%C8%BA%D0%C7]&si=%B1%B1%BE%A9%BB%B6%D3%AD%C4%E3;;%C8%BA%D0%C7;;0;;0&lm=16777216,并将此地址传递给processURL2;
4、processURL2打开该网页,找到歌曲下载的真正地址:http://attachment.forum.nubb.com/dz/month_0804/20080419_5a7a056e49a414b897e6pzPczj7Ig7k9.mp3,并返回给Main函数;
5、Main函数将歌名、作者、下载地址写入Log.lst文件,供迅雷下载使用。
三、程序源码:
见Task.pl或附件。
四、输入数据:见图1.
五、输出数据:
Log.lst中数据如下:
1、群星 - 北京欢迎你
http://www.maolz.com/Upload/bjwelcome.wma
2、杨丞琳 - 左边
http://wlkt.zufe.edu.cn/Skyclass/Courseware/Blog/Blog60/070324226951.wma
3、张栋梁 - 北极星的眼泪
http://jb58.530.ok168.com/2018/f/wma/beiji.wma
4、蔡依林 - 日不落
http://sd001f.qiatw.net/01.mp3
5、徐誉滕 - 等一分钟
http://www.wisetravel.net.cn/1min.mp3
6、周杰伦 - 青花瓷
http://bbs.980c.com/qhc.mp3
7、海鸣威 - 老人与海
http://www.tu123.cn/mp3/老人与海.mp3
8、弦子 - 舍不得
http://58.53.128.76/wm1223/1207539029.wma
9、吴克群 - 为你写诗
http://www.hmdt.cn/hm_fm103/upfiles/排行榜/音乐排行榜(港台)/牵牵牵手%20%20吴克群.mp3
10、梁静茹 - 会呼吸的痛
http://bf1.3gp2.net/3gp2_new2/20071223/梁静茹(www.3gp2.com)会呼吸的痛.3gp
歌曲列表已经下载完成!将此文件导入迅雷即可下载。
图1:输入数据及终端显示结果
六、过程描述及编程体会:
整个过程花了两天时间,第一天把课件全部重新看了一遍,并把重要例题都实现了。第一天晚上及第二天上午在网上补充学习课件中不详细的地方,如CFAN模块的使用,子程序,正则表达式等内容。并研讨了几个综合实例。下午程序核心功能完成,然后开始调试查错,调试过程中发现了很多可以改进的地方,如开始设计只能下载一个列表,然后修改正则式,则可以下载百度MP3中几乎所有歌曲列表,并添加了选择列表功能及控制下载数量。查错过程还比较顺利,分别测试每个模块,都没问题了,再组装到一起。Perl的错误提示也比较有效,基本都能找到错误点。但有一个错误却花了不少时间,就是程序的中间有个花括号方向错了,应该是},却写成了{,错误提示一直指到程序的最末一行。最后一行一行地检查才找到这个错误。
七、存在的问题及思考:
1、 网速过慢时,下载过多歌曲列表时会让人有点受不了。教育网内如果不用代理,速度则很慢,下载十首歌的列表时需要一两分钟,而用代理则只需要几秒钟。不知百度的蜘蛛是如何做到快速地在遍历全球WEB站点的。可以想到的办法是用无数的蜘蛛以极大的宽带来遍历,当然还得需要优良的算法。
2、 正则表达式是如何做到快速匹配的?它的效率是不是很高?对它的原理还不清楚,以后学习过程中需要花时间来研究它。
附件:Task.pl
####################################
#程序名:百度MP3小蜘蛛
#作用:获取百度MP3网站上歌曲列表(如歌曲TOP500等列表)中每首歌曲的信息及下载地址(URL)
#作者:程辉 freedomhui@gmail.com
#函数:Main:获取歌曲的名字、作者及歌曲的搜索页的URL,并将URL传递给processURL1。
# processURL1:从歌曲的搜索页中抽取第一项搜索结果的URL,并传递给processURL2。
# processURL2:此时的URL页面中已经包含歌曲的真正下载地址,找到并传给主函数Main中处理。
#说明:由于百度MP3列表页HTML可能变化,导致此程序失效,此时只需要修改几个正则式即可。
# 由于网速原因,可能获取速度可能很慢。可先测试浏览器访问mp3.baidu.com的速度,再决定抓取多少歌曲URL。
# 适用平台:WINDOWS/LINUX/UNIX。编译器:Perl V5.8.8
####################################
#!/usr/bin/perl
use strict "refs";
use strict 'vars';
use LWP::Simple;
my $line;
my $tempFile='temp.txt';
my $logFile='Log.lst';
my %tops=(
1=>'http://list.mp3.baidu.com/list/newhits.html?top1',
2=>'http://list.mp3.baidu.com/topso/mp3topsong.html?top2',
3=>'http://list.mp3.baidu.com/list/movies.html?top4',
4=>'http://list.mp3.baidu.com/list/tvs.html?top5',
5=>'http://list.mp3.baidu.com/list/oldsong.html?top6',
6=>'http://list.mp3.baidu.com/list/duichang.html?top9',
7=>'http://list.mp3.baidu.com/list/xiangsheng.html?top17',
8=>'http://list.mp3.baidu.com/list/qingyinyue.html?top19',
9=>'http://list.mp3.baidu.com/minge/mp3topsong.html?top12',
);
print "可以下载的歌曲列表:\n";
print "1、新歌TOP100\n2、歌曲TOP500\n3、电影金曲\n4、电视金曲\n5、经典老歌\n6、热门对唱\n7、相声小品荟萃\n8、轻音乐\n9、中国民乐\n";
print "请选择列表编号:";
chomp(my $choice=<STDIN>);
print "请输入下载数目(1~500):";
chomp(my $number=<STDIN>);
my $ListURL=$tops{$choice};
&Main;
sub Main
{
my $i=1;
my ($author,$musicName,$musicURL);
open(IN,">$tempFile") or die "Can not open $tempFile,because:$!";
print "Begin downloading $ListURL\n";
print IN get($ListURL);
close IN;
print "Download Finished!\n";
open(LOG,">>$logFile") or die "Can not open $tempFile,because:$!";
open(TMP,"<$tempFile") or die "Can not open $tempFile,because:$!";
while(my $line = <TMP>)
{
if($line=~m/<input\stype=hidden\sname=refreshtime\svalue=\@\+RESBODY\+@>/)#歌曲列表之前的唯一标识。以下为列表开始。
{
last;
}
}
print "Begin collect song's URL...\n";
while(my $line = <TMP> )
{
if($line=~m/<input\stype=hidden\sname=refreshtime\svalue=\@\-RESBODY\-@>/)#歌曲列表之后的唯一标识。到此列表结束。
{
last;
}
else
{
if($line=~m/class=\"border\"><a\shref=\"(.*)\"\starget=_blank>(.*)<\/a>/i)#找歌名及搜索页URL。
{
$musicURL=$1;
$musicName=$2;
$musicName=~s/^<b>//;
$musicName=~s/<\/b>//;
while($line=<TMP>)
{
if($line=~m/target=_blank>(.*)<\/a>\)/)#找歌曲作者。有三种情况,此处为只有一个作者的情况。
{
$author=$1;
print "Collecting No.$i song: $author - $musicName\n";
last;
}
elsif($line=~m/\(<A\s\shref=\".*\"\s\s\starget=_blank>(.*)<\/a>\/<a\s\shref=\".*\"\s\s\starget=_blank>(.*)<\/a>\)/i)#此处为有两个作者的情况。
{
$author=$1."/".$2;
print "Collecting No.$i song: $author - $musicName\n";
last;
}
else#此处为没有作者的情况。
{
$author="佚名";
print "Collecting No.$i song: $author - $musicName\n";
last;
}
next;
}
processURL1($musicURL);#在歌曲搜索页中找第一项搜索结果。
processURL2($musicURL);#找到真正的下载地址。
print LOG "$i、$author - $musicName \n$musicURL\n";#将列表信息输出到Log.lst
$i++;
if($i>$number)
{
last;
}
}
}
next;
}
print LOG "歌曲列表已经下载完成!将此文件导入迅雷即可下载。\n";
close(LOG);
close(TMP);
print "下载歌曲的URL列表已经保存到Log.lst!";
system("del temp.txt temp1.txt temp2.txt");#删除临时文件。WINDOWS用此语句,LINUX/UNIX用下面的。
#system("rm temp.txt temp1.txt temp2.txt");
}
sub processURL1
{ my $tempFile="temp1.txt";
my $mURL=$_[0];
my $line;
open(TMP1,">$tempFile") or die "Can not open $tempFile,because:$!";
print TMP1 get($mURL);
close TMP1;
open(TMP1,"<$tempFile") or die "Can not open $tempFile,because:$!";
while($line=<TMP1>)
{
if($line=~/<td\sclass=tdn>1<\/td>/)
{
last;
}
}
$line=<TMP1>;
if($line=~/<a\shref=\"(.*)\"\stitle/)
{
$mURL=$1;
$mURL=~s/http:\/\/.*?\//http:\/\/box\.baidu\.com\//;#防百度的“防盗链”:因为此处获取的为IP地址,常变化,固用域名代替。
}
close(TMP1);
$_[0]=$mURL;
}
sub processURL2
{ my $tempFile="temp2.txt";
my $mURL=$_[0];
open(TMP1,">$tempFile") or die "Can not open $tempFile,because:$!";
print TMP1 get($mURL);
close TMP1;
open(TMP1,"<$tempFile") or die "Can not open $tempFile,because:$!";
while($line=<TMP1>)
{
if($line=~/style=\"margin-right:10px;\"><a\shref=\"(.*)\"\starget=\"_blank\">/)
{
$mURL=$1;
}
}
close(TMP1);
$_[0]=$mURL;
}