中北大学 软件构造 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;

}

}

相关推荐
万兴丶3 小时前
Unnity IOS安卓启动黑屏加图(底图+Logo gif也行)
android·unity·ios
Clank的游戏栈4 小时前
Unity DOTS系列之IJobChunk来迭代处理数据
游戏·3d·unity
_oP_i18 小时前
Unity 3D 脚本中的常用函数
unity·游戏引擎
larito19 小时前
unity 高性能对象池解决方案
unity
TO_ZRG1 天前
使用jenkins打包unity工程
运维·unity·jenkins
dangoxiba2 天前
【Unity学习心得】如何使用Unity制作“饥荒”风格的俯视角2.5D游戏
游戏·unity·c#·游戏引擎
cyr___2 天前
Unity教程(十六)敌人攻击状态的实现
学习·游戏·unity·游戏引擎
优梦创客2 天前
《黑神话悟空》开发框架与战斗系统解析
unity·游戏开发·黑神话悟空·战斗系统·解包
仙魁XAN2 天前
Unity 设计模式 之 创造型模式-【工厂方法模式】【抽象工厂模式】
unity·设计模式·工厂方法模式·抽象工厂模式
躺下睡觉~3 天前
Unity-Transform类-父子关系
java·unity·游戏引擎