已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
建筑工地信息管理系统,班级:191114姓名:刘倩学号:20111003428,课程设计目的: MFC编程实践是学习C+语言的一个重要环节,为提高学生的程序设计能力,通过课堂和上机实践使学生的程序设计能力有一个上升的台阶。通过前面的学习过程以及练习之后能够解决一些简单的实际问题。,设计要求建立一个基于对话框的MFC程序,要求要有如下内容:建筑工地 (建筑工地号码,建筑工地名称,建筑工地所在地,建筑工地状态)功能:1、首先建立一个相关的对话框,然后添加数据,并进行删除、更新操作,最后进行查询操作。2、查询操作需要根据建筑工地的名称进行查询。,操作步骤:(1)首先建立一个基于对话框的MFC程序,这个时候将会出现一个对话框,此时,可以根据设计的要求来创建对话框。根据要求创建对话框如下:,这个时候我们开始点击建立类向导,然后点击Member Variables,这个时候开始给各个成员编辑一个成员变量名和变量类型,以及给相应的函数和列表框赋予函数名,同时增加一个对建筑工地名进行编辑的CEdit类型的变量m_IDC_Name。内容如下所示:,当将建立建立类向导中的一切都准备好后,此时,我们返回到.cpp程序和.h文件中去,我们发现,在类向导中定义的一些控件的对象的声明,系统已经直接给我们加到程序中去了。然后我们只需要关注使相应的功能得以实现的函数及其声明即可。,函数声明在ConStru.h中如下所示:afx_msg void OnUpdate(); /更新函数的声明afx_msg void OnAdd();/增加函数的声明afx_msg void OnSelchangeNamelist();/列表框函数的声明afx_msg void OnDelete();/删除函数的声明afx_msg void OnClose();/关闭函数的声明afx_msg void OnAbout();/About对话框函数的声明afx_msg void OnSearchbyname();/查找函数的声明,定义一个结构体,用来实现数据的输入、输出和保存,同时定义两个指向结构体本身的指针,建立链表。struct ConStruCardchar number20;char name20;char city20;char state10;struct ConStruCard *prev;/前一结点struct ConStruCard *next;/下一结点;/定义结构体,static struct ConStruCard* head,*last,*curr;/定义全局变量:头指针、尾指针、当前指针,void LoadInfo(struct ConStruCard*);void DataInit();/函数声明FILE* fp;/声明文件指针int iCount;/总的结点数bool bNewFile;/文件属性:是否为新文件?第一次运行程序bool bFileEmpty;/文件属性:文件是否为空bool bFileModified;/文件属性:文件是否被修改 将以上内容定义到ConStruDlg这个类中去,实现部分函数的声明和对文件属性的声明等,声明之后,我们到ConStru.cpp中实现相应的功能。,当我们进入到ConStru.cpp源文件中去时,由于程序的需要必须加入 #include string.h#include malloc.h这两个头文件,同时也要对各种操作进行相应的函数声明ON_BN_CLICKED(IDC_UPDATE, OnUpdate)ON_BN_CLICKED(IDC_ADD, OnAdd)ON_LBN_SELCHANGE(IDC_NAMELIST,OnSelchangeNamelist)ON_BN_CLICKED(IDC_DELETE, OnDelete)ON_WM_CLOSE()ON_BN_CLICKED(IDC_ABOUT, OnAbout)ON_BN_CLICKED(IDC_SEARCHBYNAME, OnSearchbyname),DataInit();/调用数据初始化函数(自定义函数)功能:完成从文件读取数据的操作,如果文件不存在则只建立链表输入输出均为空。,该函数函数体如下:void CConStruDlg:DataInit()struct ConStruCard *p,*q;/定义两个临时指针bFileEmpty=FALSE;/文件默认为不空bNewFile=FALSE;/假定不是新文件bFileModified=FALSE;/初始化文件属性p=head=(struct ConStruCard*)malloc(sizeof(struct ConStruCard);head-prev=head-next=NULL;/建立头结点(不存放数据)if(!(fp=fopen(data.dat,r)/试图用只读方式打开数据文件,如文件不存在则fp返回NULL值bNewFile=TRUE;/文件不存在,则为新文件bFileEmpty=TRUE;/文件当前状态是空的,第一次运行程序iCount=0;/总结点数为0,注意不包括头结点,头结点不用来存放数据last=head;/尾结点此时就是头结点,if(!bFileEmpty)/因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表fread(/改变尾指针的指向,if(iCount=0)/如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE);GetDlgItem(IDC_DELETE)-EnableWindow(FALSE);GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(FALSE);GetDlgItem(IDC_NUMBER)-EnableWindow(FALSE);GetDlgItem(IDC_NAME)-EnableWindow(FALSE);GetDlgItem(IDC_CITY)-EnableWindow(FALSE);GetDlgItem(IDC_STATE)-EnableWindow(FALSE);else m_NameList.SetCurSel(0);/默认选中第一条记录OnSelchangeNamelist();,函数原型:void OnAdd()功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新工地名”,其它项为空输入输出均为空,只是一个过程.void CConStruDlg:OnAdd() / TODO: Add your control notification handler code hereGetDlgItem(IDC_NUMBER)-EnableWindow(TRUE);GetDlgItem(IDC_NAME)-EnableWindow(TRUE);GetDlgItem(IDC_CITY)-EnableWindow(TRUE);GetDlgItem(IDC_STATE)-EnableWindow(TRUE);/启用文本框控件curr=(struct ConStruCard*)malloc(sizeof(struct ConStruCard);/将 当前指针指向新增加的结点上strcpy(curr-name,新工地名);strcpy(curr-number,);strcpy(curr-city,);strcpy(curr-state,);/将默认的数据复制到当前结点m_NameList.InsertString(m_NameList.GetCount(),新工地名);m_NameList.SetCurSel(m_NameList.GetCount()-1);/在列表框中插入新工地名并选中,iCount+;/总结点数加1 curr-next=NULL;curr-prev=last;last-next=curr;last=curr;/在尾结点后插入新结点bFileEmpty=FALSE;bFileModified=TRUE;/修改文件属性,文件被修改且不为空GetDlgItem(IDC_UPDATE)-EnableWindow(TRUE);GetDlgItem(IDC_DELETE)-EnableWindow(TRUE);GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(TRUE);/启用更新、删除、查找按钮控件LoadInfo(curr);/在文本框显示个人信息,函数原型:void DataUpdate()功能:完成修改当前记录的操作输入输出均为空,只是一个过程.,void CConStruDlg:OnUpdate() / TODO: Add your control notification handler code hereUpdateData();int sel = m_NameList.GetCurSel();/得到所选择记录在列表框中的序号if(m_name=)MessageBox(必须输入工地名!,错误!,MB_ICONERROR);m_IDC_Name.SetFocus();return;/如果姓名输入框为空则发生错误strcpy(curr-name,m_name);strcpy(curr-number,m_number);strcpy(curr-city,m_city);strcpy(curr-state,m_state);/将更新的数据从文本输入框复制到结点m_NameList.DeleteString(sel);m_NameList.InsertString(sel,m_name);m_NameList.SetCurSel(sel);/更新列表框中的名称m_ButtonAdd.SetFocus();/将焦点设置到“添加”按钮上,函数原型:void OnSelchangeNamelist()功能:当列表框的选择项改变时,移动指针到指定结点的位置输入输出均为空,只是一个过程.,void CConStruDlg:OnSelchangeNamelist() / TODO: Add your control notification handler code hereint sel = m_NameList.GetCurSel();/获得当前的选择curr=head-next;for(int i=0;inext;/移动当前指针到选定结点LoadInfo(curr);/更新界面,函数原型:void LoadInfo(ConStruCard *p)功能:将结点中存放的数据信息显示在文本框中输入为当前结点的地址值输出为空,void CConStruDlg:LoadInfo(ConStruCard *p)m_name=p-name;m_number=p-number;m_city=p-city;m_state=p-state;UpdateData(FALSE);m_IDC_Name.SetFocus();m_IDC_Name.SetSel(0,20,TRUE);,函数原型:void OnDelete()功能:将当前结点删除输入为空输出为空,void CConStruDlg:OnDelete() / TODO: Add your control notification handler code hereint sel = m_NameList.GetCurSel();/得到所选记录在列表框中的序号struct ConStruCard *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_NameList.DeleteString(sel);/在列表框中删除记录,if (m_NameList.GetCount()=0) GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE);GetDlgItem(IDC_DELETE)-EnableWindow(FALSE);GetDlgItem(IDC_SEARCHBYNAME)-EnableWindow(FALSE);GetDlgItem(IDC_NAME)-EnableWindow(FALSE);GetDlgItem(IDC_NUMBER)-EnableWindow(FALSE);GetDlgItem(IDC_CITY)-EnableWindow(FALSE);GetDlgItem(IDC_STATE)-EnableWindow(FALSE);bFileEmpty=TRUE;bFileModified=TRUE;return;/如果剩除到一条记录都不剩,则需要禁用一些控件以免发生误操作,同时修改文件属性if (selm_NameList.GetCount()m_NameList.SetCurSel(sel);elsem_NameList.SetCurSel(sel-1);/将焦点定义在列表中上一条记录OnSelchangeNamelist();,函数原型:void OnClose()功能:程序结束时将链表中的数据保存到文件输入为空输出为空,void CConStruDlg:OnClose() / TODO: Add your message handler code here and/or call defaultstruct ConStruCard *p;/声明一个临时指针变量if(!bNewFile),fwrite(,void CConStruDlg:OnAbout() / TODO: Ad
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学科交叉视角下的面试技巧
- 心理健康教育与学生管理
- 2026年二级建造师之二建水利水电实务考试题库300道附参考答案(研优卷)
- 2025上海复旦大学总务处招聘医疗卫生人员1名考试历年真题汇编带答案解析
- 2025年哈尔滨道里区工程社区卫生服务中心招聘笔试备考题库附答案解析
- 2026年国网安徽省电力有限公司高校毕业生招聘考试(第一批)备考题库带答案解析
- 2025智慧环卫行业市场现状供需分析及投资评估规划分析研究报告
- 2025年民法试题及答案题库
- 2025智慧物流行业市场供需现状及投资发展前景规划分析研究报告
- 2025智慧水利行业投资风险管理发展分析研究报告
- 员工信息登记表(标准版)
- 小学生必背古诗“飞花令”100令(低年级版)
- 上海市建设工程项目管理机构管理人员情况表
- 医疗器械经营企业培训记录
- 10KV开关柜验收报告
- 2023年中国-东盟博览会秘书处招聘笔试备考题库及答案解析
- 矿产资源与国家安全【备课精讲精研+能力拓展提升】 高二地理下学期 课件(湘教版2019选择性必修3)
- GB/T 21566-2008危险品爆炸品摩擦感度试验方法
- GB/T 10205-2009磷酸一铵、磷酸二铵
- 颈椎DR摄影技术-
- 自动化导论全套课件
评论
0/150
提交评论