幽冥大陆(三十八)P50酒店门锁SDK C#仙盟插件——东方仙盟筑基期

东方仙盟代码风格

复制代码
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Windows.Forms;
using System.IO;
using System.Drawing;
using System.Data;
using System.Data.Common;
using System.Text.RegularExpressions;
// 修正命名空间为未来之窗东方仙盟
using 未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinWeb.WebData;
using System.Runtime.InteropServices;
using System.Threading;

// 酒店门锁
// qujing
namespace 未来之窗东方仙盟
{
    // 类名保持APP不变(核心功能类),如需修改可改为 未来之窗东方仙盟_APP
    class APP
    {
        byte[] carddata = new byte[128];

        private string 身份证照片保存路径 = "";

        // 启动方法(保持原有参数和返回值)
        public string start(NameValueCollection obj)
        {
            string 参数1 = "";
            NameValueCollection d = obj;
            参数1 = d["param1"];

            string s = "未来之窗东方仙盟-随机预安装插件";
            return s;
        }

        // 状态检测方法
        public string status(NameValueCollection obj)
        {
            蜂鸣器(50);// 蜂鸣器
            string s = "未来之窗东方仙盟-当你听到设备蜂鸣器,说明设备已经连接";
            return s;
        }

        // 退房注销卡片
        public string checkingout(NameValueCollection obj)
        {
            string s = "未来之窗东方仙盟-注销卡片";

            NameValueCollection d = obj;
            string param = d["param"];
            // 解析未来之窗东方仙盟协议
            未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage clApp = new 未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage();
            clApp.formatString(param);

            string 酒店标识 = clApp.get("hotelsign");

            int i, st;
            string datastr = "";
            byte[] cardbuf = new byte[128];
            int dlscoid;
            dlscoid = Convert.ToInt32(酒店标识);//textBox1.Text);
            //2023-7-29 采用0921 st = CardEraseA(dlscoid,cardbuf);
            st = 卡片注销(1, dlscoid, cardbuf);
            Thread.Sleep(400);//建议延时500毫秒,等待硬件响应
            if (st == 0)
            {
                蜂鸣器(50);
                for (i = 0; i < 38; i++)
                    datastr = datastr + ((char)carddata[i]).ToString();
                // textBox5.Text = datastr;
                //MessageBox.Show("注销卡片成功!");
                s = s + ":成功";
            }
            else
            {
                //MessageBox.Show("注销卡片失败,返回值:" + st.ToString());
                s = s + ":失败" + st.ToString();
            }

            return s;
        }

        // 酒店入住发卡
        public string checkingin(NameValueCollection obj)
        {
            string s = "未来之窗东方仙盟-酒店入住发卡";

            NameValueCollection d = obj;
            string param = d["param"];
            // 解析未来之窗东方仙盟协议
            未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage clApp = new 未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage();
            clApp.formatString(param);
            // string url=clApp.get("address")+clApp.get("action");
            string 锁号 = clApp.get("lockno");
            string 酒店标识 = clApp.get("hotelsign");
            string 卡号 = "0";
            string 屏蔽前卡标志 = "0";
            string 退房时间 = clApp.get("checkingouttime");//格式yyMMddHHmm y-m-dHi

            int i, st;
            int dlscoid;
            byte cardno;
            byte dai;
            byte llock;
            string datastr = "";
            string lockstr, EDatestr;
            byte[] cardbuf = new byte[128];

            char[] lockno = new char[6];
            char[] EDate = new char[10];

            lockstr = 锁号;//textBox3.Text;//锁号
            if (lockstr.Length != 6)
            {
                MessageBox.Show("未来之窗东方仙盟-锁号必须是6位数字组成" + lockstr + param);
                return "未来之窗东方仙盟-锁号必须是6位数字组成" + lockstr;
            }
            for (i = 0; i < 6; i++)
                lockno[i] = Convert.ToChar(lockstr.Substring(i, 1));
            EDatestr = 退房时间;//接口传入 dateTimePicker1.Value.ToString("yyMMdd") + dateTimePicker2.Value.ToString("HHmm");//有效时间
            for (i = 0; i < 10; i++)
                EDate[i] = Convert.ToChar(EDatestr.Substring(i, 1));

            dlscoid = Convert.ToInt32(酒店标识);//Convert.ToInt32(textBox1.Text);//酒店标识
            cardno = Convert.ToByte(卡号);//textBox2.Text);  //卡号 0..15循环
            dai = Convert.ToByte(屏蔽前卡标志);//textBox4.Text);   //屏蔽前卡标志 0..255递增循环
            // if (radioButton3.Checked) llock = 1;  //开反锁标志
            // else llock = 0;
            llock = 1; //开反锁标志

            byte pdoors = 0;//公共门标志
            string 开房时间 = DateTime.Now.ToString("yyMMddHHmm");//格式yyMMddHHmm y-m-dHi
            char[] BDate = new char[10];
            for (i = 0; i < 10; i++)
                BDate[i] = Convert.ToChar(开房时间.Substring(i, 1));

            //2023-7-29 新版 st = WriteGuestCardA( dlscoid, cardno, dai, llock, EDate, lockno, cardbuf);
            //锁号
            // st = GuestCard(1,dlscoid,cardno, dai, llock, pdoors,BDate,EDate,lockno, cardbuf);
            st = 宾客发卡(1, dlscoid, cardno, dai, llock, pdoors, BDate, EDate, 锁号 + "99", cardbuf);

            Thread.Sleep(400);//建议延时400毫秒,等待硬件响应
            if (st == 0)
            {
                蜂鸣器(50);
                for (i = 0; i < 32; i++)
                    datastr = datastr + ((char)carddata[i]).ToString();
                // textBox5.Text = datastr;
                s = s + "发宾客卡成功";

                MessageBox.Show("未来之窗东方仙盟-发宾客卡成功!");
            }
            else
            {
                s = s + "发宾客卡失败,返回值:" + st.ToString();
                MessageBox.Show("未来之窗东方仙盟-发宾客卡失败,返回值:" + st.ToString());
            }

            return s;
        }

        // 读取酒店标识
        public string getsign(NameValueCollection obj)
        {
            string s = "未来之窗东方仙盟-";
            int i, k;
            byte[] Dcoid = new byte[20];
            string coid = "";
            k = 获取酒店标识(Dcoid);
            if (k == 0)
            {
                for (i = 0; i < 6; i++)
                    coid = coid + ((char)Dcoid[i]).ToString();
                // textBox5.Text = coid;
                i = Convert.ToInt32(coid.Substring(0, 2), 16) * 65536 + Convert.ToInt32(coid.Substring(2, 4), 16) % 16383;
                // textBox1.Text = i.ToString();
                s += coid;

            }
            else
                s += "获得酒店标识失败,返回值:" + k.ToString();//MessageBox.Show("获得酒店标识失败,返回值:" + k.ToString());

            return s;
        }

        //2022-12-11 读取房卡信息
        public string readCardInfo(NameValueCollection obj)
        {
            string s = "未来之窗东方仙盟-读取房卡信息";

            NameValueCollection d = obj;
            string param = d["param"];
            // 解析未来之窗东方仙盟协议
            未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage clApp = new 未来之窗东方仙盟.WebFrame.CyberPHP.CyberWinProtocol.Cl_CyberWinAPPProtocolPackage();
            clApp.formatString(param);
            // string url=clApp.get("address")+clApp.get("action");
            string 锁号 = "";// clApp.get("lockno");
            string 酒店标识 = clApp.get("hotelsign");

            string 状态 = "4";
            string 信息 = "未知";

            //开始读取
            byte[] carddata = new byte[128];

            byte[] lockno = new byte[50];
            string str1 = "";
            string str2 = "";
            string str3 = "";
            string str4 = "";
            string str5 = "";
            string str6 = "";
            int guestCardinfoA = 获取宾客卡信息A(Convert.ToInt32(酒店标识), carddata, lockno);
            char ch;
            for (int index = 0; index < 40; ++index)
            {
                string str7 = str2;
                ch = (char)carddata[index];
                string str8 = ch.ToString();
                str2 = str7 + str8;
            }
            //注销 this.textBox5.Text = str2;
            switch (guestCardinfoA)
            {
                case -4:
                    {
                        int num1 = (int)MessageBox.Show("未来之窗东方仙盟-空白卡或者已经注销的卡片,返回值:" + guestCardinfoA.ToString());
                        状态 = "4";
                        信息 = "空白卡或者已经注销的卡片,返回值:" + guestCardinfoA.ToString();
                    }
                    break;
                case -3:
                    {
                        int num2 = (int)MessageBox.Show("未来之窗东方仙盟-非本酒店卡,酒店标识不匹配,返回值:" + guestCardinfoA.ToString());
                        状态 = "3";
                        信息 = "非本酒店卡,酒店标识不匹配,返回值:" + guestCardinfoA.ToString();
                    }
                    break;
                case -2:
                    {
                        int num3 = (int)MessageBox.Show("未来之窗东方仙盟-没有有效卡片,返回值:" + guestCardinfoA.ToString());
                        状态 = "3";
                        信息 = "没有有效卡片,返回值:" + guestCardinfoA.ToString();
                    }
                    break;
                case 0:
                    for (int index = 0; index < 6; ++index)
                    {
                        string str7 = str1;
                        ch = (char)lockno[index];
                        string str8 = ch.ToString();
                        str1 = str7 + str8;
                    }
                    for (int index = 6; index < 18; ++index)
                    {
                        string str7 = str3;
                        ch = (char)lockno[index];
                        string str8 = ch.ToString();
                        str3 = str7 + str8;
                    }
                    for (int index = 18; index < 30; ++index)
                    {
                        string str7 = str4;
                        ch = (char)lockno[index];
                        string str8 = ch.ToString();
                        str4 = str7 + str8;
                    }
                    for (int index = 32; index < 40; ++index)
                    {
                        string str7 = str6;
                        ch = (char)lockno[index];
                        string str8 = ch.ToString();
                        str6 = str7 + str8;
                    }
                    string str9 = str5;
                    ch = (char)lockno[30];
                    string str10 = ch.ToString();
                    string str11 = str9 + str10;
                    // int num4 = (int) MessageBox.Show("卡    号:" + str6 + "\n锁    号:" + str1 + "\n发卡时间:" + str3 + "\n到期时间:" + str4 + "\n是否开反锁:" + str11);
                    状态 = "9";
                    信息 = "读取成功";
                    break;
                case 1:
                    {
                        int num5 = (int)MessageBox.Show("未来之窗东方仙盟-连接发卡器失败,返回值:" + guestCardinfoA.ToString());
                        状态 = "1";
                        信息 = "连接发卡器失败,返回值:" + guestCardinfoA.ToString();
                    }
                    break;
                default:
                    {
                        int num6 = (int)MessageBox.Show("未来之窗东方仙盟-未知返回值:" + guestCardinfoA.ToString());
                        信息 = "未知返回值:" + guestCardinfoA.ToString();
                    }
                    break;
            }
            string 未来之窗东方仙盟未知 = "";

            string 未来之窗东方仙盟_锁号修正0729 = str1.Substring(0, 6); ;

            string 未来之窗东方仙盟结果 = "{";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"status\":\"" + 状态 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"hotelsign\":\"" + 酒店标识 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"message\":\"" + 信息 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"lockno\":\"" + str1 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"physical_no\":\"" + str6 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"checkingintime\":\"" + str3 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"checkingouttime\":\"" + str4 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "\"llock\":\"" + 未来之窗东方仙盟未知 + "\",";
            未来之窗东方仙盟结果 = 未来之窗东方仙盟结果 + "}";

            return 未来之窗东方仙盟结果;
        }

        // 日志记录(添加标识)
        public static void write_log(string capturetype, string type, string s)
        {
            string logPath = Application.StartupPath + "/未来之窗东方仙盟日志/" + capturetype + "/" + DateTime.Now.ToLongDateString() + "/";
            if (System.IO.Directory.Exists(logPath) == false)
            {
                System.IO.Directory.CreateDirectory(logPath);
            }
            string 文件路径 = logPath + type + "_log.log";

            FileStream fs = new FileStream(文件路径, FileMode.Append);
            StreamWriter sw = new StreamWriter(fs);
            //开始写入
            sw.WriteLine("==============================未来之窗东方仙盟日志==============================");
            sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "<<<<<<<<<<<<<<<<<<<<<<<<<<");
            sw.WriteLine(s);
            sw.WriteLine("");
            //清空缓冲区
            sw.Flush();
            //关闭流
            sw.Close();
            fs.Close();
        }

        //--------------------
        // 蜂鸣器(中文方法名)
   
}

酒店门锁 SDK 对接:开启东方仙盟 VOS 智能浏览器的酒店业务之门

在东方仙盟的奇妙世界里,VOS 智能浏览器宛如一把神奇的钥匙,连接着各个领域的奇妙景象。而酒店门锁 SDK 对接,恰似这把钥匙上的关键齿纹,能够精准开启酒店业务的大门,为仙盟中的访客和管理者带来便捷与高效。

酒店门锁 SDK 对接概述

酒店门锁 SDK(Software Development Kit,软件开发工具包)对接,是将酒店门锁系统与东方仙盟 VOS 智能浏览器进行整合的过程。通过这个对接,开发者能够利用 SDK 提供的接口和工具,实现浏览器与酒店门锁设备之间的通信与交互。就如同在仙盟中建立了一条神秘通道,让信息能够在不同的 "领地" 间顺畅传递。

酒店门锁 SDK 在东方仙盟 VOS 智能浏览器对接的应用场景

1. 在线预订与实时开锁

访客在东方仙盟 VOS 智能浏览器上完成酒店房间预订后,系统可通过对接的酒店门锁 SDK,实时生成开锁凭证,直接发送到访客的移动设备。访客到达酒店后,无需在前台排队等待,使用移动设备即可通过 VOS 智能浏览器控制门锁开锁,实现快速入住,仿佛在仙盟中拥有了一把能瞬间开启洞府之门的神奇钥匙。

2. 远程管理与监控

酒店管理者可通过 VOS 智能浏览器,借助酒店门锁 SDK 实现对所有房间门锁的远程监控和管理。无论身在何处,都能随时查看门锁状态,如是否已锁、最近一次开锁时间等信息。这如同仙盟管理者能在远处洞察各个区域的动静,确保酒店安全与运营秩序。

3. 多设备同步

在东方仙盟的多元场景下,访客可能使用多种设备访问 VOS 智能浏览器。酒店门锁 SDK 对接支持多设备同步功能,访客在手机上预订房间后,可在平板电脑或智能手表等其他设备上通过 VOS 智能浏览器获取开锁权限,实现无缝切换,方便快捷。

4. 会员服务与个性化设置

对于酒店会员,通过 VOS 智能浏览器与酒店门锁 SDK 的对接,可提供个性化服务。例如,会员可在浏览器上设置门锁的个性化提示音或灯光效果,增添独特的入住体验,仿佛在仙盟中拥有了属于自己的独特法术标识。

5. 会议与活动场地管理

酒店的会议和活动场地也可通过门锁 SDK 对接实现智能化管理。组织者在 VOS 智能浏览器上预订场地后,可获取场地门锁的控制权限,按照活动时间安排自动开锁和锁门,提高场地使用效率,避免人工管理的繁琐。

6. 访客授权管理

住客可以通过 VOS 智能浏览器,使用酒店门锁 SDK 为来访客人临时授权开锁。例如,住客在房间内通过浏览器为前来送行李的行李员或来访的朋友发送一次性开锁密码,方便他人进出,同时保障房间安全,如同在仙盟中为信任的伙伴授予进入特定区域的许可。

7. 安全审计与追溯

酒店门锁 SDK 记录每次开锁操作的详细信息,包括时间、开锁方式、操作人员等。管理者可通过 VOS 智能浏览器随时查询这些记录,进行安全审计。一旦发生安全问题,能够快速追溯事件源头,保障酒店和客人的安全,如同仙盟中的史官记录下每一个重要事件,以便后续查证。

8. 与酒店其他系统集成

通过酒店门锁 SDK 对接,可将门锁系统与酒店的前台系统、客房管理系统、餐饮预订系统等进行集成。例如,客人退房时,系统自动通知门锁 SDK 注销房卡权限,同时更新客房状态,实现酒店业务流程的自动化和无缝衔接,提升整体运营效率。

9. 应急响应与远程协助

在遇到紧急情况时,如客人被困房间或发生安全事件,酒店工作人员可通过 VOS 智能浏览器利用酒店门锁 SDK 远程开锁,实施救援。同时,技术支持人员也可通过浏览器远程协助客人解决门锁使用问题,确保客人的安全与舒适。

10. 营销推广与活动策划

酒店可以利用 VOS 智能浏览器与酒店门锁 SDK 对接,开展营销活动。例如,在特定节日或活动期间,为客人提供特殊的开锁动画或祝福语,增强客人的参与感和满意度,吸引更多潜在客户,就像在仙盟中举办盛大庆典,吸引各方来客。

11. 智能能源管理

结合酒店门锁 SDK 和 VOS 智能浏览器,可实现智能能源管理。当客人离开房间并锁门后,系统自动检测房间内的电器设备,关闭不必要的电源,实现节能减排,同时降低酒店运营成本,为仙盟的可持续发展贡献一份力量。

12. 培训与演示

酒店工作人员可通过 VOS 智能浏览器上的模拟环境,利用酒店门锁 SDK 进行培训,熟悉门锁系统的操作和功能。同时,也可向潜在客户进行演示,展示酒店智能化的优势,吸引更多客人入住。

13. 数据统计与分析

酒店门锁 SDK 收集的大量数据,如开锁次数、客人入住时长等,可通过 VOS 智能浏览器进行分析。酒店管理者能够根据这些数据了解客人的行为习惯和需求,优化服务策略,提升客人满意度,如同仙盟通过分析各种数据,调整修炼方法和策略。

14. 与第三方平台合作

酒店可以与旅游预订平台、在线支付平台等第三方合作,通过酒店门锁 SDK 对接,实现数据共享和业务协同。例如,客人在第三方平台完成预订和支付后,相关信息自动同步到酒店门锁系统,为客人生成开锁权限,提升用户体验,拓展酒店的业务渠道。

15. 特殊需求服务

对于有特殊需求的客人,如残障人士或老年客人,酒店可通过 VOS 智能浏览器和酒店门锁 SDK 提供定制化服务。例如,为他们设置特殊的开锁方式或提供语音提示功能,满足不同客人的需求,展现酒店的人文关怀,如同仙盟对不同修炼者提供个性化的指导和帮助。

初学者注意事项

1. 理解 SDK 文档

SDK 文档如同仙盟中的修炼秘籍,详细介绍了接口的使用方法、参数含义和功能特性。初学者务必仔细研读,理解每个接口的作用和适用场景,这是成功对接的基础。

2. 环境搭建与配置

在东方仙盟中搭建修炼场地需要谨慎,同样,对接酒店门锁 SDK 也需要正确搭建开发环境,配置相关参数。包括安装必要的开发工具、设置正确的项目引用等,确保开发环境与 SDK 兼容。

3. 错误处理与调试

开发过程中难免会遇到各种错误,就像修炼时会遇到瓶颈。初学者要学会使用调试工具,仔细分析错误信息,找出问题所在。同时,合理处理错误,确保系统在遇到异常情况时能够稳定运行,不影响酒店业务的正常开展。

4. 安全意识

酒店门锁涉及客人的隐私和安全,如同仙盟中的机密信息。初学者在对接过程中要高度重视安全问题,遵循安全规范,防止数据泄露、非法访问等安全风险。例如,对传输的数据进行加密处理,验证用户身份等。

5. 兼容性测试

东方仙盟中有多种修炼功法和法术,同样,酒店门锁 SDK 可能需要在不同的操作系统、浏览器版本和设备上运行。初学者要进行充分的兼容性测试,确保对接后的系统在各种环境下都能正常工作,为客人提供稳定的服务。

6. 性能优化

如同修炼者追求高效的修炼方法,在对接酒店门锁 SDK 时,也要注重性能优化。优化代码逻辑,减少资源占用,确保门锁操作响应迅速,提升用户体验。

7. 与酒店业务逻辑结合

酒店门锁 SDK 对接的最终目的是服务于酒店业务,初学者要深入了解酒店业务流程,将 SDK 功能与业务逻辑紧密结合,实现智能化、便捷化的酒店运营管理。

路径穿透方面的用途

在酒店门锁 SDK 对接中,路径穿透攻击是一种潜在的安全威胁,它试图通过恶意构造文件路径,绕过系统的安全限制,访问未授权的文件或目录。然而,正确使用路径处理和防范路径穿透,也能为酒店门锁系统带来积极的用途。

1. 数据存储与访问控制

通过合理规范路径,酒店门锁 SDK 能够确保数据存储在安全的目录中,并通过严格的路径检查,防止非法访问。这就像在仙盟中设置了重重关卡,只有通过验证的路径才能访问特定的数据,保障客人信息和门锁配置数据的安全。

2. 系统配置与资源管理

路径处理有助于管理系统配置文件和资源文件的访问。例如,酒店门锁 SDK 可能需要读取配置文件来获取门锁的相关设置,通过正确的路径处理,确保只有合法的路径能够访问这些文件,避免因路径错误或恶意路径穿透导致的系统配置错误,保障系统的正常运行。

3. 日志记录与审计

在酒店门锁 SDK 的日志记录功能中,路径处理确保日志文件被准确地存储在指定目录中,便于后续的审计和分析。同时,防范路径穿透攻击能够保证日志文件的完整性和安全性,防止日志被篡改,为酒店的安全管理提供可靠的依据,如同仙盟中对重要记录的妥善保管和严格守护。

总之,酒店门锁 SDK 对接在东方仙盟 VOS 智能浏览器中具有广泛的应用场景和重要意义。初学者只要谨慎遵循注意事项,合理利用路径处理的优势,就能成功实现对接,为酒店业务带来智能化的变革,在这个奇妙的仙盟世界中创造出更加便捷、高效的酒店服务体验。

阿雪技术观

在科技发展浪潮中,我们不妨积极投身技术共享。不满足于做受益者,更要主动担当贡献者。无论是分享代码、撰写技术博客,还是参与开源项目维护改进,每一个微小举动都可能蕴含推动技术进步的巨大能量。东方仙盟是汇聚力量的天地,我们携手在此探索硅基生命,为科技进步添砖加瓦。

Hey folks, in this wild tech - driven world, why not dive headfirst into the whole tech - sharing scene? Don't just be the one reaping all the benefits; step up and be a contributor too. Whether you're tossing out your code snippets, hammering out some tech blogs, or getting your hands dirty with maintaining and sprucing up open - source projects, every little thing you do might just end up being a massive force that pushes tech forward. And guess what? The Eastern FairyAlliance is this awesome place where we all come together. We're gonna team up and explore the whole silicon - based life thing, and in the process, we'll be fueling the growth of technology.

相关推荐
wzm—1 小时前
C#获取每年节假日
开发语言·c#
合作小小程序员小小店1 小时前
桌面开发,食堂卡管理系统开发,基于C#,winform,mysql数据库
数据库·mysql·c#
努力的ping1 小时前
qt信号和槽
开发语言·qt
AGANCUDA1 小时前
qt中vtk显示pcl的点云类
开发语言·qt
小马过河R1 小时前
tRPC-GO 框架Helloworld实践初体验
开发语言·分布式·后端·架构·golang·gin·beego
GoodStudyAndDayDayUp1 小时前
WIN11安装配置验证java\maven
java·开发语言·maven
fish_xk1 小时前
用c++写控制台贪吃蛇
开发语言·c++
王燕龙(大卫)1 小时前
rust:trait
开发语言·后端·rust
合作小小程序员小小店1 小时前
桌面开发,物业管理系统开发,基于C#,winform,mysql数据库
开发语言·数据库·sql·mysql·microsoft·c#