C语言电影俱乐部管理程序Word格式.docx

上传人:b****1 文档编号:1220846 上传时间:2023-04-30 格式:DOCX 页数:14 大小:155.49KB
下载 相关 举报
C语言电影俱乐部管理程序Word格式.docx_第1页
第1页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第2页
第2页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第3页
第3页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第4页
第4页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第5页
第5页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第6页
第6页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第7页
第7页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第8页
第8页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第9页
第9页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第10页
第10页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第11页
第11页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第12页
第12页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第13页
第13页 / 共14页
C语言电影俱乐部管理程序Word格式.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

C语言电影俱乐部管理程序Word格式.docx

《C语言电影俱乐部管理程序Word格式.docx》由会员分享,可在线阅读,更多相关《C语言电影俱乐部管理程序Word格式.docx(14页珍藏版)》请在冰点文库上搜索。

C语言电影俱乐部管理程序Word格式.docx

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.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2