使用iKuai的Docker 安装Uptime 监控网络状况并设置通知提醒

使用iKuai的Docker 安装Uptime 监控网络状况并设置通知提醒 Uptime Kuma 简介 我爱开源 Uptime Kuma 是一个开源项目,它的项目地址是在这里 https://github.com/louislam 开发者是以为香港Coder, 该项目已经有了43.4k star. 大家再给他多一些星星吧! 缘由 有时候有些服务器因为某些原因离线了,忘记检查了。 然后造成服务器无法正常服务。 于是就有了想法在iKuai的 Docker 中安装Uptime 来监控服务器和网络设备的在线状态 先决条件 路由器要有空闲磁盘来存储Docker数据, 不然无法正常安装Docker插件 iKuai 版本要在3.5以上 在iKuai云平台绑定设备,并安装好Docker插件 安装步骤 在路由器的USB口插入一张USB磁盘 并在"系统设置" - " 磁盘管理- 磁盘分区中" 将磁盘分区并挂载 绑定业务选择" 普通存储" 即可 在云平台的" 插件应用 " 插件市场中选择要安装docker的设备 在云平台 “插件管理” 检查插件安装状态, 显示安装成功则可以进行下一步操作 回到路由器中的"高级应用" - “插件管理” 点击蓝色的 “docker” (需要在云平台安装好docker插件成功才能看到) - " 服务设置 " 将镜像库URL 设置为微软的 https://mcr.microsoft.com/ 点击确认保存 回到Docker 界面 点击 “镜像管理” 点击添加, 选择"镜像库下载" 在搜索框中输入Uptime 选择: louislam/uptime-kuma 下载, 然后等待提示下载成功 下载时间取决于您的网络状况和磁盘速度 ...

Python 批量查询快递单号,并将查询结果填入Excel中

缘由 因为11月份是快递量比较大时候,会有有很多快递单需要查询快递状态;之前是因为单量少,每一个单每一个单去baidu 直接看百度查询到的结果。这两个月由于快递单特别多,于是就打算用Python 结合快递100的API 来查询快递状态 代码 快递100 API 实时查询状态 # coding = utf-8 import hashlib import json import requests class KuaiDi100: def __init__(self): self.key = '' # TODO 客户授权key self.customer = '' # TODO 查询公司编号 self.url = 'https://poll.kuaidi100.com/poll/query.do' # 请求地址 def track(self, com, num, phone, ship_from, ship_to): """ 物流轨迹实时查询 :param com: 查询的快递公司的编码,一律用小写字母 :param num: 查询的快递单号,单号的最大长度是32个字符 :param phone: 收件人或寄件人的手机号或固话(也可以填写后四位,如果是固话,请不要上传分机号) :param ship_from: 出发地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,请尽量提供 :param ship_to: 目的地城市,省-市-区,非必填,填了有助于提升签收状态的判断的准确率,且到达目的地后会加大监控频率,请尽量提供 :return: requests.Response.text """ param = { 'com': com, 'num': num, 'phone': phone, 'from': ship_from, 'to': ship_to, 'resultv2': '1', # 添加此字段表示开通行政区域解析功能。0:关闭(默认),1:开通行政区域解析功能,2:开通行政解析功能并且返回出发、目的及当前城市信息 'show': '0', # 返回数据格式。0:json(默认),1:xml,2:html,3:text 'order': 'desc' # 返回结果排序方式。desc:降序(默认),asc:升序 } param_str = json.dumps(param) # 转json字符串 # 签名加密, 用于验证身份, 按param + key + customer 的顺序进行MD5加密(注意加密后字符串要转大写), 不需要“+”号 temp_sign = param_str + self.key + self.customer md = hashlib.md5() md.update(temp_sign.encode()) sign = md.hexdigest().upper() request_data = {'customer': self.customer, 'param': param_str, 'sign': sign} return requests.post(self.url, request_data).text # 发送请求 result = KuaiDi100().track('yuantong', 'YT9693083639795', '', '广东省江门市', '广东省深圳市') print(result)接口文档 ...

网吧延迟启动工具以及源代码

缘由 好久没给网吧维护了,最近给日本网吧维护的时候, 由于要在工作站开机启动之后执行一些初始化程序,要用到一个延迟启动程序。(程序是前辈写的,帮了很多忙。鞠躬) 但是在日本语系统下无法正常运行 报错如下: 如果要解决该错误,需要在区域选项中,将程式区域改为中国即可。如此一来会产生一个新的问题, 某些程式会用区域来判断用户的location, 会导致一些软件无法正常运行。 于是我依葫芦画瓢,手搓了一个能在日本语系统下正常运行的延迟启动工具 功能和用法 简介 该延迟启动工具的本体只有一个exe执行文件和ini配置文件 执行文件会读取ini文件中的配置,然后执行相关任务 配置文件说明 配置文件包含TargetPath,FileExtensions,Timeout选项 TargetPath: 所需要执行的目录路径(绝对路径) FileExtenions: 需要执行的文件格式 Timeout: 延迟时间 毫秒为单位 用法 在给工作站开超级时,将Hiderun.exe 添加到系统启动项 根据你自身需求,在配置文件中“config.ini”填写相对应的路径和文件格式,以及时间。 日志 程序会在程序根目录生成log文件记录执行状态和报错,遇到问题可以在日志中查看明细。 程序执行演示 程序下载 解压密码: www.itiohub.com HideRun.zip 源代码 using System; using System.IO; using System.Diagnostics; using System.Threading; using System.Runtime.ExceptionServices; class Program { static string logFilePath; static void Main() { // 在程序根目录生成日志文件 string logFilePath = GenerateLogFilePath(); CreateLogFile(logFilePath); // 隐藏自身窗口 IntPtr handle = Process.GetCurrentProcess().MainWindowHandle; ShowWindow(handle, SW_HIDE); LogToFile(logFilePath, "延迟启动工具 By 小四 www.itiohub.com"); // 读取配置文件 var configFile = "config.ini"; var config = ReadConfig(configFile); if (config != null) { // 获取配置信息 string targetPath = config["TargetPath"]; string[] fileExtensions = config["FileExtensions"].Split(','); int timeout = int.Parse(config["Timeout"]); // 后台运行 RunInBackground(logFilePath, targetPath, fileExtensions, timeout); } else { LogToFile(logFilePath, "配置文件读取失败。 请检查配置文件config.ini是否存在"); } Thread.Sleep(5000); } //创建日志文件 static void CreateLogFile(string logFilePath) { try { using (StreamWriter sw = File.CreateText(logFilePath)) { sw.WriteLine("程序启动时间: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); } } catch (Exception ex) { Console.WriteLine($"创建日志文件时发生错误: {ex.Message}"); } } //后台运行 static void RunInBackground(string logFilePath, string targetPath, string[] fileExtensions, int timeout) { try { // 在目标路径中查找并运行匹配的文件 foreach (var fileExtension in fileExtensions) { var files = Directory.GetFiles(targetPath, $"*.{fileExtension}"); foreach (var file in files) { LogToFile(logFilePath, $"运行文件: {file}"); var processStartInfo = new ProcessStartInfo(file); processStartInfo.WindowStyle = ProcessWindowStyle.Hidden; var process = Process.Start(processStartInfo); if (process != null) { // 等待超时时间 if (!process.WaitForExit(timeout)) { LogToFile(logFilePath, $"文件 {file} 运行超时。"); } // 可以添加其他处理逻辑,例如记录日志等 } else { LogToFile(logFilePath, $"无法启动文件 {file}。"); } } } // 执行完所有文件后,延迟5秒并退出 LogToFile(logFilePath, "所有文件已执行,程序将在5秒后退出。"); Thread.Sleep(5000); } catch (Exception ex) { LogToFile(logFilePath, $"发生错误: {ex.Message}"); } } //读取配置文件 static IniConfig ReadConfig(string filePath) { try { var config = new IniConfig(); var lines = File.ReadAllLines(filePath); foreach (var line in lines) { var parts = line.Split('='); if (parts.Length == 2) { config.Add(parts[0].Trim(), parts[1].Trim()); } } return config; } catch (Exception ex) { LogToFile(logFilePath, $"读取配置文件时发生错误: {ex.Message}"); return null; } } //日志文件 static void LogToFile(string logFilePath, string message) { try { using (StreamWriter sw = File.AppendText(logFilePath)) { string logMessage = $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm")}: {message}"; Console.WriteLine(logMessage); sw.WriteLine(logMessage); } } catch (Exception ex) { Console.WriteLine($"写入日志文件时发生错误: {ex.Message}"); } } //日志文件名称generate static string GenerateLogFilePath() { string fileName = $"hiderun{DateTime.Now.ToString("yyyy_MM_dd_HH_mm")}.log"; return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fileName); } [System.Runtime.InteropServices.DllImport("user32.dll")] private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow); private const int SW_HIDE = 0; } //ini配置文件 ky value class IniConfig { private readonly System.Collections.Generic.Dictionary<string, string> config; public IniConfig() { config = new System.Collections.Generic.Dictionary<string, string>(); } public string this[string key] { get { return config.ContainsKey(key) ? config[key] : null; } } public void Add(string key, string value) { if (!config.ContainsKey(key)) { config.Add(key, value); } } }

Coding Practice. Use an IP Guide retrieve your ip information

Intuduction When we need to check some IP address information , do we have to open the browser, then type the googl domain and copy-paste the IP address? In this article . I’m goinG to use python with IP GUIDE to check ipaddres information .This much better before. Let’s started Install Python found what version can be match your OS , download it and installl . https://www.python.org/downloads/ Install requests library website: https://pypi.org/project/requests/ $ python -m pip install requests Code #import requests library import requests #get data from ip guide response = requests.get(f'https://ip.guide/').json() #function get_ip def get_ip(): return response["ip"] #function get_location def get_location(): location_data = { "Latitude":response["location"]["latitude"], "Longitude" : response["location"]["longitude"], "City": response["location"]["city"], "Country": response["location"]["country"] } return location_data #function get_network def get_network(): network_data = { "Cidr": response["network"]["cidr"], "Host Start" : response["network"]["hosts"]["start"], "Host end" : response["network"]["hosts"]["end"] } return network_data #dictionary variable network_data = get_network() location_data = get_location() ipaddress = get_ip() # output information print(f"Your internet IPaddress is :{ipaddress}\n and below is this IPaddress other informations\n") # for loop for key,value in network_data.items(): print(f"{key}: {value}") print(" \n") for key,value in location_data.items(): print(f"{key}: {value}") print(" \n")Refrence https://ip.guide/ ...

小米盒子3 ADB 调试笔记 - MZD-16-AA debuging note

小米盒子3 ADB 调试笔记 2025.06.19 更新 缘由 广告太多 偶尔卡住不动(hung up) 盒子内存只有4GB, RAM 只有800M 根据以上一些缘由,所以想通过ADB调试来删减一些无用的资源,扩充一些资源来装Kodi和Smart tube。 准备工作 一条USB双公头的线 一个小米盒子3 型号为MZD-16-AA 一台笔记本 开始 打开盒子的ADB 调试模式 使用遥控器进入设置 关于 在“关于”选项中连续按“ok” 7次即可进入开发模式 在“設備名稱”中連續按多次“ok” 可開啟工廠模式 返回设置的 ”用户与安全“ 設置工廠模式功能 在 ”ADB调试“中将”关闭“调整为”开启“ USB 模式下的ADB 调试 下载SDK Platform tools SDK Platform tools 下载 Google USB driver Google USB driver 进入工具目录使用命令进行ADB调试 进入ADB 调试命令 $adb devices //显示设备 会以序列号开头在下方显示 (盒子会显示是否授权该电脑进行调试,请使用遥控器选择) $adb shell //进入shell 命令,到这里就可以通过命令去操作了 其它命令请见下方“常见命令” 网络模式下的ADB 调试 先决条件 盒子和其它调试电脑在同一局域网中 通过USB 模式下的ADB 调试,开启设备在5555端口监听 TCP/IP 连接 $adb tcpip 5555 通过局域网其它调试电脑进行连接 $adb connect 192.168.5.220 // 将地址改为盒子的IP地址即可。会默认连接目标地址的5555端口 其它命令请见下方的“常见命令” 常见命令 adb shell pm list packages -[option] 这个命令用于查看已经安装的应用并列出包名,后面添加不同选项可以输出不同信息。 ...

Excel日常小技巧

当遇到这种菜单需要组合数据,然后导入到收银软件数据库的时候。 我们可以 使用**"&"**号来组合数据 原表格数据如下 使用”&“符号组合数据 如下 在N5单元格中输入以下内容,及可将I7,J7,J8的数据组合在N5. =I7&J7&J8 使用“分列”功能拆分数据 根据ChatGPT生成翻译之后直接粘贴到表格的数据中如下 这个时候我们就可以使用**“分列”**功能来处理数据 一 二 三 四 此时已经到最后一步, 可以根据自身需求选择。 如果不需要,点击完成即可。 五 最终效果如下 参考: https://support.microsoft.com/en-us/office/combine-text-from-two-or-more-cells-into-one-cell-81ba0946-ce78-42ed-b3c3-21340eb164a6?ui=en-US&rs=en-US&ad=US

Using Python with the OpenWeather.org AP

Using Python with the OpenWeathermap.org API In these notes, we will explore how to utilize Python with a free weather API (Application Programming Interface) to retrieve the current weather for a specific city. What You Need to Install and Obtain Python and the ‘requests’ package Access to a Weather API Basic coding knowledge Install requests package $ python -m pip install requests #install package $ python -m pip show requests #display requests version ...

修改Discuz 中 UC center的创始人密码

解決辦法 进入discuz的安装目录,找到 ./uc_server/data/config.inc.php 文件 可以通过FTP连接服务器,或者直接登录服务器操作 使用下列两行替换 config.inc.php 文件中 UC_FOUNDERPW 和 UC_FOUNDERSALT 两行配置 这两行代表的是加密后的 UCenter 密码,这里的密码是 Discuz@2019 define('UC_FOUNDERPW', '6a8d7f5a1cc2a62ca6550adf2f1f421f'); define('UC_FOUNDERSALT', '208491');复制 刷新登录页面,再次输入重置后的 Discuz@2019 密码进行登录,已经可以成功登陆至 UCenter 后台 成功登陆后,就可以在后台直接修改密码了 来源: https://cloud.tencent.com/developer/article/1605905

有效的关闭Windows操作系统的更新

为什么要关闭Windows更新 微软有时候推送的更新会导致系统奔溃 影响正常工作、资料丢失 会有漏洞 更新失败导致的各种问题 关闭Windows更新之后会有什么影响 无法自动更新驱动程式 微软应用商店无法正常使用,微软商店的app 无法正常更新 无法自动更新.Net 运行库 我已经在设置里面关闭了自动更新, 它有效吗? 无用,Windows 的贴心服务会为你再次开启 如何彻底关闭Windows更新? 正常情况下 在系统设置、服务管理、注册表中设置好Windows的自动更新之后即可 在这里推荐使用sordum的 wub 软件的简单操作来实现一键关闭,而且永久有效哦。 复制下方链接到浏览器即可自动下载wub, 解压之后即可直接使用。 https://www.sordum.org/downloads/?st-windows-update-blocker

ReIcon 一款桌面图标整理和布局软件

ReIcon 一款桌面图标整理和布局软件 软件介绍 Reicon是便携式免费软件,使您能够保存和还原桌面布局。 如果您经常更改屏幕分辨率(例如,玩游戏或使用需要特定分辨率的应用程序),则您可能会熟悉桌面图标的问题,因为您切换回正常的分辨率后会陷入混乱。 Reicon通过允许您保存桌面布局来解决此问题,然后单击按钮(或使用右键单击上下文菜单)还原它。 Reicon非常易于使用。 设置您的图标,按照您喜欢它们的方式,保存布局,然后在需要时稍后还原该布局。 如何使用 GUI操作 将你想要的图标位置摆至你想要的坐标 点开Reicon程序,将布局保存好 选择你想要恢复的布局 ,在布局列表中鼠标右键选择恢复即可 命令行使用 Reicon还支持命令行操作 以下是命令操作指南 Usage: <command> [<additional commands>] Commands: /S : Save desktop icons layout /R : Restore desktop icon layout /File : Icon layout file location /ID : Desktop icon layout ID or order /Name : Desktop icon layout name Examples: ReIcon_x64.exe /S ReIcon_x64.exe /S /File C:\Test.ini /Name New icon layout /ID abc ReIcon_x64.exe /R ReIcon_x64.exe /R /ID abc ReIcon_x64.exe /R /ID 1 ReIcon_x64.exe /R /File C:\Test.ini /ID abc 以下批处理示例了使用Reicon命令行恢复图标布局 ...

Get the Old Right Click Menu Back in Windows 11

Windows11 基本设置 Windows11 鼠标右键显示更多选项 以管理员权限运行终端 在终端中输入以下内容 回车 系统会提示操作完成 reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve 操作完成之后重启exporer进程即可 Windwos11 安装系统跳过联机账户登录 安装Windows 11时 将设备离线 按住Shift+F10 呼出终端界面 在终端界面中输入一下内容 然后回车 oobe\BypassNRO.cmd 设备会自动重启,重启完成之后即可

打印服务器cups安装笔记

CUP 安装笔记 CUP 介绍 CUPS 是Apple inc 开源的打印服务 ,你可以将它部署在您的局域网内,将打印机接入该服务器,其它工作站可以通过局域网来访问打印机。 Official website: http://www.cups.org/index.html Github page: https://github.com/apple/cups CUPS支持局域网内打印服务共享,无需再繁琐的设置打印机共享了,并且还能将老打印机也接入局域网。同时还支持mac os, linux,windows,安卓以及ios air print; 笔记概要 Linux服务器版本 Ubuntu 18.4 下载并安装CUP CUP配置修改 使用WEB GUI 添加打印机 通过局域网访问打印机 配置文件说明 下载安装 sudo apt-get install cups cups-pdf cups-bsd #下载安装CUP 配置修改 sudo cp /etc/cups/cupsd.conf cupsd.conf.bak #备份配置文件 sudo nano /etc/cups/cupsd.conf #修改配置文件# # Configuration file for the CUPS scheduler. See "man cupsd.conf" for a # complete description of this file. # # Log general information in error_log - change "warn" to "debug" # for troubleshooting... LogLevel warn PageLogFormat # Deactivate CUPS' internal logrotating, as we provide a better one, especially # LogLevel debug2 gets usable now MaxLogSize 0 # Only listen for connections from the local machine. Listen 631 #更改监听端口 Listen /run/cups/cups.sock # Show shared printers on the local network. Browsing on #打开局域网发现打印机 BrowseLocalProtocols dnssd # Default authentication type, when authentication is required... DefaultAuthType Basic # Web interface setting... WebInterface Yes # Restrict access to the server... <Location /> #Order allow,deny Allow @LOCAL #允许LOCAL </Location> # Restrict access to the admin pages... <Location /admin> #Order allow,deny Allow @LOCAL #同上 </Location> # Restrict access to configuration files... <Location /admin/conf> #AuthType Default # Require user @SYSTEM #Order allow,deny Allow @LOCAL </Location> # Restrict access to log files... <Location /admin/log> #AuthType Default #Require user @SYSTEM #Order allow,deny Allow @LOCAL </Location>修改完配置之后重启服务 ...

公有云安装Panabit 专业版笔记

公有云安装Panabit 专业版 笔记 Release date: Dec 22,2022 Th . Panabit Version: R0.00[TANG(大唐)r3],Build date 20221031.132102 [Linux 3.10] Author: Duke Hsu 此笔记记录了使用单网卡轻量云服务器安装panabit的过程。 准备工作 云服务器 操作系统: Centos 7.6 x64 配置: 2C 8G 1 eth Panabit 材料 Panabit一键上传 云服务器工具(包含安装和解压 GUI.exe) Panabit专业版Linux安装包(LPanabitOEM_WUDAIr1_20201125_Linux3.tar.gz) 云服务器的IP地址和密码 云服务器需要开启SSH 端口和服务 安装步骤 云服务器初始化 关闭防火墙 #停止防火墙 systemctl stop firewalld #关闭开机自启动 systemctl disable firewalld检查网卡配置 #打印IP地址信息 ifconfig #查看网卡详细信息(ifcfg-eth0为网卡名,有些不一样,视情况而定) cat /etc/sysconfig/network-scripts/ifcfg-eth0记录下来IP地址信息以备稍后做Panabit配置使用 Panabit安装 使用GUI.exe 工具根据提示 将安装包上传到云服务器 全自动安装 重启服务器之后即可使用web登入Panabit进行管理 如果无法访问请检查管理口名称是否与云服务器网卡名不一致 如果提示安全问题,请使用低版本的chrome浏览器访问,比如360急速浏览器 Panabit 配置 网络接口配置 在<系统概况>将eth接口方向更改为接外 在应用路由-接口线路-WAN线路 添加一个接口 如下图 ...

批处理跳过显卡驱动版本检测

由于某些游戏在运行时候会检测显卡驱动版本,如果不是最新版本就需要更新,某些时候太麻烦了,索性使用批处理更改文件名来实现跳过显卡驱动版本检测。下面的示例以Windows操作系统为主。 Tips: 将下面的命令保存为批处理(bat)格式的文件即可在Windows下执行。 重命名NVAPI文件 if exist C:\Windows\System32\nvapi64.Old goto Old chdir /d C:\Windows\System32 ren nvapi64.dll nvapi64.Old echo @ Named pause goto End恢复NVAPI文件名 :Old chdir /d C:\Windows\System32 ren nvapi64.Old nvapi64.dll echo @ Renamed pause goto End :End

TCP端口连通性检测工具-tcping

TCPING介绍 tcping 是由美国人 Eli Fulkerson先生用C++ 编写的一个开源网络检测工具;你可以下载可执行文件, 也可以下载源码自行编译。 Offical website: https://download.elifulkerson.com/files/tcping/0.39/ tcping和ping类似,也是用于检测网络连通性的一个工具。不同于ping的是,tcping 可以检查端口,更多的用法请在程序中执行 ? 来查阅。 程序的帮助信息 使用tcping检测应用程序的端口延迟 从Eli Fulkerson 的网站下载下来,通过命令行的方式来运行 在程序所在目录输入程序 和目标地址进行检测 .\tcping.exe google.com 443 //.\tcping.exe 目标地址/域名 目标端口即可获得结果,也可以在程序后面添加参数 .\tcping.exe -t google.com 443 //.\tcping.exe -t 目标地址/域名 目标端口 (-t长ping).\tcping.exe -h google.com //.\tcping.exe -h 目标地址/域名 目标端口示例图 使用tcping来检查网络游戏的网络波动 当我接到有用户反馈网络游戏延迟高或者连接不上的时候,通常我会使用tcping,tracert,nslookup,ping 这几个命令来协助排查故障;总结一下几个步骤如下 拿到与游戏相关的服务器地址 有时候游戏服务器是通过域名连接,我会使用nslookup检查解析地址 使用ping检查基本的延迟状态 有些游戏服务器禁ping,我会使用tracert 来跟踪路由,顺便找一下游戏连接的端口(后面使用tcping检查端口) 使用tracert跟踪路由 运营商链路调整 有时候会影响游戏体验;某个节点断掉 tracert可以协助你判断路由节点的问题 使用tcping检查游戏服务器端口延迟和是否开放 有些游戏是UDP协议,我会用hping,或者nc。基本上tcping已经很够用所以我这里只介绍tcping。 前面的文章 使用 PsPing进行网络测试 https://www.itiohub.com/share/psping.html 以上所述内容均以Windows操作系统为主。 如果你有其它更好用的工具 ,欢迎在下方留言分享。

C# Classes and Objects

What is Classes in C#? Objects Access Modifiers https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/access-modifiers https://www.cnblogs.com/xinaixia/p/5775471.html Code using System; //class declaration public class Car { //instance 6 variables String name; String color; String transmission; String bodytype; int seat; int year; //constructor declaration of class public Car(String name, String color, String transmission, String bodytype, int seat, int year) { this.name = name; this.color = color; this.transmission = transmission; this.bodytype = bodytype; this.seat = seat; this.year = year; } //property 6 public String getName() { return name; } public String getColor() { return color; } public String getTransmission() { return transmission; } public String getType() { return bodytype; } public int getSeat() { return seat; } public int getYear() { return year; } //method public String ToString() { return ("This is Car detail- CarName:" + this.getName() + "\n Color :" + this.getColor() + "\n Transmission: " + this.getTransmission() + "\n Body type: " + this.getType() + "\n Seat : " + this.getSeat() + "\n Year: " + this.getYear())+"\n ================="; } //main method public static void Main(string[] args) { // 5 object Car Toyota = new Car("Toyota Rush", "Silver", "Auto", "SUV", 7, 2020); Car Bmw = new Car("BMX X1", "Silver", "Auto", "SUV", 7, 2022); Car Honda = new Car("Accord", "Black", "Auto", "Sedan", 4, 2016); Car Tesla = new Car("Tesla S", "Red", "Auto", "Sedan", 4, 2017); Car Mazda = new Car("Mazda 929 Legato", "White", "Manual", "Sedan", 4, 1980); //output Console.WriteLine(Toyota.ToString()); Console.WriteLine(Bmw.ToString()); Console.WriteLine(Honda.ToString()); Console.WriteLine(Tesla.ToString()); Console.WriteLine(Mazda.ToString()); Console.WriteLine("==============\n Thank you !"); //out put date and time DateTime now = DateTime.Now; Console.WriteLine("Print date: " + now); Console.ReadLine(); } }

搜尋文章

輸入標題、分類或文章內容

開始輸入以搜尋文章