基于C#Winform+MySQL的商务娱乐会馆自助服务系统

2 篇文章 0 订阅

写在前面:纪念一下大三最后一次期末设计。使用C#语言和MySQL数据库实现一个会员管理系统。题目的要求非常细致又模糊,规定了要大概实现会员等级和积分余额等细节,却又没有任何题材上的框架,并且时间要求非常紧张,不到7天。所以这次做的有点简单粗暴,连背景图片都没弄,本来可以更金玉其外一点。

前排提示:效果图在下面,多图

完整的代码链接在此:

基于C#Winform+MySQL的商务娱乐会馆自助服务系统.zip

 

目录

1.题目

2.总体设计

2.1 功能介绍

2.2 系统结构图

3.数据库设计

3.1 数据库概念结构

3.2 数据库物理结构

4.详细设计

4.1 开发环境

4.2 设计思路

4.3 功能实现

4.3.1 C#与MySQL数据库的连接

4.3.2 用户登录

4.3.3 个人信息的修改

4.3.4 账户充值

4.3.5 购买服务

4.3.6 订单查看&会员流水

4.3.7 管理员端

4.3.8 管理员对会员信息管理

4.3.9 点卡管理

4.3.10 服务管理

4.3.11 云服务器版本


 

1.题目

基于C#Winform+MySQL的商务娱乐会馆自助服务系统

 

2.总体设计

 

2.1 功能介绍

商务娱乐会馆会员自助服务系统分为两个部分,会员端和管理员端,管理员的账号是唯一不变的(放在数据库一个独立的表中)。

会员端主要功能:

  1. 用户个人信息修改;
  2. 账户余额充值;
  3. 购买服务;
  4. 订单查询和退款;
  5. 会员流水查询。

管理员端主要功能:

  1. 查看所有用户的信息,可以修改用户密码和等级等信息,也可以修改某个用户的登录权限(封禁);
  2. 管理会馆内的服务列表,进行添加或者修改删除;
  3. 生成充值随机面额的点卡,以供会员使用。

 

 

2.2 系统结构图

客户端

 

管理端

 

 

3.数据库设计

 

3.1 数据库概念结构

念结构设计是指将需求分析得到的用户需求抽象为信息结构。描述概念模型的有力工具是 E-R 模型。E-R 模型是对现实世界的一种抽象。它的主要成分是实体、联系和屈性。使用这三种成分,我们可以建立许多应用环境的ER模型。本系统的实体和属性的定义如下:

会员表:数据项为手机号,密码,性别,余额,积分,等级,地址,个性签名,注册日期,封印标记。

管理员表:数据项为用户名,密码

服务表:数据项为服务名,服务介绍,价格,积分,所需等级。

订单表:数据项为订单号,订单用户手机号,订单名,订单时间。

流水表:数据项为流水号,流水时间,流水用户手机号,消费种类,数额、

点卡表:数据项为卡号,密钥,是否可用,面额。

 

3.2 数据库物理结构

表3-1 会员表

 

名称

类型

可为空

注释

Id

Int

 

自增长

Tel

Varchar

 

手机号,唯一

password

Varchar

 

密码

Credits

Int

 

积分

Balance

Float

 

余额

Registertime

Datetime

 

注册时间

Level

Int

 

等级

Address

Varchar

Yes

地址

Intro

Varchar

Yes

自我介绍

 

表3-2 管理员表

 

名称

类型

可为空

注释

Username

Varchar

 

管理员,唯一

password

Varchar

 

密码

 

表3-3 服务表

 

名称

类型

可为空

注释

Id

Int

 

自增长

Name

Varchar

 

服务名

Credit

Int

 

积分

Balance

Float

 

余额

Level

Int

 

等级

Intro

Varchar

Yes

服务介绍

 

表3-4 订单表

 

名称

类型

可为空

注释

Id

Int

 

自增长

Tel

Varchar

 

手机号

Time

Datetime

 

订单时间

Name

Varchar

 

订单名

 

表3-5 流水表

 

名称

类型

可为空

注释

Id

Int

 

自增长

Tel

Varchar

 

手机号

Time

Datetime

 

订单时间

Kind

Varchar

 

消费种类

Num

float

 

数额

 

表3-6 点卡表

 

名称

类型

可为空

注释

Kahao

Varchar

 

卡号

Secret

Varchar

 

密钥

used

Int

 

一次性

denomination

Int

 

面额

4.详细设计

 

4.1 开发环境

编程语言:C#

操作系统:Windows 10

编译器:visual studio 2017 community

数据库:MySQL(wampserver里的那个,因为个人电脑问题比较多就用的wampserver)

数据库可视化工具:Navicat(主要是用于建表和数据维护),PHP My Admin(Navicat的导出有问题,某些格式是错的,还是PHPmyadmin导出比较强,而且直接把整个数据库导出来了。)

 

4.2 设计思路

主要是在winform窗体实现界面的绘制,用cs代码完成对数据库的访问。

 

4.3 功能实现

 

4.3.1 C#与MySQL数据库的连接

原理就是定义一个字符串,包含连接MySQL数据库的必要信息:ip,root用户名,密码(有的可能是空的),你要连接的数据库。

数据库字符串实例:

        public static string LocalhostMySQLdbstr = "server=127.0.0.1;port=3306;user=你的用户名;password=你的密码; database=数据库名;";

4.3.2 用户登录

登录的本质是通过你在窗口输入的用户名,密码与MySQL数据库中对应表进行比较,如果都一致那么返回登录成功并跳转到下一个窗口,失败的话会给出提示。

使用MySQLConnection建立一个C#到MySQL的连接,然后将默认参数设置为你的数据库字符串。打开连接(务必使用try/catch包围,否则你报错是无法查看错误信息的,极其不利于发现问题所在,很多时候对数据库操作都会有纰漏或者sql语句错误),新建一个MySQL命令,命令内容就是sql语句,然后用datareader获取到sql语句的查询结果,在C#中用string或者你需要的类型保存,再与winform文本框你输入的信息比对,相同就是成功了。

因为时间紧张,密码就直接比对了。如果充裕的话应该研究个MD5加密。MD5看起来还是很高大上的。。

登录的完整代码:

 private void LoginBtn_Click(object sender, EventArgs e)
        {
            if (telbox.Text == "" || pwdbox.Text == "")
            {
                MessageBox.Show("用户名或密码不能为空!", "提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Error);
            }
            else
            {
                username = telbox.Text.ToString().Trim();
                password = pwdbox.Text.ToString().Trim();
                MySqlConnection loginconn = new MySqlConnection(connetStr);
                try
                {
                    loginconn.Open();
                    MySqlCommand loginCommand = loginconn.CreateCommand();
                    loginCommand.CommandText = "select tel,password,ban from member where tel = '" + username + "'";
                    MySqlDataReader loginReader = loginCommand.ExecuteReader();
                    while (loginReader.Read())
                    {
                        tel = loginReader["tel"].ToString();
                        pwd = loginReader["password"].ToString();
                        banid = loginReader["ban"].ToInt32();

                    }

                    if (banid == 1)
                    {
                        MessageBox.Show("账号已被封禁,请联系管理员解封! ", "账号已被封停");
                        loginconn.Close();
                    }
                    else
                    {
                        if (tel.Equals(username) && pwd.Equals(password) && banid == 0)
                        {
                            MessageBox.Show("欢迎登录会员管理系统! ", "SUCCESS");
                            Hide();
                            MemberClient memberClient = new MemberClient();
                            memberClient.Show();

                        }
                        else
                        {
                            MessageBox.Show("您的用户名或密码不正确! ", "ERROR");
                            pwdbox.Text = "";
                        }
                    }
                    
                }
                catch (Exception exception)
                {
                    MessageBox.Show(exception.ToString(), "异常提示");
                    loginconn.Close();
                    //MessageBox.Show("数据库连接异常!","异常提示");
                }
                
                
            }
        }

登陆后进入会员端

4.3.3 个人信息的修改

点击上方的个人信息即可,这里为了更好的还原真实场景,使用了验证码功能,验证码的原理就是用画笔和random字符串组合而成,底层用一个string获取这个picturebox的字符串值,在点击提交的时候进行比对就好了。

if (inputcode.Equals(codestr))
{
                
}
else
{
                MessageBox.Show("验证码输入不正确!","错误提示");
                VerifyCodeTextBox1.Text = "";
               
                ValidCode validCode = new ValidCode(4, ValidCode.CodeType.Numbers);
                this.VerifyCodePic.Image = Bitmap.FromStream(validCode.CreateCheckCodeImage());
                codestr = validCode.resstr;
}

4.3.4 账户充值

比较初级的思想就是建个窗口然后一输入就添加了余额,为了提高难度和仿真度,我在这里模仿了点卡系统。在数据库有点卡表,输入卡号和密钥就可以获得那个卡号对应的面额的余额,还会得到等同的积分。并且这个点卡是一次性的,用完就不能再用了。

充值:

充值失败:

成功:

余额更新:

4.3.5 购买服务

会馆中有很多服务(或商品),只要你等级足够,并且钱够,就可以购买。也就是三个条件都要满足,根据题目要求,等级由积分决定(非余额)。我设定了账户的等级只会越来越高不会降低,有自己的一个等级制,如果算出等级和当前等级不符取最高(保证不会掉级)。

服务:

如果你买了不能买的:

购买成功:

4.3.6 订单查看&会员流水

在此,每个会员都能看到自己的历史订单信息,并且可以退单。退单后花费的积分和余额会返还。

效果图:

4.3.7 管理员端

管理员端需要点击管理员登录,管理员账号唯一,且需要验证码。

登录后:

4.3.8 管理员对会员信息管理

在这里,管理员可以看到所有用户的信息(并不是完全的,这里显示的是比较直观的),可以对任意用户信息进行修改,最重要的是修改ban属性,如果ban属性为1,这个账户在会员端无法登录。

这里涉及一个问题,在一个新的窗口编辑会员信息,需要获取刚才那个窗口的表格的那一列,也就是右键的时候选中的那一列的数据。而默认的窗体是动态的无法获得这个数据,这里的解决办法参考我之前的博文:

C#.net 子窗口获取父窗口的数据(datagridview)

4.3.9 点卡管理

作为管理员可以管理充值点卡,你也可以看到所有卡的卡号和密钥。卡号是一个9位数,密码则是大小写和数字随机的6位字符串(其实多长都可以),只要点击生成就会生成一个新的随机面额的点卡,好像十来年前充值卡和一些网管系统就是这么充值的。

点卡的生成代码:

public class RandomStr
    {

        public static char[] constant =
        {
            '0','1','2','3','4','5','6','7','8','9',
            'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z',
            'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'
        };

        public static int[] generatenum = {10, 10, 10, 10, 10, 10, 20, 20, 20, 20, 50, 50, 50, 100, 100, 200, 500};
        public static string GenerateRandom(int Length)
        {
            StringBuilder newRandom = new StringBuilder(62);
            Random rd = new Random();
            for (int i = 0; i < Length; i++)
            {

                System.Threading.Thread.Sleep(10);
                newRandom.Append(constant[rd.Next(62)]);
            }
            return newRandom.ToString();
        }
        //生成随机密钥
        public static string RandomSecret()
        {
            string secstr = GenerateRandom(6);
            return secstr;
        }

        //生成随机卡号
        public static string RandomCardNumber()
        {
            Random rand = new Random();
            int randnum = rand.Next(100000000, 999999999);
            string numberstr = randnum.ToString();
            return numberstr;

        }

        //生成随机面额
        public static int RandomDenomination()
        {
            Random rand = new Random();
            int randnum = rand.Next(generatenum.Length);
            int miane = generatenum[randnum];
            return miane;
        }
    }

4.3.10 服务管理

管理员可以管理会馆的所有服务,进行编辑,添加,或者删除。在这里你可以设置你认为那个服务需要的金额或者等级。

服务信息的加载代码:

private void ServiceMenuForAdmin_Load(object sender, EventArgs e)
        {
            serviceInitConnection = new MySqlConnection(connetStr);
            try
            {
                serviceInitConnection.Open();
                MySqlCommand serviceCommand = serviceInitConnection.CreateCommand();
                serviceCommand.CommandText = "select * from service";
                DataSet dataSet = new DataSet();
                MySqlDataAdapter dataAdapter = new MySqlDataAdapter();
                dataAdapter.SelectCommand = serviceCommand;
                dataAdapter.Fill(dataSet);
                this.skinDataGridView1.DataSource = dataSet.Tables[0].DefaultView;
                serviceInitConnection.Close();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "异常提示!");
            }
        }

4.3.11 云服务器版本

MySQL数据库虽然小巧轻便,但也不排除谁的电脑有什么奇特的问题,就安装不上这个数据库,那样这个程序无疑失去了意义。正好我半年前买了一个学生版云服务器,我将数据库结构复制到了那里,这样即便本机没有MySQL,没有我的表结构,也依然可以访问。(不过有可能这个博文成为历史的时候,这服务器IP过期了)

功能还是一样的:

这里可以看到数据和刚才的有差异,因为数据库不在一个地方,内容也被修改了。

完整的代码链接在此:

基于C#Winform+MySQL的商务娱乐会馆自助服务系统.zip

谨以此为记,路还很长,接下来的半年可能就要专注其他课程的学习了,不过C#的强大便利性值得我这种初学者将来深入学习研究。

以上

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值