C语言电影俱乐部管理程序Word格式文档下载.docx
- 文档编号:22661629
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:155.28KB
C语言电影俱乐部管理程序Word格式文档下载.docx
《C语言电影俱乐部管理程序Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言电影俱乐部管理程序Word格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
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<
iCount;
i++)//正序建立链表
{
q=(structMoiveCard*)malloc(sizeof(structMoiveCard));
fread(q,sizeof(structMoiveCard),1,fp);
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)->
GetDlgItem(IDC_namefind)->
GetDlgItem(IDC_DVDfind)->
GetDlgItem(IDC_name)->
GetDlgItem(IDC_DVD1)->
GetDlgItem(IDC_DVD2)->
GetDlgItem(IDC_DVD3)->
GetDlgItem(IDC_huifei)->
else
m_huiyuan.SetCurSel(0);
//默认选中第一条记录
OnSelchangehuiyuan();
}
(2)添加函数
功能:
在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新名字”,其它项为空输入输出均为空,只是一个过程.
Onadd()
//TODO:
Addyourcontrolnotificationhandlercodehere
GetDlgItem(IDC_name)->
EnableWindow(TRUE);
GetDlgItem(IDC_DVD1)->
GetDlgItem(IDC_DVD2)->
GetDlgItem(IDC_huifei)->
GetDlgItem(IDC_DVD3)->
//启用文本框控件
curr=(structMoiveCard*)malloc(sizeof(structMoiveCard));
//将当前指针指向新增加的结点上
strcpy(curr->
name,"
新名字"
);
DVD1,"
"
DVD2,"
huifei,"
DVD3,"
//将默认的数据复制到当前结点
m_huiyuan.InsertString(m_huiyuan.GetCount(),"
m_huiyuan.SetCurSel(m_huiyuan.GetCount()-1);
//在列表框中插入新名字并选中
iCount++;
//总结点数加1
curr->
prev=last;
last->
next=curr;
last=curr;
//在尾结点后插入新结点
b;
//修改文件属性,文件被修改且不为空
GetDlgItem(IDC_UPDATE)->
GetDlgItem(IDC_delete)->
GetDlgItem(IDC_namefind)->
GetDlgItem(IDC_DVDfind)->
//启用更新、删除、查找按钮控件
LoadInfo(curr);
//在文本框显示个人信息
(3)函数更新
功能:
完成修改当前记录的操作
OnUpdate()
UpdateData();
intsel=m_huiyuan.GetCurSel();
//得到所选择记录在列表框中的序号
if(m_name=="
)
MessageBox("
必须键入姓名!
错误!
MB_ICONERROR);
m_IDC_Name.SetFocus();
return;
//如果姓名输入框为空则发生错误
name,m_name);
DVD1,m_DVD1);
DVD2,m_DVD2);
huifei,m_huifei);
DVD3,m_DVD3);
//将更新的数据从文本输入框复制到结点
m_huiyuan.DeleteString(sel);
m_huiyuan.InsertString(sel,m_name);
m_huiyuan.SetCurSel(sel);
//更新列表框中的姓名
m_add.SetFocus();
//将焦点设置到“添加”按钮上
(4)变更列表框选项
当列表框的选择项改变时,移动指针到指定结点的位置
OnSelchangehuiyuan()
//获得当前的选择
curr=head->
for(inti=0;
sel;
i++)
curr=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.SetFocus();
m_IDC_Name.SetSel(0,20,TRUE);
(6)删除函数
Ondelete()
//得到所选记录在列表框中的序号
structMoiveCard*p=curr;
//新建一个临时指针变量
if(MessageBox("
确定要删除吗?
警告"
MB_ICONQUESTION|MB_OKCANCEL)==IDCANCEL)
//弹出确认对话框
iCount--;
//总结点数减1
//删除当前结点
p->
prev->
next=p->
if((p->
next)!
=NULL)//注意删除结点为末尾结点时的操作!
p->
next->
prev=p->
prev;
else
last=p->
free(p);
//释放内存空间
//在列表框中删除记录
if(m_huiyuan.GetCount()==0){
OnClear();
b;
//如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性
if(sel<
m_huiyuan.GetCount())
m_huiyuan.SetCurSel(sel);
m_huiyuan.SetCurSel(sel-1);
//将焦点定义在列表中上一条记录
OnSelchangehuiyuan();
(7)清楚函数
OnClear()
m_name="
;
m_DVD1="
m_DVD2="
m_DVD3="
m_huifei="
(8)程序结束时将链表中的数据保存到文件函数
OnClose()
Addyourmessagehandlercodehereand/orcalldefault
structMoiveCard*p;
//声明一个临时指针变量
if((!
bNew)//根据文件属性来决定是否要删除原文件
fclose(fp);
DeleteFile("
b)//根据文件是否为空来决定是否要新建文件并写入数据
if(!
w+"
)))//如果创建新文件失败
MessageBox("
I'
msorrybuttheprogramencounteraproblem!
ERROR"
return;
fwrite(&
//将总结点数写入文件
fseek(fp,sizeof(int),0);
//移动文件指针
p=head->
//将临时指针变量移动来头结点的下一个结点,也就是第一个存放数据的结点
while(p)//当结点不为空
fwrite(p,sizeof(structMoiveCard),1,fp);
//将数据写入文件并将指针后移
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)//如果找不到记录,则输入查找失败提示
找不到记录!
提示"
MB_ICONWARNING);
//选中所找到的记录项
(12)DVD查找
OnDVDfind()
MoiveCard*temp=curr;
//将当前结点的地址存入一个临时指针中
//得到当前记录的序号
do
//从当前记录的下一记录开始查找
sel++;
//序号加1
if(curr==NULL)//如果已经查找到表尾
curr=head->
//将当前指针移动到头结点的下一个结点,因为头结点并不存放数据
sel=0;
//第一条记录的序号为0
(strcmp(curr->
DVD1,m_findwhat)))//如果匹配成功
m_huiyuan.SetCurSel(sel);
//选中找到的记录项
OnSelchangehuiyuan();
//已完成查找,退出函数体
}while(curr!
=temp);
//循环条件为没有遍历整个链表
MessageBox("
//已经遍历整个链表但没有找到记录,输出查找失败信息
return;
(13)更改名字
OnChangeName()
IfthisisaRICHEDITcontrol,thecontrolwillnot
//sendthisnotificationunlessyouoverridetheCDialog:
OnInitDialog()
//functionandcallCRichEditCtrl().SetEventMask()
//withtheENM_CHANGEflagORedintothemask.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 电影 俱乐部 管理程序