书签 分享 收藏 举报 版权申诉 / 72
上传文档赚钱

类型Delphi程序设计第10章.ppt

  • 上传人(卖家):三亚风情
  • 文档编号:3377000
  • 上传时间:2022-08-25
  • 格式:PPT
  • 页数:72
  • 大小:462.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《Delphi程序设计第10章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    Delphi 程序设计 10
    资源描述:

    1、第第10章章 Delphi程序设计综合实例程序设计综合实例使用Delphi系统进行应用程序开发是学习本书的最终目的,通过前面章节的学习,读者具备了使用Delphi系统进行综合性应用程序开发的理论基础。本章将通过开发一个音乐点播系统,介绍使用Delphi系统进行应用程序设计的详细步骤与方法。10.1 程序设计流程程序设计流程通常情况下,程序设计需要经过需求分析、模块设计、代码编辑和维护4个阶段。1需求分析在需求分析阶段,开发人员需要与客户进行充分的交流与沟通,了解客户的实际需要,从而确定系统需要实现的目标。因此,在这个阶段,良好的沟通能力将起到决定性的作用。通常情况下,开发人员先快速开发出一个简

    2、单模型,然后与客户一起对该模型进行评估,根据评估意见进行修改,最终开发出真正符合需求的应用程序。2模块设计在模块设计阶段,开发人员根据需求分析的结果,设计实现结果的功能模块。模块设计阶段又分为总体设计和详细设计两个阶段。在详细设计阶段,需要确定实现各个模块功能的算法、数据结构和实现细节;在总体设计阶段,要规定模块与模块之间的通信方式,通过模块之间的相互合作来最终实现程序的功能。3代码编辑代码编辑阶段的工作是编写代码来实现模块功能。当编写完所有模块的代码后,还要将所有模块集成起来进行测试。4运行维护阶段程序制作好,测试无误后即可以交付用户使用。至此进入程序的维护阶段。在该阶段要收集用户的反馈意见

    3、,对程序进行维护和改进。10.2 音乐点播系统介绍音乐点播系统介绍在日常生活中,人们经常使用电脑来播放歌曲。为了更好地管理歌曲和播放歌曲,本章将使用Delphi系统开发一个音乐点播系统,实现歌曲的管理与播放。本章制作的音乐点播系统是一个基于数据库的多媒体播放系统,通过数据库来选择歌曲,并能播放选中的歌曲。10.3 程序设计流程程序设计流程需求分析是程序开发的第一步,是其他所有工作的前提与基础,在整个开发流程中占有很重要的地位。只有充分理解和明确系统的需求,才能开发出符合客户需求的应用系统。音乐点播系统中有两种用户:系统管理员和普通用户。系统管理员对系统中的所有用户和歌曲进行管理。普通用户可以在

    4、系统中选择和播放歌曲,并能将自己喜爱的歌曲保存到歌曲列表中。系统管理员通过播放次数来对歌曲进行排行。通过需求分析,可以得出音乐点播系统要实现的功能如下:1.用户管理音乐点播系统的用户分系统管理员和普通用户两种。先设一个系统管理员,由其对所有用户进行管理,然后普通用户通过注册,将个人信息添加到数据库中,由系统管理员统一进行管理。2.歌曲管理系统管理员可以对系统中的所有音乐文件进行管理,如添加、移动和删除,并设置歌曲的相关信息,如歌手、歌曲名称、歌曲分类和存放位置等。3.播放歌曲普通用户通过播放列表查看数据库中的歌曲,从中选择感兴趣的歌曲进行播放。4.歌曲收藏普通用户可以收藏自己喜爱的歌曲,而且能

    5、随时删除。5.其他需求针对不同的用户(管理员与普通用户)设置不同的操作界面。系统在Windows系统平台上运行,要求界面美观。由于篇幅所限,这里设定的系统功能比较简单,读者可以根据需要增加或修改系统功能。10.4 模块设计模块设计根据需求分析的结果,可以将音乐点播系统分为若干个功能模块,然后通过程序用例图来表示各个模块之间的关系。在用例图中,系统的每个功能模块称为一个实例,系统中的用户称为角色。音乐点播系统中有系统管理员与普通用户两种角色。系统的实例包括用户信息管理、歌曲信息管理、歌曲浏览播放和个人曲库管理等。由此得出音乐点播系统用例图如下图所示。通过用例图可以大致了解系统的功能。这些功能只是

    6、大致划分,可以将系统功能模块进一步划分为更小的功能子模块,如下图所示。音乐点播系统用例图消息对话框10.5 数据库设计数据库设计音乐点播系统是一个基于数据库的多媒体播放系统,在程序设计前要先建立数据库和数据表。在建立数据库和数据表前,应先分析数据信息,从而得出数据表的数据结构,然后在数据库中建立数据表。10.5.1 实体实体关系图关系图通常情况下采用实体关系(E-R)图来描述数据信息。在E-R图中,每个对象称为一个实体。音乐点播系统中的实体包括系统管理员、普通用户和歌曲。其中,管理员可以普通用户和歌曲,普通用户可以选择、收藏和播放歌曲。音乐点播系统E-R图如下图所示。在上图所示的E-R图中,一

    7、个管理员可以管理多个用户和多首歌曲,因而管理员与普通用户,管理员与歌曲之间都是一对多(1:n)的关系。一个用户可以选择多首歌曲,一首歌曲也可以被多个用户选择,因而它们之间是多对多的关系(m:n)。10.5.2 数据表结构设计数据表结构设计音乐点播系统中需要建立的数据表有以下几个:1.用户信息表用户信息(UsrInf)表用于存放用户的基本信息,如用户名、类型和密码,其数据结构见下表。字段名称字段类型字段长度字段说明UsrNameAnsiString64主键,表示名称UsrTypeShortint系统定义0表示管理员;1表示普通用户UsrPassWdAnsiString16密码,不可为空用户信息表

    8、的结构2.歌曲信息表(SongInf)歌曲信息(SongInf)表用于存放歌曲信息,如歌曲名称、歌手名称、存放位置和歌曲类别等,其数据结构见下表。字段名称字段类型字段长度字段说明SongAddrAnsiString256主键,表示歌曲存放位置SongNameAnsiString128歌曲名称,不可为空SongTypeShortint系统定义歌曲类别,缺省值为00:未确定 1:流行歌曲2:古典歌曲3:乡村音乐4:校园歌曲5:国外音乐SingerAnsiString64歌手名称,缺省值为“佚名”歌曲信息表的结构3.用户歌曲表用户歌曲(UsrSong)表用于存放用户收藏的信息,包括用户名称、歌曲,包

    9、括名称、歌曲名称、歌曲位置和点播次数等,其数据结构见下表。歌曲表的结构字段名称字段类型字段长度字段说明UsrNameAnsiString64主键,表示名称SongAddrAnsiString256主键,表示歌曲位置SongNameAnsiString128歌曲名称,不可为空SongCountLongint系统定义歌曲点播次数,默认值为010.5.3 建立数据库与数据表建立数据库与数据表设计好各个数据表的数据格式后,在数据库管理系统中建立数据库和数据表,然后连接数据库与应用程序。具体的方法请参照第7章中相关内容,这里就不在赘述。10.6 程序功能程序功能的的实现实现音乐点播系统分为用户登录模块、

    10、管理员模块、歌曲管理模块和点播模块。下面将分模块介绍系统的实现过程。10.6.1 用户登录模块用户登录模块在登录模块中输入用户名和密码进行登录,当密码出错时,系统提示密码错误并要求重新输入。如果用户名不存在,则提示进行注册。1.界面设计在实现程序功能之前,应先设计程序界面,主要步骤如下:(1)执行FileNewForm命令,在当前项目中添加一个Form窗体,将其Name属性设置为LoginForm;将Caption属性设置为“用户登录”。(2)在Form窗体中添加3个Labe组件,3个Edit组件和3个Button组件,设计界面如下图所示。将“确认密码”Label组件和右边的Edit组件以及“

    11、确定”按钮的Visible属性值均设置为False;将“用户密码”、“确认密码”右边的Edit组件的PassWd属性均设置为“*”。(3)用户在登录时需要访问数据库,所以需要建立数据连接。执行FileNewData Module命令,在项目中添加一个Data Module窗体,用于存放数据组件,将该窗体的Name属性设置为DM。(4)在DM窗体中添加一个ADOConnection组件,将其ConnectionString属性值设置为UDL文件,将LoginPrompt属性设置为False;将Connected属性设置为True。再在DM窗体中添加一个ADOQuery组件和一个DataSourc

    12、e组件。将ADOQuery组件的Name属性值设置为query,Connection属性设置为ADOConnection组件;将DataSource组件的DataSet属性设置为query。(5)按照步骤(1)的方法,在当前项目中添加两个Form窗体,分别命名为ManageForm和UsrForm,分别作为管理员和用户操作界面,窗体的具体设置将在下文进行介绍。2.代码实现设计好“用户登录”界面后,接下来编写代码实现界面的功能。1)登录当用户单击“登录”按钮时,程序先判断用户名和密码是否为空,如果为空则提示输入用户名和密码,否则将用户输入的信息提交给数据库,程序根据数据库的返回值给出以下3种处理

    13、结果:不存在:提示错误信息,建议注册。密码不正确:提示密码错误,要求重新输入密码。登录成功:根据用户类型打开相应的界面,并关闭登录窗口。由于登录时需要查询数据库UsrInf表中的数据,所以需要利用DM窗体中的组件进行程序设计。同时,要根据用户的类型分别打开管理员窗体(ManageForm)和用户窗体(UsrForm),因此,需要在登录模块中声明DM窗体,ManageForm窗体和UsrForm窗体。参考代码如下:procedure TLoginForm.Button1Click(Sender:TObject);var sqlstr:String;begin if Edit1.Text=then

    14、 begin MessageDlg(名不能为空。,mtWarning,mbOK,0);Edit1.SetFocus end else if Edit2.Text=then begin MessageDlg(密码不能为空。,mtWarning,mbOK,0);Edit2.SetFocus end else begin sqlstr:=select*from UsrInf where UsrName=:iname and UsrPassWd=:ipasswd;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Pa

    15、rameters.ParamByName(iname).Value:=Edit1.Text;DM.query.Parameters.ParamByName(ipasswd).Value:=Edit2.Text;DM.query.Open;if DM.query.RecordCount=0 then begin MessageDlg(用户名不存在,请重新登录。,mtError,mbOK,0);Edit1.Text:=;Edit2.Text:=;Edit1.SetFocus end else begin if DM.query.FieldByName(UsrType).Value=0 then b

    16、egin Application.CreateForm(TManageForm,ManageForm);ManageForm.show;LoginForm.Free end else begin Application.CreateForm(TUsrForm,UsrForm);UsrForm.Show;LoginForm.Free;end;end;end;end;2)注册当单击“注册”按钮时,“确定”按钮、“确认密码”标签及其右边的Edit组件的Visible属性均为True。设置好用户名和密码后,单击“确定”按钮,系统判断第一次输入密码与确认密码是否一致,如果一致,则将数据提交到数据库,否则

    17、提示密码错误。如果系统在数据库中没有发现有重复的用户名,则提示注册成功,进入用户界面。否则提示重新输入用户名。实现注册功能的参考代码如下:procedure TLoginForm.Button3Click(Sender:TObject);var sqlstr:string;begin if Edit2.Text Edit3.Text then begin MessageDlg(两次输入的密码不同,请重新输入密码.,mtWarning,mbOK,0);Edit2.Clear;Edit2.SetFocus;Edit3.Clear;end else begin sqlstr:=select*from

    18、 UsrInf where UsrName=:iname;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:=Edit1.Text;DM.query.Open;if DM.query.RecordCount 0 then begin MessageDlg(用户名已经存在,请更换名称。,mtError,mbOK,0);Edit1.Clear;Edit2.Clear;Edit3.Clear;Edit1.SetFocus end else be

    19、gin sqlstr:=insert into UsrInf Values(:iName,:iType,:iPasswd);DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:=Edit1.Text;DM.query.Parameters.ParamByName(iType).Value:=0;DM.query.Parameters.ParamByName(iPasswd).Value:=Edit3.Text;Dm.query.ExecSQ

    20、L;MessageDlg(添加完成,mtInformation,mbOK,0);Application.CreateForm(TUsrForm,UsrForm);UsrForm.Show;LoginForm.Free;end;end;end;10.6.2 管理员模块管理员模块管理员模块需要实现用户信息管理和歌曲信息管理的功能。由于用户管理的功能比较简单,所有可以将这两个功能放置在一个界面中。1.界面设置设计管理员界面的操作步骤如下:(1)在前面创建的ManageForm窗体中添加两个GroupBox组件,将窗体分为“歌曲管理”与“用户管理”两部分。(2)在ManageForm窗体中添加一个DB

    21、Grid组件,3个Edit组件,3个ComboBox组件,7个Label组件,5个Button组件,一个OpenDialog组件和一个Timer组件。将OpenDialog组件Options属性集中的ofAllowMultiSelect属性设置为True。将Timer组件的Interval属性设置为1000。创建的“管理员”界面如下图所示。(3)在DM窗体中添加一个ADODataSet组件,和一个DataSource组件(DataSource2)。将ADODataSet组件的Name属性设置为DataSet1,将Connection属性设置为ADOConnection组件,将CommandTe

    22、xt属性设置为“select*from SongInf order by Singer”,将Active属性设置为True。将DataSource2组件的DataSet属性设置为DataSet1,将DBGrid组件的DataSource属性设置为DataSource2组件。2.功能实现管理员模块需要实现歌曲管理与管理用户的功能。具体操作步骤如下:(1)在ManageForm窗体的OnCreate事件中添加如下代码,对ComboBox2组件进行初始化。procedure TManageForm.FormCreate(Sender:TObject);begin ComboBox2.Items.Ad

    23、d(未确定);ComboBox2.Items.Add(流行歌曲);ComboBox2.Items.Add(古典乐曲);ComboBox2.Items.Add(乡村音乐);ComboBox2.Items.Add(校园歌曲);ComboBox2.Items.Add(国外音乐);ComboBox2.ItemIndex:=0;end;(2)单击“添加歌曲”按钮,可以在SongInf表中添加歌曲信息,在添加前,应先查看要添加的歌曲是否与SonInf表中的歌曲重复,如果要添加的歌曲已经存在则不能添加,否则将歌曲添加到数据表中,并刷新DBGrid组件的数据,实现这些功能的代码如下:procedure TMa

    24、nageForm.Button1Click(Sender:TObject);var i:integer;sqlstr:string;begin OpenDialog1.Execute;for i:=1 to OpenDialog1.Files.Count do begin sqlstr:=select*from SongInf where SongAddr=:isongaddr;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(isongaddr).Value:=

    25、OpenDialog1.Filesi-1;DM.query.Open;if DM.query.RecordCount 0 then MessageDlg(该曲目已经存在,不能添加。,mtError,mbOK,0)else begin sqlstr:=Insert into SongInf(SongAddr)Values(:isongaddr);DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(isongaddr).Value:=OpenDialog1.Filesi

    26、-1;DM.query.ExecSQL;DM.DataSet1.Close;DM.DataSet1.Open;end;end;end;3)为DBGrid组件的OnDBClick事件添加如下代码,在DBGrid组件中显示选中歌曲的信息。procedure TManageForm.DBGrid1DblClick(Sender:TObject);begin Edit1.Text:=Trim(DBGrid1.DataSource.DataSet.FieldByName(SongName).AsString);ComboBox1.Text:=Trim(DBGrid1.DataSource.DataSet

    27、.FieldByName(Singer).AsString);ComboBox2.ItemIndex:=DBGrid1.DataSource.DataSet.FieldByName(SongType).AsInteger;Edit2.Text:=IntToStr(DBGrid1.DataSource.DataSet.FieldByName(SongCount).AsInteger);Edit3.Text:=DBGrid1.DataSource.DataSet.FieldByName(SongAddr).AsString;end;(4)当激活“歌手名称”ComboBox组件时,程序将SongIn

    28、f表中所有的歌手名字添加到该组件中供选择,也可以直接在该组件中输入歌手名称。实现这些功能的代码如下:procedure TManageForm.ComboBox1Enter(Sender:TObject);var sqlstr:string;i:integer;begin sqlstr:=select distinct singer from SongInf;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Open;DM.query.First;for i:=0 to DM.query.RecordCoun

    29、t 1 do begin ComboBox1.Items.Add(DM.query.FieldValuesSinger);DM.query.Next;end;end;(5)管理员修改好歌曲信息后,单击“修改信息”按钮,将修改后数据提交到数据库中,并刷新DBGrid组件中的数据。实现这些功能的代码如下:procedure TManageForm.Button2Click(Sender:TObject);var sqlstr:string;begin sqlstr:=Update SongInf set SongName=:iname,SongType=:itype,Singer=:isinger

    30、 where SongAddr=:iaddr;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:=Trim(Edit1.Text);DM.query.Parameters.ParamByName(isinger).Value:=Trim(ComboBox1.Text);DM.query.Parameters.ParamByName(itype).Value:=ComboBox2.ItemIndex;DM.query.Parameters.

    31、ParamByName(iaddr).Value:=Trim(Edit3.Text);DM.query.ExecSQL;DM.DataSet1.Close;DM.DataSet1.Open;end;(6)单击“删除歌曲”按钮,可以删除选中的歌曲信息并刷新DBGrid组件中的数据,实现该功能的代码如下:procedure TManageForm.Button3Click(Sender:TObject);var sqlstr:string;begin sqlstr:=delete from SongInf where SongAddr=:iaddr;DM.query.Close;DM.query.

    32、SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iaddr).Value:=Trim(Edit3.Text);DM.query.ExecSQL;DM.DataSet1.Close;DM.DataSet1.Open;end;(7)在ComboBox3组件的OnEnter事件中添加如下代码,当管理员选中该组件时,系统将UsrInf表中所有用户名添加到ComboBox3组件中供管理员选择,也可以直接在ComboBox组件中输入用户名。procedure TManageForm.ComboBox3Enter(Send

    33、er:TObject);var sqlstr:string;i:integer;begin sqlstr:=select UsrName from UsrInf order by UsrName;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Open;DM.query.First;ComboBox3.Clear;for i:=0 to DM.query.RecordCount-1 do begin ComboBox3.Items.Add(DM.query.FieldValuesUsrName);DM.qu

    34、ery.Next;end;end;(8)单击“删除用户”按钮,可以删除在ComboBox3组件中选中用户,实现代码如下:procedure TManageForm.Button4Click(Sender:TObject);var sqlstr:string;begin sqlstr:=delete from UsrInf where UsrName=:iname;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:=Trim(ComboBo

    35、x3.Text);DM.query.ExecSQL;end;(9)单击“修改密码”按钮,可以将ComboBox3组件中选中用户的密码密设置为123456,实现代码如下:procedure TManageForm.Button5Click(Sender:TObject);var sqlstr:string;begin sqlstr:=Update UsrInf set UsrPasswd=:ipasswd where UsrName=:iname;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Paramet

    36、ers.ParamByName(ipasswd).Value:=123456;DM.query.Parameters.ParamByName(iname).Value:=Trim(ComboBox3.Text);DM.query.ExecSQL;end;(10)为Timer组件的OnTimer事件添加如下代码,在Form窗体中显示当前时间:procedure TManageForm.Timer1Timer(Sender:TObject);begin Label7.Caption:=TimeToStr(Time);end;(11)在ManageForm窗体的OnClose事件中添加如下代码,关闭

    37、系统。procedure TManageForm.FormClose(Sender:TObject;var Action:TCloseAction);begin Application.Terminate;end;10.6.3 点播模块点播模块点播模块需要实现的功能为选择歌曲、播放歌曲和收藏歌曲。在实现这些功能前,需要先进行界面设计。1.界面设计操作步骤如下:(1)在UsrForm窗体中添加3个GroupBox组件,将窗体划分为“歌曲检索”、“收藏列表”和“歌曲播放”3个区域。(2)在“歌曲检索”区域中添加一个TreeView组件,两个Label组件,两个Edit组件和3个Button组件。(

    38、3)在“收藏列表”区域添加一个ListBox组件。(4)在“歌曲播放”区域添加一个MediaPlayer组件,一个Timer组件,一个ProgressBar组件和5个SpeedButton组件。将MediaPlayer组件的Visible属性设置为False;将ProgressBar组件的Smooth属性设置为True;设置SpeedButton组件的Glyph属性,为该组件添加图标。设计好的用户界面如图下所示。2.功能实现完成程序界面设计后,即可以编写代码实现程序功能。下面分别介绍如何实现各个模块的功能。用户界面(1)单击“歌曲检索”区域中的“全部”按钮时,清空TreeView组件,并遍历数

    39、据库中的歌曲,将所有歌曲按照歌手名称进行分类,然后添加到TreeView组件中供用户选择。实现这些功能的参考代码如下:procedure TUsrForm.Button2Click(Sender:TObject);var sqlstr,tmpsinger,getsingername,getsongname,getsongaddr:string;root,curnode:TTreeNode;i:integer;begin tmpsinger:=;sqlstr:=select*from SongInf order by Singer;DM.query.Close;DM.query.SQL.Clea

    40、r;DM.query.SQL.Add(sqlstr);DM.query.Open;DM.query.First;TreeView1.Items.Clear;TreeView1.Items.AddFirst(nil,所有歌曲);root:=TreeView1.Items0;for i:=0 to DM.query.RecordCount-1 do begin getsingername:=DM.query.FieldValuesSinger;getsongname:=DM.query.FieldValuesSongName;getsongaddr:=DM.query.FieldValuesSon

    41、gAddr;if tmpsinger getsingername then begin curnode:=TreeView1.Items.AddChild(root,getsingername);tmpsinger:=getsingername end else begin TreeView1.Items.AddChild(curnode,getsongname);DM.query.Next;end;end;end;(2)单击“歌曲检索”区域中的“检索”按钮时,程序开始检索数据表,查找符合歌曲名称或歌手名称的歌曲,然后清空TreeView组件中的信息,将查询结果添加到TreeView组件中。实

    42、现这些功能的参考代码如下:procedure TUsrForm.Button1Click(Sender:TObject);var sqlstr,tmpsinger,getsingername,getsongname,getsongaddr:string;root,curnode:TTreeNode;i:integer;begin tmpsinger:=;sqlstr:=select*from SongInf where singer=:isinger or SongName=:isongname order by Singer;DM.query.Close;DM.query.SQL.Clear

    43、;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(isinger).Value:=Trim(Edit1.Text);DM.query.Parameters.ParamByName(isongname).Value:=Trim(Edit2.Text);DM.query.Open;if DM.query.RecordCount=0 then begin MessageDlg(数据信息不存在,请重新查找。,mtError,mbOK,0);Edit1.Clear;Edit2.Clear;Edit1.SetFocus end else b

    44、egin DM.query.First;TreeView1.Items.Clear;TreeView1.Items.AddFirst(nil,所有歌曲);root:=TreeView1.Items0;for i:=0 to DM.query.RecordCount-1 do begin getsingername:=DM.query.FieldValuesSinger;getsongname:=DM.query.FieldValuesSongName;getsongaddr:=DM.query.FieldValuesSongAddr;if tmpsinger getsingername the

    45、n begin curnode:=TreeView1.Items.AddChild(root,getsingername);tmpsinger:=getsingername end else begin TreeView1.Items.AddChild(curnode,getsongname);DM.query.Next;end;end;end;end;(3)单击“歌曲检索”区域中的“用户收藏”按钮,可以将TreeView组件中选中的歌曲添加到列表中,并修改SongInf表中的歌曲数目,同时将收藏歌曲的信息添加到UsrSong表中。如果列表中已存在该歌曲,则提示“该歌曲已经收藏”。实现这些功能

    46、的参考代码如下:procedure TUsrForm.Button3Click(Sender:TObject);var inflag:boolean;tmpNode:TTreeNode;i:integer;sqlstr:string;beginif TreeView1.Selected nil then begin inflag:=false;if TreeView1.Selected.Level 2 then MessageDlg(请选中歌曲名称。,mtError,mbOK,0)else begin for i:=0 to ListBox1.Count-1 do begin if ListB

    47、ox1.Itemsi=TreeView1.Selected.Text then begin inflag:=true;break;end;end;if inflag=true then MessageDlg(该歌曲已经收藏。,mtError,mbOK,0)else begin sqlstr:=insert into UsrSong values(:iname,:iaddr,:isong);DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:

    48、=localusrname;TmpNode:=TreeView1.Selected.getFirstChild;DM.query.Parameters.ParamByName(iaddr).Value:=TmpNode.Text;DM.query.Parameters.ParamByName(isong).Value:=TreeView1.Selected.Text;DM.query.ExecSQL;sqlstr:=update SongInf set SongCount=SongCount+1 where SongAddr=:iaddr;DM.query.Close;DM.query.SQL

    49、.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iaddr).Value:=TmpNode.Text;DM.query.ExecSQL;ListBox1.Items.Add(TreeView1.Selected.Text);end;end;end;end;(4)为UsrForm窗体的OnShow事件添加如下代码,完成初始化工作,主要包括从“用户登录”界面获得用户名,从UsrSong表中获取收藏歌曲的信息。参考代码如下:procedure TUsrForm.FormShow(Sender:TObject);var s

    50、qlstr,songname,songaddr:string;i:integer;begin localusrname:=UsrForm.Caption;sqlstr:=select*from UsrSong where UsrName=:iname order by SongName;DM.query.Close;DM.query.SQL.Clear;DM.query.SQL.Add(sqlstr);DM.query.Parameters.ParamByName(iname).Value:=localusrname;DM.query.Open;DM.query.First;ListBox1.

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:Delphi程序设计第10章.ppt
    链接地址:https://www.163wenku.com/p-3377000.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库