用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语言是面向过程的编程语言,而C是面向对象的编程语言,在书写代码时风格有所不同(也存在很多共性)。 程序说明 本次系统程序使用的是C语言进行编写,主要考虑怎么实现面向对象的问题。 因为本次程序属于小型系统程序&…...

对层级聚类树进行模块分割,定位基因在哪个模块中
拷贝数据到 ImageGP (http://www.ehbio.com/Cloud_Platform/front/#/analysis?pageb%27Ng%3D%3D%27),并设置参数. 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 题(三十八)
✍个人博客:https://blog.csdn.net/Newin2020?typeblog 📣专栏地址:http://t.csdnimg.cn/fYaBd 📚专栏简介:在这个专栏中,我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞…...
深入浅出MongoDB(五)
深入浅出MongoDB(五) 文章目录 深入浅出MongoDB(五)可重试读取可重试写入读关注readConcern支持写关注 可重试读取 可重试读取允许mongodb驱动程序在遇到某些网络或服务器错误时,自动重试某些读取操作一次。只有连接到…...

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

关于int*的*号归属权问题
再根据函数指针定义:int (*int) (int a)。我们发现*和后面的标识符才是一体的 所以int *a,b;的写法更好,说明a是指针类型,b是int类型...

leetcode---素数,最小质因子,最大公约数
1 判断一个数是不是质数(素数) 方法1:依次判断能否被n整除即可,能够整除则不是质数,否则是质数 方法2:假如n是合数,必然存在非1的两个约数p1和p2,其中p1<sqrt(n),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问题
前言: 本文TopK问题是在数据量很大的前提下进行解决,当数据量足够大时,内存中存不下,只能存到文件硬盘中。当存到硬盘中,我们无法用建堆,一个一个pop取出最值的方式解决,因为我们没法在硬盘中去…...

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

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

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

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

从RNN讲起(RNN、LSTM、GRU、BiGRU)——序列数据处理网络
文章目录 RNN(Recurrent Neural Network,循环神经网络)1. 什么是RNN?2. 经典RNN的结构3. RNN的主要特点4. RNN存在问题——长期依赖(Long-TermDependencies)问题 LSTM(Long Short-Term Memory&a…...
python:假的身份信息生成模块faker
前言 发现一个有趣的python模块(faker),他支持生成多个国家语言下的假身份信息,包含人名、地址、邮箱、公司名、电话号码、甚至是个人简历! 你可以拿它做一些自动化测试,或一些跟假数据有关的填充工作。 代…...

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

美畅物联丨剖析 GB/T 28181 与 GB 35114:视频汇聚领域的关键协议
我们在使用畅联云平台进行视频汇聚时,经常会用的GB/T 28181协议,前面我们写了关于GB/T 28181的相关介绍, 详见《畅联云平台|关于GB28181你了解多少?》。 最近也有朋友向我们咨询GB 35114协议与GB/T 28181有什么不同…...

uni-app 开发的应用快速构建成鸿蒙原生应用
uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它支持编译到 iOS、Android、小程序等多个平台。对于 HarmonyOS(鸿蒙系统),uni-app 提供了特定的支持,允许开发者构建鸿蒙原生应用。 一、uni-app 对 HarmonyOS 的支…...
代码随想录算法训练营| 669. 修剪二叉搜索树 、 108.将有序数组转换为二叉搜索树 、 538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目 参考文章 思路:这题其实就是删除不符合上下边界的节点。注意:这里删除不符合上下边界节点时,这个不符合上下边界的节点的左或右子树可能存在符合上下边界的节点,所i有每次比较完之后,要继…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

STM32---外部32.768K晶振(LSE)无法起振问题
晶振是否起振主要就检查两个1、晶振与MCU是否兼容;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容(CL)与匹配电容(CL1、CL2)的关系 2. 如何选择 CL1 和 CL…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Python网页自动化Selenium中文文档
1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API,让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API,你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
指南针功能是许多位置服务应用的基础功能之一。下面我将详细介绍如何在HarmonyOS 5中使用DevEco Studio实现指南针功能。 1. 开发环境准备 确保已安装DevEco Studio 3.1或更高版本确保项目使用的是HarmonyOS 5.0 SDK在项目的module.json5中配置必要的权限 2. 权限配置 在mo…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...
用递归算法解锁「子集」问题 —— LeetCode 78题解析
文章目录 一、题目介绍二、递归思路详解:从决策树开始理解三、解法一:二叉决策树 DFS四、解法二:组合式回溯写法(推荐)五、解法对比 递归算法是编程中一种非常强大且常见的思想,它能够优雅地解决很多复杂的…...