武汉晴川学院
2021-2022-1
.NET综合应用开发
综合作品
| 专 业: | 计算机科学与技术 | ||
| 班 级: | 201903班 | ||
| 题 目: | BMS图书管理系统 | ||
| 指导老师: | |||
| 第2组 (组长:***) | 成员 | 分工 | 成绩 |
| 客户端代码、服务器代码丶答辩讲解 | |||
| 客户端代码丶文档整理 | |||
| 服务器代码丶数据库存储过程代码 | |||
| 服务器代码丶PPT制作 | |||
计算机学院
BMS图书管理系统的设计与实现
1需求分析
参与者:【一般用户】、【管理员用户】
用例:列出每一个参与者的操作
| 参与者 | 用例 | 说明 | 状态 |
| 【一般用户】 | 图书功能 | 能对图书进行查看操作 | 已完成 |
| 登录注册功能 | 能进行注册,登录等基本功能 | 已完成 | |
| 图书图片上传-共享功能 | 可以上传分享自己的书单 | 已完成 | |
| 【管理员用户】 | 图书管理功能 | 能对图书进行查看,添加,删除等操作 | 已完成 |
| 登录注册功能 | 能进行注册,登录等基本功能 | 已完成 | |
| 权限修改功能 | 能进行权限的增加,更新以及删除等操作 | 已完成 | |
| (备注:管理员用户在拥有一般用户各种操作的情况下可以完成上述操作) |
2设计
采用C/S架构,系统包含数据库服务器、WEB服务器、和WPF客户端。
正在上传…重新上传取消null
数据库服务器:
WEB服务器:采用三层结构:Model、DAL、BLL
WPF客户端:
2.1 数据库设计
数据库(image)包含哪张表(列出表名)
users表(用户表)
| 字段名 | 数据类型 | NULL | 说明 |
| uName | varchar(32) | 主键,用户名 | |
| poQu | varchar(128) | 用户权限 | |
image表(图书图片表)
| 字段名 | 数据类型 | NULL | 说明 |
| ID | int | 自动增长列,主键,图片的 ID 号 | |
| uName | varchar(32) | 用户名称,说明该图片归该用户所有 | |
| iDate | datetime | 存储图片的日期时间 | |
| iFile | varchar(256) | 图片的名称 | |
| iShared | bit | Not | 图片是否共享,值为 1 时共享,为 0 时不共享 |
| iData | image | 图片的二进制数据 |
book表(图书信息表)
| 字段名 | 数据类型 | NULL | 说明 |
| bookID | varchar(128) | 主键,图书编号 | |
| bookName | varchar(128) | 图书名字 | |
| bookType | varchar(128) | 图书类型 | |
| author | varchar(128) | 作者 |
popem表(用户权限表)
| 字段名 | 数据类型 | NULL | 说明 |
| uName | varchar(32) | 与用户表的外键,主键,用户名 | |
| uPass | varchar(512) | 密码 | |
BMS图书管理系统存储过程表
| 功能 | 存储过程名 | 参数 | 返回值 |
| 添加用户 | adduser | Uname,upass | 无 |
| 查找用户及密码 | selectuser | uname ,upass | 返回所查用户的密码 |
| 增加权限 | addpopem | Uname,poqu | 0 |
| 更新权限 | updatepopem | uName,poqu | 无 |
| 删除权限 | delbypopem | uname | 无 |
| 添加图书 | addbook | BookID,BookName,BookType Author | 0 |
| 查找图书 | selbookid | BookID | BookID,bookName, bookType, author |
| 更新图书 | updatebookid | BookName,BookID | 无 |
| 删除图书 | delbybookid | BookID | 无 |
2.2 WEB服务器
| 层次 | 类名 | 方法 | 说明 |
| MODEL | MODEL | MODEL | 获得用户信息 |
| DAL | DBHelper | DBHelper | 连接数据库 |
| ImageService | uploadImage | 上传图片 | |
| userService | userService | 登录 | |
| Xmlprocess | Xmlsd | Xmlsd | 序列化和反序列化 |
2.3 WPF客户端
| 窗体名 | 控件 | 控件名称 | 说明 |
| Zhuye.xaml | Button StatusBarItem | 图书图片,添加图书,修改图片, | 主页 |
| Window1.xaml | MenuItem DataGridTextColumn TextBlock | 用户管理,图片管理,关于 | 查看图书 |
| Window2.xaml | Button | 搜索,返回 | 查询图书 |
| quanxian.xaml | TextBlock Label Button | 权限,用户名,确定 | 修改用户权限 |
| MainWindow.xaml | Border TextBox CheckBox Button Canva | 安全登录,自动登录,记住密码,注册账号 | 登录界面 |
| addBok.xaml | TextBlock GroupBox CheckBox Button Label | 添加图书,图书编号,书名,现存否,类型,邮箱,作者,添加者,添加,返回 | 添加图书信息 |
3实现代码
数据库 create database books --创建数据库books go use books --打开数据库 go create table users --创建表 ( uName varchar(32) primary key, uPass varchar(512) ) go -- 添加用户 create proc adduser ( @uname varchar(32), @upass varchar(512) ) as insert into users(uName,uPass) values(@uname,@upass) go -- 查找用户及密码 create proc selectuser ( @uname varchar(32), @upass varchar(512) ) as select count(*) from users where uName=@uname and uPass=@upass go create table popem --//用户权限表(属性为 用户名:uName 用户权限:poqu) ( uName varchar(32) primary key, poQu varchar(128), foreign key( uName) references users( uName) ) go --增加权限 create proc addpopem ( @uname varchar(32), @poqu varchar(128) ) as insert into popem(uname,poQu) values(@uname,@poqu) go --更新权限 create proc updatepopem ( @uName varchar(32), @poqu varchar(128) ) as update popem set poQu=@poqu where uName=@uname go --删除权限 create proc delbypopem ( @uname varchar(32) ) as delete from popem where uName=@uname go create table book --图书信息表(属性为图书编号:bookID 图书名字:bookName 图书类型:bookType 作者:author) ( bookID varchar(128) primary key, bookName varchar(128), bookType varchar(128), author varchar(128) ) go create proc addbook ( @BookID varchar(128), @BookName varchar(128), @BookType varchar(128), @Author varchar(128) ) as insert into book(bookID,bookName,bookType,author) values(@BookID,@BookName,@BookType ,@Author) go --查找图书 create proc selbookid ( @BookID varchar(128) ) as select bookID,bookName,bookType,author from book where bookID=@BookID go create proc selbybookid ( @BookID varchar(128) ) as select count(*) from book where bookID=@BookID go --更新图书 create proc updatebookid ( @BookName varchar(128), @BookID varchar(128) ) as update book set bookName=@BookName where bookID=@BookID go --删除图书 create proc delbybookid ( @BookID varchar(128) ) as delete from book where bookID=@BookID go
WEB服务器
namespace DAL
{
public class DBHelper
{
//public static String conString = "Data Source=localhost\sqlexpress;Initial Catalog=image;Integrated Security = SSPI; MultipleActiveResultSets=true";//windows 身份验证
public static String conString = "Server=127.0.0.1;initial catalog=books;user id=sa;password=123456;";
public SqlConnection con;
public SqlCommand cmd;
public DBHelper(SqlConnection con)
{
con.Open();
this.con = con;
cmd = new SqlCommand();
cmd.Connection = con;
}
public int executeCommand(string sql)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
return cmd.ExecuteNonQuery();
}
public int executeCommand(string sql, params SqlParameter[] values)
{
cmd.CommandType=CommandType.StoredProcedure;
cmd.CommandText =sql ;
cmd.Parameters.Clear();
cmd.Parameters.AddRange(values);
return cmd.ExecuteNonQuery();
}
public int getScalar(string sql)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
return (int)cmd.ExecuteScalar();
}
public int getScalar(string sql, params SqlParameter[] values)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddRange(values);
return (int)cmd.ExecuteScalar();
}
public SqlDataReader getReader(string sql)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
SqlDataReader reader = cmd.ExecuteReader();
return reader;
}
public SqlDataReader getReader(string sql, params SqlParameter[] values)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddRange(values);
return cmd.ExecuteReader();
}
public SqlDataAdapter getAdapter(string sql)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
return adapter;
}
public SqlDataAdapter getAdapter(string sql, params SqlParameter[] values)
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = sql;
cmd.Parameters.Clear();
cmd.Parameters.AddRange(values);
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
return adapter;
}
}
客户端
Zhuye.xaml
Window1.xaml.cs private void upimage_Click(object sender, RoutedEventArgs e) { OpenFileDialog dlg = new OpenFileDialog(); dlg.Filter = "Images|*.jpg;*.png"; if ((bool)dlg.ShowDialog()) { try { string fn = dlg.FileName; int p = fn.LastIndexOf("\"); if (p >= 0) fn = fn.Substring(p + 1); FileStream fs = new FileStream(dlg.FileName, FileMode.Open); byte[] data = new byte[fs.Length]; fs.Read(data, 0, data.Length); fs.Close(); Uri uri = new Uri(url + "?opt=uploadImage&uName=" + Xmlsd.encode(u.uName) + "&uPass=" + Xmlsd.encode(Xmlsd.encryptString(u.uPass)) + "&iFile=" + Xmlsd.encode(fn), UriKind.Absolute); client.UploadDataAsync(uri, "POST", data); } catch (Exception exp) { showMsg(exp.Message); showMsg("上传失败"); } } Window2.xaml Quanxian.xaml.cs private void Button_Click(object sender, RoutedEventArgs e) { SqlConnection con = new SqlConnection(MyConStr); con.Open(); MessageBox.Show("连接成功"); string name = uname.Text; string p1 = quan.Text; string sql = "insert into popem values ("+"'"+name+"'"+","+"'"+p1+"'"+");"; SqlCommand cmd = new SqlCommand(sql, con); int result = cmd.ExecuteNonQuery(); if (result > 0) MessageBox.Show("添加成功"); } MainWindow.xaml 0) MessageBox.Show("注册成功"); addaBok.xaml



