C语言—电影俱乐部管理程序_第1页
C语言—电影俱乐部管理程序_第2页
C语言—电影俱乐部管理程序_第3页
C语言—电影俱乐部管理程序_第4页
C语言—电影俱乐部管理程序_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C+课程设计报告191114班黄玲学号:20111003886一.前言本次课程设计运用MFC基于对话框编程。运用C+语言的特点,在对话框中实现信息的添加,查找,删除,浏览等功能。充分发挥对话框的作用。二.正文(1)题目:电影俱乐部【要求】允许俱乐部成员租用DVD若想成为会员,首先应签约并且可按月交纳费用。会员一次可租用三个DVD没有时间限制。可浏览所有可租用的DVD能实现新成员的开户、会员对其帐户状况的查询以及俱乐部管理者对所有交易情况的查看功能。(2)需求分析:DVD信息和俱乐部会员信息用文件存储,提供文件的输入输出操作;注册新会员,提供文件的添加操作;实现查询则提供文件的查找操作;另外提供

2、键盘式选择菜单以实现功能选择。(3)代码设计总体设计过程:在对话框中加入相应的按钮和文本框,如图:然后对相应的文本框和按钮加入相应的变量,如在类向导中的所示:1.然后在MoiveClubDLG.CPP文件中对所加的文本所要实现的功能添加相应的函数,如下列表中所示:(1)从文件读取数据函数功能:完成从文件读取数据的操作,如果文件不存在则只建立链表输入输出均为空,只是一个过程.voidCMoiveClubDlg:DataInit()structMoiveCard*p,*q;/定义两个临时指针bFileEmpty=FALSE;文件默认为不空bNewFile=FALSE;/假定不是新文件bFileMo

3、dified=FALSE;/初始化文件属性p=head=(structMoiveCard*)malloc(sizeof(structMoiveCard);head->prev=head->next=NULL;/建立头结点(不存放数据)if(!(fp=fopen("data.dat","r")/试图用只读方式打开数据文件,如文件不存在则fp返回NULL值bNewFile=TRUE;文件不存在,当然是新文件了bFileEmpty=TRUE;/文件当前状态是空的,第一次运行程序嘛iCount=0;/总结点数为0,注意不包括头结点,头结点不用来存放数

4、据last=head;/尾结点此时就是头结点if(!bFileEmpty)/因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表fread(&iCount,sizeof(int),1,fp);/先从文件中读取总结点数for(inti=0;i<iCount;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_huiy

5、uan.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(I

6、DC_name)->EnableWindow(FALSE);GetDlgItem(IDC_DVD1)->EnableWindow(FALSE);GetDlgItem(IDC_DVD2)->EnableWindow(FALSE);GetDlgItem(IDC_DVD3)->EnableWindow(FALSE);GetDlgItem(IDC_huifei)->EnableWindow(FALSE);elsem_huiyuan.SetCurSel(0);/默认选中第一条记录OnSelchangehuiyuan();(2)添加函数功能:在链表的结尾添加一条记录,并将默认

7、将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程.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_

8、DVD3)->EnableWindow(TRUE);/启用文本框控件curr=(structMoiveCard*)malloc(sizeof(structMoiveCard);/将当前指针指向新增加的结点上strcpy(curr->name,"新名字");strcpy(curr->DVD1,"");strcpy(curr->DVD2,"");strcpy(curr->huifei,"");strcpy(curr->DVD3,"");/将默认的数据复制到当前结点

9、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;/在尾结点后插入新结点bFileEmpty=FALSE;bFileModified=TRUE;/修改文件属性,文件被修改且不为空GetDlgItem(IDC_UPDATE)->EnableWi

10、ndow(TRUE);GetDlgItem(IDC_delete)->EnableWindow(TRUE);GetDlgItem(IDC_namefind)->EnableWindow(TRUE);GetDlgItem(IDC_DVDfind)->EnableWindow(TRUE);/启用更新、删除、查找按钮控件LoadInfo(curr);/在文本框显示个人信息(3)函数更新功能:完成修改当前记录的操作输入输出均为空,只是一个过程.voidCMoiveClubDlg:OnUpdate()/TODO:Addyourcontrolnotificationhandlercode

11、hereUpdateData();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,

12、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:Addyourcontrolnoti

13、ficationhandlercodehereintsel=m_huiyuan.GetCurSel();/获得当前的选择curr=head->next;for(inti=0;i<sel;i+)curr=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->hu

14、ifei;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|M

15、B_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(FA

16、LSE);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_D

17、VD3)->EnableWindow(FALSE);GetDlgItem(IDC_huifei)->EnableWindow(FALSE);OnClear();bFileEmpty=TRUE;bFileModified=TRUE;return;/如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性if(sel<m_huiyuan.GetCount()m_huiyuan.SetCurSel(sel);elsem_huiyuan.SetCurSel(sel-1);/将焦点定义在列表中上一条记录OnSelchangehuiyuan();(7)清楚函数void

18、CMoiveClubDlg:OnClear()/TODO:Addyourcontrolnotificationhandlercodeherem_name=""m_DVD1=""m_DVD2=""m_DVD3=""m_huifei=""UpdateData(FALSE);(8)程序结束时将链表中的数据保存到文件函数voidCMoiveClubDlg:OnClose()/TODO:Addyourmessagehandlercodehereand/orcalldefaultstructMoiveCar

19、d*p;/声明一个临时指针变量if(!bNewFile)&&bFileModified)/根据文件属性来决定是否要删除原文件fclose(fp);DeleteFile("data.dat");if(!bFileEmpty)/根据文件是否为空来决定是否要新建文件并写入数据if(!(fp=fopen("data.dat","w+")/MessageBox("I'm sorry problem!","ERROR",MB_ICONERROR);return;fwrite(&

20、;iCount,sizeof(int),1,fp);/but如果创建新文件失败the program encounter将总结点数写入文件a filediskfseek(fp,sizeof(int),0);/移动文件指针个存放p=head->next;/将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点while(p)/当结点不为空fwrite(p,sizeof(structMoiveCard),1,fp);p=p->next;/将数据写入文件并将指针后移CDialog:OnClose();(9)About函数voidCMoiveClubDlg:OnAbout()/

21、TODO:AddyourcontrolnotificationhandlercodehereCAboutDlgdlg;dlg.DoModal();(10)处理回车键函数voidCMoiveClubDlg:OnOK()OnUpdate();/这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数(11)名字查找功能:以姓名方式查找相应的记录,如不存在则提示找不到输入为空输出为空voidCMoiveClubDlg:Onnamefind()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();intse

22、l=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);/直接调用FindString函数查找并得到序号if(sel=LB_ERR)/如果找不到记录,则输入查找失败提示MessageBox("找不到记录!","提示",MB_ICONWARNING);return;m_huiyuan.SetCurSel(sel);/选中所找到的记录项OnSelchangehuiyuan();(12)DVM找voidCMoiveClubDlg:OnDVDfind()/TODO:AddyourcontrolnotificationhandlercodehereUpdateData();

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论