C#程序学习笔记

控制台编程基础

基础信息

C#是一个现代的、通用的、面向对象的编程语言,它是由微软开发的

开发工具:VS

新建项目

image-20250218223758519

注意这里要选第二个

C#程序的结构

第一段代码(输出hello world)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
using System;
/*在程序中包含system命名空间*/
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSPro002
/*namespace声明,一个namespace包含一系列的类。
CSPro002命名空间包含了类Program*/
{
internal class Program
{
/*class声明,类Helloworld包含了程序使用的数据和方法声明
类中一半有多个方法,方法定义了类的行为,在这里类中有一个main方法*/
static void Main(string[] args)
{
/*和C一样,程序的入口*/
Console.WriteLine("Hello,world!");
/*输出语句*/
}
}
}

先看这个helloworld的代码,观察一下程序结构
个人的理解是:利用了C++的namespace,同时main方法和类中定义方法的模式又是java的
总之就是先声明namespace,在namespace中定义类
在类中定义方法。

C#语言的特点

  • C#是大小写敏感的
  • 所有的语句和表达式比如以分号结尾
  • 程序运行从main方法开始
  • 与java不同,文件名可以不同于类的名称

C#程序执行步骤原理

  1. 程序员编写源代码(调用.net framework类库)
  2. 源代码被编译,编译成中间代码MSIL(支持多种语言格式源代码编译成相同的中间代码)
  3. 中间代码在framework中的公共语言运行时CLR环境中被二次编译成机器语言
  4. 经过二次编译的代码在操作系统平台下运行。.net framework : 主要包括公共语言运行时CLR和类库

C#的注释

简单的分成单行和多行

1
2
//单行注释
/*多行注释,行内注释*/

控制台输出

不换行输出

1
2
3
Console.Write("Hello");
Console.Write("world!");
/*输出后不换行*/

换行输出

1
2
3
Console.WriteLine("Hello");
Console.WriteLine("world!");
/*输出后换行*/

转义字符

  • 空格:用于分割字符
  • 制表符(\t):用于定位显示的数据,与word中Tabl的文字效果类型
  • 换行符(\n):用于是现在新的一行输出信息。
  • 其他转义字符:如单双引号等

示例:输出姓名、年龄、分数列表,要求类似表格形式排列整齐

1
2
3
Console.Write("姓名\t年龄\t分数\n" +
"jack\t23\t78\n" +
"tom\t20\t80\n");

示例:输出 我爱“C#”编程

1
Console.WriteLine("I love \"C#\" coding");

变量和数据类型

变量和常量

变量:在程序运行给过程中,存储的内容可以被改变
常量:在程序运行的过程中,存储的内容不能被改变

变量和常量都是在计算机内部申请的存储空间,在这块空间上操作数据

变量举例:

1
2
3
int age - 20;
age - 21;
Console.WriteLine(age);

常量举例

1
2
3
//圆周率程序会报错,原因是PI是一个const定义的常量,常量不允许改变
const double PI = 3.14;
PI = 3.15;//报错

数据类型

基本类型如下:(能够表示的数据范围由小到大)

整型:byte(sbyte) (u)short (u)int (u)long
小数:float double
布尔: bool
字符:char
引用类型:String类型不是基本数据类型,是一种特殊的引用类型。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CSPro003
{
internal class Program
{
static void Main(string[] args)
{
/*变量和常量*/
/*变量*/
int age;//变量的声明
age = 18;//变量赋值
int age2 = 18;/*声明+赋值*/
Console.WriteLine(age);
Console.WriteLine(age2);

/*常量(使用const关键字,常量名习惯大写)*/
const double PI = 3.14;
//PI = 3.15; 报错
Console.WriteLine(PI);

/*数据类型*/
/*
1 值类型 2 引用类型
值类型:
整数类型 byte(sbyte) ,short(ushort),int(uint),
浮点型 float double decimal(高精度,适用于钱)
字符 char
布尔 bool
*/

byte n1 = 20;
Console.WriteLine(n1);

// float n2 = 10.1;/*同样报错,同样默认为double*/
float n2 = 10.1f; /*同样用强制类型转换*/
Console.WriteLine(n2);
char n3 = 'a'; /*给char类型赋值,使用单引号,单引号里面只能是一个字符*/
Console.WriteLine(n3);
bool n4 = false; /*只能是t或f*/
Console.WriteLine(n4);

/*sizeof关键字 获取数据类型占用空间
maxValue 数据类型最大值
minValue 数据类型最小值*/

Console.WriteLine("byte空间"+sizeof(byte)+"最小值"+byte.MinValue + "最大值:" + byte.MaxValue);
Console.WriteLine("sbyte空间"+sizeof(sbyte) +"最小值"+ sbyte.MinValue + "最大值:" + sbyte.MaxValue);
Console.WriteLine("short空间"+sizeof(short) +"最小值"+ short.MinValue + "最大值:" + short.MaxValue);
Console.WriteLine("ushort空间"+sizeof(ushort) +"最小值"+ ushort.MinValue + "最大值:" + ushort.MaxValue);
Console.WriteLine("int空间"+sizeof(int) +"最小值"+ int.MinValue + "最大值:" + int.MaxValue);
Console.WriteLine("uint空间"+sizeof(uint) +"最小值"+ uint.MinValue + "最大值:" + uint.MaxValue);
Console.WriteLine("long空间"+sizeof(long) +"最小值"+ long.MinValue + "最大值:" + long.MaxValue);
Console.WriteLine("float空间"+sizeof(float) +"最小值"+ float.MinValue + "最大值:" + float.MaxValue);
Console.WriteLine("double空间"+sizeof(double) +"最小值"+ double.MinValue + "最大值:" + double.MaxValue);
Console.WriteLine("char空间"+sizeof(char));
Console.WriteLine("bool空间"+sizeof(bool));

//string类型 特殊类型,引用数据类型
string str1 = "hello";
//使用双引号赋值 双引号里面可以存储多个字符
Console.WriteLine(str1);

//变量Console打印
int age1 = 50;
int age2 = 40;
int age3 = 25;
//拼接打印
Console.WriteLine("age1" + age1
+"age2" + age2
+ "age3" + age3);
//使用占位符
Console.WriteLine("刘备年龄:{0},关于年龄:{1},张飞年龄:{2}",age1,age2,age3);

}
}
}

运算符、表达式和数据类型

表达式

表达式:表达式是指由操作数和运算符组成的用于完成某种运算功能的语句。

运算符

算数运算符

算术运算符用在数学表达式中,它们的作用和在数学中的作用一样。下表列出了所有的算术运算符。
表格中的示例假设整数变量A的值为10,变量B 的值为20;

image-20250226185141700

其中+运算符,除了数学运算,还可以再输出的过程中进行数据拼接,例如:

窗口化编程基础

前面的学习过程还是按照传统的应用台控制系统学的,但是从上第一节课开始我才知道这学期要学的是窗体应用,
这一点和这学期的培养方案也有关系,因为培养方案来看这学期学的主要是图形化开发。

然后我打算结合视频和已经有的知识直接来开发大作业。

图书管理系统设计

1、分为管理员和普通用户

2、主要功能:登陆,注册,图书的管理(增删改查),借还书

3、数据库
管理员表:只需要账号(id)密码(password);
用户表:id,name ,sex,pwd;
图书表:id,name,autor,publisher,库存。
借书表:用户id,图书id,日期

表名和值

admin:id,pwd;
user:id,name,sex,pwd;
book:id,name,author,publisher,number;
lend:uid,bid,datetime

1、在表格控件dataGridView1中显示所有的数据,从数据库中读取数据显示在表格控件中。
2、点击返回按钮buttonBack,返回Admin_Main.cs
3、有一个label组件labelChosenBook,点击dataGridView1中的一行的值(已经设置了每次获取都是获取一整行)会把id值和name值传给这个label组件,修改这个组件的text值为当前选择的id+name
4、点击buttonDelete,进行验证,当前是否有在dataGridView1中选择值,如果有,就弹窗,是否确认删除,如果确认,就执行删除操作,删除选择的dataGridView1中的值。将数据库中的那一行消息删除。删除成功或者失败都通过弹窗提示。
5、点击buttonChange,只需要跳转到
6、点击buttonRefresh,刷新表格
7、点击btnSearchById,先判断textBoxId中的值是否是数字,如果不是则通过弹窗提示,如果是则获取textBoxId中的值作为Id来查询数据,并显示在dataGridView1中,
8、点击btnSearchByName,获取textBoxName中的值作为id来查询数据,并且显示在dataGridView1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Admin_BookManage.cs

Admin_Main.cs

BookAdd.cs

BookChange.cs

Dao.cs

Data.cs

Login.cs

Program.cs

Reset.cs

User_lend.cs

User_Main.cs

Userregister.cs

User_return.cs


你好,我正在学习一个C# 这是我开发的一个管理系统。请帮我修改User_land.cs的代码,帮我完成一些需求。
1、首先类似Admin_BookManage.cs界面,在User_land.cs中的dataGridView1中显示所有图书数据。
2、其次在用户同样可以通过btnSearchById获取textBoxId中的值查询,btnSearchByName则是获取textBoxName的值查询,然后如果是通过通过btnSearchById获取textBoxId中的值查询,将唯一的查询结果的id+name赋值给labelChosenBook标签的text值。并且选中该图书,获取该书的id
3、点击buttonLend的时候执行咨询操作,先判断现在是否有选中的图书,如果没有则弹窗没有,如果有,再判断该字段的number值是否大于0,如果不满足则再弹窗提示,如果满足则执行借书操作,生成一条lend表的字段信息,uid为当前用户id,bid为书本的id,datetime获取当前时间即可,然后将Book表中的该书本字段信息中的number值-1。
如果要满足上述功能,请告诉我要如何修改代码?

需要补充的NuGet包

包名称 版本 作用
System.Text.Json ≥6.0 JSON解析
Microsoft.CSharp ≥4.7 动态类型支持
System.Net.Http.Json ≥5.0 HTTP内容处理