Оценка качества программного продукта
⇐ ПредыдущаяСтр 2 из 2 форматирование текстовый файл алгоритм По результатам испытания была проведена оценка качества ПС. Оценка качества приведена в табл. 1. Как видно из табл. 1, программа показывает хорошее качество, что говорит о законченности реализации программы.
Табл. 1. Результаты стохастического тестирования
На основании тестирования и общей оценки качества разработанного ПС была составлена следующая таблица оценки качества (табл. 2):
Табл. 2 Оценка качества ПС
Существенным недостатком данного средства является недостаточная визуальность процесса выбора параметров форматирования. Так при выборе параметров форматирования текста можно было сделать отображение влияния параметров на вид текста в реальном времени (по выбору пункта) или выбор отступов и границ текста с помощью мыши, однако программирование такого рода интерфейса желательно делать с использованием средств разработки более высокого уровня нежели WinAPI для ускорения процесса программирования.
В дальнейшем в программное средство возможно добавление возможности передачи параметров работы (файлы, параметры форматирования) в виде аргументов командной строки. Созданное программное изделие, как и многие другие, допускает внесение определенных изменений, дополнений с целью дальнейшей модернизации, усовершенствования (например, в плане внешнего интерфейса или функциональности). Заключение
. Результатом данной работы является разработанное приложение «txt Formater». Разработанный продукт является полностью функциональным (все необходимые функции в нем реализованы). Несмотря на это, допускается его дальнейшая модернизация как в плане интерфейса, так и в плане функциональных возможностей. . При разработке программы были использованы современные методологии и технологии, позволяющие в сжатые сроки получить качественный продукт. Программа реализована с помощью среды программирования Microsoft Visual Studio С++ 6.0.
Библиографический список 1. MSDN. 2. Глушаков С.В., Коваль А.В., Смирнов С.В. Язык программирования С++: Учебный курс. - Харьков: Фолио; М.: ООО "Издательство АСТ", 2001. - 500 с. . Петзолд. Ч. Программирование для Windows 95 в двух томах. «BHV - Санкт-Петербург» С. 242. . Шкарина Л.Н. Методические рекомендации по выполнению научно-исследовательских работ для студентов информационных специальностей университета. // Вестник Хакасского государственного университета им. Н.Ф. Катанова. Выпуск 4. Серия 1: Информатика. - Абакан; Издательство Хакасского государственного университета им. Н.Ф. Катанова, 2000. - С. 232-235.
Приложение Main.cpp #include <windows.h> #include <stdio.h> #include <time.h> #include <string.h> #include "resource.h"CALLBACK WindowFunc(HWND, UINT, WPARAM, LPARAM);CALLBACK Dlg1Func (HWND Dlg1, UINT message, WPARAM wParam, LPARAM lParam);CALLBACK Dlg2Func (HWND Dlg2, UINT message, WPARAM wParam, LPARAM lParam);CALLBACK DlgAFunc (HWND DlgA, UINT message, WPARAM wParam, LPARAM lParam);ofn;buf[260]="";long fs=0;buf1[260]="";ext[]="txt"; char szWinName[] = "Lab4";hdc; bool doit=false;Turn;hInst;hwnd,Dlg1,Dlg2,DlgA;* result;number;aa;hfile,hfile1,hfile2;mem,mem1;txtctrl;con=75,aftcon,sp,nd=1,alg=1;sfile[],rfile[],tfile[];cppbs[2048]=" ";spase[2]=" ";WINAPI WinMain(HINSTANCE hThisInst, HINSTANCE hPrevInstance, LPSTR lpszArgs, int nWinMode) {msg;wcl;.hInstance=hThisInst;.lpszClassName=szWinName;.lpfnWndProc=WindowFunc;.style=0;.hIcon=LoadIcon(NULL, IDI_APPLICATION);.hCursor=LoadCursor(NULL, IDC_ARROW);.lpszMenuName=(LPCTSTR)IDR_MENU1;.cbClsExtra=0;.cbWndExtra=0;.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);(!RegisterClass(&wcl)) return 0;((unsigned)time(NULL));=CreateWindow(szWinName, "txt Formater",_SYSMENU,_USEDEFAULT,_USEDEFAULT, , ,_DESKTOP,,,);(hwnd, nWinMode);(hwnd);(GetMessage(&msg, NULL, 0, 0)) {(&msg);(&msg); }msg.wParam; }CALLBACK WindowFunc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {(message) {WM_MOUSEMOVE:;WM_DESTROY:(0); break; //обрабатываем команды от главного меню case WM_COMMAND:(wParam) { //отображаем диалоговое окно форматированияID_MENUITEM40002: {=CreateDialog(NULL,(LPCTSTR) IDD_Format, hwnd, Dlg1Func);(Dlg1,SW_SHOW); };ID_MENUITEM40004: {=CreateDialog(NULL,(LPCTSTR) IDD_DIALOG1, hwnd, DlgAFunc);(DlgA,SW_SHOW); };ID_MENUITEM40003: {=CreateDialog(NULL,(LPCTSTR) IDD_F, hwnd, Dlg2Func);(Dlg2,SW_SHOW); }; //обрабатываем закрытие приложение через команду менюIDCLOSE: {(0); }; //обрабатываем открытие файла пользователемIDFILEOPEN:{ //открываем текстовый файл и отображаем его в окне предварительного просмотра //заполняем поля структуры, описывающей открываемый файл
ofn.lStructSize=sizeof(OPENFILENAME);.hwndOwner=hwnd;.lpstrFile=buf;.nMaxFile=260;.Flags=OFN_FILEMUSTEXIST;.lpstrDefExt=ext;(!GetOpenFileName(&ofn)) ExitProcess(76); //открываем файл=CreateFile(buf,GENERIC_READ,0,0,OPEN_EXISTING,0,0); //создаём область памяти для того чтобы в неё можно было считать файл mem=VirtualAlloc(0,GetFileSize(hfile,0),MEM_COMMIT,PAGE_READWRITE); //считываем файл в созданную область памяти ReadFile(hfile,mem,GetFileSize(hfile,0),&aa,0); ((BYTE*)mem)[GetFileSize(hfile,0)]=0; //закрываем файл CloseHandle(hfile); //выводим содержимое файла в EDIT(txtctrl,(LPCSTR)mem); //освобождаем область памяти(mem,0,MEM_RELEASE); //устанавливаем фокус ввода на окно редактирования(txtctrl); //открываем диалог сохранения файла ofn.lStructSize=sizeof(OPENFILENAME);.hwndOwner=hwnd;.lpstrFile=buf1; ofn.nMaxFile=260;.Flags=OFN_NOREADONLYRETURN;.lpstrDefExt=ext;(!GetSaveFileName(&ofn)) ExitProcess(76); //выкидываем пользователю окно диалога(hwnd,WM_COMMAND,ID_MENUITEM40002,0); //и в завершении окно диалога начала форматирования //MessageBox(NULL,"Задайте параметры форматирования текста и оцените результат в окне предварительного просмотра","Error",MB_OK); }; }WM_SIZE:(txtctrl,0,0,495,456,1);;WM_SETFOCUS:(txtctrl);;WM_CREATE:=CreateWindowEx(WS_EX_CLIENTEDGE,"EDIT","",WS_CHILD+WS_VISIBLE+WS_VSCROLL+WS_HSCROLL+ES_AUTOHSCROLL+ES_AUTOVSCROLL+ES_MULTILINE+ES_WANTRETURN,0,0,0,0,hwnd,0,NULL,0);(!txtctrl) PostQuitMessage(0);;WM_RBUTTONDOWN:(doit==0) { }0;;:DefWindowProc(hwnd, message, wParam, lParam); }0; } //функция обрабатывающая сообщения окна диалога BOOL CALLBACK Dlg1Func (HWND Dlg1, UINT message, WPARAM wParam, LPARAM lParam) { HWND Edt;(message) {WM_INITDIALOG: //устанавливаем параметры диалога "по умолчанию"(Dlg1,IDC_EDIT1,"75");(Dlg1,IDC_EDIT2,"0");;WM_DESTROY:WM_CLOSE:(Dlg1);=NULL;;WM_COMMAND:(LOWORD(wParam)==IDOK) {char te[4]; //получаем указатель на поле ввода диалогового окна Edt=GetDlgItem(Dlg1,IDC_EDIT1); //получаем то что введено в поле ввода в виде текста(Edt,te,3); //преобразуем текст в число=atoi(te); //получаем число пробелов в начале строки Edt=GetDlgItem(Dlg1,IDC_EDIT2); GetWindowText(Edt,te,3);=atoi(te); if (aftcon>0) {(int d=1; d<aftcon; d++) {strcat(cppbs," ");}} //выравнивать ли текст по ширине Edt=GetDlgItem(Dlg1,IDC_CHECK1);(SendMessage(Edt,BM_GETCHECK,0,0)){alg=1;}else{alg=0;} //получаем значения элементов управления=GetDlgItem(Dlg1,IDC_CHECK2); if (SendMessage(Edt,BM_GETCHECK,0,0)){sp=1;}else{sp=0;} //слева //12=GetDlgItem(Dlg1,IDC_RADIO2);(SendMessage(Edt,BM_GETCHECK,0,0)){nd=0;} //12/13=GetDlgItem(Dlg1,IDC_RADIO3);(SendMessage(Edt,BM_GETCHECK,0,0)){nd=1;} //закрываем диалоговое окно=CreateDialog(NULL,(LPCTSTR) IDD_F, hwnd, Dlg2Func);(Dlg2,SW_SHOW);(Dlg1,0); };; }FALSE; } //собственно функция выполняющая форматирование
BOOL CALLBACK Dlg2Func (HWND Dlg2, UINT message, WPARAM wParam, LPARAM lParam) {hu[]="";s[2048]="",stt[2048]=" ",sttt[2048]=" ",re[2048]=""; char ns=13;nsp='/n/r';ns1=10; char caches[2048];empc[]="";dspase[3]=" ";qwe[]="";rf,fe,sf,wf,st,sv;t[1];long fs=0;long fss=0;long ti=1,to=1;i=0,j=0;(message) {WM_DESTROY:WM_CLOSE:(Dlg2);=NULL;; case WM_COMMAND: //отрабатываем нажатие кнопки оК(LOWORD(wParam)==IDOK) { //открываем исходный файл для чтения(s,cppbs);(strlen(buf)<2 || strlen(buf1)<2){MessageBox(NULL,"Прежде чем начинать форматировать нужно определиться с тем, что мы будем форматировать.","Error",MB_OK); EndDialog(Dlg2,0);goto w1;} //открываем файл с исходным текстом.lStructSize=sizeof(OPENFILENAME); ofn.hwndOwner=hwnd;.lpstrFile=buf;.nMaxFile=260;.Flags=OFN_FILEMUSTEXIST;.lpstrDefExt=ext;=CreateFile(buf,GENERIC_READ,0,0,OPEN_EXISTING,0,0);//запоминаем указатель на него //создаём файл в который будем записывать результаты форматирования ofn.lStructSize=sizeof(OPENFILENAME);.hwndOwner=hwnd;.lpstrFile=buf1; ofn.nMaxFile=260;.Flags=OFN_NOREADONLYRETURN;.lpstrDefExt=ext; /*открываем только для записи (читать из него нам точно ничего не понадобится), при открытии удаляем все его содержимое) */ hfile1=CreateFile(buf1,GENERIC_WRITE,0,0,CREATE_ALWAYS,0,0);//запоминаем указатель на него=true;=GetFileSize(hfile,&fss);(qwe,"%i",fs);(txtctrl,qwe); //в цикле читаем файл и занимеемся форматированием строчек while(rf) {=ReadFile(hfile,&t,to,&ti,NULL); //st=false;(ti!=0){i++;}//в случае если, что-то прочитали, то увеличиваем счётчик на единицу((fs)==i) {rf=0;}//проверяем не хватит ли нам читать if (t[0]==13){strcpy(t,hu);}(t[0]!=32 && t[0]!=10){strcat(caches,t);} if (t[0]==32)//если прочитанный символ - пробел {strcat(caches,t);(strlen(s)+strlen(caches)+strlen(re)<con){(s,re);(re,hu);(re,caches);(caches,hu);//очищаем кеш }{ l1:((strlen(s)+strlen(re)<con) && (alg)) {(stt,re);(re,stt);(stt,sttt);l1; }(s,re);(hfile1,&s,strlen(s),&ti,NULL);(nd) {WriteFile(hfile1,&ns,1,&ti,NULL);}// записываем символ перевода строки WriteFile(hfile1,&ns1,1,&ti,NULL);//записываем символ конца строки strcpy(s,cppbs);(re,caches); strcpy(caches,hu); } }(t[0]==10) {//если прочитанный символ конец сроки strcat(s,caches);(s,re);(caches,hu);(re,hu); char kl[2048]=" ";(sp) {strcat(s,kl);}//если необходимо добавляем пробел в конце истинного абзаца текста WriteFile(hfile1,&s,strlen(s),&ti,NULL); {WriteFile(hfile1,&ns,1,&ti,NULL);}(hfile1,&ns1,1,&ti,NULL);(s,cppbs); } }(hfile);(hfile1);=CreateFile(buf1,GENERIC_READ,0,0,OPEN_EXISTING,0,0);=VirtualAlloc(0,GetFileSize(hfile1,0),MEM_COMMIT,PAGE_READWRITE);(hfile1,mem1,GetFileSize(hfile1,0),&aa,0); ((BYTE*)mem1)[GetFileSize(hfile1,0)]=0;(hfile1); //выводим содержимое файла в EDIT(txtctrl,(LPCSTR)mem1);(mem1,0,MEM_RELEASE);(Dlg2,0);(txtctrl); }:{;} }FALSE; }CALLBACK DlgAFunc (HWND DlgA, UINT message, WPARAM wParam, LPARAM lParam) {(message) {WM_DESTROY:WM_CLOSE:(DlgA);=NULL;; }FALSE; } Resource.h #define DLG1 101 #define DLG2 102 #define IDR_MENU1 103 #define IDD_Format 104 #define IDD_F 105 #define IDD_DIALOG1 106 #define IDB_BITMAP1 107 #define IDC_EDIT1 1002 #define IDC_RADIO2 1005 #define IDC_RADIO3 1006 #define IDC_CHECK2 1007 #define IDC_EDIT2 1008 #define IDC_CHECK1 1018 #define IDFILEOPEN 40001 #define ID_MENUITEM40002 40002 #define ID_MENUITEM40003 40003 #define ID_MENUITEM40004 40004 #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 108 #define _APS_NEXT_COMMAND_VALUE 40005 #define _APS_NEXT_CONTROL_VALUE 1019 #define _APS_NEXT_SYMED_VALUE 101
#endif #endif Res.rc IDD_Format DIALOG DISCARDABLE 0, 0, 182, 124DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU "Параметры форматирования текста" FONT 8, "MS Sans Serif" BEGIN DEFPUSHBUTTON "OK",IDOK,118,100,50,14 LTEXT "Количество символов в строке",IDC_STATIC,7,15,107,8 EDITTEXT IDC_EDIT1,117,12,55,14,ES_AUTOHSCROLL | ES_NUMBER"Разрыв строки",IDC_STATIC,7,74,161,22"10",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,13,83,24,10"13/10",IDC_RADIO3,"Button",BS_AUTORADIOBUTTON,50,84,35,10"Завершать абзац пробелом",IDC_CHECK2,"Button",_AUTOCHECKBOX | WS_TABSTOP,7,58,111,10 "Добавлять пробелов перед стрококой",IDC_STATIC,7,30,132,8 EDITTEXT IDC_EDIT2,142,28,32,13,ES_AUTOHSCROLL | ES_NUMBER "Выравнивать строки текста по ширине", IDC_CHECK1,"Button", BS_AUTOCHECKBOX | WS_TABSTOP,8,45,149,10_F DIALOG DISCARDABLE 0, 0, 186, 44DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU"Форматирование"8, "MS Sans Serif" "Начать форматирование",IDOK,7,23,172,14 LTEXT "Для начала форматирования нажмите кнопку", IDC_STATIC,14, 13,158,8_DIALOG1 DIALOG DISCARDABLE 0, 0, 235, 52DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU"О программе"8, "MS Sans Serif" "Полностью учебная программа - за любой нанесённый ущерб мы ответственности не несём. Распространение свободное. Казаковцев Н.М. Малмыгина О.В. Хакасский Государственный Университет. Группа 10-1. 2004 г.",_STATIC,7,7,221,38_MENU1 MENU DISCARDABLE"Файл""Открыть текстовый файл", IDFILEOPEN"Закрыть", IDCLOSE"Форматирование""Параметры форматирования", ID_MENUITEM40002"Начать форматирование", ID_MENUITEM40003"О программе""?", ID_MENUITEM40004 END
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|