成绩管理信息系统设计与开发Word格式文档下载.docx
《成绩管理信息系统设计与开发Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《成绩管理信息系统设计与开发Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
开发环境要求:
软件环境:
windows98/windowsXP/windows2000,VisualC++
硬件环境:
计算机(Pen4CPU,256MRAM,60G以上硬盘,输入输出设备)
技术文档要求:
按照软件工程技术文档编写要求进行。
要求流程图绘制规范,模块功能描述清晰,数据字典齐全。
实验内容:
1C++语言的顺序结构,分支结构,循环结构,函数,结构体,指针。
2数据结构中的二叉树数据组织、存贮、后序遍历及其操作
实验具体方案:
按照系统设计要求,用VisualC++设计和开发一个MFC应用程序---高级计算器,提交由需求分析;
系统设计说明(包括主菜单、子菜单、模块功能简介、数据字典、系统结构图);
系统技术文档(包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论、运行情况记录),系统使用说明书,源程序代码为附录构成的实验报告。
需求分析:
1.需求获取:
本实验要求编写一个高级计算器。
能完成双精度型数值的加、减、乘、除计算,编程中使用了动态连接库技术,能实现表达式的输入,解析与计算。
2.需求分析:
实验要求实现表达式的输入,这在MFC上通过连加不难实现,但要实现最终求解却很困难。
要解决这个问题需要把输入的操作数放进一个字符数组中,而且为了计算方便需要通过栈把这个字符数组中存放的中序表达式转化成后序表达式(后序表达式中不含左右括号,这可以大大简化结果的求解)。
而且为了继续运算,应该在每次计算完清空栈。
逻辑模型:
计算器输入的字符存放在字符数组中,将字符数组传入动态链接库已申明的函数中,将中序表达式转化成后序表达式(将后序表达式也存进一个字符数组中),将这个数组传入动态链接库中已申明的函数中,返回一结果输出在编辑框中。
3.需求规格说明书:
1)设计一个基于对话框的软件运行界面,在上面添加0——9的操作数键位。
在上面添加+、-、*、/、(、)、=、清零键位。
添加编辑框键位,并要在其上输出表达式。
2)编写算法阶段:
首先要声明一个字符数组用于存放中缀表达式(为了后面算法的编写方便和有效控制,要输入一个结束字符)。
声明一个字符类型的栈用于中缀转后缀,并把后缀表达式存放进一个字符数组。
声明一个实型栈用于计算结果。
4.需求评审:
对需求分析阶段的工作复查,可以看到需求文档满足一致性、可行性、完整性和有效性。
1.系统结构图
2.由上面的系统图可看出本系统有三大模块:
(1)输入表达式模块:
该模块的功能主要是将输入的表达式放入一个字符数组中,当然还要将表达式输入到编辑框中(这是MFC中的相关内容,主要是在输入+、-、*、/操作符后不要刷新,这样可将一个完整的表达式输入到编辑框。
(2)中序变后序模块:
该模块的功能主要是把中序表达式转化为后序表达式,在后序表达式将不存在左右括号,这样可大大简化计算结果算法的编写。
(3)计算结果模块:
该模块功能是通过后序表达式得到结果。
其主要思想是:
设置一个栈存放操作数,从左到右依次扫描后缀表达式,每读到一个操作数就将其入栈;
每读到一个运算符就从栈顶取出两个操作数施以该运算符所代表的运算操作,并把运算结果入栈;
此过程一直进行到后缀表达式读完,最后栈顶的操作数就是该后缀表达式的运算结果。
3数据词典:
看后面的软件运行图,该界面主要有以下键组成:
1——9键位:
用于输出数据。
运算符键位:
用于控制运算。
编辑框:
用于输出表达式和结果。
清零键:
用于清除编辑框中的表达式和结果。
确定键:
用于退出软件运行界面。
系统技术文档(包括系统各模块主要流程图,软件总体测试方案与测试记录、局部测试方案与测试记录、软件调试和修改记录、测试结论):
1.输入表达式模块流程图:
2.中缀转后缀模块表达式:
说明:
当遇到左右括号是算法将在此时去掉括号,当遇到结束标记时,算法在此结束处理。
3.计算结果模块:
注释:
当输入表达式错误是出现上面的运行界面。
系统运行结果和记录(软件运行界面图、软件运行数据输入界面图、软件运行结果界面图、运行记录)
1.软件运行界面图:
2.软件运行数据输入界面图:
3.软件运行结果界面图:
系统使用说明书:
本系统设计的是一个高级计算器,使用者可利用软件运行界面上的键位,依照合法的运算规则输入即可,按‘=’号键即可得到结果。
按‘确定’键退出运行界面。
实验讨论
该实验可用多种做法来完成:
如用头文件调运函数,用动态链接库技术。
采用不同的方法,在程序设计方面大同小异,但在细节处理方面会有所不同。
所以采用不同的方法会有不同的收获。
该实验的发挥空间比较大,如果时间充足,可多加一些键位,增加计算器的功能。
当然若时间不够,这些方面可留待以后做,这也可以实践所学知识和提高实际编程能力。
C++程序设计设计性实验收获与总结
通过本系统的设计,我掌握了很多MFC的相关知识,这对我以后的学习大有帮助。
但我同时也发现了自己知识面的狭窄,以至解决问题是捉襟见肘。
而且我发现通过对这种小规模软件的编写,可以让自己学到的知识得到很好的实践和巩固,也可以大大扩展自己的知识面,让自己学到很多有用的知识。
参考文献
数据结构(C++版):
李根强主编,中国水利水电出版社出版。
数据结构(C版):
朱站立编著,西安交通大学出版社出版。
附录:
源程序代码
1.表达式存储及转化代码:
#include<
iostream.h>
string.h>
#include<
malloc.h>
#defineelemtypechar
constmaxsize=1000;
elemtypes1[maxsize],s2[maxsize];
//分别存放中缀表达式,后缀表达式
classseqstact
{
public:
elemtypestact[maxsize];
inttop;
voidinistact()
{
top=-1;
}
voidpush(elemtypex)
top++;
stact[top]=x;
voidpop()
top--;
elemtypegettop()
returnstact[top];
boolempty()
if(top==-1)returntrue;
elsereturnfalse;
intoper(elemtypeop)
switch(op)
{
case'
+'
:
case'
-'
return1;
*'
/'
return2;
('
return0;
default:
return0;
}
voidchange()
elemtypey,ch;
top=0;
inistact();
push('
='
);
inti=0,j=0;
ch=s1[i];
while(ch!
if(ch=='
'
)ch=s1[++i];
elseif(ch=='
{
push(ch);
ch=s1[++i];
//进栈
}
elseif(ch=='
)'
y=gettop();
while(y!
{
s2[j++]=y;
s2[j++]='
;
pop();
y=gettop();
}
pop();
ch=s1[++i];
elseif((ch=='
)||(ch=='
))
if(oper(ch)>
oper(y))
{
push(ch);
ch=s1[++i];
else
else
while(((ch>
0'
)&
&
(ch<
9'
))||(ch=='
.'
s2[j++]=ch;
s2[j++]='
y=gettop();
while(y!
s2[j++]=y;
s2[j++]='
pop();
y=gettop();
s2[j]='
};
//类定义结束
classSeqstact
doublestact[maxsize];
voidpush(doublex)
doublegettop()
doublecalculate(chars1[])
seqstacts;
elemtypech;
//inti=0;
//cout<
<
"
请输入中缀表达式('
结束):
endl;
/*cin>
>
ch;
while(ch!
s1[i++]=ch;
cin>
}*/
//s1[i]='
/*cout<
中缀表达式:
for(intj=0;
j<
i;
j++)
cout<
s1[j];
cout<
*/
s.change();
后缀表达式为:
j=0;
s2;
计算结果"
Seqstactq;
q.inistact();
doublex,y,z;
intk=0;
ch=s2[k];