【图书管理模块的设计与实现】【4】

  • 关键技术及实现过程

访问数据库,在用户登录、用户信息管理以及对图书信息进行增删改查的处理操作上,使用LINQ链接数据库并显示在datagridview中的操作。

登录界面,点击登录按钮出发click事件,检验验证通过,实现窗体跳转到主界面。

进入图书信息管理操作,使用LINQ链接数据库并处理数据的实现:

  • 添加LINQ to SQL组件;
  • 创建对象模型:定义若干个映射数据库表的类,并使用元数据属性声明它为实体类;
  • 应用对象模型:先创建DataContext类的实例,再创建并执行LINQ查询,实现具体的

数据的查询、增加、更新和删除。

导出Excel,引入了Microsoft.Office.Interop.Excel程序集,添加一个ExportDGVToExcel类,创建Excel对象并获取,定义存放的文件名、文件类型等,进行自定义设置获得的sheet1,创建缓存数据,获取数据,验证DataGridView单元格中的类型,如果是string或是DataTime类型,则在放入缓存时在该内容前加入“”;将datagridview中的数据写入Excel中。

图书信息的读取和写入二进制文件,创建了FileStream文件流对象,并基于该对象创建了BinaryWriter对象,调用BinaryWriter对象的写入文件内容;继续创建BinaryReader对象,调用BinaryReader对象的读取文件内容,最后显示到listbox中。

使用Random()方法随机产生数字验证码进行登录验证操作;使用try catch方法实现用户输入的合法性检验;在主界面中,添加了menuStrip、toolStrip、statusStrip三种菜单工具栏,使用Timer组件实现时间的显示,屏幕保护程序;使用imagelist实现图书图片的切换等等。

主要程序代码

  • 访问数据库代码
<connectionStrings>
<add name="BookSystem.Properties.Settings.BookConnectionString"
    connectionString="DataSource=DESKTOP-A1H5BN9;InitialCatalog=Book; Integrated Security=True";providerName="System.Data.SqlClient" />
</connectionStrings>
//修改图书信息
      private void btnmodify_Click(object sender, EventArgs e){
         BookDataContext db = new BookDataContext();//实例化LINQ类对象
         var results = from r in db.book
                 where r.book_id == bookid.Text.Trim()
                 select r;//根据ID查询得到数据集
         if (results != null){
           foreach (book r in results)//遍历数据集{
              r.book_name = bookname.Text.Trim();//将对应的数据重新赋值到r对象中
              r.author = bookaut.Text.Trim();
              r.publisher = bookpub.Text.Trim();
              r.date = Convert.ToDateTime(bookdate.Text.Trim());
              r.price = Convert.ToDecimal(bookpri.Text.Trim());
              r.book_class = bookclass.Text.Trim();
              r.num = Convert.ToInt32(booknum.Text.Trim());
                }
                db.SubmitChanges();//提交修改到数据库
                MessageBox.Show("修改成功");
                Bind();
                btnclear_Click(sender, e);//清空 调用重置
            }
        }
  • 文件读写代码
private void btnSave_Click(object sender, EventArgs e)
{
    FileStream fs = new FileStream(@"d:\data\bookinfo.dat", FileMode.Append, FileAccess.Write);
            BinaryWriter bw = new BinaryWriter(fs);//创建二进制文件流写文件
            bw.Write(Int32.Parse(bookid.Text));
            bw.Write(bookname.Text);//写入姓名
            bw.Write(bookaut.Text);
            bw.Write(bookpub.Text);
            bw.Write(bookdate.Text);
            bw.Write(bookpri.Text);
            bw.Write(bookclass.Text);
            bw.Write(booknum.Text);           
            fs.Close();
            bw.Close();
        }
private void btnShow_Click(object sender, EventArgs e)
        {
            lstShow.Items.Clear();//清除重置
            lstShow.Items.Add("书号\t书名\t作者\t出版社\t出版日期\t\t定价\t图书分类\t库存数量");
            FileStream fs = new FileStream(@"d:\data\bookinfo.dat", FileMode.Open, FileAccess.Read);
            BinaryReader br = new BinaryReader(fs);
            fs.Position = 0;
            while (fs.Position != fs.Length)//逐条读取对应项的数据
            {
                int book_id = br.ReadInt32();
                string book_name = br.ReadString();
                string author = br.ReadString();
                string publisher = br.ReadString();
                string date = br.ReadString();
                string price = br.ReadString();
                string book_class = br.ReadString();
                string num = br.ReadString();
                string result = string.Format("{0}\t{1}\t{2}\t{3}\t{4}\t{5}\t{6}\t{7}", book_id, book_name, author, publisher, date, price, book_class, num);//占位符放进三个值
                lstShow.Items.Add(result);
            }
            br.Close();
            fs.Close();
        }
  • 导入Excel代码

    private void ExportExcels(string fileName, DataGridView myDGV){
                string saveFileName = "";
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.DefaultExt = "xls";
                saveDialog.Filter = "Excel文件|*.xls";
                saveDialog.FileName = fileName;
                saveDialog.ShowDialog();
                saveFileName = saveDialog.FileName;
                if (saveFileName.IndexOf(":") < 0) return; //被点了取消
               Microsoft.Office.Interop.Excel.Application xlApp =
    new Microsoft.Office.Interop.Excel.Application();
                if (xlApp == null)//判断datagridview中内容是否为空
                {
                    MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                    return;
                }
                Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks;
                Microsoft.Office.Interop.Excel.Workbook workbook =
    workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
        Microsoft.Office.Interop.Excel.Worksheet worksheet =
                (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
                //写入标题
                for (int i = 0; i < myDGV.ColumnCount; i++)
                {
                    worksheet.Cells[1, i + 1] = myDGV.Columns[i].HeaderText;
                }
                //写入数值
                for (int r = 0; r < myDGV.Rows.Count; r++)
                {
                    for (int i = 0; i < myDGV.ColumnCount; i++)
                    {
                        worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r].Cells[i].Value;
                    }
                    System.Windows.Forms.Application.DoEvents();
                }
                worksheet.Columns.EntireColumn.AutoFit();//列宽自适应
                if (saveFileName != "")
                {
                    try
                    {
                        workbook.Saved = true;
                        workbook.SaveCopyAs(saveFileName);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                    }
                }
                xlApp.Quit();
                GC.Collect();//强行销毁
                MessageBox.Show("文件: " + fileName + ".xls 保存成功", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值