作 者:钟 璐
专业名称:信息管理与信息系统
学 号:200920605232
时间:2011-9-12
摘要
本系统为书店管理系统,为了提高管理效率,要开发一个软件系统,提供给书店职员进行日常管理的工作,要用程序实现书籍采购,管理,销售及财务查询等功能。本文是关于书店管理系统的相关软件开发的一篇实践性论文。在当今社会,随着计算机的发展及网络技术的应用,日常管理工作应该从以前繁琐的事务中出来,从而提高了工作效率。目前在大的书店应有一整套比较完整的信息管理系统,而在一般小型的书店中大部分工作还是进行着手工管理,工作效率很低,并且不能及时了解书店各类图书的库存,读者需求的图书难以在短时间里找到﹑图书的入库和更新比较麻烦等,不便于动态及时调整图书结构。同时由于不可避免的人为因素,造成数据的遗漏﹑误报等。为了更好地适应当前书店的销售需求,缓解手工管理存在的弊端,开发了书店管理系统,该系统向用户提供的服务将在传统的“入库->销售->盘点”基础上,进一步提供全方位的信息服务。
根据小型书店的规模和经济能力,本系统具有书店管理系统的基本功能,如图书管理﹑入库管理﹑销售管理﹑综合查询﹑系统管理等,并且界面简单﹑操作简便。作为一种该研究方向的实践性探索,本图书销售管理系统旨在提供一个可以操作的,方便查询,易于修改的辅助管理系统,以满足当前小型书店在管理实践和业务操作中的具体需求。
关键词:库存成本 营业额统计 应收/应付账款统计
2.3.1登陆界面 7
2.3.2入库单 7
2.3.3添加图书信息 7
2.3.4添加用户 7
前言
信息化已经渗透到各个传统产业。对于中小商业这来说,用一个管理信息系统软件,实现经货,库存,销售的信息化管理和查询,以及简单的成本核算,可以大大提高管理效率。在当今社会,随着计算机的发展及网络技术的应用,日常管理工作应该从以前繁琐的事务中出来,从而提高了工作效率。目前在大的书店已经有一整套比较完整的信息管理系统,而在一般小型的书店中大部分工作还是进行着手工管理,工作效率很低,并且不能及时了解书店各类图书的库存,读者需求的图书难以在短时间里找到,图书的入库和更新比较麻烦等,不便于动态及时调整图书结构。同时由于不可避免的人为因素,造成数据的遗漏,误报等。使用计算机对书店图书信息进行管理,具有手工所无法比拟的优点。例如:检索迅速﹑查找方便﹑可靠性高﹑保密性好﹑寿命长﹑成本低﹑高效率﹑对进书有较好的预测性等。
总之,图书销售管理系统旨在提供一个可以操作的,方便查询,易于修改的辅助管理系统。同时提供了系统智能辅助与用户选择两种方式,提高查询效率。
1 书店管理系统的应用及需求
1.1 书店管理系统简介
(1)书店管理系统的一般业务流程是:采购人员采购图书,并打印入库单;仓库管理人员凭入库单讲所购图书入库,计入库存供员工进行查询;销售人员销售图书,可统计销售状况,并打印出库单;仓库管理人员凭出库单将所售图书出库;书店经理定期进行简单的财务统计查询主要包括库存成本核算、营业额统计、应收/应付账款统计等。
1.2需求分析
(一)系统需求
书店管理系统需要满足来自三个方面需求:第一,书店工作人员通过计算机来管理各类图书,进行图书分类编号,调整图书结构,增加图书库存,适应读者的需求。第二,工作人员对读者的需求情况能作好全面的掌握,及时得到历史销售记录。第三,也是书店的核心工作,对图书的销售管理。
(二)功能需求
基于系统需求分析,该系统需要实现以下基本功能:
1、权限设置
本系统的使用用户分两种:管理员和普通用户。管理员具有使用本系统的所有功能,而普通用户是需要具有日常书店的管理功能即可。用户权限的设置通过用户登陆界面的输入来进行。
2、图书销售
图书管理人员通过此模块来销售各类图书并对销售情况进行记录,记录的信息包括图书销售的数量,价格,折扣比例等。在进行销售图书时,输入图书的编号,系统就可以搜索到该图书编号对应的图书信息,然后列出该图书销售是需要的基本信息,书名,出版社﹑价格等。销售可以输入折扣数以便打折,在购买相同的多本书时,可以直接输入图书数量,避免重复输入图书编号。同时,也提供撤销销售记录的功能,销售员可以撤销销售时的上一条记录。程序还能自动统计读者购买的总金额,便于销售员掌握。
3、图书入库
书店工作人员通过此模块来管理各类图书库存的数目。当一批图书入库时,只需要输入图书编号和图书数量,程序将自动更改库存的图书数量。使用的公式为:现有图书库存=原有图书库存 + 新入库图书数量。
4、图书信息设置
书店工作人员通过次模块来管理各类图书信息,包括图书信息的修改,删除等。在进行图书的删除时,要首先弹出提示窗口让用户确认是否删除,只有在用户确认后才能够进行图书的删除。在进行图书的修改时,根据用户选定的书进行修改,即列出所有用户选定的信息,在这个基础上进行图书信息的修改。
5、综合查询
综合查询提供两种功能,通过它可以查询读者所需要的图书信息和销售情况。图书信息查询提供了用包括图书编号和图书名称来对图书信息进行查询的各种查询条件,读者可以根据查询方式和条件来进行所需图书的查询。同时,在查询时还提供了进行模糊查询的功能,即该模块能够利用读者输入的非完整的查询条件进行查询,例如,读者在书籍编号大查询条件中输入“06”,系统就能够查出所有书籍编号包括“06”的图书,像“1006”,“0600”等。这样更加方便了读者的查询。销售查询提供了按销售的流水帐方式查询,查询时可以得到一段时间图书销售情况。
6、系统设置
包括图书分类设置,出版社设置和用户管理等工作。在该模块中工作人员可以进行添加和删除各类图书所属分类的名称,图书出版社,同时还可进行系统用户登陆的一些管理,包括添加,删除用户,更改用户的登陆密码等。
7、数据库管理
对现有数据库进行管理,包括数据库备份和恢复,以方便用户对数据库的管理和维护工作,提高管理的数据库安全性。
(1) 提供用户账号登录功能,以按不同用户角色进行功能;
(2)提供用户账号管理功能,分配4种角色给各个用户。
(3)进行采购图书信息的录入、查询;
(4)填写、打印、作废(删除)入库单。
对于仓库管理人员:
(5)执行入库和执行出库;
(6)库存查询。
对于销售人员:
(7)销售情况统计;
(8)填写、打印、作废(删除)出库单。
对于经理:
(9)有其他各类员工的操作权利;
(10)用户账号管理;
(11)财务统计查询。
1.3 系统开发平台
(1)硬件要求:CPU:Pentium4 2.0GHz以上IBM兼容机 内存512MB以上容量 显卡:32MB或以上显之AGP接口显卡
(2)软件要求:操作系统:Microsoft Windows 2000/XP 开发工具:Microsoft Access2003
2 解 决 方 案
2.1 模块设计
1.登录模块设计以及登录模块的功能和接口关系
2.登录模块提供用户身份验证功能,应提供用户名,密码输入提示框,根据用户输入查询数据库中的用户角色:若查询成功,则记录用户身份,进入系统,并根据用户 ,确定哪些系统功能可用;若查询结果为空,则提示用户输入错误,并在提供3次错误尝试机会后,推出登录。
书店管理系统体系结构 登录模块的功能逻辑和接口关系
3.登录及主窗体
(1)登录。用户输入用户名和密码,密码应该显示为“*”。当用户输入密码错误时应该提示用户,连续3次输入错误则退出系统。
(1)主窗口。用户登录成功后进入主窗口,此时显示用户名、用户身份、系统时间等信息。不同身份的用户登录主窗口时,可用的菜单不同,下图是以经理身份登录的用户看到的界面。
4、采购管理
采购管理包含填写入库单、入库单管理、图书添加、图书管理共5个部分。
采购模块供采购人员使用,完成图书信息录入,打印入库单的工作,并可以查询以往采购图书信息和入库单信息。
库存模块的功能逻辑和接口关系
(1)填写入库单。当书店新进一批图书时,采购员需要填写入库单。系统可以根据采购员输入图书名称来查询图书的详细信息,采购员仅仅需要输入折扣、数量、供应商、是否付款等信息,其他信息则由系统自动完成。采购员可以单击“打印入库单”按钮来打印填写好的入库单。
(2)入库单管理。在入库但管理窗口,可以依据经办人(当前采购员)和填单时间进行查询。在这里也可以删除入库单信息,但是,只能删除还没有进行入库操作的入库单信息。
(3)打印入库单。采购员填写完入库单后,需要打印入库单,然后拿着打印的入库单去找仓库管理员进行新书入库。
(2)图书添加。如果新进图书是第一次引进,需要添加图书信息。如果需要为此图书添加图片,可以双击图片“双击此处 添加图像”,即可添加图片。
(5)图书管理。在图书管理窗口中,用户可以对图书进行查询及删除操作。如果入库单表、库存表中已经包含了某本图书的信息,则该条图书信息不能被删除。
4.仓库管理
仓储管理包括入库查询、入库、出库共三个部分。
(1)库存查询。根据图书名称、作者、出版社、ISBN等图书信息或入库时间来查询图书的库存信息。库存查询好似一个公共模块,采购员,销售员、仓库管理员都可以进行库存查询,
(3)入库。根据入库单ID查询入库单信息,并对用户选中的入库单执行入库作,
(3)出库。与入库操作类似,只是显示的是出库单信息。
4.销售管理
销售管理包含填写入库单、出库单管理、打印出库单、销售统计共4个部分。出库单管理与打印出库单和入库单管理与打印入库单相似,这里不再赘述。
(1)填写出库单。填写出库单和填写图库单类似。填写出库单的图书明细中的“图书ID”,需要在库存表中查询,同时底部的图书详细信息栏中还要显示库存数量,并要求用户输入的出库数量小于等于库存量,
(2)销售统计。销售统计是指统计某个时段的畅销书和滞销书等信息,需要访问出库单表以获取销售信息还要访问库存表以获取价格信息,并通过图书ID访问图书表以获取图书信息
5.财务管理
财务管理包含应收账款、应付账款和营业额统计共3个部分。
(1)应收账款。图书出库时,购买单位并不一定付现款,这就需要对未收账款进行管理。在应收账款窗口可以根据购买单位查询尚未付款的出库但信息,并可查看该账单的明细信息。如果某出库单的账款已收,可以单机该出库单所在行的“收款”按钮,此时“应收账款合计”就会相应改变,
(2)应付账款。应付账款和应收账款类似,只是用来处理图书入库时尚未付款的入库单信息。
(3)营业额统计。营业额统计可以让用户更好地把我书店的运营情况。该窗口可以根据营业员和时间对出库单信息进行查询,并能对营业额,进价,准毛利润等进行统计
6.系统管理
系统管理由修改密码、用户添加、用户管理共3个部分组成,其中用户管理与图书管理窗口类似
管理模块提供管理层人员进行用户管理和财务查询管理。
管理模块的功能逻辑和接口关系
(1)修改密码。如果用户修改密码,首先需要输入原密码,只有原密码正确才会被允许修改密码,并且需要连续两次输入新密码,
(2)添加新用户,用户添加窗体的功能是为系统注册新的用户。注册新的用户时需要输入用户名,密码,用户角色从系统提供的4种角色中选择,
2.3 创建数据库
book_Info
in_Detail
in_Info
out_Detail
out_Info
stock_Info
user_Info
2.3主要代码设计
2.3.1、登陆界面
public partial class Form1 : Form
{
private SqlConnection conn;
private SqlCommand command;
private SqlDataReader reader;
public Form1()
{
InitializeComponent();
conn = new SqlConnection(@"server=;database=book;Integrated security=sspi");
}
private void button1_Click(object sender, EventArgs e)
{
command = new SqlCommand("select * from user_info where (用户名=@username and 密码=@password)",conn );
command.Parameters.AddWithValue("username", textBox1.Text);
command.Parameters.AddWithValue("password",textBox2 .Text );
conn.Open();
reader = command.ExecuteReader();
if (reader.Read ())
{
MessageBox.Show("欢迎登录!");
}
else
{
MessageBox.Show("密码或用户名错误!");
}
conn.Close();
}
}
} public partial class Form1 : Form
{ //初始化数据上下文对象DataContext
BookDataClassesDataContext bookStore = new BookeDataClassesDataContext();
int i = 0; //登录次数
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
var userQuery = From userinfo in book .user_Info where userinfo.用户名.Equals(textBox1.Text .Trim ())>
&& userinfo.密码.Equals(textBox2.Text .Trim ()) Select userinfo;
i++;
if (i< 3)
{
if (userQuery .Count() >= 1)
{ //传用户名,角色到主窗体
MainForm.UserName = userQuery .First().用户名.ToString();
MainForm.UserRole = userQuery .First().角色.ToString();
this.Visible = false ;
//设置窗体DialogResult值
this .DialogResult = DialogResult .OK ;
}
else
MessageBox .Show ("密码错误,您还有" + Convert.ToInt16 (3-i) + "次机会!");
}
else
this .DialogResult = DialogResult .NO ;
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
2.3.2、入库单
public partial class Form1 : Form
{
private SqlConnection conn;
private SqlCommand commad, commad2;
private SqlDataReader reader;
private SqlDataAdapter sda;
DataTable in_Detailtable=new DataTable() ;
public Form1()
{
InitializeComponent();
conn = new SqlConnection(@"server=;database=book;Integrated Security=sspi;");
}
//自定义控件清空函数
private void clear()
{
foreach (Control c in this.panel1.Controls)
{
if (c is TextBox)
((TextBox)c).Text = "";
}
}
private void Form1_Load(object sender, EventArgs e)
{ //生成入库单ID
commad = new SqlCommand("select MAX(入库单ID) from in_Info", conn);
conn.Open();
this.入库单IDTextBox.Text = (Convert.ToInt32(commad.ExecuteScalar()) + 1).ToString();
conn.Close();
this.填单时间TextBox.Text = DateTime.Now.ToString();
this.付款CheckBox.CheckState = CheckState.Unchecked;
sda = new SqlDataAdapter("select 图书ID,折扣,进价,数量,金额 from in_Detail where 入库单ID=0", conn);
sda.Fill(in_Detailtable);
this.dataGridView1.DataSource = in_Detailtable;
dataGridView1.Columns["Column1"].DisplayIndex =5;
}
//图示信息显示在控件组中
private void 图书名称textBox_TextChanged(object sender, EventArgs e)
{
String sql = "select * from book_info where 图书名称='" + this.图书名称TextBox.Text + "'";
commad = new SqlCommand(sql, conn);
conn.Open();
reader = commad.ExecuteReader();
if (reader.Read())
{
this.作者TextBox.Text = reader["作者"].ToString();
this.ISBNTextBox.Text = reader["ISBN"].ToString();
this.版次TextBox.Text = reader["版次"].ToString();
this.出版社TextBox.Text = reader["出版社"].ToString();
this.出版时间TextBox.Text = reader["出版时间"].ToString();
this.定价TextBox.Text = reader["定价"].ToString();
this.图书名称TextBox.Text = reader["图书名称"].ToString();
}
conn.Close();
}
//根据图书定价和折扣计算图书进价
private void 折扣textBox_TextChanged(object sender, EventArgs e)
{
decimal zheKou = 0, dingJia = 0, jinJia = 0;
try
{
dingJia = Convert.ToDecimal(this.定价TextBox.Text);
zheKou = Convert.ToDecimal(this.折扣TextBox.Text);
jinJia = dingJia * zheKou;
this.进价TextBox.Text = jinJia.ToString();
}
catch { }
}
//根据图书进价和数量计算图书金额
private void 数量textBox_TextChanged(object sender, EventArgs e)
{
decimal shuLiang, jinJia, jinE;
try
{
shuLiang = Convert.ToDecimal(this.数量TextBox.Text);
jinJia = Convert.ToDecimal(this.进价TextBox.Text);
jinE = jinJia * shuLiang;
this.金额TextBox.Text = jinE.ToString();
}
catch { }
}
//添加图书信息
private void 添加button_Click(object sender, EventArgs e)
{
int rows = 0;
conn.Open();
string sql = "select count(*) from book_Info where 图书名称='" + 图书名称TextBox.Text + "'And 作者='"
+ 作者TextBox.Text + "'And ISBN='" + ISBNTextBox.Text + "'And 版次='" + 版次TextBox.Text + "'And 出版社='"
+ 出版社TextBox.Text + "'And 出版时间='" + 出版时间TextBox.Text + "'And 定价='" + 定价TextBox.Text + "'";
commad = new SqlCommand(sql, conn);
rows = Convert.ToInt32(commad.ExecuteScalar());
conn.Close();
if (rows < 1)
{
string sql2 = "insert into book_Info(图书名称,作者,出版社,ISBN,出版时间,版次,定价) values('" + 图书名称TextBox.Text
+ "','" + 作者TextBox.Text + "','" + ISBNTextBox.Text + "','" + 出版社TextBox.Text + "','" + 版次TextBox.Text + "','"
+ 出版时间TextBox.Text + "','" + 定价TextBox.Text + "')";
commad2 = new SqlCommand(sql2, conn);
conn.Open();
commad2.ExecuteNonQuery();
conn.Close();
commad = new SqlCommand("select MAX(图书ID) from book_Info", conn);
conn.Open();
this.图书IDTextBox.Text = commad.ExecuteScalar().ToString();
conn.Close();
}
DataRow newRow = in_Detailtable.NewRow();
newRow["图书ID"] = this.图书IDTextBox.Text;
newRow["折扣"] = this.折扣TextBox.Text;
newRow["进价"] = this.进价TextBox.Text;
newRow["数量"] = this.数量TextBox.Text;
newRow["金额"] = this.金额TextBox.Text;
in_Detailtable.Rows.Add(newRow);
dataGridView1.DataSource = in_Detailtable;
clear();
}
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
int CIndex = e.ColumnIndex;
if (CIndex == 0)
{
dataGridView1.Rows.Remove(dataGridView1.CurrentRow);
}
}
private void 打印入库单button_Click(object sender, EventArgs e)
{
string Sql2 = "insert into in_Info(供应商,填单时间,经办人,付款,入库) value('" + 供应商TextBox.Text
+ "','" + 填单时间TextBox.Text + "','" + 经办人TextBox.Text + "','" + 付款CheckBox.Checked + "','"
+ false + "')";
commad2 = new SqlCommand(Sql2, conn);
conn.Open();
commad2.ExecuteNonQuery();
conn.Close();
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
string Sql = "insert into in_Detail(入库单ID,图书ID,折扣,进价,数量,金额) values ('" + 入库单IDTextBox.Text +
"','" + dataGridView1.Rows[i].Cells[1].Value + "','" + dataGridView1.Rows[i].Cells[2].Value +
"','" + dataGridView1.Rows[i].Cells[3].Value + "','" + dataGridView1.Rows[i].Cells[4].Value +
"','" + dataGridView1.Rows[i].Cells[5].Value + "')";
commad = new SqlCommand(Sql, conn);
conn.Open();
commad.ExecuteNonQuery();
conn.Close();
2.3.3、添加图书信息
public partial class Form1 : Form
{
private SqlConnection conn;
private SqlCommand command;
public Form1()
{
InitializeComponent();
conn = new SqlConnection(@"server=;database=bookstore;Integrated Security=sspi;");
}
private void button1_Click(object sender, EventArgs e)
{
string sql = "insert into book_Info(图书名称,作者,出版社,ISBN) values ('"+ 图书名称TextBox.Text +"','"+作者TextBox.Text + "','"+出版社TextBox.Text + "','" + iSBNTextBox.Text + "')";
command = new SqlCommand(sql,conn);
conn.Open();
command.ExecuteNonQuery();
conn.Close();
图书名称TextBox.Text = "";
作者TextBox.Text = "";
出版社TextBox.Text = "";
iSBNTextBox.Text = "";
}
private void button2_Click(object sender, EventArgs e)
{
图书名称TextBox.Text = "";
作者TextBox.Text = "";
出版社TextBox.Text = "";
iSBNTextBox.Text = "";
}
2.3.4、用户添加
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
if (this.密码TextBox.Text == this.密码TextBox2.Text);
{
user_Info userEntity = new user_Info();
{
用户名= this.用户名TextBox.Text;
密码= this.密码TextBox.Text;
角色= this.角色TextBox.Text;
};
bookStore.user_Info.InsertOnSubmit(userEntity);
}
bookStore.SubmitChanges();
this.用户名 TextBox.Text = "";
this.密码 TextBox.Text = "";
this.密码 TextBox2.Text = "";
this.角色 ComboBox.SelectedItm ="";
}
else
{
MessageBox.Show("两尺输入的密码不一致,请重新输入!");
this.密码 TextBox.Text = "";
this.密码 TextBox2.Text = "";
}
}
}
}
3、系 统 实 现
3.1 开发环境
(1)开发环境 本系统使用VisualBasic语言进行开发。适用于内存不低于256MB 配备有Windows2000,Windows2003,WindowsXP系统的计算机。
4、总结
(1)通过做课程设计,有几点感想,归纳如下:1.扎实的理论基础。如果不掌握他们,很难写出正确的程序。而这一点正式我们这个非软件专业学生所缺乏的。2良好的编程风格,代码的缩进编排,变量的命名规则要始终保持一致,如果注视和代码不一致那就更加糟糕。
在这次的设计过程中,我学到的不仅是只是,我还认识到许多的事情。这次设计使我的编程水平提高了一大步,使我充分认识到细心的重要性。这次设计还是我对数据库连接和对数据库的操作有了进一步的了解,所以这次设计是对我的综合能力的一个巨大提升和锻炼,但是我必须承认的是,自己的能力和知识还是很肤浅的。所以在今后我的学习道路上还要更加坚实的继续走下去。最后特别感谢惠宏伟老师在数据库设计课程中认真负责的教学,才使我能结合所学的知识完成这一课程设计,也特别老师对我们出现问题之后进行的耐心讲解!
5、参考文献
(1) C#程序设计实例教程