Advertisement
Guest User

Все методы CoinsDatabase

a guest
Dec 21st, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "coinsdatabase.h"
  2.  
  3. CoinsDatabase::CoinsDatabase()
  4. {
  5.  
  6. }
  7.  
  8. int CoinsDatabase::count() const
  9. {
  10.     return db.count();
  11. }
  12.  
  13. int CoinsDatabase::append(CoinItem &record)
  14. {
  15.     modified = true;
  16.    
  17.     record.id = ++maxId; //присваиваем записи незанятый айди и увеличиваем число айди
  18.     db[record.id] = record;
  19.    
  20.     QMutableVectorIterator<uint32_t> i(ids);
  21.    
  22.     int index = 0; //Индекс вставки записи в браузер с учётом сортировки
  23.    
  24.     while (i.hasNext() && db[i.next()] < record)
  25.         index++;
  26.    
  27.     if (db[i.value()]< record)
  28.     {
  29.         i.insert(record.id);
  30.     }
  31.     else
  32.     {
  33.         i.previous();
  34.         i.insert(record.id);
  35.     }
  36.    
  37.     return index;
  38. }
  39.  
  40. void CoinsDatabase::remove(uint32_t id)
  41. {
  42.     modified = true;
  43.     db.remove(id); //удалить из БД
  44.     ids.removeOne(id); //удалить из списка айдишников
  45. }
  46.  
  47. int CoinsDatabase::update(const CoinItem &record)
  48. {
  49.     modified = true;
  50.    
  51.     CoinItem tmp = record;        //временная запись для хранения данных
  52.     uint32_t oldId = tmp.id;      //сохраняем id, чтобы оставить его прежним у новой записи
  53.     remove(oldId);                //удаляем запись по id
  54.    
  55.     int updateRec = append(tmp); //вставляем обновлённую запись в оба контейнера
  56.     maxId--;                     //исправляем последствия append'а
  57.    
  58.     tmp.id = oldId;              //меняем id записи на старый
  59.     ids[updateRec] = oldId;
  60.    
  61.     db.remove(maxId);            //удалить из db
  62.     db.insert(oldId, tmp);       //чтобы заново вставить с новым ключом
  63.    
  64.     return updateRec;
  65. }
  66.  
  67. CoinItem CoinsDatabase::record(uint32_t id) const
  68. {
  69.     return db[id];
  70. }
  71.  
  72. const QVector<QListWidgetItem *> CoinsDatabase::records() const
  73. {
  74.     QVector<QListWidgetItem *> vector;
  75.     QVectorIterator<uint32_t> i(ids);
  76.    
  77.     while (i.hasNext())
  78.     {
  79.         CoinItem currentItem = db[i.next()];
  80.         vector.append(itemToWidget(currentItem));
  81.     }
  82.    
  83.     return vector;
  84. }
  85.  
  86. bool CoinsDatabase::save(const QString &filename)
  87. {
  88.     bool opened = false;
  89.     if (!filename.isEmpty())
  90.     {
  91.         QFile file(filename);
  92.         opened = file.open(QIODevice::WriteOnly);
  93.         modified = false;
  94.         QDataStream output(&file);
  95.        
  96.         output >> db >> ids >> maxId;
  97.        
  98.         file.close();
  99.     }
  100.    
  101.     return opened;
  102. }
  103.  
  104. bool CoinsDatabase::load(const QString &filename)
  105. {
  106.     bool opened = false;
  107.     if (!filename.isEmpty()) //если имя файла не пустое
  108.     {
  109.         // Создаем файл
  110.         QFile file(filename);
  111.         opened = file.open(QIODevice::ReadOnly);
  112.         //Открываем файл только для чтения
  113.         if (opened)
  114.         {
  115.             modified = false;
  116.            
  117.             QDataStream output(&file);
  118.            
  119.             output >> db >> ids >> maxId;
  120.            
  121.             file.close();
  122.         }
  123.     }  
  124.  
  125.     return opened;
  126. }
  127.  
  128. void CoinsDatabase::clear()
  129. {
  130.     modified = true;
  131.     maxId    = 0;
  132.     db.clear();
  133.     ids.clear();
  134. }
  135.  
  136. bool CoinsDatabase::isModified() const
  137. {
  138.     return modified;
  139. }
  140.  
  141. QListWidgetItem *CoinsDatabase::itemToWidget(const CoinItem &item) const
  142. {
  143.     QString label;
  144.  
  145.     (label += item.name) += "\t";
  146.     if (item.era == Era::AfterChrist)
  147.     {
  148.         label += QString::number(item.year);
  149.     }
  150.     else
  151.     {
  152.         label += QString::number(item.century) += " в. до н. э.";
  153.     }
  154.  
  155.     if (item.isRare)
  156.     {
  157.         (label += "\t") += QString::number(item.number) += " шт.";
  158.     }
  159.    
  160.     return new QListWidgetItem(label);
  161. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement