写在前面
这是大三数据库课程设计的成果。老师给的成绩是中。说实话,做的是不好,数据库设计的太简单了,而且还存在缺陷,只是简单地增删改查,稍微高级一点的SQL语句根本就不会写,现在看起来好LOW啊。但我还是决定把它发出来,记录我的编程之路。
距今差不多一年时间了,有些东西不怎么记得了。先放上截图和代码,以后补充。
课程设计题目要求
商业篇之药品进销存管理系统
涉及:员工信息、药品信息(分类)、生产厂家、药品库存、药品进货、药品零售、药品批发、客户信息等相关实体
运行截图
首先是登陆界面:
登陆成功后弹出药品过期提醒窗口:
主界面:
药品销售:
药品管理:
顾客管理:
进销存统计:
部分代码
先放上SQLHelper类的代码,主要是封装一些数据库操作,避免每次操作数据库时都要写连接字符串等一系列复杂的过程。
这部分是我跟着传智播客的视频自学ADO.Net数据库时一个字符一个字符敲下来的,C#也是跟着传智播客的视频学来的,还有Java、安卓.......在这里要感谢传智播客的老师们。
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
namespace 药品进销存管理系统
{
/// <summary>
/// 这个静态类封装了4种数据库的相关操作方式
/// 包括一般的查询、修改、多行多列查询、内存数据表等
/// </summary>
public static class SQLHelper
{
//从配置文件读取连接字符串
private static readonly string conStr = ConfigurationManager.
ConnectionStrings["药品进销存管理系统.Properties.Settings.YPGLConnectionString"].ConnectionString;
/// <summary>
/// 执行修改数据库的命令
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>受影响的行数</returns>
public static int ExecuteNonQuery(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{ //如果参数不为空,把参数添加至SQL命令
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
try
{
Console.WriteLine(cmd.CommandText);
return cmd.ExecuteNonQuery();
}
catch (Exception)
{
throw;
}
}
}
}
/// <summary>
/// 执行数据库查询的命令
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>查询结果的第一行第一列</returns>
public static object ExecuteScalar(string sql, params SqlParameter[] pms)
{
using (SqlConnection con = new SqlConnection(conStr))
{
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
con.Open();
try
{
return cmd.ExecuteScalar();
}
catch (Exception)
{
throw;
}
}
}
}
/// <summary>
/// 多行多列查询
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>只进只读的reader对象</returns>
public static SqlDataReader ExecuteReader(string sql, params SqlParameter[] pms)
{
SqlConnection con = new SqlConnection(conStr);
using (SqlCommand cmd = new SqlCommand(sql, con))
{
if (pms != null)
{
cmd.Parameters.AddRange(pms);
}
try
{
con.Open();
/*
* SQLdatareader在读取的时候要保持连接是打开的,而如果return的话连接就会关闭
* reader就读不到数据
* 传入这个枚举参数,表示在使用完SQLdatareader后
* 在关闭reader的同时,在SQLdatareader内部会将关联的connection对象也关闭掉
*/
return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
catch (Exception)
{//如果发生异常,把连接关闭并释放
con.Close();
con.Dispose();
throw;
}
}
}
/// <summary>
/// 将数据库文件中的数据读取到一个内存数据表中
/// </summary>
/// <param name="sql">SQL语句</param>
/// <param name="pms">SQL参数</param>
/// <returns>内存数据表对象</returns>
public static DataTable ExecuteTable(string sql, params SqlParameter[] pms)
{
DataTable dt = new DataTable();
try
{
using (SqlDataAdapter adapter = new SqlDataAdapter(sql, conStr))
{
if (pms != null)
{
adapter.SelectCommand.Parameters.AddRange(pms);
}
adapter.Fill(dt);
}
return dt;
}
catch (Exception)
{
throw;
}
}
}
}
其他代码就不贴了,需要完整源码可以下载:
链接: 百度云 提取码: wv8i