Windows 窗体应用程序——图书管理系统总结(不带数据库操作

时间:2024-03-07 20:15:36

Windows 窗体应用程序——图书管理系统总结(不带数据库操作)

 

图书管理系统简介

 

实现功能:在windows Form平台上实现图书的添加、修改、删除功能

 

 

附图1:

图书管理系统主界面:

 

 

 

 

附图2:

图书管理系统修改图书界面:

 

 

 

 

 

功能实现:

分析图书管理系统主界面

对象分析:

Models 实例类

1、 图书类。图书对象的属性:图书编号、图书名称、图书价格、出版社、出版日期

2、 出版社类。用来存储出版社下拉框对象。出版社类的属性:出版社编号、出版社名称

功能分析:

图书管理系统主界面:实现按钮功能:

1、 添加图书

步骤分析:用户在控件中输入内容,点击按钮“添加图书”后。数据同步显示在下面的DataGridView控件中。

2、 修改图书  

步骤分析:用户在DataGridView中选中一条记录,单击按钮“修改图书”后,跳转到图书管理系统修改界面。在修改界面中展示要修改的图书对象。修改完成之后。点击按钮“提交”后,返回主界面显示修改完的内容。

3、 删除图书

步骤分析:用户在DataGridView中选中一条记录,单击按钮“删除图书”,弹出是否删除提示信息。确认删除后,该记录在DataGridView中移除

 

图书管理系统修改界面:实现按钮功能:

1、 提交修改

步骤分析:用户点击“提交”按钮后,修改后的图书内容返回主界面显示

 

 

具体实现

准备工作:制作两个窗体。主界面窗体(FrmMainBook.cs)修改界面窗体(FrmEditBook.cs)

注意

1、时间日期控件。修改属性:Format: 默认是Long 格式:2018年3月31日需要改为 short 格式:2018/3/31

2、 下拉框控件显示出版社名称实际存储出版社编号。具体参照下面出版社下拉框初始化方法

3、 DataGridView控件。添加中文显示列。并且修改列的属性与图书对象属性对应。绑定数据源为图书的属性,详见附图3

 

 

 

 

 

 

 

附图3

 

 

 

 

 

 

一、添加图书功能

步骤一:构造函数初始化

初始化内容:

1、 出版社下拉框初始化

2、 DataGridView自动生成列属性修改

 

  public FrmMainBook()

        {

            InitializeComponent();

            //初始化出版社

            InitPublisher();

            this.dgvBookList.AutoGenerateColumns = false;//不允许 DataGridView自动生成列

}

//初始化出版社

private void  InitPublisher()

        {

            //封装出版社对象,运用集合初始化器和对象初始化器赋予出版社下拉框固定值

            List<Publisher> publisherList = new List<Publisher>()

            {

                new Publisher() {PublisherId=1,PublisherName="北京出版社" },

                new Publisher() {PublisherId=2,PublisherName="上海出版社" },

                new Publisher() {PublisherId=3,PublisherName="南京出版社" },

                new Publisher() {PublisherId=4,PublisherName="山东出版社" },

                new Publisher() {PublisherId=5,PublisherName="天津出版社" },

            };

            //设置数据源

            this.cboxPubliserId.DataSource = publisherList;

            this.cboxPubliserId.DisplayMember = "PublisherName"; //设置下拉框显示名称

            this.cboxPubliserId.ValueMember = "PublisherId";  //设置下拉框提交值成员

            this.cboxPubliserId.SelectedIndex = -1; //下拉框开始显示空

        

 

        }

步骤二;添加图书按钮

private void btnAdd_Click(object sender, EventArgs e)

        {

            // [1] 检查数据、验证数据

            if(txtBarCode.Text.Trim()==" " || txtBarCode.TextLength == 0)

            {

                MessageBox.Show("图书编码不能为空!", "提示");

                txtBarCode.Focus();//将光标移到图书编码控件

                return;

            }

            // [2] 封装对象(将用户输入的内容转换为对象)

            Book book = new Book()

            {

                BarCode = this.txtBarCode.Text,

                BookName = this.txtBookName.Text,

                Price = Convert.ToDouble(this.txtPrice.Text),

                PublisherId =Convert.ToInt32(cboxPubliserId.SelectedValue),//注意获取下拉框控件的值

                PublishDate=Convert.ToDateTime(this.dtpPublishDate.Text)

            };

            // [3] 将对象保存到数据源(多数情况是数据库、也可以是其他数据源)

            // [4] 显示数据

           

            bookList.Add(book);

            //设置数据源

            this.dgvBookList.DataSource = null;

            this.dgvBookList.DataSource = bookList;

 

            //清空数据

            this.txtBarCode.Clear();

            this.txtBookName.Clear();

            this.txtPrice.Clear();

            this.cboxPubliserId.SelectedIndex = -1;

            this.txtBarCode.Focus();

        }

 

 

 

二、修改图书

 

主界面(FrmMainBook.cs):

private void btnEdit_Click(object sender, EventArgs e)

        {

           

            //[1]验证 如果当前dgv没有数据,则不执行任何操作

            if (this.dgvBookList.CurrentRow ==null || this.dgvBookList.RowCount == 0)

            {

                MessageBox.Show("请选择有效行", "提示");

                return;

            }

            //[2]获取当前修改的对象,首先找到图书条码,然后在dgv中找到当前对象

            String barCode = this.dgvBookList.CurrentRow.Cells["BarCode"].Value.ToString();

            Book objBook = (from b in bookList where b.BarCode.ToString().Equals(barCode) select b).First<Book>();

            //[3]显示要修改的窗体 把对象传到修改窗体中,这里不能用show方法要用ShowDialog()方法。注释:用Show()方法的话点击关闭也会继续执行

            FrmEditBook edit = new FrmEditBook(objBook);

            DialogResult result= edit.ShowDialog();

 

            //[4]根据修改是成功来判定是否显示

            if (result == DialogResult.OK)

            {

                //首先获取修改后的对象

                Book book =(Book) edit.Tag;

                //重新绑定当前行的值

                Book editBook = (from b in bookList where b.BarCode.ToString().Equals(barCode) select b).First<Book>();

                editBook.BarCode = book.BarCode;

                editBook.BookName = book.BookName;

                editBook.Price = book.Price;

                editBook.PublishDate = book.PublishDate;

                editBook.PublisherId = book.PublisherId;

                //刷新修改窗体

                this.dgvBookList.Refresh();

 

            }

         

        }

 

修改窗体(FrmEditBook.cs)

public partial class FrmEditBook : Form

    {

        public FrmEditBook()

        {

            InitializeComponent();

           

        }

        /// <summary>

        /// 构造方法传入主界面参数,并显示要修改的图书信息

        /// </summary>

        public FrmEditBook(Book objBook)

        {

            InitializeComponent();

            //初始化出版社下拉框

            InitPublisher();

            //显示图书信息。把传过来的图书对象转化到控件中

            this.txtBarCode.Text= objBook.BarCode;

            this.txtBookName.Text = objBook.BookName;

            this.txtPrice.Text = objBook.Price.ToString();

            this.dtpPublishDate.Text = objBook.PublishDate.ToShortDateString();//时间要用ToShortDateString()

            //给下拉框赋值

            this.cboxPubliserId.SelectedValue = objBook.PublisherId;

 

 

        }

 

        /// <summary>

        /// 初始化出版社

        /// </summary>

        private void InitPublisher()

        {

            List<Publisher> publisherList = new List<Publisher>()

            {

                new Publisher() {PublisherId=1,PublisherName="北京出版社" },

                new Publisher() {PublisherId=2,PublisherName="上海出版社" },

                new Publisher() {PublisherId=3,PublisherName="南京出版社" },

                new Publisher() {PublisherId=4,PublisherName="山东出版社" },

                new Publisher() {PublisherId=5,PublisherName="天津出版社" },

            };

            //设置数据源

            this.cboxPubliserId.DataSource = publisherList;

            this.cboxPubliserId.DisplayMember = "PublisherName"; //设置下拉框显示名称

            this.cboxPubliserId.ValueMember = "PublisherId";  //设置下拉框提交值成员

            //this.cboxPubliserId.SelectedIndex = -1;

 

 

        }

       

       

        /// <summary>

        /// 提交修改并在主界面中展示修改好的内容

        /// </summary>

        /// <param name="sender"></param>

        /// <param name="e"></param>

        private void btnCommit_Click(object sender, EventArgs e)

        {

            //提交修改 与添加的方法类似

            // [1] 检查数据、验证数据

            if (txtBarCode.Text.Trim() == " " || txtBarCode.TextLength == 0)

            {

                MessageBox.Show("图书编码不能为空!", "提示");

                txtBarCode.Focus();

                return;

            }

            // [2] 封装对象(将修改的内容装换为对象)

            Book book = new Book()

            {

                BarCode = this.txtBarCode.Text,

                BookName = this.txtBookName.Text,

                Price = Convert.ToDouble(this.txtPrice.Text),

                PublisherId = Convert.ToInt32(cboxPubliserId.SelectedValue),

                PublishDate = Convert.ToDateTime(this.dtpPublishDate.Text)

            };

            // [3] 将对象保存到数据源(多数情况是数据库、也可以是其他数据源)

 

            // [4] 保存修改的对象

            this.Tag = book;

            this.DialogResult = DialogResult.OK;

            this.Close();

 

        }

}

 

三、 删除图书对象

 

private void btnDelete_Click(object sender, EventArgs e)

        {

            //[1]验证删除 提示是否确认删除;如果当前没有任何数据,则不执行操作

            if (this.dgvBookList.RowCount == 0 || this.dgvBookList.CurrentRow == null)

            {

                MessageBox.Show("没有选中删除对象", "提示");

                return;

            }

           // 删除确认

           

                DialogResult result = MessageBox.Show("确认删除?", "删除提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);

                if (result == DialogResult.Cancel)

                {

                    return;

                }

            //[2]获取当前图书对象的唯一标识图书编码然后找到该对象

            String barCode = this.dgvBookList.CurrentRow.Cells["BarCode"].Value.ToString();

            Book delBook = (from b in bookList where b.BarCode.ToString().Equals(barCode) select b).First<Book>();

            //[3]删除该对象用remove

            this.bookList.Remove(delBook);

            //[4]同步更新显示 bookList添加到dgv数据源,先清空数据源

            this.dgvBookList.DataSource = null;

            this.dgvBookList.DataSource = bookList;

        }