中北大学 软件构造 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.rhkb.cn/news/226338.html

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

相关文章

HCIA-Datacom题库(自己整理分类的)——OSPF协议多选

ospf的hello报文功能是 邻居发现 同步路由器的LSDB 更新LSA信息 维持邻居关系 下列关于OSPF区域描述正确的是 在配置OSPF区域正确必须给路由器的loopback接配置IP地址 所有的网络都应在区域0中宣告 骨干区域的编号不能为2 区域的编号范围是从0.0.0.0到255.255.255.255…

Python基础语法总结

1.每条语句结束不需要分号(也可以加上), 直接换行, 注意: 如果两行代码写一行, 则必须加分号. 2.定义变量不需要指定类型(如果需要写类型, 需要在变量名后面加": 类型, 这个写法只是方便读代码). 3.变量名大小写敏感. 4.查看变量类型: type(变量名). 5.Python中的int表…

Grafana Loki 组件介绍

Loki 日志系统由以下3个部分组成&#xff1a; Loki是主服务器&#xff0c;负责存储日志和处理查询。Promtail是专为loki定制的代理&#xff0c;负责收集日志并将其发送给 loki 。Grafana用于 UI展示。 Distributor Distributor 是客户端连接的组件&#xff0c;用于收集日志…

目标检测-One Stage-YOLOv1

文章目录 前言一、YOLOv1的网络结构和流程二、YOLOv1的损失函数三、YOLOv1的创新点总结 前言 前文目标检测-Two Stage-Mask RCNN提到了Two Stage算法的局限性&#xff1a; 速度上并不能满足实时的要求 因此出现了新的One Stage算法簇&#xff0c;YOLOv1是目标检测中One Stag…

小梅哥Xilinx FPGA学习笔记18——专用时钟电路 PLL与时钟向导 IP

目录 一&#xff1a;IP核简介&#xff08;具体可参考野火FPGA文档&#xff09; 二&#xff1a; 章节导读 三&#xff1a;PLL电路原理 3.1 PLL基本实现框图 3.2 PLL倍频实现 3.3 PLL分频实现 四: 基于 PLL 的多时钟 LED 驱动设计 4.1 配置 Clocking Wizard 核 4.2 led …

腾讯云服务器和轻量服务器选哪个好(各自的优势区别)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

Python入门-字符串Str

字符串 字符串 是Python中的 不可变 数据类型 1.字符串相关处理方法 大小写转换 # 大小写转换 s1HelloWorld new_s2s1.lower() print(s1,new_s2)new_s3s1.upper() print(new_s3)结果&#xff1a; D:\Python_Home\venv\Scripts\python.exe D:\Python_Home\chap6\示例6-1字符…

TICS Pro 配置时钟芯片

TICS Pro为TI公司提供的配置TI公司时钟芯片的软件&#xff0c;下载链接: TICS Pro. 软件使用 首先在设置选择找到需要配置的芯片&#xff0c;本文以LMX2571为例 红框中的前3行都可以设置芯片&#xff0c;第一个是选项卡设置&#xff0c;第二个是寄存器设置&#xff0c;第三个…

开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置

Ant Design Pro 介绍 Ant Design Pro 是一个开箱即用的企业级前端解决方案&#xff0c;基于 Ant Design 设计体系&#xff0c;提供了丰富的组件和功能&#xff0c;帮助开发者更快速地开发和部署企业级应用。 Ant Design Pro 使用 React、umi 和 dva 这三个主要的前端开发技术…

腾讯云轻量服务器和云服务器区别对比(超详细)

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

JVM篇:JVM的简介

JVM简介 JVM全称为Java Virtual Machine&#xff0c;翻译过来就是java虚拟机&#xff0c;Java程序&#xff08;Java二进制字节码&#xff09;的运行环境 JVM的优点&#xff1a; Java最大的一个优点是&#xff0c;一次编写&#xff0c;到处运行。之所以能够实现这个功能就是依…

张江智荟毁约offer

毕业8年后&#xff0c;找工作被国企歧视学历&#xff01;已经收到了offer&#xff0c;在入职前一周被通知要撤回offer&#xff0c;拒绝录用&#xff0c;理由居然是他们只要本科211以上的人 这是我今天&#xff08;2023-12-26&#xff09;亲身经历的事&#xff0c;听说过面试前…

elasticsearch-hadoop.jar 6.8版本编译异常

## 背景 重新编译 elasticsearch-hadoop 包&#xff1b; GitHub - elastic/elasticsearch-hadoop at 6.8 编译 7.17 版本时很正常&#xff0c;注意设置下环境变量就好&#xff0c;JAVA8_HOME/.... 编译 6.8 版本时&#xff08;要求jdk8 / jdk9&#xff09;&#xff0c;出现…

docker学习(十八、network介绍)

文章目录 熟悉的ifconfigDocker 网络的使用方式Docker 网络的作用Docker 网络模式注意事项 首先&#xff0c;我们要知道什么是 Docker 网络。简单来说&#xff0c;它就是 Docker 中用于实现容器间通信的一个东西。 network相关内容&#xff1a; docker学习&#xff08;十八、ne…

网络隔离后,怎样建立高效安全的数据安全交换通道?

数据安全对企业生存发展有着举足轻重的影响&#xff0c;数据资产的外泄、破坏都会导致企业无可挽回的经济损失和核心竞争力缺失。数据流动才能让其释放价值&#xff0c;想要保护企业核心资产&#xff0c;就要实现数据安全交换。 很多企业为了防止知识产权、商业机密数据泄露&am…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多&#xff0c;广告的点击量就越高&#xff0c;进而带来访问数的增加。 2、定义模型 定义一个函数&#xff1a;一次函数 y ax b &#xff08;a 是斜率、b 是截距&#xff09; 定义函数&#xff1a; 3、最小二乘法 例子&#xff1a; 用随便确定的参…

elasticsearch系列七:聚合查询

概述 今天咱们来看下es中的聚合查询&#xff0c;在es中聚合查询分为三大类bucket、metrics、pipeline&#xff0c;每一大类下又有十几种小类&#xff0c;咱们各举例集中&#xff0c;有兴许的同学可以参考官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/refere…

使用pytorch搭建ResNet并基于迁移学习训练

这里的迁移学习方法是载入预训练权重的方法 net resnet34()# load pretrain weights# download url: https://download.pytorch.org/models/resnet34-333f7ec4.pthmodel_weight_path "./resnet34-pre.pth"assert os.path.exists(model_weight_path), "file {}…

Adobe Photoshop各版本安装指南

下载链接 https://pan.baidu.com/s/1b9BFDSIVLGXY4e0r5a5Srg?pwd0531 #2024版 1.鼠标右击【PS2024(64bit)】压缩包&#xff08;win11及以上系统需先点击“显示更多选项”&#xff09;【解压到 PS2024(64bit)】 2.打开解压后的文件夹&#xff0c;鼠标右击【Set-up】选择【以管…

HarmonyOS4.0系统性深入开发07创建一个ArkTS卡片

创建一个ArkTS卡片 在已有的应用工程中&#xff0c;创建ArkTS卡片&#xff0c;具体操作方式如下。 创建卡片。 根据实际业务场景&#xff0c;选择一个卡片模板。 在选择卡片的开发语言类型&#xff08;Language&#xff09;时&#xff0c;选择ArkTS选项&#xff0c;然后单…