Software de computador da Universidade de Shenzhen Experimento "Programação Orientada a Objetos" 5 Classes e Objetos

A. Definições de classe do aluno (classes e objetos)

descrição do tópico

O centro da programação orientada a objetos é abstrair coisas objetivas em pedaços de código no mundo do programa. O corpo principal do campus são os alunos, e os alunos em geral incluem muitos atributos, como nome, número do aluno, faculdade, especialização, gênero, endereço, número de contato. . . . . . Espere, existem esses atributos e ações que precisam ser manipulados, como ler o nome, definir o nome, ler o número do aluno, definir o número do aluno. . . . . . Espere, estes são os atributos e métodos sobre os quais falamos em aula. Para atributos e métodos, temos restrições de controle de acesso, marcados como público, privado, protegido, etc. De acordo com as informações acima, forneça uma definição completa de classe de aluno: Aluno , e teste para gerar os valores de atributo de n objetos desse tipo.

digitar

A primeira linha indica que n objetos devem ser inseridos

As linhas subsequentes inserem os valores para cada propriedade dos diferentes objetos, uma linha para cada objeto.

saída

Saída das respectivas propriedades de diferentes objetos

uma linha por objeto

Exemplo de entrada 1

2
WangHai 2014150112 CSSE ComputerScience masculino South215 13760222222
LiBin 2013151292 CSSE SoftwareEngineering feminino South318 13677777777

amostra de saída 1

WangHai 2014150112 CSSE ComputerScience masculino South215 13760222222
LiBin 2013151292 CSSE SoftwareEngineering feminino South318 13677777777

código AC

#include<bits/stdc++.h>
using namespace std;

class Student {
    
    
	string name, id, college, major, sex, address, phone;
public:
	Student() {
    
    }
	void setName(string name) {
    
     this->name = name; }
	void setId(string id) {
    
     this->id = id; }
	void setCollege(string college) {
    
     this->college = college; }
	void setMajor(string major) {
    
     this->major = major; }
	void setSex(string sex) {
    
     this->sex = sex; }
	void setAddress(string address) {
    
     this->address = address; }
	void setPhone(string phone) {
    
     this->phone = phone; }
	string getName() {
    
     return name; }
	string getId() {
    
     return id; }
	string getCollege() {
    
     return college; }
	string getMajor() {
    
     return major; }
	string getSex() {
    
     return sex; }
	string getAddress() {
    
     return address; }
	string getPhone() {
    
     return phone; }
};

int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    
		Student s;
		string name, id, college, major, sex, address, phone;
		cin >> name >> id >> college >> major >> sex >> address >> phone;
		s.setName(name);
		s.setId(id);
		s.setCollege(college);
		s.setMajor(major);
		s.setSex(sex);
		s.setAddress(address);
		s.setPhone(phone);
		cout << s.getName() << " " << s.getId() << " " << s.getCollege() 
		<< " " << s.getMajor() << " " << s.getSex() << " " << s.getAddress()
		 << " " << s.getPhone() << endl;
	}
}

B. Definição de classe Passbook (classe e objeto)

descrição do tópico

Defina uma classe de caderneta CAccount. A classe de caderneta tem membros de dados, como número da conta (account, long), nome (name, char[10]), saldo (balance, float) e outros membros de dados, que podem realizar depósito (depósito, prompt "economizando ok!" quando a operação for bem-sucedida) ), retirada (retirada, "retirada ok!" se a operação for bem-sucedida) e verificação de saldo (cheque), o valor da retirada deve estar dentro da faixa de saldo, caso contrário, " desculpe! acima do limite!" será exibido.

Escreva a função principal, crie um objeto desta classe e teste-o. Após inserir o número da conta, nome e saldo, chame os métodos da classe na ordem de consulta de saldo, depósito, consulta de saldo, saque e consulta de saldo e saída.

digitar

O número da conta, nome e saldo da primeira caderneta

Valor do depósito

quantidade retirada

O número da conta, nome e saldo da segunda caderneta

Valor do depósito

quantidade retirada

saída

O saldo da conta da primeira caderneta

resultado da operação de depósito

Saldo da conta

Resultado da operação de retirada

Saldo da conta

Saldo da conta da segunda caderneta

resultado da operação de depósito

Saldo da conta

Resultado da operação de retirada

Saldo da conta

Exemplo de entrada 1

9111 Tom 1000
500
1000
92220 João 500
500
1500

amostra de saída 1

O saldo do Tom é de 1000
economizando ok!
O saldo do Tom é 1500
saque ok!
O saldo do Tom é 500
O saldo do John é 500
economizando ok!
O saldo de John é 1000
desculpe! acima do limite!
O saldo de John é 1000

código AC

#include<bits/stdc++.h>
using namespace std;

class CAccount {
    
    
	long account;
	char name[10];
	float balance;
public:
	CAccount() {
    
    
		cin >> account >> name >> balance;
	}

	void deposit(float data) {
    
    
		balance += data;
		cout << "saving ok!" << endl;
	}

	void withdraw(float data) {
    
    
		if (data > balance) {
    
    
			cout << "sorry! over limit!" << endl;
			return;
		}
		balance -= data;
		cout << "withdraw ok!" << endl;
	}

	void check() {
    
    
		cout << name << "'s balance is " << balance << endl;
	}


};

int main() {
    
    
	for (int i = 0; i < 2; i++) {
    
    
		CAccount account;
		account.check();
		int data;
		cin >> data;
		account.deposit(data);
		account.check();
		cin >> data;
		account.withdraw(data);
		account.check();
	}
	return 0;
}

C. Produtos audiovisuais (classes e objetos)

descrição do tópico

Uma loja aluga produtos audiovisuais e as informações do produto incluem: tipo, nome, preço unitário de aluguel e status.

O tipo é representado por um único número e a relação correspondente é: 1-filme de vinil, 2-CD, 3-VCD, 4-DVD

O nome é uma string, armazenando as informações de nome do produto

Preço unitário de aluguel significa preço de aluguel diário

O status é representado por um único número, 0 não é alugado, 1 é alugado

A loja oferece operações comerciais, incluindo

  1. Inicialize (use o método de construção), insira as informações do produto audiovisual do teclado e defina-as no objeto

  2. Consultar Imprima, envie informações de produtos de áudio e vídeo

  3. Calcule a taxa de aluguel, o parâmetro é o número de dias alugados, imprima o preço total do aluguel, se não for alugado, ele solicitará, veja a demonstração para informações de saída específicas

Defina a classe de produto audiovisual e crie os objetos correspondentes para concluir a operação

Os valores numéricos envolvidos na questão são todos tratados como números inteiros

digitar

A entrada n na primeira linha significa que existem n produtos audiovisuais

Cada produto de áudio e vídeo corresponde a duas linhas de entrada

Insira vários parâmetros de um produto audiovisual em uma linha, especificamente: tipo, nome, preço unitário do aluguel, status

Digite o comando de operação em uma linha, se a entrada for 0, significa operação de consulta, se não for 0, significa consulta e cálculo da taxa de aluguel, o número de dias de aluguel é esse valor diferente de zero

Digite 2n linhas sucessivamente

saída

De acordo com o comando de operação de cada produto audiovisual, chame a operação correspondente e, em seguida, emita o resultado relevante

Veja a demonstração do estilo de saída.

Exemplo de entrada 1

4
1 AAA 43 1
0
2 BBB 19 0
3
3 CCC 27 1
5
4 DDD 32 1
7

amostra de saída 1

Black film[AAA] alugado
CD[BBB] não alugado
Sem aluguel gerado
VCD[CCC] alugado
O aluguel atual é de 135
DVD[DDD] O
aluguel atual é de 224

código AC

#include<bits/stdc++.h>
using namespace std;

class AudiovisualProducts {
    
    
	int type;
	string name;
	int price;
	int state;
public:
	AudiovisualProducts() {
    
    
		cin >> type >> name >> price >> state;
	}

	void Print() {
    
    
		//1-黑胶片,2-CD,3-VCD,4-DVD
		string typeInfo[4] = {
    
     "黑胶片","CD","VCD","DVD" };
		cout << typeInfo[type - 1] << "[" << name << "]";
		if (state)
			cout << "已出租" << endl;
		else
			cout << "未出租" << endl;
	}

	void printFee(int day) {
    
    
		if (state) {
    
    
			cout << "当前租金为" << day * price << endl;
		}
		else cout << "未产生租金" << endl;
	}

};

int main() {
    
    
	int n;
	cin >> n;
	while (n--) {
    
    
		AudiovisualProducts test;
		int t;
		cin >> t;
		test.Print();
		if (t) {
    
    
			test.printFee(t);
		}
	}
}

D. Consulta do mês (classe e objeto + referência)

descrição do tópico

Defina uma classe de data, incluindo atributos privados ano, mês, dia, método get para adicionar atributos e outras funções para adicionar conforme necessário

Defina uma função, o parâmetro é uma referência de objeto de data, a função é exibir o nome em inglês do mês da data e o nome do próximo mês, sem valor de retorno

Defina uma função, o parâmetro é uma referência de objeto de data, a função é exibir quantos dias a data falta para o final do ano, por exemplo, 1º de dezembro é 30 dias antes do final do ano

Os nomes em inglês dos meses são os seguintes:

janeiro janeiro

fevereiro fevereiro

marçomarço

abril abril

maio maio

junho junho

Julho

agosto agosto

setembro setembro

outubro outubro

NovembroNovembro

dezembro dezembro

digitar

Insira n na primeira linha para indicar que existem n objetos de data

Em seguida, insira o ano, o mês e o dia de uma data em cada linha

Insira n linhas sucessivamente

saída

Cada data contém duas linhas de saída

Uma linha exibe o nome em inglês do mês da data atual e o nome em inglês do próximo mês

Uma linha para exibir a data e quantos dias antes do final do ano

Formato de conteúdo específico veja exemplo

Exemplo de entrada 1

3
1999 9
1996 2 11
2019 12 1

amostra de saída 1

Este mês é setembro e o próximo mês é outubro
Faltam 113 dias para o fim do ano
Este mês é fevereiro e o próximo mês é março
Faltam 324 dias para o fim do ano
Este mês é dezembro e o próximo mês é janeiro
Faltam 30 dias para o final do ano

código AC

#include<bits/stdc++.h>
using namespace std;

class Date {
    
    
	int year, month, day;
	string name[12] = {
    
     "January","February","March","April","May","June","July","August","September","October","November","December" };
public:
	Date() {
    
     cin >> year >> month >> day; }
	int getYear() {
    
     return year; }
	int getMonth() {
    
     return month; }
	int getDay() {
    
     return day; }
	string getNameOfMonth() {
    
     return name[month - 1]; }
	string getNextMonthName() {
    
     return name[month % 12]; }
	bool isEndDay() {
    
     return month == 12 && day == 31; }

	bool isLeapYear() {
    
    
		if (year % 400 == 0)
			return true;
		if (year % 4 == 0 && year % 100 != 0)
			return true;
		return false;
	}


	Date getTomorrow() {
    
    
		int days[12] = {
    
     31,28,31,30,31,30,31,31,30,31,30,31 };
		Date nextDay = *this;
		if (nextDay.isLeapYear())
			days[1] = 29;

		nextDay.day++;

		if (nextDay.day > days[nextDay.month - 1]) {
    
    
			nextDay.month++;
			nextDay.day = 1;
		}

		if (nextDay.month > 12) {
    
    
			nextDay.year++;
			nextDay.month = 1;
		}

		return nextDay;
	}
};

void printMonth(Date& date) {
    
    
	cout << "This month is " << date.getNameOfMonth() << " and next month is " << date.getNextMonthName() << endl;
}

void printRestDay(Date& date) {
    
    
	int cnt = 0;
	Date today = date;
	while (!today.isEndDay()) {
    
    
		today = today.getTomorrow();
		cnt++;
	}

	printf("There are %d days to the end of the year\n", cnt);
}

int main() {
    
    
	int n;
	cin >> n;
	while (n--) {
    
    
		Date test;
		printMonth(test);
		printRestDay(test);
	}
	return 0;
}

E. Lista encadeada invertida no lugar (lista encadeada)

descrição do tópico

Crie uma lista vinculada individualmente na ordem dos números inseridos. Arrays e contêineres não podem ser usados ​​e novos espaços de nós não podem ser abertos. Escreva uma função para realizar a inversão da lista encadeada individualmente na lista encadeada original. Por exemplo, a lista vinculada individualmente 10->20->30 torna-se a lista vinculada individualmente 30->20->10 após a inversão.

Observação: Se não atender aos requisitos da pergunta, não será pontuado se a ordem inversa da pergunta acima for usada para a saída.

digitar

Número de testes t

Uma linha para cada conjunto de dados de teste, o formato é o seguinte:

O número de dados n, seguido por n inteiros

saída

Para cada conjunto de dados de teste, imprima a lista encadeada individualmente invertida.

Exemplo de entrada 1

2
10 1 2 3 4 5 6 7 8 9 10
4 19 20 15 -10

amostra de saída 1

10 9 8 7 6 5 4 3 2 1
-10 15 20 19

código AC

#include<bits/stdc++.h>
using namespace std;

struct Node
{
    
    
	int value;
	Node* next;
	Node(int value = 0, Node* next = NULL) {
    
    
		this->value = value;
		this->next = next;
	}

};


class List {
    
    
	Node* head;
public:
	List() {
    
    
		int len;
		cin >> len;
		head = new Node(len);
		Node* p = head;
		for (int i = 0; i < len; i++) {
    
    
			int t;
			cin >> t;
			p->next = new Node(t);
			p = p->next;
		}
	}


	~List() {
    
    
		Node* p = head;
		while (head) {
    
    
			p = head->next;
			delete head;
			head = p;
		}
	}

	void print() {
    
    
		Node* p = head->next;
		while (p) {
    
    
			cout << p->value << " ";
			p = p->next;
		}
		cout << endl;
	}

	void reverse() {
    
    
		if (head->value <= 1)
			return;
		Node* next_node = NULL;
		Node* cur_node = head->next;
		while (cur_node) {
    
    
			Node* prior_node = cur_node->next;
			cur_node->next = next_node;
			head->next = prior_node;
			next_node = cur_node;
			cur_node = prior_node;
		}
		head->next = next_node;
	}

};

int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    
		List l;
		l.reverse();
		l.print();
	}
	return 0;
}

F. Jogos de loteria (classes e objetos)

descrição do tópico

Veja os requisitos do exercício de números aleatórios:

Sabemos que nas vendas da loteria de bem-estar, os números que você precisa também são gerados aleatoriamente por meio da seleção da máquina. Agora suponha que a loteria de bem-estar tenha sete números no total e o intervalo de cada número seja de 0 a 30. Agora, use a linguagem C++ para Projete um programa para gerar sete números de loteria de bem-estar.A máquina aleatória, quando o usuário decide fazer uma aposta, gera sete números diferentes. (É necessário usar as funções aleatórias rand(), srand(), consulte o livro de referência para uso específico).

Com base nisso, você já tem n conjuntos de números da loteria do bem-estar (não há necessidade de gerar aleatoriamente), agora suponha que um conjunto de números após a loteria seja dado: 6, 13, 1, 24, 28, 8, 10, coloque cada conjunto de números que você compra jogos por vez. Quando os números em cada posição da esquerda para a direita são iguais um a um, significa que você ganhou o primeiro prêmio. Se houver 5 ou 6 números idênticos, é o segundo prêmio , e o resto é mais que 2. O mesmo número acima é o terceiro prêmio, e a programação realiza as regras do jogo!

digitar

A primeira linha insere o número de grupos de bilhetes de loteria adquiridos;

Na segunda linha, digite o nome do cliente que comprou o bilhete lotérico;

Digite o número de cada grupo de bilhetes de loteria de bem-estar em cada linha a partir da terceira linha;

Digite os números vencedores da loteria na última linha.

saída

A primeira linha mostra o nome do cliente;

A segunda linha mostra o nível de bônus ganho pelo cliente de acordo com o número da loteria, por exemplo:

Parabéns, você ganhou o (quantas apostas) N prêmio! ou:

vamos! continuar!

Exemplo de entrada 1

2
Tom
2 5 3 24 10 8 9
20 23 30 1 5 9 2
6 13 1 24 28 8 10

amostra de saída 1

Parabéns ao Tom por ganhar o terceiro prêmio de 1 aposta!

código AC

#include<bits/stdc++.h>
using namespace std;


class Ticket {
    
    
	vector<vector<int>>group;
	int answer[7] = {
    
     6,13,1,24,28,8,10 };
	int firstCnt, secontCnt, thirdCnt;
	string name;
public:
	Ticket() {
    
    
		int n;
		cin >> n >> name;
		group.resize(n);
		for (int i = 0; i < n; i++) {
    
    
			group[i].resize(7);
			for (int j = 0; j < 7; j++)
				cin >> group[i][j];
		}
		for (int i = 0; i < 7; i++)
			cin >> answer[i];
		firstCnt = secontCnt = thirdCnt = 0;
	}

	void compare() {
    
    
		for (int i = 0; i < group.size(); i++) {
    
    
			int temp_cnt = 0;

			for (int j = 0; j < 7; j++)
				if (group[i][j] == answer[j])
					temp_cnt++;

			//一等奖?
			if (temp_cnt == 7) {
    
    
				firstCnt++;
				continue;
			}


			//二等奖?
			if (group[i][4] == answer[4] && group[i][5] == answer[5]) {
    
    
				secontCnt++;
				continue;
			}

			//三等奖
			if (temp_cnt >= 2)
				thirdCnt++;
		}
	}

	void display() {
    
    
		if (firstCnt)
			cout << "恭喜" << name << "中了" << firstCnt << "注一等奖!" << endl;
		if (secontCnt)
			cout << "恭喜" << name << "中了" << secontCnt << "注二等奖!" << endl;
		if (thirdCnt)
			cout << "恭喜" << name << "中了" << thirdCnt << "注三等奖!" << endl;
		if (!firstCnt && !secontCnt && !thirdCnt)
			cout << "加油!继续!" << endl;
	}

};

int main() {
    
    
	Ticket t;
	t.compare();
	t.display();
	return 0;
}

Acho que você gosta

Origin blog.csdn.net/weixin_46655675/article/details/129311404
Recomendado
Clasificación