C#笔记——【面向对象实战】(一)基于OPP设计新体育彩票选号器
(一)项目概述和效果展示
(二)项目面向对象分析
1)基于OOP(面向对象编程)设计项目的基本方法
项目的类型
- 基于OOP设计小型项目(可以使用数据库,也可以不使用数据库而采用其他数据源)
- 没有数据库的项目:要求使用OOP思想和方法,完成项目各个类的设计,确定各个类之间的关系;【纯面向对象】
- 有数据库的项目:项目的框架和思路是相对固定的,在框架的约束下开发相对会更容易;
- 常见框架:三层架构、 三层架构+MVC;
核心问题:
- 一个项目确定多少个类:
- 名词分析法:先找到关键的名词(主题中),然后对名词进行筛选。筛选的依据:抽取的类应该具备相关的属性和方法。如果一个名称无法找到相关的属性和方法,则该名称不能抽象成类;以此为核心,能都辅助完成功能的辅助类;
- 头脑风暴法:大家一起商量,各抒己见,按照少数服从多数的方法进行筛选;
- 每个类有什么要求:
- 属性选择的依据:主要是考虑这个对象应该提供哪些数据;【临时保存的数据】【属性用于交换数据】
- 方法:依据相关的核心功能找到,然后依据和类的相关性,放到对应的类里面;
注意:不管是属性还是方法,务必遵循面向对象各种原则的使用,尤其是“对象职责明确原则”。
- 类之间的关系怎样确定:
- 一对一的关系:一个类的对象作为另一个类的属性。数据库表也会有一对一的关系;
- 一对多的关系:一个类的多个对象作为另一个类的属性。通常这个属性是集合类型(List、Dictionary<k,v>)。数据表中这种关系体现为两个表之间的“主外键关系”;
(三)无边框窗体设计和移动方法
- 去掉边框:将属性设置为None;【默认情况下不能移动】
- 设计外观的时候可以直接使用RGB值
- Windows窗体采取重绘的方式,使用图片的话绘制的过程会出现闪的过程,因此,体验不好;
- 使用Panel对控件集合分组;
- 使用Dock控制位置:
- 使用PictureBox放置一张图片,这样使用SizeMode属性来设置这个图片的放置方式;
由于没有边框,需要单独使用鼠标事件实现窗体的移动:
将这三个鼠标事件分别添加进窗体,以及两个Panel的事件中即可;
#region 拖动窗体的实现private Point mouseOff;//鼠标移动位置变量private bool leftFlag;//标签是否为左键private void FrmMain_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //得到变量的值leftFlag = true; //点击左键按下时标注为true;}}private void FrmMain_MouseMove(object sender, MouseEventArgs e){if (leftFlag){Point mouseSet = Control.MousePosition;mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置Location = mouseSet;}}private void FrmMain_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}#endregion
(四)编写选号器类,实现随机展示号码
选号器类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace WFAppDemo
{/// <summary>/// 选号器类/// </summary>public class Selector{private Random objRandom = new Random();//生成随机数【成员变量】//可以将生成的随机号码暂存在一个属性中,这样可以直接从暂存的属性中添加到选中//属性【用于临时存储数据】/// <summary>/// 选择的号码(临时存储,后面打印完毕以后会保存起来,用来兑奖)/// </summary>public List<string[]> SelectedNums { get; set; }//方法(构造方法、实例方法)/// <summary>/// 构造方法(初始化成员)/// </summary>public Selector(){this.SelectedNums = new List<string[]>();}/// <summary>/// 生成7个随机号码/// </summary>/// <returns></returns>public string[] CreateNum(){string[] numList = new string[7];for (int i = 0; i < 7; i++){numList[i] = objRandom.Next(10).ToString();}return numList;}public void CreatGroupNums(int Count){SelectedNums.Clear();//清空已经选号的集合for (int i = 0; i < Count; i++){SelectedNums.Add(CreateNum());//增加一组}}/// <summary>/// 获取打印格式的号码列表/// </summary>/// <returns></returns>public List<string> GetPrintedNums(){List<string> numList = new List<string>();for (int i = 0; i < this.SelectedNums.Count; i++){string printedNum = string.Empty;if(i<9){printedNum = "第0" + (i + 1) + "组:";}else{printedNum = "第" + (i + 1) + "组:";}for (int j = 0; j < this.SelectedNums[i].Length; j++){printedNum += this.SelectedNums[i][j] + " ";if (j == 5) printedNum += " "; //最后一个加大空格}numList.Add(printedNum);}return numList; }}
}
FrmMain主类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WFAppDemo
{public partial class FrmMain : Form{//创建选号器对象private Selector objSelector = new Selector();public FrmMain(){InitializeComponent();//禁用相关按钮this.btnSelect.Enabled = false;this.btnPrint.Enabled = false;this.btnClear.Enabled = false;this.btnDel.Enabled = false;}#region 拖动窗体的实现private Point mouseOff;//鼠标移动位置变量private bool leftFlag;//标签是否为左键private void FrmMain_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //得到变量的值leftFlag = true; //点击左键按下时标注为true;}}private void FrmMain_MouseMove(object sender, MouseEventArgs e){if (leftFlag){Point mouseSet = Control.MousePosition;mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置Location = mouseSet;}}private void FrmMain_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}#endregion#region 最小化、关闭private void btnClose_Click(object sender, EventArgs e){this.Close();}private void btnMin_Click(object sender, EventArgs e){this.WindowState = FormWindowState.Minimized;}#endregion/// <summary>/// 启动选号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnStart_Click(object sender, EventArgs e){this.RandomTimer.Start();//设置相关按钮this.btnStart.Enabled = false;this.btnSelect.Enabled = true;}/// <summary>/// 定时生成随机号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void RandomTimer_Tick(object sender, EventArgs e){string[] numList = objSelector.CreateNum();//生成随机号//显示随机号this.lbNum1.Text = numList[0];this.lbNum2.Text = numList[1];this.lbNum3.Text = numList[2];this.lbNum4.Text = numList[3];this.lbNum5.Text = numList[4];this.lbNum6.Text = numList[5];this.lbNum7.Text = numList[6];}/// <summary>/// 确认选号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSelect_Click(object sender, EventArgs e){this.RandomTimer.Stop(); //定时器停止string[] selectedNum = //获取定时器停止时的号码数字,放在数组中{this.lbNum1.Text,this.lbNum2.Text,this.lbNum3.Text,this.lbNum4.Text,this.lbNum5.Text,this.lbNum6.Text,this.lbNum7.Text, };//使用暂存的属性,则可以直接读取objSelector.SelectedNums.Add(selectedNum); //保存当前选中号码ShowSelectedNums(); //显示选中的号码}/// <summary>/// 显示已经选中的号码/// </summary>private void ShowSelectedNums(){this.lbNumberList.Items.Clear();this.lbNumberList.Items.AddRange(this.objSelector.GetPrintedNums().ToArray());//按钮启用this.btnStart.Enabled = true;this.btnPrint.Enabled = true;this.btnClear.Enabled = true;this.btnDel.Enabled = true;}/// <summary>/// 随机组选/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnGroupSelect_Click(object sender, EventArgs e){this.RandomTimer.Stop(); //定时器停止,因为可能处于随机选号状态//验证是数字this.objSelector.CreatGroupNums(Convert.ToInt32(this.txtGroup.Text.Trim()));ShowSelectedNums();}#region 获取并显示手写数字/// <summary>/// 手写号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnWriteSelf_Click(object sender, EventArgs e){//首先必须验证每个文本框都是数字string[] selectedNum = //获取手写数字{this.txtNum1.Text,this.txtNum2.Text,this.txtNum3.Text,this.txtNum4.Text,this.txtNum5.Text,this.txtNum6.Text,this.txtNum7.Text,};//使用暂存的属性,则可以直接读取objSelector.SelectedNums.Add(selectedNum); //保存当前选中号码ShowSelectedNums(); //显示选中的号码}#endregion/// <summary>/// 删除当前所选的号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnDel_Click(object sender, EventArgs e){if (this.lbNumberList.Items.Count == 0 || this.lbNumberList.SelectedItem == null) return;int index = this.lbNumberList.SelectedIndex; //获取所选中行的索引objSelector.SelectedNums.RemoveAt(index); //在选中号码集合中删除指定号码if(objSelector.SelectedNums.Count==0) //判断是不是全部删除{this.btnClear.Enabled = false;this.btnDel.Enabled = false;this.btnPrint.Enabled = false;}ShowSelectedNums();}/// <summary>/// 清空所有的号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnClear_Click(object sender, EventArgs e){this.lbNumberList.Items.Clear(); //从界面中清楚显示this.objSelector.SelectedNums.Clear(); //从选号器集合中清空//号码复位this.lbNum1.Text = "0";this.lbNum2.Text = "0";this.lbNum3.Text = "0";this.lbNum4.Text = "0";this.lbNum5.Text = "0";this.lbNum6.Text = "0";this.lbNum7.Text = "0";this.txtNum1.Text = "0";this.txtNum2.Text = "0";this.txtNum3.Text = "0";this.txtNum4.Text = "0";this.txtNum5.Text = "0";this.txtNum6.Text = "0";this.txtNum7.Text = "0";//禁用相关按钮this.btnSelect.Enabled = false;this.btnPrint.Enabled = false;this.btnSelect.Enabled = false; this.btnClear.Enabled = false;this.btnDel.Enabled = false;}}
}
(五)实现打印
实现打印需要使用条形码和二维码;我们使用现成的 dll 即可;首先要添加引用:
代码实现:
选号器类:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WFAppDemo.Models;
using System.Runtime.Serialization.Formatters.Binary;namespace WFAppDemo
{/// <summary>/// 选号器类/// </summary>public class Selector{Fath.BarcodeX barCode = new Fath.BarcodeX(); //创建条形码生成对象#regionprivate Random objRandom = new Random();//生成随机数【成员变量】//可以将生成的随机号码暂存在一个属性中,这样可以直接从暂存的属性中添加到选中//属性【用于临时存储数据】/// <summary>/// 选择的号码(临时存储,后面打印完毕以后会保存起来,用来兑奖)/// </summary>public List<string[]> SelectedNums { get; set; }//方法(构造方法、实例方法)/// <summary>/// 构造方法(初始化成员)/// </summary>public Selector(){this.SelectedNums = new List<string[]>();}/// <summary>/// 生成7个随机号码/// </summary>/// <returns></returns>public string[] CreateNum(){string[] numList = new string[7];for (int i = 0; i < 7; i++){numList[i] = objRandom.Next(10).ToString();}return numList;}public void CreatGroupNums(int Count){SelectedNums.Clear();//清空已经选号的集合for (int i = 0; i < Count; i++){SelectedNums.Add(CreateNum());//增加一组}}/// <summary>/// 获取打印格式的号码列表/// </summary>/// <returns></returns>public List<string> GetPrintedNums(){List<string> numList = new List<string>();for (int i = 0; i < this.SelectedNums.Count; i++){string printedNum = string.Empty;if(i<9){printedNum = "第0" + (i + 1) + "组:";}else{printedNum = "第" + (i + 1) + "组:";}for (int j = 0; j < this.SelectedNums[i].Length; j++){printedNum += this.SelectedNums[i][j] + " ";if (j == 5) printedNum += " "; //最后一个加大空格}numList.Add(printedNum);}return numList; }#endregion#region 打印部分,主要是定位左边界和上边界的距离/// <summary>/// 打印彩票/// </summary>public void PrintLottery(System.Drawing.Printing.PrintPageEventArgs e, string serialNum, List<string> numList){//生成条形码barCode.Text = serialNum;//条码数据barCode.Symbology = Fath.bcType.Code128;//设置条码格式barCode.ShowText = true;//同时显示文本 e.Graphics.DrawImage(barCode.Image(240, 50), new Point(20, 5));//画条形码//生成彩票信息float left = 2; //打印区域的左边界float top = 70;//打印区域的上边界Font titlefont = new Font("仿宋", 10);//标题字体Font font = new Font("仿宋", 8);//内容字体 e.Graphics.DrawString("天津百万奖彩票中心", titlefont, Brushes.Blue, left + 20, top, new StringFormat());//打印标题//画一条分界线Pen pen = new Pen(Color.Green, 1);e.Graphics.DrawLine(pen, new Point((int)left - 2, (int)top + 20), new Point((int)left + (int)180, (int)top + 20));//循环打印选号for (int i = 0; i < numList.Count; i++){e.Graphics.DrawString(numList[i], font, Brushes.Blue, left,top + titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * i + 12, new StringFormat());}//画一条分界线 float topPoint = titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * (numList.Count) + 22;e.Graphics.DrawLine(pen, new Point((int)left - 2, (int)top + (int)topPoint),new Point((int)left + (int)180, (int)top + (int)topPoint));//打印时间string time = "购买时间:" + DateTime.Now.ToString("yyy-MM-dd HH:mm:ss");e.Graphics.DrawString(time, font, Brushes.Blue, left, top + titlefont.GetHeight(e.Graphics)+ font.GetHeight(e.Graphics) * (numList.Count + 1) + 12, new StringFormat());//二维码图片left和top坐标int qrcodetop = (int)(top + titlefont.GetHeight(e.Graphics) + font.GetHeight(e.Graphics) * (numList.Count + 3) + 12);int qrcodeleft = (int)left + 32;//生成二维码图片// Image bmp = QRcodeCreator.GetQRCodeBmp("http://www.xiketang.com/duijiang/query?id=" + serialNum);//直接添加流水号,将来从网站直接查询Image bmp = QRcodeCreator.GetQRCodeBmp("http://www.xiketang.com");//打印e.Graphics.DrawImage(bmp, new Point(qrcodeleft, qrcodetop));//不同的URL图片大小不同,可以根据需要调整left坐标e.Graphics.DrawString("扫描二维码可直接查询兑奖结果", font, Brushes.Blue, left, qrcodetop + bmp.Height + 10, new StringFormat());}/// <summary>/// 保存用户所选彩票信息(实际开发中可以保存在数据库中)/// </summary>/// <param name="serialNum"></param>internal void Save(string serialNum){DirectoryInfo dir = new DirectoryInfo("numList");if (!dir.Exists){dir.Create();}string path = @"numList\" + serialNum + ".num";FileStream fs = new FileStream(path, FileMode.Create);System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new BinaryFormatter();bf.Serialize(fs, this.SelectedNums);fs.Close();}#endregion}
}
FrmMain类
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Printing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace WFAppDemo
{public partial class FrmMain : Form{//创建选号器对象private Selector objSelector = new Selector();private PrintDocument printDoc = new PrintDocument(); //创建打印对象public FrmMain(){InitializeComponent();//禁用相关按钮this.btnSelect.Enabled = false;this.btnPrint.Enabled = false;this.btnClear.Enabled = false;this.btnDel.Enabled = false;//关联打印对象的事件//this.printDoc.PrintPage += new PrintPageEventHandler(this.LotteryPrintPage);}#region 拖动窗体的实现private Point mouseOff;//鼠标移动位置变量private bool leftFlag;//标签是否为左键private void FrmMain_MouseDown(object sender, MouseEventArgs e){if (e.Button == MouseButtons.Left){mouseOff = new Point(-e.X, -e.Y); //得到变量的值leftFlag = true; //点击左键按下时标注为true;}}private void FrmMain_MouseMove(object sender, MouseEventArgs e){if (leftFlag){Point mouseSet = Control.MousePosition;mouseSet.Offset(mouseOff.X, mouseOff.Y); //设置移动后的位置Location = mouseSet;}}private void FrmMain_MouseUp(object sender, MouseEventArgs e){if (leftFlag){leftFlag = false;//释放鼠标后标注为false;}}#endregion#region 最小化、关闭private void btnClose_Click(object sender, EventArgs e){this.Close();}private void btnMin_Click(object sender, EventArgs e){this.WindowState = FormWindowState.Minimized;}#endregion/// <summary>/// 启动选号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnStart_Click(object sender, EventArgs e){this.RandomTimer.Start();//设置相关按钮this.btnStart.Enabled = false;this.btnSelect.Enabled = true;}/// <summary>/// 定时生成随机号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void RandomTimer_Tick(object sender, EventArgs e){string[] numList = objSelector.CreateNum();//生成随机号//显示随机号this.lbNum1.Text = numList[0];this.lbNum2.Text = numList[1];this.lbNum3.Text = numList[2];this.lbNum4.Text = numList[3];this.lbNum5.Text = numList[4];this.lbNum6.Text = numList[5];this.lbNum7.Text = numList[6];}/// <summary>/// 确认选号/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnSelect_Click(object sender, EventArgs e){this.RandomTimer.Stop(); //定时器停止string[] selectedNum = //获取定时器停止时的号码数字,放在数组中{this.lbNum1.Text,this.lbNum2.Text,this.lbNum3.Text,this.lbNum4.Text,this.lbNum5.Text,this.lbNum6.Text,this.lbNum7.Text, };//使用暂存的属性,则可以直接读取objSelector.SelectedNums.Add(selectedNum); //保存当前选中号码ShowSelectedNums(); //显示选中的号码}/// <summary>/// 显示已经选中的号码/// </summary>private void ShowSelectedNums(){this.lbNumberList.Items.Clear();this.lbNumberList.Items.AddRange(this.objSelector.GetPrintedNums().ToArray());//按钮启用this.btnStart.Enabled = true;this.btnPrint.Enabled = true;this.btnClear.Enabled = true;this.btnDel.Enabled = true;}/// <summary>/// 随机组选/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnGroupSelect_Click(object sender, EventArgs e){this.RandomTimer.Stop(); //定时器停止,因为可能处于随机选号状态//验证是数字this.objSelector.CreatGroupNums(Convert.ToInt32(this.txtGroup.Text.Trim()));ShowSelectedNums();}#region 获取并显示手写数字/// <summary>/// 手写号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnWriteSelf_Click(object sender, EventArgs e){//首先必须验证每个文本框都是数字string[] selectedNum = //获取手写数字{this.txtNum1.Text,this.txtNum2.Text,this.txtNum3.Text,this.txtNum4.Text,this.txtNum5.Text,this.txtNum6.Text,this.txtNum7.Text,};//使用暂存的属性,则可以直接读取objSelector.SelectedNums.Add(selectedNum); //保存当前选中号码ShowSelectedNums(); //显示选中的号码}#endregion/// <summary>/// 删除当前所选的号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnDel_Click(object sender, EventArgs e){if (this.lbNumberList.Items.Count == 0 || this.lbNumberList.SelectedItem == null) return;int index = this.lbNumberList.SelectedIndex; //获取所选中行的索引objSelector.SelectedNums.RemoveAt(index); //在选中号码集合中删除指定号码if(objSelector.SelectedNums.Count==0) //判断是不是全部删除{this.btnClear.Enabled = false;this.btnDel.Enabled = false;this.btnPrint.Enabled = false;}ShowSelectedNums();}/// <summary>/// 清空所有的号码/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnClear_Click(object sender, EventArgs e){this.lbNumberList.Items.Clear(); //从界面中清楚显示this.objSelector.SelectedNums.Clear(); //从选号器集合中清空//号码复位this.lbNum1.Text = "0";this.lbNum2.Text = "0";this.lbNum3.Text = "0";this.lbNum4.Text = "0";this.lbNum5.Text = "0";this.lbNum6.Text = "0";this.lbNum7.Text = "0";this.txtNum1.Text = "0";this.txtNum2.Text = "0";this.txtNum3.Text = "0";this.txtNum4.Text = "0";this.txtNum5.Text = "0";this.txtNum6.Text = "0";this.txtNum7.Text = "0";//禁用相关按钮this.btnSelect.Enabled = false;this.btnPrint.Enabled = false;this.btnSelect.Enabled = false; this.btnClear.Enabled = false;this.btnDel.Enabled = false;}/// <summary>/// 使用小票打印机打印/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void btnPrint_Click(object sender, EventArgs e){this.printDoc.Print();}/// <summary>/// 实现打印的具体方法/// </summary>/// <param name="sender"></param>/// <param name="e"></param>private void LotteryPrintPage_PrintPage(object sender, PrintPageEventArgs e){string serialNum = DateTime.Now.ToString("yyyyMMddHHmmssms");//流水号(生成条码使用)this.objSelector.PrintLottery(e, serialNum, objSelector.GetPrintedNums());//调用前面编写的打印方法objSelector.Save(serialNum);//同时保存所选号码btnClear_Click(null, null);//打印完毕后清空}}
}
C#笔记——【面向对象实战】(一)基于OPP设计新体育彩票选号器相关推荐
- 基于Python实现体育彩票选号器功能代码实例
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接:好看站 http://www.nrso.net/ 高州阳光论坛https://www.hnthzk.com/ 一 ...
- [嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计【2018年给力项目】
[嵌入式Linux项目实战开发]基于QT4.7.4的音乐播放器实现与设计[2018年给力项目]是[创科之龙]团队aiku嵌入式视频教程系列制作的现有的音乐播放器. 主要功能实现: 1.新建工程,基类选 ...
- R语言dplyr包使用case_when函数和mutate函数生成新的数据列实战:基于单列生成新的数据列、基于多列生成新的数据列
R语言dplyr包使用case_when函数和mutate函数生成新的数据列实战:基于单列生成新的数据列.基于多列生成新的数据列 目录
- mysql彩票设计_彩票选号软件的设计与实现(MySQL)(附答辩记录)
彩票选号软件的设计与实现(MySQL)(附答辩记录)(包含选题审批表,任务书,开题报告,中期报告,毕业论文10200字,程序代码,数据库) 摘 要:本系统是为了实现彩票是如何选号,包括号码的生产与删 ...
- 基于Python设计10以内乘法出题器
1. 项目背景 有正在上小学孩子的父母,就会遇到出乘法口算题的困扰.本文希望使用Python解决出乘法题的困扰. 2.项目函数概览 (1)随机生成乘法题 equation_produce() (2)随 ...
- 基于Java设计一个短链接生成系统
相信大家在生活中会收到很多短信,而这些短信都有一个特点是链接很短.这些链接背后的原理是什么呢?怎么实现的?小编今天就带你们详细了解一下 我们知道,短信有些是有字数限制的,直接放一个带满各种参数的链接, ...
- 双色球随机选号器界面设计及功能实现
文章目录 1 双色球随机选号器界面设计 1.1 双色球随机选号器界面设计 2 双色球随机选号器代码实现 2.1 项目文件结构 2.2 代码实现 1 双色球随机选号器界面设计 1.1 双色球随机选号器界 ...
- 机器学习实战 基于_机器学习实战:基于Scikit-Learn和TensorFlow—第四章笔记
机器学习实战:基于Scikit-Learn和TensorFlow---第四章笔记 一.学习目标 之前用了那么多的机器学习的模型,但是它们各自的训练算法在很大程度上还是一个黑匣子,我们对对系统内部的实现 ...
- 【Computer Organization笔记10】单周期CPU设计:基于7条MIPS指令的数据通路
本次笔记内容: P19 计算机组成原理(19) P20 计算机组成原理(20) 本节课对应幻灯片: 组成原理24 singlecycle.pptx 基于上节课的7条MIPS指令的数据通路,分别针对7条 ...
最新文章
- jpanel不使用jframe保存的图片为空_使用DataBinding还在为数据处理头疼?这篇文章帮你解决问题
- 深入浅出神经网络的改进方法!
- JS改变input的value值不触发onchange事件解决方案 (转)
- Flex4/Flash多文件上传(带进度条)实例分享
- Java核心技术笔记 异常、断言和日志
- Redola.Rpc 集成 Consul 服务发现
- controller是什么意思_SpringMVC是什么??
- JAVA笔记-Oracle中存储过程编写类似于MySQL的replace功能
- base64和hex
- 三层交换机配置DHCP的解决方案
- 【训练计划】--2019-05
- 谷歌插件如何下载到本地
- 虚幻引擎UE4源码编译安装(x86,arm64平台)
- 系列课程 ElasticSearch 之第 8 篇 —— SpringBoot 整合 ElasticSearch 做查询(分页查询)
- [Python]ImportError: This platform lacks a functioning sem_open implementation, therefore, the requi
- 为什么电子计算机奏出美妙的交响,《延安,我把你追寻》教学设计
- 日本留学签证 申请途径(通过中介)
- Warpaffine
- 程序员即装逼又实用的Cmd命令行
- linux重装出现cannot load file 5555h,装系统出现error cannot load file code 5555h 的解决
热门文章
- 南开大学计算机科学导论答案,南开大学计算机科学导论复习资料
- 程序员值得收藏的网站(持续更新)
- Escript氨基酸对比图怎么看_23张和田玉真假皮色对比图,看懂了再也不怕被坑
- Google浏览器设置跳转到新的页面
- SpringBoot分布式生成递增单号
- 网络方式打电话 知道这些才更省钱
- matlab中的级数怎默算_matlab无穷级数的计算
- 论文阅读Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift
- DIV不换行与DIV换行 DIV默认自动换行
- error: invalid type argument of unary ‘*‘ (have ‘int‘) *__first = __tmp;