C#实现图书管理系统
作者:Hui110110
这篇文章主要为大家详细介绍了C#实现图书管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文为大家分享了C#实现图书管理系统课程设计,供大家参考,具体内容如下
一、设计目的
通过模拟图书管理系统,实现以下功能
学生账号的注册
学生对馆藏图书状况的查询
学生借书,还书状态的查询
学生借书以及归还图书
学生欠款的查询
二、框架分析
数据库主要包括:
学生表:学生学号,学生姓名,学生性别,学生类型,学生密码
图书表:图书编号,图书名,图书出版社,图书作者,图书状态(1代表可以借,0代表不可以,)图书类型,图书出版日期
借书表:学生号,图书号,图书名,借出日期
还书表:学生号,图书号,图书名,归还日期
欠费金额表:学生号,图书号,图书名,欠费金额(超过30天每天收0.3元)
三、实验环境
VS2013,SQLSERVER2014
四、体系结构
在客户端与数据库之间增加了一个“中间层”,分为表示层,业务逻辑层,数据访问层
表示层:为客户提供对应程序的访问
业务逻辑层:以类库的形式为表示层服务
数据访问层:实现整个系统的数据库连接,数据库存取操作,以组件类库的形式为业务逻辑层提供服务
五、代码实现
数据库的建立:
create database MyLibrary on (name=Mylibrary_data1, filename='d:\Mylibrary_data1.mdf', size=10, maxsize=50, filegrowth=4) log on (name=Mylibrary_log1, filename='d:\Mylibrary_log1.ldf', size=10MB, maxsize=20MB, filegrowth=2MB) use MyLibrary; create table reader( readerid varchar(20) primary key, readername varchar(20) not null, readersex varchar(20) not null, readertype varchar(20) not null, readerpd varchar(20) not null ) create table book( bookid varchar(20) primary key, booktype varchar(20) not null, bookauthor varchar(20) not null, bookname varchar(20) not null, isbrrowed varchar(20) not null, booklibrary varchar(20) not null, bookpubdate datetime ) create table brrow_data( readerid varchar(20) primary key, bookid varchar(20) , bookname varchar(20), brrowdate datetime foreign key (readerid) references reader(readerid), foreign key (bookid) references book(bookid) ) create table return_record( readerid varchar (20) primary key, bookid varchar(20), bookname varchar(20), returndate datetime, foreign key (readerid) references reader(readerid), foreign key (bookid) references book(bookid) ) create table readerfee( readerid varchar(20) primary key, bookid varchar(20), bookname varchar(20), readerpay varchar(20), foreign key (readerid) references reader(readerid), foreign key (bookid) references book(bookid) ) --已有图书插如表中 insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921000','缥缈之旅','修真','小猪','仙王出版社','2005-09-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921001','唐朝好男人','穿越','多一半','新星出版社','2005-07-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921002','鬼吹灯','恐怖','天下霸唱','安徽文艺出版社','2005-09-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921003','和空姐同居的日子','都市','海王','中国海关出版社','2005-08-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921004','卡图','科幻','方向','广西人民出版社','2005-06-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921005','蜀山剑侠传','仙侠','还珠楼主','陕西人民出版社','2005-04-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921006','何以笙箫默','言情','顾漫','朝华出版社','2005-05-01','否'); insert into book (bookid,bookname,booktype,bookauthor,booklibrary,bookpubdate,isbrrowed) values ('3140921007','步步惊心','穿越','童话','民族出版社','2005-12-01','否'); --将读者插如表中 insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007000','李磊','男','学生','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007001','棠张僧','男','学生','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007002','韩梅梅','女','学生','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007003','路西','女','学生','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007004','王强','男','学生','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007005','马正标','男','管理','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007006','卢海鹏','男','管理','000000'); insert into reader(readerid,readername,readersex,readertype,readerpd) values ('21007007','李艳玲','女','管理','000000'); --查询功能 select *from reader; select *from book; select *from brrow_data; select *from return_record; select *from readerfee; --删除表 drop table reader; drop table book; drop table brrow_data; drop table return_record; drop table readerfee;
登录界面的编辑
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.Data.SqlClient; namespace Library { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void panel1_Paint(object sender, PaintEventArgs e) { } //登录按钮 private void button1_Click(object sender, EventArgs e) { Form2 form2 = new Form2(); this.Hide(); form2.Show(); mycon.Close(); //sql = string.Format("select count(*) from reader where readerid='{0}'",textBox1.Text); //SqlCommand com = new SqlCommand(sql,mycon); //int count = (int)com.ExecuteScalar(); //if (count==1) //{ // sql = string.Format("select count(*) from reader where readerpd='{0}'",textBox2.Text); // com = new SqlCommand(sql, mycon); // count = (int)com.ExecuteScalar(); // if (count>=1) // { // if (comboBox1.Text=="学生") // { // Form2 form2 = new Form2(); // this.Hide(); // form2.Show(); form2.readerid = textBox1.Text; // mycon.Close(); // } // else if (comboBox1.Text=="管理员") // { // Form4 form4 = new Form4(); // this.Hide(); // form4.Show(); // mycon.Close(); // } // else // { // MessageBox.Show("请选择您的身份!"); // } // } // else // { // MessageBox.Show("密码错误,请重新输入!"); // } //} //else{ // MessageBox.Show("账号不存在,请重新输入!"); //} } string sql, con; SqlConnection mycon; //加载事件 private void Form1_Load(object sender, EventArgs e) { con = "Server=.;Database=MyLibrary;Trusted_Connection=SSPI"; mycon = new SqlConnection(con); mycon.Open(); } //注册 private void button2_Click(object sender, EventArgs e) { Form3 form3 = new Form3(); this.Hide(); form3.Show(); } } }
注册界面的编辑
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.Data.SqlClient; namespace Library { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void label3_Click(object sender, EventArgs e) { } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } //提交申请 private void button1_Click(object sender, EventArgs e) { sql = string.Format("select count(*) from reader where readerpd='{0}'", textBox2.Text); SqlCommand com = new SqlCommand(sql, mycon); int count = (int)com.ExecuteScalar(); if (count==1) { MessageBox.Show("抱歉,该账号已存在!"); } else { if (textBox1.Text==""||textBox2.Text==""||textBox4.Text==""||comboBox1.Text==""||textBox3.Text=="") { MessageBox.Show("请将信息填写完整!"); } else { Form1 form1 = new Form1(); form1.Show(); this.Hide(); } } } string sql, con; SqlConnection mycon; private void Form3_Load(object sender, EventArgs e) { con = "Server=.;Database=MyLibrary;Trusted_Connection=SSPI"; mycon = new SqlConnection(con); mycon.Open(); } } }
学生管理界面的编辑
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.Data.SqlClient; namespace Library { public partial class Form2 : Form { public Form2() { InitializeComponent(); } public string readerid; string sql, con; SqlConnection mycon; SqlCommand com; //加载事件 private void Form2_Load(object sender, EventArgs e) { label1.Hide(); textBox1.Hide(); button4.Hide(); dataGridView1.Hide(); con = "Server=.;Database=MyLibrary;Trusted_Connection=SSPI"; mycon = new SqlConnection(con); mycon.Open(); } //个人信息 private void button1_Click(object sender, EventArgs e) { dataGridView1.Show(); label1.Hide(); textBox1.Hide(); button4.Hide(); sql = string.Format("select * from reader where readerid='{0}'", readerid); SqlDataAdapter mydata = new SqlDataAdapter(sql, con); DataSet myds = new DataSet(); mydata.Fill(myds, "reader"); dataGridView1.DataSource = myds.Tables["reader"]; } //图书信息 private void button2_Click(object sender, EventArgs e) { dataGridView1.Show(); label1.Hide(); textBox1.Hide(); button4.Hide(); sql = "select * from book"; SqlDataAdapter mydata = new SqlDataAdapter(sql, con); DataSet myds = new DataSet(); mydata.Fill(myds, "book"); dataGridView1.DataSource = myds.Tables["book"]; } //缴费系统 private void button3_Click(object sender, EventArgs e) { try { sql = string.Format("insert into readerfee(readerid,bookid,bookname,readerpay)select readerid ,bookid , bookname,0.03*(datediff(day,convert(smalldatetime,brrowdate),getdate())-30) from brrow_data where datediff(day,convert(smalldatetime,brrowdate),getdate())>=0;"); com = new SqlCommand(); com.Connection = mycon; com.CommandType = CommandType.Text; com.CommandText = sql; SqlDataReader dr = com.ExecuteReader(); dr.Close(); } catch { } sql = string.Format("select * from readerfee where readerid='{0}'", readerid); SqlDataAdapter mydata = new SqlDataAdapter(sql, con); DataSet myds = new DataSet(); mydata.Fill(myds, "readerfee"); dataGridView1.DataSource = myds.Tables["readerfee"]; } //借还记录 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { dataGridView1.Show(); label1.Hide(); textBox1.Hide(); button4.Hide(); if (comboBox1.Text == "借书记录") { sql = string.Format("select * from brrow_data where readerid='{0}'", readerid); SqlDataAdapter mydata = new SqlDataAdapter(sql, con); DataSet myds = new DataSet(); mydata.Fill(myds, "reader"); dataGridView1.DataSource = myds.Tables["reader"]; } else { sql = string.Format("select * from return_record where readerid='{0}'", readerid); SqlDataAdapter mydata = new SqlDataAdapter(sql, con); DataSet myds = new DataSet(); mydata.Fill(myds, "reader"); dataGridView1.DataSource = myds.Tables["reader"]; } } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { dataGridView1.Hide(); if (comboBox2.Text == "我要借书") { button4.Show(); button4.Text = "借阅本书"; label1.Text = "搜索书名"; label1.Show(); textBox1.Show(); } else if (comboBox2.Text == "我要还书") { button4.Show(); button4.Text = "归还本书"; label1.Text = "所借书号"; label1.Show(); textBox1.Show(); } } private void button4_Click(object sender, EventArgs e) { if (button4.Text == "借阅本书") { sql = string.Format("select count(*) from book where bookname='{0}'", textBox1.Text); com = new SqlCommand(sql, mycon); int count = (int)com.ExecuteScalar(); if (count >= 1) { sql = string.Format("select bookid from book where bookname='{0}'", textBox1.Text); com = new SqlCommand(sql, mycon); string bookid = (string)com.ExecuteScalar(); sql = string.Format("insert into brrow_data (readerid,bookid,bookname,brrowdate) values('{0}','{1}','{2}','{3}')", readerid, bookid, textBox1.Text, DateTime.Now); com = new SqlCommand(); com.Connection = mycon; com.CommandType = CommandType.Text; com.CommandText = sql; SqlDataReader dr = com.ExecuteReader(); dr.Close(); MessageBox.Show("借书成功!"); } else MessageBox.Show("抱歉,不存在本书!"); } else if (button4.Text == "归还本书") { sql = string.Format("select count(*) from brrow_data where bookid='{0}'", textBox1.Text); com = new SqlCommand(sql, mycon); int count = (int)com.ExecuteScalar(); if (count >= 1) { sql = string.Format("select bookname from brrow_data where bookid='{0}'", textBox1.Text); com = new SqlCommand(sql, mycon); string bookname = (string)com.ExecuteScalar(); sql = string.Format("insert into return_record(readerid,bookid,bookname,returndate) values ('{0}','{1}','{2}','{3}')", readerid, textBox1.Text, bookname, DateTime.Now); com = new SqlCommand(); com.Connection = mycon; com.CommandType = CommandType.Text; com.CommandText = sql; SqlDataReader dr = com.ExecuteReader(); dr.Close(); sql = string.Format("delete from brrow_data where bookid='{0}'", textBox1.Text); com = new SqlCommand(); com.Connection = mycon; com.CommandType = CommandType.Text; com.CommandText = sql; SqlDataReader dr1 = com.ExecuteReader(); dr1.Close(); MessageBox.Show(bookname + "还书成功!"); } else { MessageBox.Show("抱歉!您没有借这本书!"); } } } } }
六,心得总结
通过对一系列功能的实现,了解到了如何如何建立数据库并进行增删改查等基本操作,如何实现数据库与winform应用程序之间的连接,如何通过C#语言来操控数据库。更重要的是意识到了三层架构的重要性,将会加强学习这一方面。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。