Problem E: 点歌单

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 202  Solved: 99
[Submit][Status][Web Board]

Description

Yang要下海创业,开一家量贩式KTV。现在需要你来帮他编写一个C++程序来实现点歌的功能。至少需要定义如下类及其成员:
1. Song类:歌曲类,具有:
(1)歌曲名属性:一个不含空白符的字符串。
(2)static int getCntOfSongs():获得创建的歌曲的总数。
2. Pop类:是Song类的子类,具有static int getCntOfPops()方法,返回该类型的歌曲的总数。
3. Folk类:是Song类的子类,具有static int getCntOfFolks()方法,返回该类型的歌曲的总数。
4. Bel类:是Song类的子类,具有static int getCntOfBels()方法,返回该类型的歌曲的总数。
5. Singer类:歌手类,具有:
(1)歌手名属性:一个不含空白符的字符串。
(2)所演唱的歌曲列表。
(3)void addASong(string s, int t):添加一首该歌手演唱的歌曲,其中s为歌曲名,t为歌曲类型(1、2、3分别表示Pop、Folk和Bel类的歌曲)。
(4)void singASong(string):根据指定的歌曲名,演唱这首歌。分为两种情况:如果歌手所演唱的歌曲列表中有参数指定的歌曲名,则输出:
$ sings % in # style.
其中:$是歌手名字,%是歌曲名字,#是歌曲类型(为:popular、folk或Bel Canto之一)。
如果指定歌曲名不存在,则输出:
$ doesn’t sing %.
$、%含义同前。
(5)static int getCntOfSingers():获得创建的歌手的人数。
6.SingerList类:点歌单类,具有:
(1)歌手列表。
(2)重载的输入输出运算符。其中重载的输入运算符按照如下格式输入数据:
第1行N>0,表示有N名歌手。之后有N行。
之后的N行,每行是一个歌手及其演唱的歌曲,是一系列用空格分开的数据。每行的第一个字符串(不含空白符)是歌手的名字。第2个是整数M>0,表示该歌手演唱了M首歌曲。M后面有M组输入,每组输入包括1个整数K和1个不含空白符的字符串S,其中K=1、2或者3,分别对应于pop、folk和Bel Canto三种歌曲类型,S是歌曲名。
重载的输出运算符按照如下格式输出歌手及歌曲列表:
每个歌手及其演唱的歌曲占一行,每行的格式为:
$ : %1 %2 …
其中$为歌手名,%1、%2等为该歌手演唱的歌曲名列表,两两之间用1个空格隔开。
(3)void Choose(string s1, string s2)方法:根据参数指定的歌手名s1、歌曲名s2输出。分三种情况:
如果s1指定的歌手不存在,则输出:
Singer $ doesn't exist.
如果s1存在,但是该歌手没有演唱s2指定的歌曲,则输出:
$ doesn’t sing %.
如果s1、s2能够确定某首歌曲,则输出:
$ sings % in # style.
上述$、#和%的含义同前。

Input

输入分为2部分。
第1部分是按照SingerList类的要求输入的歌手及歌曲信息。
第2部分也有多行,每行包括2个字符串,分别是指定的歌手名和歌曲名。
假定所有的歌手名、歌曲名均不相同。

Output

见样例。

Sample Input

3
Tom 4 1 ChangJiu 2 DuanZan 3 Main 1 Object
Jack 1 1 Output
Mary 2 1 Input 3 GCC
Tom DuanZan
Jack Input
Mary GCC
CUI BIGDATA

  

Sample Output

In beginning, there are 0 singers, and 0 songs.
LiuHuan sings XiongDi in popular style.
LiuHuan sings SanGuo in folk style.
LiuHuan sings SongBie in Bel Canto style.
LiuHuan doesn't sing MeiYou.
Tom : ChangJiu DuanZan Main Object
Jack : Output
Mary : Input GCC
Now, there are 4 singers, and 10 songs. Including 5 pop songs, 2 folk songs, and 3 Bel Canto songs.
Tom sings DuanZan in folk style.
Jack doesn't sing Input.
Mary sings GCC in Bel Canto style.
Singer CUI doesn't exist.

  

HINT

Append Code

append.cc, 
int main()
{cout<<"In beginning, there are ";cout<<Singer::getCntOfSingers()<<" singers, and ";cout<<Song::getCntOfSongs()<<" songs."<<endl;Singer liuh("LiuHuan");liuh.addASong("XiongDi", 1);liuh.addASong("SanGuo", 2);liuh.addASong("SongBie", 3);liuh.singASong("XiongDi");liuh.singASong("SanGuo");liuh.singASong("SongBie");liuh.singASong("MeiYou");SingerList lst;string s1, s2;cin>>lst;cout<<lst;cout<<"Now, there are ";cout<<Singer::getCntOfSingers()<<" singers, and ";cout<<Song::getCntOfSongs()<<" songs. Including ";cout<<Pop::getCntOfPops()<<" pop songs, ";cout<<Folk::getCntOfFolks()<<" folk songs, and ";cout<<Bel::getCntOfBels()<<" Bel Canto songs."<<endl;while(cin>>s1>>s2){lst.Choose(s1, s2);}return 0;
}

  

#include <bits/stdc++.h>
using namespace std;
class Song
{
public :string nameSong;static int numSongs;Song(string arr):nameSong(arr){numSongs++;}static int getCntOfSongs(){return numSongs;}virtual string gettype_() = 0;
};
class Pop:public Song
{
public :static int numPops;Pop(string arr):Song(arr){numPops++;}static int getCntOfPops(){return numPops;}string gettype_(){string type_="popular";return type_;}
};
class Folk:public Song
{
public :static int numFolks;Folk(string arr):Song(arr){numFolks++;}static int getCntOfFolks(){return numFolks;}string gettype_(){string type_="folk";return type_;}
};
class Bel:public Song
{
public :static int numBels;Bel(string arr):Song(arr){numBels++;}static int getCntOfBels(){return numBels;}string gettype_(){string type_="Bel Canto";return type_;}};
int Song::numSongs=0;
int Pop::numPops=0;
int Folk::numFolks=0;
int Bel::numBels=0;
class Singer
{
public :string nameSinger;static int numSingers;vector<Song*> lists;//定义的是指针向量,调用每个单元的具体内容时必须用 ”->“ Song *S;//通过定义指针可以方便进行初始化内容Singer(string arr):nameSinger(arr){numSingers++;}void addASong(string s, int t){if(t==1)S=new Pop(s);else if(t==2)S=new Folk(s);else if(t==3)S=new Bel(s);lists.push_back(S);//插入的必须是一个完整的类的对象。}void singASong(string arr){int t=0;for(int i=0; i<lists.size(); i++){if(lists[i]->nameSong==arr)t=i+1;}if(t!=0)cout<<nameSinger<<" sings "<<arr<<" in "<<lists[t-1]->gettype_()<<" style."<<endl;if(t==0)cout<<nameSinger<<" doesn't sing "<<arr<<"."<<endl;}static int getCntOfSingers(){return numSingers;}};
int Singer::numSingers=0;
class SingerList
{
public :vector<Singer*> Lists;friend istream &operator>>(istream &is, SingerList &p){int N;  cin>>N;for(int i=0; i<N; i++){Singer *singer;string names;int num;cin>>names>>num;singer=new Singer(names);//定义歌手名for(int j=0; j<num; j++){string songname; int type_s;cin>>type_s>>songname;singer->addASong(songname, type_s);//添加歌手的歌曲列表}p.Lists.push_back(singer);//将初始化好的歌手添加到向量表中去。}return is;}friend ostream &operator<<(ostream &os, SingerList &p){for(int i=0; i<p.Lists.size(); i++){os<<p.Lists[i]->nameSinger<<" : ";//输出歌手名for(int j=0; j<p.Lists[i]->lists.size(); j++){if(j==0)os<<p.Lists[i]->lists[j]->nameSong;//输出歌名elseos<<" "<< p.Lists[i]->lists[j]->nameSong;//输出歌名}os<<endl;}return os;}void Choose(string s1, string s2){int t1=0, i, j;for(i=0; i<Lists.size(); i++)if(s1==Lists[i]->nameSinger)t1=i+1;if(t1==0)cout<<"Singer "<<s1<<" doesn't exist."<<endl;else{int t2=0;for(j=0; j<Lists[t1-1]->lists.size(); j++)if(Lists[t1-1]->lists[j]->nameSong==s2)t2=j+1;if(t2==0)cout<<s1<<" doesn't sing "<<s2<<"."<<endl;elsecout<<s1<<" sings "<<s2<<" in "<<Lists[t1-1]->lists[t2-1]->gettype_()<<" style."<<endl;}}};
int main()
{cout<<"In beginning, there are ";cout<<Singer::getCntOfSingers()<<" singers, and ";cout<<Song::getCntOfSongs()<<" songs."<<endl;Singer liuh("LiuHuan");liuh.addASong("XiongDi", 1);liuh.addASong("SanGuo", 2);liuh.addASong("SongBie", 3);liuh.singASong("XiongDi");liuh.singASong("SanGuo");liuh.singASong("SongBie");liuh.singASong("MeiYou");SingerList lst;string s1, s2;cin>>lst;cout<<lst;cout<<"Now, there are ";cout<<Singer::getCntOfSingers()<<" singers, and ";cout<<Song::getCntOfSongs()<<" songs. Including ";cout<<Pop::getCntOfPops()<<" pop songs, ";cout<<Folk::getCntOfFolks()<<" folk songs, and ";cout<<Bel::getCntOfBels()<<" Bel Canto songs."<<endl;while(cin>>s1>>s2){lst.Choose(s1, s2);}return 0;
}

  

转载于:https://www.cnblogs.com/Jie-Fei/p/9113301.html

Problem E: 点歌单相关推荐

  1. Problem G: 点歌单

    Problem G: 点歌单 Description Yang要下海创业,开一家量贩式KTV.现在需要你来帮他编写一个C++程序来实现点歌的功能.至少需要定义如下类及其成员: Song类:歌曲类,具有 ...

  2. say小组KTV点歌系统简介

    指导老师:穆老师 班主任:佟老师 小组成员: 组长:焦文宇 组员:窦倩  王晓凤  巩固  石虹蔓  田锋 目录: 1.首页 2.项目前台 3..项目后台 总结: 从5月25号开始的到6月10号结束, ...

  3. 零云九歌小组KTV点歌系统简介

    指导老师:穆老师 班主任:佟老师 小组成员: 组长:张炜林  副组长:李钰 组员:郑宪佳 宋翔 李兆勋  杜庆霖 零云九歌 目录: 1.首页 2.项目前台 3..项目后台 总结: 本次KTV项目总结. ...

  4. 亦云小组KTV点歌系统简介

    20级青鸟四班 亦云小组 指导老师:穆老师   班主任:佟老师 小组成员: 组长:靳天宇 组员:王晓丹 谢佳泽 王睿志 蒲璐颖 张铨政 目录: 1.首页 2.项目前台 3..项目后台 总结: 本次KT ...

  5. 点滴小组KTV点歌系统简介

    ‍‍ 20级青鸟四班 点滴小组 指导老师:穆老师 班主任:佟老师 小组成员: 组长:路鑫 副组长:戴洁 王硕 组员:马蓥芳   组员:徐圣乾 组员:徐圣坤 组员:赵昌杰 制作周期:2021年5月25日 ...

  6. ​凌云KTV点歌系统功能简介

    19级青鸟三班 凌云小组 指导老师:穆雄雄老师 班主任:王欣欣老师 小组成员: 组长:李磊    副组长:杨云浩 组员:高启航  朱齐 李欣然 高松 张方仪 王浩如 苏荟旭 贾增伟 制作周期:2020 ...

  7. 【研究报告】从单目深度估计到单目三维场景重建-沈春华老师-VALSE Webinar 22-13(总第279期)

    从单目深度估计到单目三维场景重建-沈春华老师-VALSE Webinar 22-13(总第279期) 报告总结 & 相关论文 论文代码 相关术语 前言 研究问题 单目深度估计 单目三维场景重建 ...

  8. PLEASE小组KTV点歌系统简要说明

    PLEASE小组KTV项目 指导老师:穆老师 班主任:佟老师 小组成员: 组长:徐祥    副组长:孟祥帅 组员:董经纬   组员:孙晓文   周航 组员:徐龙一    张远远 制作周期:2021年6 ...

  9. 使用Puppeteer轻松爬取网易云音乐、QQ音乐的精品歌单

    背景 最近在学习Puppeteer进行自动化操作,另一方面为了防止上班时间被打扰,是时候爬点歌单在上班的时候,用来抵抗外界的干扰了. 地址 项目完整代码地址:github.com/BingKui/We ...

最新文章

  1. eplan文本怎么换行_EPLAN几个使用的小技巧,非常有用
  2. 垃圾代码评析——关于《C程序设计伴侣》9.4——链表(四)
  3. ffmpeg抓取rtsp流并保存_详细解析RTSP框架和数据包分析(1)
  4. DMA(direct memory access)控制方式
  5. java jpms_JDK9的新特性:JPMS模块化
  6. 本周leetcode刷题总结!(二叉树)
  7. jupyter notebook python插件_Python文学化编程-Jupyter notebook使用和插件拓展
  8. 一步步学习SPD2010--附录B--创建新的批准流程
  9. shp格式详解(一)
  10. Java实现俄罗斯方块游戏(简单版)
  11. FPGA实现的线性反馈移位寄存器LFSR
  12. 高级操作系统——XV6内存管理
  13. 日本著名数学游戏专家中村义作教授提出这样一个问题:将2520个桔子分给六个儿子
  14. inno setup 卸载注册表_Inno Setup Compiler卸载时删除注册表
  15. Python Computer Vision Programming学习笔记(二)——基本的图像操作与处理
  16. 如何判断一个数是不是整数
  17. 【网络通信】WSAStartup()函数,MAKEWORD的使用
  18. PostgreSQL COALESCE 和 NULLIF 函数
  19. python个人所得税怎么写分录_个人所得税的凭证分录怎么写
  20. Oracle数据库cmd命令基本命令

热门文章

  1. CCPC2018 吉林站 C.JUSTICE(思路+分数结构体加法)
  2. cronsun smtp 代发邮件 配置
  3. 【正则表达式高级day01】正则表达式概述+在一个文件中,查找出itcast开头的语句+在一个文件中,找到含有itcast的语句+在一个文件中,找到邮箱为163或者126的所有邮件地址
  4. 3D人体和手势运动估计
  5. VS2013密钥-所有版本
  6. 三星SDI推出电池品牌PRiMX
  7. Java Ambiguous mapping. Cannot map ‘xxx‘ method问题解决
  8. 在Linux下使用“360随身WiFi 2”
  9. 《数字经济全景白皮书》中国银行业场景金融生态建设分析2022 发布
  10. 408数据结构学习笔记——外部排序