Программа обработки ведомости о времени выполнения задания на ЭВМ

Программа обработки экономической информации, осуществляющая ввод исходной информации из файла. Просмотр таблицы исходных данных и ее редактирование. Внутреннее представление данных. Хранение записей входного файла. Добавление и удаление строк из списка.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 28.12.2012
Размер файла 131,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

  • Содержание
  • Введение
  • 1. Назначение и область применения
  • 2. Технические характеристики
  • 2.1 Постановка задачи
  • 2.2 Входные данные
  • 2.3 Выходные данные
  • 2.4 Внутренние представление данных
  • 2.5 Описание алгоритма программы
  • 3. Ожидаемые технико-экономические показатели
  • 3.1 Условия применения
  • 3.2 Выходные и входные данные
  • Приложение А

Приложение Б

Введение

Развитие компьютерных технологий позволяет применить их во всех областях деятельности человека. Очень часто программирование и компьютерные технологии применяются для обработки экономической информации. В настоящее время просто немыслимо работа любого предприятия без применения компьютерных технологий и программирования. Тысячи программистов работают над тем, чтобы облегчить деятельность предприятий в любых сферах деятельности. Только с использованием компьютеров и соответствующих программ современное предприятие может плодотворно работать и приносить прибыль. Эта работа будет примером программного продукта, который должен быть использован в экономических целях.

1. НАЗНАЧЕНИЕ И ОБЛАСТЬ ПРИМЕНЕНИЯ

В данном документе описывается программа, написанная в соответствии с постановкой задачи на курсовое проектирование по теме "Программа обработки ведомости о времени выполнения задания на ЭВМ " по дисциплине "Основы программирования и алгоритмические языки". Для проверки работы программы разработан тестовый пример. Результат примера показывает, что программа работает корректно и правильно. Программа написана на языке Си++ производства фирмы Borland версии 3.1 под операционную систему MS-DOS.

Программа предназначена для вычисления процента процессорного времени по каждому заданию, а также суммы по видам времени по всем заданиям и расчета среднего процента времени центрального процессора по всем заданиям.

2. ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ

2.1 Постановка задачи

Требуется написать программу обработки экономической информации, осуществляющую ввод исходной информации из файла, необходимую её организацию, обработку в соответствии с вариантом задания №6 методических указаний. Выводимую информацию оформить в виде таблицы со всеми необходимыми полями записей и результатов расчетов.

Даны сведения о времени выполнения заданий (5 символов) на ЭВМ (время из-меряется в секундах с точностью до тысячных долей). Структура записи: шифр задания (8 символов), код отдела (3 символа), Ф.И.О. программиста (15 символов), общее время прохождения задания, время центрального процессора -5 знаков (t_ задания>t_цп). Получить процент процессорного времени по каждому заданию, а также суммы по видам времени по всем заданиям и средний процент времени центрального процессора по всем заданиям. Интерфейсная часть программы должна быть в виде меню:

1 Просмотр таблицы исходных данных

2 Редактирование таблицы

3 Просмотр результатов

4 Добавление записей в таблицу

5 Удаление записей из таблицы

6 Обработка информации (вычисление)

7 Сортировка данных

8 Просмотр

Выход

Программа должна быть реализована на языке программирования высокого уровня. В основе программы лежат двунаправленные списки. Выходные данные выводятся на экран в виде таблицы, в которой могут находятся упорядоченные по какому-либо (на выбор пользователя) полю.

Программа также сохраняет выходную таблицу в файле на жестком диске. Также возможно редактирование введенных данных. Программа не имеет модулей и прилагаемых файлов и состоит из одного рабочего файла. Файлы с исходными и сохраненными выходными данными имеют расширение txt.

2.2 Входные данные

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

шифр задания 8 символов

код отдела 3 символа

Ф.И.О. 15 символов

общее время выполнения 5 символов

время CPU 5 символов

Входной файл должен заканчиваться символом «конец файла» (EOF)

Количество записей в файле ограничено только доступной оперативной памятью, все записи объединены в таблицу, нарисованную символами псевдографики. Также в программе существует возможность создание таблицы и сохранения её.

2.3 Выходные данные

Выходные данные представляют собой таблицу (пример таблица 2.3.1)

Таблица2.2.1

Шрифт

задания.

Код

Ф.И.О.

программиста.

Общее

время

задания

Время

СPU

%

CPU

врем.

Сумма

общего

времен

Сумма

времен

CPU

Cред.

%

CPU

00000001

001

Валягин А. А.

34.454

21.231

00000002

009

Гордиенко И.И.

32.334

11.445

00000010

030

Митев А.А.

66.343

23.454

00000029

023

Карюшин К.К.

42.565

23.554

2.4 Внутреннее Представление Данных

Для написания данной программы был выбран язык Си++ и компилятор Borland С++ версии 3.1 для ДОС.

Язык Си обладает большим количеством функций, что ускоряет процесс написания программы и уменьшает объем текста программы. Язык Си очень гибок, широко распространен, отличается маленьким объемом исполняемого файла и большой скорости выполнения. Построение таблиц, требуемых по заданию, могут включать в себя неизвестное заранее количество элементов, поэтому для хранения входной информации статические переменные неприемлемы. В компиляторе фирмы Borland имеются динамические массивы, размер которых изменяется в процессе работы программы. Однако большее удобство представляют собой двунаправленный список так как только в нем возможны: перестановка порядка следования элементов без копирования самой структуры; поиск как в прямом, так и обратном направлении; вставка и удаление элементов наиболее оптимальным образом.

Следующая структура используется для хранения записей входного файла:

struct table

{

char f[16]; //фамилия

char io[5]; //инициалы имени и отчества

char shifr[9]; //шифр задания

int code,N; //код и номер строки

float alltime; //общее время

float cputime; //время CPU

float prcpu; //процент времени CPU

float srcpu; //средний %-т времени CPU

float allltime;//сумма общего времени

float allcpu; //сумма времени CPU

};

struct element

{

struct table data;

struct element *left;//указатель па предыдущую //строку

struct element *right;//указатель па следущую

}*p,*temp,*begin,*end; //строку

2.5 Описание алгоритма программы

Программа состоит из 18 функций. Каждая функция вызывается из главной программы с помощью меню, каждый пункт которого вызывает отдельную функцию.

Программа состоит из следующих функций:

Функция org(int q) организовывает работу всей программы с помощью

меню.

Функция readfile предназначена для чтения данных из файла. С помощью цикла функция считывает из входного файла слова от пробела до пробела.

Функция view выводит на экран данные в виде таблицы, при этом можно использовать прокрутку текста с помощью клавиш ,стрелок вверх и вниз.

Функция find_int(int a) ищет в списке поля, содержащие числовые данные.

Функция find_ср(int a) ищет в списке поля, содержащие литерные данные(слова).

Функция look(int a) обеспечивает вывод результатов поиска на экран.

Функции work1(int a) и work2(int a) выполняют необходимые вычисления.

Функция dob() добавляет строку в конец списка.

Функция remove() удаляет из списка строку, по выбору оператора .

Функции RW_int(int a) и RW_ch(int a) редактируют таблицу данных (изменение полей таблицы).

Функция sortir(int a) выполняет сортировки по любому полю таблицы.

Функция writeHDD() записывает отредактированную таблицу на диск.

Функции orgsortir(), orgfind() и orgRW() обеспечивают управление функциями sortir(int a), find_int(int_a) и find_ch(int a), RW_int(int a) и RW_ch(int a), соответственно, через меню.

Структурные схемы алгоритма программы и подпрограмм приведены на рисунках 5.2.1 - 5.2.7:

А) Функция чтения данных из файла (рис. 2.5.1)

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.1 - Функция readfile

Б) Функция организации работы программы (рис. 2.5.2 рис. 2.5.3)

Рисунок 2.5.2 - Функция org(int q)

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.3 - Функция org(int q)

В) Функция просмотра данных (рис. 2.5.4)

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.4-Функция view(int a)

Г) Функция удаления строки из списка (рис. 2.5.5 )

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.5-Функция remove( )

Д) Функция добавления строки в список (рис. 2.5.6 )

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.6-Функция dob( )

E) Функция редактирования строки в списке (рис. 2.5.7)

программа строка таблица информация

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.7-Функция RW(int a )

E) Функция вычислений процента времени центрального процессора от общего времени выполнения задания на ЭВМ (рис. 2.5.8)

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Рисунок 2.5.7-Функция work(int a )

3. ТЕХНИКО-ЭКОНОМИЧЕСКИЕ ПОКАЗАТЕЛИ

В результате компиляции программы компилятором Borland C++ 3.1 был получен исполняемый файл формата DOS EXE размером 76,2 Кбайт, что является более чем приемлемым.

Для работы программа требует приблизительно 100 Кбайт оперативной памяти (зависит от количества загруженных записей). Данный объем позволяет программе выполнятся на самом широком круге компьютеров, фактических всех поддерживающих операционную систему DOS.

Для выполнения требуется процессор класса 80x86, цветной монитор, поддерживающий текстовый режим 80х25.

Размер входного файла зависит от количества записей в нем и для 30 записей составляет 6Кбайта. Размер выходного файла - 608 байта.

Программа может работать под управлением операционной системы класса DOS, при этом сохраняет работоспособность и в режиме эмуляции MS-DOS операционной системой Windows9X.

Таким образом программа может выполняться практически на любом доступном PC компьютере.

Рекомендации по улучшению программы.

Программа работает правильно и корректно. Недостатком является, по сегодняшним временам интерфейс. По улучшению интерфейса программы рекомендуется перевести исходный текст на язык программирования высокого уровня, на базе С++ под ОС Windows. Конкретнее говоря, программу рекомендовано перевести на язык программирования C++ Builder Практически не изменяя текста программы можно добиться более удобного интерфейса и скорости работы пользователя с программой.

3.1 Условия применения

Для нормальной работы программы необходима следующая аппаратная база:

Совместимый IBM-PC компьютер на базе процессора Intel 80286, 640Кб оперативной памяти, накопитель жестких или гибких магнитных дисков объемом не менее 10 Мб, CGA VGA, SVGA видеоадаптеры. Программа предназначена для работы в среде операционной системы MS-DOS . Также работоспособность программы сохранится при использовании ее под линии Windows 9х. Все вышеперечисленные требования являются оптимальными. Программный продукт разрабатывался и тестировался на компьютере следующей модификации:

CPU - INTEL Celeron 667Мгц

RAM - 128Мб

HDD - 10Гб

Video - Voodoo3 2000 16Мб

OS - Windows 98.

3.2 Входные и выходные данные

Входные данные принимаются программой cчитыванием из файла, определенного формата. Предназначено для обработки большого количества данных.

Формат входных данных имеет следующий вид:

Шифр задания char[8]

Код отдела int

Ф.И.О. программиста char[15]

Общее время выполнения float

Время центрального процессора float

Пример:

00123-as 100 Глушко Е.Н. 45.29 34.56

Выходные данные тоже могут быть представлены в двух видах:

1) показ текущей таблицы данных

2) таблица данных находится на накопителе информации в виде фай-ла. Формат данных не меняется.

Таблица имеет 10 разделов последние 4 являются расчетным.

Пример:

Шрифт

задания.

Код

отд.

Ф.И.О.

программиста.

Общее

время

задания.

Время

CPU

%CPU

врем.

Сумма

по 4

полю

Сумма

по 5

полю

Сред.

%

Заключение

Данный программный продукт может быть использован в любом экономическом отделе, не обязательно института, для помощи в вычислительных вопросах учреждения. С ее помощью, зная общее время выполнения задания и время центрального процессора, можно вычислить процент времени центрального процессора ,средний процент этого времени, а также сумму процессорного и сумму общего времени. Такая программа значительно облегчит данные вычисления. Программный продукт был написан на языке высокого уровня Borland C++.

ПРИЛОЖЕНИЕ А

Текст программы.

#include <iostream.h>

#include<string.h>

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define MAXLINES 100

FILE *in,*out;

struct table

{

char f[16]; //фамилия

char io[5]; //инициалы имени и отчества

char shifr[9]; //шифр задания

int code,N; //код и номер строки

float alltime; //общее время

float cputime; //время CPU

float prcpu; //процент времени CPU

float srcpu; //средний %-т времени CPU

float allltime;//сумма общего времени

float allcpu; //сумма времени CPU

};

struct element

{

struct table data;

struct element *left;

struct element *right;

}*p,*t,*temp,*begin,*end;

int i=1;

float rezall=0,rezcpu=0;//Cумма общего времени и времени CPU

//*************************ЧТЕНИЕ ДАННЫХ ИЗ ФАЙЛА

void readfile()

{

int key=0;

char put[70];

clrscr();

gotoxy(16,7);cout<<"Введите путь к файлу исходнах данных"<<"\n";

gotoxy(16,9);scanf("%s",put);

if( (in=fopen( put, "r"))==NULL)//открытие файла

{

gotoxy(25,11);cout<<"Файл не найден...";

gotoxy(29,20);cout<<"Esc:выход"<<"\n";

gotoxy(28,22);cout<<"Enter:заново"<<"\n";

key=getch();

if(key==27) exit(0);

else readfile();

}

p=(struct element *) malloc( sizeof(struct element));//выделение памяти

fscanf(in, "%s%i%s%s%f%f", &p->data.shifr, &p->data.code, &p->data.f,

&p->data.io, &p->data.alltime,&p->data.cputime);//считываем строку

begin=end=p;//указатели начала и конца списка

temp=p;

p->left=NULL;//указатель на предыдущую строку

p->right=NULL;//указатель на следущую строку

temp->data.N=i;//номер строки

temp->data.prcpu=0; //обнуление полей

temp->data.allltime=0;//которые не

temp->data.allcpu=0; //считываются

temp->data.srcpu=0; //из файла

while (!feof(in))

{

p=(struct element *) malloc( sizeof(struct element) );//выделение памяти

fscanf(in, "%s%i%s%s%f%f", &p->data.shifr,&p->data.code,&p->data.f,

&p->data.io, &p->data.alltime, &p->data.cputime);//считываем строку

temp->right=p;//следующему temp присваиваем считанный элемент

p->left=temp;//предедующему p присваиваем temp

p->right=NULL;//указатель на следущую строку

end=p;//конец списка

temp=p;

temp->data.N=++i;//увеличиваем номер строки

temp->data.prcpu=0;

temp->data.allltime=0;

temp->data.allcpu=0;

temp->data.srcpu=0;

}

fclose(in);//закраваем файл

}

//*************************ПРОСМОТР ИСХОДНЫХ ДАННЫХ

void view(int a)

{

int j=0;//кол-во видимых строк

int key=0;//ключ к скролингу

temp=t=begin;

gotoxy(1,1);cout<<"г===T====1===T=2=T=======3=======T==4===T==5===TT==6==T========T========T=====¬\n";

gotoxy(1,2);cout<<"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n";

gotoxy(1,3);cout<<"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n";

gotoxy(1,4);cout<<"¦===+========+===+===============+======+======++=====+========+========+=====¦\n";

gotoxy(1,a+1);cout<<"L===¦========¦===¦===============¦======¦======¦¦=====¦========¦========¦=====-";

do

{

for(j=5;j<=a;j++)//выводим первые 10 строк

{

gotoxy(1,j);

printf("¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",temp->data.N,temp->data.shifr,temp->data.code,

temp->data.f,temp->data.io,temp->data.alltime,temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

temp=temp->right;

}

key=getch();

switch (key)

{

case 72:if(t->left!=NULL) t=t->left;break;//передвигаем на одну строку вниз

case 80:if(temp!=NULL) t=t->right;break;//передвигаем на одну строку вверх

// case 'a':break;

}

temp=t;//начало просмотра очередных 10 строк

}while((temp!=NULL)&&(key!=13));

}

//*************************ПРОЦЕНТ ВРЕМЕНИ CPU ОТ ОБЩЕГО ВРЕМЕНИ ВЫПОЛНЕНИЯ

int pusk1;//cчетчик кол-ва выполнений вычислений

void work1(int a)

{

float temprez=0;//сумма весго % времени CPU

temp=begin;

while(temp!=0)

{

temp->data.prcpu=((temp->data.cputime)*100)/(temp->data.alltime);//% времени CPU

temprez=temprez+temp->data.prcpu;//сумма % времени cpu

temp=temp->right;

}

temp=end;

while(temp!=0)

{

temp->data.srcpu=temprez/i;//средний % времени CPU

temp=temp->left;

}

pusk1=1;

if(a!=1)

{

cout<<"\n"<<"Вычисление завершено...";

getch();

}

}

//*************************СУММА ПО ВИДАМ ВРЕМЕНИ

int pusk2;//cчетчик кол-ва выполнений вычислений

void work2(int a)

{

float sum=0,sum2=0;

temp=begin;

while(temp!=0)

{

sum=sum+temp->data.alltime;

sum2=sum2+temp->data.cputime;

temp=temp->right;

}

temp=begin;

while(temp!=0)

{

temp->data.allltime=sum;

temp->data.allcpu=sum2;

temp=temp->right;

}

pusk2=2;

if(a==1)

cout<<"\n"<<"Новые данные занесены... ";

else cout<<"\n"<<"Вычисление завершено...";

getch();

}

void sortir_int(int a)

{

struct element *min, *buf;

temp=begin;

table dat;

int node;

while (temp!=NULL)

{

dat=temp->data;

min=temp;

buf=temp->right;

while (buf!=NULL)

{

switch(a)

{

case 2:if(buf->data.code>dat.code) node=1;

else node=0;break;

case 4:if(buf->data.alltime>dat.alltime) node=1;

else node=0;break;

case 5:if(buf->data.cputime>dat.cputime) node=1;

else node=0;break;

case 6:if(buf->data.prcpu>dat.prcpu) node=1;

else node=0;break;

case 7:if(buf->data.N>dat.N) node=1;

else node=0;break;

}

if(node==0)

{

dat=buf->data;

min=buf;

}

buf=buf->right;

}

min->data=temp->data;

temp->data=dat;

temp=temp->right;

}

}

//*************************ПРОСМОТР ПОИСКА

void look(int a)

{

if(a==2) goto suda;

cout<<"г===T====1===T=2=T=======3=======T==4===T==5===TT==6==T========T========T=====¬\n";

cout<<"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n";

cout<<"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n";

cout<<"¦===+========+===+===============+======+======++=====+========+========+=====¦\n";

suda: printf("¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",temp->data.N,

temp->data.shifr,temp->data.code,temp->data.f,temp->data.io,temp->data.alltime,

temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

}

//*************************ПОИСК ПО СТРОКОВЫМ ПОЛЯМ

void find_char(int pole)

{

char el[16];//искомый элемент

char rep;//repeat

int j=0;//проверка поиска

temp=begin;

cout<<"Введите искомый элемент: ";

cin>>el;

while(temp!=0)

{

switch(pole)

{

case 3:if(strcmp(el,temp->data.f)==0) {j++;look(j);}break;

case 1:if(strcmp(el,temp->data.shifr)==0) {j++;look(j);}break;

case 0:if(strcmp(el,temp->data.io)==0) {j++;look(j);}break;

}

temp=temp->right;

}

if(j==0) cout<<"\n"<<"Введенное поле отсутствует"<<"\n";

else cout<<"L===¦=====¦===¦=======¦======¦======¦¦=====¦=====¦=====¦==-";

cout<<"\n"<<"Новый поиск (Y-да,N-нет) ";

cin>>rep;

if(rep=='y')

{clrscr();

find_char(pole);//рекурсия

}

}

//*************************ПОИСК ПО ЧИСЛОВЫМ ПОЛЯМ

void find_int(int pole)

{

char rep;//repeat

int el=0,j=0;

float el2=0;

div_t x;

temp=begin;

if(pole!=2)

{

cout<<"Введите искомый элемент: ";

cin>>el2;

}

else

{

cout<<"Введите искомый элемент: ";

cin>>el;

}

while(temp!=0)

{

switch(pole)

{

case 2:if(el==temp->data.code) {j++;look(j);}break;

case 4:if(el2==temp->data.alltime) {j++;look(j);}break;

case 5:if(el2==temp->data.cputime) {j++;look(j);}break;

case 6:x=div(temp->data.prcpu,100); if(el2==x.rem) {j++;look(j);}break;

}

temp=temp->right;

}

if(j==0) cout<<"\n"<<"Введенное поле отсутствует"<<"\n";

else cout<<"L===¦=====¦===¦=======¦======¦======¦¦=====¦====¦=====¦===-";

cout<<"\n"<<"Новый поиск (Y-да,N-нет) ";

cin>>rep;

if(rep=='y')

{clrscr();

find_int(pole);

}

}

//*************************ДОБАВЛЕНИЕ СТРОКИ

void dob()

{

sortir_int(7);

temp=end;

p=(struct element *) malloc( sizeof(struct element) );//выделение памяти

cout<<"Введете элементы через enter"<<"\n";

cout<<"г====1===T=2=T=======3=======T==4===T==5===¬\n";

cout<<"¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦\n";

cout<<"¦ задания¦отд¦ ¦время ¦ CPU ¦\n";

cout<<"¦========+===+==========T====+======+======¦\n";

gotoxy(1,7);cout<<"¦ ¦ ¦ ¦ ¦ ¦"<<"\n";

gotoxy(1,8);cout<<"L========¦===¦======¦====¦======¦===-"<<"\n";

gotoxy(2,7);scanf("%s", &p->data.shifr);

gotoxy(11,7);scanf("%i", &p->data.code);

gotoxy(15,7);scanf("%s", &p->data.f);

gotoxy(26,7);scanf("%s", &p->data.io);

gotoxy(31,7);scanf("%f", &p->data.alltime);

gotoxy(38,7);scanf("%f", &p->data.cputime);

temp->right=p;

p->left=temp;

p->right=NULL;

temp=end=p;

temp->data.N=++i;

temp->data.prcpu=0;

temp->data.allltime=0;

temp->data.allcpu=0;

temp->data.srcpu=0;

if(pusk1+pusk2==3) //проверка на выполнение вычислений

{

work1(1);//вызов расчетных функций

work2(1);

}

else if(pusk1==1) work1(1);

else if(pusk2==2) work2(1);

view(20);//просмотр

}

int q=0;

//*************************УДАЛЕНИЕ СТРОКИ

void remove()

{

int j=0;

char c=0;

sortir_int(7);

view(15);

gotoxy(1,17);

temp=begin;

cout<<"Введите номер удаляемой строки: ";

cin>>j;

while(temp!=0)

{

if(temp->data.N==j)

break;//прерывание while

temp=temp->right;

}

cout<<"г===T====1===T=2=T===3====T==4===T==5===TT==6==T======T======T=====¬\n";

cout<<"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n";

cout<<"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n";

cout<<"¦===+========+===+===============+======+======++=====+========+========+=====¦\n";

printf("¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",temp->data.N,

temp->data.shifr,temp->data.code,temp->data.f,temp->data.io,temp->data.alltime,

temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

cout<<"L===¦========¦===¦===============¦======¦======¦¦=====¦========¦========¦=====-";

cout<<"\n"<<"Удалить данную строку?(да:y,нет:n)";

cin>>c;

if(c=='y')

{

temp->left->right=temp->right;

temp->right->left=temp->left;

free(temp);

temp=temp->right;

while(temp!=0)

{

--temp->data.N;

temp=temp->right;

}

clrscr();gotoxy(1,23);cout<<"\n"<<"Удаление завершено...";

if(pusk1+pusk2==3)//проверка на выполнение вычислений

{

work1(1);//вызов расчетных функций

work2(1);

}

else if(pusk1==1) work1(1);

else if(pusk2==2) work2(1);

}

view(15);//просмотр

q=7;

}

int ell=0,ell2=0,jj=0;

float ell3=0,ell4=0;

char ch=0,ell5[11];

//*************************РЕДАКТИРОВАНИЕ

int change(int a)

{

clrscr();

cout<<"Строка до замены:"<<"\n";

cout<<"г===T====1===T=2=T=======3=======T==4===T==5===TT==6==T========T========T=====¬\n";

cout<<"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n";

cout<<"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n";

cout<<"¦===+========+===+===============+======+======++=====+========+========+=====¦\n";

printf("¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",temp->data.N,

temp->data.shifr,temp->data.code,temp->data.f,temp->data.io,temp->data.alltime,

temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

cout<<"L===¦========¦===¦===============¦======¦======¦¦=====¦========¦========¦=====-";

switch(a)//замена поля

{

case 0:cout<<"\n"<<"Заменить "<<ell5<<" на ";

cin>>temp->data.io;

break;

case 1:cout<<"\n"<<"Заменить "<<ell5<<" на ";

cin>>temp->data.shifr;

break;

case 2:cout<<"\n"<<"Заменить "<<ell<<" на ";

cin>>ell2;

temp->data.code=ell2;break;

case 3:cout<<"\n"<<"Заменить "<<ell5<<" на ";

cin>>temp->data.f;

break;

case 4:cout<<"\n"<<"Заменить "<<ell3<<" на ";

cin>>ell4;

temp->data.alltime=ell4;break;

case 5:cout<<"\n"<<"Заменить "<<ell3<<" на ";

cin>>ell4;

temp->data.cputime=ell4;break;

}

jj++;

cout<<"Строка после изменений:"<<"\n";

cout<<"г===T====1===T=2=T=======3=======T==4===T==5===TT==6==T========T========T=====¬\n";

cout<<"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n";

cout<<"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n";

cout<<"¦===+========+===+===============+======+======++=====+========+========+=====¦\n";

printf("¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",temp->data.N,

temp->data.shifr,temp->data.code,temp->data.f,temp->data.io,temp->data.alltime,

temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

cout<<"L===¦========¦===¦===============¦======¦======¦¦=====¦========¦========¦=====-\n";

return jj;

}

//редактирование по string данным

void RW_ch(int a)

{

clrscr();

view(15);

temp=begin;

cout<<"\n"<<"Введите заменяемый элемент(не более 10 символов) ";

scanf("%s",&ell5);

while(temp!=0)

{

switch(a)//выбор,редактируемого поля

{

case 0:if(strcmp(ell5,temp->data.io)==0) change(a);break;

case 1:if(strcmp(ell5,temp->data.shifr)==0) change(a);break;

case 3:if(strcmp(ell5,temp->data.f)==0) change(a);break;

}

if(jj!=0) break;//проверка:найден ли заменяемый елемент

else temp=temp->right;

}

if(jj==0)

{

cout<<"\n"<<"введенный елемент отсутствует"<<"\n";

cout<<"Продолжить редоктирование?(да:y,нет:n)";

cin>>ch;

if(ch=='y') RW_ch(a);

}

else

cout<<"Изменения приняты...";

jj=0;

getch();

clrscr();

view(20);

}

//редактирование по числовым данным

void RW_int(int a)

{

clrscr();

view(15);//просмотр

temp=begin;

cout<<"\n"<<"Введите заменяемый элемент: ";

if(a!=2) cin>>ell3;

else cin>>ell;

while(temp!=0)

{

switch(a)//выбор,редактируемого поля

{

case 2:if(ell==temp->data.code) change(a);break;

case 4:if(ell3==temp->data.alltime) change(a);break;

case 5:if(ell3==temp->data.cputime) change(a);break;

}

if(jj!=0) break;//проверка:найден ли заменяемый елемент

temp=temp->right;

}

if(jj==0)

{

cout<<"\n"<<"введенный елемент отсутствует"<<"\n";

cout<<"Продолжить редоктирование?(да:y,нет:n)";

cin>>ch;

if(ch=='y')

{

RW_int(a);

}

}

else

{ cout<<"\n"<<"Сохранить изменения?(да:y,нет:n)";

cin>>ch;

if(ch=='n')

switch(a)//отмена изменений

{

case 2:temp->data.code=ell;break;

case 4:temp->data.alltime=ell3;break;

case 5:temp->data.cputime=ell3;break;

}

else if(ch=='y') cout<<"\n"<<"Изменения приняты...";

}

jj=0;

clrscr();

view(20);

}

void sortir_ch(int a)

{

struct element *min, *buf;

temp=begin;

table dat;

int node;

while (temp!=NULL)

{

dat=temp->data;

min=temp;

buf=temp->right;

while (buf!=NULL)

{

switch(a)

{

case 0:if(strcmp(buf->data.io,dat.io)>0) node=1;

else node=0;break;

case 1:if(strcmp(buf->data.shifr,dat.shifr)>0) node=1;

else node=0;break;

case 3:if(strcmp(buf->data.f,dat.f)>0) node=1;

else node=0;break;

}

if(node==0)

{

dat=buf->data;

min=buf;

}

buf=buf->right;

}

min->data=temp->data;

temp->data=dat;

temp=temp->right;

}

}

void org(int q);

void writeHDD()//ЗАПИСЬ В ФАЙЛ

{

int j=1;

clrscr();

temp=begin;

out=fopen("a:\выход.txt","w");//открытие файла для записи

fprintf(out,"г===T====1===T=2=T=======3=======T==4===T==5===TT==6==T========T========T=====¬\n");

fprintf(out,"¦ N ¦ Шифр ¦Код¦ ФИО ¦Общее ¦Время ¦¦ % ¦Cумма по¦Сумма по¦Средн¦\n");

fprintf(out,"¦ ¦ задания¦отд¦ ¦время ¦ CPU ¦¦ CPU ¦6му полю¦5му полю¦%по6у¦\n");

fprintf(out,"¦===+========+===+===============+======+======++=====+========+========+=====¦\n");

while(temp!=0)

{

fprintf(out,"¦%2i.¦%8s¦%3i¦%10s %4s¦%6.3f¦%6.3f¦¦%5.2f¦%8.2f¦%8.2f¦%5.2f¦\n",j,

temp->data.shifr,temp->data.code,temp->data.f,temp->data.io,temp->data.alltime,

temp->data.cputime,temp->data.prcpu,temp->data.allltime,temp->data.allcpu,temp->data.srcpu);

temp=temp->right;

j++;

}

fprintf(out,"L===¦========¦===¦===============¦======¦======¦¦=====¦========¦========¦=====-");

cout<<"\n"<<"...выполнена";

fclose(out);//закратие файла

getch();

}

//-----------------------------=== PROGRAM ===--------------------------------

typedef char string[100];

const string menu[10] = {"1:Просмотр исходных данных ","2:Сортировка",

"3:Процент времени CPU от общего времени выполнения",

"3:Cумма общего времени и времени CPU","5:Поиск","6:Редактирование","7:Добавление",

"8:Удаление","9:Запись","10:Выход"};

const string menufind[8]={"1:Поиск по шифру","2:Поиск по коду","3:Поиск по фамилии",

"4:Поиск по инициалам имени и отчества","5:Поиск по общему времени",

"6:Поиск по времени CPU","7:Поиск по проценту времени CPU","назад"};

const string menusortir[9]={"1:По номеру","2:По шифру","3:По коду","4:По фамилии",

"0:По инициалам имени и отчества","4:По общему времени","5:По времени CPU",

"5:По процентам времени CPU","назад"};

const string menuRW[7]={"1:По шифру","2:По коду","3:По фамилии",

"4:По инициалам имени и отчества","5:По общему времени","6:По времени CPU","назад"};

int chet=0;//счётчик кол-ва вызовов main()

void orgfind();

void orgwriteHDD();

void orgRW();

void orgsortir();

void org(int q)

{

int key;

int w=0;

if(chet==0)

{

readfile();//чтение данных

chet=1;

}

else w=q;

textcolor(2);//bukva

textbackground(0);

cout <<" ";

do

{

textbackground(1);//fon

clrscr();

gotoxy(25,1);

textbackground(0);

printf("%s%s", menu[0], "\n\t\t\t");

printf("%s%s", menu[1], "\n\t\t\t");

printf("%s%s", menu[2], "\n\t\t\t");

printf("%s%s", menu[3], "\n\t\t\t");

printf("%s%s", menu[4], "\n\t\t\t");

printf("%s%s", menu[5], "\n\t\t\t");

printf("%s%s", menu[6], "\n\t\t\t");

printf("%s%s", menu[7], "\n\t\t\t");

printf("%s%s", menu[8], "\n\t\t\t");

printf("%s%s", menu[9], "\n\t\t\t\t");

gotoxy(25,w+1);

textbackground(0);//vadelenie

cprintf(menu[w]);

key=getch();

switch (key)

{

case 72:w--; break;

case 80:w++; break;

case 13:clrscr();

switch (w)

{

case 0: view(20); break;//вызов просмотра

case 1:orgsortir();break;//сортировка

case 2:work1(0);break;//вычисления

case 3:work2(0);break;

case 4:orgfind();break;//поиск

case 6:cout<<"Добавление в конец таблицы:"<<"\n";dob();break;

case 7:remove();break; //удаление

case 5:orgRW();break;

case 8:writeHDD();break;

case 9:exit(0); break;

}

}

if (w>9) w=0;

if (w<0) w=9;

}while (key!=27);

}

void main()

{

org(0);

}

void orgfind()

{

int w2=0,key=0;

textcolor(2);//поиск

textbackground(0);

cout <<" ";

do

{

textbackground(1);//fon

clrscr();

gotoxy(25,1);

textbackground(0);

printf("%s%s", menufind[0], "\n\t\t\t");

printf("%s%s", menufind[1], "\n\t\t\t");

printf("%s%s", menufind[2], "\n\t\t\t");

printf("%s%s", menufind[3], "\n\t\t\t");

printf("%s%s", menufind[4], "\n\t\t\t");

printf("%s%s", menufind[5], "\n\t\t\t");

printf("%s%s", menufind[6], "\n\t\t\t");

printf("%s%s", menufind[7], "\n\t\t\t\t");

gotoxy(25,w2+1);

textbackground(0);//выделение

cprintf(menufind[w2]);

key=getch();

switch (key)

{

case 72:w2--; break;

case 80:w2++; break;

case 13:clrscr();

switch (w2)

{

case 3:cout<<"Выполняется поиск по инициалам имени и отчества..."<<"\n"; find_char(0);break;

case 0:cout<<"Выполняется поиск по шифру..."<<"\n";find_char(1);break;

case 1:cout<<"Выполняется поиск по коду..."<<"\n";find_int(2);break;

case 2:cout<<"Выполняется поиск по фамилии..."<<"\n";find_char(3);break;

case 4:cout<<"Выполняется поиск по общему времени..."<<"\n";find_int(4);break;

case 5:cout<<"Выполняется поиск по времени CPU..."<<"\n";find_int(5);break;

case 6:cout<<"Выполняется поиск по % времени CPU..."<<"\n";find_int(6);break;

case 7: org(4);break;//возвращение в главное меню

}

}

if (w2>7) w2=0;

if (w2<0) w2=7;

}while (key!=27);

}

void orgsortir()

{

int w4=0,key=0;

textcolor(2);//bukva

textbackground(0);

cout <<" ";

do

{

textbackground(1);//fon

clrscr();

gotoxy(25,1);

textbackground(0);

printf("%s%s", menusortir[0], "\n\t\t\t");

printf("%s%s", menusortir[1], "\n\t\t\t");

printf("%s%s", menusortir[2], "\n\t\t\t");

printf("%s%s", menusortir[3], "\n\t\t\t");

printf("%s%s", menusortir[4], "\n\t\t\t");

printf("%s%s", menusortir[5], "\n\t\t\t");

printf("%s%s", menusortir[6], "\n\t\t\t");

printf("%s%s", menusortir[7], "\n\t\t\t");

printf("%s%s", menusortir[8], "\n\t\t\t\t");

gotoxy(25,w4+1);

textbackground(0);//выделение

cprintf(menusortir[w4]);

key=getch();

switch (key)

{

case 72:w4--; break;

case 80:w4++; break;

case 13:clrscr();

switch (w4)//вызов сортировки

{

case 0:sortir_int(7);view(20);break;

case 1:sortir_ch(1);view(20);break;

case 2:sortir_int(2);view(20);break;

case 3:sortir_ch(3);view(20);break;

case 4:sortir_ch(0);view(20);break;

case 5:sortir_int(4);view(20);break;

case 6:sortir_int(5);view(20);break;

case 7:sortir_int(6);view(20);break;

case 8: org(1);break;

}

}

if (w4>8) w4=0;

if (w4<0) w4=8;

}while (key!=27);

}

void orgRW()

{

int w5=0,key=0;

textcolor(2);//редактирование

textbackground(0);

cout <<" ";

do

{

textbackground(1);//fon

clrscr();

gotoxy(25,1);

textbackground(0);

printf("%s%s", menuRW[0], "\n\t\t\t");

printf("%s%s", menuRW[1], "\n\t\t\t");

printf("%s%s", menuRW[2], "\n\t\t\t");

printf("%s%s", menuRW[3], "\n\t\t\t");

printf("%s%s", menuRW[4], "\n\t\t\t");

printf("%s%s", menuRW[5], "\n\t\t\t");

printf("%s%s", menuRW[6], "\n\t\t\t\t");

gotoxy(25,w5+1);

textbackground(0);//выделение

cprintf(menuRW[w5]);

key=getch();

switch (key)

{

case 72:w5--; break;

case 80:w5++; break;

case 13:clrscr();

switch (w5)//вызов редактирования

{

case 0:cout<<"Редактирование по шифру...";RW_ch(1);break;

case 1:cout<<"Редактирование по коду..."<<"\n";RW_int(2);break;

case 2:cout<<"Редактирование по фамилии...";RW_ch(3);break;

case 3:cout<<"Редактирование по инициалам имени и оотчества...";RW_ch(0);break;

case 4:cout<<"Редактирование по общему времени..."<<"\n";RW_int(4);break;

case 5:cout<<"Редактирование по времени CPU..."<<"\n";RW_int(5);break;

case 6: org(5);break;//возвращение в главное меню

}

}

if (w5>6) w5=0;

if (w5<0) w5=6;

}while (key!=27);

}

ПРИЛОЖЕНИЕ Б

1 НАЗНАЧЕНИЕ ПРОГРАММЫ

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

2 УСЛОВИЯ ВЫПОЛНЕНИЯ ПРОГРАММЫ

Для работы программа требует приблизительно 100 Кбайт оперативной памяти (зависит от количества строк). Данный объем позволяет программе выполнятся на самом широком круге компьютеров, фактических всех поддерживающих операционную систему DOS.

Для выполнения требуется процессор класса 80x86, цветной монитор, поддерживающий текстовый режим 80х25.

Размер входного файла зависит от размера текста в нем, для 30 записей составляет 4,17 Кбайта.

3 ВЫПОЛНЕНИЕ ПРОГРАММЫ

После запуска программы на экране по центру возникнет строка

“Введите путь к файлу данных”. Здесь необходимо указать файл, содержащий исходные данные. Длина пути не должна превышать 70 символов. После ввода правильного пути к файлу появится меню программы.

Управление программой состоит в выборе того или иного пункт меню. Ниже рассматриваются все пункты последовательно (рис 3.1).

Рисунок 3.1-Изображение меню программы.

1:Просмотр данных- показывает данные файла в виде таблицы .

2:Сортировка- упорядочивает строки таблицы по какому-либо полю.

При выборе этого пункта появляется меню сортировки (рис3.2).

Необходимо выбрать нужный пункт для соответствующей сортировки.

Рисунок 3.2- Изображение меню сортировки.

3:Процент времени CPU от общего времени выполнения- вычисление процента времени CPU от общего времени выполнения

4:Сумма общего времени и времени CPU- Вычисление суммы общего времени и суммы времени CPU.

5:Поиск-поиск поля таблицы. При выборе этого пункта появляется меню поиска аналогичное меню сортировки.

6:Редактирование- изменение поля таблицы.

7:Добавление- Добавление строки в конец списка.

8:Удаление- Удаление строки, по выбору, из списка.

9:Запись-Запись таблицы данных.

10:Выход- обеспечивает выход из программы.

4 СООБЩЕНИЯ ОПЕРАТОРУ

Если при не был найден входной файл (при загрузке программы) то по центру экрана выводится сообщение "Файл не найден!". Для указания нового

пути следует нажать ENTER, а для выхода из программы ESC.

Рис. 4.5. Процедура EditList

Размещено на Allbest.ru


Подобные документы

  • Структура записей входного массива. Описание основных типов данных. Алгоритм программы: присвоение начальных значений переменных, чтение списка из файла, вывод данных на экран, выполнение обработки данных, сохранение списка в файл. Листинг программы.

    курсовая работа [325,2 K], добавлен 28.12.2012

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

    реферат [14,5 K], добавлен 06.12.2011

  • Структура программного комплекса. Ввод информации из заданного файла. Создание набора данных. Добавление элементов в конец набора данных. Просмотр всех элементов набора данных. Копирование информации из НД в заданный файл. Сортировка массива по номерам.

    курсовая работа [630,5 K], добавлен 01.06.2014

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

    контрольная работа [1,3 M], добавлен 12.06.2009

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

    курсовая работа [2,3 M], добавлен 14.04.2014

  • Классификация баз данных. Создание списковой структуры, просмотр, удаление, сохранение в типизированном файле, восстановление из типизированного файла, поиск нужного элемента, создание отчета. Ввод, отображение и редактирование текстового материала.

    курсовая работа [2,8 M], добавлен 22.12.2016

  • Разработка программы на языке Си++ и осуществление постановки и выбора алгоритмов решения задач обработки экономической информации, создание и редактирование базы данных, сортировка записей по определенному запросу, анализ эффективности обработки данных.

    контрольная работа [316,8 K], добавлен 28.08.2012

  • Обоснование выбора средств разработки приложения. Добавление, удаление, редактирование информации. Отражение информации из базы данных. Поиск информации по выбранной таблице. Проекты Data, Entity, Logic, Firm. Схема взаимодействия проектов программы.

    курсовая работа [1,8 M], добавлен 18.01.2015

  • Написание модуля на языке Ассемблер для вычисления значения выражения. Составление программы корректного ввода исходных данных в таблицу и вывода результата в виде таблицы. Создание модуля для обработки строк и программы корректного ввода исходных данных.

    курсовая работа [36,8 K], добавлен 18.09.2010

  • Разработка программы "Игроки КХЛ 2012-2013" на языке С++ с использованием классов списков структур для обработки данных. Описание глобальных переменных, разработанных функций. Главное меню программы. Чтение данных из файла, их просмотр и сохранение.

    курсовая работа [2,2 M], добавлен 17.03.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.