格格不入
type: channel
link: https://www.jbea.cn/
description: 『格格不入』是中文IT技术交流平台，创建于2017年，包含原创博客、技术分享、资源下载等服务，提供原创、优质、完整内容的专业IT技术开发社区（前沿技术分享,你我共同成长）。
items: Claude Code 订阅、Codex 订阅、ChatGPT订阅代充值
items: 手把手教你安装 Claude Code CLI，接入 DeepSeek 等国产大模型
items: 在CentOS中挂载Windows共享目录的完整指南
items: 基于C#和MailKit构建企业级邮件客户端的实战指南
items: 基于Tesseract.js的智能手写文字识别工具开发
items: 迄今为止，程序员最佳输入法非Rime莫属
items: Java 格式化输出 printf 用法
items: AxWindowsMediaPlayer (Windows Media Play)控件的常用属性、方法及事件
items: ADO.NET阶段练习与测试
items: 数据库访问技术ADO.NET

Claude Code 订阅、Codex 订阅、ChatGPT订阅代充值
type: item
date: 2026-05-25T16:19:00+08:00
description: 别再自己折腾了！Claude Code 订阅、Codex 订阅、ChatGPT订阅代充值一站式搞定，自动发货超省心🏁先说重点，购买地址：高校版大模型官网专业充值最近不少朋友在后台问我：Claude Pro 怎么充值？GPT Plus 哪里买靠谱？Grok 有没有便宜渠道？自己折腾半天，不是卡在支付环节，就是买到黑号被封，钱花了时间也浪费了。其实这些问题可以一次性解决。今天给大家推荐一个我自己在用的稳定渠道——高校版大模型共享站，主打自动发货 + 质保服务，价格透明，省去中间商差价。当下AI大模型迎来“超级更新月”2026年5月，各大模型密集发布重磅更新，现在正是AI使用的黄金窗口期。OpenAI方面：GPT-5.5 Instant 成为ChatGPT新一代默认模型，在保持低延迟的同时，法律、医疗、金融等敏感领域的“幻觉”问题下降约52.5%，AIME数学测试得分81.2（前代65.4），多模态推理得分76.0（前代69.2）。个性化记忆功能能够回溯过往对话、文件及Gmail内容，目前率先向Plus和Pro用户开放。Claude方面：Anthropic在开发者大会上连放数个大招，将Pro/Max用户Claude Code调用限额翻倍（5小时→10小时），取消高峰期额度削减限制，并大幅放宽Claude Opus模型的API速率。同时与SpaceX达成合作，新增超过22万张英伟达GPU算力，用于提升Pro/Max订阅用户的使用体验。Grok方面：马斯克最新宣布，Grok基础模型V9-Medium（1.5T）已完成训练，预计2-3周后正式发布，与当前v8-small模型相比将有重大提升，尤其在复杂编码任务方面。可以说，各平台都在持续投入优化，现在订阅正是时候。但问题来了——国内用户怎么支付？国内用户充值AI服务的最大痛点进入2026年，OpenAI支付网关Stripe的风控算法愈发严格，国内用户遭遇“Your card has been declined”的概率高达90%。机房IP会被直接识别拦截，国内几乎所有Visa/Mastercard都在黑名单中，2025年倒闭的大批虚拟卡号段也已被彻底屏蔽。当前五种充值方案对比方案成功率支付方式门槛推荐指数官方授权卡密（本平台）99%支付宝/微信极低⭐⭐⭐⭐⭐Apple IAP内购95%美区礼品卡中⭐⭐⭐⭐API直接调用85%信用卡/余额高⭐⭐⭐虚拟信用卡35%虚拟币/转账极高⭐共享/合租号90%支付宝/微信极简❌（严重隐私风险）根据权威测评，在支付环境日益严苛的今天，“官方授权代充”已成为成功率最高的通解，成功率可达99%。本平台正是基于这一模式，使用海外原生住宅IP和企业级正规卡池，通过官方授权接口完成订阅，3分钟即可到账，完全规避本地支付环境带来的封号风险。2026年最新价格一览（5月25日更新）商品价格质保发货方式Claude 官网账号5元/个—自动发货Claude Pro 充值（质保版）170元/月✅ 质保自助充值Claude Pro 充值（无质保版）125元/月❌ 无质保自动发货GPT Plus 充值144元✅ 质保自助充值Grok Super 充值130元✅ 质保自助充值Gmail 谷歌邮箱账号（美区）9.9元/个—自动发货[scode type="blue" size="simple"]所有标“自动发货”的商品，下单后秒到账，不需要等客服，凌晨三点也能买。[/scode]不同需求怎么选？只想低成本体验Claude：买5元的官网普号，登录即用，适合尝鲜。目前Claude Pro正放宽调用限制、提升体验，普通账号也能体验基础能力。长期使用Claude Pro：建议选170元质保版。万一账号异常，免费补发或退款，比125元无质保版多一份安心。尤其Claude近期大幅提升了使用额度，Pro用户价值更高。GPT Plus/Grok重度用户：GPT Plus现在可以用上GPT-5.5 Instant的个性化记忆功能，Grok也即将迎来V9-Medium大版本升级，现在充值正当时。GPT Plus 144元、Grok Super 130元，都是质保价。注册海外服务需要邮箱：9.9元美区Gmail，干净稳定，自动发货。官方充值入口（建议收藏）用途链接卡密购买（全品类入口）plus.gptshare666.proGPT Plus 自助充值www.czgpt.plusClaude 充值quickplus.vipGrok 充值quickplus.vip/public/grok所有链接均为自助式，不需要反复问客服，跟着页面提示操作即可。下单后系统自动发货，卡密即时可用。质保说明质保版：在有效期内如账号被封、无法登录，可联系客服免费补发或退款。建议主力使用的朋友选质保版，多一层保障。无质保版：价格更低，…

手把手教你安装 Claude Code CLI，接入 DeepSeek 等国产大模型
type: item
date: 2026-05-16T15:29:00+08:00
description: 小白也能学会！手把手教你安装 Claude Code CLI，接入 DeepSeek 等国产大模型一、前言Claude Code CLI 是 Anthropic 官方推出的命令行编程助手工具。你可以在终端里直接跟 AI 对话，让它帮你写代码、改 Bug、解释项目结构，甚至执行 Git 操作和终端命令。简单说——把你的终端变成 AI 结对编程搭档。本文面向零基础或刚入门的读者，全程图文式讲解，内容包括：安装前的环境准备在 macOS / Windows 上安装 Claude Code CLI在国内网络下避开官方登录，接入 DeepSeek 等国产大模型 API几个最常用的命令和技巧二、安装前的准备工作在正式开始安装之前，请先确保你的电脑满足以下条件。2.1 环境要求系统要求macOSmacOS 11 (Big Sur) 或更高版本WindowsWindows 10 / 11，64 位Linuxx86_64, glibc 2.27+2.2 安装 Node.js（必须）Claude Code CLI 基于 Node.js，所以你需要在电脑上安装 Node.js 18 或更高版本。安装步骤：打开浏览器，访问 https://nodejs.org下载 LTS（长期支持） 版本（左侧按钮，标记为 "LTS"）双击下载好的安装包Windows：一路点击 "Next"；macOS：一路点击 "继续" → "安装"安装完成后，重启终端验证是否成功：打开终端（macOS 的"终端.app"，或 Windows 的"命令提示符 / PowerShell"），输入：node --version npm --version如果能看到版本号（例如 v18.20.0 和 10.5.0），说明安装成功。[scode type="blue" size="small"]💡 npm 是 Node.js 自带的包管理器，后续安装 Claude Code CLI 要用到它，不需要单独安装。[/scode]2.3 网络环境说明（国内用户注意事项）由于 npm 默认镜像源在国外，国内用户安装时可能遇到下载慢或超时失败的问题。推荐在安装前配置淘宝镜像源（加速 npm 包的下载）：npm config set registry https://registry.npmmirror.com配置后下载速度会显著提升，且只影响包下载，不影响后续使用。2.4 Git（可选但推荐）虽然不是强制要求，但 Claude Code 很多功能（查看代码变更、创建 PR 等）都依赖 Git。如果你还没有安装：macOS： 终端运行 git --version，如果未安装会自动弹出安装提示Windows： 访问 https://git-scm.com 下载安装安装完成后配置用户名和邮箱：git config --global user.name "你的名字" git config --global user.email "你的邮箱"三、安装 Claude Code CLI3.1 macOS 安装步骤使用 npm 安装（推荐，两种平台通用）：npm install -g @anthropic-ai/claude-code参数说明：-g 表示全局安装，安装后可以在任意目录下直接使用 claude 命令。备用方案：使用 Homebrew 安装（仅限 macOS）如果你已经安装了 Homebrew（macOS 的包管理器），也可以：brew install claude-code3.2 Windows 安装步骤打开 PowerShell（建议以管理员身份运行），执行：npm install -g @anthropic-ai/claude-code[scode type="yellow" size="simple"]⚠️ 如果遇到类似 "无法加载文件...因为在此系统上禁止运行脚本" 的错误，先执行以下命令（允许本地运行脚本，安全无风险）：Set-ExecutionPolicy -Scope CurrentUser RemoteSigned然后再次尝试上面的 npm 安装命令。[/scode]3.3 验证安装安装完成后，在终端输入：claude --version如果能显示出版本号（例如 2.1.159 (Claude Code)），说明安装成功。[scode type="red" size="small"]安装成功后，先不要立即启动！[/scode]四、避开登录，接入 DeepSeek 或其他大模型 API4.1 原理说明Claude Code CLI 支持通过 ANTHROPIC_BASE_URL 环境变量自定义 API 地址。只要对接一个兼容 OpenAI/Anthropic 接口格式的 API 服务…

在CentOS中挂载Windows共享目录的完整指南
type: item
date: 2025-06-20T11:45:27+08:00
description: 引言：打破操作系统壁垒在日常工作中，Linux和Windows系统共存已成为常态。作为CentOS用户，您可能需要访问Windows服务器上的共享文件资源。本文将详细介绍如何在CentOS系统中挂载Windows共享目录，实现跨平台文件共享的无缝体验。核心优势：无需第三方软件命令行与图形界面双方法支持永久挂载配置解决常见连接问题一、前期准备1.1 Windows端配置创建共享文件夹（右键 > 属性 > 共享）设置共享权限（添加用户并分配权限）获取关键信息：Windows主机IP地址（cmd中运行 ipconfig）共享名称（如 ShareFolder）用户名和密码1.2 防火墙设置在Linux访问局域网Windows系统中的共享目录，需要设置Windows服务器的防火墙。开放”ICMPv4”访问：打开防火墙设置在 Windows 上，打开“控制面板”。点击“系统和安全”。点击“Windows Defender 防火墙”。在左侧，点击“高级设置”。创建“允许ICMPv4”入站规则在“Windows Defender 防火墙高级安全”窗口中，选择“入站规则”。在右侧，点击“新建规则”。选择“自定义”，然后点击“下一步”。在“规则类型”中，选择“所有程序”，然后点击“下一步”。在“协议和端口”中，选择“ICMPv4”，然后点击“下一步”。在“作用域”中，选择“任何 IP 地址”，然后点击“下一步”。（考虑主机访问安全，建议此处只允许放行Linux对应的IP地址）在“操作”中，选择“允许连接”，然后点击“下一步”。在“配置文件”中，选择适当的配置文件（域、私有、公共），然后点击“下一步”。给规则命名，例如“允许 ICMP”，然后点击“完成”。开放445访问端口重复上述防火墙操作步骤，相关配置修改如下：选择入站规则：在左侧，选择“入站规则”。新建规则：在右侧，点击“新建规则”。选择规则类型：选择“自定义”，然后点击“下一步”。选择程序：选择“所有程序”，然后点击“下一步”。选择协议和端口：在“协议类型”中，选择“TCP”。在“特定本地端口”中，输入 445（这是 SMB/CIFS 使用的端口），然后点击“下一步”。选择作用域：在“远程 IP 地址”中，选择“这些 IP 地址”，然后添加你的 Linux 机器的 IP 地址（例如 192.168.1.100）。如果你希望允许整个子网，可以输入 192.168.1.0/24。点击“下一步”。选择操作：选择“允许连接”，然后点击“下一步”。选择配置文件：选择适当的配置文件（域、私有、公共），然后点击“下一步”。命名规则：给规则命名，例如“允许 Linux 访问 SMB”，然后点击“完成”。在Windows上的防火墙相关配置已经结束，建议创建Windows共享访问账户，找到需要共享的目录执行创建共享操作。1.3 CentOS端准备确保网络连通性：ping 192.168.1.100 # 替换为Windows主机IP更新系统：sudo yum update -y二、安装必要软件包CentOS需要安装CIFS工具集来支持SMB协议：sudo yum install cifs-utils samba-client -y验证安装：rpm -q cifs-utils # 预期输出：cifs-utils-版本号三、命令行挂载方法3.1 创建本地挂载点sudo mkdir /mnt/win_share3.2 临时挂载共享目录sudo mount -t cifs //192.168.1.100/ShareFolder /mnt/win_share \ -o username=windows_user,password=your_password参数说明：-t cifs：指定文件系统类型//192.168.1.100/ShareFolder：Windows共享路径/mnt/win_share：本地挂载点username/password：Windows凭据3.3 验证挂载df -hT | grep cifs # 输出应显示挂载的共享目录 ls /mnt/win_share # 查看共享文件四、图形界面挂载方法（适合桌面版CentOS）打开文件管理器在地址栏输入：smb://192.168.1.100/ShareFolder输入Windows用户名和密码点击"连接"按钮连接成功后：共享目录将出现在侧边栏支持拖放文件操作书签功能可保存常用共享五、高级配置与优化5.1 永久挂载（配置/etc/fstab）编辑fstab文件实现开机自动挂载：sudo nano /etc/fstab添加以下内容：//192.168.1.100/ShareFolder /mnt/win_share cifs \ username=windo…

基于C#和MailKit构建企业级邮件客户端的实战指南
type: item
date: 2025-05-20T18:04:00+08:00
description: 一、场景价值与工具选型1.1 企业邮件系统需求自动化处理工单邮件系统监控报警通知批量发送业务报表邮件数据归档分析1.2 为什么选择MailKit？🔐 全面支持SSL/TLS加密📦 完善的MIME消息处理⚡ 真正的异步IO实现📈 活跃的开源社区支持二、快速搭建开发环境2.1 创建项目与依赖安装# 创建控制台项目 dotnet new console -n EmailClient # 添加NuGet包 dotnet add package MailKit dotnet add package MimeKit2.2 配置邮箱连接参数public class EmailConfig { // 腾讯企业邮箱示例 public const string ImapServer = "imap.exmail.qq.com"; public const int ImapPort = 993; public const string SmtpServer = "smtp.exmail.qq.com"; public const int SmtpPort = 465; // 实际项目建议使用配置文件或密钥管理服务 public const string Username = "your@company.com"; public const string Password = "your_auth_code"; }三、核心功能实现详解3.1 未读邮件处理模块public void ProcessUnreadEmails() { using var client = new ImapClient(); // 建立安全连接 client.Connect(EmailConfig.ImapServer, EmailConfig.ImapPort, SecureSocketOptions.SslOnConnect); client.Authenticate(EmailConfig.Username, EmailConfig.Password); var inbox = client.Inbox; inbox.Open(FolderAccess.ReadWrite); // 高效搜索未读邮件 var uids = inbox.Search(SearchQuery.NotSeen); foreach (var uid in uids) { var message = inbox.GetMessage(uid); ProcessMessage(message); // 标记为已读（符合企业合规要求） inbox.AddFlags(uid, MessageFlags.Seen, true); } } private void ProcessMessage(MimeMessage message) { Console.WriteLine($"\n📨 收到新邮件 [{message.Date}]"); Console.WriteLine($"主题：{message.Subject}"); Console.WriteLine($"发件人：{message.From}"); // 智能解析正文内容 var textPart = message.TextBody; var htmlPart = message.HtmlBody; Console.WriteLine($"内容预览：{textPart?.Truncate(100)}"); // 安全保存附件 SaveAttachments(message.Attachments); } /// /// 安全保存邮件附件 /// /// 附件集合 private void SaveAttachments(IEnumerable<MimeEntity> attachments) { // 创建附件存储目录 var attachmentDir = Path.Combine(Directory.GetCurrentDirectory(), "Attachments"); Directory.CreateDirectory(attachmentDir); int index = 1; foreach (var attachment in attachments) { try { string fileName; if (attachment is MessagePart rfc822) { // 处理邮件型附件（.eml） fileName = $"forward_{DateTime.Now:yyyyMMddHHmmss}_{index}.eml"; using var stream = File.Create(Path.Combine(a…

基于Tesseract.js的智能手写文字识别工具开发
type: item
date: 2025-02-07T15:07:20+08:00
description: 引言随着人工智能和机器学习技术的快速发展，文字识别（OCR）技术已经成为了许多应用场景中的核心功能。无论是从图像中提取文本，还是识别手写文字，OCR技术都在不断进步。本文将介绍如何使用Tesseract.js开发一个基于Web的智能手写文字识别工具，并分享一些开发过程中的技术细节。项目概述本项目是一个基于Tesseract.js的在线手写文字识别系统，用户可以在网页上通过鼠标或触摸屏手写文字，系统会自动识别并显示识别结果。该工具支持笔画粗细调整、自动识别、图像预处理等功能，适用于多种场景下的手写文字识别需求。技术栈Tesseract.js ：一个基于Tesseract OCR引擎的JavaScript库，支持在浏览器中进行文字识别。HTML5 Canvas ：用于绘制手写文字的画布。JavaScript ：处理用户交互、图像预处理和文字识别逻辑。实现细节1. 初始化Tesseract OCR引擎Tesseract.js是一个强大的OCR库，支持多种语言的文字识别。在项目中，我们首先需要初始化Tesseract引擎，并加载中文和英文的语言模型。async function initTesseract() { try { scheduler = Tesseract.createScheduler(); worker = await Tesseract.createWorker({ logger: m => console.log(m) }); // 加载中文和英文语言包 await worker.loadLanguage('chi_sim+eng'); await worker.initialize('chi_sim+eng'); // 设置识别参数 await worker.setParameters({ tessedit_char_whitelist: '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ你我他的是在有和人这中大为上个国我的时要出会可也得里说之用年行家方后作成开面而于经', tessedit_pageseg_mode: '6', // 假设文本是统一块 }); scheduler.addWorker(worker); console.log('Tesseract 初始化完成'); } catch (error) { console.error('Tesseract 初始化失败:', error); } }2. 画布绘制与交互用户可以通过鼠标或触摸屏在HTML5 Canvas上绘制手写文字。我们通过监听鼠标和触摸事件来捕获用户的绘制动作，并将绘制的笔画存储在一个数组中，以便后续的重绘和识别。function startDrawing(e) { isDrawing = true; const rect = canvas.getBoundingClientRect(); [lastX, lastY] = [ e.clientX - rect.left, e.clientY - rect.top ]; currentStroke = [{x: lastX, y: lastY}]; // 清除之前的识别计时器 if (recognizeTimer) { clearTimeout(recognizeTimer); recognizeTimer = null; } } function draw(e) { if (!isDrawing) return; const rect = canvas.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; ctx.beginPath(); ctx.moveTo(lastX, lastY); ctx.lineTo(x, y); ctx.stroke(); currentStroke.push({x: x, y: y}); [lastX, lastY] = [x, y]; } function stopDrawing() { if (isDrawing) { isDrawing = false; strokes.push(currentStroke); currentStroke = []; scheduleRecognition(); } }3. 自动识别与图像预处理为了提高识别准确率，我们提供了自动识别功能。当用户停止书写1.5秒后，系统会自动触发文字识别。此外，用户还可以选择是否对图像进行预处理，如二值化处理，以增强识别效果。function scheduleRecognition() …

迄今为止，程序员最佳输入法非Rime莫属
type: item
date: 2024-11-15T14:21:00+08:00
description: 基本介绍很称心如意，很符合我的使用标准，无广告、无弹窗、不联网、词库完全自定义。界面风格全靠手码，千人千面，自己想要什么，自己画。关键还是跨平台的产品，不仅能在Windows上面跑，还能在MacOS和Linux上面运行，只是名字有点特殊，Windows叫：小狼毫，MacOS叫：鼠须管。如何安装和下载官网：Rime下载地址：在Github上面找到release面板即可下载 （下载0.16.3）安装：无脑操作，直接下一步下一步即可，无须特殊配置雾凇拼音GitHub地址：iDvel / rime-ice下载安装完成之后，强烈推荐安装的词库，符合大部分人的输入要求，下载完成后，进入“用户文件夹”，将下载的文件解压，然后点击“重新部署”，在点击“输入法设定“，选择自己需要的输入方案重头戏，如何配置皮肤进入用户文件夹后，找到“weasel.custome.yaml”文件，直接编辑，这里我编写了两套皮肤，是模仿苹果的，我觉得还挺好看，给大伙看看效果：如果还需要弄成其他的颜色，大家也可以大胆尝试。如果你们喜欢这个配色，可以直接将下面的代码复制到“weasel.custome.yaml”文件中，完成后需要点击重新部署才能使用。customization: distribution_code_name: Weasel distribution_version: 0.16.3 generator: "Weasel::UIStyleSettings" modified_time: "Fri Nov 15 09:28:21 2024" rime_version: 1.11.2 patch: preset_color_schemes: mac_blue_write: {author: arvin, back_color: 0xFFFFFFFF, border_color: 0xd2d2d2FF, candidate_format: "%c\u2005%@\u2005", candidate_back_color: 0xFFFFFFFF, candidate_text_color: 0x333333FF, corner_radius: 6, hilited_corner_radius: 6, color_format: rgba, comment_text_color: 0x5C5C5CFF, hilited_back_color: 0x315efb1a, hilited_candidate_back_color: 0x315efb1a, hilited_candidate_text_color: 0x0158ccFF, hilited_comment_text_color: 0x0158ccFF, hilited_label_color: 0x315efbFF, hilited_text_color: 0x0158ccFF, label_color: 0x333333FF, name: "苹果蓝白", shadow_color: 0x20212447, text_color: 0x333333FF} mac_blue_dark: {author: arvin, back_color: 0x181818, border_color: 0x0808080D, border_width: 0, candidate_format: "%c\u2005%@\u2005", candidate_back_color: 0x181818, candidate_text_color: 0xFFFFFF, color_format: abgr, comment_text_color: 0xFFFFFFFF, hilited_back_color: 0xFFc85c2f, hilited_candidate_back_color: 0xFFc85c2f, hilited_candidate_text_color: 0xFFFFFFFF, hilited_comment_text_color: 0xFFFFFF, hilited_label_color: 0xFFFFFF, hilited_text_color: 0xFFFFFF, label_color: 0xFFFFFF, name: "苹果黑", shadow_color: 0x080808DE, text_color: 0xFF333333} style: color_scheme: mac_blue_dark comment_font_face: "PingFang SC" comment_font_point: 11 display_tray_icon: true font_face: "Segoe UI Emo…

Java 格式化输出 printf 用法
type: item
date: 2024-03-06T08:58:57+08:00
description: Java 格式化输出 printf 用法符号解释使用案例%s输出字符串System.out.printf("你好,我叫:%s",myName);%d输出整数System.out.printf("你好,今年:%d岁",age);%f输出小数System.out.printf("你好,今天一共消费:%f元",money);%n输出换行 %b输出布尔类型 %S输出字符串,英文大写 import java.util.Date; /** * 使用printf输出 * 关键技术点 * 使用java.io.PrintStream的printf方法实现C风格的输出 * printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象 */ public class Demo { public static void main(String[] args) { /*** 输出字符串 ***/ // %s表示输出字符串，也就是将后面的字符串替换模式中的%s System.out.printf("%s", new Integer(1212)); // %n表示换行 System.out.printf("%s%n", "end line"); // 还可以支持多个参数 System.out.printf("%s = %s%n", "Name", "Zhangsan"); // %S将字符串以大写形式输出 System.out.printf("%S = %s%n", "Name", "Zhangsan"); // 支持多个参数时，可以在%s之间插入变量编号，1$表示第一个字符串，3$表示第3个字符串 System.out.printf("%1$s = %3$s %2$s%n", "Name", "san", "Zhang"); /*** 输出boolean类型 ***/ System.out.printf("true = %b; false = ", true); System.out.printf("%b%n", false); /*** 输出整数类型***/ Integer iObj = 342; // %d表示将整数格式化为10进制整数 System.out.printf("%d; %d; %d%n", -500, 2343L, iObj); // %o表示将整数格式化为8进制整数 System.out.printf("%o; %o; %o%n", -500, 2343L, iObj); // %x表示将整数格式化为16进制整数 System.out.printf("%x; %x; %x%n", -500, 2343L, iObj); // %X表示将整数格式化为16进制整数，并且字母变成大写形式 System.out.printf("%X; %X; %X%n", -500, 2343L, iObj); /*** 输出浮点类型***/ Double dObj = 45.6d; // %e表示以科学技术法输出浮点数 System.out.printf("%e; %e; %e%n", -756.403f, 7464.232641d, dObj); // %E表示以科学技术法输出浮点数，并且为大写形式 System.out.printf("%E; %E; %E%n", -756.403f, 7464.232641d, dObj); // %f表示以十进制格式化输出浮点数 System.out.printf("%f; %f; %f%n", -756.403f, 7464.232641d, dObj); // 还可以限制小数点后的位数 System.out.printf("%.1f; %.3f; %f%n", -756.403f, 7464.232641d, dObj); /*** 输出日期类型***/ // %t表示格式化日期时间类型，%T是时间日期的大写形式，在%t之后用特定的字母表示不同的输出格式 Date date = new Date(); long dataL = date.getTime(); // 格式化年月日 // %t之后用y表示输出日期的年份（2位数的年，如99） // %t之后用m表示输出日期的月份，%t之后用d表示输出日期的日号 System.out.printf("%1$ty-%1$tm-%1$td; %2$ty-%2$tm-%2$td%n", date, dataL); // %t之后用Y表示输出日期的年份（4位数的年）， // %t之后用B表示输出日期的月份的完整名， %t之后用b表示输出日期的月份的简称 System.out.printf("%1$tY-%1$tB-%1$td; %2$tY-%2$tb…

AxWindowsMediaPlayer (Windows Media Play)控件的常用属性、方法及事件
type: item
date: 2023-11-07T11:17:35+08:00
description: 概述AxWindowsMediaPlayer 对象是 Windows 媒体播放器 控件的根对象。本案例AxWindowsMediaPlayer控件取名: axPlay常用属性 [表-1]属性名数据类型描述或用法URLstring设置或获取媒体位置，本机或网络地址uiModestring设置或获取播放器的页面显示模式取值范围：Full, Mini, None, InvisibleplayStateWMPLib.WMPPlayState获取播放状态常见取值范围：wmppsStopped(停止)wmppsPaused(暂停)wmppsPlaying(正在播放)wmppsBuffering(正在缓冲)wmppsTransitioning(正在连接)wmppsReady(准备就绪)enableContextMenubool是否启用右键菜单fullScreenbool是否全屏显示Ctlcontrols-播放器控制属性，请查考[表-2]settings-播放器基本设置，请查考[表-3]currentMedia-播放器当前媒体，请查考[表-4]currentPlaylist-播放器当前播放列表，请查考[表-5]// 设置播放器的播放路径 axPlay.URL = @"C:\Demo\我爱的人.mp4"; // 设置播放器的页面显示模式 axPlay.uiMode = "Full"; // 获取播放器播放状态 var state = axPlay.playState; if(state == WMPLib.WMPPlayState.wmppsStopped) { // 播放器已停止播放 } // 禁用右键菜单 axPlay.enableContextMenu = false; // 开启全屏显示 axPlay.fullScreen = true;播放器基本控制属性常用方法 [表-2] [使用案例: axPlay.Ctlcontrols]方法名/属性名返回值类型描述或用法axPlay.Ctlcontrols.play()void控制播放器进行播放axPlay.Ctlcontrols.pause()void暂停axPlay.Ctlcontrols.stop()void停止axPlay.Ctlcontrols.next()void播放下一个媒体元素[需要提供播放列表]axPlay.Ctlcontrols.previous()void播放上一个媒体元素[需要提供播放列表]axPlay.Ctlcontrols.fastForward()void快进axPlay.Ctlcontrols.fastReverse()void快退axPlay.Ctlcontrols.currentPositiondouble获取或设置当前播放进度axPlay.Ctlcontrols.currentPositionStringstring获取当前播放进度,返回字符串格式。如“00:23”播放器基本控制属性常用方法 [表-3] [使用案例: axPlay.settings]方法名/属性名返回值类型描述或用法axPlay.settings.volumeint设置或获取音量，0-100axPlay.settings.autoStartbool是否自动播放axPlay.settings.mutebool是否开启静音axPlay.settings.playCountint播放次数播放器基本控制属性常用方法 [表-4] [使用案例: axPlay.currentMedia]方法名/属性名返回值类型描述或用法axPlay.currentMedia.durationdouble媒体总长度axPlay.currentMedia.durationStringstring媒体总长度，字符串格式。如“03:24”axPlay.currentMedia.getItemInfo(string bstrItemName)string获取当前媒体信息，bstrItemName参数填写字符串如下: "Title"=媒体标题"Author"=艺术家"Copyright"=版权信息"Description"=媒体内容描述"Duration"=持续时间（秒）"FileSize"=文件大小"FileType"=文件类型"sourceURL"=原始地址axPlay.currentMedia.setItemInfo(string bstrItemName, string bstrVal)void通过属性名设置媒体信息播放器基本控制属性常用方法 [表-5] [使用案例: axPlay.currentPlaylist]方法名/属性名返回值类型描述或用法axPlay.currentPlaylist.countint当前播放列表所包…

ADO.NET阶段练习与测试
type: item
date: 2023-10-27T08:36:00+08:00
description: 建立数据库新建数据库：GoodsInfo新建数据表：Category 【商品类别表】列名称数据类型是否为空说明CIDint否标识列，主键，商品类别编号CNamenvarchar(50)否商品类别名称新建数据表：Goods 【商品信息表】列名称数据类型是否为空说明GIDint否标识列，主键，商品编号GNamenvarchar(50)否商品名称CIDint否商品所属类别编号，外键Pricemoney否商品售价Brandnvarchar(20)否商品品牌名称Inventoryint否商品库存数据表建立结束后，请自行建立表与表之间的关系，并使用INSERT语句向每张表中至少添加3条测试数据。新建项目使用Visual Studio新建控制台应用程序：GoodsManagerSys，并创建数据库帮助类：DBHelper.cs，在数据库帮助类中完成实现对应方法。创建业务处理类：GoodsBusiness.cs，创建以下方法，请自行查看方法说明与注释。方法名返回值参数说明方法说明Menu()void/用于显示主菜单AddGoodsInfo()void/新增商品ShowGoodsCategory()void/显示商品分类列表ShowGoodsList()void/显示商品列表运行效果图为了让你们能够复制显示文本,项目运行效果图将以文本的形式提供----------------商品信息管理系统---------------- 1. 显示所有商品分类信息 2. 显示所有商品信息 3. 新增商品信息 4. 退出 ----------------------------------------------- 请选择操作菜单: 1 ----------------------------------------------- 商品分类编号 商品分类名称 ----------------------------------------------- 1 数码产品 2 家居用品 3 家用百货 4 休闲食品 ----------------------------------------------- 按任意键返回主菜单: x ----------------商品信息管理系统---------------- 1. 显示所有商品分类信息 2. 显示所有商品信息 3. 新增商品信息 4. 退出 ----------------------------------------------- 请选择操作菜单: 2 ----------------------------------------------- 商品编号 商品名称 品牌 售价 分类 库存 ----------------------------------------------- 1 华为Meta60 pro 华为 8999 数码产品 10 2 iPhone 15 pro 苹果 7999 数码产品 29 3 康师傅牛肉面 康师傅 5.5 休闲食品 9000 4 舒肤佳沐浴露 舒肤佳 49.9 家用百货 700 ----------------------------------------------- 按任意键返回主菜单: o ----------------商品信息管理系统---------------- 1. 显示所有商品分类信息 2. 显示所有商品信息 3. 新增商品信息 4. 退出 ----------------------------------------------- 请选择操作菜单: 3 您将要新增商品信息,请按要求依次输入 请输入商品名称: 山泉水 请输入商品品牌: 娃哈哈 请输入商品售价: 2.5 请输入商品入库库存: 200 请选择商品所属类别: ----------------------------------------------- 商品分类编号 商品分类名称 ----------------------------------------------- 1 数码产品 2 家居用品 3 家用百货 4 休闲食品 ----------------------------------------------- 请输入类别编号: 5 很抱歉,您输入的编号无效,请重新输入: 7 很抱歉,您输入的编号无效,请重新输入: 1 商品信息添加成功|失败,请按任意键返回主菜单: q ----------------商品信息管理系统---------------- 1. 显示所有商品分类信息 2. 显示所有商品信息 3. 新增商品信息 4. 退出 ----------------------------------------------- 请选择操作菜单: 4 谢谢您的使用,再见!运行与测…

数据库访问技术ADO.NET
type: item
date: 2023-10-12T17:18:00+08:00
description: 概述概述： ADO.NET是一组公开数据访问服务的类，可以对数据源进行连接，对数据进行增、删、改、查等操作。ADO.NET为创建分布式数据共享应用程序提供了一组发放的组件。特点： 与数据源断开连接后也可以使用数据ADO.NET核心组件DataSet（数据集）：独立于数据源的数据访问，DataSet是一个内存中的缓存，用于在应用程序中保存从数据库中检索的数据。它可以包含多个DataTable对象，关系和约束，可以方便地在应用程序中进行数据处理。.NET 数据提供程序[scode type="green" size="small"]1️⃣直接对数据源进行操作2️⃣连接数据源、执行命令和检索结果3️⃣实现数据操作和对数据的快速、只进只读访问[/scode].NET 数据提供程序中的4大核心对象[scode type="blue" size="small"]1️⃣Connection：用于开启程序和数据库之间的连接，它是连接数据库的关键组件，可以打开和关闭与数据库的连接。通过Connection对象，你可以指定数据库的位置、凭据、连接超时等参数。2️⃣Command：用于对数据库发出一些操作指令，它允许你执行SQL语句（例如SELECT、INSERT、UPDATE、DELETE等），并从数据库中检索数据或修改数据。Command对象也可以执行存储过程。3️⃣DataAdapter：在数据源和DataSet之间执行数据传输工作，DataAdapter是用于填充DataSet（数据集）和更新数据库的桥梁。它可以从数据库中检索数据，并将其填充到DataSet中的DataTable对象中。同样，它也可以从DataSet中获取更改，并将这些更改更新回数据库。4️⃣DataReader：DataReader是一种只进只读的数据访问方式。当你执行查询并希望逐行读取结果时，DataReader非常有用。它比DataSet更轻量级，对于大型数据集来说，性能更好，因为它不需要将整个结果集加载到内存中。[/scode]Connection连接对象语法：SqlConnection connection = new Sqlconnection(String ConnectionString);Connection对象常用属性和方法：属性🔨 / 方法📦说 明🔨 ConnectionString设置/获取应用程序连接数据库的连接字符串📦 void Open()用于打开与指定数据库的连接📦 void Close()关闭与数据库的连接使用案例演示：// 第一步: 定义链接字符串 private string constr constr = @"server=数据库服务引擎IP地址或主机名称;database=数据库名称;user=用户名;pwd=密码"; /* 数据库链接字符串拼接方式有很多种 * 例如: * Data Source=服务器名称或IP地址;Initial Catalog=数据库名;User Id=用户名;pwd=密码; * Data Source=服务器名称或IP地址;Initial Catalog=数据库名;Integrated Security=True; //Windows集成验证 */ // 第二步: 创建连接对象,此处演示案例为连接SQL Server数据库 SqlConnection connection = new Sqlconnection(constr); //在创建连接对象时,需要提供连接字符串 // 第三步: 打开或关闭连接对象 connection.Open(); //打开连接。如需关闭,请使用Close()方法[scode type="red" size="small"]⚠注意在.NET Core 框架下，不会自动添加System.Data和System.Data.SqlClient的引用，需要在菜单栏，选择"工具(T)" >"NuGet包管理器(N)";在“NuGget – 解决方案”窗口“浏览”选项卡的搜索框中输入“System.Data.SqlClient”关键字;点中搜索列表中匹配的条目，勾选项需要添加引用的项目，点击安装[/scode][scode type="green" size="small"]💬提示：在进行数据库连接或操作数据库时，请在代码中添加合理的try-catch-finally异常处理语句try{ //可能会出现异常的代码 }catch(Exception ex){ //出现异常后进行的处理代码 }finally{ //不管是否出现异常都需要执行的代码 }[/scode]Command命令对象功能:执行返回单条记录的SELECT语句，例如聚合函数SUM、AVG等执行返回具有多条记录的SELECT语句执…