第二次作业
第二次作业--设计一个包含登录界面的计算器软件
【实验目的】
1.掌握软件开发的基本流程
2.掌握常用的软件开发方式和工具。
【实验内容】
设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录。
【需求分析】
设计一个包含登录界面的计算器软件,该软件可以实现第一次作业中的全部功能,同时可以保存用户的历史计算记录,完成软件的UI设计,设计软件所使用的全部流程。
【测试环境】
Eclipse
Windows11
【代码实现以及结果】
登录代码设计:
LoginUI类:实现界面的设置,构建方法,封装好所有的界面开发代码①initUI方法:1、创建窗体对象;jf2、设置窗体的相关属性(标题、尺寸、大小不变、位置、居中显示、关闭、可视化);setTitle,setSize,setResizable,setLocation,setLocationRelativeTo,setDefaultCloseOperation,setVisible.3、创建组件对象,按钮,输入框,图片标签;JButton,JLabal,JTextField,ImageIcon,4、界面窗口添加按钮:jf.add()5、按钮添加监听器。ButtonActionbtnactino=newButtonAction();btnaction.addActionListener(btnaction).②main方法:用自己的类创建对象,调用自己的方法;
packageyudu2.com;
importjava.awt.Dimension;
importjava.awt.FlowLayout;
importjava.awt.event.ActionEvent;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
//LoginUI类:实现界面的设置,构建方法,封装好所有的界面开发代码
//①initUI方法:1、创建窗体对象;
//2、设置窗体的相关属性(标题、尺寸、大小、关闭、可视化);
//3、创建组件对象,按钮,输入框;
//4、界面窗口添加按钮;
//5、按钮添加监听器。
//②main方法:用自己的类创建对象,调用自己的方法
publicclassLoginUI{
privatestaticfinalActionEventActionEvent=null;
//一、界面方法
publicvoidinitUI(){
//1:创建一个窗体的对象;
JFramejf=newJFrame();
//2:设置窗体的相关属性:标题,尺寸,关闭选项操作可视化
jf.setTitle("余杜江登录界面");
jf.setSize(500,800);//像素单位
jf.setResizable(false); //尺寸固定
//jf.setLocation(1000,400); //位置固定可更改
jf.setLocationRelativeTo(null);//居中显示
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出方式
jf.setVisible(true);
FlowLayoutf1=newFlowLayout(); //流式布局
jf.setLayout(f1);
//3:创建组件对象,按钮,输入框
//按钮
JButtonbtn=newJButton("登录");
//标签
JLabelnamejla=newJLabel("账号:");
JLabelpwdjla=newJLabel("密码:");
//输入框
JTextFieldnameJtf=newJTextField();
JTextFieldpwdJtf=newJTextField();
//图片标签
ImageIconimgicon=newImageIcon("C:/Users/余毒/Desktop/余毒1.png");//图片插入,更改图片路径,需要注意后缀
JLabelimgjla=newJLabel(imgicon);
//组件设置尺寸
Dimensiondimsize=newDimension(420,50);
nameJtf.setPreferredSize(dimsize);
pwdJtf.setPreferredSize(dimsize);
//4:界面窗体添加按钮
jf.add(imgjla);
jf.add(namejla);
jf.add(nameJtf);
jf.add(pwdjla);
jf.add(pwdJtf);
jf.add(btn);
//可视化在所有组件加载之后
jf.setVisible(true); //可视化交给系统渲染到屏幕上
//按钮添加监听器
ButtonActionbtnaction=newButtonAction();
btn.addActionListener(btnaction);
btnaction.count=100;
btnaction.nameJtf=nameJtf;
btnaction.pwdJtf=pwdJtf;
}
//二、主函数部分
publicstaticvoidmain(String[]args){
//创建自己写的类的对象;
LoginUIloginui=newLoginUI();
//调用方法
loginui.initUI();
ButtonActioni=newButtonAction();
i.actionPerformed(ActionEvent);
}
}
ButtonAction类:监听器,获取鼠标点击按钮的信息,(继承ActionListener)
packageyudu2.com;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JTextField;
publicclassButtonActionimplementsActionListener{ //监听器
publicintcount=0;
//先声明一个输入框的引用地址存储变量;
publicJTextFieldnameJtf;
publicJTextFieldpwdJtf;
publicJFramejf1;
//监听器
publicvoidactionPerformed(ActionEvente){
//获取输入框中的字符串
StringnameText=nameJtf.getText();
StringpwdText=pwdJtf.getText();
//比较账号密码设置初始账户admin,密码123456
if(nameText.equals("123")||nameText.equals("user1")){
System.out.println("比较成功!!");
if(pwdText.equals("123")||pwdText.equals("a123456")){
System.out.println("比较成功!!");
//创建一个新窗体弹出
JFramejf=newJFrame();
jf.setTitle("登录响应!!");
jf.setSize(500,200);
jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
java.awt.FlowLayoutf1=newjava.awt.FlowLayout();
jf.setLayout(f1);
JLabeljla=newJLabel("登录成功!!");
jf.add(jla);
jf.setVisible(true);
jf.setLocationRelativeTo(null);//居中显示
}
}
}
}
登录代码设计页面结果:


登录实现流程图:

计算器代码设计:
packageyudu2.com;
importjavax.swing.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.util.*;
importjava.util.stream.Collectors;
publicclassCalculatorAPPextendsJFrameimplementsActionListener{
CalculatorAPP(){
init();
}
/**
*定义按钮
*/
privateJTextFieldtextField1;
privateJTextAreatextField2;
privateJButtonbuttonzuo;//(
privateJButtonbuttonyou;//)
privateJButtonbuttonC;//c
privateJButtonbuttonCE;//CE
privateJButtonbuttondele;//<-删除
privateJButtonbuttonDiv;//÷
privateJButtonbutton7;//7
privateJButtonbutton8;//8
privateJButtonbutton9;//9
privateJButtonbuttonAdd;//+
privateJButtonbutton4;//4
privateJButtonbutton5;//5
privateJButtonbutton6;//6
privateJButtonbuttonSub;//-
privateJButtonbutton1;//1
privateJButtonbutton2;//2
privateJButtonbutton3;//3
privateJButtonbuttonMul;//x
privateJButtonbuttonequl;//=
privateJButtonbutton0;//0
privateJButtonbuttonPoint;//.
publicvoidinit(){
JFrameframe=newJFrame("余杜江计算器");//普通窗口顶层容器创建标题为“计算器”;
frame.setLayout(null);//设置使用特定的布局管理器;
//单选项按钮
//按键的排版以及设计需要提前考虑整体的布局合理性,不可出现按键重叠;为了保证美观又需要考虑排版整齐;
//放置数字0
button0=newJButton("0");//注:在给按键命名时要根据按键的大小,否则按键上的标注无法完全显示;
button0.setBounds(100,400,110,50);
frame.add(button0);
//放置数字1
button1=newJButton("1");
button1.setBounds(40,340,50,50);
frame.add(button1);
//放置数字2
button2=newJButton("2");
button2.setBounds(100,340,50,50);
frame.add(button2);
//放置数字3
button3=newJButton("3");
button3.setBounds(160,340,50,50);
frame.add(button3);
//放置数字4
button4=newJButton("4");
button4.setBounds(40,280,50,50);
frame.add(button4);
//放置数字5
button5=newJButton("5");
button5.setBounds(100,280,50,50);
frame.add(button5);
//放置数字6
button6=newJButton("6");
button6.setBounds(160,280,50,50);
frame.add(button6);
//放置数字7
button7=newJButton("7");
button7.setBounds(40,220,50,50);
frame.add(button7);
//放置数字8
button8=newJButton("8");
button8.setBounds(100,220,50,50);
frame.add(button8);
//放置数字9
button9=newJButton("9");
button9.setBounds(160,220,50,50);
frame.add(button9);
//放置.
buttonPoint=newJButton(".");//text:为自动生成的参数的解释词
buttonPoint.setBounds(40,400,50,50);//自动补齐的参数解释词
frame.add(buttonPoint);
//放置+
buttonAdd=newJButton("+");
buttonAdd.setBounds(220,400,50,50);
frame.add(buttonAdd);
//放置-
buttonSub=newJButton("-");
buttonSub.setBounds(220,340,50,50);
frame.add(buttonSub);
//放置*
buttonMul=newJButton("*");
buttonMul.setBounds(220,280,50,50);
frame.add(buttonMul);
//放置/
buttonDiv=newJButton("/");
buttonDiv.setBounds(220,220,50,50);
frame.add(buttonDiv);
//放置=
buttonequl=newJButton("=");
buttonequl.setBounds(280,340,110,110);
frame.add(buttonequl);
//退位键
buttondele=newJButton("B");
buttondele.setBounds(280,220,110,110);
frame.add(buttondele);
//放置左括号(
buttonzuo=newJButton("(");
buttonzuo.setBounds(40,160,80,50);
frame.add(buttonzuo);
//放置右括号)
buttonyou=newJButton(")");
buttonyou.setBounds(130,160,80,50);
frame.add(buttonyou);
//放置C消除所有输入
buttonC=newJButton("C");
buttonC.setBounds(220,160,80,50);
frame.add(buttonC);
//放置CE消除当前输入
buttonCE=newJButton("CE");
buttonCE.setBounds(310,160,80,50);
frame.add(buttonCE);
//添加表达式文本框用以输入计算公式
textField1=newJTextField();//文本框
textField1.setBounds(40,20,350,60);
frame.add(textField1);
textField2=newJTextArea();
textField2.setBounds(400,20,280,430);
frame.add(textField2);
textField1.addActionListener(this);
buttonzuo.addActionListener(this);
buttonyou.addActionListener(this);
buttonC.addActionListener(this);
buttonCE.addActionListener(this);
buttondele.addActionListener(this);
buttonDiv.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);
buttonAdd.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
buttonSub.addActionListener(this);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
buttonMul.addActionListener(this);
buttonequl.addActionListener(this);
button0.addActionListener(this);
buttonPoint.addActionListener(this);
frame.setBounds(200,200,700,520);//设置整个图形窗口的大小;(通过窗口名调用)
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE),当点击窗口的关闭按钮时退出程序(没有这一句,程序不会退出)
frame.setVisible(true);
}
Stringstr=null;
intpointbook=0;
intequalbook=0;
intzuonum=0;
intyounum=0;
intequnum=0;
publicvoidactionPerformed(ActionEvente){
if(equnum==1){
textField1.setText("0");
equnum=0;
}
//按0
if(e.getSource().equals(button0)){
str=textField1.getText();
if(str.length()>16||str.equals("0")||equalbook==1){
}else{
textField1.setText(str+"0");
}
}
//按1
if(e.getSource().equals(button1)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("1");
}else{
textField1.setText(str+"1");
}
}
//当按钮为2时
if(e.getSource().equals(button2)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("2");
}else{
textField1.setText(str+"2");
}
}
//当按钮为3时
if(e.getSource().equals(button3)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("3");
}else{
textField1.setText(str+"3");
}
}
//当按钮为4时
if(e.getSource().equals(button4)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("4");
}else{
textField1.setText(str+"4");
}
}
//当按钮为5时
if(e.getSource().equals(button5)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("5");
}else{
textField1.setText(str+"5");
}
}
//当按钮为6时
if(e.getSource().equals(button6)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("6");
}else{
textField1.setText(str+"6");
}
}
//当按钮为7时
if(e.getSource().equals(button7)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("7");
}else{
textField1.setText(str+"7");
}
}
//当按钮为8时
if(e.getSource().equals(button8)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("8");
}else{
textField1.setText(str+"8");
}
}
//当按钮为9时
if(e.getSource().equals(button9)){
str=textField1.getText();
if(str.length()>16||equalbook==1){
}elseif(str.equals("0")||str.equals("")){
textField1.setText("9");
}else{
textField1.setText(str+"9");
}
}
//当按钮为小数点时
if(e.getSource().equals(buttonPoint)){
str=textField1.getText();
if(str.length()>15||equalbook==1){//小数点位于操作数的最后一位不执行操作;
}
if(pointbook==0){//一个操作数仅能有一个小数点,若已经有小数点则不再添加小数点;
textField1.setText(str+".");
pointbook=1;//小数点判断位置1;
}
}
//每次输入都是一个数字+运算符,一起从数字文本框转而输入到表达式文本框中;
//当按钮为加号时
if(e.getSource().equals(buttonAdd)){
str=textField1.getText();//获取运算符前一个操作数;
charch1[]=str.toCharArray();//把第一操作数连同+号进行字符串转字符数组的操作赋予ch1;
intlength1=str.length()-1;//length1获取除+号外的第一操作数的位数;
if((length1==-1||ch1[length1]!=')')&&(str.equals("0")||str.equals("")||ch1[length1]=='.'||ch1[length1]=='+'||ch1[length1]=='-'||ch1[length1]=='*'||ch1[length1]=='/'||ch1[length1]=='('||ch1[length1]==')')){
//当数字为空或为0(操作无意义);或数字的最后一位是小数点(未输入完毕或输入出错,等待)
}else{
textField1.setText(str+"+");//合并现有表达式和新增表达式
//这里解释以下为什么s没有提取到数字框里的符号,因为输入符号时并没有更新数字框,而是直接执行一系列操作,数字框从未出现过运算符;
}
pointbook=0;
}
//当按钮为减号时
if(e.getSource().equals(buttonSub)){
str=textField1.getText();
charch1[]=str.toCharArray();
intlength1=str.length()-1;
if((length1==-1||ch1[length1]!=')')&&(ch1[length1]=='.'||ch1[length1]=='+'||ch1[length1]=='-'||ch1[length1]=='*'||ch1[length1]=='/'||ch1[length1]=='('||ch1[length1]==')')){
}else{
textField1.setText(str+"-");
}
pointbook=0;
}
//当按钮为乘号时
if(e.getSource().equals(buttonMul)){
str=textField1.getText();
charch1[]=str.toCharArray();
intlength1=str.length()-1;
if((length1==-1||ch1[length1]!=')')&&(str.equals("0")||str.equals("")||ch1[length1]=='.'||ch1[length1]=='+'||ch1[length1]=='-'||ch1[length1]=='*'||ch1[length1]=='/'||ch1[length1]=='('||ch1[length1]==')')){
}else{
textField1.setText(str+"*");
}
pointbook=0;
}
//当按钮为除号时
if(e.getSource().equals(buttonDiv)){
str=textField1.getText();
charch1[]=str.toCharArray();
intlength1=str.length()-1;
if((length1==-1||ch1[length1]!=')')&&(str.equals("0")||str.equals("")||ch1[length1]=='.'||ch1[length1]=='+'||ch1[length1]=='-'||ch1[length1]=='*'||ch1[length1]=='/'||ch1[length1]=='('||ch1[length1]==')')){
}else{
textField1.setText(str+"/");
}
pointbook=0;
}
//当按钮为左括号时
if(e.getSource().equals(buttonzuo)){
str=textField1.getText();
charch[]=str.toCharArray();
intlength=str.length()-1;
if(length==-1||ch[length]=='+'||ch[length]=='-'||ch[length]=='*'||ch[length]=='/'){
//括号左边是否有数或符号类别的判断;
textField1.setText(str+'(');//满足条件则加入左括号;
zuonum++;//左括号数加一标记;
}
if(length==-1||ch[length]=='+'||ch[length]=='-'||ch[length]=='*'||ch[length]=='/')
pointbook=0;
if(length==0||ch[length]==0){
textField1.setText("(");
zuonum++;
}
}
//当按钮为右括号时;
if(e.getSource().equals(buttonyou)){
str=textField1.getText();
charch[]=str.toCharArray();
intlength=str.length()-1;
if(Character.isDigit(ch[length])&&zuonum>younum){//只有前面是数字的时候且左括号的数量大于右括号的数量的时候才能加右括号;
younum++;//右括号数加一标记;
textField1.setText(str+')');
}
pointbook=0;
}
//当按下C键时;
if(e.getSource().equals(buttonC)){
textField1.setText("0");//置当前数字框为0;
zuonum=0;//当一次计算完成之后,只有按CE按钮才能进行新的计算,因为要清除所有标志位否则会影响下一次操作;
younum=0;
pointbook=0;
equalbook=0;
textField2.setText("");
}
//当按钮为CE时,
if(e.getSource().equals(buttonCE)){
textField1.setText("0");//清除当前数字框中内容;
pointbook=0;//更新小数点状态为0;
}
//当按下B时,
if(e.getSource().equals(buttondele)){
str=textField1.getText();
char[]nums=str.toCharArray();
if(nums[str.length()-1]=='('){
zuonum--;
}
str=str.substring(0,str.length()-1);
textField1.setText(str);
}
//当按下=时,
if(e.getSource().equals(buttonequl)){
str=textField1.getText();
if(zuonum!=younum){
textField1.setText("关系式错误。");
}else{
ans(str);
}
Strings=str+"="+textField1.getText();
textField2.setText(s+"\r\n"+textField2.getText());//将表达式存放在历史记录里。
equnum=1;
}
}
/**
*提前将符号的优先级定义好
*/
privatestaticfinalMap<Character,Integer>basic=newHashMap<Character,Integer>();
static{
basic.put('-',1);
basic.put('+',1);
basic.put('*',2);
basic.put('/',2);
basic.put('(',0);//在运算中()的优先级最高,但是此处因程序中需要故设置为0
}
publicvoidans(Stringstr){
Stringa=toSuffix(str);//传入一串算数公式
textField1.setText(dealEquation(a));
}
/**
*将中缀表达式转化为后缀表达式
*/
publicStringtoSuffix(Stringinfix){
List<String>queue=newArrayList<String>();//定义队列用于存储数字以及最后的后缀表达式
List<Character>stack=newArrayList<Character>();//定义栈用于存储运算符最后stack中会被弹空
char[]charArr=infix.trim().toCharArray();//字符数组用于拆分数字或符号
Stringstandard="*/+-()";//判定标准将表达式中会出现的运算符写出来
charch='&';//在循环中用来保存字符数组的当前循环变量的这里仅仅是初始化一个值没有意义
intlen=0;//用于记录字符长度【例如100*2,则记录的len为3到时候截取字符串的前三位就是数字】
for(inti=0;i<charArr.length;i++){//开始迭代
ch=charArr[i];//保存当前迭代变量
if(Character.isDigit(ch)){//如果当前变量为数字
len++;
}elseif(Character.isLetter(ch)){//如果当前变量为字母
len++;
}elseif(ch=='.'){//如果当前变量为.会出现在小数里面
len++;
}elseif(Character.isSpaceChar(ch)){//如果当前变量为空格支持表达式中有空格出现
if(len>0){//若为空格代表一段结束,就可以往队列中存入了【例如100*2100后面有空格就可以将空格之前的存入队列了】
queue.add(String.valueOf(Arrays.copyOfRange(charArr,i-len,i)));//往队列存入截取的字符串
len=0;//长度置空
}
continue;//如果空格出现,则一段结束跳出本次循环
}elseif(standard.indexOf(ch)!=-1){//如果是上面标准中的任意一个符号
if(len>0){//长度也有
queue.add(String.valueOf(Arrays.copyOfRange(charArr,i-len,i)));//说明符号之前的可以截取下来做数字
len=0;//长度置空
}
if(ch=='('){//如果是左括号
stack.add(ch);//将左括号放入栈中
continue;//跳出本次循环继续找下一个位置
}
if(!stack.isEmpty()){//如果栈不为empty
intsize=stack.size()-1;//获取栈的大小-1即代表栈最后一个元素的下标
booleanflag=false;//设置标志位
while(size>=0&&ch==')'&&stack.get(size)!='('){//若当前ch为右括号,则栈里元素从栈顶一直弹出,直到弹出到左括号
queue.add(String.valueOf(stack.remove(size)));//注意此处条件:ch并未入栈,所以并未插入队列中;同样直到找到左括号的时候,循环结束了,所以左括号也不会放入队列中【也就是:后缀表达式中不会出现括号】
size--;//size--保证下标永远在栈最后一个元素【栈中概念:指针永远指在栈顶元素】
flag=true;//设置标志位为true表明一直在取()中的元素
}
while(size>=0&&!flag&&basic.get(stack.get(size))>=basic.get(ch)){//若取得不是()内的元素,并且当前栈顶元素的优先级>=对比元素那就出栈插入队列
queue.add(String.valueOf(stack.remove(size)));//同样此处也是remove()方法,既能得到要获取的元素,也能将栈中元素移除掉
size--;
}
}
if(ch!=')'){//若当前元素不是右括号
stack.add(ch);//就要保证这个符号入栈
}else{//否则就要出栈栈内符号
stack.remove(stack.size()-1);
}
}
if(i==charArr.length-1){//如果已经走到了中缀表达式的最后一位
if(len>0){//如果len>0就截取数字
queue.add(String.valueOf(Arrays.copyOfRange(charArr,i-len+1,i+1)));
}
intsize=stack.size()-1;//size表示栈内最后一个元素下标
while(size>=0){//一直将栈内符号全部出栈并且加入队列中【最终的后缀表达式是存放在队列中的,而栈内最后会被弹空】
queue.add(String.valueOf(stack.remove(size)));
size--;
}
}
}
returnqueue.stream().collect(Collectors.joining(","));//将队列中元素以,分割返回字符串
}
/**
*将后缀表达式进行运算计算出结果
*
*@paramequation
*@return
*/
publicStringdealEquation(Stringequation){
String[]arr=equation.split(",");//根据,拆分字符串
List<String>list=newArrayList<String>();//用于计算时存储运算过程的集合【例如list中当前放置100205/则取出20/5最终将结果4存入list此时list中结果为1004】
for(inti=0;i<arr.length;i++){//此处就是上面说的运算过程,因为list.remove的缘故,所以取出最后一个数个最后两个数都是size-2
intsize=list.size();
switch(arr[i]){
case"+":
doublea=Double.parseDouble(list.remove(size-2))+Double.parseDouble(list.remove(size-2));
list.add(String.valueOf(a));
break;
case"-":
doubleb=Double.parseDouble(list.remove(size-2))-Double.parseDouble(list.remove(size-2));
list.add(String.valueOf(b));
break;
case"*":
doublec=Double.parseDouble(list.remove(size-2))*Double.parseDouble(list.remove(size-2));
list.add(String.valueOf(c));
break;
case"/":
doubled=Double.parseDouble(list.remove(size-2))/Double.parseDouble(list.remove(size-2));
list.add(String.valueOf(d));
break;
default:
list.add(arr[i]);
break;//如果是数字直接放进list中
}
}
returnlist.size()==1?list.get(0):"运算失败";//最终list中仅有一个结果,否则就是算错了
}
publicstaticvoidmain(String[]args){
CalculatorAPPcalculator=newCalculatorAPP();
}
}
计算器代码运行结果:


计算器实现流程图:

【实验总结】
经过这次实验,让我更加了解到设计软件原理与方法的重要性,以及它对我专业发展发
挥的重要作用。学习,我觉得结果并不是最重要的,很多结果并不完美,可是学习这个过程是不可少的。
当我把实验做完后,才领悟到教师所说话的含义,要掌握一种新的软件,得随着实践的演练,
经过循序渐进的学习,才能更好的掌握它。这次实验,学到的东西很多。
浙公网安备 33010602011771号