时间。20260907
一、学习概述 通过这一阶段对 C# 基础知识和面向对象编程的学习。从最开始学习变量、数据类型、条件判断和循环,到后面学习集合、异常处理、泛型、Windows Forms 窗口以及文件操作,我逐渐理解了一个完整程序是如何从数据处理发展到用户界面,再到数据保存的。 在学习过程中,我也通过停车场管理系统进行了综合练习。停车场项目涉及车辆信息的保存、查询、修改、删除、入场、出场和收费等功能,同时还使用了 DataGridView、TextBox、Button、FileStream、StreamWriter 等控件和类。通过这个项目,
① 创建文件流 →FileStream fs=new FileStream(tbFileAddress.Text,FileMode.Creat);
② 创建读写器 →StreamWriter sw=new StreamWriter(fs);
③ 读/写操作 →//这个重点
string line;
while ((line = sr.ReadLine()) != null)
{
string[] data = line.Split('|');
if (data.Length >= 6)
{
Cars c = new Cars();
c.CarNo = data[0];
c.InTime = DateTime.Parse(data[1]);
c.OutTime = DateTime.Parse(data[2]);
c.ParkTime = double.Parse(data[3]);
c.Money = decimal.Parse(data[4]);
c.Paid = bool.Parse(data[5]);
cars.Add(c);
}
}
④ 关闭读写器 →sw.Close();
⑤ 关闭文件流---fs.Close
二、集合 集合能够更加方便地保存和管理一组数据。在实际开发中,我们经常需要同时保存很多个对象,例如停车场系统中需要保存多辆汽车的信息,这时候集合就非常有用。 C# 中常见的集合有数组、List、Dictionary 等。其中 List<T> 是学习和实际使用中非常常见的一种集合。List 可以保存多个相同类型的数据,而且可以根据需要动态增加和删除元素。
List<Car> cars = new List<Car>();
这里定义了一个保存 Car 对象的集合。添加车辆可以使用 Add 方法: cars.Add(car); 删除数据可以使用 Remove 或 RemoveAt,查询数据可以使用循环或者 LINQ 等方式完成。 集合的优点是使用方便、长度可以动态变化,而且能够配合对象进行管理。例如停车场中有很多 Car 对象,就可以使用 List<Car> 保存所有车辆。程序中的
添加、array list.Add
删除、array.Remove()
修改、foreach (string array in array)
查询,Console.Write
等功能都可以围绕这个集合进行。 通过学习集合,我认识到程序中的数据不能只依靠一个变量保存,而应该根据数据的数量和特点选择合适的数据结构。
三、异常处理 程序运行过程中可能出现各种无法预料的问题。
例如用户输入的数据格式错误、文件不存在、文件无法打开、数组下标超出范围等。
如果这些问题没有进行处理,程序可能会直接停止运行。
C# 中使用
try、catch、finally
进行异常处理。
基本结构如下:
try { // 可能出现异常的代码 }
catch (Exception ex) { // 异常处理 }
finally { // 最终执行的代码 }
try 中放置可能产生异常的程序代码,catch 用来捕获异常,finally 中的代码通常无论是否发生异常都会执行。
例如文件操作过程中,如果用户输入了错误的文件地址,程序打开文件时就可能出现异常。这时候可以使用 try-catch 捕获异常,并通过 MessageBox 提示用户,而不是让程序直接崩溃。
异常处理让我认识到,一个完整的程序不仅要考虑正常情况下能够运行,还要考虑错误情况下应该怎么办。合理使用异常处理可以提高程序的稳定性和用户体验。
四、泛型 泛型是 C# 中非常重要的一个概念。
泛型可以让程序设计更加灵活,同时减少重复代码。
例如: List<int> nums = new List<int>(); List<string> names = new List<string>(); List<Car> cars = new List<Car>(); 虽然这些 List 保存的数据类型不同,但是使用的 List 结构基本相同。
通过泛型,可以在定义集合的时候指定具体的数据类型。 泛型中的 T 可以理解为一个暂时没有确定的类型。
例如: class MyClass<T> { public T Data; } 当使用 MyClass<int> 时,T 就代表 int;当使用 MyClass<string> 时,T 就代表 string。
泛型的主要优点是代码复用性强、类型安全,而且可以减少类型转换。以前可能需要把数据定义成 object,再进行类型转换,而使用泛型之后可以直接指定需要的数据类型。
通过学习泛型,我进一步理解了面向对象程序设计中的“代码复用”思想。泛型不是简单地减少代码,而是让同一种程序结构能够适用于不同的数据类型。
五、Windows Forms 窗口
Windows Forms 是 C# 中用于开发 Windows 桌面应用程序的一种技术。
通过 Windows Forms,可以使用窗口、按钮、文本框、标签、表格等控件制作图形化程序。
在停车场管理系统中,我使用了 Form 作为主窗口,并添加了 Button、Label、TextBox 和 DataGridView 等控件。
例如: - Button:执行添加、删除、修改、查询、入场、出场和收费等操作。
- Label:显示提示信息,例如“车辆信息”。
- TextBox:输入车辆信息或文件地址。
- DataGridView:以表格形式显示车辆数据。
- Form:作为整个程序的主窗口。
Windows Forms 的一个重要特点是事件驱动。
例如用户点击按钮后,会触发按钮的 Click 事件:
private void btnAdd_Click(object sender, EventArgs e) { // 执行操作 }
这说明 Windows Forms 程序和普通控制台程序有所不同。
程序并不是简单地从第一行执行到最后一行,而是等待用户操作,然后根据用户的操作执行相应事件。 DataGridView 也让我认识到了“数据绑定”的概念。
程序中的集合保存数据,而 DataGridView 负责把数据显示给用户。通过刷新绑定,可以让数据发生变化后及时显示在窗口中。
六、文件操作 文件操作是本阶段学习中非常重要的一部分。
程序运行时的数据一般保存在内存中,程序关闭以后数据可能会消失。
因此,需要通过文件将数据保存下来。
C# 中可以使用 FileStream、StreamWriter 和 StreamReader 进行文件操作。
FileStream 主要负责建立程序与文件之间的数据流。
例如:
FileStream fs = new FileStream( tbFileAddress.Text, FileMode.Create);
StreamWriter 可以向文件中写入文字: StreamWriter sw = new StreamWriter(fs); sw.WriteLine("车辆信息");
完成操作后需要关闭对象: sw.Close(); fs.Close();
读取文件时可以使用
StreamReader: StreamReader sr = new StreamReader(fs);
string str = sr.ReadLine();
在停车场项目中,我使用文件保存车辆信息,例如: CarNo|InTime|OutTime|ParkTime|Money|Paid
每辆车的信息按照一定格式保存到文件中。
程序再次启动时,可以读取文件中的数据,然后重新加载到集合中,最后显示到 DataGridView。 文件操作的学习让我理解了数据持久化的基本概念,
简单来说,就是让程序的数据能够保存下来,而不是只存在于程序运行期间。
八、学习体会
通过这一阶段的学习,我最大的收获是认识到编程不仅仅是记住代码,更重要的是理解程序的结构和各部分之间的关系。
集合解决的是“如何保存多个数据”的问题;泛型解决的是“如何让代码适用于不同类型”的问题;异常处理解决的是“程序出现错误时怎么办”的问题;Windows Forms 解决的是“如何让用户通过窗口操作程序”的问题;文件操作解决的是“如何把程序数据保存下来”的问题。
在实际编程过程中,我也遇到过很多问题,例如控件名称不一致、变量没有声明、按钮事件没有连接、DataGridView 没有正确绑定、文件读取出现异常等。通过不断修改和调试,我逐渐认识到程序出现问题时不能只看错误提示,而应该检查变量、控件名称、事件、数据绑定以及程序执行流程。
总的来说,这一阶段的学习让我从简单的 C# 语法逐渐进入到实际项目开发。
尤其是停车场管理系统,让我把课堂中学习的知识应用到了一个完整的程序中。
以后继续学习 C# 时,我还需要进一步掌握数据库、LINQ、面向对象设计、分层开发以及更复杂的项目结构,从而提高自己的编程能力和解决实际问题的能力。