Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pashnyuk (2).docx
Скачиваний:
16
Добавлен:
04.06.2015
Размер:
3.58 Mб
Скачать

3.3. Требования к среде и языку разработки:

  • Язык разработки – SQLite.

  • Среда разработки интерфейса– Qt 5.2.0.

  • Язык разработки интерфейса – C++.

3.4. Требования к тестированию:

а) Необходимые условия для тестирования:

  • Наличие компонентов программы.

  • Наличие компонентов системы.

б) Работы по тестированию:

  • Программа должна быть протестирована на выполнение всех функций, заявленных в п. 1.1.

в) Протоколы тестирования:

  • План тестирования или технические требования (спецификация) к тестированию.

  • Все результаты, связанные с контрольными примерами, включая все ошибки, выявленные при выполнении теста.

г) Отчет о тестировании:

  • Обозначение продукта.

  • Вычислительные системы, использованные при тестировании (технические средства, программные средства и их конфигурация).

  • Использованные документы (включая их обозначения).

  • Результаты тестирования программы и данных.

  • Перечень несоответствий требованиям, либо перечень несоответствий рекомендациям, либо перечень неучтенных в продукте рекомендаций, либо формулировка того, что продукт не был протестирован на соответствие рекомендациям.

5.Проектные решения

5.1 Разработка ребований к среде и языку разработки:

  • Язык разработки базы данных – SQLite.

  • Среда разработки базы данных– Qt 5.2.0.

  • Язык разработки базы данных – C++.

Реализация база данных пациента и визуальных признаков

База пациенты

voidMyDAO::createDatabase()

{

QSqlQueryquery(sdb);

query.exec("CREATETABLEcard(idINTEGERPRIMARYKEY,id_patientINTEGER,id_imageINTEGER,create_dateSTRING)");

query.exec("CREATETABLEcategory_prizn(idINTEGERPRIMARYKEY,nameSTRING)");

query.exec("CREATETABLEill_category(idINTEGERPRIMARYKEY,nameSTRING)");

query.exec("CREATETABLEill_table(idINTEGERPRIMARYKEY,id_categoryINTEGER,nameSTRING)");

query.exec("CREATETABLEimages(idINTEGERPRIMARYKEY,nameSTRING,pathSTRING,typeINTEGER)");

query.exec("CREATETABLEpatient(idINTEGERPRIMARYKEY,last_nameSTRING,first_nameSTRING,middle_nameSTRING,birth_dateSTRING,sexINTEGER,create_dateSTRING)");

query.exec("CREATETABLEpatient_ill(id_cardINTEGER,id_illINTEGER)");

query.exec("CREATETABLEpatient_prizn(id_cardINTEGER,id_priznakINTEGER)");

query.exec("CREATETABLEvisual_priznaki(idINTEGERPRIMARYKEY,id_categoryINTEGER,nameSTRING)");

}

QList<Patient>MyDAO::getAllPatients()

{

QList<Patient>result;

QSqlQueryquery(sdb);

query.exec("SELECT*FROMpatient");

while(query.next()){

Patientpatient;

patient.setId(query.value(0).toInt());

patient.setLastName(query.value(1).toString());

patient.setFirstName(query.value(2).toString());

patient.setMiddleName(query.value(3).toString());

patient.setBirthDate(QDate::fromString(query.value(4).toString(),"yyyy-MM-dd"));

patient.setSex(query.value(5).toInt());

patient.setCreateDate(QDate::fromString(query.value(6).toString(),"yyyy-MM-dd"));

result<<patient;

}

returnresult;

}

PatientMyDAO::getPatientById(intid)

{

Patientresult;

QSqlQueryquery(sdb);

QStringsql="SELECT*FROMpatientwhereid="+QString::number(id);

query.exec(sql);

while(query.next()){

result.setId(query.value(0).toInt());

result.setLastName(query.value(1).toString());

result.setFirstName(query.value(2).toString());

result.setMiddleName(query.value(3).toString());

result.setBirthDate(QDate::fromString(query.value(4).toString(),"yyyy-MM-dd"));

result.setSex(query.value(5).toInt());

result.setCreateDate(QDate::fromString(query.value(6).toString(),"yyyy-MM-dd"));

}

returnresult;

}

voidMyDAO::insertPatient(Patientpatient)

{

QSqlQueryquery(sdb);

QStringsql="INSERTintopatient(last_name,first_name,middle_name,birth_date,sex,create_date)values('"+

patient.getLastName()+"','"+patient.getFirstName()+"','"+patient.getMiddleName()+"','"+

patient.getBirthDate().toString("yyyy-MM-dd")+"','"+QString::number(patient.getSex())+"','"+

patient.getCreateDate().toString("yyyy-MM-dd")+"')";

query.exec(sql);

}

voidMyDAO::updatePatient(Patientpatient)

{

QSqlQueryquery(sdb);

QStringsql="UPDATEpatientsetlast_name='"+patient.getLastName()+"',first_name='"+patient.getFirstName()+

"',middle_name='"+patient.getMiddleName()+"',birth_date='"+patient.getBirthDate().toString("yyyy-MM-dd")+

"',sex='"+QString::number(patient.getSex())+"',create_date='"+patient.getCreateDate().toString("yyyy-MM-dd")+"'whereid="+QString::number(patient.getId());

query.exec(sql);

}

voidMyDAO::deletePatient(intid)

{

QSqlQueryquery(sdb);

QStringsql="DELETEFROMpatientwhereid="+QString::number(id);

query.exec(sql);

}

QList<PImage>MyDAO::getAllImages()

{

QList<PImage>result;

QSqlQueryquery(sdb);

query.exec("SELECT*FROMimages");

while(query.next()){

if(query.value(3).toInt()==1)

{

PImageimage;

image.setId(query.value(0).toInt());

image.setName(query.value(1).toString());

image.setPath(query.value(2).toString());

result<<image;

}

}

returnresult;

}

voidMyDAO::insertPatient(Patientpatient)

{

QSqlQueryquery(sdb);

QStringsql="INSERTintopatient(last_name,first_name,middle_name,birth_date,sex,create_date)values('"+

patient.getLastName()+"','"+patient.getFirstName()+"','"+patient.getMiddleName()+"','"+

patient.getBirthDate().toString("yyyy-MM-dd")+"','"+QString::number(patient.getSex())+"','"+

patient.getCreateDate().toString("yyyy-MM-dd")+"')";

query.exec(sql);

}

voidMyDAO::updatePatient(Patientpatient)

{

QSqlQueryquery(sdb);

QStringsql="UPDATEpatientsetlast_name='"+patient.getLastName()+"',first_name='"+patient.getFirstName()+

"',middle_name='"+patient.getMiddleName()+"',birth_date='"+patient.getBirthDate().toString("yyyy-MM-dd")+

"',sex='"+QString::number(patient.getSex())+"',create_date='"+patient.getCreateDate().toString("yyyy-MM-dd")+"'whereid="+QString::number(patient.getId());

query.exec(sql);

}

voidMyDAO::deletePatient(intid)

{

QSqlQueryquery(sdb);

QStringsql="DELETEFROMpatientwhereid="+QString::number(id);

query.exec(sql);

}

QList<PImage>MyDAO::getAllImages()

{

QList<PImage>result;

QSqlQueryquery(sdb);

query.exec("SELECT*FROMimages");

while(query.next()){

if(query.value(3).toInt()==1)

{

PImageimage;

image.setId(query.value(0).toInt());

image.setName(query.value(1).toString());

image.setPath(query.value(2).toString());

result<<image;

}

}

returnresult;

}

Виз.признаки

VisualPriznakMyDAO::getPriznakById(intid)

{

VisualPriznakresult;

QSqlQueryquery(sdb);

QSqlQueryquery2(sdb);

QStringsql="SELECT*FROMvisual_priznakiwhereid="+QString::number(id);

query.exec(sql);

while(query.next()){

result.setId(query.value(0).toInt());

result.setName(query.value(2).toString());

QStringsubQuery="SELECT*FROMcategory_priznWHEREid="+query.value(1).toString();

query2.exec(subQuery);

if(query2.next()){

PriznakCategorycategory;

category.setId(query2.value(0).toInt());

category.setName(query2.value(1).toString());

result.setPriznakCategory(category);

}

}

returnresult;

}

voidMyDAO::insertPriznak(VisualPriznakpriznak)

{

QSqlQueryquery(sdb);

QStringsql="INSERTintovisual_priznaki(id_category,name)values('"+

QString::number(priznak.getPriznakCategory().getId())+"','"+priznak.getName()+"')";

query.exec(sql);

}

voidMyDAO::updatePriznak(VisualPriznakpriznak)

{

QSqlQueryquery(sdb);

QStringsql="UPDATEvisual_priznakisetname='"+priznak.getName()+"',id_category='"+QString::number(priznak.getPriznakCategory().getId())+"'whereid="+QString::number(priznak.getId());

query.exec(sql);

}

voidMyDAO::deletePriznak(intid)

{

QSqlQueryquery(sdb);

QStringsql="DELETEFROMvisual_priznakiwhereid="+QString::number(id);

query.exec(sql);

}

Добавление удаление редактирование записей в таблицах пациенты и виз.признаки

voidAddEditDialog::okClicked()

{

MyDAO*myDao=newMyDAO();

if(type==0)//newrecord

{

if(state==0)

{

Patientitem;

item.setLastName(name1->text());

item.setFirstName(name2->text());

item.setMiddleName(name3->text());

item.setBirthDate(dateEdit->date());

item.setSex((isMale)?1:0);

myDao->insertPatient(item);

}

if(state==1)

{

PImageitem;

item.setName(name1->text());

item.setPath(name2->text());

item.setType(1);

myDao->insertImage(item);

}

if(state==3)

{

VisualPriznakitem;

item.setName(name2->text());

item.setPriznakCategory(myDao->getPriznakCategory(categoryId.toInt()));

myDao->insertPriznak(item);

}

if(state==4)

{

PriznakCategoryitem;

item.setName(name1->text());

myDao->insertPriznakCategory(item);

}

}

if(type==1)//updaterecord

{

if(state==0)

{

Patientitem;

item.setId(id.toInt());

item.setLastName(name1->text());

item.setFirstName(name2->text());

item.setMiddleName(name3->text());

item.setBirthDate(dateEdit->date());

item.setSex((isMale)?1:0);

myDao->updatePatient(item);

}

if(state==1)

{

PImageitem;

item.setId(id.toInt());

item.setName(name1->text());

item.setPath(name2->text());

item.setType(1);

myDao->updateImage(item);

}

if(state==3)

{

VisualPriznakitem;

item.setId(id.toInt());

item.setName(name2->text());

item.setPriznakCategory(myDao->getPriznakCategory(categoryId.toInt()));

myDao->updatePriznak(item);

}

if(state==5)

{

PriznakCategoryitem;

item.setId(id.toInt());

item.setName(name1->text());

myDao->updatePriznakCategory(item);

}

}

myDao->closeDb();

accept();

}

Запрос по пациентам и виз.признакам

voidReportDialog::patientSel()

{

ItemBookDialogdlg(this,0,1);

if(dlg.exec()==QDialog::Accepted)

{

patientName->setText(dlg.getName());

patientId=dlg.getId();

}

}

voidReportDialog::patientClear()

{

patientName->clear();

patientId="0";

}

voidReportDialog::illSel()

{

MultipleSelectDialogdlg(this,2);

if(dlg.exec()==QDialog::Accepted)

{

QStringListnames=dlg.names;

illIds=dlg.ids;

QStringtxtNames="";

foreach(QStringitem,names)

{

txtNames+=item+",";

}

illName->setText(txtNames);

}

}

voidReportDialog::illClear()

{

illName->clear();

foreach(QStringitem,illIds)

{

item="-1";

}

}

voidReportDialog::prSel()

{

MultipleSelectDialogdlg(this,3);

if(dlg.exec()==QDialog::Accepted)

{

QStringListnames=dlg.names;

prIds=dlg.ids;

QStringtxtNames="";

foreach(QStringitem,names)

{

txtNames+=item+",";

}

prName->setText(txtNames);

}

}

voidReportDialog::prClear()

{

prName->clear();

foreach(QStringitem,prIds)

{

item="-1";

}

}

voidReportDialog::save()

{

if(m_document==NULL)return;

QStringsaveName=QFileDialog::getSaveFileName(this,"Сохранениерезультата",QDir::currentPath(),"ODFdocument(*.odf);;Allfiles(*.*)");

if(!saveName.isNull())

{

QTextDocumentWriterwriter(saveName);

writer.setFormat("odf");

writer.write(m_document);

}

}

voidReportDialog::report()

{

if(prName->text()!="")

{

QStringname=prName->text();

DiagnozReportDialogdlg(this,true,&prIds,&name);

dlg.exec();

}

}

voidReportDialog::itemDoubleClicked(QTableWidgetItem*item)

{

introw=item->row();

QTableWidgetItem*it=newQTableWidgetItem;

it=this->tableWidget->item(row,3);

imageshowimg(this,it->text().toInt());

img.exec();

}

voidReportDialog::updateTable()

{

tableWidget->clear();

QStringallSql="selectcard.*fromcard";

if(box3->isChecked())

{

allSql+="joinpatient_illoncard.id=patient_ill.id_card";

}

if(box4->isChecked())

{

allSql+="joinpatient_priznoncard.id=patient_prizn.id_card";

}

if((box1->isChecked())||(box2->isChecked())||(box3->isChecked())||(box4->isChecked()))allSql+="where1";

if(box1->isChecked())

{

allSql+="andcard.create_date>='"+dateEdit1->date().toString("yyyy-MM-dd")+"'andcard.create_date<='"+dateEdit2->date().toString("yyyy-MM-dd")+"'";

}

if(box2->isChecked())

{

allSql+="andcard.id_patient="+patientId+"";

}

if(box3->isChecked())

{

intfirst=0;

foreach(QStringitem,illIds)

{

if(first==0)

{

first=1;

allSql+="and(patient_ill.id_ill="+item+"";

}

else

{

allSql+="orpatient_ill.id_ill="+item+"";

}

}

allSql+=")";

}

if(box4->isChecked())

{

allSql+="and(patient_prizn.id_priznak="+prIds[0]+")";

}

if(type==1)

{

allSql+="groupbypatient_prizn.id_priznak";

}

MyDAO*myDao=newMyDAO();

QList<PatientCard>tempList=myDao->findAllCards(allSql);

QList<PatientCard>cardList;

foreach(PatientCardcard,tempList)

{

intk=0;

inti=prIds.size();

foreach(QStringoneid,prIds)

{

foreach(VisualPriznakpr,card.getVisulPriznaks())

{

if(pr.getId()==oneid.toInt())

{

++k;

break;

}

}

}

if(k==i)

cardList.append(card);

}

tableWidget->setColumnCount(4);

tableWidget->setColumnWidth(0,300);

tableWidget->setColumnWidth(1,200);

tableWidget->setColumnWidth(2,420);

tableWidget->setColumnWidth(3,1);

tableWidget->clear();

tableWidget->setRowCount(0);

QTableWidgetItem*hdr2=newQTableWidgetItem(tr("Данныепациента"));

QTableWidgetItem*hdr4=newQTableWidgetItem(tr("Визуальныепризнаки"));

tableWidget->setHorizontalHeaderItem(0,hdr2);

tableWidget->setHorizontalHeaderItem(2,hdr4);

intraw_num=0;

foreach(PatientCarditem,cardList)

{

tableWidget->setRowCount(raw_num+1);

QStringpatientInfo;

patientInfo=item.getPatient().getLastName()+""+item.getPatient().getFirstName()+""+item.getPatient().getMiddleName();

patientInfo+="\nДатарождения:"+item.getPatient().getBirthDate().toString("dd.MM.yyyy");

patientInfo+="\nДатаобращения:"+item.getCreateDate().toString("dd.MM.yyyy");

QList<Ill>ills=item.getIlls();

QStringtext1="";

foreach(Illi1,ills)

{

text1+=i1.getName()+"";

}

patientInfo+="\nЗаболевание:"+text1;

QTableWidgetItem*patient=newQTableWidgetItem(patientInfo);

QList<VisualPriznak>vps=item.getVisulPriznaks();

QStringtext2="";

intm=0;

foreach(VisualPriznaki1,vps)

{

++m;

text2+=QString::number(m)+"."+i1.getName()+"\n";

}

QTableWidgetItem*priznak=newQTableWidgetItem(text2);

QImagepicture1;

picture1.load(item.getImage().getPath());

picture1=picture1.scaled(200,200,Qt::IgnoreAspectRatio,Qt::FastTransformation);

QBrushbrush(picture1);

QTableWidgetItem*preview=newQTableWidgetItem();

preview->setBackground(brush);

QTableWidgetItem*imgId=newQTableWidgetItem(QString::number(item.getImage().getid()));

tableWidget->setRowHeight(raw_num,200);

tableWidget->setItem(raw_num,3,imgId);

tableWidget->setItem(raw_num,0,patient);

tableWidget->setItem(raw_num,1,preview);

tableWidget->setItem(raw_num,2,priznak);

++raw_num;

}

QStringstatStr="Всегонайдено"+QString::number(raw_num)+"случаев.";

statistic->setText(statStr);

myDao->closeDb();

deleteButton->setVisible(true);

}

4 Концептуальная модель системы

Пользователь системы

База знаний признаков

Рабочий интерфейс

Программный код интерфейса

База знаний болезней

Постановка диагноза

База знаний изображений

Вывод данных на экран

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]