当前位置: 首页 > news >正文

用C++编写信息管理系统(歌单信息管理)

C语言是面向过程的编程语言,而C++是面向对象的编程语言,在书写代码时风格有所不同(也存在很多共性)。

程序说明

本次系统程序使用的是C++语言进行编写,主要考虑怎么实现面向对象的问题。

因为本次程序属于小型系统程序,所以采用两个源文件实现(不考虑头文件的使用)

①使用两个类(一个用来存放数据成员,另一个用来封装成员函数以完成功能的实现)

②书写菜单相关的代码(页面展示、判断进程等)

该程序的名字为“歌单信息管理系统”,主要采用“增删改查”的形式实现。使用的数据成员有:歌曲名字、歌手名字、歌曲的发布时间、专辑唱片、自定义代号。对于目前的娱乐方式来说,“听歌”有着不可替代的作用。歌曲可以用来烘托氛围,也可以是用来治愈心灵......

数据存储

采用文本存储数据(也可以用数据库实现数据存储)

首先准备txt文本文件(txt文本作为数据信息的载体),接着编写读写过程,最后合理调用读写函数。

在文本文件中的格式:每一首歌曲信息占一行;每一条数据使用空格隔开如下图所示

代码实现

1.菜单功能实现

#include"iostream"
#include"辅助.cpp"
#include"string"
using namespace std;
void menu() {//菜单功能(展示需要使用的几个功能)system("cls");cout << "\t\t\t************************************************" << endl;cout << "\t\t\t******************歌单信息管理******************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************1.歌曲信息录入******************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************2.歌单信息显示******************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************3.歌曲查询**********************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************4.歌曲信息修改******************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************5.歌曲删除**********************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************6.歌曲总数量********************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t****************0.退出并保存********************" << endl;cout << "\t\t\t************************************************" << endl;cout << "\t\t\t输入你的选择【0 - 6】:";
}
MusicList ml;   //使用一个类封装的变量方便进行调用
void add() {//添加歌单的歌曲system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*       欢迎来到歌曲信息录入功能界面        *" << endl;cout << "\t\t\t*********************************************" << endl;cout << "\n\n" << endl;int select1, n;cout << "\t\t\t\t《是否要录入歌曲信息?》       " << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t ****      1 是                 2 否      ****" << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t输入你的选择【1 or 2】:";cin >> select1;while (select1 < 1 || select1 > 2) {cout << "\t\t\t输入错误,请重新输入你的选择【1 or 2】:";cin >> select1;}if (select1 == 2) {return;}else if (select1 == 1) {while (1) {           //整体输入的循环操作cout << "请输入需录取歌曲的数目:";cin >> n;for (int i = 0; i < n; i++) {cout << "请输入第" << i + 1 << "首歌曲信息:" << endl;string song, name, time, album, id;cout << "请输入歌曲名字:";cin >> song;cout << "请输入歌手名字:";cin >> name;cout << "请输入歌曲发布时间:";cin >> time;cout << "请输入歌曲所属专辑:";cin >> album;cout << "请输入歌曲自定义代号:";while (1) {        //虽然是自定义的代号,也需要确定代号的唯一性,此处循环的作用cin >> id;Music mi = ml.findById(id);     //定义mi变量用来存储查找的数据if (mi.getId() != "") {cout << "此代号已存在,请重新输入:";}else {Music m(song, name, time, album, id);   //定义一个m变量存储输入的数据ml.addMusic(m);cout << "已完成本歌曲的录入\n" << endl;system("pause"); cout << endl;break;//输入完成就结束}}}int select2;system("cls");cout << "\n\n" << endl;        //考虑是否继续添加数据cout << "\t\t\t ************是否继续录入歌曲信息*************" << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t **      1 确定                 2 放弃      **" << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t输入你的选择【1 or 2】:";cin >> select2;while (select2 < 1 || select2>2){cout << "\t\t\t输入错误,请重新输入你的选择【1 or 2】:";cin >> select2;}if (select2 == 2){return;}}}
}
void show() {//歌单的显示功能system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*     欢迎来到个人歌单信息显示功能界面      *" << endl;cout << "\t\t\t*********************************************" << endl;cout << "\n\n" << endl;ml.show();  //直接调用打印显示的函数
}
void search() {//歌单搜索歌曲的功能while (1) {system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*     欢迎来到个人歌单信息查询功能界面      *" << endl;cout << "\t\t\t*********************************************" << endl;cout << endl; cout << endl;while (1) {cout << "1.按照歌曲查找\n2.按照歌手查找\n3.按照专辑查询\n4.按照代号查询\n5.退出" << endl;cout << endl;cout << "请输入你的选择:";int flag;cin >> flag;while (flag < 1 || flag > 5) {   //必须输入的选项是在1-5的范围才能够正常运行cout << "\t\t\t输入错误,请重新输入你的选择【1 - 5】:";cin >> flag;}if (flag == 1) {   //按照歌曲的名字进行查找system("cls");cout << "请输入查找的歌曲:";string song;cin >> song;MusicList mlt = ml.findBySong(song);   //调用查找函数并把数据存储在mltif (mlt.getCount() != 0)mlt.show();elsecout << "查无此歌曲" << endl;system("pause");break;}else if (flag == 2) {      //按照歌手的名字进行查找system("cls");cout << "请输入查找的歌手:";string name;cin >> name;MusicList mlt = ml.findByName(name);     //调用查找函数并把数据存储在mltif (mlt.getCount() != 0)mlt.show();elsecout << "查无此歌手" << endl;system("pause");break;}else if (flag == 3) {         //按照专辑进行查找system("cls");cout << "请输入查找的专辑:";string album;cin >> album;MusicList mlt = ml.findByAlbum(album);    //调用查找函数并把数据存储在mltif (mlt.getCount() != 0)mlt.show();elsecout << "查无此专辑" << endl;system("pause");break;}else if (flag == 4) {      //按照代号来进行查找system("cls");cout << "请输入查找的代号:";    string id;cin >> id;Music m = ml.findById(id);   //比对存放的数据是否和目前输入的一样if (m.getId() != "")    //如果不是空的就说明存在数据并且给它输出m.show();elsecout << "查无此代号" << endl;system("pause");break;}else {return;    //退出功能代码}}}
}
void modify() {//歌单中歌曲的修改功能
while (1) {system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*     欢迎来到个人歌单信息修改功能界面      *" << endl;cout << "\t\t\t*********************************************" << endl;cout << endl; cout << endl;cout << "请输入准备修改的歌曲代号(输入#可退出):";string song, name, time, album, id;cin >> id;Music m = ml.findById(id);       //先比对歌曲是否正确(存在)if (id == "#") { return; }else if (m.getId() != "") {cout << "此歌曲识别已存在" << endl;m.show();                  //存在就展示歌曲信息cout << "请输入修改的歌曲名字:";cin >> song;cout << "请输入修改的歌手名字:";cin >> name;cout << "请输入修改的发布时间:";cin >> time;cout << "请输入修改的专辑名称:";cin >> album;Music m(song, name, time, album, id);       //将信息存储在m里面,并调用函数进行修改操作ml.modify(m);int select2;cout << "\t\t\t************是否继续修改歌曲信息*************" << endl;cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t**      1 确定                 2 放弃      **" << endl;cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t输入你的选择【1 or 2】:";cin >> select2;while (select2 < 1 || select2>2){cout << "\t\t\t输入错误,请重新输入你的选择【1 or 2】:";cin >> select2;}if (select2 == 2){return;}else if (select2 == 1) {system("cls");cout << endl; cout << endl;}}else {                   //歌曲如果不存在就显示“查无此歌曲”cout << "查无此歌曲,请你重新输入" << endl;cout << endl;system("pause");cout << "\n" << endl;}}
}
void del() {//歌单中歌曲的删除功能while (1) {system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*     欢迎来到个人歌单信息删除功能界面      *" << endl;cout << "\t\t\t*********************************************" << endl;cout << endl; cout << endl;cout << "1.按照歌曲代号查找\n2.退出" << endl;cout << endl;cout << "请输入你的选择:";int flag1;cin >> flag1;while (flag1 < 1 || flag1>2){cout << "输入错误,请重新输入你的选择【1 or 2】:";cin >> flag1;}if (flag1 == 2) {return;}else{system("cls");cout << "请输入查找的歌曲代号:";string id;cin >> id;Music m = ml.findById(id);         //比对歌曲的代号if (m.getId() != "") {cout << "存在此代号歌曲:" << endl;m.show();                 //存在就显示歌曲的信息int select5;cout << "\t\t\t\t《是否要删除歌曲信息?》       " << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t ****      1 是                 2 否      ****" << endl;cout << "\t\t\t *********************************************" << endl;cout << "\t\t\t输入你的选择【1 or 2】:";cin >> select5;while (select5 < 1 || select5 > 2) {cout << "\t\t\t输入错误,请重新输入你的选择【1 or 2】:";cin >> select5;}if (select5 == 1) {cout << "已删除成功" << endl;system("pause");ml.delMusic(id);             //调用删除函数进行操作}else{cout << "已取消删除" << endl;system("pause");       //停顿用来显示“已取消删除”}}else {cout << "不存在此代号的歌曲!" << endl;cout << endl;cout << endl;cout << endl;cout << endl;system("pause");    //停顿用来显示“不存在此代号的歌曲”}}}
}
void getCount() {system("cls");cout << "\t\t\t*********************************************" << endl;cout << "\t\t\t*     欢迎来到个人歌单信息统计功能界面      *" << endl;cout << "\t\t\t*********************************************" << endl;cout << endl; cout << endl;cout << "总共:【" << ml.getCount() << "】首歌" << endl;        //直接调用函数展示歌曲数目cout << endl; cout << endl;
}
int main() {int n = 7;while (n) {menu();          //调用主菜单函数进入选择界面cin >> n;//输入编号选择相应的功能switch (n){case 1:add(); break;case 2:show(); break;case 3:search(); break;case 4:modify(); break;case 5:del(); break;case 6:getCount(); break;case 0:ml.writeFile();}system("pause");}
}

2.封装

#include"iostream"
#include"string"
#include"fstream"
using namespace std;
class Music {string song, name, time, album, id;//歌曲、歌手、发布时间、专辑唱片、代号
public:Music() {}//默认构造函数Music(string song, string name, string time, string album, string id) ://构造函数初始化列表song(song), name(name), time(time), album(album), id(id) {}string getSong() { return song; }//信息数据的获取void setSong(string song) { this->song = song; }//this指针区分不同对象的成员变量string getName() { return name; }void setName(string name) { this->name = name; }string getTime() { return time; }void setTime(string time) { this->time = time; }string getAlbum() { return album; }void setAlbum(string album) { this->album = album; }string getId() { return id; }void setId(string id) { this->id = id; }void show() {//显示的模版showcout << "歌曲:" << song << endl;cout << "歌手:" << name << endl;cout << "发布时间:" << time << endl;cout << "专辑:" << album << endl;cout << "代号:" << id << endl;cout << "------------------------" << endl;}friend ostream& operator<<(ostream& out, const Music& o) {out << o.song << "\t" << o.name << "\t" << o.time << "\t" << o.album << "\t" << o.id;return out;}friend istream& operator>>(istream& in, Music& o) {in >> o.song >> o.name >> o.time >> o.album >> o.id;return in;}//运算符重载
};
class MusicList {Music mus[1024];//定义一个数组大小存储数据int count;string filename;
public:MusicList(string filename = "music.txt") :filename(filename), count(0) {readFile();//读取文件操作}~MusicList() {writeFile();//写入文件操作}int getCount() {//统计总人数return count;}void addMusic(Music s) {mus[count++] = s;//随着添加的使用,人数也跟着增加}void show() {for (int i = 0; i < count; i++) {mus[i].show();//显示(打印显示)把所有的数据都依次显示出来}}MusicList findBySong(string song) {//按照歌曲名字查询MusicList m("");for (int i = 0; i < count; i++) {if (mus[i].getSong() == song) {m.addMusic(mus[i]);//如果查找到就在m里面添加一个数据}}return m;  //返回m的数据(值)}MusicList findByName(string name) {//按照歌手查询MusicList m("");for (int i = 0; i < count; i++) {if (mus[i].getName() == name) {//如果查找到就在m里面添加一个数据m.addMusic(mus[i]);}}return m; //返回m的数据(值)}MusicList findByAlbum(string album) {//按照专辑查询MusicList m("");for (int i = 0; i < count; i++) {if (mus[i].getAlbum() == album) {//如果查找到就在m里面添加一个数据m.addMusic(mus[i]);}}return m;//返回m的数据(值)}Music findById(string id) {//按照代号查找for (int i = 0; i < count; i++) {if (mus[i].getId() == id) {//如果查找到就直接返回一个值return mus[i];}}return Music();}void modify(Music m) {//修改歌曲的信息for (int i = 0; i < count; i++) {if (mus[i].getId() == m.getId()) {//找到并修改(匹对相同的信息)mus[i].setSong(m.getSong());mus[i].setName(m.getName());mus[i].setTime(m.getTime());mus[i].setAlbum(m.getAlbum());//更改数据}}}void delMusic(string id) {int i;for (i = 0; i < count; i++) {//首先查找需要删除的歌曲是否存在if (mus[i].getId() == id)break;//如果找到就结束}if (i == count)//没有找到同样也结束并且退出return;for (int j = i; j < count - 1; j++) {//删除mus[j] = mus[j + 1];//把数组中所有的元素往前面移动}count--;//减少}void writeFile() {//写入if (count == 0 || filename == "")return; //数据为0或者文件名为空的时候不进行写入的操作ofstream outf(filename.c_str(), ios::out);if (!outf) {cout << "create file fail" << endl;//文件打开失败return;}for (int i = 0; i < count; i++) {outf << mus[i];//依次写入数据if (i < count - 1)outf << "\n";}outf.close();}void readFile() {//读取if (filename == "")return;//文件名为空的时候不进行读取的操作ifstream inf(filename.c_str());if (!inf) {cout << "open file fail" << endl;//文件打开失败return;}while (!inf.eof()) {Music m;inf >> m;if (m.getId() != "")addMusic(m);}inf.close();}
};

相关文章:

用C++编写信息管理系统(歌单信息管理)

C语言是面向过程的编程语言&#xff0c;而C是面向对象的编程语言&#xff0c;在书写代码时风格有所不同&#xff08;也存在很多共性&#xff09;。 程序说明 本次系统程序使用的是C语言进行编写&#xff0c;主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…...

对层级聚类树进行模块分割,定位基因在哪个模块中

拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?pageb%27Ng%3D%3D%27)&#xff0c;并设置参数. ID untrt_N61311 untrt_N052611 untrt_N080611 untrt_N061011 trt_N61311 trt_N052611 trt_N080611 trt_N061011 ENSG000…...

机器学习【金融风险与风口评估及其应用】

机器学习【金融风险与风口评估及其应用】 一、机器学习在金融风险评估中的应用1.提升评估准确性2.实现自动化和智能化3.增强风险管理能力4.信用评估5.风险模型6.交易策略7.欺诈检测 二、机器学习在金融风口评估中的应用1.识别市场趋势2.评估创新潜力3.优化投资策略4. 自然语言处…...

【计算机网络 - 基础问题】每日 3 题(三十八)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…...

深入浅出MongoDB(五)

深入浅出MongoDB&#xff08;五&#xff09; 文章目录 深入浅出MongoDB&#xff08;五&#xff09;可重试读取可重试写入读关注readConcern支持写关注 可重试读取 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时&#xff0c;自动重试某些读取操作一次。只有连接到…...

【conda】创建、激活、删除虚拟环境

前言一、创建虚拟环境二、删除虚拟环境总结 前言 主要是记录一下步骤 一、创建虚拟环境 地址栏输入cmd&#xff0c;唤起命令符栏目&#xff0c;就可以在指定目录下创建虚拟环境了。 这样方便日后在pycharm直接配置虚拟环境。 conda create -n yolo5-lite python3.9 -y简单来说…...

关于int*的*号归属权问题

再根据函数指针定义&#xff1a;int (*int) (int a)。我们发现*和后面的标识符才是一体的 所以int *a,b;的写法更好&#xff0c;说明a是指针类型&#xff0c;b是int类型...

leetcode---素数,最小质因子,最大公约数

1 判断一个数是不是质数(素数) 方法1&#xff1a;依次判断能否被n整除即可&#xff0c;能够整除则不是质数&#xff0c;否则是质数 方法2&#xff1a;假如n是合数&#xff0c;必然存在非1的两个约数p1和p2&#xff0c;其中p1<sqrt(n)&#xff0c;p2>sqrt(n)。 方法3&…...

基于stm32的蓝牙模块实验

蓝牙模块定长或不定长发送 头文件 #include "stdio.h" #include "sys.h"#define UART2_RX_BUF_SIZE 128 #define UART2_TX_BUF_SIZE 64UART_HandleTypeDef uart2_handle;uint8_t uart2_rx_buf[UART2_RX_BUF_SIZE]; uint16_t uart2_rx_len 0; void b…...

C语言解决TopK问题

前言&#xff1a; 本文TopK问题是在数据量很大的前提下进行解决&#xff0c;当数据量足够大时&#xff0c;内存中存不下&#xff0c;只能存到文件硬盘中。当存到硬盘中&#xff0c;我们无法用建堆&#xff0c;一个一个pop取出最值的方式解决&#xff0c;因为我们没法在硬盘中去…...

磁盘存储链式结构——B树与B+树

红黑树处理数据都是在内存中&#xff0c;考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大&#xff0c;大到内存已经没办法处理了该怎么办呢&#xff1f; 试想一下&#xff0c;为了要在一个拥有几十万个文件的磁盘中查找一个文本文件&#xff0c;设计的…...

如何批量从sql语句中提取表名

简介 使用的卢易表 的提取表名功能&#xff0c;可以从sql语句中批量提取表名。采用纯文本sql语法分析&#xff0c;无需连接数据库&#xff0c;支持从含非sql语句的文件文件中提取&#xff0c;支持各类数据库sql语法。 特点 快&#xff1a;从成百个文件中提取上千个表名只需1…...

怎么把音频的速度调慢?6个方法调节音频速度

怎么把音频的速度调慢&#xff1f;调慢音频速度不仅可以帮助我们更好地捕捉细节&#xff0c;还能让我们在分析和学习时更加从容。这对于音乐爱好者来说&#xff0c;尤其有助于理解复杂的旋律和和声&#xff0c;使学习过程变得更加高效。而在语言学习中&#xff0c;放慢语速则能…...

K8s-services+pod详解1

一、Service 我们能够利用Deployment创建一组Pod来提供具有高可用性的服务。 虽然每个Pod都会分配一个单独的Pod IP&#xff0c;然而却存在如下两问题&#xff1a; Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP&#xff0c;外部无法访问 这样对于访问这…...

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络

文章目录 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09;1. 什么是RNN&#xff1f;2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖&#xff08;Long-TermDependencies&#xff09;问题 LSTM&#xff08;Long Short-Term Memory&a…...

python:假的身份信息生成模块faker

前言 发现一个有趣的python模块&#xff08;faker&#xff09;&#xff0c;他支持生成多个国家语言下的假身份信息&#xff0c;包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历&#xff01; 你可以拿它做一些自动化测试&#xff0c;或一些跟假数据有关的填充工作。 代…...

spring task的使用场景

spring task 简介 spring task 是spring自带的任务调度框架按照约定的时间执行某个方法的工具&#xff0c;类似于闹钟 应用场景 cron表达式 周和日两者必定有一个是问号 简单案例...

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议

我们在使用畅联云平台进行视频汇聚时&#xff0c;经常会用的GB/T 28181协议&#xff0c;前面我们写了关于GB/T 28181的相关介绍&#xff0c;​ 详见《畅联云平台&#xff5c;关于GB28181你了解多少&#xff1f;》。 ​最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用

uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS&#xff08;鸿蒙系统&#xff09;&#xff0c;uni-app 提供了特定的支持&#xff0c;允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...

代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树

669. 修剪二叉搜索树 题目 参考文章 思路&#xff1a;这题其实就是删除不符合上下边界的节点。注意&#xff1a;这里删除不符合上下边界节点时&#xff0c;这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点&#xff0c;所i有每次比较完之后&#xff0c;要继…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战

“&#x1f916;手搓TuyaAI语音指令 &#x1f60d;秒变表情包大师&#xff0c;让萌系Otto机器人&#x1f525;玩出智能新花样&#xff01;开整&#xff01;” &#x1f916; Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制&#xff08;TuyaAI…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)

1.获取 authorizationCode&#xff1a; 2.利用 authorizationCode 获取 accessToken&#xff1a;文档中心 3.获取手机&#xff1a;文档中心 4.获取昵称头像&#xff1a;文档中心 首先创建 request 若要获取手机号&#xff0c;scope必填 phone&#xff0c;permissions 必填 …...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...