软件工程导论实验报告

来源:互联网 发布:知乎我是歌手林俊杰 编辑:程序博客网 时间:2024/05/15 07:36

 

学    院 __新媒体学院___     专    业 __网络工程___

班    级 ____  1班 _______  学    号  120708132            姓    名  虞邦瑞        _  同组同学王立华         指导教师__徐强______      

 

 


 

1.题目:简单计算器(逆波兰)

2.设计任务、要求

制作一个软件,采用逆波兰原理进行计算。

具体功能要求如下:

    1.输入初始计算表达式

···2.根据初始计算表达式输出逆波兰表达式;

···3.根据逆波兰表达式计算其值并输出;

 

 

 

3.软件环境及工具

系统开发环境的选择对于系统的建立来说至关重要,它将决定着系统开发工作量的大小,系统的性能特点以及系统今后维护工作的难易等。因此在开发系统之前,需要根据对系统所采用的技术、实现功能的评估,进行选择开发环境

 

3.1系统开发平台

系统开硬件环境:一般微机CPU: 奔III以上即可;内存:256M;硬盘:40G。

软件环境:操作系统Windows XP/2000 Professional;。

Web服务器:Apache TomCat 5.5, TomCat提供HTTP协议的服务。

3.2 开发工具

Vc2010版本.c#

 

4.系统的规划

 

4.1系统功能设计

逆波兰计算器,主要是方便师生进行对逆波兰的理解及迅速得知普通式子的逆波兰表达式及值。

打开界面,进入计算器界面,

相应步骤:

 

 

1)在第一个文本框内点击按钮输入原始表达式

 

 

 

点击“计算”,输出逆波兰及计算值。

2) 

4.2功能模块图

 

5 详细设计

51

设计窗口,从工具箱中拖出控件,编辑以下form

52

       对各个按钮输入进行功能设置----整体

public partialclass Form1 : Form

    {

        publicForm1()

        {

            InitializeComponent();

        }

 

        privatevoid Form1_Load(objectsender,EventArgs e)

        {

            textBox1.Text = null;

        }

 

        privatevoid one_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '1';

        }

 

        privatevoid two_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '2';

        }

 

        privatevoid three_button_Click(object sender,EventArgs e)

        {

            textBox1.Text += '3';

        }

 

        private voidfour_button_Click(object sender, EventArgs e)

        {

            textBox1.Text += '4';

        }

 

        privatevoid five_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '5';

        }

 

        privatevoid six_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '6';

        }

 

        privatevoid sevevn_button_Click(object sender,EventArgse)

        {

            textBox1.Text += '7';

        }

 

        privatevoid eight_button_Click(object sender,EventArgs e)

        {

            textBox1.Text += '8';

        }

 

        privatevoid nine_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '9';

        }

 

        privatevoid zero_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '0';

        }

 

        privatevoid left_button_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '(';

        }

 

        privatevoid right_button_Click(object sender,EventArgs e)

        {

            textBox1.Text += ')';

        }

 

        privatevoid jia_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '+';

        }

 

        privatevoid jian_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '-';

        }

 

        privatevoid chen_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '*';

        }

 

        privatevoid chu_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '/';

        }

        privatevoid button1_Click(objectsender,EventArgs e)

        {

            textBox1.Text += '#';

        }

        privatevoid clear_Click(objectsender,EventArgs e)

        {

            textBox1.Text = null;

            textBox2.Text = null;

            textBox3.Text = null;

        }

        privatevoid back_Click(objectsender,EventArgs e)

        {

           textBox1.Text=textBox1.Text.Substring(0,textBox1.TextLength-1);

        }

 

        public static int i = 0, t =0;

        public static string[] ex = new string[100];         //逆波兰存放数组¦

 

        privatevoid result_Click(objectsender,EventArgs e)

        {

            string[]str = new string[100];                 //str最初数组¦

 

            for(i = 0; i < textBox1.Text.Length ; i++)

            {

                str[i] =textBox1.Text.Substring(i, 1);

            }

            decider=newdecide();

            ex = r.method2(str,ex);             //调用求逆波兰的方法

 

            textBox2.Text = null;               //输出逆波兰

            {

                foreach (string qin ex)           

                textBox2.Text += q;

                textBox2.Text += ' ';

            }

      

 

            methodp=newmethod();              //调用计算方法

            textBox3.Text = Convert.ToString(p.method1(ex));

        }//???¡§¤?¨ª¦Ì

    }

 

5.3

              调用的具体转化为逆波兰的方法

class decide

    {

        public string[] method2(string[]str, string[] ex)

        {

            char[]s1 = new char[100];           //充当临时栈存放非数字字符¤?

            int i,j = 0,t=0;

            charch;

            ch = Convert.ToChar(str[i = 0]);        //ch赋初值¦Ì

            while(ch != '#')                     //-环判断至#结束º?

            {

 

 

 

                switch(ch)

                {

                    case'(':

                        s1[j] = ch;

                        break;

                    case')':

 

                        while (s1[j] !='(')

                        {

                            ex[t] = Convert.ToString(s1[j]);

                            t++; j--;

                        }

                        j--;

                        break;

                    case'*':

                    case'/':

                        j++;

                        s1[j] = ch;

                        break;

                    case'+':

                    case'-':

                        if (s1[j] =='+' || s1[j] == '-' || s1[j] =='*'|| s1[j] == '/')

                        {

                            ex[t] = Convert.ToString(s1[j]); t++;

                            s1[j] = ch;

                        }

                        else

                        {

                            j++;

                            s1[j] = ch;

                        }

                        break;

 

                    default:

                        if (ch >='0' && ch<= '9')

                        {

                            if (i > 0 &&Convert.ToChar(str[i- 1]) >= '0' && Convert.ToChar(str[i - 1]) <= '9')

                            {

                                t--;

                                ex[t] = Convert.ToString(Convert.ToInt32(ex[t])* 10 +Convert.ToInt32(str[i]));

                                t++;

                            }

                            else

                            {

                                ex[t] = Convert.ToString(ch);

                                t++;

                            }

                        }

                        break;

                }

 

 

 

                i++;

                ch = Convert.ToChar(str[i]);

            }

 

            while(j >= 0)                   //䨮¢¨´º¡À?D¨¢¨??º¡ê?Ì?Á?¤?

            {

                ex[t] = Convert.ToString(s1[j]);

                t++;

                j--;

            }

            returnex;

        }//¤?¤¡§êoÁa¡¥a?¡§¤?

    }

5.4

              用到的+、—、*/方法

class usemethod

    {

        public double addm(double a,double b)

        {

            returna + b;

        }//方法加减乘除

        public double minus(doublea, double b)

        {

            returna - b;

        }

        public double ride(double a,double b)

        {

            returna * b;

        }

        public double eliminate(doublea, double b)

        {

            returna / b;

        }

}

5.5)

判断并处理运算符

class fourmth

    {

        usemethoduse=newusemethod();

        public double panduan(charch, double a, doubleb)

        {

            if(ch == '+')                                            

            {

                returnuse.addm(a,b);

            }

            elseif (ch =='-')

            {

                returnuse.minus(a,b);

            }

            elseif (ch =='*')

            {

                returnuse.ride(a,b);

            }

            elseif (ch =='/')

            {

                if(b == 0)

                {

                    MessageBox.Show("错误:分母为0"); 

                }

                returnuse.eliminate(a,b);

            }

            elsereturn -1;

        }

    }

 

5.6)

方法:计算逆波兰值

  class method

    {

        public double method1(string[]ex)

        {

            double[]a = new double[100];

            inti,k = 0;

            charch;

            fourmthme=newfourmth();

 

            for(i = 0; i < ex.Length;i++)

            {

 

                if(ex[i] ==null)break;

                if(ex[i].Length > 1 ||Convert.ToChar(ex[i])>= '0' && Convert.ToChar(ex[i]) <= '9')//D?ºyÁ?Á?¤?ä?

                {

                    k++;

                    a[k] = Convert.ToInt32(ex[i]);

                }

                else

                {

                    ch = Convert.ToChar(ex[i]);

                    k--;

                    a[k]=me.panduan(ch, a[k], a[k +1]);      //̡®?panduan¤?¤¡§

                }                     

            }

            returna[1];  //¤¦Ì?¦Ì          

        }

    }

  

6、测试分析

  6.1)  测试结果及运行结果

  6.2   系统bugs声明

设计时未考虑输入为小数的状态。

7、参考文献

C#.NET 3.0第一步:适用VisualStudio 2005Visual Studio 2008 /周礼著

8、附录全部文件

       已分享至群共享。

9 课程设计心得与总结

课程设计是培养学生综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。随着科学技术的发展,当今计算机存活在世界的每一个角落。因此,作为二十一世纪的大学生来说,掌握计算机开发技术是非常正要的。

理论到实践,可以学到很多很多的东西,同时不仅可以巩固以前所学过的知识,还学到了许多书本上没有的知识。通过这次课程设计,我懂得了理论与实践相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实践相结合起来,从理论中得出结论,才能真正的提高自己的实际动手能力和独立思考的能力。在编程过程中,可谓是苦难重重,看着零错误,却无法运行的痛苦。看着快成功时,却又冒出了新的问题的焦虑,用组员的话说‘头发都快掉光,寿命即将减少!’但是,看着一步步接近目的的喜悦感,促使着我们继续前进。通过参考文献,百度和在老师同学们的帮助下,完成了此次的任务。组员之间相互配合,共同合作,讨论,体会到合作的意义与快乐。‘你不是一个人在战斗!’这也不仅仅只是去完成一个任务,而是团队的合作。

在这次任务里,查缺补漏,基础的不扎实是导致一大部分问题的原因所在。

总体而言:享受于过程,满意于结果。