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

news2024/11/23 1:30:20

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);   //调用查找函数并把数据存储在mlt
				if (mlt.getCount() != 0)
					mlt.show();
				else
					cout << "查无此歌曲" << endl;
				system("pause");
				break;
			}
			else if (flag == 2) {      //按照歌手的名字进行查找
				system("cls");
				cout << "请输入查找的歌手:";
				string name;
				cin >> name;
				MusicList mlt = ml.findByName(name);     //调用查找函数并把数据存储在mlt
				if (mlt.getCount() != 0)
					mlt.show();
				else
					cout << "查无此歌手" << endl;
				system("pause");
				break;
			}
			else if (flag == 3) {         //按照专辑进行查找
				system("cls");
				cout << "请输入查找的专辑:";
				string album;
				cin >> album;
				MusicList mlt = ml.findByAlbum(album);    //调用查找函数并把数据存储在mlt
				if (mlt.getCount() != 0)
					mlt.show();
				else
					cout << "查无此专辑" << 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();
				else
					cout << "查无此代号" << 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() {//显示的模版show
		cout << "歌曲:" << 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();
	}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C++学习】核心编程之类和对象(上)黑马学习笔记—超详细

目录 &#xff08;一&#xff09;封装 1.1 封装的意义&#xff1a; 意义一&#xff1a;在设计类的时候&#xff0c;属性和行为写在一起&#xff0c;表现事物 意义二&#xff1a;类在设计时&#xff0c;可以把属性和行为放在不同的权限下&#xff0c;加以控制 1.2 struct和…

【vue】组件及组件化+组件⽣命周期

代码获取 04-组件及组件化组件⽣命周期 ⼀、组件及组件化 1. 为什么需要组件&#xff1f; 1.1 思考 以可折叠⾯板为例, 现要展⽰3个, 如何操作? 可折叠⾯板案例的代码 &#xff1a; <script setup> import { ref } from vue const visible ref(false) </scri…

Day14

std::string的底层实现 三种方式&#xff1a; 深拷贝 写时复制 短字符串优化 深拷贝 无论什么情况&#xff0c;都是采用拷贝字符串内容的方式解决。不需要改变字符串内容时&#xff0c;对字符串进行频繁复制。 用一个string对象初始化另一个string对象时&#xff0c;源对…

MySQL SELECT 查询(三):查询常用函数大全

MySQL SELECT 查询&#xff08;三&#xff09;&#xff1a;查询常用函数大全 1. 单行函数 单行函数是 SQL 中一类重要的函数&#xff0c;它们可以对单行数据进行处理&#xff0c;并返回单个结果。单行函数可以嵌套使用&#xff0c;并提供灵活的数据处理能力。 1.1 定义 只对单…

微知-Mellanox网卡如何导出firmware中的config文件以及文件中有些什么?(ini配置文件,8个区)

背景 Mellanox网卡早期版本以及Engineer simple的DPU支持导出配置文件&#xff0c;该配置文件就是用来告诉firmware的行为。但不是mlxconfig真正设置的文件(mlxconfig -d xxx -e -q应该就是把这个文件读取出来&#xff0c;并且有3个文件&#xff0c;包括默认的&#xff0c;当前…

攻防世界2

forgot 发现是32位文件 fgets(s, 32, stdin)限制读入32位字符&#xff0c;无法利用 __isoc99_scanf("%s", v2) 典型的栈溢出 发现cat flag 覆盖v2-v3&#xff0c;覆盖为cat flag的函数地址 exp&#xff1a; from pwn import * context(oslinux,archamd64,log_lev…

芋道快速开发平台学习笔记

1.接口文档配置 基础知识:SpringDoc注解的使用,它是基于OpenAPI 3和Swagger 3的现代化解决方案,相较于旧版的Swagger2即SpringFox,SpringDoc提供了更简洁、更直观的注解方式。 详见springboot集成springdoc-openapi(模拟前端请求)_springdoc-openapi-ui-CSDN博客 doc文档配置…

c++面向对象三大特性——多态详解与虚函数,虚函数底层

目录 前言&#xff1a; 1. 多态的概念 1.1 概念 2. 多态的定义及实现 2.1多态的构成条件 2.2 虚函数 2.3虚函数的重写 2.4 C11 override 和 final 2.5 重载、覆盖(重写)、隐藏(重定义)的对比 3. 抽象类 3.1 概念 3.2 接口继承和实现继承 4.多态的原理 4.1虚函数表 …

7.1-I2C的中断

I2C的中断与DMA 回顾 HAL_I2C_MASTER_Transmit(&hi2c1,ADRESS,PDate,Size,Time);HAL_I2C_MASTER_Receive(&hi2c1,ADRESS,PDate,Size,Time);通信具体过程如下&#xff1a; 在I2C的轮询模式中 发送时&#xff1a;CPU将以主机0x70 发送 从机 ACK 回复 主机0xAC发送 A…

⽂件的操作

1. 为什么使⽤⽂件&#xff1f; 如果没有⽂件&#xff0c;我们写的程序的数据是存储在电脑的内存中&#xff0c;如果程序退出&#xff0c;内存回收&#xff0c;数据就丢失了&#xff0c;等再次运⾏程序&#xff0c;是看不到上次程序的数据的&#xff0c;如果要将数据进⾏持久化…

深圳大学-Java程序设计-必实验2 类的高级应用

实验目的与要求&#xff1a; 实验目的&#xff1a;熟悉面向对象编程中类的编写。 实验要求&#xff1a; (1).请自行选择2023年成都大运会或2023杭州亚运会。大型运动会通常包括众多比赛项目。请通过分析&#xff0c;抽象它们所共有的性质&#xff0c;定义一个关于比赛项目的抽…

点评项目-6-缓存更新策略、缓存穿透、雪崩

缓存更新策略 使用 redis 缓存记录的信息&#xff0c;有可能在数据库被信息被修改导致信息不一致&#xff0c;使用缓存更新来解决这个问题 缓存更新策略主要有三种&#xff1a; 1.内存淘汰(redis默认开启) 2.超时剔除(给key添加TTL时间) 3.主动更新(编写业务逻辑) 主动更新策…

网络通信与并发编程(一)网络通信、osi五层模型、tcp协议的三次握手与四次挥手

网络通信、osi五层模型、tcp协议的三次握手与四次挥手 文章目录 网络通信、osi五层模型、tcp协议的三次握手与四次挥手一、网络通信二、osi五层模型1.物理层2.数据链路层3.网络层4.传输层5.应用层 三、tcp协议的三次握手与四次挥手 一、网络通信 网络通信是指在网络中的两个或…

Java ==> 数组(入门)

文章目录 前言一、一维数组1.入门操作2.何为null&#xff1f;3.数组可以作为函数的参数4.数组可以作为函数的返回值 二、二维数组1.基础操作2.不规则的二维数组 总结 前言 在Java语言当中&#xff0c;数组是一种基本的数据结构&#xff0c;它存储了固定大小的同类型元素的集合…

告别卡顿!五款Windows录屏工具,让每一帧都清晰流畅

小伙伴们&#xff0c;是不是在寻找一款好用、实用的Windows录屏工具呢&#xff1f;别担心&#xff0c;这次我给大家带来了一款热门录屏工具的详细评测和使用感受&#xff0c;包括福昕录屏、转转录屏、爱拍录屏、OBS录屏和EV录屏。快来看看哪款最适合你吧&#xff01; 一、福昕录…

反射的学习

1、什么是反射 反射允许对封装类的字段&#xff0c;方法和构造函数的信息进行编程访问。 也就是&#xff1a; 反射允许对成员变量&#xff0c;成员方法和构造方法的信息进行编程访问。 2、获取class对象 获取一个类的字节码文件对象&#xff1a; 方式1&#xff1a;Class.…

linux 环境运行 jenkins.war包,有可能会出现字体问题,jdk版本:11 jenkins 版本:2.420

jenkins的目录&#xff1a; /usr/jenkins 启动命令 java -Djava.awt.headlesstrue sudo timedatectl set-timezone Asia/Shanghai-Xmx1024m -jar jenkins.war --httpPort8090 任意目录启动&#xff1a; nohup java -Djava.awt.headlesstrue -Xms1024m -Xmx1024m -jar /usr/j…

基于opencv答题卡识别判卷

我们是一个深度学习领域的独立工作室。团队成员有&#xff1a;中科大硕士、纽约大学硕士、浙江大学硕士、华东理工博士等&#xff0c;曾在腾讯、百度、德勤等担任算法工程师/产品经理。全网20多万粉丝&#xff0c;拥有2篇国家级人工智能发明专利。 社区特色&#xff1a;深度实…

Excel使用技巧:数据-》分列:处理log数据,把有用的信息提取出来;查找Ctrl+F,替换Ctrl+H;通配符

Excel的正确用法&#xff1a; Excel是个数据库&#xff0c;不要随意合并单元格。 数据输入的时候一定要按照行列输入&#xff0c;中间不要留空&#xff0c;不然就没有关联。 数据-》分列&#xff1a;处理log数据&#xff0c;把有用的信息提取出来。 按照向导一步一步操作。…

D36【python 接口自动化学习】- python基础之函数

day36 函数的定义 学习日期&#xff1a;20241013 学习目标&#xff1a;输入输出与文件操作&#xfe63;-49 函数定义&#xff1a;如何优雅地反复引用同一段代码&#xff1f; 学习笔记&#xff1a; 函数的用途 定义函数 调用函数 # 定义函数 def foo():print(foo)print(foo …