怎么可以错过(c#程序设计实例)c#程序设计实用教程,C#程序设计.VR基础教程,java selectionmode,
C#程序设计
第一章:C#基础 视频:
https://edu.csdn.net/course/detail/27107一.知识点
1.C#的概念和了解
2.语法格式
3.案例实践
二.重点
2.1 语法格式
三.内容
3.1 C#:C sharp(利器).C-->C++-->C++++,Java都来自于C系列,诞生于C++基础之上开发的。
MS微软公司开发的,现在C#也实现了跨平台,有点晚了。
C#开发最初的时候,只适合于微软的平台(windows系列,xp、2000、7 10等),设计的程序,不仅仅是windows系列
,还有Linux、Mac、Unix、安卓等等操作系统。
应用场景:最多的是C/S系列程序(软件),C:Client客户端;S:Server;服务器;网吧系统、屏幕广告(红蜘蛛)、卖票、炒股的、黑客破解的等等。Asp.Net:Web端开发程序,网页程序,但是跨平台不好,最主要的是微软不是一个互联网公司,卖操作系统的。现在Unity3D的软件,做VR/AR在线游戏,核心语言就是C#。
3.2语法格式:
变量名的使用:JS的时候,变量名区分大小写;首字母:能不能是数字???_ +
C#:是强类型的语言,就是只要出错,在VS2012就会报错;
using System;using
System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;//命名空间:区分类;namespace chapter01{ //class就是类 class Program{
如何运行:"调试"里面有一个"启动调试",快捷键:F5;但是会一闪而过;
不想一闪而过:Ctrl+F5;"调试"--》"开始执行(不调试)"
3.3 占位符;
之前都是使用+连接变量和字符串;
{0},{1}-->变量1,变量2
//static:静态的;void:不返回任何类型;Main:门;string[]args:参数; //程序里面也有一个门;不能动,就是程序的入口;参数就是门卫,你需要登记; static void Main(string[] args) { //基本数据类型; int age = 18; float height = 1.8F; //float类型后需要加F; double weight = 120; //C#默认小数是double类型; char flag = Y; //字符类型,使用单引号把数据引起来; bool biaozhi = true;//bool:真假型 //字符串类型; String name = "zhangsan"; //字符串是双引号; //输出;Write():不换行; WriteLine():换行; Console.Write(name); Console.Write(age); } }}
//求圆的面积;S=PI*r*r //1.定义变量,并赋值; Console.Write("请输入圆的半径:"); double r;//3是固定的值;可以自己输入; r = double.Parse(Console.ReadLine()); const double PI=3.1415926; //常量使用 const定义;常量名:大写; double s = PI * r * r; //PI = 2; 常量不能多次赋值; Console.WriteLine(r + "的面积是:" + s); //不使用Ctrl+F5;最后接受一下; Console.ReadLine();
3.4 控制结构:
3.41顺序结构
3.4.2分支结构:if 语句 switch语句 ;
循环结构:
四.作业
4.1课后作业
第二章 :循环和字符串
//占位符;两个数相加 减 乘 除 int num1, num2; Console.WriteLine("请输入数字1:"); num1 = int.Parse(Console.ReadLine());//将字符串转换成int类型; Console.WriteLine("请输入数字2:"); num2 = int.Parse(Console.ReadLine());//将字符串转换成int类型; //2.输出;规则:{0},对应的是"",后面的第一个变量;{1}:第二个变量; Console.WriteLine("{0}+{1}={2}",num1,num2,(num1+num2)); Console.WriteLine("{0}-{1}={2}", num1, num2, (num1 - num2)); Console.WriteLine("{0}*{1}={2}", num1, num2, (num1 * num2)); Console.WriteLine("{0}/{1}={2}", num1, num2, (num1 / num2)); Console.WriteLine("{0}%{1}={2}", num1, num2, (num1 % num2)); Console.ReadLine();
//分支语句,swtich 语句; //根据时间,来输出上午(789)下午(141617)晚上(202122); int num; Console.Write("请输入时间:"); num = int.Parse(Console.ReadLine()); //2.业务判断; switch(num){ case 7: case 8: case 9: Console.WriteLine("{0}点上午",num);break; case 14: case 16: case 17: Console.WriteLine("{0}下午", num); break; case 20: case 21: case 22: Console.WriteLine("{0}晚上", num); break; default: Console.Write("有问题");break; //C#:强类型,必须有break; } Console.ReadLine();
一.知识点
1.循环(do while/while/for/foreach)
2.字符串String和StringBuilder
3.类型转换
二.重点
1.循环掌握最少2个;
2.字符串的使用;
3.类型转换
三.内容
1.循环(固定次数的循环,不固定次数的循环)
循环的步骤:
1.1 初始化变量 i
1.2循环的条件(啥时候去循环,意味着有一个结束的条件)
{
1.3循环的代码工作,要干的事情;
1.4计数器
}
do while和while循环的区别?
do while:最少执行一次;因为do while循环先执行代码,后判断;
static void Main(string[] args) { //少了条件判断,降低了循环次数; for (int i = 1; i <= 100;i+=2 ) { Console.Write(i+" "); } Console.Read();
foreach格式:
2.水仙花数:
100-999之间的三位数;第一步找范围;
153=1^3+5^3+3^3
第二步确定:个位 十位 百位
% /
gw = 153 % 10; //个位%10求余数; sw = 153 / 10 % 10;//十位分两步操作; bw = 153 / 100;//百位/10整除Console.Write("{0}",gw); Console.Write("{0}",sw); Console.Write("{0}",bw);
for(int i=100;i<=999;i++){
int i = 0; do{ if (i % 2 == 0) Console.Write(i + " "); i++; }while(i<0); Console.Read();
//少了条件判断,降低了循环次数; for (int i = 1; i <= 100;i+=2 ) { Console.Write(i+" "); } Console.Read();
//C#:数组格式[],数组的下标从0开始到数组的长度-1; int[] arr = { 1,3,5,7,9}; //输出数组中的元素;数组名[下标] Console.WriteLine(arr[0]); Console.WriteLine(arr[1]); Console.WriteLine(arr[2]); Console.WriteLine(arr[3]); Console.WriteLine(arr[4]); //报错:数组的索引超出了界限; //Console.WriteLine(arr[5]); //输出数组中的元素;i:0 1 2 3 4 //for (int i = 0; i <= 4;i++ ) //{ // Console.Write(arr[i]+" "); //} foreach(int n in arr){ //n:arr;n表示从数组中逐个取元素出来; Console.Write(n +"\t"); } Console.Read();
//第三部确定水仙花的等式条件,然后输出结果;
}
3.String类;
int gw, sw, bw; //分别代表个位 十位 百位 //i:153; for (int i = 100; i <= 999; i++) { gw = i % 10; //个位%10求余数; sw = i / 10 % 10;//十位分两步操作; bw = i / 100;//百位/10整除 if(i==gw*gw*gw+sw*sw*sw+bw*bw*bw){ Console.WriteLine(i); } } Console.Read();
//字符串位置也是从0开始; String str = "今天是个好天气,我被今个老师批评了一顿,魏子博,是个好同学"; Console.WriteLine(str.Contains("魏子博"));//是否包含 Console.WriteLine(str.EndsWith("子博"));//以某个子串结尾 Console.WriteLine(str.StartsWith("今天"));//以某个子串开头; Console.WriteLine(str.IndexOf("个"));//3 第一次出现的位置; Console.WriteLine(str.Insert(3,"晴天真是")); Console.WriteLine(str.LastIndexOf("个")); Console.WriteLine(str.Remove(3)); Console.WriteLine(str.Replace("魏子博", "魏大帅哥")); Console.WriteLine("Abcd".ToUpper()); Console.WriteLine("Abcd".ToLower()); Console.WriteLine(str.Substring(3,5));//3: 起始位置;5截取的长度; //格式化字符串:{0},{1},{2} //Format(字符串加占位符,值1,值2,..,值n) String name="赵俊杰"; int age=88; String str2 = String.Format("我们的班长是{0},年龄:{1}",name,age); //整出来这个格式化的字符串,控制台可以用,游戏也能用;winform也能用; //传值更为方便; Console.WriteLine(str2); Console.Read();
//1.隐式转化(自动转换) //int age = 20; //double age2 = age; //double:浮点型:小数类型,范围比较大; //Console.WriteLine(age); //Console.WriteLine(age2); //2.显式转化; double height = 2.87; int height2 =(int)height; //因为double类型 范围比较大;
//在大的类型前面加一个 (小类型)
四.作业
课后作业1 2 3
第三章 双重循环和数组
一.知识点
1.双重循环
2.数组
二.重点
1.面试题
2.数组
三.内容
1.双重循环:循环的嵌套
循环一般最多3层,要求大家精通双重循环面试题;掌握面试题的解决思路。
直角三角形:
Console.WriteLine(height); Console.WriteLine(height2); //出现的问题就是数据丢失了; int height3 = Convert.ToInt32(height); //从double类型转整型的时候会四舍五入; Console.WriteLine("-->"+height3); //3.类型转换;字符串 --》整型 string s = "222"; int num2 = int.Parse(s);//parse(字符串参数) Console.WriteLine(num2); int num3 = Convert.ToInt32(s); Console.WriteLine(num3); Console.Read();
/// <summary> /// * /// * * * /// * * * * * /// * * * * * * * /// * * * * * * * * *
/// </summary>
奇数三角形:
等腰三角形:
class Program { static void Main(string[] args) { for (int i = 1; i <= 5;i++ ) { //i:行数;1 2 3 4 5;2i:2 4 6 8 10 for (int j = 1;j<=2*i-1 ;j++ )//j:*的个数;1 3 5 7 9 { Console.Write("* "); } Console.WriteLine(); } Console.Read(); } }
/// <summary> /// * /// * * /// * * * /// * * * * /// * * * * * /// /// </summary> class Program { static void Main(string[] args) { //所有的这种面试题:外层循环控制行数;i代表行数 for (int i = 1; i <= 5; i++) { //Console.WriteLine("输出行数"+i); //如何在第1行一个*;第2行**;第3行:***; for (int j = 1; j<=i;j++ ) //j:代表输出的*个数; { Console.Write("* "); } Console.WriteLine();//一行完毕之后:换行 } Console.Read(); } }
/// <summary> /// * /// * * * /// * * * * * /// * * * * * * *
///* * * * * * * * *
字母三角形
2.数组
数组:概念:一组相同数据类型的集合;
为什么要用???
要求我们班42人的平均成绩???>42变量
语法格式:
数据类型 [] 数组名=new 数据类型长度]
int[]ages=new int[3]; //数组的长度为3;
int[]score=new int[42];
String[]names=new String[42];
数组的赋值:值一定要和数组数据类型一致;
数组名[下标]=值 下标从0开始;到数组的长度-1
score[0]=88;
score[1]=90;
ages={};也可以使用{}赋值;
/// /// </summary> class Program { static void Main(string[] args) { for (int i = 1; i <= 5;i++ ) { for (int j = 5 - i; j >= 1;j-- ) { Console.Write(" "); } for (int j = 1; j <= i;j++ ) { Console.Write("* "); } for (int j = 1;j<i ;j++ ) { Console.Write("* "); } Console.WriteLine(); } Console.Read(); } }
四.作业
1.page 50
2.page 53上机练习1
3.有能力的同学自行预习"冒泡排序"
4.录屏,自己当老师,有注释,有声音,讲解page77作业3。
第四章:复习课
1.求含有5个数组元素的平均值
//1.定义数组长度; String[] names = new String[5]; int[] salary = new int[5]; //String[]names=new String[5]{"李颖","冰棍","雪糕","鸡腿","汉堡"}; //names[0]="李自然"; //names[2]="马冬梅"; //names[3] = "西门吹牛"; //names[4] = "东坡个"; //names[1] = "曲长老"; //names[5] = "和尚"; //最大长度为5-1=4 //2.输入;Length:数组的长度; //for (int i = 0; i < names.Length; i++) { // Console.Write("请输入第{0}个同学的名字:",i+1); // names[i] = Console.ReadLine(); // Console.Write("请输入第{0}个同学的工资:",i+1); // salary[i] = Convert.ToInt32(Console.ReadLine());//或:int.parse() //} //3.输出 for (int i = 0; i < 5;i++ ) { Console.WriteLine("{0}同学的工资:{1}",names[i],salary[i]); } Console.Read();
using System;using
System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks; namespace ararydemo{ /// <summary> /// 目标:求长度为5的整型数组的平均值;/// </summary>
2.求数字为n的阶乘及阶乘和
class Program { static void Main(string[] args) { //1.声明数组;使用[]来定义;5 int[] arr = new int[5]; //2.输入;最简单的赋值的方式;使用循环来赋值; //找规律:arr[] 数组名[] 北极星[0]-北极星[9] //皇家一号[0]--皇家一号[4]; 酒店名[门牌号] //数组名[下标]->下标的规律:0 --4;递增; //arr[0] = 1; //arr[1] = 2; //arr[2] = 10; //arr[3] = 20; //arr[4] = 78; for (int i = 0; i <= 4;i++ ) { Console.Write("请输入第{0}个元素",(i+1));//占位符,值匹配 //Console.Write("请输入第" + (i + 1) + "个元素"); //接受; arr[i] = int.Parse(Console.ReadLine()); //类型转换;int.parse();Convert.ToInt32() } //3.输出;最好再写一个循环; //Console.WriteLine(arr[0]); int sum=0; //sum和 //for (int i = 0; i < arr.Length; i++) //{ // Console.WriteLine(arr[i]); // sum = sum + arr[i]; //} //也可以使用如下格式 foreach (int num in arr) { Console.WriteLine(num); sum = sum + num; } //int avg = (arr[0] + arr[1] + arr[2] + arr[3] + arr[4])/5; int avg = sum / 5; Console.WriteLine("平均值:{0}", avg); Console.Read(); } }}
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;
3.求母串中子串出现的位置及其个数
4.作业:
namespace 求阶乘{ /// <summary> /// 阶乘:n!=n*(n-1)!; /// 4!=4*3*2*1; /// </summary> class Program { static void Main(string[] args) { Console.Write("请输入求阶乘一个数字:"); //提示信息 int n = int.Parse(Console.ReadLine());//n:代表求阶乘的数字;假设:4 //求1*2*3*4 //求1!+2!+3!+4! int ji = 1;//设置一个变量初始值就是1; int sum = 0; for (int i = 1; i <= n;i++ ) { ji = ji * i;//ji=1*1;ji=1*2=2;ji=2*3; sum += ji; //sum=sum+ji; } Console.WriteLine("{0}的阶乘是:{1}",n,ji); Console.WriteLine("阶乘的和{0}", sum); Console.ReadLine(); } }}
String s1 = "大雪来了,大雪兆丰年,我叫大雪"; String keyword = "大雪"; //这个是考虑两个; //Console.WriteLine(s1.IndexOf(keyword)); 获取keyword关键字的位置; //Console.WriteLine(s1.LastIndexOf(keyword)); int index=0; //母串.IndexOf(子串,查找的起始位置),当起始位置改变的时候,从新的位置继续查找原母串中子串的位置; //Console.WriteLine(s1.IndexOf(keyword,1)); //Console.WriteLine(s1.IndexOf(keyword, 6)); while ((index = s1.IndexOf(keyword,index)) != -1) {//条件不等于-1,则循环; //循环里面就是符合条件的数据字符串 Console.WriteLine("子串位置:{0}", index); //下一步,是不是应该让index往后走; index = index + keyword.Length; //0+2; } Console.Read();
4.1 录屏第一题,需要加注释,并自己讲解,头像、声音;
4.2预习第五章
第五章 窗体控件
一.知识点
1.窗体
2.常用控件
3.命令语句
二.重点
1.掌握窗体和常用控件
2.学会常用控件的属性、事件
三.内容
1.窗体的概念
windows:视窗;可视化窗口;
新建windows窗体--》起名:frmWin
右键-->属性;设置窗体的text:标题;name:默认刚才你写的frmWin
BackColor:背景颜色
设置一下:programs-->
Main()下面:
Application.Run(new frmWin());
StartPosition:启动位置;CenterScreen;
MaximizeBox:最大化按钮是否可以用;true:可以用;false:变灰;这个设置完之后,并不是一定不变大小;
FormBorderStyle:None:没有边框;FixedSingle:单边框;
Form窗体:网页:表单,可以放表单元素,调查页面等;实际上窗体就是一个容器,可以放其他控件。相当于饭店的餐桌;GroupBox等容器相当于盘子;
步骤:
1.找控件
2.设置属性
3.写代码
2.登录窗体效果
1.Label:标签;作用,只是提示信息;
2.textBox文本框:用来输入信息;
3.button 按钮;用来单击;交互使用;
账号文本框:txtName;
密码框:txtPwd
登录按钮:btnLogin
参考代码:
private void btnCancel_Click(object sender, EventArgs e) { this.Close();//关闭 } private void btnLogin_Click(object sender, EventArgs e) { //MessageBox.Show(txtName.Text);//弹框; //MessageBox.Show(txtPwd.Text); String name = txtName.Text; //定义两个变量,接受用户名文本框和密码框的值; String pwd = txtPwd.Text; // if (txtName.Text.Equals("83193980") && txtPwd.Text.Equals("88889999")) if (name.Equals("83193980") && pwd.Equals("88889999")) { MessageBox.Show("登录成功"); } else { MessageBox.Show("登录失败"); } }
3.items
selectedIndex Items Item
四.作业
4.1 登录窗体完美版
第六章 控件
一.知识点
1.图片框
2.多窗体调用
3.控件继续
4.消息框
二.重点
1.多窗体之间调用
三.内容
1.图片框案例:
在窗体下声明变量
上一张按钮代码:
下一张按钮代码:
//声明了一个数字变量;i默认值是0;我们设置为1 private int i=1;
{ //有这样一个属性;图片的路径:ImageLocation //MessageBox.Show(pictureBox1.Image); i--; if (i == 0) i = 5; pictureBox1.ImageLocation = String.Format("img/bg{0}.jpg",i);
退出按钮代码(两种测试)
3.MessageBox():消息框
4.菜单栏
加图标:
是Form窗体:ICON属性,找老师给的ico图标;
RichTextBox直接设置停放;
TextBox:需要先设置成多行,然后设置Dock为Fill(可以下拉出来测试)
设置右键菜单,需要先找文本框,设置它的属性ContextMenuStrip
统一给文本框(或富文本框)改名:txtNotepad
文本框:text_changed()
富文本框:SelectionChanged
//img/bg 数字变量 .jpg;数字变量是i
//pictureBox1.ImageLocation = "img/bg"+i+".jpg"; i++; if (i == 6) i = 1; pictureBox1.ImageLocation = String.Format("img/bg{0}.jpg",i);//第二个窗体是不是关闭了。 //this.Close(); Application.Exit(); //应用退出
//也可以用于删除的时候; //MessageBox:消息框;+20:多义方法;打 DialogResult result=MessageBox.Show("您是否关闭皇家一号酒店系统?","提示信息",MessageBoxButtons.YesNo,MessageBoxIcon.Question); if (result == DialogResult.Yes) { //要关的事件;取消属性为false;就是关了. e.Cancel = false; } else { e.Cancel = true; }
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 demo61{ public partial class Form1 : Form { private int i = 9; public Form1() { InitializeComponent(); } /// <summary> /// 当关闭窗体的时候,给提示; /// e:事件参数对象; /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Form1_FormClosing(object sender, FormClosingEventArgs e) { //也可以用于删除的时候; //MessageBox:消息框;+20:多义方法;打 //DialogResult result=MessageBox.Show("您是否关闭皇家一号酒店系统?","提示信息",MessageBoxButtons.YesNo,MessageBoxIcon.Question); //if (result == DialogResult.Yes) //{ // //要关的事件;取消属性为false;就是关了. // e.Cancel = false; //} //else { // e.Cancel = true; //} } private void 文件ToolStripMenuItem_Click(object sender, EventArgs e) { } private void 退出XToolStripMenuItem_Click(object sender, EventArgs e) { this.Close(); } private void 撤销UToolStripMenuItem_Click(object sender, EventArgs e) { this.txtNotepad.Undo(); //撤销;调用的是系统的方法 } private void 剪切ToolStripMenuItem_Click(object sender, EventArgs e) { txtNotepad.Cut(); //剪切方法;
}
private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) { txtNotepad.Copy(); } private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) { txtNotepad.Paste(); //? } private void 变大ToolStripMenuItem_Click(object sender, EventArgs e) { //设置字体,需要给Font一个具体的字体对象; //我已经给你设置变量i++ txtNotepad.Font = new Font("黑体",i++); } private void 变小ToolStripMenuItem_Click(object sender, EventArgs e) { txtNotepad.Font = new Font("黑体", i--); } private void 加粗ToolStripMenuItem_Click(object sender, EventArgs e) { //FontStyle:字体的样式; // txtNotepad.Font = new Font("黑体", txtNotepad.Font.Style | FontStyle.Bold); //FontStyle.Italic 斜体; //FontStyle.Strikeout; 删除线 //FontStyle.Underline;//下滑线 //如果当前是粗体,则不变; // MessageBox.Show(txtNotepad.Font.ToString()); //第一个参数是之前的Font样式;省略page150行代码; txtNotepad.Font = new Font(txtNotepad.Font, FontStyle.Bold); } private void 状态栏ToolStripMenuItem_Click(object sender, EventArgs e) { 状态栏ToolStripMenuItem.Checked = true; //出来对勾; this.statusStrip1.Visible = true; } private void
richTextBox1_SelectionChanged(object sender, EventArgs e) { if (
txtNotepad.SelectedText.Length != 0) { 复制ToolStripMenuItem.Enabled = true; 剪切ToolStripMenuItem.Enabled = true; } } /// <summary> /// 这个一个文本框的改变事件/// </summary>
四.作业
第七章 控件二
一.知识点
1.掌握控件的用途
2.掌握控件的主要属性
3.掌握控件的使用技巧
二.重点
1.时钟控件
2.工具栏、ImageList
三.内容
1.Tool strip 控件是由
system.Windows.forms.Toolstrip类提供的,作用是创建易于自定义的常用工具栏,让这些工具栏支持高级用户界面和布局功能,如停靠、漂浮、带文本和图像的按钮、下拉按钮等。常用属性:
/// <param name="sender"></param> /// <param name="e"></param> private void txtNotepad_TextChanged(object sender, EventArgs e) { } //颜色:ForeColor 前景色;BackColor:背景色; private void 红色ToolStripMenuItem_Click(object sender, EventArgs e) { txtNotepad.ForeColor=Color.Pink; } }}
显示方式 属性
DisplayStyle 图像和文本显示方式,一般ImageAndText
Image 按钮或标签上的图片
ImageScaling 图片大小
Text 标签上显示的文本
TextImageRelation 图像和文字的相对位置,一般ImageAboveText
属性 说明
Multiline 是否可以显示一行上的选项卡
TabPages 设置控件上的选项卡页的集合
SelectedIndex 选项卡页的索引
SelectedTab 当前选定的选项卡页
2.TabControl(选项卡)
3.Timer控件
它是什么?
它是干什么的?
控件。它是不可见的。
用于背景进程中。通过引发Timer事件,Timer控件可以有规律的隔一段时间执行一次代码。也就是,你可以根据你自己的需要,给Timer控件设置时间,Timer每隔这段时间,就执行一次代码(这个代码你可以根据自己需要的功能写。)
属性 说明
Interval 事件发生的频率,以毫秒为单位
Enabled 获取或设置计时器是否正在运行
事件 说明
Tick 每隔指定间隔发生的事件
方法 说明
Start 启动计时器
Stop 停止计时器
属性 值
Name tmDate
Interval 1000(1秒=1000毫秒)
4.ImageList
案例:动态相册
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 demo61{ public partial class frmImage : Form { //要让0 1 2 3 4 5,需要定义变量; int i = 0; public frmImage() { InitializeComponent(); } /// <summary> /// 在时钟时间,每滴答一次更改一下图片 /// imageList:图像列表;它里面每一项都是一个图像(Image) /// images:很多图片;images[0]--就是第一个图片;/// </summary>
跑马灯和颜色变化
/// /// private void timer1_Tick(object sender, EventArgs e) { if (i > 80) i = 0; this.pictureBox1.Image=this.imageList1.Images[i]; i++; } private void button1_Click(object sender, EventArgs e) { this.timer1.Enabled = true; // this.timer1.Start(); } private void button2_Click(object sender, EventArgs e) { this.timer1.Stop(); } //快 private void
radioButton1_CheckedChanged(object sender, EventArgs e) { this.timer1.Interval = 100; } //中 private void
radioButton2_CheckedChanged(object sender, EventArgs e) { this.timer1.Interval = 500; } //慢 private void
radioButton3_CheckedChanged(object sender, EventArgs e) { timer1.Interval = 1000; } }}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 demo61{ public partial class frmGun : Form { //颜色改变,定义变量 int i=0; public frmGun() { InitializeComponent(); } private void timer1_Tick(object sender, EventArgs e) { } /// <summary> /// 跑马灯,在Html,marquee /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void frmGun_Load(object sender, EventArgs e) { } //从右向左; //颜色是怎么构成的?三原色(红 绿 蓝)0-255; //255最强光;255 255 255->白;0 0 0 private void timer1_Tick_1(object sender, EventArgs e) { label1.Left = label1.Left - 2; //this.Left += 2; //this:就是窗体; this.label2.Left -= 3; if (label1.Left < -label1.Width) label1.Left = this.Width;//this:代表当前窗体宽度; if (label2.Left < -label2.Width) label2.Left = this.Width;//this:代表当前窗体宽度; //调色; Color color = new Color();//弄一个新颜色; color = Color.FromArgb(255,i,255-i); i += 5; //i值变化; if (i > 255) i = 0; //label2.ForeColor = color;//前景色; //变窗体的背景色; this.BackColor = color; } }}
第八章 C#和Mysql数据库连接
一.知识点
1.安装插件和补丁包软件
2.下载dll文件
3.
二.重点
1.访问顺序;
2.
三.内容
准备工作,注意不是复制dll文件,也不是复制到bin/debug下,而是添加引用;
第一步熟悉一下:C#连接数据库的一些常用类库
农夫山泉:口号;不生产水,搬运工;
数据提供程序:不生产数据,数据库生产数据;只是搬运工;
不能用的处理方式
把目标框架更改一下:
数据库访问的顺序:
1)建立数据库连接
2)打开数据库连接
//在之前的代码基础上,增加如下代码。进行测试; conn.Open(); //Open():表示搬运工已经和对方水厂(数据库建立了联系). ConnectionState state = conn.State; MessageBox.Show(state.ToString());//?
3)编写SQL语句
//mysql: 4个功能;增删改查;
String sql="";
//insert grade(gname) values(S1),(S2),(S3)多个 String sql = "insert grade(gname) values(S5)";
String sql = "delete from grade where gname in(S4,S5)"; //id>3
String sql = "update grade set gname=大一 where id=1";
4)创建SQL命令对象SQLCommand
//str:是一个连接数据库的连接字符串; String str = "server=localhost;userid=root;password=root;database=school"; //建立连接;练习搬运工;这个搬运工叫conn MySqlConnection conn = new MySqlConnection(str); // conn.ConnectionString = str; //给搬运工的连接方式(联系方式,去丹江口)赋值 MessageBox.Show(conn.ConnectionString);
//给搬运工下达命令;MySqlCommand:命令类,用来执行搬运工的命令; MySqlCommand comm = new MySqlCommand(sql, conn); // +3方法有三个同名的方法 ; //comm.Connection = conn; //和刚才的搬运工建立联系; //comm.CommandText = sql; //接受命令;
5)执行SQL命令
int result=comm.ExecuteNonQuery(); //不是查询是增删改 if (result > 0) MessageBox.Show("插入成功"); else MessageBox.Show("插入失败");
6)关闭数据库连接
//最后有一个关闭???为啥要关闭呢?
示例1:添加班级信息
string constr="server=localhost;userid=root;password=root; database=school"; MySqlConnection conn = new MySqlConnection(constr);//创建数据库连接对象 conn.Open();//打开连接对象 string className = txtClassName.Text; string createDate = txtCreateDate.Text; string sql =string.Format("insert into classes(className,createDate) values({0},{1})",className,createDate); MySqlCommand command = new MySqlCommand(sql,conn);//根据sql命令和数据库连接创建数据库命令对象 int count=command.ExecuteNonQuery();//执行数据库的非查询命令 if (count > 0)//如果返回值(影响的行数)大于0,提示录入成功 { MessageBox.Show("班级录入成功"); } conn.Close();//关闭数据库连接
2.
四.作业
1.熟练掌握增删改查
第九章:数据库连接
一.知识点
1.动态插入数据,新控件的学习
2.DataReader查询信息
属性 说明
HasRows 是否返回结果,如果有查询,则返回True,否则返回False
FieldCount 返回当前行中的列数
方法名 说 明
Close 清除任何数据的DataSet
Reader 将XML和数据导入到DataSet
NextResult 使数据读取器前进到下一个结果
IsDBNull 判断列中的数据是否为NULL值,返回True/False
3.MDI窗体
二.重点
1.动态增删改
2.DataReader
三.内容
1.增加学生信息
步骤:
1.1建立窗体,拖拉控件;
1.2.改名字;
1.3.引用数据库using MySql.Data.MySqlClient;
1.4.写代码;
2.DataReader控件的使用
DataReader对象的属性和方法
常用方法
3.MDI窗体
效果如下:
单击:
信息增加代码:
frmAddStu addStu = new frmAddStu();//new新窗体; addStu.MdiParent = this; //设置新窗体的父窗体是当前MDI容器; addStu.Show();
效果:
拖动主界面窗体,子窗体界面会随主窗体界面来回跑动。
四.作业:
4.1开始项目设计数据库和表;做好分析;
4.2练习上课内容
4.3做酒店需要自学第8章的ListView
第十章 DataSet 、数据适配器、数据表格
一.知识点
1.DataSet
2.导入数据到数据表格
二.重点
2.1数据集
2.2 数据适配器
2.3 数据表格
三.内容
3.1数据集
1)数据集合的作用:是在内存中建立起一个临时的数据仓库,可以对其进行操作并同步到底层数据库。
为什么用它?
MySqlConnection conn连接对象。--》打开完毕之后,给comm
MySqlCommand 可以增删改查。考试理论(50道),这些试题就放在了数据集里面。考试完毕之后,要提交的时候
,再插网线,将内存中的答案等提交一下。相当于C#给我们提供的临时数据库。
2)数据集结构:
3)使用DataTable
有行和列的集合:Columns和Rows,
Rows就是查询获得的数据表中的每一行数据集合,集合就可以通过索引或下标访问,例如:通过Rows[行号][]"班级名称" ]获得该数据,
Columns是表格中列的集合,通过Columns["身份证号码"]来获得指定的列对象
3.2 数据适配器
数据适配器类似于充电器;充电器找到一个手机,去手机里面充电。
从数据源把数据拿到DataSet(数据集)的DataTable(数据表)
new的时候,查看参数是哪些。大家也可以看书。
fill()方法;参数是数据集对象
也可以填充数据表,填充数据表到通用类来讲。
封装提取代码:
3.3 DataGrid控件
4)DataGridView
常用属性:
DataSource:数据源,可以设置某一个DataTable即可
SelectionMode:是表格的选择模式,一般选择FullRowSelect
MultiSelect:是否可以多选
ReadOnly:是否只读
添加该控件后顺手把它的这几个选项如图选定,一般不在表格中进行添加和修改操作。
查询使用数据适配器MySQLDataAdapter,用法和MySqlCommand相同,该适配器可以填充一个内存中的表格DataTable对象,然后让dataGradView的数据源(DataSource)指向该表格。
String str = "server=localhost;userid=root;password=root;database=school;charset=utf8"; MySqlConnection conn = new MySqlConnection(str); conn.Open(); String sql="select id 编号,name 姓名,gender 性别,age 年龄,birth 生日,address 地址 from
student"; //加两个参数:(sql命令,连接对象) MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); //DataSet临时数据库对象ds DataSet ds=new DataSet(); //Fill(参数是数据集对象) //adapter.Fill(ds); 索引下标; adapter.Fill(ds, "学生"); //又加了一个表名 //目的是填充到数据表格里面。 //???就是ds这个临时数据库里面有几个表??? //MessageBox.Show(ds.Tables.ToString()); 不加Count是数据表的集合 //MessageBox.Show(ds.Tables.Count.ToString()); 是数据表的个数 //向数据表格进行填充; //数据源是一个数据表??? //dgvStudent.DataSource = ds.Tables[0]; 对的是索引下标,从0开始; dgvStudent.DataSource = ds.Tables["学生"]; //表名
3.4 数据库通用代码
假设现在6个表,每个表对应4个窗体,24个,再加上额外的6个,30个窗体。
有很多重复的代码:
String conStr = "server=127.0.0.1;userid=root;password=root;database=school;charset=utf8"; MySqlConnection conn = new MySqlConnection(conStr); conn.Open(); String sql = String.Format("select name,pwd from student where name={0} and pwd={1}",txtName.Text.Trim(),txtPwd.Text.Trim()); MySqlCommand comm = new MySqlCommand(sql, conn); //数据;读者;数据读取器; MySqlDataReader reader=comm.ExecuteReader();
怎么办?
3.4.1 一个记忆好,每次都敲,这叫劳模;
3.4.2 复制 、粘贴,要快些;
3.4.2 合格的程序员,要偷懒;把这些公共的代码要进行封装,放到一个类里面,这个类是一个公共的类。
util文件夹,它里面放公共的类文件。
using System; using
System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using MySql.Data.MySqlClient; /*加mysql命名空间;*/ using System.Data; //使用System.Data命名空间,否则;DataTable出不来; //命名空间:chapter08.utilnamespace chapter08.util { /// <summary> /// 这个是一个公共的连接数据库的类 /// static:静态的关键字;static:不可变的;访问的时候,可以直接类名.属性/类名.方法 /// </summary> class DBHelper { static String str = "server=localhost;userid=root;password=root;database=school;charset=utf8"; //1.获得通用连接对象 ;static,是否可以去掉; public static MySqlConnection getConn() { MySqlConnection conn = new MySqlConnection(str); conn.Open(); //自动打开; return conn; } //2.关闭连接;关闭的连接对象,所以参数是连接对象 public static void close(){ MySqlConnection conn = getConn(); if(conn!=null){ conn.Close(); } } //3.增删改操作;方法有参数没有??? public static int update(String sql) { //通用方法的增删改的连接对象也是通用的. MySqlConnection conn = getConn(); MySqlCommand comm = new MySqlCommand(sql,conn); //sql是从外部传过来的命令语句;conn是通用的连接对象. int result = comm.ExecuteNonQuery(); return result; } //4.查询操作;参数 public static DataTable query(String sql) { //通用方法的增删改的连接对象也是通用的. MySqlConnection conn = getConn(); MySqlDataAdapter adapter = new MySqlDataAdapter(sql, conn); //定义了一个数据表格对象;没有数据; DataTable dt = new DataTable(); //这时候填充到数据表格对象dt里面 adapter.Fill(dt); //这时候dt就有数据了; return dt; } } }
3.5 单击数据表格获取值
//使用一个变量来接受一下;rows:行的集合; //首先是获得数据表格的rows, //其次是第几行的第几列;cells //这时候得到的是一个单元格对象;就是一个格子,我们的目标是其中的值; //String str = dataGridView1.Rows[0].Cells[1].ToString(); //MessageBox.Show(str); //*******得到其中的值*********** //String str2 = dataGridView1.Rows[0].Cells[1].Value.ToString(); //MessageBox.Show(str2); //*************得到当前行的值;e:代表的是当前鼠标单击事件;rowIndex:行号;ColumnIndex:列序号; //String str3 = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString(); //MessageBox.Show(str3);
3.6 单击数据表格传值给新窗体
数据表格代码:
//*******接下来目标就是把数据显示到frmUpdateGrade窗体上面; String id = dataGridView1.Rows[e.RowIndex].Cells[0].Value.ToString(); String name = dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString(); //声明了窗体对象,并new了一下,新建出来; frmUpdateGrade updateGrade = new frmUpdateGrade(); updateGrade.id = id; updateGrade.name = name; updateGrade.Show(); //跨窗体传值的时候,应该把id,name传给updateGrade;
新窗体代码:
//1.给窗体定义两个属性;id,name public String id;//如果是int,则需要强制转化一下; public String name;
在窗体加载事件添加代码:
//这时候没有值; //MessageBox.Show(id + "初始化....," + name); //当我们写了frmDataGrid2,两行赋值代码之后,id和name的值就传过来了。 //我们要把这个值传到哪里去呢???this:在这里代表当前窗体对象; txtId.Text = this.id; txtGName.Text = this.name;
更新按钮代码:
/// <summary> /// 更新按钮代码 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnUpdate_Click(object sender, EventArgs e) { String sql = string.Format("update grade set gname={0} where id={1}",txtGName.Text,txtId.Text); int result=DBHelper.update(sql); if (result > 0) MessageBox.Show("更新成功"); else MessageBox.Show("更新失败"); DBHelper.close(); }
四.作业
4.1 掌握三类内容
4.2 使用通用的数据库操作类来实现增删改查;
4.3 项目的所有资料:
4.3.1 需求分析+人员分工(放假之前交),具体的人做哪个模块
4.3.2 数据库表的设计(写本上,就是几张表,表名,字段名和含义)
4.3.3 命名规范 写下来(frm前 ;btn;cmb;)
4.4 DBHelp.cs录屏讲解
C#程序设计第一章:C#基础一.知识点二.重点三.内容四.作业第二章 :循环和字符串一.知识点二.重点三.内容四.作业第三章 双重循环和数组一.知识点二.重点三.内容1.双重循环:循环的嵌套2.数组四.作业第四章:复习课1.求含有5个数组元素的平均值2.求数字为n的阶乘及阶乘和3.求母串中子串出现的位置及其个数4.作业:4.1 录屏第一题,需要加注释,并自己讲解,头像、声音;4.2预习第五章第五章 窗体控件一.知识点二.重点三.内容1.窗体的概念2.登录窗体效果四.作业第六章 控件一.知识点二.重点三.内容四.作业第七章 控件二一.知识点二.重点三.内容四.作业第八章 C#和Mysql数据库连接一.知识点二.重点三.内容数据库访问的顺序:2.四.作业第九章:数据库连接一.知识点二.重点三.内容1.增加学生信息2.DataReader控件的使用3.MDI窗体四.作业:第十章 DataSet 、数据适配器、数据表格一.知识点二.重点三.内容3.1数据集3.2 数据适配器3.3 DataGrid控件3.4 数据库通用代码3.5 单击数据表格获取值3.6 单击数据表格传值给新窗体四.作业本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据