电气信息学院 实训报告
课 程 名 称: 软件项目实训 年级/专业/班: 过程自动化 学 生 姓 名: 学 号: 实训成绩:
学习态度及平技术水平与实创新(5) 时成绩(30) 际能力(20) 报告撰写质量(45) 总 分(100) 实 训 题 目: 个人信息获取
指导教师签名: 年 月 日
实训报告 实训时间 6.11-6.24 地点 L4B305 实训学时 2周 提高面向对象的可视化编程能力 实训 提高合作协调能力 目的 掌握Visual C++可视化程序界面设计的基本方法 题目概述:我所做的题目为“个人信息获取系统”,在对话框界面上填写个人的相关信息,填写完毕后可以在特定区域显示所填写的个人信息。 编程实现功能简介:“个人信息获取系统”可以在对话框界面上填写个人的相关信息,填写完毕后,可以通过特定的按键获取填写的个人信息。该系统可以用于个人的电子档案管理,或者略作改变后,可以应用于在线问卷调查或者在线考试和测试系统。 例如:某协会需要整理各个入会会员的个人信息,给出了这个对话框类型的电子表实训 格,要求会员们在话框上填写自己的姓名、年龄、性别、籍贯、学历、出生日期、内容 爱好等信息,填写完毕后由特定的按键即可获取会员们各自填写的信息。 要求编程程序实现如下功能: 1)信息录入:按对话框上面的要求填写会员各自的相关的信息; 2)获取信息:点击特定的按键获取填写的信息。 实训分工安排 本程序由个人单独完成 完成后汇总进行统一测试与更正 使用Visual C++6.0实现用户界面 实 训 要 求 方正电脑 使用实训室及 主要设施设备 实 训 1 完成了此次实训内容 成 2 完成了实训报告 果 3 提高了自己的合作能力以及编程能力,磨练了自己的耐心。 实训报告
1 引言
1.1系统概述
我所做的题目为“个人信息获取系统”,在对话框界面上填写个人的相关信息,填写完毕后可以在特定区域显示所填写的个人信息,个人信息包括姓名、籍贯、现居住地、性别、民族、学历、宗教信仰、国籍、出生年月日、年龄等。
1.2 需求分析
“个人信息获取系统”可以在对话框界面上填写个人的相关信息,填写完毕后,可以通过特定的按键获取填写的个人信息。该系统可以用于个人的电子档案管理,或者略作改变后,可以应用于在线问卷调查或者在线考试和测试系统。例如,申请贷款填写个人信息时,可以先在类似这个“个人信息获取系统”的对话框上填写贷款人的相关信息,然后通过特定的按键从系统中导出所填写的个人信息表并打印。用于问卷调查时,可以将问题都预先设定在对话框界面上,填写完毕后,由工作人员在后台获取并统计调查结果。用于在线测试时,与问卷调查类似,即可将试题预先写在对话框界面上,答题者答完后由批阅者在后台获取考生答案并进行评分。由于在线问卷调查系统和在线测试系统在编程实现统计和评分功能时,需要考虑各个题目或者选项之间的关联,这使得后台程序代码量太多,比较繁琐,但其实现原理与个人信息获取系统一样,故本次实训我仅选取了个人信息获取系统作为代表。
1.3 运行环境
本次实训使用Visual C++ 6.0 软件,故要求操作系统要与该软件兼容,故可在WindowsXP系统下运行。
2 概要设计
2.1 设计思路
设计个人信息获取系统时,建立对话框,然后使用相应的控件及其之间的
消息映射来实现各信息的获取。添加控件时,姓名、籍贯、现居住地等信息使用静态编辑框控件,性别、宗教、国籍、学历等信息使用单选按钮控件,出生日期、
实训报告
年龄、民族、血型等信息使用组合框控件,爱好使用复选按钮控件,获取结果使用按钮控件,获取的消息映射在编辑框内。添加完各个控件后,设置各个控件的属性及其关联变量并添加各个控件的消息响应函数,最后编译、连接、运行并观察和分析运行结果。
2.2 模块功能介绍
个人信息获取系统根据各个控件消息响应函数的类型可以分为如下几个模块:静态编辑框模块、单选按钮模块、组合框模块、复选按钮模块和按钮模块。其中,静态编辑框模块用于获取姓名、籍贯、现居住地等信息并将这些信息映射到显示获取结果的编辑框内,单选按钮模块用于各个单选按钮的初始化,组合框模块用于获取各个选项,复选按钮模块用于设置其选中与否的标志,按钮模块用于触发并获取对话框中填写的个人信息或退出系统。
2.3 模块结构图
单选按钮 初始化后由用户改变其选项 单 选 编辑框 复选按钮 根据标志显示选中与否 按 钮 显示各个模块的信息 组合框 获取各个选项 触 发 以便后台方查询 静态编辑框 填写相关信息
2.4 程序流程图
定义的各变量及编辑框内显示内容初始化
单选按钮初始化
复选按钮选中与否标志设置
“获取结果”按钮触发消息响应函数
编辑框显示结果 实训报告
结束 2.5 功能设计分工
由于本班人数为单数,不能保证整个班里的人都是两人一组,故本次设计各个模块均由我一人完成,无分工细则。
3 详细设计
3.1设计步骤
1.启动VisualC++6.0,利用MFC向导建立一个基于对话框的应用程序:
ButtonTest。
2.在控制工具条上依次将静态组框控件、静态编辑框控件、单选控件、组合框控件、复选控件 拖入对话框界面上合适的位置,原界面上默认的“取消”标题改为“退出”,利用属性对话框将“确认”按钮改为“获取结果”,ID号改为ID_BUTTONSHOW,设置各个控件的属性并添加各个控件的成员变量,如图:
实训报告
3.双击对话框模版界面上每一个复选按钮,打开类向导页面添加每个复选按钮的消息响应函数。如图:
实训报告
添加消息响应函数:
添加的代码如下:
//复选按钮选中与否逻辑值设置,选中逻辑值为TRUE,否则逻辑值为FALSE。 void CButtonTestDlg::OnCheck1() {
if(m_A1)
m_A1=false;
else m_A1=true;// “喜欢的球类运动”选项m_A1- m_A6选中与否标志设
//选中为TRUE,没选中为FALSR
}
void CButtonTestDlg::OnCheck2() {
if(m_A2)
m_A2=false; else m_A2=true; }
实训报告
void CButtonTestDlg::OnCheck3() {
if(m_A3)
m_A3=false;
else m_A3=true; }
void CButtonTestDlg::OnCheck4() {
if(m_A4)
m_A4=false;
else m_A4=true; }
void CButtonTestDlg::OnCheck20() {
if(m_A5)
m_A5=false; else m_A5=true; }
void CButtonTestDlg::OnCheck21() {
if(m_A6)
m_A6=false; else m_A6=true; }
void CButtonTestDlg::OnCheck5() {
if(m_B1)
m_B1=false;
else m_B1=true;// “喜欢的水果”选项m_B1- m_B6选中与否标志设
//选中为TRUE,没选中为FALSR
}
void CButtonTestDlg::OnCheck6() {
if(m_B2)
m_B2=false;
else m_B2=true; }
void CButtonTestDlg::OnCheck7() {
if(m_B3)
m_B3=false;
else m_B3=true; }
void CButtonTestDlg::OnCheck8()
实训报告
{
if(m_B4)
m_B4=false;
else m_B4=true; }
void CButtonTestDlg::OnCheck9() {
if(m_B5)
m_B5=false;
else m_B5=true; }
void CButtonTestDlg::OnCheck22() {
if(m_B6)
m_B6=false; else m_B6=true; }
void CButtonTestDlg::OnCheck11() {
if(m_C1)
m_C1=false;
else m_C1=true; //“喜欢的颜色”选项m_C1- m_C9选中与否标志设
//选中为TRUE,没选中为FALSR
}
void CButtonTestDlg::OnCheck12() {
if(m_C2)
m_C2=false; else m_C2=true; }
void CButtonTestDlg::OnCheck13() {
if(m_C3)
m_C3=false; else m_C3=true; }
void CButtonTestDlg::OnCheck14() {
if(m_C4)
m_C4=false; else m_C4=true; }
void CButtonTestDlg::OnCheck15()
实训报告
{
if(m_C5)
m_C5=false; else m_C5=true; }
void CButtonTestDlg::OnCheck16() {
if(m_C6)
m_C6=false; else m_C6=true; }
void CButtonTestDlg::OnCheck17() {
if(m_C7)
m_C7=false;
else m_C7=true; }
void CButtonTestDlg::OnCheck18() {
if(m_C8)
m_C8=false; else m_C8=true; }
void CButtonTestDlg::OnCheck19() {
if(m_C9)
m_C9=false; else m_C9=true; }
4. 对单选按钮控件进行初始化。将项目工作区窗口切换到ClassView页面,双击CButtonTestDlg类下的OnInitDialog()函数,添加代码如下: BOOL CButtonTestDlg::OnInitDialog() {
CDialog::OnInitDialog();
CheckRadioButton(IDC_RADIO1,IDC_RADIO4,IDC_RADIO1);
//设置第1个为选中
CheckRadioButton(IDC_RADIO5,IDC_RADIO6,IDC_RADIO5);
//设置第5个为选中
CheckRadioButton(IDC_RADIO7,IDC_RADIO20,IDC_RADIO7);
//设置第7个为选中
CheckRadioButton(IDC_RADIO21,IDC_RADIO27,IDC_RADIO27);
//设置第27个为选中
CheckRadioButton(IDC_RADIO28,IDC_RADIO34,IDC_RADIO30);
实训报告
}
//设置第30个为选中
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) {
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) {
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX, strAboutMenu); } }
SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon
return TRUE; // return TRUE unless you set the focus to a control
5.添加按钮的消息响应代码。进入ClassWizard页面,在ClaasName列表框中选择CButtonTestDlg,在ObjectIDs列表中选择IDC_BUTTONSHOW,在Messages列表中选择BN_CLICKED单击消息,添加“获取结果”的消息响应函数,添加代码如下:
void CButtonTestDlg::OnButtonshow() {
CString strCtrl; CString str;
UpdateData(TRUE);
m_result=\"姓名:\"+m_name+\" 籍贯:\"+m_hometown+\" 现居住地:
\"+m_address;//显示姓名、籍贯、现居住地 m_result+=\" 出生日期:\";
m_year.GetLBText (m_year.GetCurSel(),str); m_result+=str;
m_result+=\"年\";//显示年
m_month.GetLBText (m_month.GetCurSel(),str); m_result+=str;
m_result+=\"月\";//显示月
m_date.GetLBText (m_date.GetCurSel(),str); m_result+=str;
m_result+=\"日\";//显示日 m_result+=\"; 生肖:\";
m_animalsign.GetLBText (m_animalsign.GetCurSel(),str); m_result+=str;//显示生肖
实训报告
m_result+=\"; 星座:\";
m_constellation.GetLBText (m_constellation.GetCurSel(),str); m_result+=str;//显示星座 m_result+=\"; 民族:\";
m_nation.GetLBText (m_nation.GetCurSel(),str); m_result+=str;//显示民族 m_result+=\"; 血型:\";
m_bloodtype.GetLBText (m_bloodtype.GetCurSel(),str); m_result+=str;//显示血型
m_result+=\"; 婚姻状况:\";
m_marriage.GetLBText (m_marriage.GetCurSel(),str); m_result+=str;//显示婚姻状况 m_result+=\"; 年龄:\";
m_age.GetLBText (m_age.GetCurSel(),str); m_result+=str;//显示婚姻状况
m_result+=\"; 性别:\";
UINT nID=GetCheckedRadioButton(IDC_RADIO5,IDC_RADIO6);//显示性别 GetDlgItemText(nID,strCtrl); m_result+=strCtrl;
m_result+=\"; 种族:\";
nID=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO4);//显示种族 GetDlgItemText(nID,strCtrl);
m_result+=strCtrl;
m_result+=\"; 国籍:\";
nID=GetCheckedRadioButton(IDC_RADIO7,IDC_RADIO20);//显示国籍 GetDlgItemText(nID,strCtrl);
m_result+=strCtrl;
m_result+=\"; 宗教:\";
nID=GetCheckedRadioButton(IDC_RADIO21,IDC_RADIO27);//显示宗教信仰 GetDlgItemText(nID,strCtrl);
m_result+=strCtrl;
m_result+=\"; 学历:\";
nID=GetCheckedRadioButton(IDC_RADIO28,IDC_RADIO34);//显示学历
GetDlgItemText(nID,strCtrl);
m_result+=strCtrl+\"; 喜欢的球类运动:\"; if(m_A1) m_result+=\" 篮球\"; if(m_A2) m_result+=\" 足球\"; if(m_A3) m_result+=\" 乒乓球\"; if(m_A4) m_result+=\" 网球\";
if(m_A5) m_result+=\" 羽毛球\";
if(m_A6) m_result+=\" 排球\";//显示喜欢的球类运动 m_result+=\"; 喜欢的水果:\"; if(m_B1) m_result+=\" 苹果\"; if(m_B2) m_result+=\" 橘子\";
实训报告
if(m_B3) m_result+=\" 香蕉\"; if(m_B4) m_result+=\" 芒果\"; if(m_B5) m_result+=\" 桃子\";
if(m_B6) m_result+=\" 西瓜\"; //显示喜欢的水果 m_result+=\"; 喜欢的颜色:\"; if(m_C1) m_result+=\" 红色\"; if(m_C2) m_result+=\" 黄色\"; if(m_C3) m_result+=\" 蓝色\"; if(m_C4) m_result+=\" 橙色\"; if(m_C5) m_result+=\" 紫色\";
if(m_C6) m_result+=\" 青色\"; if(m_C7) m_result+=\" 黑色\"; if(m_C8) m_result+=\" 白色\";
if(m_C9) m_result+=\" 绿色\";//显示喜欢颜色 UpdateData(FALSE); }
6.编辑框显示内容初始化。在CButtonTestDlg::CButtonTestDlg(CWnd* pParent /*=NULL*/)中添加内容如下:
CButtonTestDlg::CButtonTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CButtonTestDlg::IDD, pParent) {
//{{AFX_DATA_INIT(CButtonTestDlg)
„„
m_result = _T(\"提示:按“获取信息”键获取您的相关信息!\"); m_name = _T(\"请输入您的名字\");
m_hometown = _T(\"请输入您的籍贯\"); m_address = _T(\"请输入您的住址\"); „„ }
4 调试分析
4.1调试遇到问题及解决方法
1.编译时,显示头文件无法打开,选择“组建”菜单,选择“全部重建”后,编译、连接成功。
2.点击“运行”快捷键时,电脑死机,程序运行环境无响应,保存当前所有文件后,同时按Ctl、Alt和Delete三个键,点击“任务管理器”,选择“结束任务”关闭当前运行环境后,重新启动ViualC++6.0环境并打开该工程,重新调
实训报告
试。
5 测试
5.1程序运行结果
1.运行前:
2.运行结果:
实训报告
3.输入相关个人信息,点击“获取信息”得
实训报告
实训报告
心得与体会
本次软件实训历时两周,在这两周里,我对Visual C++面向对象程序设计经历了从陌生到初步了解,从未知的疑惑到了解后的兴致勃勃。Visual C++面向对象程序设计不同于C语言程序设计,却与C语言程序设计在很多地方类似。C语言是面向过程的程序设计,用C语言编写程序实现特定的功能,绝大多数函数是由用户自己编写,然后再编译运行,而其运行环境为DOS环境。Visual C++是面向对象的程序设计,用Visual C++编写程序实现特定的功能,很多功能都可以通过函数调用和消息映射实现而不需要完全由用户编写,我们调用函数时,只需要对相关的函数有一定的了解即可。
Visual C++面向对象程序设计可以由用户自己设计所需的界面,然后通过界面上相关的控件的触发完成相应的功能。所以整个设计过程相对来说,我感觉并不十分沉重,但是也不能说Visual C++面向对象程序设计是一个简单的活动,因为我们目前涉及只是它的冰山一角。
Visual C++程序设计的内容不仅包含编程还有界面设计,这与以前学过的C
实训报告
语言和汇编语言有很大的不同。因此,我们在编程的过程中,不仅要思考如何编程实现自己的设计,还要思考如何让自己设计的界面更加美观得体。所以这次设计既提高了我们的编程能力,磨练了我们调试查错和改错的耐心,也提高了我们的界面设计水平。
由于Visual C++程序设计和C语言程序设计在很多方面是类似的,所以,我们在设计的过程中自然而然地会通过类比和归纳来套用以前学过的程序设计方法。这使得我们在学习新的知识的同时加深了对以前知识的理解。
实训报告
指导教师评语
指导教师签名: 年 月 日
实训报告
参考文献
[1] 皮德常.c++程序设计教程.机械工业出版社.2009
[2] 彭玉华.Visual C++面向对象程序设计实验教程.武汉大学出版社.2007 [3]孔令德.Visual C++面向对象程序设计与实验指导.兵器工业出版社.2004 [4]刘瑞新. Visual C++面向对象程序设计实验教程.机械工业出版社.2004
附 录
(程序源代码打包发送到老师的邮箱。)
因篇幅问题不能全部显示,请点此查看更多更全内容