云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx

上传人:b****2 文档编号:2585663 上传时间:2023-05-04 格式:DOCX 页数:40 大小:301.02KB
下载 相关 举报
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第1页
第1页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第2页
第2页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第3页
第3页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第4页
第4页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第5页
第5页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第6页
第6页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第7页
第7页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第8页
第8页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第9页
第9页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第10页
第10页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第11页
第11页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第12页
第12页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第13页
第13页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第14页
第14页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第15页
第15页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第16页
第16页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第17页
第17页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第18页
第18页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第19页
第19页 / 共40页
云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx_第20页
第20页 / 共40页
亲,该文档总共40页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx

《云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx》由会员分享,可在线阅读,更多相关《云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx(40页珍藏版)》请在冰点文库上搜索。

云南大学软件学院数据结构实验一实验报告桌面复数计算器.docx

云南大学软件学院数据结构实验一实验报告桌面复数计算器

 

(本实验项目方案受“教育部人才培养模式创新实验区(X3108005)”项目资助)

实验难度:

A□B□C□

序号

学号

姓名

成绩

1

2

3

指导教师

(签名)

学  期:

  

任课教师:

  

实验题目:

实验一,设计桌面计算器

小组长:

   

联系电话:

 

电子邮件:

 

完成提交时间:

年月日

 

云南大学软件学院2010学年秋季学期

《数据结构实验》成绩考核表

学号:

姓名:

本人承担角色:

课题分析,算法设计,程序编写,后期调试,完成实验报告

评分项目

评分指标

分值

得分

实验构思(10%)

1.实验目的明确

5

2.实验内容理解透彻、对实验所涉及到的知识点分析到位

5

实验设计(15%)

1.有对基本数据结构的抽象数据类型定义

5

2.实验方案设计完整,数据结构、算法选择合理

5

3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图

5

实验实现(25%)

1.代码编写规范、风格统一、注释清楚易读

5

2.程序运行正常,测试结果正确

15

3.界面友好、易于操作、有较强的容错性

5

实验报告撰写(10%)

1.内容详实无缺漏,文字流畅、图表清楚

5

2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考

5

个人工作量(30%)

1.个人完成工作量

15

2.个人技术水平

10

3.团队合作精神

5

实验运作(10%)

1.有一定用户群

5

2.应用前景分析

5

综合得分:

(满分100分)

指导教师:

年月日

(注:

此表在难度为C时使用,每个成员一份。

云南大学软件学院2010学年秋季学期

《数据结构实验》成绩考核表

学号:

姓名:

本人承担角色:

课题分析,算法设计,后期调试

评分项目

评分指标

分值

得分

实验构思(10%)

1.实验目的明确

5

2.实验内容理解透彻、对实验所涉及到的知识点分析到位

5

实验设计(15%)

1.有对基本数据结构的抽象数据类型定义

5

2.实验方案设计完整,数据结构、算法选择合理

5

3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图

5

实验实现(25%)

1.代码编写规范、风格统一、注释清楚易读

5

2.程序运行正常,测试结果正确

15

3.界面友好、易于操作、有较强的容错性

5

实验报告撰写(10%)

1.内容详实无缺漏,文字流畅、图表清楚

5

2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考

5

个人工作量(30%)

1.个人完成工作量

15

2.个人技术水平

10

3.团队合作精神

5

实验运作(10%)

1.有一定用户群

5

2.应用前景分析

5

综合得分:

(满分100分)

指导教师:

年月日

(注:

此表在难度为C时使用,每个成员一份。

云南大学软件学院2010学年秋季学期

《数据结构实验》成绩考核表

学号:

姓名:

本人承担角色:

课题分析,算法设计,后期调试

评分项目

评分指标

分值

得分

实验构思(10%)

1.实验目的明确

5

2.实验内容理解透彻、对实验所涉及到的知识点分析到位

5

实验设计(15%)

1.有对基本数据结构的抽象数据类型定义

5

2.实验方案设计完整,数据结构、算法选择合理

5

3.算法结构和程序功能模块之间逻辑清晰、有相应的流程图

5

实验实现(25%)

1.代码编写规范、风格统一、注释清楚易读

5

2.程序运行正常,测试结果正确

15

3.界面友好、易于操作、有较强的容错性

5

实验报告撰写(10%)

1.内容详实无缺漏,文字流畅、图表清楚

5

2.实验结果分析客观、详细,实验体会真实可信,对原实验方案的改进和对实验内容的发散性思考

5

个人工作量(30%)

1.个人完成工作量

15

2.个人技术水平

10

3.团队合作精神

5

实验运作(10%)

1.有一定用户群

5

2.应用前景分析

5

综合得分:

(满分100分)

指导教师:

年月日

(注:

此表在难度为C时使用,每个成员一份。

(下面的内容由学生填写,格式统一为,字体:

楷体,行距:

固定行距18,字号:

小四,个人报告按下面每一项的百分比打分。

难度A满分70分,难度B满分90分)

一、【实验构思(Conceive)】(10%)

(本部分应包括:

描述实验实现的基本思路,包括所用到的离散数学、工程数学、程序设计、算法等相关知识)

本实验要求制作一个桌面计算器,要求能进行实数和虚数的混合运算,首先要解决如何处理四则运算的算法,并进行正确无误的数据存储以及传递。

本程序使用两个变量来保存一个复数,分别存储实部和虚部,利用四个子程序事先加减乘除四则运算,最后在主程序中调用并显示结果。

利用程序设计的相关知识:

贯彻设计程序所必需的五大步骤,目标分析->设计算法->程序编写->后期调试->售后服务的流程完成这个项目。

利用算法设计相关知识:

该算法满足有穷性,确定性·,可行性,有0个或多个输入,有一个或多个输出输出,以及正确性,可读性,健壮性的特性。

数学基础知识:

利用高中所学之复数的基本运算的知识。

离散数学相关知识:

正确合理的适用与或非之间的关系,进行程序分支判断,保证程序正常进行。

二、【实验设计(Design)】(20%)

(本部分应包括:

抽象数据类型的功能规格说明、主程序模块、各子程序模块的伪码说明,主程序模块与各子程序模块间的调用关系)

本程序使用C#进行编写,全部程序一共22个对象,3个类:

窗口类,按钮类,文本框类:

窗口类:

用于实现整个程序窗口的初始化,窗口重绘,程序变量的初始化,以及最后窗口的销毁。

按钮类:

用于对各种触发事件以予正确的响应,实现程序的友好界面。

文本框类:

能对部分触发事件进行响应,并正确接受以及传递数据作为内部程序的参数,也能提供给用户检查输入的值是否正确,并以予更正的机会。

当程序运行后窗口类生成的窗口对个值进行初始化,当用户按下各个功能键时,分别调用各个触发事件函数,当用户按下计算按钮时,计算机根据判断符的取值来进行选择具体调用那一个函数进行计算。

各个触发时间函数伪代码:

按钮0:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个0,结束子程序;

按钮1:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个1,结束子程序;

按钮2:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个2,结束子程序;

按钮3:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个3,结束子程序;

按钮4:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个4,结束子程序;

按钮5:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个5,结束子程序;

按钮6:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个6,结束子程序;

按钮7:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个7,结束子程序;

按钮8:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个8,结束子程序;

按钮9:

判断输入指针指向那一个文本框;

判断目标文本框里面是否为0,若是不做任何反应,结束子程序;

判断操作符是不是为=,若是,清楚目标文本框里面的所有数据,结束子程序;

向目标文本框的字符串中的末尾添加一个9,结束子程序;

输入实部按钮:

将输入指针指向实部文本框;

令输入实部按钮的有效性为false;

输入虚部按钮:

将输入指针指向虚部文本框;

令输入虚部按钮的有效性为false;

Reset按钮:

令实部文本框的字符串为0;

令虚部文本框的字符串为0;

令各个寄存器内的数字为0;

令操作符为空;

令输入实部按钮有效性为true;

令输入虚部按钮有效性为true;

Backspace按钮:

判断输入指针指向的文本框是不是只有一个字符,若是,则将指针指向的文本框清零,结束子程序;

将指针指向的文本框的文本长度-1;

结束子程序;

+按钮:

将操作符存储器刷新为+;

结束子程序;

-按钮:

将操作符存储器刷新为-;

结束子程序;

*按钮:

将操作符存储器刷新为*;

结束子程序;

/按钮:

将操作符存储器刷新为/;

结束子程序;

Calculate键:

判断操作符;

如果是+,调用加法函数;

如果是-,调用减法函数;

如果是*,调用乘法函数;

如果是/,调用除法程序;

输出结果;

结束子程序;

 

三、【实现描述(Implement)】(30%)

(本部分应包括:

抽象数据类型具体实现的函数原型说明、关键操作实现的伪码算法、函数设计、函数间的调用关系,关键的程序流程图等,给出关键算法的时间复杂度分析。

本程序含有22个C#对象函数:

0-910个数字按钮:

实现往程序输入框中输入数据。

运算符号按钮:

用于更改操作符暂存器的值,以便后面的程序正常执行。

系统功能键:

主要用于实现某些系统功能,如寄存器清零,操作符清零,文本框退格等等。

计算按钮:

根据已经输入的数值和运算符来判断输入是否合法,如合法就通过调用对应的子程序来给出正确结果,不正确就给出友好错误提示。

程序输入框:

用于输入程序的各种等待运算的数据。

窗体:

用于窗体的初始化,程序变量的初始化以及显示。

时间复杂度分析:

各个子程序的时间复杂度均为n.

人性化设计:

1.在输入出现错误时例如除数的实部与虚部同时为零时,程序会给出友好的提示。

2.充分尊重不同用户群的使用习惯,本程序提供了三种人机交互方式:

(1).利用鼠标进行操作:

在输入实部时,点击“输入实部”按钮,光标自动切换到实部输入框;欲输入虚部时,点击“输入虚部”按钮,光标自动切换至虚部输入框,在任何一个输入框中都能依靠鼠标点击下面的数字按钮来输入数据,最后点击calculate显示结果。

(2).利用键盘进行操作:

在输入实部时,按下Tab键转移焦点至“输入实部”按钮,光标自动切换到实部输入框;欲输入虚部时,按Tab键转移焦点至“输入虚部”按钮,光标自动切换至虚部输入框,在任何一个输入框中都能按Tab键转移焦点至下面的数字按钮来输入数据,最后按Tab键转移焦点至calculate键进行计算,显示结果。

(3).利用鼠标与键盘同时操作,这也是最快捷的方法:

在输入实部时,点击实部输入框,光标自动切换到实部输入框;欲输入虚部时,点击虚部输入框,光标自动切换至虚部输入框,在任何一个输入框中都能直接依靠鼠标键盘的数字键来输入数据,最后点击calculate按钮显示结果。

3.利用算法设计尽量避免用户出现操作失误:

当用户通过任意一种手段切换光标至实部输入框时,实部切换按钮自动变为不可用,当用户通过任意一种手段切换光标至虚部输入框时,虚部切换按钮也自动变为不可用。

 

四、【测试结果(Testing)】(10%)

(本部分应包括:

对实验的测试结果,应具体列出每次测试所输入的数据以及输出的数据,并对测试结果进行分析总结)

程序开始运行后进行初始化,完成后的界面:

焦点在实部时:

焦点在虚部时:

 

程序正确性测试1:

计算(1+i)+(2+2i):

计算结果:

程序正确性测试2:

计算(6+3i)—(9+4i)

计算结果:

程序正确性测试3:

计算(4+5i)*(3+9i)

计算结果:

程序正确性测试4:

计算(12+9i)/(3+3i)

计算结果:

程序健壮性测试:

令除数为0:

测试:

(9+3i)/(0+0i)

显示结果:

 

四、【实验总结】(10%)

(本部分应包括:

自己在实验中完成的任务,注意组内的任意一位同学都必须独立完成至少一项接口的实现;对所完成实验的经验总结、心得)

这次和我们小组完成这个桌面计算器,大家分工协作,配合默契。

我在这个小组中参与了课题分析,算法设计,后期测试。

独立完成了程序代码的编写,实验报告的编写。

总结:

由于是功利化地为了完成试验才突击某一门编程语言,虽然有所基础,还是难免仓促,现在回顾自己编写的代码,相比较同学的代码,我发现我没有完全的利用面向对象的代码重用性的便利,代码几乎没有重复利用,导致代码有500行之巨,实在是有悖于面向对象编程的简洁性,重用性,安全性的设计初衷,这现象在以后对面向对象编程有了更深了解之后将会大量减少。

五、【项目运作描述(Operate)】(10%)

(本部分应包括:

项目的成本效益分析,应用效果等的分析。

这是一个初级的,基本的桌面计算器程序,主要目的是锻炼我们的团队合作意识,这个桌面计算器能用来进行简单的复数计算,方便同学们从繁杂的复数乘除法解脱出来。

 

六、】【代码】(10%)

(本部分应包括:

完整的代码及充分的注释。

注意纸质的实验报告无需包括此部分。

格式统一为,字体:

Georgia,行距:

固定行距12,字号:

小五)

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Windows.Forms;

//ByYangYang

namespace数据结构实验一桌面计算器

{

publicpartialclassForm1:

Form

{

boolreal_or_imag=true;//用来判断需要输入的是实部还是虚部,令true=real,false=imag

stringoper="";//存放操作符

doubleresult_real=0;//存放实部运算结果

doubleresult_imag=0;//存放虚部运算结果

doublenum1_real=0;//第一个数的实部

doublenum2_real=0;//第二个数的实部

doublenum1_imag=0;//第一个数的虚部

doublenum2_imag=0;//第二个数的虚部

 

publicForm1()

{

InitializeComponent();

}

privatevoidoperplus()//加法模块函数

{

num2_real=Convert.ToDouble(text_real.Text);//字符串转化为双精度数

num2_imag=Convert.ToDouble(text_imag.Text);

result_real=num1_real+num2_real;

result_imag=num1_imag+num2_imag;

text_real.Text=Convert.ToString(result_real);//双精度数转化成为字符串

text_imag.Text=Convert.ToString(result_imag);

}

privatevoidopermin()//减法模块函数

{

num2_real=Convert.ToDouble(text_real.Text);//字符串转化为双精度数

num2_imag=Convert.ToDouble(text_imag.Text);

result_real=num1_real-num2_real;

result_imag=num1_imag-num2_imag;

text_real.Text=Convert.ToString(result_real);//双精度数转化成为字符串

text_imag.Text=Convert.ToString(result_imag);

}

privatevoidopermul()//乘法模块函数

{

num2_real=Convert.ToDouble(text_real.Text);//字符串转化为双精度数

num2_imag=Convert.ToDouble(text_imag.Text);

result_real=(num1_real*num2_real)-(num1_imag*num2_imag);

result_imag=(num1_real*num2_imag)+(num1_imag*num2_real);

text_real.Text=Convert.ToString(result_real);//双精度数转化成为字符串

text_imag.Text=Convert.ToString(result_imag);

}

privateintoperdiv()//除法模块函数

{

num2_real=Convert.ToDouble(text_real.Text);//字符串转化为双精度数

num2_imag=Convert.ToDouble(text_imag.Text);

if((num2_real*num2_real)+(num2_imag*num2_imag)==0)//判断除数是否为零,避免非法操作

{

text_real.Text="除数不合法";

text_imag.Text="请从新输入";

return0;

}

result_real=((num1_real*num2_real)+(num1_imag*num2_imag))/((num2_real*num2_real)+(num2_imag*num2_imag));

result_imag=((num1_imag*num2_real)-(num1_real*num2_imag))/((num2_real*num2_real)+(num2_imag*num2_imag));

text_real.Text=Convert.ToString(result_real);//双精度数转化成为字符串

text_imag.Text=Convert.ToString(result_imag);

return0;

}

privatevoidForm1_Load(objectsender,EventArgse)//窗口载入程序,令Backspace键暂时不可用

{

button_backspace.Enabled=false;

}

privatevoidlabel1_Click(objectsender,EventArgse)

{

}

privatevoidbutton18_Click(objectsender,EventArgse)//加号键的触发事件

{

oper="+";

num1_real=Convert.ToDouble(text_real.Text);

num1_imag=Convert.ToDouble(text_imag.Text);

text_real.Text="0";

text_imag.Text="0";

}

privatevoidbutton15_Click(objectsender,EventArgse)//减号健的触发事件

{

oper="-";

num1_real=Convert.ToDouble(text_real.Text);

num1_imag=Convert.ToDouble(text_imag.Text);

text_real.Text="0";

text_imag.Text="0";

}

privatevoidbutton16_Click(objectsender,EventArgse)//乘号键的触发事件

{

oper="*";

num1_real=Convert.ToDouble(text_real.Text);

num1_imag=Convert.ToDouble(text_imag.Text);

text_real.Text="0";

text_imag.Text="0";

}

privatevoidenter_real_Click(objectsender,EventArgse)//输入实部键的触发事件

{

real_or_imag=true;

enter_real.Enabled=false;

enter_imag.Enabled=true;

}

privatevoident

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2