GVKun编程网logo

利用java和sqlserver建立简易图书管理系统的完整步骤(java创建图书管理系统)

4

在本文中,我们将详细介绍利用java和sqlserver建立简易图书管理系统的完整步骤的各个方面,并为您提供关于java创建图书管理系统的相关解答,同时,我们也将为您带来关于BS1029-基于C#+S

在本文中,我们将详细介绍利用java和sqlserver建立简易图书管理系统的完整步骤的各个方面,并为您提供关于java创建图书管理系统的相关解答,同时,我们也将为您带来关于BS1029-基于C#+SqlServer+CS架构实现的图书信息管理系统,图书馆录入系统、C#实现简单成绩管理系统的完整步骤、Django--- 简易图书管理系统 (B/S 架构)、Java Web实现简易图书管理系统的有用知识。

本文目录一览:

利用java和sqlserver建立简易图书管理系统的完整步骤(java创建图书管理系统)

利用java和sqlserver建立简易图书管理系统的完整步骤(java创建图书管理系统)

1.所需功能:

游览所有图书、查找书籍、建立新图书,借出和归还图书,删除某一图书

2.流程:

数据库连接

  • 选择需要的操作
  • 释放连接

3.环境及其语言:

Idea,JDK13,驱动包Microsoft JDBC Driver 8.2.2 for SQL Server

4.数据库建立

  • 数据库:sqlserver2019
  • Database:library
  • Table:Book
  • Book:书籍编号,书籍名称,书籍作者,库存量
  • 管理员名:sa
  • 密码:123456

5.操作:

数据库连接:sql.T3.Test1.java

官网下载驱动包Microsoft JDBC Driver 8.2.2 for SQL Server并加载到程序中。

//注册驱动
	DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
//建立连接
String dbUL="jdbc:sqlserver://localhost:1433;DatabaseName=Library";
String Name="sa";
String Paw="123456";
conn=DriverManager.getConnection(dbUL,Name,Paw);

选择需要的操作:sql.T3.Test1.java

1.游览所有图书

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    sql = "select * from Book";
    rs = st.executeQuery(sql);
    while (rs.next()){
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String aut = rs.getString("aut");
        int num = rs.getInt("num");
        System.out.println("id=" + id + " name=" + name + " aut:" + aut + " num:" + num);
    }
}catch (SQLException e){
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st, rs);
}

2.查找书籍

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    System.out.println("查找方式:1.按编号查找;2.按书名查找;3.按作者查找;4.放弃操作;");
    b_h2 = sc.nextInt();
    f_l = true;
    switch (b_h2){
    case 1:
        System.out.println("输入书籍编号:");
        book_num = sc.nextInt();
        sql1 = "select * from Book where id=" + book_num;
        break;
    case 2:
        System.out.println("输入书籍名称:");
        book_name = sc.next();
        sql1 = "select * from Book where name=''" + book_name + "''";
        break;
    case 3:
        System.out.println("输入书籍作者:");
        author = sc.next();
        sql1 = "select * from Book where id=''" + author + "''";
        break;
    case 4:
        f_l = false;
        break;
    }
    if (f_l){
        sql = sql1;
        rs = st.executeQuery(sql);
        while (rs.next()){
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String aut = rs.getString("aut");
            int num = rs.getInt("num");
            System.out.println("id=" + id + " name=" + name + " aut:" + aut + " num:" + num);
        }
    }
    else
        System.out.println("对象已放弃操作");
}catch (SQLException e){
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st, rs);
}

3.建立新图书

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    System.out.println("书籍导入:请依次输入书籍的编号、书名、作者和导入数量:");
    book_id = sc.nextInt();
    book_name = sc.next();
    author = sc.next();
    book_num = sc.nextInt();
    sql1 = "insert into Book values(" + book_id + ",''" + book_name + "'',''" + author + "''," + book_num + ")";
    st.executeUpdate(sql1);
}catch (SQLException e){
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st);
}

4借出图书

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    System.out.println("查找方式:1.按编号查找;2.按书名查找;3.按作者查找;4.放弃操作;");
    b_h2 = sc.nextInt();
    f_l = true;
    switch (b_h2){
    case 1:
        System.out.println("输入书籍编号:");
        book_num = sc.nextInt();
        sql1 = "select * from Book where id=" + book_num;
        break;
    case 2:
        System.out.println("输入书籍名称:");
        book_name = sc.next();
        sql1 = "select * from Book where name=''" + book_name + "''";
        break;
    case 3:
        System.out.println("输入书籍作者:");
        author = sc.next();
        sql1 = "select * from Book where id=''" + author + "''";
        break;
    case 4:
        f_l = false;
        break;
    }
    if (f_l){
        sql = sql1;
        rs = st.executeQuery(sql);
        while (rs.next()){
            int id = rs.getInt("id");
            String name = rs.getString("name");
            String aut = rs.getString("aut");
            int num = rs.getInt("num");
            System.out.println("id=" + id + " name=" + name + " aut:" + aut + " num:" + num);
            b_h = num;
            book_id = id;
        }
        System.out.println("确认借出:确认:1,取消:2");
        b_h2 = sc.nextInt();
        if (b_h2 == 1){
            if (b_h == 0)
                System.out.println("馆藏书目为0,无法借出");
            else{
                b_h--;
                sql1 = "UPDATE Book SET num=" + b_h + "WHERE id =" + book_id;
                st.executeUpdate(sql1);
            }
        }
        else
            System.out.println("你已取消操作");
    }
    else
        System.out.println("对象已放弃操作");
}catch (SQLException e)
{
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st, rs);
}

5. 归还图书删除某一图书

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    System.out.println("输入归还书id:");
    book_id = sc.nextInt();
    sql = "select * from Book where id=" + book_id;
    rs = st.executeQuery(sql);
    while (rs.next()){
        int id = rs.getInt("id");
        String name = rs.getString("name");
        String aut = rs.getString("aut");
        int num = rs.getInt("num");
        System.out.println("id=" + id + " name=" + name + " aut:" + aut + " num:" + num);
        b_h = num;
    }
    b_h++;
    sql1 = "UPDATE Book SET num=" + b_h + "WHERE id =" + book_id;
    st.executeUpdate(sql1);
}catch (SQLException e){
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st, rs);
}

6.删除某一图书

try{
    DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
    conn = DriverManager.getConnection(dbUL, Name, Paw);
    st = conn.createStatement();
    System.out.println("输入删除书id:");
    book_id = sc.nextInt();
    sql1 = "delete from Book where id=" + book_id;
    st.executeUpdate(sql1);
}catch (SQLException e){
    e.printStackTrace();
}finally{
    JDBCUtil.release(conn, st, rs);
}

释放连接: sql.T1.JDBCUtil.java

public static void release(Connection conn, Statement st, ResultSet rs)//当rs不为空时
{
    closeRs(rs);
    closeSt(st);
    closeConn(conn);
}

public static void release(Connection conn, Statement st)// 当rs为空时
{
    closeSt(st);
    closeConn(conn);
}

6.运行结果演示

sqlserver中的部分数据:

idea中的演示结果:

显示书籍:

查找书籍及借出:

归还书籍及删除书籍:

总结

到此这篇关于利用java和sqlserver建立简易图书管理系统的文章就介绍到这了,更多相关java和sqlserver图书管理系统内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

您可能感兴趣的文章:
  • java连接sql server 2008数据库代码
  • Java中调用SQL Server存储过程详解
  • java+SQL server2008学生信息管理系统源码
  • java连接SQL Server数据库的方法
  • java+sqlserver实现学生信息管理系统

BS1029-基于C#+SqlServer+CS架构实现的图书信息管理系统,图书馆录入系统

BS1029-基于C#+SqlServer+CS架构实现的图书信息管理系统,图书馆录入系统

本基于C#+SqlServer+CS架构实现的图书信息管理系统,图书信息录入系统,系统采用多层C/S软件架构,采用C#编程语言开发技术实现界面窗口版本的图书管理系统程序界面,实现CS架构窗口事件监听,完成图书信息创建,编辑,删除等。

原文地址

一、程序设计

本次基于C#+SqlServer+CS架构实现的图书信息管理系统,图书信息录入系统,主要内容涉及:

主要功能模块:图书管理、图书信息新增、图书信息在线编辑、图书信息删除,系统管理,分析统计等等 主要包含技术:C#编程语言,MFC,C#多线程,窗口事件监听,数据库,SQLSERVER,GUI 主要包含算法:其他等

二、效果实现

图书管理

读者管理

其他效果省略

三、核心代码

1.图书借阅 本系统借阅图书信息,主要采用窗口监听用户操作动作,记录用户输入的图书信息进行校验,校验通过后存入数据库等。

//借书
        private void btnBorrowBook_Click(object sender, EventArgs e)
        {
            int rdID,rdType,bkID;
            int CanLendQty,CanLendDay,rdBorrowQty;
            string rdStatus,bkStatus;
            Borrow borrow = new Borrow();
            Reader reader = new Reader();
            DataRow dr=null;
            DataRow ds = null;

            for(int i=0;i<dgvBook.SelectedRows.Count;i++)
            {
                dr = (dgvBook.SelectedRows[i].DataBoundItem as DataRowView).Row;
            }
            for (int j = 0; j < dgvReader.SelectedRows.Count; j++)
            {
                ds = (dgvReader.SelectedRows[j].DataBoundItem as DataRowView).Row;
            }
            
            rdID = Convert.ToInt32(txtrdID.Text);   
            rdType = Convert.ToInt32(ds.ItemArray[3]);

            dt = borrowBLL.GetReaderType(rdType);
            CanLendQty=Convert.ToInt32(dt.Rows[0][0]);
            CanLendDay = Convert.ToInt32(dt.Rows[0][1]);

            dm = borrowBLL.GetrdStatus(rdID);
            rdStatus = Convert.ToString(dm.Rows[0][0]);
            rdBorrowQty=Convert.ToInt32(dm.Rows[0][1]);

            bkStatus = Convert.ToString(dr.ItemArray[15]);
            
            if (rdStatus != "有效")
            {
                MessageBox.Show("借书证无效,无法借书,无法借书!");
            }
            else
            {
                if (bkStatus != "在馆")
                {
                    MessageBox.Show("对不起,该书已不在馆!!");
                }
                else
                {   
                    if (rdBorrowQty >= CanLendQty)
                    {
                        MessageBox.Show("已借书数超出最大可借书量,无法借书!");
                    }
                    else
                    {
                        borrow.rdID = rdID;
                        borrow.bkID = Convert.ToInt32(dr.ItemArray[0]);
                        borrow.IdContinueTimes = 0;
                        borrow.IdDateOut = DateTime.Now;
                        borrow.IdDateRetPlan = DateTime.Now.AddDays(CanLendDay);
                        borrow.IdDateRetAct = DateTime.Now;
                        borrow.IdOverDay = 0;
                        borrow.IdOverMoney = 0;
                        borrow.IdPunishMoney = 0;
                        borrow.IsHasReturn = false;
                        borrow.OperatorLend = Convert.ToString(ds.ItemArray[1]);
                        borrow.OperatorRet = Convert.ToString(ds.ItemArray[1]);
                        borrowBLL.Insert(borrow);
                        txtbkName.Text = Convert.ToString(borrow.rdID);
                        borrowBLL.UpdateBook(borrow);
                        reader.rdID = rdID;
                        borrowBLL.UpdateBorrowNum(reader);
                        MessageBox.Show("借书成功!!!");
                    }
                }
            }           
        }

获取源码

C#实现简单成绩管理系统的完整步骤

C#实现简单成绩管理系统的完整步骤

前言

这周跟C#打了一周的交道(本周是学校安排的实验周,然后用到了C#实现想要的程序和功能)

一共七个实验,选择三个,我就选择我进步最大的一个来分析一下吧。

效果

先来看一下效果吧

从txt文本中读取数据后展示出来

点击目标后选中,然后点击“修改”,弹出修改界面,然后进行编辑即可

点击“统计”按钮,弹出窗口显示各分数段的信息

点击“查询”后,弹出界面,输入后,点击“确定”即可显示信息

实现

一、准备工作

在写方法之前,首先就是先把界面规划好,就是通过添加按钮和输入框或显示框组成一个符合要求的窗口或多个窗口

在这个程序中我们用到的主要是这几个组件

对文件进行操作要进行引用的声明,即“using”

我们添加的是这两行

然后我们还要写一些代码来实现其他功能

 public Form1()
  {
   InitializeComponent();
   this.listView1.Columns.Add("学号", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("姓名", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("数学", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("英语", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("政治", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("总分", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("平均分", 100, HorizontalAlignment.Center);
   this.listView1.Columns.Add("名次", 100, HorizontalAlignment.Center);
   this.listView1.View = System.Windows.Forms.View.Details;
   this.listView1.FullRowSelect = true;//是否可以选择行
  }

“listview1”就是按钮上方实现显示的控件,“this”指的就是Form1这个窗口,“Columns”指的是“栏”,也就是上方的内容,“add”指的是把后面的内容作为“Columns”的内容,后面的“100”等都是“Columns”的属性,可以通过修改它的属性来修改它的大小和位置,还有一种生成“Column”的方法是通过属性栏来添加。

点击listview一次选中它,然后右键单击一次,点击属性,会发现有“Column”这个属性,点进去后就可以进行编辑和修改了。

不得不说确实挺方便的,不过实验报告手册中给了部分必须的源码,再加上自己第一次接触C#,所以就没使用后面的方法,不过在后面的操作中使用了一下,确实挺爽。

二、读取操作

这里的“读取”按钮读取的是统计之后的内容,并非成绩等信息,双击“读取”按钮后即可进行编辑(在按钮的属性中我修改了name属性为load,所以此处的方法名为“load_Click”)

 private void load_Click(object sender, EventArgs e)
  {
   this.load_data();
  }

此处调用了“load_data()”这个方法

 public void load_data()
 {   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   //把txt文件中按行存储的信息利用regex.Split按行存入string数组中
   string[] records = Regex.Split(file, "\r\n");
   //开始更新视图
   this.listView1.BeginUpdate();
   //清空原有视图
   this.listView1.Items.Clear();
   // records.Length为数组的元素个数
   for (int index = 0; index < records.Length; index++)
   { //分割每行记录的各个字段
    string[] components = Regex.Split(records[index], " ");
    //生成listview的一行
    ListViewItem lvi = new ListViewItem(components);
    //添加背景色
    lvi.SubItems[0].BackColor = Color.Red;
    //把新生成的行加入到listview中
    this.listView1.Items.Add(lvi);
   }
   //视图更新结束
   this.listView1.EndUpdate();
  }

这个方法就是以“/r/n”为分界线定义一个数组1,然后再以空格为分界线定义一个数组2,同时生成一个 ListViewItem 来显示数组2,然后再设置一下背景色,此处设置的为红色

 //生成listview的一行
    ListViewItem lvi = new ListViewItem(components);
 //添加背景色
    lvi.SubItems[0].BackColor = Color.Red;

lvi是新生成的listview的命名

三、查询操作

 private void Search_Click(object sender, EventArgs e)
  {
   Form3 f3 = new Form3();
   f3.Show();
  }

在查询的方法中我们调用了一个窗口Form3,同Form1一样,先规划好窗口的格局,然后再写方法

private void go_Click(object sender, EventArgs e)
  {
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   //把txt文件中按行存储的信息利用regex.Split按行存入string数组中
   string[] records = Regex.Split(file, "\r\n");
   //开始更新视图
   this.listView1.BeginUpdate();
   //清空原有视图
   this.listView1.Items.Clear();
   // records.Length为数组的元素个数
   for (int index = 0; index < records.Length; index++)
   {

    //分割每行记录的各个字段
    string[] components = Regex.Split(records[index], " ");

    Regex r = new Regex(this.textBox1.Text); // 定义一个Regex对象实例
    Match m = r.Match(components[0]); // 在字符串中匹配

    if (m.Success)
    {
     //生成listview的一行
     ListViewItem lvi = new ListViewItem(components);
     //添加背景色
     lvi.SubItems[0].BackColor = Color.White;
     //把新生成的行加入到listview中
     this.listView1.Items.Add(lvi);
    }
    else if (components.Length > 1)
    {
     Match n = r.Match(components[1]);
     if (n.Success)
     {
      //生成listview的一行
      ListViewItem lvi = new ListViewItem(components);
      //添加背景色
      lvi.SubItems[0].BackColor = Color.White;
      //把新生成的行加入到listview中
      this.listView1.Items.Add(lvi);
     }
    }

   }
   //视图更新结束
   this.listView1.EndUpdate();
  }

主要的方法,甚至是唯一的方法,就是上方的“go_Click()”方法,“Score.txt”是存放成绩等信息的,在姓名和学号之中匹配,匹配到了就新建一个listview的item展示信息

这里的查询用到了匹配的函数Match() ,在此给出官方的链接
Match()

四、删除

删除的思想就是选中要删除的那一行,之后从文件读取所有内容,新建string数组存放每一行,一行一行的遍历,直到遇见选中的那一行,从数组中移除,然后把剩余的数组元素写入文本中,WriteAllLines()方法定义中调用了replace()方法,因此省去了我们删除文件原有内容的操作

 private void Delate_Click(object sender, EventArgs e)//删除
  {
   foreach (ListViewItem lvi in listView1.SelectedItems)
   {

    //把txt文件内容读入到file中,然后对string对象file进行相关处理

    string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);

    List<string> lines = new List<string>(Regex.Split(file, "\r\n"));
    lines.RemoveAt(lvi.Index);
    File.WriteAllLines("Score.txt", lines.ToArray(), UTF8Encoding.Default);
   }
   this.load_data();
  }

五、录入

 private void Input_Click(object sender, EventArgs e)//录入
  {
   Form2 f = new Form2(this);
   f.Show();
  }

这里的录入方法调用了一个新的窗口Form2,与之前不同的是,这里给Form2传了一个参数“this”,即Form1这个窗口,因为之后我们要在Form2的方法中调用Form1的方法。

再来看一下Form2的界面和方法

1、接收参数

 private Form1 form;
  public Form2()
  {
   InitializeComponent();
  }
  public Form2(Form1 form){
   this.form = form;
   InitializeComponent();
  
  }

首先进行定义,然后进行赋值,这样的话在之后就可以用定义时使用的名称进行Form1的方法的调用了。

2、保存信息

在点击“保存”按钮后,我们要实现文本的写入以及界面的更新,文本的写入我们要写新的方法,界面的更新我们可以调用Form1的方法。

 if (this.textBox1.Text != string.Empty && this.textBox2.Text != string.Empty && this.textBox3.Text != string.Empty && this.textBox4.Text != string.Empty && this.textBox5.Text != string.Empty)
   {
    //利用string的加法操作构造新纪录,作为一行,写入txt文件中
    string newrecord = this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text + " " + this.textBox4.Text + " " + this.textBox5.Text + "\r\n" ;
    File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default);
    //结束form2的调用
    this.Dispose(false);
    //调用Form1加载界面的方法
    this.form.load_data();
   }
   else
   {
    Form5 f5 = new Form5();
    f5.Show();
   }

首先判空,如果都不为空,定义新的字符串,赋值,写入文本,为了保证程序的严谨性,加一个Form5窗口进行错误的提示

(由于时间的限制,这里也不算很完善,有能力的可以考虑进行各个条件的判断,例如“学号”为空,则弹出的窗口显示“学号不能为空”)
值得注意的是,这里调用的Form1中的方法必须是公有的,即“public”。

六、运算

 private void operate_Click(object sender, EventArgs e)
  {
   //把txt文件内容读入到file中,然后对string对象file进行相关处理
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   //把txt文件中按行存储的信息利用regex.Split按行存入string数组中
   string[] records = Regex.Split(file, "\r\n");
   //开始更新视图
   this.listView1.BeginUpdate();
   //清空原有视图
   this.listView1.Items.Clear();

   System.IO.File.WriteAllText("Score.txt", string.Empty);

   double[] score1 = new double[records.Length];
   double[] score2 = new double[records.Length];

   int num = 0;
   // records.Length为数组的元素个数
   for (int index = 0; index < records.Length; index++)
   {

    if (records[index].Length != 0)
    {
     //分割每行记录的各个字段
     string[] components = Regex.Split(records[index], " ");

     score1[index] = Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4]);
     score2[index] = (Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4])) / 3.0;
     num++;
    }
    else
     break;

   }
   //冒泡法排序
   int temp;
   for (int i = 0; i < num; i++)
   {
    temp = i;
    for (int j = i + 1; j < num; j++)
    {
     if (score1[j] > score1[temp])
      temp = j;
    }
    double t = score1[temp];
    score1[temp] = score1[i];
    score1[i] = t;
   }
   for (int index = 0; index < records.Length; index++)
   {

    if (records[index].Length != 0)
    {
     //分割每行记录的各个字段
     string[] components = Regex.Split(records[index], " ");

     for (int i = 1; i <= num; i++)
     {
      if (score1[i - 1] == Convert.ToDouble(components[2]) + Convert.ToDouble(components[3]) + Convert.ToDouble(components[4]))
      {
       //利用string的加法操作构造新纪录,作为一行,写入txt文件中
       string newrecord = components[0] + " " + components[1] + " " + components[2] + " " + components[3] + " " + components[4] + " " + score1[i - 1] + " " + score2[index] + " " + i + "\r\n";
       File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default);
      }
     }


    }
    else
     break;

   }
   //视图更新结束
   this.listView1.EndUpdate();
   //刷新界面
   this.load_data();
  }

题目的要求是计算各学生总分、平均分以及排名,思想就是,先读取文件,存储数据,清空文件,定义总成绩和平均成绩两个数组,分别计算每个人的总成绩与平均成绩,然后用冒泡法对总成绩进行排序,得到排名,然后构造新数组拼接这些内容,再把数组写入文本,更新视图即可。

七、修改

修改的思想很简单,虽说实现了想要的功能,但是也有缺陷,也没想到特别好的解决办法,先来说一下思路吧,首先选中,然后点击“修改”,弹窗,在这里尤其注意得是,弹窗里对应位置要显示选中的内容

在这个图中,我选中的是第二行,那么我就要把它对应的数据显示上去,在实验过程中很多人所谓的修改就是输入新的数据,里面所有的内容都得再写一遍,这样的系统,自己用着指定难受。

(说到这我想插上一件事,吐槽一下最近使用的二课系统吧,是一个微信小程序,这是学校某个团队开发的,总体上还是可以的,最大的不足就是每次打开都得登录,也就是说每次使用都得重新输入账号和密码,用户的体验真的挺差的,但是也不能因为它有不足就否认它,总体上也算挺方便的,值得去学习)

因为以前参与过项目的开发,而且项目的受众就是我们自己,也知道什么样的效果更能使用户满意,所以对修改这个功能也算是有所了解,在实验中,绝大多数人的“修改”功能都没能达到满意的效果,所以说经验积累绝对不是毫无用处的。

继续回到我们的功能实现中来,点击“确定”后,写入文本,那么我们肯定要把之前的数据删掉,在传参后立即删除数据,当然这也就产生了瑕疵,用户不修改数据,那怎么办,先来看代码吧,看完就知道了。

 private void modify_Click(object sender, EventArgs e)//修改
  {
   if (listView1.SelectedItems.Count != 0 )
   {
    ListViewItem all = this.listView1.SelectedItems[0];
    Form6 f6 = new Form6(all,this);
    f6.Show();
    //把数据传输过去之后立即删除数据
    foreach (ListViewItem lvi in listView1.SelectedItems)
    {

     //把txt文件内容读入到file中,然后对string对象file进行相关处理

     string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);

     List<string> lines = new List<string>(Regex.Split(file, "\r\n"));
     lines.RemoveAt(lvi.Index);
     File.WriteAllLines("Score.txt", lines.ToArray(), UTF8Encoding.Default);
    }
   }
   else
   {
    Form4 f4 = new Form4();
    f4.Show();
   }
  }

如果选中的内容不为空,那就把它的数据存到ListViewItem类型的数组中,然后传给Form6(修改数据窗口的类),同时再把Form1这个类传过去,以便调用它的方法,然后使用一个删除方法,如果内容为空,弹出Form4,提示错误。
同样的,在Form6这边先定义,然后接收参数,赋值

 private void Form6_Load(object sender, EventArgs e)
  {
   this.textBox1.Text = this.content.SubItems[0].Text;
   this.textBox2.Text = this.content.SubItems[1].Text;
   this.textBox3.Text = this.content.SubItems[2].Text;
   this.textBox4.Text = this.content.SubItems[3].Text;
   this.textBox5.Text = this.content.SubItems[4].Text;

  }

在加载方法中为textBox赋值,以此来显示数据,修改后点击“确定”,确定的方法和“录入”功能的“确定”的方法相同,说白了就是写入,如果“取消”怎么办,数据已经删除了,既然textBox里本来就有数据,那么就把那些数据再写入文本,这样虽然实现了我的功能,但是有瑕疵,就是无论修改数据与否,重新加载后数据都会显示在最后一行。
“确定”方法

 private void Determine_Click(object sender, EventArgs e)
  {
   if (this.textBox1.Text != string.Empty && this.textBox2.Text != string.Empty && this.textBox3.Text != string.Empty && this.textBox4.Text != string.Empty && this.textBox5.Text != string.Empty)
   {
    //利用string的加法操作构造新纪录,作为一行,写入txt文件中
    string newrecord = this.textBox1.Text + " " + this.textBox2.Text + " " + this.textBox3.Text + " " + this.textBox4.Text + " " + this.textBox5.Text + "\r\n";
    File.AppendAllText("Score.txt", newrecord, UTF8Encoding.Default);
    var lines = File.ReadAllLines("Score.txt").Where(arg => !string.IsNullOrWhiteSpace(arg));
    File.WriteAllLines("Score.txt", lines);
    //结束form6的调用
    this.Dispose(false);
   }
   this.form.load_data();
  }

八、统计

所谓的统计就是计算各科各分数段人数以及各科平均分

 private void Sta_Click(object sender, EventArgs e)//统计
  {
   this.Output();
   Form7 f7 = new Form7();
   f7.Show();
   
  }

调用一个output()方法,用Form7显示数据

 public string Output()//写入数据
  {
    string add = string.Empty;

    add += "统计情况:" + "\r\n" + "分数段" + "," + "数学" + "," + "英语" + "," + "政治" + "\r\n";
    add += "<60" + "," + GetGradeSection(1, 0, 59).ToString() + "," + GetGradeSection(2, 0, 59).ToString() + "," + GetGradeSection(3, 0, 59).ToString() + "\r\n";
    add += "60~69" + "," + GetGradeSection(1, 60, 69).ToString() + "," + GetGradeSection(2, 60, 69).ToString() + "," + GetGradeSection(3, 60, 69).ToString() + "\r\n";
    add += "70~79" + "," + GetGradeSection(1, 70, 79).ToString() + "," + GetGradeSection(2, 70, 79).ToString() + "," + GetGradeSection(3, 70, 79).ToString() + "\r\n";
    add += "80~89" + "," + GetGradeSection(1, 80, 89).ToString() + "," + GetGradeSection(2, 80, 89).ToString() + "," + GetGradeSection(3, 80, 89).ToString() + "\r\n";
    add += "90~100" + "," + GetGradeSection(1, 90, 100).ToString() + "," + GetGradeSection(2, 90, 100).ToString() + "," + GetGradeSection(3, 90, 100).ToString() + "\r\n";
    add += "平均分" + "," + GetAve(1).ToString() + "," + GetAve(2).ToString() + "," + GetAve(3).ToString() + "\r\n";
    System.IO.File.WriteAllText("List.txt", string.Empty);
    File.AppendAllText("List.txt", add, UTF8Encoding.Default); 
   
   return add;
  }

Output方法调用了GetGradeSection()和 GetAve() 两个方法,先生成并定义字符串数组,然后把两个方法返回的数据与原有的信息拼接到数组中,再写入即可。

 public double GetGradeSection(int m ,int low, int high)//分数段
  {
   int count = 0;
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   //把txt文件中按行存储的信息利用regex.Split按行存入string数组中
   string[] records = Regex.Split(file, "\r\n");
   //开始更新视图
   this.listView1.BeginUpdate();
   //清空原有视图
   this.listView1.Items.Clear();
   // records.Length为数组的元素个数
   for (int index = 0; index < records.Length; index++)
   { //分割每行记录的各个字段
    if (records[index].Length != 0)
    {
     string[] components = Regex.Split(records[index], " ");

     if (m == 1)//数学
     {
      if (Convert.ToDouble(components[2]) >= low && Convert.ToDouble(components[2]) <= high)
      {
       count++;
      }
     }
     if (m == 2)//英语
     {
      if (Convert.ToDouble(components[3]) >= low && Convert.ToDouble(components[3]) <= high)
      {
       count++;
      }
     }
     if (m == 3)//政治
     {
      if (Convert.ToDouble(components[4]) >= low && Convert.ToDouble(components[4]) <= high)
      {
       count++;
      }
     }
    }
    else break;
   }
    return count;
  }

先循环,然后进行判断,如果在分数段内就把count值加一,最后返回到Output()方法中

 public double GetAve(int m)//平均分
  {
   double ave = 0;
   string file = File.ReadAllText("Score.txt", UTF8Encoding.Default);
   //把txt文件中按行存储的信息利用regex.Split按行存入string数组中
   string[] records = Regex.Split(file, "\r\n");
    int length = records.Length;
   //开始更新视图
   this.listView1.BeginUpdate();
   //清空原有视图
   this.listView1.Items.Clear();
   // records.Length为数组的元素个数
   for (int index = 0; index < records.Length; index++)
   {
    if (records[index].Length != 0)
    {
     //分割每行记录的各个字段

     string[] components = Regex.Split(records[index], " ");

     if (m == 1)
     {
      ave += double.Parse(components[2]);
     }
     if (m == 2)
     {
      ave += double.Parse(components[3]);
     }
     if (m == 3)
     {
      ave += double.Parse(components[4]);
     }
    }
    else break;
   }
   return ave/length;
  }

把各科对应的所有的分数加在一起,然后除以总人数,即为平均分,返回到Output()方法中

拼接好的字符串数组写入List.txt文本中,在Form7中读取,在Listview中显示即可

九、清除

清除就是清空所有的文本数据,然后就把空字符写入覆盖即可

 private void ClearAll_Click(object sender, EventArgs e)
  {
   System.IO.File.WriteAllText("Score.txt", string.Empty);
   System.IO.File.WriteAllText("List.txt", string.Empty);
   this.load_data();
  }

总结

由于之前没接触过C#,所以也不知道怎么搞,总结下来就是这一周的收获并不是很大,毕竟整天忙得不可开交,吃饭、睡觉、敲代码,最后一总结发现并没有学到什么真切的知识,毕竟一点都没学,上来就用,这种方式真的难以理解,在此我想说的是,只要敢钻研,肯钻研,再难的问题也有解决的办法,最后补充一句,忙点真的挺好的,每天都很充实,加油,奋斗在路

好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

您可能感兴趣的文章:
  • C#实现学生成绩管理系统
  • C#实现简单学生成绩管理系统

Django--- 简易图书管理系统 (B/S 架构)

Django--- 简易图书管理系统 (B/S 架构)

Django--- 简易图书管理系统

一丶配置

创建 app01

# 1.在具有manage.py文件的目录下,启动cmd,创建一个新的app01
	python manage.py startapp app01
	
# 2.在settings配置文件中对 app01进行注册	
	INSTALLED_APPS=[
        ''app01.apps.App01Config'',
    ]
    
# 额外:创建整个项目时,创建新的app,pycharm会默认帮你注册 . 若是cmd创建,需要手动注册

静态文件配置:

# settings文件,配置静态资源
	STATIC_URL = ''/static/''    # 固定写法: 映射关系,从项目中引入静态资源是通过/static/开头
   
	STATICFILES_DIRS=[         # 固定写法: 项目文件夹下创建一个static文件夹''存放''静态资源. 
        os.path.join(BASE_DIR,''static'')
    ]

数据库配置:

# settings文件,配置数据库 (使用的是mysql数据库,库需要先创建好)
	DATABASES = {
        ''default'': {
            ''ENGINE'': ''django.db.backends.mysql'',   # 数据库引擎
            ''NAME'': ''day55_bookmgsystec'',		   # 数据库名
            ''USER'': ''XXX'',						  # 用户
            ''PASSWORD'': ''XXX'',					  # 密码
            ''HOST'': ''127.0.0.1'',				  # ip地址
            ''PORT'': 3306,					      # 端口
        }
    }
    
    
# 由于使用的是mysql数据库.python3需要使用pymysql去连接数据库.默认提供的数据库连接不支持mysql
	# 1.在与项目同名的文件夹下 ,找到__init__.py文件
    # 2.编写连接代码
    	import pymysql
		pymysql.install_as_MySQLdb()  # 连接mysql数据库

额外:

# 在settings文件中找到下面的句子注释掉. post提交数据时需要进行校验
	''django.middleware.csrf.CsrfViewMiddleware'',

二丶数据库编写

使用 orm 操作数据库:

# 1.找到app01下的 models.py文件. 创建表和字段
	class Pub(models.Model):					# Pub 类名 等同于 表名
        pid=models.AutoField(primary_key=True)	  # pid 类的属性 等同于 表的字段(AutoFiled:自增)
        pname=models.CharField(max_length=32,unique=True)	# pname 同理

数据迁移

# 1.在models.py文件已经编写好了表的信息. 需要把信息同步到数据库
# 2.启动Terminal窗口执行两条命令
	# 检查models.py文件是否进行了变更,并记录.会在migrations文件夹下创建一个变更记录文件
		python manage.py makemigrations   
	
    # 将在migrations文件夹下创建一个变更记录文件,同步到数据库
    	python manage.py migrate

三丶路由关系

查看

# 1.在url.py穿件一个请求和函数的对应关系
	from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r''^publisher_list/'', views.publisher_list),
    ]

   
# 2.在app01下的views.py文件中编写函数
	from app01 import models  # 导入 models文件,使用orm操作数据库
        # 查询列表
   		def publisher_list(request):
            
            # 查询全部的内容, 按照pid排序
            all_pub = models.Pub.objects.all().order_by(''pid'')
            
			# 返回一个页面,并把数据传到页面
            return render(request, ''publisher_list.html'', {''all_pub'': all_pub})
<!-- publisher_list.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>

        table, h1 {
            text-align: center;
        }

        button {
            position: absolute;
            top: 60px;
            left: 520px;
        }
    </style>
</head>
<body>
<h1>图书管理系统</h1>
<button>添加</button>
<table border="1px" width="500px" align="center">
    <thead>
    <tr>
        <th>序号</th>
        <th>编号</th>
        <th>出版社名称</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
        <!-- 使用模版语言:把传过来的数据 进行解析,展示
		{{变量}}
		-->
    {% for pub in all_pub %}   
        <tr>
            <td>{{ forloop.counter }}</td> 
            <td>{{ pub.pid }}</td>
            <td>{{ pub.pname }}</td>
            <td>
                <a href="/publisher_edit?pk={{ pub.pk }}">编辑</a> |
                <a href="/publisher_del?pk={{ pub.pk }}">删除</a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
<script>
    window.onload= function () {

        var tag=document.getElementsByTagName(''button'')[0]
        tag.onclick=function () {
            location.href=''/publisher_add''   //添加按钮跳转到添加页面
        }
    }
</script>
</body>
</html>

增加

# 1.在url.py穿件一个请求和函数的对应关系
	from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r''^publisher_add/'', views.publisher_add),
    ]

   
# 2.在app01下的views.py文件中编写函数
	from app01 import models  # 导入 models文件,使用orm操作数据库
        # 添加
        def publisher_add(request):
            
            pub_name, error = '''', ''''
			# 判断发送方式 是不是post请求
            if request.method == ''POST'':
                
                # 获取提交的信息
                pub_name = request.POST.get(''pname'') # 对应前端inpu, t框的name值

                # 如果输入为空
                if not pub_name:
                    error = ''输入的内容为空''
                elif models.Pub.objects.filter(pname=pub_name):
                    # 数据库里是否存在当前数据的值
                    error = ''出版社名称已存在''
                else:
                    # 添加
                    # 方式一
                    models.Pub.objects.create(pname=pub_name)
                    # 方式二
                    # obj = models.Publisher(name=pub_name)
                    # obj.save()

                    return redirect(to=''/publisher_list/'')

            return render(request, ''publisher_add.html'', {''error'': error, ''data'': pub_name})

<!-- publisher_add.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" style="text-align: center">
    <h1>添加出版社</h1>
    <input type="text" name="pname" value="{{ data }}"/>
    <br>
    <span style="color: red;">{{ error }}</span>
    <br>
    <input type="submit"/>
    <input type="reset" id="rest" value="取消"/>
</form>
<script>
    window.onload = function () {
        var back = document.getElementById(''rest'')
        back.onclick = function () {
            location.href = ''/publisher_list''

        }
    }
</script>
</body>
</html>

编辑

# 1.在url.py穿件一个请求和函数的对应关系
	from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r''^publisher_edit/'', views.publisher_edit),
    ]

   
# 2.在app01下的views.py文件中编写函数
	from app01 import models  # 导入 models文件,使用orm操作数据库
        # 编辑
        def publisher_edit(request):
            error, data = '''', ''''

            # 从url 获得 pk的值
            pk = request.GET.get(''pk'')

            # 从数据库里查询符合条件的第一个对象
            obj = models.Pub.objects.filter(pk=pk).first()

            # 从数据库中查不出数据
            if not obj:
                return HttpResponse(''更新数据不存在'')

            if request.method == ''POST'':
                # 获得表单 提交的数据
                pname = request.POST.get(''pname'')
                if not pname:
                    error = ''内容为空''
                elif models.Pub.objects.filter(pname=pname):
                    error = ''出版社已存在''
                else:
                    # 更改 已经查询出来 obj对象的值
                    obj.pname = pname
                    # 提交
                    obj.save()
                    return redirect(to=''/publisher_list'')

            return render(request, ''publisher_edit.html'', {''error'': error, ''data'': obj})

<!-- publisher_edit.html -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="" method="post" style="text-align: center">
    <h1>更新出版社</h1>
    <input type="text" name="pname"  value="{{ data.pname }}"/>
    <br>
    <span style="color: red;">{{ error }}</span>
    <br>
    <input type="submit"  value="更新"/>
    <input type="reset" id="rest"  value="取消"/>
</form>
<script>
    window.onload=function () {
        var back=document.getElementById(''rest'')
        back.onclick=function () {
            location.href=''/publisher_list''
        }
    }
</script>
</body>
</html>

删除

# 1.在url.py穿件一个请求和函数的对应关系
	from django.conf.urls import url
    from django.contrib import admin
    from app01 import views   # 导入app01
    
    urlpatterns = [
        url(r''^publisher_del/'', views.publisher_del),
    ]

   
# 2.在app01下的views.py文件中编写函数
	from app01 import models  # 导入 models文件,使用orm操作数据库
        # 删除
        def publisher_del(request):
            # 获得url的pk的值
            pk = request.GET.get(''pk'')

            # 从数据库中查一下, 看看有没有,
            # query = models.Pub.objects.filter(pk=pk) # 对象列表
            obj = models.Pub.objects.filter(pk=pk).first()  # 获取第一个对象

            if not obj:
                return HttpResponse(''删除的不存在'')

            # 删除数据
            
            # 方式一 ,删除所有列表对象中,符合条件的所有值
            # query.delete()
            
            # 方式二 # 按照索引删
            # query[0].delete()
            
            # 方式三
            obj.delete()
            
            # 跳转到展示页面
            return redirect(to=''/publisher_list'')

Java Web实现简易图书管理系统

Java Web实现简易图书管理系统

本文实例为大家分享了Java Web实现简易图书管理系统的具体代码,供大家参考,具体内容如下

前言

首先实现的是用户的登录注册,注册成功后自动跳转到图书列表页面,之后实现图书的增删改查功能。(菜鸡学习中,大佬勿喷)

一、运行环境

1.数据库:MySQL:5.7
2.Tomcat Apache 8.5
3.编译器:Eclipse 2020版

二、使用步骤

1.MySQL文件

User.sql:

*
 Navicat Premium Data Transfer

 Source Server         : localhost_3306
 Source Server Type    : MySQL
 Source Server Version : 50723
 Source Host           : localhost:3306
 Source Schema         : library

 Target Server Type    : MySQL
 Target Server Version : 50723
 File Encoding         : 65001

 Date: 10/06/2021 17:59:30
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, ''admin'', ''admin'');
INSERT INTO `user` VALUES (2, ''root'', ''root'');
INSERT INTO `user` VALUES (5, ''123'', ''4596'');

SET FOREIGN_KEY_CHECKS = 1;

booklist.sql:

/*
Navicat MySQL Data Transfer

Source Server         : 121.36.6.154_3306
Source Server Version : 50720
Source Host           : localhost:3306
Source Database       : library

Target Server Type    : MYSQL
Target Server Version : 50720
File Encoding         : 65001

Date: 2021-06-22 16:05:51
*/

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for booklist
-- ----------------------------
DROP TABLE IF EXISTS `booklist`;
CREATE TABLE `booklist` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `bookname` varchar(255) NOT NULL,
  `author` varchar(255) NOT NULL,
  `status` tinyint(255) NOT NULL,
  `price` double(10,0) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4;

2.项目的目录层次结构,导包

3.DBUtil类的创建

package com.qfnu.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtilTmp {
    public static void main(String[] args) {
        // 0.准备连接数据库的资源
        String username = "root";
        String password = "root";
        // String url = "jdbc:mysql://127.0.0.1:3306/hellojdbc";
        String url = "jdbc:mysql://localhost:3306/library";
        String driver = "com.mysql.cj.jdbc.Driver";
        
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            // 1.加载驱动
            Class.forName(driver);
            
            // 2.获取连接
            conn = DriverManager.getConnection(url, username, password);
            
            
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            // 7.释放资源,关闭连接 - 先申请的后释放
            try {
                if (rs != null) {
                    rs.close();
                }
                if (pst != null) {
                    pst.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

4.Dao层的方法

userdao.java

package com.qfnu.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.qfnu.entity.User;
import com.qfnu.util.DBUtil;

public class UserDao {

    public List<User> getAllUsers() throws SQLException {
        List<User> users = new ArrayList<User>();
        // 获取连接
        Connection conn = DBUtil.getConnection();    
        // 创建 sql 语句
        String sql = "select * from user";    
        // 创建 PreparedStatement 对象
        PreparedStatement pst = conn.prepareStatement(sql);    
        // 执行 sql 语句,保存结果集
        ResultSet rs = pst.executeQuery();    
        /**
         * 遍历结果集,将结果集中的每一条记录的每个字段值取出,
         * 封装为一个 user 对象,并把该 user 对象加入到 users 集合中。
         */
        while (rs.next()) {
            
            // 2.直接调用带参构造器
            User user = new User(rs.getInt("id"), 
                                 rs.getString("username"), 
                                 rs.getString("password")
                        );
            users.add(user);
        }
        
        return users;
    }

    public void addUser(String username, String password) {
        List<User> users = new ArrayList<User>();
        
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            // 获取连接
            conn = DBUtil.getConnection();
            // 创建 sql 语句
            String sql = "insert into user(username,password) values(?,?)";
            
            // 创建 PreparedStatement 对象
            pst = conn.prepareStatement(sql);
            
            // 确定占位符的值
            pst.setString(1, username);
            pst.setString(2, password);
            
            // 执行 sql 语句
            int result = pst.executeUpdate();
            
            if (result>0) {
                System.out.println("添加用户成功!!!");
            } else {
                System.out.println("添加用户失败...");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                DBUtil.release(conn, pst, rs);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        
        
    }
}

bookdao.java

package com.qfnu.Dao;


import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import com.qfnu.entity.Book;
import com.qfnu.util.DBUtil;

import com.qfnu.entity.Book;

public class BookDao {

    
    public  List<Book> getAllBooks() throws SQLException {
        
        List<Book> books = new ArrayList<Book>();
        
        Connection conn = DBUtil.getConnection();
        
        String sql = "select * from booklist";
        
        PreparedStatement pst = conn.prepareStatement(sql);    
        
        ResultSet rs = pst.executeQuery();    
        
        while (rs.next()) {
         
         Book book = new Book(rs.getInt("id"),
                              rs.getString("bookname"),
                              rs.getString("author"),
                              rs.getInt("status"),
                              rs.getDouble("price"));
         books.add(book);
        }
        
        return books;
        
    }

    
    public void addBook(String bookname,String author,int status,double price ) {
        List<Book> books = new ArrayList<Book>();
        
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            // 获取连接
            conn = DBUtil.getConnection();
            // 创建 sql 语句
            String sql = "insert into booklist(bookname,author,status,price) values(?,?,?,?)";
            
            // 创建 PreparedStatement 对象
            pst = conn.prepareStatement(sql);
            
            // 确定占位符的值
            pst.setString(1, bookname);
            pst.setString(2, author);
            pst.setInt(3, status);
            pst.setDouble(4, price);
            
            // 执行 sql 语句
            int result = pst.executeUpdate();
            
            if (result>0) {
                System.out.println("图书添加成功!");
            } else {
                System.out.println("图书添加失败!");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                DBUtil.release(conn, pst, rs);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void delBook(int id) {
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        try {
            // 获取连接
            conn = DBUtil.getConnection();
            // 创建 sql 语句
            String sql = "DELETE FROM booklist WHERE id = ?";
            
            // 创建 PreparedStatement 对象
            pst = conn.prepareStatement(sql);
            
            // 确定占位符的值
            pst.setInt(1, id);
            
            // 执行 sql 语句
            int result = pst.executeUpdate();
            
            if (result>0) {
                System.out.println("删除图书成功!!!");
            } else {
                System.out.println("删除图书失败...");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                DBUtil.release(conn, pst, rs);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    public List<Book>  SearchBook(String booksname) throws SQLException {
        // TODO Auto-generated method stub
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        Book book=new Book();
        List<Book> books = new ArrayList<Book>();
        
        String sql="select * from booklist where bookname=?";
        try {
            
            conn = DBUtil.getConnection();
            
            pst=conn.prepareStatement(sql);
            
            pst.setString(1, booksname);
            
            rs=pst.executeQuery();
            
            if(rs.next()) {
                String bookname=rs.getString(2);
                String author=rs.getString(3);
                int status=rs.getInt(4);
                Double price=rs.getDouble(5);
                
              book = new Book(bookname,author,status,price);
            }
             
            books.add(book);
            
            
            DBUtil.release(conn, pst, rs);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return books;
    }

    public boolean UpdateBook(String bookname,String author,int status,double price) {
          
        Connection conn = null;
        PreparedStatement pst = null;
        ResultSet rs = null;
        String sql="update booklist set author=?,status=?,price=? where bookname=?";
        
        try {
            conn = DBUtil.getConnection();
            
            pst=conn.prepareStatement(sql);
             
            Book book = new Book(bookname,author,status,price);            
            pst.setString(1, book.getAuthor());
            pst.setInt(2, book.getStatus());
            pst.setDouble(3, book.getPrice());
            pst.setString(4, book.getBookname());
            
            if(pst.executeUpdate()!=0) {
                return true;
                
            }
            DBUtil.release(conn, pst, rs);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return false;
    }

}

5.封装到Service层

UserService.java

package com.qfnu.service;

import java.sql.SQLException;
import java.util.List;
import com.qfnu.Dao.UserDao;
import com.qfnu.entity.User;

public class UserService {
    UserDao userDao = new UserDao();
    
    public void addUser(String username, String password) {
        userDao.addUser(username, password);
    }

    public List<User> getAllUsers() throws SQLException{
        return userDao.getAllUsers();
    }

}

BookService.java

package com.qfnu.service;

import java.sql.SQLException;
import java.util.List;
import java.math.BigDecimal;

import com.qfnu.entity.Book;
import com.qfnu.Dao.BookDao;

public class BookService {
       
    BookDao bookDao =new BookDao();
       
        public List<Book> getAllBooks() throws SQLException{
        
            return bookDao.getAllBooks();
        }             
        public void addBook(String bookname,String author,int status,double price) {
                
                bookDao.addBook(bookname, author,status,price);
            }
        
        public void delUser(int id) {
             bookDao.delBook(id);
        }
        
        public List<Book> SearchBook(String bookname)  throws SQLException {
            
            return bookDao.SearchBook(bookname);
            
        }
        public boolean UpdateBook(String bookname,String author,int status,double price ) {
            boolean flag=bookDao.UpdateBook(bookname,author,status,price);
            
            if(flag==true) {
                
                return true;            
            }
            return false;
            
        }
}

6.在Controller层进行调用

LoginController.java (用户的登录)

package com.qfnu.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.qfnu.entity.User;
import com.qfnu.service.UserService;

@WebServlet("/LoginController")
public class LoginController extends HttpServlet {
    

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取用户输入的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        response.setContentType("text/html;charset=utf-8");
        UserService userService = new UserService();
        List<User> users = new ArrayList<User>();
        PrintWriter out = response.getWriter();
        String url = "login.jsp";
        try {
            // 调用 service 层的 getAllUsers 方法来获取所有用户信息
            users = userService.getAllUsers();
            // 对 list 集合进行遍历
            for (User user : users) {
                if (username.equals(user.getUsername())) {
                    if (password.equals(user.getPassword())) {
                        // 把后端的数据传递给前端展示:作用域
                        
                        out.write("<script>alert(''登录成功!'')</script>");
                        request.getRequestDispatcher("BookListController").forward(request, response);    
                        break;
                    }
                }
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        out.write("<script>alert(''登录失败!'')</script>");
        request.getRequestDispatcher(url).forward(request, response);
    }

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

RegisterCntroller.java (用户的注册功能)

package com.qfnu.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qfnu.service.UserService;

@WebServlet("/RegisterController")
public class RegisterController extends HttpServlet {


    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取用户输入的用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        
        UserService userService = new UserService();
        userService.addUser(username, password); 

        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.print("<script>alert(''注册成功!'');window.location.href=''login.jsp''</script>");
    }
      public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }
}

addBookController.java (图书的增加功能)

package com.qfnu.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.math.BigDecimal;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qfnu.service.BookService;


@WebServlet("/addBookController")
public class addBookController extends HttpServlet {
        
       
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("utf-8");
        //设置相应的文本类型
        response.setContentType("text/html;charset=utf-8"); 
        
        BookService bookService = new BookService();
        
        String bookname=request.getParameter("bookname");
        String author=request.getParameter("author");
        int status = Integer.parseInt(request.getParameter("status"));
        double price = Double.parseDouble(request.getParameter("price"));
        
        bookService.addBook(bookname, author, status, price);
        PrintWriter out = response.getWriter();
        out.write("<script>alert(''添加成功!'');</script>");
        request.getRequestDispatcher("BookListController").forward(request, response);
        
    
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);    
    }

}

BookDelController.java (图书的删除)

package com.qfnu.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qfnu.service.BookService;


@WebServlet("/BookDelController")
public class BookDelController extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String idString = request.getParameter("id");
        int id = Integer.parseInt(idString);
        
        BookService bookService = new BookService();
        bookService.delUser(id);
        request.getRequestDispatcher("BookListController").forward(request, response);
        
    }

}

updataBook.java (图书的更新功能)

package com.qfnu.controller;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qfnu.service.BookService;


@WebServlet("/updataBook")
public class updataBookController extends HttpServlet {
    
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        //设置相应的文本类型
        response.setContentType("text/html;charset=utf-8"); 
        
        BookService bookService = new BookService();
        
        String bookname=request.getParameter("bookname");
        
        String author =request.getParameter("author");
        
        int status=Integer.parseInt(request.getParameter("status"));
        
        double price = Double.parseDouble(request.getParameter("price"));
        
        
        
        PrintWriter out = response.getWriter();
          
         boolean flag = bookService.UpdateBook(bookname, author, status, price);
        
        if(flag==true) {
            out.print("<script>alert(''更新成功!'');</script>");
            
            request.getRequestDispatcher("BookListController").forward(request, response);
        }
        else out.print("<script>alert(''更新失败!'');window.location.href=''updataBook.jsp''</script>");
    }

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        doGet(request, response);
    }

}

SearchBookController.java (图书的搜索功能)

```java
package com.qfnu.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.qfnu.entity.Book;
import com.qfnu.service.BookService;


@WebServlet("/SearchBook")
public class SearchBookController extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");

        String bookname=request.getParameter("bookname");
        BookService bookservice = new BookService();
        
        try {
                
            List<Book> books = bookservice.SearchBook(bookname);
            
            request.setAttribute("books", books);
            request.getRequestDispatcher("searchBook.jsp").forward(request, response);
                    
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

7.总结

代码太多了,前端的东西就不放了,都是最基本的JSP文件,上述代码可能会有错,我还在不断学习中

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • 图书管理系统java代码实现
  • 图书管理系统java版
  • Java+MySQL实现图书管理系统(完整代码)
  • 一个简陋的java图书管理系统
  • java实现图书馆管理系统
  • java实现简单的图书管理系统
  • JAVA初级项目——实现图书管理系统
  • java+mysql实现图书馆管理系统实战
  • java控制台输出图书馆管理系统
  • java实现图书管理系统

今天关于利用java和sqlserver建立简易图书管理系统的完整步骤java创建图书管理系统的讲解已经结束,谢谢您的阅读,如果想了解更多关于BS1029-基于C#+SqlServer+CS架构实现的图书信息管理系统,图书馆录入系统、C#实现简单成绩管理系统的完整步骤、Django--- 简易图书管理系统 (B/S 架构)、Java Web实现简易图书管理系统的相关知识,请在本站搜索。

本文标签: