Чтение онлайн

на главную - закладки

Жанры

Освой самостоятельно С++ за 21 день.

Либерти Джесс

Шрифт:

192: return NULL;

193: else

194: return pNode->GetPart;

195: }

196:

197: void PartsList::Iterate(void (Part::*func)const) const

198: {

199: if (!pHead)

200: return;

201: PartNode* pNode = pHead;

202: do

203: (pNode->GetPart->*func);

204: while (pNode = pNode->GetNext);

205: }

206:

207: void PartsList::Insert(Part* pPart)

208: {

209: PartNode * pNode = new PartNode(pPart);

210: PartNode * pCurrent - pHead;

211: PartNode * pNext = 0;

212:

213: int New = pPart->GetPartNumber;

214: int Next = 0;

215: itsCount++;

216:

217: if (!pHead)

218: {

219: pHead = pNode;

220: return;

221: }

222:

223: //

если это значение меньше головного узла,

224: // то текущий узел становится головным

225: if (pHead->GetPart->GetPartNumber->New)

226: {

227: pNode->SetNext(pHead);

228: pHead = pNode;

229: return;

230: }

231:

232: for (;;)

233: {

234: // если нет следующего, вставляется текущий

235: if (!pCurrent->GetNext)

236: {

237: pCurrent->SetNext(pNode);

238: return;

239: }

240:

241: // если текущий больше предыдущего, но меньше следующего, то вставляем

242: // здесь. Иначе присваиваем значение указателя Next

243: pNext = pCurrent->GetNext;

244: Next = pNext->GetPart->GetPartNumber;

245: if (Next > New)

246: {

247: pCurrent->SetNext(pNode);

248: pNode->SetNext(pNext);

249: return;

250: }

251: pCurrent = pNext;

252: }

253: }

254:

255:

256:

257: class PartsCatalog

258: {

259: public:

260: void Insert(Part *);

261: int Exists(int PartNumber);

262: Part * Get(int PartNumber);

263: operator+(const PartsCatalog &);

264: void ShowAll { thePartsList.Iterate(Part::Display); }

265: private:

266: PartsList thePartsList;

267: };

268:

269: void PartsCatalog::Insert(Part * newPart)

270: {

271: int partNumber = newPart->GetPartNumber;

272: int offset;

273:

274: if (!thePartsList,Find(offset, partNumber))

275:

276: thePartsList.Insert(newPart);

277: else

278: {

279: cout << partNumber << "

был ";

280: switch (offset)

281: {

282: case 0: cout << "first "; break;

283: case 1: cout << "second "; break;

284: case 2: cout << "third "; break;

285: default; cout << offset+1 << "th ";

286: }

287: cout << "entry. Rejected!\n";

288: }

289: }

290:

291: int PartsCatalog::Exists(int PartNumber)

292: {

293: int offset;

294: thePartsList.Find(offset,PartNumber);

295: return offset;

296: }

297:

298: Part * PartsCatalog::Get(int PartNumber)

299: {

300: int offset;

301: Part * thePart = thePartsList.Find(offset, PartNumber);

302: return thePart;

303: }

304:

305:

306: int main

307: {

308: PartsCatalog pc;

309: Part * pPart = 0;

310: int PartNumber;

311: int value;

312: int choice;

313:

314: while (1)

315: {

316: cout << "(0)Quit (1)Car (2)Plane: ";

317: cin >> choice;

318:

319: if (!choice)

320: break;

321:

322: cout << "New PartNumber?: ";

323: cin >> PartNumber;

324:

325: if (choice == 1)

326: {

327: cout << "Model Year?: ";

328: cin >> value;

329: pPart = new CarPart(value,PartNumber);

330: }

331: else

332: {

333: cout << "Engine Number?: ";

334: cin >> value;

335: pPart = new AirPlanePart(value,PartNumber);

335: }

337: pc.Insart(pPart);

338: }

339: pc.ShowAli;

340: return 0;

341: }

Результат:

(0)Qult (1)Car (2)Plane: 1

New PartNumber?: 1234

Model Year?: 94

(0)Quit (1)Car (2)Plane: 1

New PartNumber?: 4434

Model Year?: 93

(0)Quit (1)Car (2)Plane: 1

New PartNumber?: 1234

Model Year?: 94

1234 was the first entry. Rejected!

(0)Quit (1)Car (2)Plane: 1

Поделиться:
Популярные книги

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III

Девочка для Генерала. Книга первая

Кистяева Марина
1. Любовь сильных мира сего
Любовные романы:
остросюжетные любовные романы
эро литература
4.67
рейтинг книги
Девочка для Генерала. Книга первая

На границе империй. Том 6

INDIGO
6. Фортуна дама переменчивая
Фантастика:
боевая фантастика
космическая фантастика
попаданцы
5.31
рейтинг книги
На границе империй. Том 6

Кодекс Крови. Книга ХVI

Борзых М.
16. РОС: Кодекс Крови
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Кодекс Крови. Книга ХVI

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4

Мерзавец

Шагаева Наталья
3. Братья Майоровы
Любовные романы:
современные любовные романы
эро литература
короткие любовные романы
5.00
рейтинг книги
Мерзавец

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Не грози Дубровскому! Том II

Панарин Антон
2. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том II

Академия

Кондакова Анна
2. Клан Волка
Фантастика:
боевая фантастика
5.40
рейтинг книги
Академия

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Ведьмак (большой сборник)

Сапковский Анджей
Ведьмак
Фантастика:
фэнтези
9.29
рейтинг книги
Ведьмак (большой сборник)

(Не)свободные, или Фиктивная жена драконьего военачальника

Найт Алекс
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(Не)свободные, или Фиктивная жена драконьего военачальника

Наследник павшего дома. Том I

Вайс Александр
1. Расколотый мир
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Наследник павшего дома. Том I

Враг из прошлого тысячелетия

Еслер Андрей
4. Соприкосновение миров
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Враг из прошлого тысячелетия