C语言电影俱乐部管理程序.docx
《C语言电影俱乐部管理程序.docx》由会员分享,可在线阅读,更多相关《C语言电影俱乐部管理程序.docx(14页珍藏版)》请在冰豆网上搜索。
C语言电影俱乐部管理程序
C++课程设计报告
191114班黄玲
学号:
20111003886
一.前言
本次课程设计运用MFC,基于对话框编程。
运用C++语言的特点,在对话框中实现信息的添加,查找,删除,浏览等功能。
充分发挥对话框的作用。
二.正文
(1)题目:
电影俱乐部
【要求】允许俱乐部成员租用DVD。
若想成为会员,首先应签约并且可按月交纳费用。
会员一次可租用三个DVD,没有时间限制。
可浏览所有可租用的DVD,能实现新成员的开户、会员对其帐户状况的查询以及俱乐部管理者对所有交易情况的查看功能。
(2)需求分析:
DVD信息和俱乐部会员信息用文件存储,提供文件的输入输出操作;注册新会员,提供文件的添加操作;实现查询则提供文件的查找操作;另外提供键盘式选择菜单以实现功能选择。
(3)代码设计
总体设计过程:
在对话框中加入相应的按钮和文本框,如图:
然后对相应的文本框和按钮加入相应的变量,如在类向导中的所示:
1.
然后在MoiveClubDLG.CPP文件中对所加的文本所要实现的功能添加相应的函数,如下列表中所示:
(1)从文件读取数据函数
功能:
完成从文件读取数据的操作,如果文件不存在则只建立链表
输入输出均为空,只是一个过程.
voidCMoiveClubDlg:
:
DataInit()
{
structMoiveCard*p,*q;//定义两个临时指针
b文件默认为不空
bNew假定不是新文件
b初始化文件属性
p=head=(structMoiveCard*)malloc(sizeof(structMoiveCard));
head->prev=head->next=NULL;//建立头结点(不存放数据)
if(!
(fp=fopen("data.dat","r")))//试图用只读方式打开数据文件,如文件不存在则fp返回NULL值
bNew文件不存在,当然是新文件了
b文件当前状态是空的,第一次运行程序嘛
iCount=0;//总结点数为0,注意不包括头结点,头结点不用来存放数据
last=head;//尾结点此时就是头结点
}
b)//因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表
fread(&iCount,sizeof(int),1,fp);//先从文件中读取总结点数
for(inti=0;i{q=(structMoiveCard*)malloc(sizeof(structMoiveCard));fread(q,sizeof(structMoiveCard),1,fp);q->next=NULL;q->prev=p;p->next=q;p=p->next;m_huiyuan.InsertString(i,p->name);//显示名单}last=p;//改变尾指针的指向}if(iCount==0)//如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误{GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);GetDlgItem(IDC_delete)->EnableWindow(FALSE);GetDlgItem(IDC_namefind)->EnableWindow(FALSE);GetDlgItem(IDC_DVDfind)->EnableWindow(FALSE);GetDlgItem(IDC_name)->EnableWindow(FALSE);GetDlgItem(IDC_DVD1)->EnableWindow(FALSE);GetDlgItem(IDC_DVD2)->EnableWindow(FALSE);GetDlgItem(IDC_DVD3)->EnableWindow(FALSE);GetDlgItem(IDC_huifei)->EnableWindow(FALSE);}else{m_huiyuan.SetCurSel(0);//默认选中第一条记录OnSelchangehuiyuan();}} (2)添加函数功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程. voidCMoiveClubDlg::Onadd(){//TODO:AddyourcontrolnotificationhandlercodehereGetDlgItem(IDC_name)->EnableWindow(TRUE);GetDlgItem(IDC_DVD1)->EnableWindow(TRUE);GetDlgItem(IDC_DVD2)->EnableWindow(TRUE);GetDlgItem(IDC_huifei)->EnableWindow(TRUE);GetDlgItem(IDC_DVD3)->EnableWindow(TRUE);//启用文本框控件curr=(structMoiveCard*)malloc(sizeof(structMoiveCard));//将当前指针指向新增加的结点上strcpy(curr->name,"新名字");strcpy(curr->DVD1,"");strcpy(curr->DVD2,"");strcpy(curr->huifei,"");strcpy(curr->DVD3,"");//将默认的数据复制到当前结点m_huiyuan.InsertString(m_huiyuan.GetCount(),"新名字");m_huiyuan.SetCurSel(m_huiyuan.GetCount()-1);//在列表框中插入新名字并选中iCount++;//总结点数加1curr->next=NULL;curr->prev=last;last->next=curr;last=curr;//在尾结点后插入新结点b;b;//修改文件属性,文件被修改且不为空GetDlgItem(IDC_UPDATE)->EnableWindow(TRUE);GetDlgItem(IDC_delete)->EnableWindow(TRUE);GetDlgItem(IDC_namefind)->EnableWindow(TRUE);GetDlgItem(IDC_DVDfind)->EnableWindow(TRUE);//启用更新、删除、查找按钮控件LoadInfo(curr);//在文本框显示个人信息} (3)函数更新功能:完成修改当前记录的操作输入输出均为空,只是一个过程.voidCMoiveClubDlg::OnUpdate(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intsel=m_huiyuan.GetCurSel();//得到所选择记录在列表框中的序号if(m_name==""){MessageBox("必须键入姓名!","错误!",MB_ICONERROR);m_IDC_Name.SetFocus();return;//如果姓名输入框为空则发生错误}strcpy(curr->name,m_name);strcpy(curr->DVD1,m_DVD1);strcpy(curr->DVD2,m_DVD2);strcpy(curr->huifei,m_huifei);strcpy(curr->DVD3,m_DVD3);//将更新的数据从文本输入框复制到结点m_huiyuan.DeleteString(sel);m_huiyuan.InsertString(sel,m_name);m_huiyuan.SetCurSel(sel);//更新列表框中的姓名m_add.SetFocus();//将焦点设置到“添加”按钮上} (4)变更列表框选项功能:当列表框的选择项改变时,移动指针到指定结点的位置输入输出均为空,只是一个过程.voidCMoiveClubDlg::OnSelchangehuiyuan(){//TODO:Addyourcontrolnotificationhandlercodehereintsel=m_huiyuan.GetCurSel();//获得当前的选择curr=head->next;for(inti=0;icurr=curr->next;//移动当前指针到选定结点LoadInfo(curr);//更新界面} (5)结点中存放的数据信息显示在文本框voidCMoiveClubDlg::LoadInfo(MoiveCard*p){m_name=p->name;m_DVD1=p->DVD1;m_DVD2=p->DVD2;m_DVD3=p->DVD3;m_huifei=p->huifei;UpdateData(FALSE);m_IDC_Name.SetFocus();m_IDC_Name.SetSel(0,20,TRUE);} (6)删除函数voidCMoiveClubDlg::Ondelete(){//TODO:Addyourcontrolnotificationhandlercodehereintsel=m_huiyuan.GetCurSel();//得到所选记录在列表框中的序号structMoiveCard*p=curr;//新建一个临时指针变量if(MessageBox("确定要删除吗?","警告",MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL)return;//弹出确认对话框iCount--;//总结点数减1//删除当前结点p->prev->next=p->next;if((p->next)!=NULL)//注意删除结点为末尾结点时的操作!p->next->prev=p->prev;elselast=p->prev;free(p);//释放内存空间m_huiyuan.DeleteString(sel);//在列表框中删除记录if(m_huiyuan.GetCount()==0){GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);GetDlgItem(IDC_delete)->EnableWindow(FALSE);GetDlgItem(IDC_namefind)->EnableWindow(FALSE);GetDlgItem(IDC_DVDfind)->EnableWindow(FALSE);GetDlgItem(IDC_name)->EnableWindow(FALSE);GetDlgItem(IDC_DVD1)->EnableWindow(FALSE);GetDlgItem(IDC_DVD2)->EnableWindow(FALSE);GetDlgItem(IDC_DVD3)->EnableWindow(FALSE);GetDlgItem(IDC_huifei)->EnableWindow(FALSE);OnClear();b;b;return;//如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性}if(selm_huiyuan.SetCurSel(sel);elsem_huiyuan.SetCurSel(sel-1);//将焦点定义在列表中上一条记录OnSelchangehuiyuan();} (7)清楚函数voidCMoiveClubDlg::OnClear(){//TODO:Addyourcontrolnotificationhandlercodeherem_name="";m_DVD1="";m_DVD2="";m_DVD3="";m_huifei="";UpdateData(FALSE);} (8)程序结束时将链表中的数据保存到文件函数voidCMoiveClubDlg::OnClose(){//TODO:Addyourmessagehandlercodehereand/orcalldefaultstructMoiveCard*p;//声明一个临时指针变量if((!bNew)//根据文件属性来决定是否要删除原文件{fclose(fp);DeleteFile("data.dat");}if(!b)//根据文件是否为空来决定是否要新建文件并写入数据{if(!(fp=fopen("data.dat","w+")))//如果创建新文件失败{MessageBox("I'msorrybuttheprogramencounteraproblem!","ERROR",MB_ICONERROR);return;}fwrite(&iCount,sizeof(int),1,fp);//将总结点数写入文件fseek(fp,sizeof(int),0);//移动文件指针p=head->next;//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点while(p)//当结点不为空{fwrite(p,sizeof(structMoiveCard),1,fp);p=p->next;//将数据写入文件并将指针后移}}CDialog::OnClose();} (9)About函数voidCMoiveClubDlg::OnAbout(){//TODO:AddyourcontrolnotificationhandlercodehereCAboutDlgdlg;dlg.DoModal();} (10)处理回车键函数voidCMoiveClubDlg::OnOK(){OnUpdate();//这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数} (11)名字查找功能:以姓名方式查找相应的记录,如不存在则提示找不到输入为空输出为空voidCMoiveClubDlg::Onnamefind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intsel=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);//直接调用FindString函数查找并得到序号if(sel==LB_ERR)//如果找不到记录,则输入查找失败提示{MessageBox("找不到记录!","提示",MB_ICONWARNING);return;}m_huiyuan.SetCurSel(sel);//选中所找到的记录项OnSelchangehuiyuan();} (12)DVD查找voidCMoiveClubDlg::OnDVDfind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();MoiveCard*temp=curr;//将当前结点的地址存入一个临时指针中intsel=m_huiyuan.GetCurSel();//得到当前记录的序号do{curr=curr->next;//从当前记录的下一记录开始查找sel++;//序号加1if(curr==NULL)//如果已经查找到表尾{curr=head->next;//将当前指针移动到头结点的下一个结点,因为头结点并不存放数据sel=0;//第一条记录的序号为0}if(!(strcmp(curr->DVD1,m_findwhat)))//如果匹配成功{m_huiyuan.SetCurSel(sel);//选中找到的记录项OnSelchangehuiyuan();return;//已完成查找,退出函数体}}while(curr!=temp);//循环条件为没有遍历整个链表MessageBox("找不到记录!","提示",MB_ICONWARNING);//已经遍历整个链表但没有找到记录,输出查找失败信息return;} (13)更改名字voidCMoiveClubDlg::OnChangeName(){//TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot//sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog()//functionandcallCRichEditCtrl().SetEventMask()//withtheENM_CHANGEflagORedintothemask.//TODO:Addyourcontrolnotificationhandlercodehere}
q=(structMoiveCard*)malloc(sizeof(structMoiveCard));
fread(q,sizeof(structMoiveCard),1,fp);
q->next=NULL;
q->prev=p;
p->next=q;
p=p->next;
m_huiyuan.InsertString(i,p->name);//显示名单
last=p;//改变尾指针的指向
if(iCount==0)//如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误
GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);
GetDlgItem(IDC_delete)->EnableWindow(FALSE);
GetDlgItem(IDC_namefind)->EnableWindow(FALSE);
GetDlgItem(IDC_DVDfind)->EnableWindow(FALSE);
GetDlgItem(IDC_name)->EnableWindow(FALSE);
GetDlgItem(IDC_DVD1)->EnableWindow(FALSE);
GetDlgItem(IDC_DVD2)->EnableWindow(FALSE);
GetDlgItem(IDC_DVD3)->EnableWindow(FALSE);
GetDlgItem(IDC_huifei)->EnableWindow(FALSE);
else
m_huiyuan.SetCurSel(0);//默认选中第一条记录
OnSelchangehuiyuan();
(2)添加函数
功能:
在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程.
Onadd()
//TODO:
Addyourcontrolnotificationhandlercodehere
GetDlgItem(IDC_name)->EnableWindow(TRUE);
GetDlgItem(IDC_DVD1)->EnableWindow(TRUE);
GetDlgItem(IDC_DVD2)->EnableWindow(TRUE);
GetDlgItem(IDC_huifei)->EnableWindow(TRUE);
GetDlgItem(IDC_DVD3)->EnableWindow(TRUE);//启用文本框控件
curr=(structMoiveCard*)malloc(sizeof(structMoiveCard));//将当前指针指向新增加的结点上
strcpy(curr->name,"新名字");
strcpy(curr->DVD1,"");
strcpy(curr->DVD2,"");
strcpy(curr->huifei,"");
strcpy(curr->DVD3,"");//将默认的数据复制到当前结点
m_huiyuan.InsertString(m_huiyuan.GetCount(),"新名字");
m_huiyuan.SetCurSel(m_huiyuan.GetCount()-1);//在列表框中插入新名字并选中
iCount++;//总结点数加1
curr->next=NULL;
curr->prev=last;
last->next=curr;
last=curr;//在尾结点后插入新结点
b;
b;//修改文件属性,文件被修改且不为空
GetDlgItem(IDC_UPDATE)->EnableWindow(TRUE);
GetDlgItem(IDC_delete)->EnableWindow(TRUE);
GetDlgItem(IDC_namefind)->EnableWindow(TRUE);
GetDlgItem(IDC_DVDfind)->EnableWindow(TRUE);//启用更新、删除、查找按钮控件
LoadInfo(curr);//在文本框显示个人信息
(3)函数更新
完成修改当前记录的操作
OnUpdate()
UpdateData();
intsel=m_huiyuan.GetCurSel();//得到所选择记录在列表框中的序号
if(m_name=="")
MessageBox("必须键入姓名!
","错误!
",MB_ICONERROR);
m_IDC_Name.SetFocus();
return;//如果姓名输入框为空则发生错误
strcpy(curr->name,m_name);
strcpy(curr->DVD1,m_DVD1);
strcpy(curr->DVD2,m_DVD2);
strcpy(curr->huifei,m_huifei);
strcpy(curr->DVD3,m_DVD3);//将更新的数据从文本输入框复制到结点
m_huiyuan.DeleteString(sel);
m_huiyuan.InsertString(sel,m_name);
m_huiyuan.SetCurSel(sel);//更新列表框中的姓名
m_add.SetFocus();//将焦点设置到“添加”按钮上
(4)变更列表框选项
当列表框的选择项改变时,移动指针到指定结点的位置
OnSelchangehuiyuan()
intsel=m_huiyuan.GetCurSel();//获得当前的选择
curr=head->next;
for(inti=0;icurr=curr->next;//移动当前指针到选定结点LoadInfo(curr);//更新界面} (5)结点中存放的数据信息显示在文本框voidCMoiveClubDlg::LoadInfo(MoiveCard*p){m_name=p->name;m_DVD1=p->DVD1;m_DVD2=p->DVD2;m_DVD3=p->DVD3;m_huifei=p->huifei;UpdateData(FALSE);m_IDC_Name.SetFocus();m_IDC_Name.SetSel(0,20,TRUE);} (6)删除函数voidCMoiveClubDlg::Ondelete(){//TODO:Addyourcontrolnotificationhandlercodehereintsel=m_huiyuan.GetCurSel();//得到所选记录在列表框中的序号structMoiveCard*p=curr;//新建一个临时指针变量if(MessageBox("确定要删除吗?","警告",MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL)return;//弹出确认对话框iCount--;//总结点数减1//删除当前结点p->prev->next=p->next;if((p->next)!=NULL)//注意删除结点为末尾结点时的操作!p->next->prev=p->prev;elselast=p->prev;free(p);//释放内存空间m_huiyuan.DeleteString(sel);//在列表框中删除记录if(m_huiyuan.GetCount()==0){GetDlgItem(IDC_UPDATE)->EnableWindow(FALSE);GetDlgItem(IDC_delete)->EnableWindow(FALSE);GetDlgItem(IDC_namefind)->EnableWindow(FALSE);GetDlgItem(IDC_DVDfind)->EnableWindow(FALSE);GetDlgItem(IDC_name)->EnableWindow(FALSE);GetDlgItem(IDC_DVD1)->EnableWindow(FALSE);GetDlgItem(IDC_DVD2)->EnableWindow(FALSE);GetDlgItem(IDC_DVD3)->EnableWindow(FALSE);GetDlgItem(IDC_huifei)->EnableWindow(FALSE);OnClear();b;b;return;//如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性}if(selm_huiyuan.SetCurSel(sel);elsem_huiyuan.SetCurSel(sel-1);//将焦点定义在列表中上一条记录OnSelchangehuiyuan();} (7)清楚函数voidCMoiveClubDlg::OnClear(){//TODO:Addyourcontrolnotificationhandlercodeherem_name="";m_DVD1="";m_DVD2="";m_DVD3="";m_huifei="";UpdateData(FALSE);} (8)程序结束时将链表中的数据保存到文件函数voidCMoiveClubDlg::OnClose(){//TODO:Addyourmessagehandlercodehereand/orcalldefaultstructMoiveCard*p;//声明一个临时指针变量if((!bNew)//根据文件属性来决定是否要删除原文件{fclose(fp);DeleteFile("data.dat");}if(!b)//根据文件是否为空来决定是否要新建文件并写入数据{if(!(fp=fopen("data.dat","w+")))//如果创建新文件失败{MessageBox("I'msorrybuttheprogramencounteraproblem!","ERROR",MB_ICONERROR);return;}fwrite(&iCount,sizeof(int),1,fp);//将总结点数写入文件fseek(fp,sizeof(int),0);//移动文件指针p=head->next;//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点while(p)//当结点不为空{fwrite(p,sizeof(structMoiveCard),1,fp);p=p->next;//将数据写入文件并将指针后移}}CDialog::OnClose();} (9)About函数voidCMoiveClubDlg::OnAbout(){//TODO:AddyourcontrolnotificationhandlercodehereCAboutDlgdlg;dlg.DoModal();} (10)处理回车键函数voidCMoiveClubDlg::OnOK(){OnUpdate();//这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数} (11)名字查找功能:以姓名方式查找相应的记录,如不存在则提示找不到输入为空输出为空voidCMoiveClubDlg::Onnamefind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intsel=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);//直接调用FindString函数查找并得到序号if(sel==LB_ERR)//如果找不到记录,则输入查找失败提示{MessageBox("找不到记录!","提示",MB_ICONWARNING);return;}m_huiyuan.SetCurSel(sel);//选中所找到的记录项OnSelchangehuiyuan();} (12)DVD查找voidCMoiveClubDlg::OnDVDfind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();MoiveCard*temp=curr;//将当前结点的地址存入一个临时指针中intsel=m_huiyuan.GetCurSel();//得到当前记录的序号do{curr=curr->next;//从当前记录的下一记录开始查找sel++;//序号加1if(curr==NULL)//如果已经查找到表尾{curr=head->next;//将当前指针移动到头结点的下一个结点,因为头结点并不存放数据sel=0;//第一条记录的序号为0}if(!(strcmp(curr->DVD1,m_findwhat)))//如果匹配成功{m_huiyuan.SetCurSel(sel);//选中找到的记录项OnSelchangehuiyuan();return;//已完成查找,退出函数体}}while(curr!=temp);//循环条件为没有遍历整个链表MessageBox("找不到记录!","提示",MB_ICONWARNING);//已经遍历整个链表但没有找到记录,输出查找失败信息return;} (13)更改名字voidCMoiveClubDlg::OnChangeName(){//TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot//sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog()//functionandcallCRichEditCtrl().SetEventMask()//withtheENM_CHANGEflagORedintothemask.//TODO:Addyourcontrolnotificationhandlercodehere}
curr=curr->next;//移动当前指针到选定结点
LoadInfo(curr);//更新界面
(5)结点中存放的数据信息显示在文本框
LoadInfo(MoiveCard*p)
m_name=p->name;
m_DVD1=p->DVD1;
m_DVD2=p->DVD2;
m_DVD3=p->DVD3;
m_huifei=p->huifei;
UpdateData(FALSE);
m_IDC_Name.SetSel(0,20,TRUE);
(6)删除函数
Ondelete()
intsel=m_huiyuan.GetCurSel();//得到所选记录在列表框中的序号
structMoiveCard*p=curr;//新建一个临时指针变量
if(MessageBox("确定要删除吗?
","警告",MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL)
return;//弹出确认对话框
iCount--;//总结点数减1
//删除当前结点
p->prev->next=p->next;
if((p->next)!
=NULL)//注意删除结点为末尾结点时的操作!
p->next->prev=p->prev;
last=p->prev;
free(p);//释放内存空间
m_huiyuan.DeleteString(sel);//在列表框中删除记录
if(m_huiyuan.GetCount()==0){
OnClear();
return;//如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性
if(selm_huiyuan.SetCurSel(sel);elsem_huiyuan.SetCurSel(sel-1);//将焦点定义在列表中上一条记录OnSelchangehuiyuan();} (7)清楚函数voidCMoiveClubDlg::OnClear(){//TODO:Addyourcontrolnotificationhandlercodeherem_name="";m_DVD1="";m_DVD2="";m_DVD3="";m_huifei="";UpdateData(FALSE);} (8)程序结束时将链表中的数据保存到文件函数voidCMoiveClubDlg::OnClose(){//TODO:Addyourmessagehandlercodehereand/orcalldefaultstructMoiveCard*p;//声明一个临时指针变量if((!bNew)//根据文件属性来决定是否要删除原文件{fclose(fp);DeleteFile("data.dat");}if(!b)//根据文件是否为空来决定是否要新建文件并写入数据{if(!(fp=fopen("data.dat","w+")))//如果创建新文件失败{MessageBox("I'msorrybuttheprogramencounteraproblem!","ERROR",MB_ICONERROR);return;}fwrite(&iCount,sizeof(int),1,fp);//将总结点数写入文件fseek(fp,sizeof(int),0);//移动文件指针p=head->next;//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点while(p)//当结点不为空{fwrite(p,sizeof(structMoiveCard),1,fp);p=p->next;//将数据写入文件并将指针后移}}CDialog::OnClose();} (9)About函数voidCMoiveClubDlg::OnAbout(){//TODO:AddyourcontrolnotificationhandlercodehereCAboutDlgdlg;dlg.DoModal();} (10)处理回车键函数voidCMoiveClubDlg::OnOK(){OnUpdate();//这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数} (11)名字查找功能:以姓名方式查找相应的记录,如不存在则提示找不到输入为空输出为空voidCMoiveClubDlg::Onnamefind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intsel=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);//直接调用FindString函数查找并得到序号if(sel==LB_ERR)//如果找不到记录,则输入查找失败提示{MessageBox("找不到记录!","提示",MB_ICONWARNING);return;}m_huiyuan.SetCurSel(sel);//选中所找到的记录项OnSelchangehuiyuan();} (12)DVD查找voidCMoiveClubDlg::OnDVDfind(){//TODO:AddyourcontrolnotificationhandlercodehereUpdateData();MoiveCard*temp=curr;//将当前结点的地址存入一个临时指针中intsel=m_huiyuan.GetCurSel();//得到当前记录的序号do{curr=curr->next;//从当前记录的下一记录开始查找sel++;//序号加1if(curr==NULL)//如果已经查找到表尾{curr=head->next;//将当前指针移动到头结点的下一个结点,因为头结点并不存放数据sel=0;//第一条记录的序号为0}if(!(strcmp(curr->DVD1,m_findwhat)))//如果匹配成功{m_huiyuan.SetCurSel(sel);//选中找到的记录项OnSelchangehuiyuan();return;//已完成查找,退出函数体}}while(curr!=temp);//循环条件为没有遍历整个链表MessageBox("找不到记录!","提示",MB_ICONWARNING);//已经遍历整个链表但没有找到记录,输出查找失败信息return;} (13)更改名字voidCMoiveClubDlg::OnChangeName(){//TODO:IfthisisaRICHEDITcontrol,thecontrolwillnot//sendthisnotificationunlessyouoverridetheCDialog::OnInitDialog()//functionandcallCRichEditCtrl().SetEventMask()//withtheENM_CHANGEflagORedintothemask.//TODO:Addyourcontrolnotificationhandlercodehere}
m_huiyuan.SetCurSel(sel);
m_huiyuan.SetCurSel(sel-1);//将焦点定义在列表中上一条记录
(7)清楚函数
OnClear()
m_name="";
m_DVD1="";
m_DVD2="";
m_DVD3="";
m_huifei="";
(8)程序结束时将链表中的数据保存到文件函数
OnClose()
Addyourmessagehandlercodehereand/orcalldefault
structMoiveCard*p;//声明一个临时指针变量
if((!
bNew)//根据文件属性来决定是否要删除原文件
fclose(fp);
DeleteFile("data.dat");
b)//根据文件是否为空来决定是否要新建文件并写入数据
(fp=fopen("data.dat","w+")))//如果创建新文件失败
MessageBox("I'msorrybuttheprogramencounteraproblem!
","ERROR",MB_ICONERROR);
return;
fwrite(&iCount,sizeof(int),1,fp);//将总结点数写入文件
fseek(fp,sizeof(int),0);//移动文件指针
p=head->next;//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点
while(p)//当结点不为空
fwrite(p,sizeof(structMoiveCard),1,fp);
p=p->next;//将数据写入文件并将指针后移
CDialog:
OnClose();
(9)About函数
OnAbout()
CAboutDlgdlg;
dlg.DoModal();
(10)处理回车键函数
OnOK()
OnUpdate();//这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数
(11)名字查找
以姓名方式查找相应的记录,如不存在则提示找不到
输入为空
输出为空
Onnamefind()
intsel=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);//直接调用FindString函数查找并得到序号
if(sel==LB_ERR)//如果找不到记录,则输入查找失败提示
MessageBox("找不到记录!
","提示",MB_ICONWARNING);
m_huiyuan.SetCurSel(sel);//选中所找到的记录项
(12)DVD查找
OnDVDfind()
MoiveCard*temp=curr;//将当前结点的地址存入一个临时指针中
intsel=m_huiyuan.GetCurSel();//得到当前记录的序号
do
curr=curr->next;//从当前记录的下一记录开始查找
sel++;//序号加1
if(curr==NULL)//如果已经查找到表尾
curr=head->next;//将当前指针移动到头结点的下一个结点,因为头结点并不存放数据
sel=0;//第一条记录的序号为0
(strcmp(curr->DVD1,m_findwhat)))//如果匹配成功
m_huiyuan.SetCurSel(sel);//选中找到的记录项
return;//已完成查找,退出函数体
}while(curr!
=temp);//循环条件为没有遍历整个链表
","提示",MB_ICONWARNING);//已经遍历整个链表但没有找到记录,输出查找失败信息
(13)更改名字
OnChangeName()
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridetheCDialog:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1