C#程序设计案例开发教程
Posted teayear
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#程序设计案例开发教程相关的知识,希望对你有一定的参考价值。
C#程序设计
第五章
知识点
窗体的概念:微软的长处,桌面程序、操作系统
WEB开发:H5、CSS3、JAVA
稍微弱点同学或者留在三、四线,五六线,七八线的同学,用这个挣钱快。
郑州的留下来就业的同学,这个需求还可以。
未来:VR 动漫模特 、游戏(带VR眼睛),这些都是C#开发的。Unitry3D。
窗体:Form界面–>浏览器
控件:表单里面的表单元素
修饰:属性
学习思路
思路:技巧,不要着急,上课注意听,下课好好练,不练跟着我上班。
重点是记步骤:
1.目标
2.去实现,要的哪些元素;
3.逐个攻克
4.达成目标
重点
1.新建项目
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RBgTAb64-1672665792832)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567579830702.png)]
2.给新建的form窗体重命名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IQTXejTT-1672665792839)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567579969381.png)]
2.1初始效果,出来的时候,就最大化:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sv1lCCoz-1672665792840)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567580075777.png)]
2.2有最大化、最小化按钮,不能动
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cGT5knVc-1672665792842)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567580230844.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T7B4eyvz-1672665792844)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567580241967.png)]
2.3 要的图片
试验:PictureBox
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mAOMUo3W-1672665792846)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567580825771.png)]
试验:窗体背景
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCAmgJ8D-1672665792847)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567581001406.png)]
建议大家使用第一种,第二种会加载比较困难。
2.4 菜单
2.5工具栏
2.6状态栏
2.7新窗体:
居中父容器中间:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8wSndQsf-1672665792849)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567589193496.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ga907txK-1672665792850)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567589317297.png)]
MDI:窗体;什么是MDI
难点
MDI
第六章:MDI
时钟:timer
enabled:true false 是否可用。
interval:毫秒 1秒=1000毫秒,时间间隔
事件:tick 滴答事件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AybERouD-1672665792852)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567751124501.png)]
ImageList:图像列表,可以存放多个图像;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OzwkR3rI-1672665792854)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567753617625.png)]
第七章:ADO.Net
项目中需要连接数据:ado.net
1.添加mysql.Data
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OHr6l87j-1672665792856)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1567757976361.png)]
2.在代码处,导入命名空间;
//导入mysql的操作类
using MySql.Data.MySqlClient;
3.下面的操作
所有的数据库程序都遵循的步骤:
1.连接
2.命令;
3.执行(查询、增删改)
4.关闭
代码:
(1)建立连接:
MySqlConnection sqlCon= new MySqlConnection("Database=数据库名字;Data Source=服务器的ip地址;User Id=用户名;Password=用户密码");
或者:
MySqlConnectionsqlCon= new MySqlConnection("server=服务器的ip地址;user id=用户名;password=用户密码;database=数据库名字");
或者:
string M_str_sqlcon = "server=服务器ip地址;User Id=用户名;password=用户密码;Database=数据库名字";//根据自己的设置
MySqlConnection sqlCon = new MySqlConnection(M_str_sqlcon);
注释:server=服务器ip地址;User Id=用户名;password=用户密码;Database=数据库名字,这几个的顺序可以调换,只要对准每个字符串和标识符就好了。
(2)执行sql命令://设置查询命令
MySqlCommand mycmd= new MySqlCommand("select * fromt_dept whereTITLElike '%p%'", sqlCon);
所有代码试验
3.代码
//1.url:连接mysql数据的字符串,conn
String url = "server=127.0.0.1;user id=root;password=root;database=dormdb";
MySqlConnection conn = new MySqlConnection(url);
conn.Open(); //打开
//2.命令对象;
//根据学生用户名和密码来查询所有信息;
String stuName = txtName.Text; //trim()
String stuPwd = txtPwd.Text;
String sql = String.Format(@"select * from student where stuUserName='0' and stuPass='1'", stuName, stuPwd); ;
MySqlCommand comm = new MySqlCommand(sql, conn);//根据conn连接对象,来执行命令;
//3.开始执行查询;
MySqlDataReader reader = comm.ExecuteReader();
if (reader.HasRows)
//HasRow:表示有行;
MessageBox.Show("登录成功");
//去宿舍系统怎么办?
this.Hide();
dormSys dorm = new dormSys();
dorm.Show();
else
MessageBox.Show("登录失败");
第八章:数据的增删改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ObcFScTi-1672665792857)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568010049260.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hDEKrac2-1672665792858)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568010062627.png)]
一.增删改的步骤
1,增加的时候sql比较复杂
insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values()
2.在()写,,等占位符,然后根据数据类型确定在占位符两边是否加’',
“insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values(‘0’,‘1’,‘2’,‘3’,‘4’,‘5’)”
同学犯的自增,他写了前面4个,后面5个。铁定报错。
id:1;主键重复;
3.建议使用变量,多了几行变量的代码,但是会理解起来简单.
String stuNum=txtNum.Text.Trim();
String stuName=txtName.Text.Trim(); //去除两边空格;
String userName=txtUserName.Text.Trim();
String pwd=txtPwd.Text.Trim();
String sex=radMen.Checked?“男”:“女”; //三元运算符; if(radMen.Checked)赋值;
String birth=dtDate.Value;
4.给参数放到sql里面
@"insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values('0','1','2','3','4','5')", stuNum, stuName, userName, pwd, sex, birth
5.执行
comm.ExecuteNoQuery();
完整代码:
string url = "server=127.0.0.1;user id=root;password=root;database=dormdb;charset=utf8";
MySqlConnection conn = new MySqlConnection(url);
conn.Open();//打开连接;
//增加数据的sql拿过来;
String stuNum=txtNum.Text.Trim();
String stuName=txtName.Text.Trim(); //去除两边空格;
String userName=txtUserName.Text.Trim();
String pwd=txtPwd.Text.Trim();
String sex=radMen.Checked?"男":"女"; //三元运算符; if(radMen.Checked)赋值;
String birth=dtDate.Value.ToString();
String sql = String.Format(@"insert into student(stuNum,stuName,stuUserName,stuPass,sex,birthday)
values('0','1','2','3','4','5')", stuNum, stuName, userName, pwd, sex, birth);
MySqlCommand comm = new MySqlCommand(sql, conn);
int result = comm.ExecuteNonQuery(); //NoQuery()返回的是受印象的行数。
Console.WriteLine(result);
if (result > 0)
MessageBox.Show("数据增加成功");
else
MessageBox.Show("数据增加失败");
二.数据适配器
类似于电源适配器
从数据源把数据拿到DataSet(数据集)的DataTable(数据表)
方法:fill()和update()
封装提取代码:
2.1建立一个公共的文件夹
util,下面建立一个类DBHelper.cs类
class DBHelper
static String url = "server=127.0.0.1;user id=root;password=root;database=dormdb;charset=utf8";
//静态属性,静态方法,到时候可以直接类名.属性|方法
public static int update(String sql)
MySqlConnection conn = new MySqlConnection(url);
conn.Open(); //打开
MySqlCommand comm = new MySqlCommand(sql, conn);
int result = comm.ExecuteNonQuery();
conn.Close(); //关闭资源,相当于你打电话,挂机;
return result; //返回受影响的行数;
//查询
//查询,这个参数是查询的sql;小车去拉货,36份蟹黄堡(超大份10斤);仓库就是教学楼;
public static DataTable query(String sql)
MySqlConnection conn = new MySqlConnection(url);
conn.Open(); //打开;公路;
MySqlDataAdapter adapter = new MySqlDataAdapter(sql,conn); //小车;
DataTable dt = new DataTable(); //定义一个新的数据表;就相当于一间的库房;
adapter.Fill(dt);//卸车到库房;Fill填充(库房)
return dt;
使用的时候:
using chapter07.util; //引用公共的数据库操作类的命名空间.
再次测试之前的增删改,会发现继续OK!
2.2 使用SqlDataAdapter进行查询,查询到数据表格。
using System.Data; //这个是为了使用DataTable
这个是DataTable的所在命名空间.
2.3 DataGridView
数据 表格 视图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Zt9B0xo0-1672665792859)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568018952221.png)]
2.4 查询按钮里面的代码:
String sql = "select stuId 编号,stuName 姓名,stuUserName 账户 from student where sex='男'";
DataTable dt = DBHelper.query(sql); //数据在DataTable里面
dataGridView1.DataSource = dt;//它只需要找数据源即可.
//dataGridView1.Columns[0].HeaderText = "编号";
第九章 :项目问题
1.窗体多次打开问题
之前使用菜单打开子窗体的时候,点一次出来一次,解决这个问题,有多重方法。
我们讲一种简单的方法,简单失效。
Factory.cs 工厂类
思路是建立一个公共的 静态的实例化对象;
public static frmStudent stu=new frmStudent();
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqWdboMd-1672665792860)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568183868608.png)]
再次强调:
xxx项目.util的命名空间就是项目中通用的类库的所在。
使用步骤:
1.在util下建立Factory类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1pcXWBia-1672665792860)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets/99921879.bmp)]
2.Factory类写代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CaUHW008-1672665792861)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets/2338246992.bmp)]
3.主窗体调用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HueNyTuh-1672665792862)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets/1193091873.bmp)]
4.按钮或菜单调用的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v3NlJexF-1672665792863)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets/2805152725.bmp)]
-
解决bug,在新窗体的关闭时刻的代码:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OqW6BGnu-1672665792865)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568187207777.png)]
2.模糊查询问题
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPIEgfsG-1672665792865)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568187562451.png)]
String sql = String.Format("select typeid 编号,typeName 姓名,memo 备注 from teacherType where typeName like '%0%'", txtType.Text);
//调用DBHelper公共类的查询方法;查询出来的数据就给了dt这个数据表对象。
DataTable dt = DBHelper.query(sql);
dataGridView1.DataSource = dt;
增加的时候,需要注意已经存在类型的问题:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NwEvfTXT-1672665792866)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568192603386.png)]
3.DataGridView数据表格控件
SelectionMode—>FullRowSelect ,选择的是整行;
4.分页处理
思路:
4.1 掌握mysql的分页原理
-- SELECT * FROM teacher
-- order by teachId asc
-- limit 6,3
-- limit 规律: (页数-1)*每页行数 ,每页行数 3-1=2*3
-- LIMIT 0,3
-- >大于第1个 3:每页显示多少条;
-- 第2页 每页3条;
-- 第3页 每页3天;
-- 23%3==0 求余==0?24/3:23/3+1
-- 23条,每页3条; 23/3=7.1 -->8条;
-- 24条,每页3条;24/3=8
4.2 掌握PageHelper.cs分页类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
/**
* 分页类
*/
namespace chapter05.util
class PageHelper
//1.设置分页类的自定义属性;
public int pageSize = 3; //每页显示为3页
public int count = 0; //总数为0,,这个变量可以变化;
public int nowPage = 1; //当前页为第一页
//2.设置方法;
//2.1 计算当前页从第几条开始;第一页:(1-1)*3=0,3;(2-1)*3=3,3;(3-1)*3,3
//limit 0,3;limit 3,3;limit 6,3
public int getBegin()
return (nowPage - 1) * pageSize;
//2.2 返回总页数
public int getTotalPage()
//return this.count % pageSize==0 ? this.count / pageSize : this.count / pageSize + 1;
return this.count % this.pageSize == 0 ? this.count / this.pageSize :this.count / this.pageSize + 1;
4.3.掌握首页 、上一页、下一页、尾页的实现思路
首页:
pageHelper.nowPage = 1; //设置分页类的当前页为第一页
尾页:
pageHelper.nowPage = pageHelper.getTotalPage();
上一页:
pageHelper.nowPage--;
if (pageHelper.nowPage < 1)
MessageBox.Show("已经到达首页","提示信息",MessageBoxButtons.OK,MessageBoxIcon.Information);
pageHelper.nowPage = 1;
下一页:
pageHelper.nowPage++;
if (pageHelper.nowPage> pageHelper.getTotalPage())
MessageBox.Show("已经到达尾页", "提示信息", MessageBoxButtons.OK, MessageBoxIcon.Information);
pageHelper.nowPage = pageHelper.getTotalPage();//当前页为总页数;
4.4 分层思路及其dao类的思想
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Zqe94yh-1672665792867)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568791087300.png)]
调用关系:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IR53UDqZ-1672665792868)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568791527330.png)]
flush()是公共的被调用的方法,private:在本类使用。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nhmVbe5v-1672665792876)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568791638199.png)]
flush()方法去调用dao的方法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oEAdVola-1672665792877)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1568791706334.png)]
好处:比如说李嘉顺,掌握的sql语句非常好,
是不是可以安排他写XXXDao一堆。几个模块写几个?dao类里面可以写很多增删改查的方法。
有查询所有的方法、模糊查询、连接查询、修改方法、根据条件删除。
企业开发就是这样的思路。快、分工明确。
宿舍管理系统视频 https://edu.csdn.net/course/detail/27107
第十章 项目扩展
1.托盘图标
托盘的含义:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tCu5pxJq-1672665792878)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569827539413.png)]
像QQ图标这种就是托盘图标。
C#:NotifyIcon
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8JxNLq6J-1672665792879)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569827661065.png)]
让我们的程序,不在任务栏显示:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vj63L74I-1672665792881)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569827822781.png)]
右键菜单(快捷菜单):[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DXfWtvNO-1672665792881)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569827915059.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uQroEQmH-1672665792882)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569828061248.png)]
设置NotifyIcon的右键菜单是刚才添加的右键菜单:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1F6xecf5-1672665792883)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569828109055.png)]
再增加窗体可以最大化(正常化是Normal)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDchUkMn-1672665792884)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569828942059.png)]
2.调用外部程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kvSzQjo8-1672665792885)(E:\\政通路\\课堂笔记\\S1\\C#课程\\assets\\1569831970582.png)]
using System.Diagnostics;//计算器进程
using System.Runtime.InteropServices; //引用系统命名空间。
调用外部exe
calc = Process.Start("calc.exe");
3.mysql加密的几种方式。
– INSERT into student(stuName,stuPass) values(‘lishuai’,MD5(‘123456’))
– select * from student where stuName=‘lishuai’
– select MD5(txtName.text) from 表名
– SELECT SHA(‘123456’)
INSERT into student(stuName,stuPass) values('lishuai',MD5('123456'))
select * from student where stuName='lishuai'
select MD5(txtName.text) from 表名
SELECT SHA('123456')
双向加密,一个是加密的字符串,一个是密钥。
加密后的结果:select ENCODE('123456','abc')
解密:Decode(加密字符串,解密密钥)
select DECODE(ENCODE('123456','abc'),'abc')
Select AES_ENCRYPT('zhang','aaa')
Select AES_DECRYPT(AES_ENCRYPT('zhang','aaa'),'aaa')
nt(stuName,stuPass) values(‘lishuai’,MD5(‘123456’))
– select * from student where stuName=‘lishuai’
– select MD5(txtName.text) from 表名
– SELECT SHA(‘123456’)
INSERT into student(stuName,stuPass) values('lishuai',MD5('123456'))
select * from student where stuName='lishuai'
select MD5(txtName.text) from 表名
SELECT SHA('123456')
双向加密,一个是加密的字符串,一个是密钥。
加密后的结果:select ENCODE('123456','abc')
解密:Decode(加密字符串,解密密钥)
select DECODE(ENCODE('123456','abc'),'abc')
Select AES_ENCRYPT('zhang','aaa')
Select AES_DECRYPT(AES_ENCRYPT('zhang','aaa'),'aaa')
以上是关于C#程序设计案例开发教程的主要内容,如果未能解决你的问题,请参考以下文章
C#开发课堂实录_页数447_出版日期2016.02_完整版PDF电子书下载 带索引书签目录高清版
如何用webgl(three.js)搭建一个3D库房-第一课