、1、实习题目 (2)2、实习目的 (3)3、实习所需条件 (3)3.1硬件需求 (3)3.2 软件需求 (3)4、实习内容 (4)5、实习步骤 (4)5.1实验说明 (4)5.2面向对象的分析 (4)5.3面向对象的设计 (5)5.3.1 界面设计 (5)5.3.1.1实验说明 (5)5.3.1.2实验步骤 (5)5.4系统实现 (11)5.4.1模式1:Windows界面 (11)1、双击窗体,打开界面设计部分,然后双击要编辑事件的控件。
双击Form1,双击Button1,响应它的click事件,将会自动转到后台代码,在鼠标停留处编写其事件代码。
(11)2、在光标处编辑事件代码,总体设计界面图示。
(11)3、双击button2 (11)4、音量调节功能 (14)5、改变播放模式后的列表顺序调整代码 (14)6、音乐播放器任务栏logo显示功能代码如下 (17)7、最小最大化显示歌曲代码如下 (16)8、播放模式功能实现代码如下 (17)9、皮肤设置功能代码如下,图示 (18)10、透明度设置代码如下 (20)11、添加/删除功能的实现代码: (20)12、查找功能的实现代码 (24)13、最大最小化窗口显示界面的实现代码 (24)14、连接数据库实现登录注册功能的实现代码 (25)15、雅心音乐播放器运行效果图 (20)6、实习参考资料 (28)6、实习心得 (28)1、实习题目实习题目:基于.NET音乐播放器设计与实现雅心音乐播放器是一款本地歌曲音乐聚合播放器。
音乐播放器采用面向对象的编程思想,以C#语言作为开发语言,Visual Studio 2010作为开发工具,SQL server 作为后台数据库。
音乐播放器客户端软件合理的功能布局将用户的学习成本降至最低,开发出的客户端软件具有操作简洁、界面友好、功能齐全的特点,为音乐爱好者带来舒适的用户体验。
2、实习目的综合运用《面向对象程序设计》等课程基础理论知识,完成基于.NET音乐播放器设计与实现。
使学生熟悉Windows应用程序开发的基本流程;熟练掌握面向对象的分析和设计技术;熟练掌握面向对象语言的基本语法和高级特性;用配置文件定义音乐播放器的窗口布局,代码不需要关心如何摆放窗口、移动窗口;用配置文件定义窗口中控件的位置,代码不需要关心如何摆放控件、移动控件;用配置文件定义窗口、控件的皮肤绘制3、实习所需条件3.1硬件需求每人一台高性能计算机,要求2G以上内存、双核CPU或更高配置。
装vs2010,sql3.2 软件需求1、开发工具:Visual Studio 20103、数据库软件:sql server4、实习内容(参照下表1—1)表1—1序号实习任务主要内容学时(天)1 面向对象的分析应用面向对象思想找出类、方法和属性,以及类之间的关系,给出分析类图模型。
42 面向对象的设计界面设计包括主窗体、各子窗体的设计53 系统调试功能调试,以保证功能的正常实施。
设计调试用例,对系统关键功能进行调试。
44 优化跟进进行优化一些绚烂的视觉界面 25 整理实习报告根据自己完成的情况,整理实习报告并写心得25、实习步骤5.1实验说明雅心音乐播放器是一种用于播放多种音乐文件的多媒体播放软件。
它涵盖了多种音乐格式的播放工具,比如:MP3播放器,WMA播放器。
不仅界面美观,而且操作简单,带你进入一个舒适的音乐享受空间。
“雅心音乐播放器”是一个音乐享受空间,赏心悦目的软件界面,具体实用的各项功能,人性化的享受式体验,还您一个享受音乐的世界。
此外您可以通过列表查看歌曲、还可实现添加、删除、查找歌曲等功能来组织自己的歌曲播放列表。
本软件结合sql数据库,还实现了登录功能。
界面的设计还参考了著名的酷狗音乐播放器,符合用户的实用习惯,并进行了界面的简式优化,比酷狗简洁的界面,比酷狗更友好的操作窗口,虽然功能比不上酷狗,但是肯定能赢得你的喜欢5.2面向对象的分析在项目开始的时候,老师强调:通常情况下我们习惯接到一个软件项目后,经过简单的需求分析后就急于进入编码阶段,这可能会给软件开发带来很多问题。
由于前期需求分析、设计不到位,后期对软件的修改就难以避免,甚至推倒重来,大大浪费时间和精力,不但使项目进度延期、开发成本上升,自己也容易产生心理疲劳。
因此,在进入编码阶段前应该对项目进行面向对象的分析。
1)、对象-类层从现实世界的问题中抽象出对象和类。
2)、静态属性层为从现实世界中抽象出来的对象类设计静态属性(状态)和它们之间的约束关系(称为实例连接)。
静态属性是类或对象所包含的各种状态和信息,实例连接则体现了对象之间因特定的事物规则和限定条件而存在的约束关系。
3)、服务层服务层定义了对象和类的动态属性以及对象之间的消息通信。
对象和类的动态属性就是它们的行为或方法(又称为“服务”),它规定了对象和类的作用和功能,当对象在执行这些功能的时候,它们之间将引发消息通信。
4)、结构层结构层将定义系统中所有对象和类之间的层次结构关系。
5.3面向对象的设计5.3.1 界面设计5.3.1.1实验说明(参照下表1—2)表1—2标题栏(显示名称“雅心音乐播放器”)工具栏(添加,删除,播放模式,皮肤设置,本地搜索)功能实现1.音乐播放:支持mp3,wma主流音乐格式。
2.音乐查找:运用本地曲库将本地磁盘中的歌曲文件添加到本地管理面板,查找歌曲列表中的歌曲,众多歌曲一个都不错过,查找结果清晰展现3.播放模式:包含单曲、顺序、循环、随机播放。
4.皮肤设置:轻松更换播放列表和按钮颜色5.3.1.2实验步骤1、点击【开始】,选择【Microsoft Visual Studio 2010】,打开VS2010。
2、点击【文件】|【新建】,选择【项目】,如下图所示,会弹出新建项目对话框,如图1—1,图1—2所示:图1—1图1—23、项目类型选择“Visual C#”,模版选择【Windows窗体应用程序】,将名称改为“YaxinMusicPlayer”,然后选择项目要保存的路径,然后【确定】。
如图1—3所示:图1—34、新建窗体。
基本步骤是:右击解决方案资源管理器中的网站,选择【添加】|【新建项】,弹出【添加新项】对话框,类别选择【Windows Forms】,模版选择【Windows窗体】,按照命名规则修改名称之后点击【确定】。
如图1—4所示:图1—45、添加窗体窗体(Form1):表1—3控件类型控件属性属性值用途Form name FormMain 窗体名称AutoScaleMode Font 确定当屏幕分辨率或字体更改时窗体或控件将如何缩放ForeColor ControlText 用于显示文本Size 389, 640 控件的大小Button Name 控件名称Name button2 名称Name button1 名称Name btnColor 名称Name button_OK 名称label name label_caption 显示雅心音乐AutoSize Flase 字体大小控制Font 宋体, 15.75pt,style=Bold用于指定控件中文本的字体大小label name label_time 播放时间AutoSize Flase 控制字体大小Font 宋体, 15.75pt,style=Bold用于显示控件中文本的字体大小Label Name label_duration 显示当前播放的歌曲时间长度Font 宋体, 15.75pt,style=Bold显示控件中的字体Label name label_list 播放列表Font 宋体, 9pt 字体大小为系统默认Label name label_open 打开Font 宋体, 9pt 字体大小为系统默认Label name label_prev 前一首Font 宋体, 9pt 字体大小为系统默认5.4系统实现5.4.1模式1:Windows界面1、双击窗体,打开界面设计部分,然后双击要编辑事件的控件。
双击FormMain0,双击Button1,响应它的click事件,将会自动转到后台代码,在鼠标停留处编写其事件代码。
2、在光标处编辑事件代码,总体设计界面如图2一1所示。
图2一1代码如下:打开第二窗体图2一2 Form2 h=new Form2() ;h.Show();3、双击Button2代码如下:Form1 a = new Form1();a.Show();打开第二窗体,如图2一3所示图2一3登录成功,如图2一4所示登录代码如下:string sql = "select uid,pwd from 用户 where uid='{0}' and pwd='{1}'";sql = string.Format(sql, textBox1.Text, textBox2.Text);string connstr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\雅心_Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"; SqlConnection conn = new SqlConnection(connstr);conn.Open();SqlDataAdapter da = new SqlDataAdapter(sql, conn);DataSet ds = new DataSet();da.Fill(ds, "a");if (ds.Tables[0].Rows.Count == 1){this.Visible = false;Form3 a = new Form3();a.Show();}elseMessageBox.Show("温情提示:\n亲,对不起哦\n登录失败,可以重试哦\n 没有帐号,可以选择注册哦\n\n\n");return;图2一4没有帐号,可以进行注册,注册代码如下string str = "insert into 用户 values('{0}','{1}')";str = string.Format(str,textBox1.Text,textBox2.Text);SqlConnection conn = null;string connstr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\雅心_Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True"; conn = new SqlConnection(connstr);conn.Open();SqlCommand comm = new SqlCommand(str, conn);try{int a=comm.ExecuteNonQuery();if (a == 1 ){MessageBox.Show("注册成功");}}//if (a == 1&&textBox1.Text.Length < 10 && textBox2.Text.Length < 10)//{// MessageBox.Show("注册成功");//}catch{ MessageBox.Show("注册失败");return;}conn.Close();4、音量调节功能MediaPlayer.volume = mediaSlider_volumeBar.Value;5、改变播放模式后的列表顺序调整代码switch (playMode){case "随机播放":{for (int i = 0; i < listView.SelectedItems.Count; i++) listView.SelectedItems[0].Selected = false;Random ran = new Random();int j = ran.Next(listView.Items.Count);listView.Items[j].Selected = true;PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);if (j > 5)listView.TopItem = listView.Items[j - 5];elselistView.TopItem = listView.Items[j];}break;case "顺序循环":{if (listView.SelectedItems.Count == 0)listView.Items[0].Selected = true;if ((int)listView.SelectedItems[0].Index + 1 > listView.Items.Count - 1){listView.Items[0].Selected = true;listView.Items[listView.Items.Count -1].Selected = false;PlayingMedia(listView.Items[0].SubItems[3].Text);if(System.IO.File.Exists(listView.SelectedItems[0].SubItems[3].Text))PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);else{listView.Items[(int)(listView.SelectedItems[0].Index) + 1].Selected = true;listView.SelectedItems[0].Remove();PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);}}else{listView.Items[(int)listView.SelectedItems[0].Index + 1].Selected = true;listView.Items[(int)listView.SelectedItems[0].Index].Selected = false; if(System.IO.File.Exists(listView.SelectedItems[0].SubItems[3].Text))PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);else{listView.Items[(int)(listView.SelectedItems[0].Index) + 1].Selected = true;listView.SelectedItems[0].Remove();PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);}}}break;case "单曲循环":{PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);}break;case "单曲播放":{PlayingMedia(listView.SelectedItems[0].SubItems[3].Text);playMode = string.Empty;}break;6、音乐播放器任务栏logo显示功能代码如下MessageBox.Show("您好\n" +"我是软件优化者孙涛\n" +"欢迎您使用雅心音乐播放器\n" +"谢谢您的使用\n", "关于", MessageBoxButtons.OK, rmation);7、最小最大化显示歌曲代码如下if (MediaPlayer.currentMedia.getItemInfo("Author") == "")label_mediaInfo.Text =MediaPlayer.currentMedia.getItemInfo("name");elselabel_mediaInfo.Text =MediaPlayer.currentMedia.getItemInfo("Author") + "-" +MediaPlayer.currentMedia.getItemInfo("name");if (this.TopMost){if (MediaPlayer.currentMedia.getItemInfo("Author") != "") {label_caption.Text =MediaPlayer.currentMedia.getItemInfo("Author") + ":" +MediaPlayer.currentMedia.getItemInfo("Title");}else{label_caption.Text =MediaPlayer.currentMedia.getItemInfo("Title");}8、播放模式功能实现代码如下:switch (menu.Text){case "随机播放":{resetPlayMode("随机播放");随机播放ToolStripMenuItem.Checked = true;} break;case "顺序循环":{resetPlayMode("顺序循环");顺序循环ToolStripMenuItem.Checked = true;}break;case "单曲循环":{resetPlayMode("单曲循环");单曲循环ToolStripMenuItem.Checked = true;}break;case "单曲播放":{resetPlayMode("单曲播放");单曲播放ToolStripMenuItem.Checked = true;}break;9、皮肤设置功能代码如下,图示:如图2一5,2—6所示private void btnColor_Click(object sender, EventArgs e){int x = btnColor.Width;contextMenuColor.Show(btnColor, new Point(0 + x, 0), ToolStripDropDownDirection.AboveLeft);}private void 按钮颜色ToolStripMenuItem_Click(object sender, EventArgs e){ColorDialog ControlColor = new ColorDialog();if (ControlColor.ShowDialog() == DialogResult.OK){// Button.foreach (Control a in Controls){Button c = a as Button;if (c != null){c.BackColor = ControlColor.Color;图2一5图2一610、透明度设置代码如下case "100%":{resetFormOpacity(1.0);toolStripMenuItem2.Checked = true; } break;case "90%":{resetFormOpacity(0.9);toolStripMenuItem3.Checked = true; } break;case "80%":{resetFormOpacity(0.8);toolStripMenuItem4.Checked = true; } break;case "70%":{resetFormOpacity(0.7);toolStripMenuItem5.Checked = true; } break;case "60%":{resetFormOpacity(0.6);toolStripMenuItem6.Checked = true; } break;case "50%":{resetFormOpacity(0.5);toolStripMenuItem7.Checked = true; } break;case "40%":{resetFormOpacity(0.4);toolStripMenuItem8.Checked = true; } break;case "30%":{resetFormOpacity(0.3);toolStripMenuItem9.Checked = true; } break;case "20%":{resetFormOpacity(0.2);toolStripMenuItem10.Checked = true;} break;case "10%":{resetFormOpacity(0.1);toolStripMenuItem11.Checked = true;} break;case "0%":{resetFormOpacity(0.0);toolStripMenuItem12.Checked = true;} break;11、添加/删除功能的实现代码private void AddMedia(){if (openFileDialog.ShowDialog() == DialogResult.OK){string[] fileNames = openFileDialog.FileNames;XmlDocument xml = new XmlDocument();xml.Load(xmlMediaListPath);XmlNode node = xml.SelectSingleNode("MediaList").FirstChild;for (int i = 0; i < fileNames.Length; i++){listView.Items.Add(listView.Items.Count.ToString());listView.Items[(int)listView.Items.Count - 1].SubItems.Add(MediaPlayer.newMedia(fileNames[i]).name);listView.Items[(int)listView.Items.Count - 1].SubItems.Add(MediaPlayer.newMedia(fileNames[i]).durationString);listView.Items[(int)listView.Items.Count - 1].SubItems.Add(MediaPlayer.newMedia(fileNames[i]).sourceURL);}xml.Save(xmlMediaListPath);}}private void DelMedia(){if (listView.SelectedItems.Count > 0){XmlDocument xml = new XmlDocument();xml.Load(xmlMediaListPath);for (int i = 0; i < listView.SelectedItems.Count; i++) {foreach (XmlNode node in xml.SelectSingleNode("MediaList").ChildNodes){if (node.InnerText == listView.SelectedItems[i].SubItems[3].Text){xml.SelectSingleNode("MediaList").RemoveChild(node);break;}}}xml.Save(xmlMediaListPath);// 编号更新// add by suntaoint dwIndex = Convert.ToInt32(listView.SelectedItems[0].Text);if (dwIndex < 0)return;for (; dwIndex < listView.Items.Count; ++dwIndex){listView.Items[dwIndex].SubItems[0].Text = Convert.ToString(dwIndex - 1);}// ended by suntaoint count = listView.SelectedItems.Count;for (int i = 0; i < count; i++){listView.SelectedItems[0].Remove();}}}private void DelMediaANDfile(){if (listView.SelectedItems.Count > 0 && MessageBox.Show("你确定要删除源文件吗?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes){XmlDocument xml = new XmlDocument();xml.Load(xmlMediaListPath);for (int i = 0; i < listView.SelectedItems.Count; i++) {System.IO.File.Delete(listView.SelectedItems[i].SubItems[3].Text);foreach (XmlNode node in xml.SelectSingleNode("MediaList").ChildNodes){if (node.InnerText == listView.SelectedItems[i].SubItems[3].Text){xml.SelectSingleNode("MediaList").RemoveChild(node);break;}}}xml.Save(xmlMediaListPath);// 编号更新// add by suntaoint dwIndex = Convert.ToInt32(listView.SelectedItems[0].Text);if (dwIndex < 0)return;for (; dwIndex < listView.Items.Count; ++dwIndex){listView.Items[dwIndex].SubItems[0].Text = Convert.ToString(dwIndex - 1);}// ended by suntaoint count = listView.SelectedItems.Count;for (int i = 0; i < count; i++){listView.SelectedItems[0].Remove();}}12、查找功能的实现代码if (textBox_search.TextLength <= 0){MessageBox.Show("请输入查找歌曲的名字");return;}if (listView.SelectedItems.Count > 0){for (int i = 0; i < listView.SelectedItems.Count; i++)listView.SelectedItems[0].Selected = false;}if (listView.FindItemWithText(textBox_search.Text, true, 0) != null){listView.FindItemWithText(textBox_search.Text, true, 0).Selected = true;listView.TopItem = listView.SelectedItems[0];}elseMessageBox.Show("没有找到与 " + textBox_search.Text + " 相关的歌曲!");textBox_search.Visible = false;button_OK.Visible = false;13、最大最小化窗口显示界面的实现代码this.TopMost = !this.TopMost;if (TopMost){label_prev.Location = new Point(14, 3);label_playORpause.Location = new Point(40, 3);label_stop.Location = new Point(66, 3);label_next.Location = new Point(92, 3);pictureBox_logo.Visible = false;label_caption.Size = new Size(200, 23);label_caption.Location = new Point(118, 4);this.Size = new Size(389, 27);this.SetBounds((System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width - this.Width) / 2, 0, this.Width, this.Height);resetFormOpacity(0.5);toolStripMenuItem7.Checked = true;label_caption.TextAlign = ContentAlignment.MiddleCenter; timer1.Enabled = true;}else{label_prev.Location = new Point(82, 112);label_playORpause.Location = new Point(113, 112);label_stop.Location = new Point(144, 112);label_next.Location = new Point(175, 112);pictureBox_logo.Visible = true;label_caption.Size = new Size(283, 23);label_caption.Location = new Point(37, 4);this.Size = new Size(389, 640);this.StartPosition = FormStartPosition.CenterScreen;resetFormOpacity(1.0);toolStripMenuItem2.Checked = true;label_caption.Text = "雅心音乐";label_caption.TextAlign = ContentAlignment.MiddleLeft;label_caption.ForeColor = Color.ForestGreen;timer1.Enabled = false;14、连接数据库实现登录注册功能的实现代码namespace StarMusicPlayer{public class SQLHelp{ public static DataSet ExecuteQuery(string sql){string connstr = "Data Source=.\\SQLEXPRESS;AttachDbFilename=C:\\雅心_Data.MDF;Integrated Security=True;Connect Timeout=30;UserInstance=True";SqlConnection conn = new SqlConnection(connstr);conn.Open();SqlDataAdapter da = new SqlDataAdapter(sql, conn);DataSet ds = new DataSet();da.Fill(ds, "a");return ds;}public static int ExecuteNonQuery(string sqlxxx){SqlConnection conn = null;try{string connstr = "DataSource=.\\SQLEXPRESS;AttachDbFilename=C:\\雅心_Data.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True";conn = new SqlConnection(connstr);conn.Open();SqlCommand comm = new SqlCommand(sqlxxx, conn);int a = comm.ExecuteNonQuery();MessageBox.Show(a.ToString());return a;}catch{return -1;}finally{conn.Close();}}15、雅心音乐播放器运行效果图:如图2一7所示开始进入:当软件启动后,会显示一个渐进界面作为播放器的友情界面,这个界面能使用户获得一种好感也显示软件的诚意:热心欢迎用户的使用图2一7进入主界面:如图2—8所示。