C++2课程设计Word文件下载.docx
- 文档编号:21827786
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:21
- 大小:470.87KB
C++2课程设计Word文件下载.docx
《C++2课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《C++2课程设计Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。
B:
C:
科学计算器
a:
OnButton0()~OnButton9()
b:
OnButtonpoint()、OnButtonsign()
c:
OnButtonadd()、OnButtonsub()、OnButtonpur()、OnButtondiv()、OnButtonper()
d:
OnButtonequal()
e:
OnButtoninver()、OnButtonsqrt()
增加数学函数头文件#include"
math.h"
f:
OnButtonC()、OnButtonCE()、OnButtonBackspace()
g:
OnButtonMC()、OnButtonMR()、OnButtonMS()、OnButtonM()
D:
OnAdd()添加
OnChange()修改
OnDele()删除
ClassCstudent
2、设计思想
响应按键:
将输入密码更新显示,验证密码并输出正确与否,最后显示验证结果
响应等号:
将输入数据更新显示,用switch判断运算类型进行相应运算,最后更新数据即显示运算结果
a:
数值
小数符号键的响应即m_point置值;
符号键的响应直接取原数值的负数;
判断是否为小数(即m_point=1小数,0为整数),为整数直接m_data=m_data*10+X及当前数值*10加上输入的值;
为小数时m_data=m_data+X*1.0/m_count;
,用m_count处理小数点后的数值,m_i自加标记输入数值,用于下面Backspace的处理。
b:
运算
一类为直接运算(inver倒数、sqrt开方),头文件加上数学函数,对数值直接处理;
一类为间接运算(add加、sub减、pur乘、div除、per任意次方),用m_opt标记运算类型送OnButtonequal()再用switch分支进行相应运算,显示更新数值。
其中对相应标记数值恢复初值,以便下个数值的输入。
c:
清除
包括C(清除所有数据)、CE(清除当前数值)、Backspace(逐个删除):
C(清除所有数据)直接将当前数值及上一个数值清零;
CE(清除当前数值)直接将当前数值清零;
Backspace(逐个删除)switch判断是否为整数:
①为整数:
将数值强制转换为整形数值,再除以10;
②为小数:
将数值乘以10的n次方(n为小数位数)再同整数一样处理,然后再除以10的m次方(m为n减去删除位数);
最后将对相应标记数值恢复初值,以便下个数值的输入。
更新显示数据。
d:
记忆
包括MC(清除存储数值)、MR(显示存储数值)、MS(存储当前数值)、M+(将存储数值与当前数值相加):
设m_mem为记忆数据,即用于存储保存的数值,初值为0;
MC(清除存储数值)直接令m_men=0;
MR(显示存储数值)直接令m_data=m_men;
MS(存储当前数值)直接令m_men=m_data;
M+(将存储数值与当前数值相加):
)直接令m_data=m_mem+m_data;
更新显示数据。
调用添加对话框,进行数据录入,在指针数组进行存储,学生数加1,显示数据。
选中修改要数据,调用修改对话框,输入修改数据,按下修改对话框里修改键完成数据修改存储,显示数据。
选中要删除的数据,按下删除键,直接将该数据删除,将该数据后数组内容全部向前移动一个单位,取代删除数据的位置,数组最后一位赋空,学生数自减1,显示更新数据。
创建Cstudents类(用于数据的存储调用),定义变量及构造函数,完成构造函数的定义。
三、详细设计
1:
响应按键
UpdateData(true);
显示输入密码
if(m_edit1=="
fyy0304"
)m_edit2="
Correct"
;
验证密码并输出正确与否
elsem_edit2="
Incorrect"
UpdateData(false);
显示验证结果
2:
响应等号
显示输入数据
switch(m_radio1)判断运算类型
{
case0:
m_edit3=m_edit1+m_edit2;
break;
进行相应计算
case1:
m_edit3=m_edit1-m_edit2;
case2:
m_edit3=m_edit1*m_edit2;
case3:
m_edit3=m_edit1/m_edit2;
}
UpdateData(false);
显示计算结果
3:
数字输入:
if(m_point)
{m_data=m_data+X*1.0/m_count;
小数
m_count*=10;
m_i++;
elsem_data=m_data*10+X;
整数
小数点:
m_point=1;
负数:
m_data=-m_data;
运算类型:
m_next=m_data;
m_data=0;
存储当前数值,并清零用于下个数置输入
m_opt=X;
标记运算符类型
m_point=0;
m_count=10;
恢复初始值,用于下个数值输入
计算
switch(m_opt)识别运算符类型,进入X分支运算
m_data=m_next+m_data;
break;
加
m_data=m_next-m_data;
减
m_data=m_next*m_data;
乘
m_data=m_next/m_data;
除
case4:
m_data=pow(m_next,m_data);
任意次方
}
m_count=10;
C(清除所有数据)、
m_data=0;
m_next=0;
清除所有数据
CE(清除当前数值)
清除当前数据
Backspace(逐个删除)
switch(m_point)判断是否为小数
{
m_data=(int)m_data/10;
为整数
m_data=m_data*pow(10,m_i);
为小数
m_data=m_data/pow(10,m_i-1);
m_i--;
标识号自减1,转向下个上个输入数字
m_count/=10;
m_count除以10,小数位减一位
if(m_i==0)标识号为0即输入的数字清空
{m_point=0;
}}此时小数号表示数置0
MC(清除存储数值)m_mem=0.0;
MR(显示存储数值)m_data=m_mem;
MS(存储当前数值)m_mem=m_data;
M+(将存储数值与当前数值相加)m_data=m_mem+m_data;
4:
CAddDlgdlg;
调用添加对话框
if(dlg.DoModal()==IDOK)
{m_students[m_count]=newCStudent;
为m_student[X]对象动态分配内存区域
*m_students[m_count]=dlg.m_stu;
将该学号学生数组指针指向对话框里的学生对象
m_count++;
}学生数加1
UpdateDataList();
显示数据
CChangedlg;
调用修改对话框
if(IDOK==dlg.DoModal())
intnItem=-1,i=0;
chara[20];
nItem=m_list.GetNextItem(nItem,LVNI_SELECTED);
选中整行
m_list.GetItemText(nItem,0,a,20);
CStrings(a);
while(m_students[i])
{
if(m_students[i]->
m_number==s)存在该学号学生
{m_students[i]->
m_class=dlg.m_class;
……break;
}修改信息
i++;
}}
……选中整行
CStrings(a);
定义字符型数组
while(m_students[i])判断学生是否存在
if(m_students[i]->
{deletem_students[i];
}直接删除
i++;
指向下个数据
for(intk=i;
k<
m_count-1;
k++)将i及i后数组数据向前移动一个单位
m_students[k]=m_students[kj+1];
m_students[k]=NULL;
最后一个置空,完成数据删除
m_count--;
学生数减一
classCStudent
{public:
CStringm_name;
……定义字符型变量
intm_sex;
定义整型变量
……
voidsetstudent(CString,CString,int,CString,CString,CString);
定义无返回值带参构造函数
};
构造函数
VoidCStudent:
:
setstudent(CStringmunber……,intm_sex)定义带参的构造函数
{
this->
m_number=m_num;
……
if(m_sex)this->
m_sex="
女"
elsethis->
男"
四、调试结果
(针对每个功能设计测试方案,包括输入数据、输出数据)
针对每个功能设计一组(最少一个)测试用例,用来验证程序的正确性。
1:
密码验证:
a:
输入正确的密码
b:
输入错误的密码
2:
A:
加
B:
减
C:
乘
D:
除
3:
7开平方
2^3,2的3次方
8的倒数
MS储存当前数组3
E:
MR显示储存数组3
F:
M+,当前数值5+储存数值
G:
清空储存数值
H:
CE前12+7
CE后12+8
J:
BackSpace前
后
添加学生信息
添加后
修改学生信息
修改后
学生信息删除
删除后
五、课题总结
遇到的问题及解决办法
科学计算器设计
主要的问题是Backspace控键的设计,首先是小数数据与整数数据:
开始的时候将整数直接强制转换为整型数据然后除10;
小数数据则是先乘以m_count后同整数一样处理,后再除以m_count乘以10的n次方(n为删除位数),这样理论上是可以的,但是运行的结果只有整数是正确的,小数删除则是乱码。
逐步测试才知道在小数位的删除m_count此时是随机值故会出现运行结果与预想结果不符情况,后用m_i代替m_count作用,m_i初始值为0在小数数据输入是每按下m_i自加1,删除时小数数据先乘以10的m_i次方后同整数一样处理,后再除以10的m_i-1次方,m_i再自减1完成一次的删除,m_i再用于下次的删除,这样才解决了问题。
其次多次运行产生乱码,这个问题是后来多次不合常理的运行才出现的,鉴于前面的教训,感觉上是m_count和m_point的问题,在每一个运算类型选择是都把这两个数恢复初值,问题便迎刃而解。
学生信息管理系统设计
这个设计过程问题倒是挺多的,出现最多的是头文件问题,每新增一个类就要在相应的地方加上相应的头文件;
还有就是数据的定义和初始化特别是自定义的数据没有初始化就产生乱码,根源还不好找;
还有就是对话框的调用,在主对话框里要用控键来响应另一个对话框本来只是以为CAddDlgdlg;
用这样就能直接调用了,开始时候老师出现错误,原是头文件问题,处理了后还是没办法弹出下一个对话框,看了下笔记查了资料才知道这个只是对话框显示函数,整个过程还没真正调用对话框,用了if(IDOK==dlg.DoModal())的判断响应才实现对话框调用。
还有就是比如有3个对象要删除,任意删除后几个对象都可以实现单个删除,但是换成删除第一个对象的时候却将所有数据删除了,本来控键响应的判断我是用if(if(IDOK))来实现的,修改控键也是这样的但是修改这边也出现了问题,这样只能修改第一个对象剩下的对象都没办法修改。
后来换成while也是一样的问题,经过逐步测试发现在执行过程中if(m_students[i]->
m_number==s)指令停止在学生对象的查找中,也就是在这里出现了卡壳,没办法进行下一条指令即i++没有执行,后来用break来跳出if语句,就是让if语句一执行玩久跳出删除或修改执行i++,移动指针,这样问题才解决了。
2:
有何收获
整个过程中熟悉了MFC基于对话框的使用,充分感受到面向对象程序设计的强大功能。
首先使用MFC向导自动生成Windows应用程序的基本框架,我们只要用类向导生成应用程序的类、消息处理、数据处理、定义控键的属性、事件和方法,最后把程序要求的功能在相应的响应函数里编辑即可。
熟悉掌握了类得创建及对象的处理调用;
熟悉掌握了面向对象数据在MFC下的添加,修改,删除;
学会应用面向对象构造函数的调用,以及主函数中用switch函数做多分支选择,先进行类得封装,再对具体对象进行处理及应用类与类之间的继承关系,充分利用面向对象数据处理优势大大简化程序代码;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 课程设计