问题描述:
第一次课(有课后哦) C#输出语句||类型的转换; E:\c#学习\作业\C#第一次课\258\作业 和笔记\上机作业
1. *.cs class 类文件 单独打开不可运行
*.csproj classproject 项目文件 打开只可以看到单个项目 *.sln 解决方案文件 打开就可以看到所有的项目 *.suo 项目资源文件 资源的路径保存在里面
2. 用于在程序中,保存数据的一个容器
java: int,char,String,boolean,double
C#: int,char,string,bool,double datetime
1. 组成:字母,下划线,数字
2. 开头:下划线或字母开头
3. 不能是关键字
3.Console 类:控制台类
作用:用于控制台数据的输入和输出
Console.Write("数据"); 向控制台输出数据 --不换行输出 Console.WriteLine("数据"); 向控制台输出数据 --换行输出 Console.WriteLine("格式化字符串", 数据)
//快捷键 cw+两下tab
Console.WriteLine();
3. 从控制台中获取数据
string 变量= Console.ReadLine();
数据类型转换 有效的整数格式字符串->整数 “123”Yes “123abc ”No
int 变量=int.Parse(字符串)
double d= double.Parse("有效的double 类型字符串");
第二次课(有课后哦) 数组||循环; E:\c#学习\作业\C#第二次课循环断点
switch 结构 java 和C#的差别
switch java C#
可有可无break break 必须有
数组的定义
数据类型[] 数组名称 = new 数据类型[长度]
例: 整型的保存10个数字的数组
int[] arr = new int[10]; //标准写法
int[] arr = new int[]{1,2,3,4,5,6,7?}; //快速初始化
int[] arr = {1,2,3,4,5,6,7?};//同上
循环
while 循环次数不确定的时候使用
for 循环次数确定的时候使用
所有数据类型基于 object
foreach : 避免使用数组的下标
循环遍历数组取值的时候使用
foreach(var item in 数组名)
{
// item是迭代变量 不能赋值
// var 推算类型 根据循环里面的数组的类型推算出来的。 }
1)foreach 循环
遍历,求和,遍历字符串
2)逆序输出数组(用for)
3)数组拼接(用for)
continue:结束本次循
break:跳出循环
嵌套循环
------------------------------
所有的数据类型都是基于 object 类型
随机数
Random r = new Random();
int result= r.Next(1,101);
第三次课 (有课后哦)转换类型||字符串;
E:\c#学习\作业\C#第三课string 常用方法
类型转换
1: 隐式转换 double a = 10; 小类型转大类型
2: 显示转换 强制转换 大类型转小类型
int a = int.Parse("字符串");
int b = (int)50.8;
将单字符强转成整形 得到的是这个字符的ASCII 编码
Parse() : 只能将字符串转变成对应的类型
ToString(): 将任意类型转变成字符串类型
强行转换 convert. 要转的数据类型(值);
Convert: 类型转换的一个类,通过它可以做任意基本类型的转换 举例: 输入年龄
int age = int.Parse(Console.ReadLine());
int age = Convert.ToInt32(Console.ReadLine());
字符串常用方法
1)字符串常用方法
Length :获取字符串长度,比如密码6位数
Equals :两个字符串是否相等, 也可以用 ==
Replace :Replace(旧值,新值)
ToUpper 和ToLower :大小写字母转换
Substring (开始下标) :从这个下标开始,一直到字符的末尾
Substring (开始下标, 长度) :从这个下标开始,截取指定长度的字符串
Trim():去掉两端空格
TrimStart()和TrimEnd():去掉字符串中出现的第一个和最后一个空格。不填参数 表示去空格 IndexOf :字符或者字符串的下标位置,找不到则返回-1
比如"tim_cheng@foxmail.com"中'@'和'.' 的下标位置,"cheng" 的下标 位置 LastIndexOf:
比如截取路径中的文件名,E:\课件\字符串常用方法.txt
字符串中有转义字符\,可以在字符串前加@或者在转义字符前加上\
Split():分割字符串,比如"192.168.0.1", 用'.' 分割得到字符数组
Join :将数组用某字符或字符串联接起来(与split 相反)
string.Join(分隔符,数组
StartsWith :以... 开头
EndsWith :以... 结尾
2)验证邮箱是否正确
(1)含有'@'和'.'(indexof)
(2)'@'在'.' 之前
(3)以"com" 结尾(EndsWith)
3)验证IP 是否合法
4)字符串分割求和,比如"10086_9527_666_999"
5)Format:格式化字符串, 比如返回SQL 插入语句
第四次课 窗口
E:\c#学习\作业\c#第四次课窗体课
一窗体:具有以下特征就是窗体
特征:
A :本地化
B :具有一定的操作性--最大化,最小化,关闭等
二窗体又叫UI (User Interface 用户界面)
三 学习窗体
A. 创建窗体 :新建项目 -> 选择 C# -> Windows窗体应用程序
B. 窗体的组成结构和细节
1. 窗体在VS 中有三个文件组成 : 一个类分成了二个部分类(partial 类)
【设计】:提供程序开发者一种可视化的操作
【代码】:后台逻辑代码(快捷键F7)
【系统自带】:系统自动生成的代码*.designer结尾
2为什么使用部分类(partial 类):
是微软为了让【系统生成】和我们【自己编写】的
代码区分开来,提高可阅读性而设计的
四窗体的特征(窗体由A 属性 B 事件组成)
A 属性:通过属性 改变窗体的外观
1》name:命名
2》text :标题值
3》BackColor:背景颜色
4》BackgroundImage:背景图片
t his.BackgroundImage = Image.FromFile("@...");----------@用于转译
this.BackgroundImageLayout = ImageLayout.Zoom;----------图片呈现方式 5》WindowState:打开窗体的状态 最大 最小 正常
6》MaximizeBox: 设置 最大化 7》MinimizeBox:设置最小化
8》opacity:透明度
9》StartPosition: 窗体运行的最初位置
10》ShowIntaskBar:是否在任务栏中显示
11》CancelButton :按Esc 键 相当于按了取消按钮
B 事件:用来控制识别操作
打开窗体--右击--属性---点击闪电---选中对应的事件
--如按下确定按钮,选择某个单选按钮或者复选框。每一种控件有自己可以识别的事件 1》窗体加载事件(该事件只执行一次)---
Load
响应者:窗体本身
发生:修改背景图片
2》鼠标点击/单击 click
事件源:鼠标点击
响应者:窗体
发生:窗体标题发生改变“萌萌哒”
3》鼠标移动-- MouseMove
事件源:鼠标移动
响应者:窗体
发生:窗体标题发生改变显示“鼠标坐标”
object sender 发出事件的对象
System.EventArgs e 对象中的数据
如果是按钮button 的话,那sender 就是那个button,
e 是事件参数,在某些事件里,比如在MouseEventArgs 的Mouse 事件中,可以看到e 包括mouse 的坐标值等,以供你的程序使用。
第五次课 窗口 消息框
E:\c#学习\作业\C#第五次课基本控件 C# Csharp 面向对象的高级语言
C#主要分三阶段
第一阶段 基础语法
第二阶段 基础控件
第三阶段 连接数据库---ado.net
应用程序 winform/ 控制台应用程序
|| ado.net
数据库(sql )
Lable 标签---文本提示
name lbl_意义
text 文本值
BackColor 背景颜色
Forecolor 字体颜色
Font 字体
TextBox 文本框----提供给用户输入文本
name txt_意义
text 文本
passwordchar 密码字符
MultiLine 多行
ScrollBars 滚动条
ComboBox 下拉框
name cmb_意义
items 集合
添加集合
cmb_意义.items.add("值");---逐个添加
下拉框控件名.items.AddRange(数组名)
事件 SelectedIndexChange---下拉框索引值改变时发生的事件 messageBox.Show(""):显示消息框
消息框的四种格式
1.messageBox.Show("消息内容")
2.messageBox.Show("消息内容"," 标题")
3.messageBox.Show("消息内容"," 标题", 按钮)
4.messageBox.Show("消息内容"," 标题", 按钮, 图标)
MessageBox.Show("消息", "标题", MessageBoxButtons.OKCancel, MessageBoxIcon.Error); MessageBoxIcon.Warning 警告
MessageBoxIcon.Stop 停止
MessageBoxIcon.Erro 错误
MessageBoxIcon.Question 问题
MessageBoxIcon.None 无
第六课 基本控件
E:\c#学习\作业\C#第六次课基本控件单选多选分组框 一补充控件属性
textBox : ReadOnly 只读(默认false )
Combobox
DropDownStyle--DropDownList 只能从下拉框选(属性)
二 键盘按下的事件 (例题中的计算器)
// 只能输入阿拉伯数字 及. 和backspace
Keypress 事件
private void textBox1_KeyPress(object sender, KeyPressEventArgs e) {
// sender 事件源:textBox1
// e 数据 获取用户输入的字符 char c=e.KeyChar;
if (c >= '0' && c <= '9'||c==8||c=='.')
{
// 8 是backSpase 的ascaII 值
e.Handled = false;// 是否处理keypress 事件里的值 false 不处理 }
else
{
e.Handled = true;
}
}
三 单选框控件
RadioButton
name : rdb_意义
text :文本值
判断是否被选中
单选框控件名.Checked
判断单选框是否被选中
if( rdb_nan.Checked==true)
{
MessageBox.Show("性别为"+rdb_nan.text); }
事件 CheckedChanged
四 复选框
CheckBox
name :ckb_意义
text :文本值
复选框控件名.Checked
if(ckb_意义.Checked==true)
{
MessageBox.Show("爱好为"+ckb_意义.text);
}
五 分组框
GroupBox
name :grp_意义
text :文本值
PictureBox 图片----显示图片
name :pic_意义
pic_意义.Image=Image.FromFile("路径");
第七课 窗口的基本按钮(时间控件)
E:\c#学习\作业\C#07窗体基本控件3picture_timer 获取当前时间
DateTime.Now.toString();
pictureBox :图片控件
name :pic_意义
this. 图片名.Image=Image.FromFile("路径");
SizeMode :图片呈现方式
AutoSize :原图大小
CenterImage:居中
Zoom 等比例
StretchImage 拉伸
pictureBox1.SizeMode=PictureBoxSizeMode.Zoom
this. 图片名.Left
this. 图片名.top
Timer (这个事件在最下方)
Timer = 可控的死循环事件
方法 Start()/Stop()---手动启动、停止Tick 事件
属性
Interval 时间间隔 --默认100毫秒 1秒=1000毫秒 Enabled false/ture 是否一运行就启动事件
// 1循环获取复选框的值
foreach (Control item in groupBox1.Controls)
{
// 只获取checkBox 控件里的text 文本值 if (item is CheckBox)
{
CheckBox c =(CheckBox) item;
if (c.Checked)// 复选框被选中时 {
// 获取值 累加给 s
s+=c.Text;
}
}
}
MessageBox.Show("爱好是" + s);
第八课 图片的集合
E:\c#学习\作业\ListBox
ImageList 控件 :图片集合---只是用来放图片
不显示图片
显示ImageList 图片 :ImageList +pictureBox
images 集合(在最下面)
获取图片个数
ImageList1.images.Count;
获取ImageList1中某个图片
ImageList1.images[索引值];
给控件赋值
ImageList1.images.Add(单个值)
ImageList1.images.AddRange(多个值)
-------------------------------------
打开文件对话框
//1 类的实例化
OpenFileDialog ofd = new OpenFileDialog();
// 多选属性
ofd.Multiselect = true;
//2 打开对话框
DialogResult dr= ofd.ShowDialog();
//3 对结果的判断
if (dr==DialogResult.OK)
{
//4 把选中的文件名赋值给textBox1控件
textBox1.Text = ofd.FileName;// 单个文件 --带路径 //ofd.FileNames; 多个文件 --带路径
//ofd.SafeFileName; --只是文件名 }
第九次课
E:\c#学习\作业\C#11连接数据库1 窗体/控制台应用程序---UI 、业务逻辑
|| ado.net---连接数据库
SQL 结构化查询语言 --- 数据库
非查询语-----增删改
增
insert into 表名(列名1, 列名2, 列名n)
values(值1, 值2,值n)
删
delete from 表名 where 条件表达式
修改
update 表名 set 列名=新值, 列名=新值
where 条件表达式
查询
select * from 表名 where 条件表达式
C#中
insert into 表名(列名1, 列名2, 列名
n)
values()
(挖坑了记得填哦)
多表查询
内连接 select * from 表1
inner join 表2 on 表1. 公共字段=表2. 公共字段
左外连接 select * from 表1
left join 表2 on 表1. 公共字段=表2. 公共字段
※※※※※※※※
非查询语句 八大步骤 天龙八部
1 引用命令控件
Using System.Data.SqlClient;(在最上面敲)
2 创建连接字符串
String (变量名)strcon="server=.;database=数据库名;uid=sa;pwd=123"; 3 创建连接对象
SqlConnection (变量名)con=new SqlConnection (strcon); 4 打开连接对象
con.Open();
5 编写SQL 语句
string (变量名)sql=string.Format(@"增删改 的SQL 语句"); 6 创建命令对象
SqlCommand (变量名)com=new SqlCommand (sql,con);
7 执行命令
int n= com.ExecuteNonQuery();
8 关闭连接对象
con.Close();
注意 两处报错的地方
1 con.Open();报错 说明 连接字符串错了
2 com.ExecuteNonQuery(); 报错 说明SQL 语句错了 (名记)
第十次课
单值查询与单行查询
单值查询: 返回结果只有一行一列的情况
查询语句是进行统计时
Sum(),Count(),Avg(),Max(),Min()
单行查询: 返回的结果只有一行
查询语句根据条件最多只能查询出一条数据时 登录
根据主键查询数据
单值查询操作
1. 引用命名空间
using System.Data.SqlClient
//2. 连接字符串
string connStr = "server=.;uid=sa;pwd=123;database=lol"; //3. 创建连接对象
SqlConnection conn = new SqlConnection(connStr); //4. 打开连接
conn.Open();
//5. 要做的事情 -- 求总金额
string sql = "select sum(money) from hero";
//6. 创建执行命令对象
SqlCommand cmd = new SqlCommand(sql,conn); //7. 执行命令
decimal money = (decimal)cmd.ExecuteScalar(); //8. 关闭连接
conn.Close();
ExecuteScalar(): 不管查询的结果有多少, 返回第一行第一列的数据 返回类型是object, 取值时需要类型转换 T obj = (T)cmd.ExecuteScalar();
单行查询
也是天龙八步
7. 执行命名不一样
SqlDataReader dr = cmd.ExecuteReader();//执行命令,返回一个读取数据对象
SqlDataReader: 数据读取对象
1. 可以一次读取一条数据
2. 读取数据时,需要保证道路的畅通
3. 只能向下读取数据
dr.Read();//向下读取一条数据, 返回bool 类型的数据
true: 有数据
false: 没有数据
从结果集中读取列的数据
dr["列名"];//返回的是object 类型的数据
第十一课 ListView 控件_白道
E:\c#学习\作业\C#13ListView控件_白道
ListView 控件---白道
1. 拖入控件 ListView
2.
3. 设置列的属性---columns(添加列)--text(修改列名
)
4.
3. 设置View---details 4.
5. 网格线-- GridLine--true
6.
7.
5. 整行被选中属性--- FullRowSelect--true
6.
7.
6. 查询代码
// 创建连接字符串
string strcon = "server=.;database=c_258;uid=sa;pwd=123"; // 创建连接对象
SqlConnection con = new SqlConnection(strcon);
// 打开连接对象
con.Open();
// 编写SQL 语句
string sql = string.Format(@"select ID,name,tel,sex,born from dbo.father "); // 建立命令对象
SqlCommand com = new SqlCommand(sql ,con);
// 执行命令---dr 读卡器
SqlDataReader dr=com.ExecuteReader();
// 判读是否有行
if (dr.HasRows)
{
// 循环读取
while (dr.Read())
{
// 建立行的盒子-带上第一个列的值 3·ID , name,tel,sex,born ListViewItem lvi = new ListViewItem(dr["ID"].ToString().Trim()); // 把列的格子添加到行的 盒子里
lvi.SubItems.Add(dr["name"].ToString().Trim());// 第二列 lvi.SubItems.Add(dr["name"].ToString().Trim());// 第三列 lvi.SubItems.Add(dr["name"].ToString().Trim());// 第四列 lvi.SubItems.Add(dr["name"].ToString().Trim());// 第五列 // 把行的盒子 添加到 大盒子 (listview1 控件) listView1.Items.Add(lvi);
}
con.Close();// 读取数据完之后 关闭连接对象
}
----------------------------------
获取某行某列的值
// 获取第一行第二的值
string s=listView1.SelectedItems[0].SubItems[1].Text.ToString(); 判断是否有选择的行
if (listView1.SelectedItems.Count>0)// 是否有选中的行
{
// 获取选中的某行某列的值
strings=listView1.SelectedItems[0].SubItems[1].Text.ToString(); MessageBox.Show(s);
}
这个图的意思是点击listView 中的内容,然后删除
第十二课 ListView 删除和右击菜单 E:\c#学习\作业\ListView删除和右击菜单 ListView :白道
FullRowSelect :整行选中
Full:完整的
Row :行
Select :选择
AllowColumnReorder :允许对列排序
MultiSelect :允许多选
判断白道是否选中了一行
if(this.白道名.SelectedItems.Count == 0)
{
// 没有选中一行数据
//弹窗提示
}
获取白道选中行(单选) 第0列的值
this. 白道名.SelectedItems[0].SubItems[0].Text
模糊查询
like
_:匹配一个字符
%:匹配任意个字符
右键菜单 : ContextMenuStrip
特别注意:
右键菜单不能直接显示,必须绑定到某个控件
(也就是设置某个控件的ContextMenuStrip 属性)
十三次课 黑道
E:\c#学习\作业\C#15黑道DateGridView
DataGridView
// 整行选中
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 去掉末尾的行
dataGridView1.AllowUserToAddRows = false;
// 去掉列
dataGridView1.RowHeadersVisible = false;
(以上三行代码可以在属性里设置)
步骤
1. 拖入控件DataGridView
2. 设置列的个数-- 数据 列的绑定
3. 设置属性 三个属性
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 去掉末尾的行
dataGridView1.AllowUserToAddRows = false;
// 去掉列
dataGridView1.RowHeadersVisible = false;
4 写代码
// 2创建连接字符串
string strcon = "server=.;database=c_258;uid=sa;pwd=123";
// 3创建连接对象
SqlConnection con = new SqlConnection(strcon);
// 4打开连接对象
con.Open();
// 5编写SQL 语句
string sql = string.Format(@"select * from dbo.father");
// 黑道查询 ---把数据库中数据一次性查询出来
// 适配器 ---大卡车(去哪里运什么货--- )
SqlDataAdapter adp = new SqlDataAdapter(sql, con);
// 临时仓库 dataset 数据集
DataSet ds = new DataSet();
// 把数据填充 到临时仓库里
adp.Fill(ds);
// 绑定数据源
dataGridView1.DataSource = ds.Tables[0];
这个图片的意思是把黑道里的某行某列的值赋值给文本框
第十四课 无间道
组合框 (也叫下拉框)ConboBox ----无间道----多表数据中
DataSet 在using System.Data;命名空间下
※※※注意※※※
// 注意 手动添加了列时--- 列的索引值从0开始+1
获取第一行第一列的值dataGridView1.SelectedRows[0].Cells[1].Value.ToString();
//未手动添加列时 列的索引值从0开始
获取第一行第一列的值dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
给控件赋值
textBox1.Text=dataGridView1.SelectedRows[0].Cells[0].Value.ToString();
无间道代码
// 1引用命名空间
// 2创建连接 字符串
string strcon = "server=.;database=MyQQ;uid=sa;pwd=123";
// 3创建连接对象
SqlConnection con = new SqlConnection(strcon);
// 4 开来连接对象
con.Open();
// 5编写SQL 语句
string sql = string.Format(@"select Id, BloodType from dbo.BloodType "); select Id,Star from dbo.Star");
// 6建立大卡车
SqlDataAdapter adp = new SqlDataAdapter(sql,con);
// 7建立临时大仓库
DataSet ds = new DataSet();
adp.Fill(ds);// 填充
// 8绑定数据源
comboBox1.DataSource=ds.Tables[0];
// 9绑定显示值
comboBox1.DisplayMember = "BloodType";
// 10 绑定隐藏值
comboBox1.ValueMember = "Id";
// 11 关闭连接对象
con.Open();
-----------------------------
获取隐藏值
string 隐藏 = comboBox1.SelectedValue.ToString();
获取显示值
string 显示 = comboBox1.Text;
总结(八大步骤)
八大步骤:(链接数据库)
Using System.Data.SqlClient;(在最上面敲)
String (变量名)strcon="server=.;database=数据库名;uid=sa;pwd=123"; SqlConnection (变量名)con=new SqlConnection (strcon);
con.Open();
string (变量名)sql=string.Format(@"增删改 的SQL 语句");
SqlCommand (变量名)com=new SqlCommand (sql,con);
int n= com.ExecuteNonQuery();
con.Close();
(中文意思在图里)
白道(前六步和数据库添加一样)
Using System.Data.SqlClient;
string strcon = "server=.;database=c_258;uid=sa;pwd=123";
SqlConnection con = new SqlConnection(strcon);
con.Open();
string sql = string.Format(@"select ID,name,tel,sex,born from dbo.father ");
SqlCommand com = new SqlCommand(sql ,con);
// 执行命令---dr 读卡器
SqlDataReader dr=com.ExecuteReader();
// 判读是否有行
if (dr.HasRows)
{
// 循环读取
while (dr.Read())
{
// 建立行的盒子-带上第一个列的值 3·ID , name,tel,sex,born
ListViewItem lvi = new ListViewItem(dr["ID"].ToString().Trim());
// 把列的格子添加到行的 盒子里
lvi.SubItems.Add(dr["name"].ToString().Trim());// 第二列
lvi.SubItems.Add(dr["name"].ToString().Trim());// 第三列
lvi.SubItems.Add(dr["name"].ToString().Trim());// 第四列
lvi.SubItems.Add(dr["name"].ToString().Trim());// 第五列
// 把行的盒子 添加到 大盒子 (listview1 控件)
istView1.Items.Add(lvi);
}
con.Close();// 读取数据完之后 关闭连接对象
}
(中文意思在图里)
黑道 (前五步和数据库添加相同)(黑道是九步) Using System.Data.SqlClient;
string strcon = "server=.;database=c_258;uid=sa;pwd=123";
SqlConnection con = new SqlConnection(strcon);
con.Open();
string sql = string.Format(@"select * from dbo.father");
SqlDataAdapter adp = new SqlDataAdapter(sql, con);
DataSet ds = new DataSet();
adp.Fill(ds);
dataGridView1.DataSource = ds.Tables[0];
(中文意思在图里)
无间道 (前五步和数据库添加一样) (无间道至少11步) Using System.Data.SqlClient;
string strcon = "server=.;database=MyQQ;uid=sa;pwd=123";
SqlConnection con = new SqlConnection (strcon); con.Open();
string sql = string .Format(@"select Id, BloodType from dbo.BloodType"); SqlDataAdapter adp = new SqlDataAdapter(sql,con); DataSet ds = new DataSet();
adp.Fill(ds);
下拉框.DataSource = ds.Tables[0];
下拉框.DisplayMember = "BloodType";
下拉框.ValueMember = "Id";
(中文意思在图里)
问题解答:
我来补答