电影俱乐部c语言程序,C语言-电影俱乐部管理程序

《C语言-电影俱乐部管理程序》由会员分享,可在线阅读,更多相关《C语言-电影俱乐部管理程序(17页珍藏版)》请在人人文库网上搜索。

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

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

3、Card*)malloc(sizeof(struct MoiveCard);head-prev=head-next=NULL;/建立头结点(不存放数据)if(!(fp=fopen(data.dat,r)/试图用只读方式打开数据文件,如文件不存在则fp返回NULL值bNew文件不存在,当然是新文件了b文件当前状态是空的,第一次运行程序嘛iCount=0;/总结点数为0,注意不包括头结点,头结点不用来存放数据last=head;/尾结点此时就是头结点if(!b)/因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表fread(&iCount,sizeof(int),1,fp);/先从文件。

4、中读取总结点数for(int i=0;inext=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(ID。

5、C_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)。

6、 添加函数功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程.void CMoiveClubDlg:Onadd() / TODO: Add your control notification handler code hereGetDlgItem(IDC_name)-EnableWindow(TRUE);GetDlgItem(IDC_DVD1)-EnableWindow(TRUE);GetDlgItem(IDC_DVD2)-EnableWindow(TRUE);GetDlgItem(IDC_huifei)-EnableWindow(TR。

7、UE);GetDlgItem(IDC_DVD3)-EnableWindow(TRUE);/启用文本框控件curr=(struct MoiveCard*)malloc(sizeof(struct MoiveCard);/将当前指针指向新增加的结点上strcpy(curr-name,新名字);strcpy(curr-DVD1,);strcpy(curr-DVD2,);strcpy(curr-huifei,);strcpy(curr-DVD3,);/将默认的数据复制到当前结点m_huiyuan.InsertString(m_huiyuan.GetCount(),新名字);m_huiyuan.SetC。

8、urSel(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)-En。

9、ableWindow(TRUE);/启用更新、删除、查找按钮控件LoadInfo(curr);/在文本框显示个人信息(3) 函数更新功能:完成修改当前记录的操作输入输出均为空,只是一个过程.void CMoiveClubDlg:OnUpdate() / TODO: Add your control notification handler code hereUpdateData();int sel = m_huiyuan.GetCurSel();/得到所选择记录在列表框中的序号if(m_name=)MessageBox(必须键入姓名!,错误!,MB_ICONERROR);m_IDC_Name.。

10、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();/将焦点设。

11、置到“添加”按钮上(4) 变更列表框选项功能:当列表框的选择项改变时,移动指针到指定结点的位置输入输出均为空,只是一个过程.void CMoiveClubDlg:OnSelchangehuiyuan() / TODO: Add your control notification handler code hereint sel = m_huiyuan.GetCurSel();/获得当前的选择curr=head-next;for(int i=0;inext;/移动当前指针到选定结点LoadInfo(curr);/更新界面(5) 结点中存放的数据信息显示在文本框void CMoiveClubDlg。

12、: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) 删除函数void CMoiveClubDlg:Ondelete() / TODO: Add your control notification handler code hereint sel = m_huiyuan.GetCurSel();/得到所选记录在列。

13、表框中的序号struct MoiveCard *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.。

14、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)-EnableWi。

15、ndow(FALSE);GetDlgItem(IDC_DVD3)-EnableWindow(FALSE);GetDlgItem(IDC_huifei)-EnableWindow(FALSE);OnClear();b;b;return;/如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性if (selnext;/将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点while(p)/当结点不为空fwrite(p,sizeof(struct MoiveCard),1,fp);p=p-next;/将数据写入文件并将指针后移CDialog:OnClose();(9。

16、)About函数void CMoiveClubDlg:OnAbout() / TODO: Add your control notification handler code hereCAboutDlg dlg;dlg.DoModal();(10)处理回车键函数void CMoiveClubDlg:OnOK()OnUpdate();/这个函数是为了处理回车键的事件,默认为关闭对话框,现在改为调用OnUpdate()函数(11) 名字查找功能:以姓名方式查找相应的记录,如不存在则提示找不到输入为空输出为空void CMoiveClubDlg:Onnamefind() / TODO: Add yo。

17、ur control notification handler code hereUpdateData();int sel=m_huiyuan.FindString(m_huiyuan.GetCurSel(),m_findwhat);/直接调用FindString函数查找并得到序号if(sel=LB_ERR)/如果找不到记录,则输入查找失败提示MessageBox(找不到记录!,提示,MB_ICONWARNING);return;m_huiyuan.SetCurSel(sel);/选中所找到的记录项OnSelchangehuiyuan();(12) DVD查找void CMoiveClubDl。

18、g:OnDVDfind() / TODO: Add your control notification handler code hereUpdateData();MoiveCard *temp=curr;/将当前结点的地址存入一个临时指针中int sel = m_huiyuan.GetCurSel();/得到当前记录的序号docurr=curr-next;/从当前记录的下一记录开始查找sel+;/序号加1if(curr=NULL)/如果已经查找到表尾curr=head-next;/将当前指针移动到头结点的下一个结点,因为头结点并不存放数据sel=0;/第一条记录的序号为0if(!(strcm。

19、p(curr-DVD1,m_findwhat)/如果匹配成功m_huiyuan.SetCurSel(sel);/选中找到的记录项OnSelchangehuiyuan();return;/已完成查找,退出函数体while(curr!=temp);/循环条件为没有遍历整个链表MessageBox(找不到记录!,提示,MB_ICONWARNING);/已经遍历整个链表但没有找到记录,输出查找失败信息return;(13) 更改名字void CMoiveClubDlg:OnChangeName() / TODO: If this is a RICHEDIT control, the control will not/ send this notification unless you override the CDialog:OnInitDialog()/ function and call CRichEditCtrl().SetEventMask()/ with the ENM_CHANGE flag ORed into the mask./ TODO: Add your control notification handler code here17 / 17文档可自由编辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值