中北大学 软件构造 U+及上课代码详解

作业1

1.数据类型可分为两类:(原子类型) 、结构类型。
2.(数据结构)是计算机存储、组织数据的方式,是指相互之间存在一种或多种特定关系的数据元素的集合
3.代码重构指的是改变程序的(结构)而不改变其行为,以便提高代码的可读性、易修改性等。
4.软件实现与通常的程序设计的主要区别是软件的(软件的集成与测试)
5.按照教材的说法,敏捷开发创造了一些新的技术或实践,如测试驱动开发等,但不包括 (软件体系结构)
6.下面不属于白盒测试能保证的是(不正确或漏掉的功能)
7.使用白盒测试方法时,确定测试数据应根据(程序内部逻辑)和指定的覆盖标准
8.白盒方法中常用的方法是(路径测试)方法。
9.白盒测试法一般使用于(单元)测试
10.在进行单元测试时,常用的方法是(采用白盒测试,辅之以黑盒测试)
11.关于条件测试错误的是(条件中包含的错误有接口错误)
12.请将下列四个步骤进行排列,完成文件的赋值操作( 2134) ① 将字节流输入流和源文件相关联,输出流和目标文件相关联。 ② 明确源文件和目标文件。 ③ 使用输入流的读取方法读取文件,并将字节写入到目标文件中。 ④ 关闭资源。
13.以下哪个选项不是命令行交互( Windows画板)。
14.下列哪个设备既属于输入设备、又属于输出设备( 照相机)
15.常见的软件安装过程,需要一步步引导用户配置数据、点击“下一步”,这属于(命令行交互)
16.下列不是评估的目标的是( 保证整个产品开发过程都能考虑用户的需要)
17.可用性保证产品功能基本完备,是用于评价用户界面使用方便程度的一种度量属性。可用性有5个方面的特征,其中(使用效率)是最基本的可用性属性。
18.下列描述不正确的是(人机交互的发展中,有了新的交互方式旧的旧不用了)
19.以下设计中可以减少用户等待感的是(以上都可以)
20.以下属于静态测试的是(代码测试)
21.软件测试技术可以分为静态测试和动态测试,下列说法中错误的是(白盒测试是静态测试,黑盒测试是动态测试)
22.软件测试方法按照测试过程是否执行程序分为动态测试和(静态测试)
23.下列有关测试说法中正确的是 (静态测试是不运行被测程序本身,而寻找程序代码中可能存在的错误或评估程序代码的过程)
24.下列不属于正式审查的方式是(编码标准和规范)
25.关于同行评审说法正确的是(同行评审的目的是发现产品的缺陷,因此在评审上的投入可以减少大量的后期返工)
26.(技术评审)是以提高软件质量为目的的技术活动
27.集成测试是在(单元测试)的基础上将所有模块按照设计要求组装成系统或子系统,对模块组装过程和模块接口进行正确性测试。
28.在软件测试阶段,测试步骤按次序可以划分为以下几步:(单元测试、集成测试、系统测试、验收测试)
29.何谓重构,表述正确的是哪项?是不改变功能(软件可观察行为)的前提下,修改代码的内部结构,使代码更易懂易维护扩展。
30.有关"测试驱动开发",下列说法不正确的有(TDD的目的仅仅是测试软件,保证代码质量)。


作业2


1.软件按其功能划分为三种类型:(系统软件)、支撑软件和应用软件。
2.软件按服务对象的范围划分为: 项目软件(定制开发)和(产品软件)(或通用软件)
3.从用户的角度,软件生存周期分为下列三个阶段:( 需求)、获取软件、使用软件。
4.软件设计是给出如何实现需求的决策和方案,是将系统功能分配到系统不同组成元素的过程,包括一组活动①划分需求②确定子系统③给子系统分配需求④定义子系统的功能⑤( 定义子系统功能)
5.软件维护分为4 种类型:改正性维护(适应性维护 )、完善性维护、预防性维护。
6.瀑布式开发过程,也叫软件生存期模型。它按照软件生命周期,把开发分为制定计划、需求分析、软件设计、程序编写、( 软件测试)和运行维护等6个基本活动,并且规定了它们自上而下、相互衔接的固定次序,如同瀑布流水,逐级下落。
7.敏捷开发是应对快速变化的需求的一种软件开发能力。它以( 用户的需求进化)核心,采用迭代、循序渐进的方法进行软件开发。
8.一个软件可能包含以下哪些特性:分时特性,交互性,批处理
9.从软件开发者的角度,一般把软件生存周期分为下列三个阶段:定义软件,开发软件,维护软件
10.高级程序语言存在不同的分类。一种划分标准是按照语言的计算模型,将高级语言分 为两个大类:声明式,命令式


作业3:


1.模块化是现代软件开发技术的一个基本原则。(函数)是实现软件模块化的一个基本手段。
2.一个函数中各个处理元素都密切相关于同一功能且必须顺序执行,前一功能元素的输出就是下一功能元素的输入,即一个函数完成多个功能,这些函数又必须顺序执行是下列哪种内聚(顺序内聚)
3.一组函数都访问同一(全局数据结构)而不是同一(全局简单变量),而且不是通过参数传递该全局变量的信息叫做外部耦合。
4.如果用数组存不同的式作为“习题”,产生80道不同算式的习题时算式比较的次数是(3160 )
5.测试需求要求程序的预期结果和实际运行结果都要明确、合理、(可观察)并可比较。
6.在程序设计和软件开发的实践和理论中,存在过以(数据 )为中心和以操作为中心的开发方法。
7.模块化是把问题分解成(便于测试,便于控制,容易理解)的子问题的一个重要手段,是实现控制复杂性的方式。
8.模块具有三大特征:(互换性,通用性,独立性)
9.在程序设计和软件开发的实践和理论中,存在过以(数据)为中心和以(操作)为中心的开发方法。
10.Meyer提出了下列哪几条标准来评价一种设计方法是否定义了有效的模块系统的能力:模块保护性,模块可分解性,模块连续性


作业4:


1.(抽象)是设计类的基本方法,使我们专注关心问题而忽略其他。
2.(多态)是类型理论的一个概念,一个名字可以表示多个不同类的实例,只要它们具有某个共同的超类而且相关。
3.用面向对象开发软件时,通常先设计一个包含基本属性和( 方法)的类。然后,随着类的使用,会发现需要补充、修改甚至细化类及其接口
4.在UML中,类是用一个带有类名、可选属性和操作( 矩形)表示
5.子类型必须能够替换它们的基类型。这一思想体现了对继承机制的约束规范,只有子类能够替换基类时,才能保证系统在运行期内识别子类,这是保证继承复用的基础。这是(里氏代换)原则。
6.面向(过程)的语言主要通过数据的作用域、文件包等方式保护数据,不让程序的其他部分随意改动内部数据、数据结构中的成员。
7.类的接口可以进一步分成 4 类:公共的、保护的、私有的、(包 )
8.每个编程语言的开发工具包通常都提供基本的(调试器)
9.所有(调试器 )都有能力扫描代码并发现常见错误。
10.下面关于依赖倒转原则(Dependency inversion Principle,DIP),正确的说法有( 高层调用低层的功能,低层模块负责实现,高层模块定义接口)


作业5:


1.我们可以使用Animator类的(speed)属性来帮助我们获取动画播放的速度
2.UI中经常用到是哪几种UI对象(text  button )
3.Scene窗口表示什么意思( 场景设计视图)
4.在 Unity 中可以给场景中的游戏对象添加不同的层级关系,实现这个功能的系统是 (layer 层级系统)
5.在 Unity 中,游戏对象 GameObject 是由什么组成的 (组件)
6.刚体是激活物体物理属性的主要组件。绑定刚体的游戏对象,在unity中将受到物理作用。 正确
7.Inspector窗口表示什么意思(属性)
8.触发器和碰撞器的区别,在于是否能阻挡对象,并且回调函数也不一样(正确)
9.Input.GetKey(KeyCode.S);意思就是长按键盘中的S键。 正确
10.场景完成,需要打包(发布)程序,选择(Build Settings )
11.Unity3D是一个让玩家轻松创建互动内容的开发工具,是一个(3D引擎 )软件。
12.场景保存完成,需要打包(发布)程序,选择(Build & Run )
13.在 Unity 中每新添加一个资源素材,引擎都会自动生成一个什么文件? (metadata)
14.unity3D中按住ALT+鼠标右键可以对视图进行什么操作(缩放 )
15.下列叙述中有关 Prefab 预制体说法错误的是哪一项?Prefab 预制体是一种特殊的游戏对象
16.不能在场景编辑器直接新建的模型,是哪个( Mesh)
17.只要一个物体带有碰撞器Collider,另一个物体带有Rigidbody刚体,就可以正常发生物体碰撞。(错误)
18.摄像机组件中的哪个属性是控制视角度大小的(fov)
19.if (Input.GetKey(KeyCode.W))
{
transform.Translate(Vector3.forward * moveSpeed * Time.deltaTime);
}这串代码的解释(按w键使物体往前运动)
20.Unity提供了3种光源,分别是:平行光:Directional Light,点光源:Point Light,以及聚光灯:Spot Light  错误
21.Rigidbody表示物体的什么组件:( 刚体)
22.Unity3d的UI系统图片组件是(RawImage,Image)
23.导入到Unity3D的模型格式,最适合的是(FBX )
24.Material的中贴图格式可以JPG文件  √
25.父与子的概念是在属性面板中体现出来的 (错误 )
26.Transform中的Position属性,是表示物体的3D位置信息  √
27.如何获取一个对象位置信息(gameObject.transform.position )
28.同一个 Prefab 预制体可以在不同的场景使用吗? 可以
29.Unity3d的作用是把模型、图片、声音、视频等资源文件搬运过来,再经过加工和创造,最后打包生成可执行程序  正确
30.新建 Unity 项目需要注意项目所在的磁盘空间,因为(项目在开发过程中体积可能会越来越大)
31.unity3d常用的编程语言是 C#
32.BOX Collider组件叫什么(碰撞器 )
33.可以使用 Unity 开发的项目包括(虚拟现实项目,动画电影项目)
34.碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性(√)
35.碰撞器Collider,可以通过代码跟触发器互相转换  √
36.unity3d中,导入系统自带的粒子资源,得找到“蓝色小方块”预制物体可直接拖入场景,这“蓝色小方块”是什么 实例化prefab
37.Unity引擎的中,以下对Mesh Renderer组件描述正确的是哪一项?Mesh Renderer组件从Mesh Filter组件中获得网格信息,并根据物体的Transform组件所定义的位置进行染.
38.Unity引擎中,可通过下列哪个步骤创建Animator Controller?
在Project视图中点击Create->Animator Controller
39.如果将一个声音剪辑文件从Project视图拖动到Inspector视图或者Scene视图中的游戏对象上,则该游戏对象会自动添加以下哪种组件?Audio Source
40.若要给Sphere游戏对象添加Physics Material,需要使用下列选项中的哪个组件的Material属性?Sphere Collider

Unity项目代码:

代码1: 控制物体的移动

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component1 : MonoBehaviour

{

    GameObject obj;

    public float floSpeed = 10;               //设置移动速度

    public float floRotate = 100;             //设置旋转速度

    // Start is called before the first frame update

    void Start()

    {

        //第三人称视角跟随将摄影机与物体绑定

        Camera.main.transform.SetParent(this.transform);

        Camera.main.transform.localPosition = new Vector3(0, 3, -4);

        Camera.main.transform.localEulerAngles = new Vector3(6, 0, 0);

        #region MyRegion

        //obj =   GameObject.Find("Sphere");

        //GameObject.Instantiate(obj, transform.position,transform.rotation);

        //Mathf.Clamp();//把值限制在【】范围内

        //UnityEngine.Random.Range();   //随机数

        //Resources.Load()//   加载资源

        //    Application.Quit(); //退出游戏

        //    Debug.Log(transform.tag);                       //标签

        //    Debug.Log(transform.position);                  //位置

        //    Debug.Log(transform.rotation);                  //旋转

        //    Debug.Log(transform.eulerAngles);               //欧拉角

        //    Debug.Log(transform.localEulerAngles);          //局部欧拉角

        //    Debug.Log(transform.localPosition);             //局部位置

        //    Debug.Log(transform.localRotation);             //局部旋转

        //    Debug.Log(transform.localScale);                //局部缩放

        //    Debug.Log(transform.parent);                    //父物体

        //    Debug.Log(transform.childCount);                //子物体数量

        //    Debug.Log(transform.up);                        //上方

        //    Debug.Log(transform.forward);                   //前方

        //    Debug.Log(transform.right);                     //右方

        //}

         Update is called once per frame

        //{   //物体移动第一种方法

        //transform.position += new Vector3(0, 0.01f, 0) * Time.deltaTime;

        //    //物体移动的第二种方法

        //    transform.Translate(Vector3.up*floSpeed*Time.deltaTime);

        //    //transform的常用方法

        //transform.Rotate(0,floRotate * Time.deltaTime,0);  //旋转

        //    transform.RotateAround(obj.transform.position, Vector3.up, floRotate * Time.deltaTime); //围绕球体旋转

        //    transform.LookAt(Camera.main.transform); //一直正面面对

        #endregion

    }

    void Update()

    {

        #region MyRegion

        键盘输入

        //Input.GetKey(KeyCode.Space);             //保持按键

        //Input.GetKeyDown(KeyCode.Space);         //按下按键

        //Input.GetKeyUp(KeyCode.Space);           //抬起按键

      

        //鼠标输入

        //Input.GetMouseButton(0);

        //Input.GetMouseButtonDown(0);

        //Input.GetMouseButtonUp(0);

        //Intput.mousePosition;

        //虚拟输入

        //Input.GetAxis("Horizontal");  //FLOAT值 -1到1

        //Input.GetAxis("Vertical");  //FLOAT值 -1到1

        //Input.GetAxisRaw("Horizontal");  //FLOAT值 -1到0到1

        //Input.GetAxisRaw("Vertical");  //FLOAT值 -1到0到1

        //Input.GetAxis("Mouse X");  //鼠标水平移动

        //Input.GetAxis("Mouse Y");  //鼠标垂直移动

        #endregion

        move();//控制物体移动的函数

        look();//控制物体旋转的函数

    }

    private void look()

    {

        float y = Input.GetAxis("Mouse X") * floRotate * Time.deltaTime;

        transform.Rotate(transform.up, y);

        

    }

    private void move()

    {   

        

        float x =Input.GetAxis("Horizontal") *floSpeed* Time.deltaTime;

        float z =Input.GetAxis("Vertical") *floSpeed* Time.deltaTime;

        transform.Translate(x, 0, z);

    //    Input.GetKeyDown(KeyCode.Space);         //按下空格按键

    //    Input.GetKeyUp(KeyCode.Space);           //抬起空格按键

    //    throw new NotImplementedException();

    }

}

代码2: 控制物体的移动,以及刚体碰撞和射线返回

/*

 Unity物理引擎及组件

1.角色控制器

move(); 不受重力影响,需要isGround去判断地面,需要乘deltaTime

SimpleMove();受重力影响,不需要去判断地面,不需要乘deltaTime

2.碰撞体 Collider

    碰撞触发条件:两者都有碰撞组件,至少一方有刚体

3.刚体 Rigidbody

4.射线 Ray

 */

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component2 : MonoBehaviour

{

    //GameObject obj;

   

    public float floSpeed = 30;

    public float floRotate = 0;

    public GameObject obj;

    //CharacterController cc;

    Rigidbody rd;

    // Start is called before the first frame update

    void Start()

    {   

        rd = GetComponent<Rigidbody>();

        //cc = GetComponent<CharacterController>();

        //rd.AddForce(new Vector3());

        //rd.velocity = new Vector3();  //初速度

    }

    // Update is called once per frame

    void Update()

    {

       // learnRay();

        //float x = Input.GetAxis("Horizontal") * floSpeed;

        //float z = Input.GetAxis("Vertical") * floSpeed ;

        //transform.Translate(x, 0, z);

        //角色移动方法

        //cc.Move(new Vector3(x, 0, z));

        //cc.isGrounded;     //判断是否在地面

        //cc.SimpleMove(new Vector3(x, 0, z));

        //局部坐标系

        //cc.SimpleMove(transform.forward * z + transform.right * x);

    }

//射线

    private void learnRay()

    {

        if(Input.GetMouseButtonDown(0))  //点击鼠标左键时候

        {

            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);  创建一个射线 从摄影机发出到鼠标点击的位置

            if(Physics.Raycast(ray, out RaycastHit hitInfo))

            {   

                //float x = hitInfo.point.x;        //将物体瞬移到点击处

                

                //float z = hitInfo.point.z;

                //transform.Translate(x, 0, z);

                Debug.Log(hitInfo.transform.name);  //返回点击位置的名称

                Debug.Log(hitInfo.point);    //返回点击位置的坐标

                //hitInfo.point;

                GameObject shell = Instantiate(obj, transform.position, transform.rotation);     //克隆物体

                shell.GetComponent<Rigidbody>().velocity = Vector3.Normalize(hitInfo.point - transform.position); ;

            }

        }

    }

    private void OnTriggerEnter(Collider other)

    {

        Debug.Log("刚碰到");

    }

    private void OnTriggerStay(Collider other)

    {

        Debug.Log(other.transform.name);

    }

    private void OnTriggerExit(Collider other)

    {

        rd.AddForce(transform.up * 500);

        Debug.Log("碰撞结束");

    }

   

}

项目代码3: 导入音乐,并且控制音量的大小,切换歌曲等内容

using System;

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component3 : MonoBehaviour

{

    AudioSource ads;

    AudioClip ac;

    AudioClip ac1;

    // Start is called before the first frame update

    void Start()

    {

        ads = GetComponent<AudioSource>();

        ac = Resources.Load<AudioClip>("AudioClips/爱在西元前-周杰伦") as AudioClip;

        ac1 = Resources.Load<AudioClip>("AudioClips/点击音效") as AudioClip;

        //ads.clip = ac;

        //ads.Play(); //播放

        //ads.Pause(); //暂停

        //ads.UnPause();//继续播放

        //ads.PlayOneShot()//播放一次

        //ads.playOnAwake;//唤醒时播放

        //ads.volume = 1.0f; //音量

        //ads.loop;//循环

        //ads.isPlaying = false;//是否播放

        //ads.clip;//声音片段

    }

    // Update is called once per frame

    void Update()

    {

        clickAudio();

        changeVolume();

        playMusic();

        changeMusic();

    }

    private void clickAudio()

    {

        if (Input.GetMouseButtonDown(0))

        {

           

            ac1 = Resources.Load<AudioClip>("AudioClips/点击音效") as AudioClip;

        }

    }

    private void changeMusic()   //按下TAB键切换歌曲

    {

        if (Input.GetKey(KeyCode.Tab))

        {

            //ads.clip = acs[j];

            //ads.pa

            ac = Resources.Load<AudioClip>("AudioClips/爱在西元前-周杰伦") as AudioClip;

            

        }

    }

    private void playMusic()  //按下B键实现音乐的暂停与播放

    {

        if (Input.GetKey(KeyCode.B))

        {

           if(ads.isPlaying)

            {

                ads.Pause();

            }

            else

            {

                ads.Play();

            }

        }

    }

    private void changeVolume()  //通过Z,X键调节音乐的音量大小

    {

        if (Input.GetKey(KeyCode.Z))

        {

            ads.volume--;

        }else if (Input.GetKey(KeyCode.X))

        {

            ads.volume++;

        }

    }

}

项目代码4:动画的触发

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Component4 : MonoBehaviour

{

    Animator am;

    // Start is called before the first frame update

    void Start()

    {

        StartCoroutine(learnCoroutine());

        //StopAllCoroutines();

        //StopCoroutines();

    }

    // Update is called once per frame

    void Update()

    {

        if (Input.GetKey(KeyCode.F))   //按下F键执行捡东西的动作

        {

            am.SetTrigger("pickup");  //设置触发

        }

        if (Input.GetKey(KeyCode.Space))   //按下空格键执行跳跃动作

        {

            am.SetTrigger("jump-float");  //设置触发

        }

    }

    //unity中的协程,使用yield return 关键字

    IEnumerator learnCoroutine()

    {   while (true)

        {

            

            yield return new WaitForSeconds(1);

            yield return null;

        }

        

    }

}

项目代码5: UI界面

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;             //新版

using UnityEngine.UI;    //旧版GUI命名空间

using System;

/*

 学习UI系统

 */

public class Component5 : MonoBehaviour

{

    //GUI组件对象赋值的第一种方式:public+外部赋值

    public Image image;

    //GUI组件对象赋值的第二种方式:脚本控制获得组件

    RawImage rawImage;

    public Text t;                     //创建text组件

    public Button button; //创建button组件

    public InputField inputField;       //输入框

    public Toggle toggle;              //单选框

    public Slider slider;               //滑动条

    public Scrollbar scrollbar;

    public Dropdown dropdown;          //下拉框

    // Start is called before the first frame update

    void Start()

    {

        //图像Image

        //image.sprite = Resolution.Load();

        //原始图像

        rawImage = GetComponent<RawImage>();

        rawImage.texture = Resources.Load<Texture>("Assets/wallhaven-d66zvm.png") as Texture;

        t.text = "aaa";

        //按钮

        //监听事件的方法一:public方法+外部调用

        //方法二:AddListener

        button.onClick.AddListener(ClickButton);

        //切换toggle

        toggle.onValueChanged.AddListener(ClickToggle);

        //

        slider.onValueChanged.AddListener(ClickSlider);

        scrollbar.onValueChanged.AddListener(ClickSlider);

        //下拉列表

        InitDropdown();

        dropdown.onValueChanged.AddListener(ClickDropdown);

    }

    private void InitDropdown()

    {

        dropdown.options.Clear();

        //创建列表项

        Dropdown.OptionData op1 = new Dropdown.OptionData();

        op1.text = "艾欧尼亚";

        dropdown.options.Add(op1);

        Dropdown.OptionData op2 = new Dropdown.OptionData();

        op1.text = "德玛西亚";

        dropdown.options.Add(op2);

    }

    void ClickButton() {

        if (inputField.text == "123")

        {

            Debug.Log("登陆成功");

        }

        else

        {

            Debug.Log("登录失败");

        }

    }

    void ClickToggle(bool isOn) {       //根据toggle单选框的勾选,实现静音

        

            if (isOn)

            {

                Debug.Log("静音");

            }

            else

            {

                Debug.Log("继续播放");

            }

        }

    void ClickSlider(float value)

        {

            if (value<0.3)

            {

                Debug.Log("");

            }

        }

    void ClickDropdown(int value)

        {

            switch (value)

            {

                case 0:

                    Debug.Log("登录艾欧尼亚");

                    break;

                case 1:

                    Debug.Log("登录德玛西亚");

                    break;

                        }

        }

项目代码6: 实现鼠标移动到以及点击图片上时,图片变色,

/*

 unity事件系统  EvenSystems

 IPointer...Handler

 I...DragHandler

 */

using System.Collections;

using System.Collections.Generic;

using UnityEngine.EventSystems; //事件系统命名空间

using UnityEngine;

using UnityEngine.UI;

using TMPro;

public class Component6 : MonoBehaviour, IPointerClickHandler, IDragHandler, IPointerEnterHandler, IPointerExitHandler

{

    

    public void OnDrag(PointerEventData eventData)

    {

        transform.position = Input.mousePosition;

        //transform.position = eventData.position;

        

    }

    public void OnPointerClick(PointerEventData eventData)

    {

        Debug.Log("点击图片");

    }

    public void OnPointerEnter(PointerEventData eventData)

    {

        GetComponent<Image>().color = Color.green;

    }

    public void OnPointerExit(PointerEventData eventData)

    {

        GetComponent<Image>().color = Color.white;

    }

}

项目代码7:通过滑动条改变音量大小,已经单选框控制静音

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using TMPro;             //新版

using UnityEngine.UI;    //旧版GUI命名空间

using System;

public class Component7 : MonoBehaviour

{

    public Button button;   //创建组件

    public Toggle toggle;

    public Slider slider;

    AudioSource ads;

    // Start is called before the first frame update

    void Start()

    {

        ads = GetComponent<AudioSource>();

        slider.onValueChanged.AddListener(ChangeVolume);  //设置响应

        toggle.onValueChanged.AddListener(PlayMusic);

        

    }

   

    private void PlayMusic(bool arg0)   //通过单选框是否勾选 执行经营

    {

        if (arg0)

        { 

            ads.Pause();

        }

        else

        {

            ads.Play();

        }

    }

    private void ChangeVolume(float arg0)    //通过滑动条的值去改变音量的大小

    {

        ads.volume = arg0;

    }

}

项目代码8:实现数据库的连接

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using MySql.Data.MySqlClient;     //mysql连接器命名空间

using System;

public class Component8 : MonoBehaviour

{   //mysql连接器

    MySqlConnection sqlConnection;

    string strConn = "server=localhost;port=3306;Username=root;password=root;Database=2113042122wxh;charset=utf8;";

    // Start is called before the first frame update

    void Start()

    {

        //打开数据库

        try

        {

            sqlConnection = new MySqlConnection(strConn);

            sqlConnection.Open();

            Debug.Log(sqlConnection.State);

            //增 insert

            insterData();

            //删 delete

            insterdelete();

            //改 update

            insterUpdate();

            //查 SelectData

            insterSelectData();

        }

        catch (System.Exception)

        {

            throw;

        }

        finally

        {

            if (sqlConnection.State .ToString() == "Open") {

                sqlConnection.Close();

                Debug.Log(sqlConnection.State);

            }

            

        }

        

    }

    private void insterSelectData()

    {

        //第一步 写SQL语句

        string strSql = "select * from student where name = '';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteReader()

            using (MySqlDataReader mySqlDataReader = mySqlCommand.ExecuteReader()) ;

            //第四步 从返回的MysqlDataReader中对象中读取数据

        }

    }

    private int insterUpdate()

    {

        //第一步 写SQL语句

        string strSql = "update student set name='张麻子'where name = '黄四郎';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

    }

    private int insterdelete()

    {

        //第一步 写SQL语句

        string strSql = "delete from student where name='张麻子';";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

    }

    private int insterData()

    {

        //第一步 写SQL语句

        string strSql = "insert into student(Sname,Sage) value('张麻子',25);";

        //第二步 创建MySQLcommand对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //第三步 执行ExecuteNonQuery()方法

            return mySqlCommand.ExecuteNonQuery();

        }

        

       

    }

    // Update is called once per frame

项目代码9: 实现登录注册功能

/*

 实现登录注册功能

登录:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码

Y = --->对比密码-->Y=-->关闭数据库--->登录成功

Y = --->对比密码-->N=-->关闭数据库--->登录失败

N = --->关闭数据库--->登录失败

注册:获取输入框中的字符串--->连接并打开数据库--->查找用户名密码

Y =>关闭数据库 --->注册失败

N => 添加用户名密码--->关闭数据库--->注册成功

分解:

1.连接并打开数据库

2.查找用户名密码

3.关闭数据库

4.对比密码

5.添加用户名和密码

接口:登录1234 注册1235

对象:GUI对象 输入框*2 按钮*2,文本

     数据库:MySQLConnection,..Command...Reader

     字符串

*/

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using UnityEngine.UI;

using MySql.Data.MySqlClient;

using System;

using UnityEngine.SceneManagement;

public class Component9 : MonoBehaviour

{

    public InputField inputField1;

    public InputField inputField2;

    public Button button1;

    public Button button2;

    public Text Tip;

    MySqlConnection sqlConnection;

    string strConn = "server=localhost;port=3306;Username=root;password=root;Database=2113042122wxh;charset=utf8;";

    string username;

    string password;

    string usernameDB;

    string passwordDB;

    // Start is called before the first frame update

    void Start()

    {

        button1.onClick.AddListener(Login);

    }

    public void Login()

    {

        username = inputField1.text;

        password = inputField2.text;

        ConnectDB();

        SelectDB(username);

        CloseDB();

        CompareDB(password);

    }

    private void CompareDB(string password)   //对比功能 核对用户名和密码

    {

        if(username == usernameDB&&password == passwordDB)

        {

            SceneManager.LoadScene(1);

        }

        else

        {

            Tip.text = "登录失败";

        }

    }

    private void CloseDB()     //关闭数据库

    {

        if (sqlConnection.State.ToString() == "Open")

        {

            sqlConnection.Close();

            Debug.Log(sqlConnection.State);

        }

    }

    private Boolean SelectDB(String n)    //查询数据库

    {

        string strSql = "select * from tb_user where username = '" + n + "';";

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //执行ExecuteNonQuery()方法

            using (MySqlDataReader reader = mySqlCommand.ExecuteReader())

            {

                while (reader.Read())

                {

                    usernameDB = reader.GetString(1);

                    passwordDB = reader.GetString(2);

                    return true;

                }

            }

        }

        return false;

    }

    public void ConnectDB()           

    {

        try

        {

            sqlConnection = new MySqlConnection(strConn);

            sqlConnection.Open();

            Debug.Log(sqlConnection.State);

        }

        catch (Exception)

        {

            throw;

        }

    }

    public void Register()   //注册功能

    {

        username = inputField1.text;

        password = inputField2.text;

        //连接打开数据库

        ConnectDB();

        //查找用户名密码

        if (SelectDB(username) == true)

        {

            Tip.text = "用户存在";

        }

        else

        {

            if (AddDB(username, password) == 1)

            {

                Tip.text = "添加成功";

            }

            else

            {

                Tip.text = "添加失败";

            }

        }

        CloseDB();

    }

    private int AddDB(string n, string p)   

    {

        //写sql语句

        string strSql = "insert into tb_user(username,password) values ('" + n + "','" + p + "')";

        //创建MySQL对象

        using (MySqlCommand mySqlCommand = new MySqlCommand(strSql, sqlConnection))

        {

            //执行ExecuteNonQuery()方法

            mySqlCommand.ExecuteNonQuery();

        }

        return 1;

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/343463.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何挑选家用交换机 交换机选购攻略分享

现如今&#xff0c;伴随着网络的迅速普及&#xff0c;交换机的“身影”也开始出现在不少普通个人用户家庭中。不过许多家庭用户在挑选交换机时&#xff0c;往往都会将注意力集中到交换机的扩展性能上&#xff0c;他们一味地追求交换机的接口数要多&#xff1b;其实&#xff0c;…

oracle不维护java_宣布 Java 8 停止维护后,Oracle 又毙掉了 JavaOne!

2019 年 1 月之后&#xff0c;Oracle 将不会在网站上发布 Java SE 8 商业使用的更新下载。如需持续获取安全的 bug 修复和安全补丁以及 Java SE 8 或以前版本的稳定性支持&#xff0c;可以通过 Oracle Java SE 高级版&#xff0c;Oracle Java SE 高级桌面&#xff0c;或 Oracle…

工业以太网交换机有多少个快速以太网接口?

工业以太网交换机应用于复杂的工业环境中实时以太网数据传输&#xff0c;以太网交换机是非常的重要&#xff0c;它把握着一个网络的命脉&#xff0c;有人会提出以太网交换机有多少个快速以太网接口&#xff1f;到底该如何进行选择呢&#xff1f;接下来我们就跟随飞畅科技的小编…

java判断是否第一次出现_利用java判断字符首次出现的位置,java替换最后一个特定字符...

利用java判断字符首次出现的位置利用爪哇判断字符首次出现的位置&#xff0c;目的&#xff1a;(学习视频分享&#xff1a;java视频教程实现代码如下&#xff1a;导入Java。util。收藏品&#xff1b;导入Java。util。LinkedList导入Java。util。列表&#xff1b;导入Java。util。…

使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 如果您使用Spring Boot&#xff0c;Spring Cloud和Spring Cloud Config&#xff0c;则…

java ee13_一口气了解多线程及其Java实现

进程&#xff1a;进程就是应用程序在内存中分配的空间&#xff0c;也就是正在运行的程序&#xff0c;各个进程之间不干扰。同时进程保存着程序每一个时刻运行的状态。程序&#xff1a;用某种编程语言(java、python等)编写&#xff0c;能够完成一定任务或者功能的代码集合&#…

apache camel_Apache Camel中的断路器模式

apache camel骆驼通常在分布式环境中用于访问远程资源。 远程服务可能由于各种原因和期间而失败。 对于短时间后暂时不可用且可恢复的服务&#xff0c;重试策略可能会有所帮助。 但是某些服务可能会失败或挂起更长时间&#xff0c;从而使调用应用程序无响应且速度缓慢。 防止级…

matlab 形态学 颗粒_数字图像处理Matlab-形态学图像处理(附代码)

这是一篇基于matlab&#xff0c;数字图像处理的形态学研究与实现的文章&#xff0c;希望能对你产生帮助。我还写了一套《数字图像处理》(冈萨雷斯版本)的学习笔记&#xff0c;欢迎关注我的csdn同名主页&#xff0c;一起学习成长~1.Objectives:1&#xff0e;利用 MATLAB 研究二值…

视频光端机维护三大步骤

视频光端机分为发射端设备和接收端设备&#xff0c;发射端设备和摄像机一样置于室外&#xff0c;工程人员通常是对发射端设备过行维护测试。对于视频光端机的检修工作&#xff0c;我们一般分为三个步骤来进行测试。接下来就由飞畅科技的小编来带大家详细了解下视频光端机维护的…

2021年广东-国家开放大学考试指南(必看)-远程辅助以及微信公众号查题

考前准备工作 一、电脑以及摄像头、浏览器准备 1&#xff1a;一台比较流畅的电脑&#xff0c;这个千万不能马虎&#xff0c;万一考试电脑蓝屏或者卡顿&#xff0c;那是很要命的。 2&#xff1a;摄像头&#xff1a;笔记本有自带的可以用自带的&#xff0c;如果是台式机&#…

飞畅科技——视频光端机用光模块的选型详解

光模块的出现简化了数字视频光端机的设计&#xff0c;我们只要把光模块当作一个具有光电转换功能的部件就可以了。那么针对各种不同的光端机&#xff0c;应该怎样选择相应的光模块呢&#xff1f;接下来就由飞畅科技的小编来为大家详细介绍下视频光端机用光模块的选型&#xff0…

视频监控中的光端机是干什么用的?

现如今&#xff0c;随着社会的进步和经济的发展&#xff0c;人民生活开始富裕&#xff0c;经济宽裕的家庭用户已开始考虑使用监控产品来保护自己&#xff0c;监控已经呈现融入家庭生活的趋势。就数字监控而言&#xff0c;虽然是后起之秀&#xff0c;但依然是现阶段发展趋势。光…

每个Java开发人员都应该知道的10个基本工具

大家好&#xff0c;我们已经到了2019年的第二个月&#xff0c;我相信你们所有人都已经为2019年的学习目标以及如何实现这些目标制定了目标。 我一直在撰写一系列文章&#xff0c;为您提供一些知识&#xff0c;使您可以学习和改进以成为2019年更好的全方位开发人员&#xff0c;例…

spring集成jndi_Spring应用程序与JNDI连接池的集成测试

spring集成jndi我们都知道&#xff0c;无论何时连接到数据库&#xff0c;都需要使用连接池。 所有使用JDBC 4类的现代驱动程序都支持它。 在本文中&#xff0c;我们将概述Spring应用程序中的连接池&#xff0c;以及如何在非JEE环境&#xff08;例如测试&#xff09;中处理相同的…

数字光端机和模拟视频光端机的六个不同点

说到模拟视频光端机与数字光端机的不同之处&#xff0c;在这里飞畅科技的小编要介绍六点不一样的地方来详细讲解模拟视频光端机与数字光端机的不同。模拟视频光端机与数字光端机究竟有何区别&#xff0c;这也是众多用户所关心的确问题&#xff0c;本文从以下几个方面进行如下论…

在硒中按TagName定位元素

硒定位器是处理网页上的元素时的关键。 从ID&#xff0c;名称&#xff0c;类&#xff0c;标记名&#xff0c;XPath&#xff0c;CSS选择器等定位器列表中&#xff0c;可以根据需要选择其中任何一种&#xff0c;然后在网页上找到Web元素。 由于与tagName或linktext相比&#xff0…

Java注解参数类型枚举值_EffectiveJava-5-枚举和注解

用enum代替int常量1. int枚举&#xff1a;引入枚举前&#xff0c;一般是声明一组具名的int常量&#xff0c;每个常量代表一个类型成员&#xff0c;这种方法叫做int枚举模式。int枚举模式是类型不安全的&#xff0c;例如下面两组常量&#xff1a;性别和动物种类&#xff0c;二者…

工业交换机:如果出现了物理性故障该怎么判断?

一般工业交换机出现故障大致可以分为&#xff1a;软性能故障和物理性故障。软性能故障一般是指工业交换机在研发设计方面出现的问题。今天就由飞畅科技的小编来给大家聊聊工业交换机物理性故障该怎么判断&#xff1f;一起来看看吧&#xff01; 物理层故障主要是指交换机本身的…

q7goodies事例_Java 8 Friday Goodies:精益并发

q7goodies事例在Data Geekery &#xff0c;我们喜欢Java。 而且&#xff0c;由于我们真的很喜欢jOOQ的流畅的API和查询DSL &#xff0c;我们对Java 8将为我们的生态系统带来什么感到非常兴奋。 我们已经写了一些关于Java 8好东西的博客 &#xff0c;现在我们觉得是时候开始一个…

工业交换机的外壳设计重要吗?

工业交换机一般使用在环境比较恶劣的地方&#xff0c;例如工厂等&#xff0c;为了让工业交换机更好的使用&#xff0c;工业交换机的外壳设计起到至关重要的作用&#xff0c;工业交换机的外壳可以更好的保护工业交换机的使用&#xff0c;那么如何才能选到实用的工业交换机外壳呢…