C# Windows桌面應用 ---- 實例:文件讀寫

實例題目:對輸入的賬號、姓、名、餘額信息保存到文件,並可以讀取到界面。

演示:
在這裏插入圖片描述
創建三個項目文件:
在這裏插入圖片描述
設計思路:
由於讀和寫的界面差不多,就是按鈕button不一樣,這樣的話,可以做一個父親窗體,讓讀和寫兩個窗體繼承父窗體即可(關鍵操作)。
對於數據的操作,可以將數據封裝起來,這樣更符合面向對象的編程,下面創建了Record類。

一個關鍵操作:
不在同一個項目的類不能直接繼承!!!
需要如下操作:

  1. 將BankUIForm項目右擊屬性,設置它的輸出類型爲類庫;
  2. 右擊BankUIForm項目點生成(每次修改都要重新生成);
  3. 將BankUIForm類庫分別引用到ReaderForm和WriterForm項目中(打開項目,右擊引用);在這裏插入圖片描述

一、BankUIForm項目

Record 類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 文件與流
{
    public class Record // 這裏需要設置訪問屬性問public 不然後面會訪問不了
    {
        // 四個紀錄屬性
        public int Account { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public decimal Balance { get; set; }
        // 構造函數
        public Record()
            :this(0,string.Empty,string.Empty,0m)
        { }
        // 構造函數
        public Record(int account,string firstName,string lastName,decimal balance)
        {
            Account = account;
            FirstName = firstName;
            LastName = lastName;
            Balance = balance;
        }
    }
}

BankUIForm窗體(父親)的代碼

在這裏插入圖片描述

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 文件與流
{
    public partial class BankUIForm : Form
    {
        public BankUIForm()
        {
            InitializeComponent();
        }
        public void Form1_Load(object sender, EventArgs e)
        {}
        // 獲取 窗體Textbox控件內容,保存在record返回
        public Record GetTextBoxText()
        {
            Record record = new Record(Int32.Parse(accountTextBox.Text), firstnameTextBox.Text, lastnameTextBox.Text, Decimal.Parse(balanceTextBox.Text));
            return record;
        }
        // 設置 窗體Textbox控件內容
        public void SetTextBoxText(Record record)
        {
            accountTextBox.Text = record.Account.ToString();
            firstnameTextBox.Text = record.FirstName;
            lastnameTextBox.Text = record.LastName;
            balanceTextBox.Text = record.Balance.ToString();
        }
        // 清空 窗體Textbox控件內容
        public void ClearTextBox()
        {
            foreach (Control control in Controls)
            {
                if(control is TextBox)
                {
                    ((TextBox)control).Clear();
                }
            }
        }
    }
}

二、WriterForm項目:繼承BankUIForm窗體,寫文本

在這裏插入圖片描述

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;
using 文件與流;
using System.IO;

namespace WriterForm
{
    public partial class writerForm : 文件與流.BankUIForm
    {
        public writerForm()
        {
            InitializeComponent();
        }
        FileStream filestream; // 文件流對象:水池
        StreamWriter streamwriter;  // 寫入流:水管
        // 打開文件
        private void button1_Click(object sender, EventArgs e)
        {
            DialogResult result; // 紀錄窗體返回值
            string fileName; //紀錄文件名
            // 創建打開文件保存窗體
            using (SaveFileDialog saveFile = new SaveFileDialog())
            {
                saveFile.CheckFileExists = false;
                result = saveFile.ShowDialog();
                fileName = saveFile.FileName;
            }
            // 判斷是否點了確定,如果是則進入
            if(result== DialogResult.OK)
            {
                if (fileName == null)
                {
                    MessageBox.Show("文件名不能爲空!");
                }
                // 文件名不爲空
                else
                {
                    try
                    {
                        // 創建文件流
                        filestream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);
                        // 寫流連接池塘
                        streamwriter = new StreamWriter(filestream);
                        enterButton.Enabled = true;
                        saveButton.Enabled = false;

                    }
                    catch (Exception exp)
                    {
                        MessageBox.Show("文件寫入出錯!",exp.Message);
                    }
                }
            }
        }
        // 寫入數據
        private void enterButton_Click(object sender, EventArgs e)
        {
            try
            {
                // 將窗體正確數據寫入文本
                Record record=GetTextBoxText();
                streamwriter.WriteLine("{0},{1},{2},{3}", record.Account, record.FirstName, record.LastName, record.Balance);
            }
            catch (Exception)
            {
                MessageBox.Show("填寫格式錯誤!"); ;
            }
            ClearTextBox(); // 清空textbox控件內容
        }
        //  結束輸入,關閉文件流,程序退出
        private void exitButton_Click(object sender, EventArgs e)
        {
            streamwriter.Close();
            Application.Exit();
        }
    }
}

三、ReaderForm項目:繼承BankUIForm窗體,讀文件

在這裏插入圖片描述

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;
using System.IO;
using 文件與流;

namespace ReadForm
{
    public partial class ReaderFoem : 文件與流.BankUIForm
    {
        public ReaderFoem()
        {
            InitializeComponent();
        }
        FileStream filestream; // 文件流對象 :水池
        StreamReader streamreader; // 文件讀對象:水管
        //  打開文件
        private void readButton_Click(object sender, EventArgs e)
        {
            DialogResult result; // 紀錄按鈕結果
            string fileName; // 文件名
            // 創建文件打開窗體
            using (OpenFileDialog openfile=new OpenFileDialog())
            {
                result = openfile.ShowDialog(); // 返回結果
                fileName = openfile.FileName; //紀錄文件名
            }
            // 如果按了確定按鈕
            if(result== DialogResult.OK)
            {
                try
                {
                    if (fileName == null) 
                    {
                        MessageBox.Show("文件名不能爲空!");
                    }
                    // 文件名不爲空時,開始讀文件
                    else
                    {
                        // 創建文件流對象,池塘
                        filestream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                        // 創建讀對象,連接池塘
                        streamreader = new StreamReader(filestream);
                        nextButton.Enabled = true;
                        readButton.Enabled = false;
                    }
                }
                catch (Exception) // 捕獲異常
                {
                    MessageBox.Show("打開文件失敗!");
                }
            }
        }
        // 點擊下一條按鈕
        private void nextButton_Click(object sender, EventArgs e)
        {
            string str; // 保存所讀取的一行數據字符串
            string[] values; // 保存4項數據
            try
            {
                str = streamreader.ReadLine(); // 讀數據
                // 文件讀完,關閉流對象
                if(str==null)
                {
                    streamreader.Close(); 
                    readButton.Enabled = true; // 此文件讀取完成,可以繼續讀取下一個文件
                    nextButton.Enabled = false;
                    ClearTextBox();
                    MessageBox.Show("文件讀完 !");
                }
                else
                {
                    // 將數據顯示在窗體上
                    values = str.Split(',');
                    Record record = new Record(Int32.Parse(values[0]), values[1], values[2], Decimal.Parse(values[3]));
                    SetTextBoxText(record);
                }
            }
            catch (Exception)
            {
                MessageBox.Show("文件讀寫錯誤!");
            }
        }
        // 退出按鈕
        private void exitButton_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
    }
}

螢火蟲的光點雖然微弱,但亮着便是向黑暗挑戰

關注微信公衆號:碼農雲庫

進步需要交流 !!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章