制作了一个在线查询席位的小程序

11-6号制作了一个在线查询席位的小程序
声明:本人小白一个纯分享,写出来巩固思路,不足之处,大佬多指教,谢谢!
用的是webapi使用
大致的思路是先webapi写一个查询数据库的程序,
再sqlite导入提前准备的表格,与程序进行交互无问题后,
进行网页编写(注意移动端界面部署),把做好的界面放到webapi下,确保本地无误(无跨域问题)
然后再云服务上面打相关的环境和打开对应接口,用的windowserver服务,打开iss挂载应用
然后把链接生成二维码,给宾客扫描查询座位。

一. web api代码解析
图文分享如下:
1.首先在Controllers文件夹下面写一个查询数据库的操作
用的get命令去获取

 [ApiController]
    [Route("Seat")]
    public class SeatController : Controller {
        [HttpGet("{name}")]
        public ActionResult<string> Read(string name) {
            var sqlString = SqliteGo(name);
            if (sqlString.Contains(",")) {
                return Ok(sqlString);
            } 
            else {
                return BadRequest(sqlString);
            }
        }

(1)注意 [Route(“Seat”)] 路由名称为Seat,会导致调用此方法后面加/Seat
(2) [HttpGet("{name}")] 这个为路由get获取,程序会读name这个值
(3)SqliteGo为定义方法下面会详细介绍,此处为返回一个json的值 name和Seat
此处小结:当程序获取到name的时候会去调用SqliteGo的函数,去数据库查询并返回一个json,判断是否符合,符合返回 200 ok的json,不符合返回 400 bad的字符串。

2.SqliteGo的函数
private string SqliteGo(string name) {
            string dbPath = AppContext.BaseDirectory + "11-6Seat.db";
            CSQLiteHelper cSQLiteHelper = new CSQLiteHelper(dbPath);
            string sqlString=cSQLiteHelper.SelectStars(name)[0];
            if (sqlString.Contains(",")) {
                var _sqlString = string.Format("{{\"seat\":\"{0}\",\"name\":\"{1}\"}}", sqlString.Split(',')[0], sqlString.Split(',')[1]);
                sqlString = _sqlString;
            }
            return sqlString;
        }
    }

(1)CSQLiteHelper此处为自定义类,后面会详细介绍
(2)if这边进行判断,进行json打包 ps:此处json手动生成"{{“seat”:"{0}",“name”:"{1}"}}"

3.CSQLiteHelper
 class CSQLiteHelper {
        private string _dbName = "";
        private string _SQLiteConnString = null; //连接字符串

        public CSQLiteHelper(string dbPath) {
            this._dbName = dbPath;
            this._SQLiteConnString = "Data Source=" + dbPath;
        }//获取db文件的路径
        public string[] SelectStars(string name) {
            var cmd = new SQLiteCommand();//获取命令的函数
            SQLiteConnection sqliteConn = new SQLiteConnection(_SQLiteConnString);//连接数据库
            var strs = new List<string>();//实际案例用不到数组哈
            try {
                sqliteConn.Open();//打开数据库
                string commandStr = string.Format("SELECT * FROM 'Seat' WHERE name IN('{0}')", name);//选择Seat这个表单,再用字符串格式填入name值
                cmd.CommandText = commandStr;
                cmd.Connection = sqliteConn;
                var reader = cmd.ExecuteReader();//读出符合条件的字符串
                if (reader.Read()) {
                        string str = null;//循环中字符串清null
                        if (reader.HasRows) {
                            for (int i = 0; i < reader.FieldCount; i++) {
                                str += (reader[i].ToString()) + ',';//把数字变成字符串|进行区分
                            }

                        }
                        strs.Add(str);
                    }
                else {
                    strs.Add("未查到数据!请检查姓名或者去签到台确认!");
                }
                return strs.ToArray();此处不用数组也行,查询的指向的是单值
            }
            catch (Exception ex) {
                throw new Exception(ex.Message);
            }
            finally {
                cmd.Dispose();// 释放command
                sqliteConn.Close();//结合命令关闭才能关闭数据库
                sqliteConn.Dispose();//先关闭数据连接,再释放
            }
        }
    }

(1)此处注意数据库 我写的格式是
在这里插入图片描述
(2)建议先在库里调式了命令,再把相关命令写入command里
(3)此处调用了sqlite,在nuget里
在这里插入图片描述

总结以上就是.net web APi后台程序所使用的,程序启用如下
注意前端html 放到 wwwroot文件下面,到时候iss挂载,直接ip:端口/index.html 就可以访问
app.UseFileServer();加入Startup.cs下面
在这里插入图片描述

二.前端网页编写

html,css,js篇
本人小白,此处不多介绍了,注意移动端app的使用界面即可
用的过时的jquery写的,感兴趣的可去下面链接的github获取

三.云服务器环境搭建

用的是华为云1个月的试用版,马上到期了。。下面简单介绍一下云使用
注意左上角区域,我这选择的是上海一,选错了,弹性公网ip都没
在这里插入图片描述
这里需要配置的是-访问控制-安全组-选择网卡对应的安全组-配置规则,进行对应端口映射,我添加的规则如下:
在这里插入图片描述
打开弹性网卡-更多-更改安全组
在这里插入图片描述
在这里插入图片描述
以上就是云服务,我做的操作。
然后通过弹性网卡ip,测试映射端口是否都通。

四.云服务器的环境搭建(window-server)

1.搭建iss 没啥好记录的,百度上都有。报错啥问题百度都能解决
https://blog.csdn.net/weixin_41692437/article/details/79991083
物理路径使用如下:
在这里插入图片描述
2. 几个.netCore环境包要装好
.https://dotnet.microsoft.com/download/dotnet/5.0
3.注意window防火墙和文件权限问题

五.二维码生成

把http链接填入 以下网站生成
https://www.wwei.cn

六 github 分享

https://github.com/HaoXuLC/SeatSearch

席位分配问题(Seat Allocation Problem)是一种经典的组合优化问题,可以用整数线性规划(Integer Linear Programming, ILP)模型进行求解。Matlab有很多优秀的优化工具箱可以用来求解整数线性规划问题,比如Optimization Toolbox、Integer Programming Toolbox等。以下是一个简单的示例程序,使用Optimization Toolbox解决席位分配问题。 假设有4个人(A、B、C、D)和3个席位(1、2、3),每个人对每个席位都有一个偏好值。例如,A对1的偏好值为4,对2的偏好值为3,对3的偏好值为2。假设席位分配的目标是最大化每个人的总偏好值,即最大化A、B、C、D分别被分配的席位的偏好值之和。 首先,我们需要定义偏好值矩阵,如下所示: ``` preference = [4 3 2; 3 4 2; 1 2 3; 2 1 3]; ``` 然后,我们可以使用Matlab的整数线性规划工具箱来解决这个问题。以下是一个简单的程序: ``` f = -1 * reshape(preference', 1, []); % 目标函数 Aeq = kron(eye(4), ones(1,3)); % 每个人必须分配一个座位 beq = ones(4, 1); lb = zeros(1, 12); % 座位分配必须是整数 ub = ones(1, 12); x = intlinprog(f, 1:12, [], [], Aeq, beq, lb, ub); % 使用整数线性规划求解 allocation = reshape(x, 3, 4)'; % 转换为座位分配矩阵 ``` 运行程序后,我们可以得到以下结果: ``` allocation = 1 0 0 0 1 0 0 0 1 0 0 0 ``` 这个结果意味着A被分配到座位1,B被分配到座位2,C被分配到座位3,D没有被分配到座位。每个人的总偏好值为4+4+3+0=11,是最大化的结果。 需要注意的是,上述程序只是一个简单的示例,实际问题可能更加复杂。在解决实际问题时,需要根据具体情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值