1、 兰州商学院陇桥学院 信息工程系课程设计报告 课 程 名 称: C#课程设计 设 计 题 目:超市会员管理系统 系 别:信息工程系 专 业 (方 向):计算机科学与技术(网络工程方向) 年 级、 班:2012级本科班 学 生 姓 名:XXX 学 生 学 号:XX
2、XXXXXX 本 组 组 员:XXXXXXXXXXXXXXXX 指 导 教 师:杨 光 2014 年 12 月 26日 目录 一、系统开发的背景 1 二、系统分析与设计 1 (一) 系统功能要求 1 (二) 系统模块结构设计 1 三、系统的设计与实现 2 (一) 登陆 2 (二) 会员信息 5 (三) 会员管理 8 (1) 会员管理 9 (2)购物信息管理 17 (四) 信息统计 18 (五) 系统管理 21 四、系统测试
3、23 (一) 测试登陆模块 23 (二) 会员信息模块 23 (三) 会员管理模块 24 (四) 信息统计模块 25 (五) 系统管理模块 27 五、总结 27 六、附件(代码、部分图表) 28 1、源代码 28 2、图表 47 超市会员管理系统 一、系统开发的背景 社会生活的现代化,使得市场的走向发生巨大变化,由于经济的发展,许多大型的现代化超市应运而生。现在超市吸引顾客最普遍的做法就是实行会员制,超市的会员可以享受不同程度的优惠,从而达到吸引顾客,刺激消费的目的。建立实用的超市会员管理系统对超市的会员管理有很大的帮助,可以协助工作人员进行会员
4、的信息登记、更新。因此,为了优化超市会员制度的计算机管理,编写了此系统。 二、系统分析与设计 (一) 系统功能要求 超市会员管理系统应具备以下功能: 1、加入会员的基本信息,包括:成为会员的基本条件、优惠政策、优惠时间等。 2、会员的基本信息,包括姓名、性别、年龄、工作单位、联系方式等。 3、会员购物信息:购买物品编号、物品名称、所属种类,数量,价格等。 4、会员返利信息,包括会员积分的情况,享受优惠的等级等。 5、对货物流量及消费人群进行统计输出。 (二) 系统模块结构设计 通过对系统功能的分析,学生综合测评系统功能如图1所示。 图1 超市会员管理系统功能图 通过
5、上图的功能分析,把整个系统划分为4个模块: 1、会员信息,该模块主要实现:会员基本信息(会员编号、会员卡号、姓名、性别、年龄、会员等级、当前积分、联系方式)的输出; 2、会员管理,该模块主要实现:会员管理(会员的查询、删除、修改和添加)信息,购物信息管理(通过输入会员编号来查询会员的购物信息); 3、信息统计,该模块主要实现:物品流量统计(通过柱状图来显示物品的消费情况),消费人群统计(通过柱状图来统计人群的消费情况); 4、系统管理,该模块主要实现:对用户名和密码的修改,能够更好的管理超市会员管理系统。 三、系统的设计与实现 (一) 登陆 流程图如下图所示: 图2登陆界面
6、流程图 该模块的具体代码如下所示。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Linq; using System.Windows.Forms; using DevExpress.XtraEditors; namespace 超市会员管理系统 { public partial class LoginForm
7、 : DevExpress.XtraEditors.XtraForm { public LoginForm() { InitializeComponent(); } bool formMove = false; Point formPoint; #region 登陆按钮实现用户名、密码的验证 private void btnOK_Click(object sender, EventArgs e) {
8、 if (Login.Login.isEnable(txtUserName.Text.Trim(), txtPassword.Text.Trim())) { MainForm form = new MainForm(); form.Visible = true; this.Visible = false; } else { lblShow.Text
9、 "输入有误请重新输入! txtUserName.Clear(); txtPassword.Clear(); txtUserName.Focus(); } } #endregion #region 退出程序 private void pictureBox2_Click(object sender, EventArgs e) { Application.
10、Exit(); } #endregion #region 登录界面的移动 private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (formMove == true) { Point mousePos = Control.MousePosition; mousePos.Offset(formPoin
11、t.X, formPoint.Y); Location = mousePos; } } private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { formPoint = new Point(); int xOffset; int yOffset; if (e.Button == MouseButto
12、ns.Left) { xOffset = -e.X - SystemInformation.FrameBorderSize.Width; yOffset = -e.Y - SystemInformation.CaptionHeight - SystemInformation.FrameBorderSize.Height; formPoint = new Point(xOffset, yOffset); formMove = true;
13、 } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { formMove = false; } } #endregion #region登陆界面加载,连接数据库 priva
14、te void LoginForm_Load(object sender, EventArgs e) { Login.Login.linkDataBase(); } #endregion } } (二) 会员信息 该模块的流程图如下图所示: 图3会员信息流程图 该模块的具体代码如下所示。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; us
15、ing System.Drawing; using System.Text; using System.Linq; using System.Windows.Forms; using DevExpress.XtraEditors; using DBHelper; using System.Data.SqlClient; namespace 超市会员管理系统 public partial class MemberMessageForm : DevExpress.XtraEditors.XtraForm { public MemberMessag
16、eForm() { InitializeComponent(); } #region 全局变量 DataSet dataSet = MainForm.dataSet; DBhelper dbHelper = MainForm.dbhelper; String dataDir; String strMemberCardNo; #endregion #region 按会员卡卡号查询信息 priv
17、ate void simpleButton1_Click(object sender, EventArgs e) { #region 获取当前项的根目录路径 dataDir = dbHelper.getCurrentDataPath(); #endregion strMemberCardNo = txtMessg.Text.Trim(); if (string.IsNullOrEmpty(strMemberCardNo))
18、 { MessageBox.Show("请输入会员卡号", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } try { #region 定向临时数据库中的表主键 DataTable dt = dbHelper.getDataTable("MemberMssg", "会员卡编号");
19、 #endregion #region指向临时数据库中的指定的值得行 DataRow dr = dbHelper.getDataRow(dt, strMemberCardNo); #endregion #region 将临时数据库中的表的值返回到界面中 updataForm(dr); #endregion } catch (Exce
20、ption ex) { MessageBox.Show(ex.StackTrace); } } #endregion #region更新界面面板信息 private void updataForm(DataRow dr) { #region 更新基本信息界面 if (dr == null) { MessageB
21、ox.Show("无该项数据记录", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } txtMemberAge.Text = dr["年龄"].ToString(); txtMemberCard.Text = dr["会员卡编号.ToString(); txtMemberGrade.Text = dr["会员等级.ToString(); txtMemberNa
22、me.Text = dr["姓名"].ToString(); txtMemberNo.Text = dr["会员编号.ToString(); txtMemberSex.Text = dr["性别"].ToString(); txtMemberPhone.Text = dr["联系方式"].ToString(); txtUnit.Text = dr["工作单位"].ToString(); txtCurrentIntegral.Text = dr["现有积分.ToStr
23、ing(); txtEndDate.Text = dr["终止日期.ToString(); try { memberPirecture.Image = Image.FromFile(dataDir+string.Format(@"\picture\{0}.jpg", dr["头像.ToString())); } catch (Exception ex) { memberPi
24、recture.Image = Image.FromFile((dataDir+string.Format(@"\picture\default.png"))); } #endregion #region 更新消费界面板 dataSet.Tables["GoodsMssg"].DefaultView.RowFilter = String.Format("会员卡编号='{0}'", strMemberCardNo); dataGridView1.DataSource
25、 = dataSet.Tables["GoodsMssg"].DefaultView; dataGridView1.AutoSize = true; dataGridView1.Visible = true; #endregion } #endregion } } (三) 会员管理 该模块的流程图如下图所示: 图4会员管理流程图 (1) 会员管理 该模块的具体代码如下所示。 namespace 超市会员管理系统 { public par
26、tial class MemberManageForm : DevExpress.XtraEditors.XtraForm { public MemberManageForm() { InitializeComponent(); } #region全局变量 DataSet dataSet = MainForm.dataSet; DBhelper dbHelper = MainForm.dbhelper; SqlDataAdapter
27、sda = null; DataRow dr; DataRow[] drs; String dataDir; Boolean isDataBindings = false; Boolean changeState = false; Boolean deleteState = false; Boolean addState = false; #endregion #region 显示指定信息到预览界面 private
28、void btnOK_Click(object sender, EventArgs e) { sda = dbHelper.getDataAdapter(); String txtMessg = null; String condition = null; #region 获取搜索条件值 try { txtMessg = txtMssg.Text.Trim();
29、 condition = comboBox1.SelectedItem.ToString().Trim(); if (string.IsNullOrEmpty(txtMessg) && string.IsNullOrEmpty(condition)) { throw new Exception(); } } catch (Exception ex) {
30、 MessageBox.Show("请输入信息", "", MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } dataDir = dbHelper.getCurrentDataPath(); #endregion #region 条件查询 Boolean flag = getDataRow(condition, txtMessg);
31、 #endregion #region 界面信息更新 if (flag == true) { updataForm(); } #endregion } #endregion #region 按钮单击操作 private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
32、 { txtMssg.EditValue = " "; } private void btnAdd_Click(object sender, EventArgs e) { if (btnAdd.Text == "确定") { btnChange(); if (addState == true) { #region 向D
33、ataSet中D的Ì?DataTable追加一行记录 DataRow newDataRow = dataSet.Tables["MemberMssg"].NewRow(); try { newDataRow["会员编号"] = txtMemberNo.Text.ToString(); newDataRow["姓名"] = txtMemberName.Text.ToStri
34、ng(); newDataRow["年龄"] = Convert.ToInt32(txtMemberAge.Text); newDataRow["性别"] = txtMemberSex.Text.ToString(); newDataRow["联系方式"] = txtMemberPhone.Text.ToString(); newDataRow["工作单位"] = txtUnit.Text.ToS
35、tring(); newDataRow["起始日期"] = DateTime.Now; newDataRow["终止日期"] = dateTimePicker1.Text; newDataRow["积分类型"] = " "; newDataRow["现有积分 = Convert.ToInt32(txtCurrentIntegral.Text); n
36、ewDataRow["会员卡编号"] = txtMemberCard.Text.ToString(); newDataRow["会员等级"] = txtMemberGrade.Text.ToString(); dataSet.Tables["MemberMssg"].Rows.Add(newDataRow); } catch (Exception ex) {
37、 MessageBox.Show("添加记录失败!\n"); return; } dataSet.AcceptChanges(); dbHelper.addDataBase(newDataRow); MessageBox.Show("添加纪录成功!"); #endregion
38、 } else if (changeState == true) { #region 对dataset中的表进行修改 dataSet.AcceptChanges(); MessageBox.Show(" 修改记录成功!"); #endregion } else if (deleteStat
39、e == true) { #region 删除ydataset中的表的指定记录 String deleteMemNo = txtMemberCard.Text.Trim(); try { DataColumn[] primaryKey = new DataColumn[] { dataSet.Tables["MemberMssg"].Column
40、s["会员卡编号"] }; dataSet.Tables["MemberMssg"].PrimaryKey = primaryKey dataSet.Tables["MemberMssg"].Rows.Remove(dataSet.Tables["MemberMssg"].Rows.Find(deleteMemNo)); } catch (Exception ex) {
41、 MessageBox.Show("数据记录删除失败,无该记录!"); return; } try { DataColumn[] primaryKey = new DataColumn[] { dataSet.Tables["GoodsMssg"].Columns["购物编号"] };
42、 dataSet.Tables["GoodsMssg"].PrimaryKey = primaryKey; for (int i = 0; i < dataSet.Tables["GoodsMssg"].Rows.Count; i++) { dataSet.Tables["GoodsMssg"].Rows.Remove(dataSet.Tables["GoodsMssg"].Rows.Find(deleteMemNo));
43、 } } catch (Exception ex) { ; } MessageBox.Show(" 删除记录成功!"); dbHelper.deleteDataBase(deleteMemNo); #endreg
44、ion } addState = false; changeState = false; deleteState = false; removeBindingData(); } else { btnChange(); addState = true;
45、 #region 清空groupbox中DtextBox中的值 foreach (Control conl in groupControl2.Controls) { if (conl is TextBox) { (conl as TextBox).Clear(); } } #region
46、 获取主键的最大值并加称为新添加的主键 DataRow[] drs = null; try // { drs = dataSet.
47、Tables["MemberMssg"].Select("1=1", dataSet.Tables["MemberMssg"].Columns["会员编号"].ColumnName + " DESC "); } catch (Exception ex) { MessageBox.Show(ex.StackTrace); } txtMemberNo.Text = (Convert.ToI
48、nt32(drs[0]["会员编号"]) + 1).ToString(); try { drs = dataSet.Tables["MemberMssg"].Select("1=1", dataSet.Tables["MemberMssg"].Columns["会员卡编号"].ColumnName + " DESC "
49、); } catch (Exception ex) { MessageBox.Show(ex.StackTrace); } txtMemberCard.Text = (Convert.ToInt32(drs[0]["会¨¢员¡À卡¡§编À¨¤号?"]) + 1).ToString(); #endregion forea
50、ch (Control conl in groupControl3.Controls) { if (conl is TextBox) { (conl as TextBox).Clear(); } } txtMemberNo.Enabled = true; txtMemberCard.En






