




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、建筑工地信息管理系统,班级:191114 姓名:刘倩 学号:20111003428,课程设计目的: MFC编程实践是学习C+语言的一个重要环节,为提高学生的程序设计能力,通过课堂和上机实践使学生的程序设计能力有一个上升的台阶。通过前面的学习过程以及练习之后能够解决一些简单的实际问题。,设计要求 建立一个基于对话框的MFC程序,要求要有如下内容: 建筑工地 (建筑工地号码,建筑工地名称,建筑工地所在地,建筑工地状态) 功能: 1、首先建立一个相关的对话框,然后添加数据,并进行删除、更新操作,最后进行查询操作。 2、查询操作需要根据建筑工地的名称进行查询。,操作步骤: (1)首先建立一个基于对话框
2、的MFC程序,这个时候将会出现一个对话框,此时,可以根据设计的要求来创建对话框。根据要求创建对话框如下:,这个时候我们开始点击建立类向导,然后点击Member Variables,这个时候开始给各个成员编辑一个成员变量名和变量类型,以及给相应的函数和列表框赋予函数名,同时增加一个对建筑工地名进行编辑的CEdit类型的变量m_IDC_Name。内容如下所示:,当将建立建立类向导中的一切都准备好后,此时,我们返回到.cpp程序和.h文件中去,我们发现,在类向导中定义的一些控件的对象的声明,系统已经直接给我们加到程序中去了。然后我们只需要关注使相应的功能得以实现的函数及其声明即可。,函数声明在Con
3、Stru.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();/查找函数的声明,定义一个结构体,用来实现数据的输入、输出和保存,同时定义两个指向结构体本
4、身的指针,建立链表。 struct ConStruCard char 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 i
5、Count;/总的结点数 bool bNewFile;/文件属性:是否为新文件?第一次运行程序 bool bFileEmpty;/文件属性:文件是否为空 bool bFileModified;/文件属性:文件是否被修改 将以上内容定义到ConStruDlg这个类中去,实现部分函数的声明和对文件属性的声明等,声明之后,我们到ConStru.cpp中实现相应的功能。,当我们进入到ConStru.cpp源文件中去时,由于程序的需要必须加入 #include string.h #include malloc.h这两个头文件,同时也要对各种操作进行相应的函数声明 ON_BN_CLICKED(IDC_UP
6、DATE, 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();/调用数据初始化函数(自定义函数) 功能:完成从文件读取数据的操作,如果文件不存在则只建立链表输入输出均为空。,该函数函
7、数体如下: 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返
8、回NULL值 bNewFile=TRUE;/文件不存在,则为新文件 bFileEmpty=TRUE;/文件当前状态是空的,第一次运行程序 iCount=0;/总结点数为0,注意不包括头结点,头结点不用来存放数据 last=head;/尾结点此时就是头结点 ,if(!bFileEmpty)/因为文件默认为不空,如果文件已存在,则从文件中读取数据建立链表 fread(/改变尾指针的指向 ,if(iCount=0)/如果名单为空,禁用更新、删除和查找等按钮,以免发生误操作导致错误 GetDlgItem(IDC_UPDATE)-EnableWindow(FALSE); GetDlgItem(IDC_D
9、ELETE)-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);/默认选中第一条记录 OnSelchange
10、Namelist(); ,函数原型:void OnAdd() 功能:在链表的结尾添加一条记录,并将默认将新记录的姓名置为“新工地名”,其它项为空 输入输出均为空,只是一个过程. void CConStruDlg:OnAdd() / TODO: Add your control notification handler code here GetDlgItem(IDC_NUMBER)-EnableWindow(TRUE); GetDlgItem(IDC_NAME)-EnableWindow(TRUE); GetDlgItem(IDC_CITY)-EnableWindow(TRUE); GetDl
11、gItem(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_N
12、ameList.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)-Enable
13、Window(TRUE);/启用更新、删除、查找按钮控件 LoadInfo(curr);/在文本框显示个人信息 ,函数原型:void DataUpdate() 功能:完成修改当前记录的操作 输入输出均为空,只是一个过程.,void CConStruDlg:OnUpdate() / TODO: Add your control notification handler code here UpdateData(); int sel = m_NameList.GetCurSel();/得到所选择记录在列表框中的序号 if(m_name=) MessageBox(必须输入工地名!,错误!,MB_IC
14、ONERROR); 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.
15、SetFocus();/将焦点设置到“添加”按钮上 ,函数原型:void OnSelchangeNamelist() 功能:当列表框的选择项改变时,移动指针到指定结点的位置输入输出均为空,只是一个过程.,void CConStruDlg:OnSelchangeNamelist() / TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();/获得当前的选择 curr=head-next; for(int i=0;inext;/移动当前指针到选定结点 LoadInfo(curr)
16、;/更新界面 ,函数原型: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() 功能:将当前结点删除 输入为空
17、输出为空,void CConStruDlg:OnDelete() / TODO: Add your control notification handler code here int sel = m_NameList.GetCurSel();/得到所选记录在列表框中的序号 struct ConStruCard *p=curr;/新建一个临时指针变量 if (MessageBox(确定要删除吗?,警 告”,MB_ICONQUESTION|MB_OKCANCEL) = IDCANCEL) return;/弹出确认对话框 iCount-;/总结点数减1 /删除当前结点 p-prev-next=p-
18、next; if(p-next)!=NULL)/注意删除结点为末尾结点时的操作! p-next-prev=p-prev; else last=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)
19、; 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.Set
20、CurSel(sel); else m_NameList.SetCurSel(sel-1);/将焦点定义在列表中上一条记录 OnSelchangeNamelist(); ,函数原型:void OnClose() 功能:程序结束时将链表中的数据保存到文件 输入为空 输出为空,void CConStruDlg:OnClose() / TODO: Add your message handler code here and/or call default struct ConStruCard *p;/声明一个临时指针变量 if(!bNewFile) ,fwrite( ,void CConStruDlg:OnAbout() / TODO: A
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高效能电子导热片企业制定与实施新质生产力项目商业计划书
- 高效能户外UPS系统升级企业制定与实施新质生产力项目商业计划书
- 电子保单管理系统行业深度调研及发展项目商业计划书
- 高钙低糖奶行业跨境出海项目商业计划书
- 工业互联网平台边缘计算硬件架构在智能安防监控中的应用报告
- DB62T 4229-2020 旱地大豆全膜微垄沟播栽培技术规程
- 山西省拟收储中国联合网络通信有限公司山西省分公司地块土壤污染状况第一阶段调查报告
- DB62T 4191-2020 地理标志产品 正宁大葱
- 九年义务教育课程计划与社会责任教育
- DB62T 4051-2019 河西地区露地菠菜种子生产技术规程
- 毕业设计基于单片机的发动机转速电控系统程序设计及仿真
- 统借统还资金分拨合同
- 地铁运营施工负责人考试题库
- GB/T 708-2006冷轧钢板和钢带的尺寸、外形、重量及允许偏差
- 故宫的资料简介(标准版)
- 全国高中语文优质课一等奖《雷雨》 课件
- 固定资产和无形资产培训课程课件
- 工程结算审计管理办法
- 重大事项和重要工作备案登记表
- 北京版二年级英语下册(全套)课件
- 检验科生化SOP文件
评论
0/150
提交评论