成绩管理信息系统设计与开发Word下载.docx
- 文档编号:6877730
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:27
- 大小:21.60KB
成绩管理信息系统设计与开发Word下载.docx
《成绩管理信息系统设计与开发Word下载.docx》由会员分享,可在线阅读,更多相关《成绩管理信息系统设计与开发Word下载.docx(27页珍藏版)》请在冰点文库上搜索。
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];
if((ch>
{
x=ch-48;
ch=s2[++k];
while(ch!
if(ch!
y=ch-48;
x=x*10+y;
ch=s2[++k];
intt=1;
do
{
y=ch-48;
x=x+y/pow(10,t);
t++;
ch=s2[++k];
}while(ch!
q.push(x);
elseif((ch=='
x=q.gettop();
q.pop();
y=q.gettop();
)z=x+y;
elseif(ch=='
)z=y-x;
)z=y*x;
if(x!
=0.0)z=y/x;
elsecout<
error!
q.push(z);
returnq.gettop();
}
//清零函数
voidclear()
inti=0;
for(i=0;
i<
maxsize;
i++)
s1[i]='
\0'
s.top=-1;
q.top=-1;
char*trans(char*bb,doublex)
inti;
sprintf(bb,"
%f"
x);
i=int(strlen(bb))-1;
while(i&
bb[i]=='
bb[i]='
i--;
if(bb[i]=='
returnbb;
2.MFC界面程序:
//文亮Dlg.cpp:
implementationfile
//
#include"
stdafx.h"
文亮.h"
文亮Dlg.h"
表达式计算》.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
cmath>
intdecimal,sign;
inti=0;
/////////////////////////////////////////////////////////////////////////////
//CAboutDlgdialogusedforAppAbout
classCAboutDlg:
publicCDialog
CAboutDlg();
//DialogData
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
CAboutDlg:
CAboutDlg():
CDialog(CAboutDlg:
IDD)
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
voidCAboutDlg:
DoDataExchange(CDataExchange*pDX)
CDialog:
DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//Nomessagehandlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CMyDlgdialog
CMyDlg:
CMyDlg(CWnd*pParent/*=NULL*/)
:
CDialog(CMyDlg:
IDD,pParent)
//{{AFX_DATA_INIT(CMyDlg)
m_edit1=_T("
//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32
m_hIcon=AfxGetApp()->
LoadIcon(IDR_MAINFRAME);
voidCMyDlg:
//{{AFX_DATA_MAP(CMyDlg)
DDX_Text(pDX,IDC_EDIT1,m_edit1);
BEGIN_MESSAGE_MAP(CMyDlg,CDialog)
//{{AFX_MSG_MAP(CMyDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON10,OnButton10)
ON_BN_CLICKED(IDC_BUTTON7,OnButton7)
ON_BN_CLICKED(IDC_BUTTON8,OnButton8)
ON_BN_CLICKED(IDC_BUTTON9,OnButton9)
ON_BN_CLICKED(IDC_BUTTON4,OnButton4)
ON_BN_CLICKED(IDC_BUTTON5,OnButton5)
ON_BN_CLICKED(IDC_BUTTON6,OnButton6)
ON_BN_CLICKED(IDC_BUTTON1,OnButton1)
ON_BN_CLICKED(IDC_BUTTON2,OnButton2)
ON_BN_CLICKED(IDC_BUTTON3,OnButton3)
ON_BN_CLICKED(IDC_BUTTON11,OnButton11)
ON_BN_CLICKED(IDC_BUTTON13,OnButton13)
ON_BN_CLICKED(IDC_BUTTON14,OnButton14)
ON_BN_CLICKED(IDC_BUTTON15,OnButton15)
ON_BN_CLICKED(IDC_BUTTON16,OnButton16)
ON_BN_CLICKED(IDC_BUTTON12,OnButton12)
ON_BN_CLICKED(IDC_BUTTON17,OnButton17)
ON_BN_CLICKED(IDC_BUTTON18,OnButton18)
ON_BN_CLICKED(IDC_BUTTON19,OnButton19)
ON_EN_CHANGE(IDC_EDIT1,OnChangeEdit1)
//CMyDlgmessagehandlers
BOOLCMyDlg:
OnInitDialog()
OnInitDialog();
//Add"
About..."
menuitemtosystemmenu.
//IDM_ABOUTBOXmustbeinthesystemcommandrange.
ASSERT((IDM_ABOUTBOX&
0xFFF0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<
0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!
=NULL)
CStringstrAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if(!
strAboutMenu.IsEmpty())
pSysMenu->
AppendMenu(MF_SEPARATOR);
AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
//Settheiconforthisdialog.Theframeworkdoesthisautomatically
//whentheapplication'
smainwindowisnotadialog
SetIcon(m_hIcon,TRUE);
//Setbigicon
SetIcon(m_hIcon,FALSE);
//Setsmallicon
//TODO:
Addextrainitializationhere
returnTRUE;
//returnTRUEunlessyousetthefocustoacontrol
OnSysCommand(UINTnID,LPARAMlParam)
if((nID&
0xFFF0)==IDM_ABOUTBOX)
CAboutDlgdlgAbout;
dlgAbout.DoModal();
else
CDialog:
OnSysCommand(nID,lParam);
//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecode
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 成绩 管理信息系统 设计 开发