Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
25
Добавлен:
10.12.2013
Размер:
126.46 Кб
Скачать

Волжский университет имени В.Н.Татищева

Кафедра “Информатика и системы управления”

КУРСОВАЯ РАБОТА

Тема: “Компьютерная фирма”

Выполнил: студент гр. ХХХ

ХХХ

Преподаватель: ХХХ

Тольятти 2006

Волжский университет имени В.Н.Татищева

Кафедра “Информатика и системы управления”

Специальность: 220100 “Вычислительные машины, комплексы, системы и сети”

ЗАДАНИЕ

на курсовой проект по дисциплине

Динамические переменные”

Студенту__________________________________________________________

Группа____________________________________________________________

Тема проекта_______________________________________________________

Календарный график задания_________________________________________

__________________________________________________________________

СОДЕРЖАНИЕ ЗАДАНИЯ

__________________________________________________________________

Руководитель курсовой работы:

Студент: Викулов Ю. А.

  1. описание предметной области.

В нашей стране существует множество фирм и салонов по продажи компьютерной техники.

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

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

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

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

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

  1. Описание алгоритма задачи.

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

При запуске программы на экране появляется меню. Для перемещения по его пунктам используется клавиши курсора (влево, вправо, вверх, вниз), а также клавиша «Ввод» для входа в выбранный пункт меню. Меню состоит из шести пунктов:

1 – «Зарегистрировать» - регистрирует новый товар, приобретенный фирмой. Нажатие клавиши «Ввод» на этом пункте, приведет к появлению диалога, который предлагает какую информацию нужно написать в данный момент. Эта информация состоит из следующих полей, которые нужно заполнить: регистрационный номер, наименование, дата изготовления, срок гарантии, цена (оптовая).

2 – «Просмотр» - Нажатие клавиши «Ввод» на этом пункте, приведет к появлению всего списка товара, который находится на складе, отсортированном в алфавитном порядке по названию.

3 – «Продажа» - Нажатие клавиши на этом пункте, приведет к появлению запроса о наименовании товара, который интересует клиента. Далее программа выводит весь список товара данного наименования. Для продажи ему выбранного им товара необходимо ввести регистрационный номер нужного товара. Затем нажать кнопку нажать.

5 – «Возврат» - Нажатие клавиши на этом пункте приведет к окну, где по введенному регистрационному номеру программа производи анализ даты его продажи и срока гарантии выдает сообщение о том истёк или нет срок гарантии. И если у товара не истёк срок гарантии, то производится переучёт прибыли и убытков фирмы.

6 – «Анализ» - Нажатие клавиши на этом пункте приведет к выдаче информации по заданному пользователем параметру, прибыль или убытки которые выбираются из под меню. Программа производит анализ прибыли и убытков в текущем месяце.

7 – «Выход» - Нажатие клавиши «Ввод» на этом пункте приведет к завершению работы программы с сохранением всех изменений в базе компьютерной фирмы.

При первом запуске программы в оперативной памяти создётся база компьютерной фирмы. Информация хранится в файле firma.dat. Каждый раз при запуске программы из файла базы формируется односвязный список и в ходе изменения данных в базе изменяется содержание списка. При завершении программа перезаписывает в файл базы содержание списка. Этот алгоритм осуществляется с помощью следующих процедур:

Menutoscr-данная процедура для формирования в вывода главного меню на монитор.

spisok_file- эта процедура при помощи цикла в while t<>nil do перебирает список динамических переменных и записывает данные из списка в файл базы.

file_spisok эта процедура при помощи цикла repeat until считывается одна компонента из файла базы. Предварительно проверив размер файла базы. Далее формируется односвязный список динамических переменных, отсортированный по алфавиту. Условия выхода из цикла- eof(baza).

Spisoc – при помощи этой процедуры выводится весь список товаров находящихся на складе. Если список отсутствует то выводится соответствующие сообщение.

Priem – процедура предназначена для регистрации нового товара. Если при приеме товара вводится регистрационный номер под которым уже зарегистрирован другой товар, то выводится сообщение о соответствующей ошибки. Информация о новом товаре заносится в список данных.

Prodaja – При продаже товара программа сначала спрашивает наименование товара который интересует. Если торам с таким именем существует то выводит список всех товаров находящихся на складе. После ввода регистрационного номера программа выполняет действия необходимые для продажи: заменяет дату изготовления на текущую дату, добавляет данные в поле цена розничная (цена оптовая*1,25). При не правильном вводе данных выводятся сообщение об ошибке.

Vozvrat – При возврате товара программа запрашивает регистрационный номер потом проверяет существует ли такой товар в базе перебирая весь список данных. Если такой товар зарегистрирован то программа выполняет проверку истек ли срок гарантии (дата продажи + срок гарантии <= текущей даты). Если это условие выполнено то выполняется следующие действие цена розничная*-1.

Analiz- При помощи этой процедуры производится анализ прибыли или убытков в текущем месяце. Сначала перебирается весь список данных. При переборе списка данных проверяется следующие условие, если цена розничная больше нуля (товар продан) то эту цену плюсуют к переменной «а». Если цена розничная меньше нуля(товар вернули по гарантии) то эту цену плюсуют к переменной «b». При выборе из под меню пунктов прибыль или убытки на экран выводится соответствующие сообщение с суммой прибыли или убытков.

ЛИСТИНГ ПРОГРАММЫ

Program Kursovoy;

Uses crt,graph,dos;

Const

norm=$17; {цвет невыделенного пункта}

sel=$6; {цвет выделенного пункта }

k=6;

type

tovar=record

regnom:integer;{регистрационный номер}

name:string;{наименование}

haracter:string;{харектеристики}

data:string; {дата изготовления}

garant:string; {срок гарантии}

cenaopt:real; {оптовая цена}

cenarozn:real; {резничная цена}

end;

ps=^dan;

dan=record

tv:tovar;

l:ps;

end;

{-------------раздел переменных------------------------------}

Var

menu:array[1 .. k] of string[20]; {названия пунктов меню}

men:array[1 .. 2] of string[10];

punkt:integer; {номер веделенного пункта}

dey,mes,god:word;

C,h,ch:char; {введенный символ}

x,y:integer; {координаты первой строки меню}

baza:file of tovar; {переменная файла с базой}

buf:tovar;

p,top,t,n:ps;

{----------------------процедуры--------------------------------}

Procedure Menutoscr; {вывод меню на экран}

var i:integer;

begin

clrscr;

punkt:=1; x:=5; y:=5; textattr:=norm;

window(x*3,y*3,x,y+20);

for i:=1 to k do begin

gotoxy(x,y+i-1);

write ( menu[i] );

end;

{textattr - предопределенная переменная, отвечающая за цвет фона и символов}

textattr:=sel;

gotoxy(x,y+punkt-1);

write( menu[punkt] ); {выделим строку меню}

textattr:=norm;

end;

Procedure spisok_file(var top:ps); {создание списка из файла}

begin

rewrite(baza);

t:=top;

while t<>nil do

begin

buf:=t^.tv;

write(baza,buf);

t:=t^.l;

end;

end;

Procedure file_spisok(var top:ps); { из файла списк}

begin

if filesize(baza)<>0 then

begin

reset(baza);

top:=nil;

repeat

read(baza,buf);

new(n);

n^.tv:=buf;

t:=top;p:=nil;

while (n^.tv.name>t^.tv.name) And (t<>nil) do

begin

p:=t; {указатеь р ставим на указатель t}

t:=t^.l; {перебираем список}

end;

if p=nil then begin

n^.l:=top; {след нового элемента устанавливаем на вершину}

top:=n; {вершину устанавливаем на новый элемент}

end {заносим элемент в начало списка}

else

begin

n^.l:=p^.l; {Ставим указатель нового элемента на указатель текущего }

p^.l:=n {указатель текущего на инф часть новог}

end; {заносим элемент в середину списка}

until eof(baza);

end;

end;

Procedure spisoc(top:ps); {печать списка }

var i:integer;

begin

t:=top;

textattr:=112;

clrscr;

writeln(' ПЕРЕЧЕНЬ ТОВАРОВ НАХОДЯЩИХСЯ НА СКЛАДЕ');

{----------печать---------------------------}

textattr:=30;

gotoxy(1,3);

i:=1;

writeln('НАИМЕНОВАНИЕ ТОВАРА ','КОД',' ОПТОВАЯ ЦЕНА ',' ХАРАКТЕРИСТИКИ ');

textattr:=112;

while t<>nil do begin

if t^.tv.cenarozn=0 then begin

write(t^.tv.name);

Gotoxy(27,wherey);

write(t^.tv.regnom);

Gotoxy(36,wherey);

write(t^.tv.cenaopt:8:2);

Gotoxy(58,wherey);

writeln(copy(t^.tv.haracter,0,20));

end;

t:=t^.l;

end;

textattr:=norm;

readln;

end;

Procedure priem(var top:ps); {РЕГИТСРАция нового товара}

var

c,i:byte;

begin

textattr:=112;

clrscr;

new(n);

textattr:=30;

writeln;

writeln(' РЕГИТСТРАЦИЯ НОВОГО ТОВАРА ');

textattr:=112;

textattr:=112;

GOTOXY(whereX+19,WHEREY+1);

write('РЕГИСТРАЦИОННЫЙ НОМЕР');

textattr:=112;

GOTOXY(45,whereY);

readln(n^.tv.regnom);

t:=top;

c:=0;

while t<>nil do begin

if t^.tv.regnom=n^.tv.regnom then

begin

c:=1;

clrscr;

textattr:=140;

writeln;

gotoxy(whereX+30,10);

writeln(' ОШИБКА: ');

textattr:=112;

write(' Войдите в процедуру заново и зарегестрируйте товар под другим номером');

BREAk;

end;

t:=t^.l;

end;

if c=0 then begin

gotoxy(whereX+19,whereY);

write('НАИМЕНОВАНИЕ');

GOTOXY(45,whereY);

readln(n^.tv.name);

if (160<=ord(n^.tv.name[1])) and (ord(n^.tv.name[1])<=175) then begin

i:=ord(n^.tv.name[1])-32;

Delete(n^.tv.name,0,1);

n^.tv.name:=chr(i)+n^.tv.name;

end;

if (224<=ord(n^.tv.name[1])) and (ord(n^.tv.name[1])<=239) then begin

i:=ord(n^.tv.name[1])-80;

Delete(n^.tv.name,0,1);

n^.tv.name:=chr(i)+n^.tv.name;

end;

gotoxy(whereX+19,whereY);

write('ЦЕНА ОПТОВАЯ');

GOTOXY(45,whereY);

readln(n^.tv.cenaopt);

gotoxy(whereX+19,whereY);

write('ДАТА ИЗГОТОВЛЕНИЯ');

GOTOXY(45,whereY);

readln(n^.tv.data);

gotoxy(whereX+19,whereY);

write('СРОК ГАРАНТИИ');

GOTOXY(45,whereY);

readln(n^.tv.garant);

Textcolor(1);

write('******************************ХАРАКТЕРИСТИКИ************************************');

write(' ');

write(' ');

write(' ');

write(' ');

write(' ');

write(' ');

write('********************************************************************************');

gotoxy(1,wherey-7);

textcolor(0);

read(n^.tv.haracter);

n^.tv.cenarozn:=0;

n^.l:=nil;

t:=top;p:=nil;

while (n^.tv.name>t^.tv.name) And (t<>nil) do

begin

p:=t; {указатеь р ставим на указатель t}

t:=t^.l; {перебираем список}

end;

if p=nil then begin

n^.l:=top; {след нового элемента устанавливаем на вершину}

top:=n; {вершину устанавливаем на новый элемент}

end {заносим элемент в начало списка}

else

begin

n^.l:=p^.l; {Ставим указатель нового элемента на указатель текущего }

p^.l:=n {указатель текущего на инф часть новог}

end; {заносим элемент в середину списка}

end;

readln;

clrscr;

textattr:=norm;

end;

Procedure prodaja(var p,t,top:ps);

var

dd{день},mm{меся},gg{год},dn{день недели}:word;

den,mes,god:string[4];

c:char;

name:string;

nom:integer;

i,w,w1,fl:integer;

begin

if top=nil then writeln('НЕТ БАЗЫ')

else

begin

w:=0;

textattr:=112;

clrscr;

textattr:=30;

writeln;

writeln(' ПРОДАЖА TОВАРА ');

textattr:=112;

gotoxy(whereX+10,whereY);

write(' ВВЕДИТЕ НАИМЕНОВАНИЕ');

GOTOXY(50,whereY);

readln(name);

t:=top;fl:=0;

writeln;

while t<>nil do

begin

if (name=t^.tv.name) and (t^.tv.cenarozn=0) then

begin

if fl=0 then

begin

textattr:=30;

write(' РЕГИСТРАЦИОННЫЙ НОМЕР ',' ЦЕНА ДАТА ИЗГОТОВЛЕНИЯ СРОК ГАРАНТИИ ');

textattr:=112;

writeln;

fl:=1;

end;

Gotoxy(2,wherey); write(t^.tv.regnom);

Gotoxy(25,wherey); write(t^.tv.cenaopt*1.25:8:2);

Gotoxy(43,wherey); write(t^.tv.data);

Gotoxy(68,wherey);

if length(t^.tv.garant)>0 then writeln(t^.tv.garant, ' МЕС(А)') else writeln;

writeln('----------------------------------ХАРAКТЕРИСТИКИ--------------------------------');

writeln(t^.tv.haracter);

writeln('--------------------------------------------------------------------------------');

w:=1;

end;

t:=t^.l;

end;

if w=0 then

begin

textattr:=140;

writeln;

gotoxy(whereX+30,10);

textattr:=112;

write('Товар в базе не найден войдите в процедуру заново');

end

else

begin

write(' ВВЕДИТЕ РЕГИСТРАЦИОННЫЙ НОМЕР');

gotoxy(47,wherey);

readln(nom);

writeln;

writeln;

t:=top;w1:=0;

while t<>nil do

begin

if (nom=t^.tv.regnom) and (t^.tv.cenarozn=0) then

begin

w1:=1;

p:=t;

write(' Esc-Отмена Enter-Продать');

c:=readkey;

if c= chr(13) then { нажата клавиша <Enter>}

begin

t^.tv.cenarozn:=t^.tv.cenaopt*1.25;

getdate(gg,mm,dd,dn);

str(dd,den);str(mm,mes);str(gg,god);

t^.tv.data:=den+'.'+mes+'.'+god;

end;

break;

end;

t:=t^.l;

end;

if w1=0 then

begin

clrscr;

textattr:=140;

writeln;

gotoxy(whereX+30,10);

writeln(' ОШИБКА: ');

textattr:=112;

end;

end;

end;

if fl=0 then

begin

clrscr;

textattr:=140;

writeln;

gotoxy(whereX+30,10);

writeln(' ОШИБКА: ');

textattr:=112;

READLN;

end;

textattr:=17;

end;

Procedure vozvrat(var top:ps);

var

cC,dd{день},ME,ms,mm{меся},gg{год},dn{день недели}:word;

q,M,i:integer;

DATA,d,mes,g:string;

zz,vv:real;

c:char;

t:ps;

begin

textattr:=112;

clrscr;

textattr:=30;

writeln;

writeln(' ВОЗВРАТ ТОВАРА ');

textattr:=112;

textattr:=112;

GOTOXY(whereX+19,WHEREY+1);

write('РЕГИСТРАЦИОННЫЙ НОМЕР');

textattr:=112;

GOTOXY(45,whereY);

readln(m);

t:=top;

DATA:=t^.tv.data;

D:=''; MES:='';G:='';

q:=1;

while t<>nil do

begin

if (m=t^.tv.regnom) and (t^.tv.cenarozn>0) then begin

i:=1;

while data[i]<>'.'do begin

d:=d+data[i];

i:=i+1;

end;

i:=i+1;

while t^.tv.data[i]<>'.' do begin

mes:=mes+t^.tv.data[i];

i:=i+1;

end;

i:=i+1;

while i<=length(data) do begin

g:=g+t^.tv.data[i];

i:=i+1;

end;

val(D,dey,cc);

val(MES,me,cc);

val(G,god,cc);

val(copy(t^.tv.garant,1,2),ms,cc);

zz:=int(ms/12); vv:=frac(ms/12);

WRITELN;

getdate(gg,mm,dd,dn);

Writeln(' ТЕКУЩАЯ ДАТА ',DD,'.',MM,'.',GG);

WRITELN;

writeln(' ДАТА ПРОДАЖИ ',d,'.',MES,'.',G);

if (god+zz>=gg) and (me+vv>=mm) then

begin

Writeln ;

Writeln ;

Writeln(' Принять в возврат ',t^.tv.name,' ?');

Writeln ;

Writeln ;

write(' Esc-Отмена Enter-Продать');

c:=readkey;

q:=0;

if c= chr(13) then t^.tv.cenarozn:=t^.tv.cenarozn*(-1);

end ;

end;

t:=t^.l;

end;

if q=1 then BEGIN

textattr:=140;

writeln;

gotoxy(whereX+30,10);

writeln(' ОШИБКА: ');

textattr:=112;

write(' Товар возврату не подлежит');

readln;

end;

textattr:=norm;

end;

Procedure Analiz(top,t:ps; VAR c:char); {вывод меню на экран}

var

cC,dd{день},ms,mm{меся},gg{год},dn{день недели}:word;

b,a:real;

ff,i:integer;

begin

textattr:=112;

clrscr;

writeln;

textattr:=30;

writeln;

writeln(' АНАЛИЗ ПРИБЫЛИ И УБЫТКОВ ');

textattr:=112;

textattr:=112;

a:=0;b:=0;

textattr:=112;

getdate(gg,mm,dd,dn);

t:=top;

while t<>nil do begin

val(copy(t^.tv.data,1,2),dey,cc);

val(copy(t^.tv.data,4,2),mes,cc);

val(copy(t^.tv.data,7,4),god,cc);

IF (MM-31>MES) and (gg>=god) AND (t^.tv.CENAROZN>0)and (dd>=dey) THEN A:=A+t^.tv.CENAROZN;

iF (MM-31>MES) and (gg>=god) AND (t^.tv.CENAROZN<0) and (dd>=dey) THEN b:=b+t^.tv.CENAROZN;

t:=t^.l;

end;

textattr:=112;

Men[1]:=' ПРИБЫЛЬ ';

men[2]:=' УБЫТКИ ';

gotoxy(20,25); WRITELN('ДЛЯ ВЫХОДА НАЖМИТЕ "Esc"');

punkt:=1; x:=5; y:=5; textattr:=112;

for i:=1 to 2 do begin

gotoxy(x,y+i-1);

write ( men[i] );

end;

{textattr - предопределенная переменная, отвечающая за цвет фона и символов}

textattr:=sel;

gotoxy(x,y+punkt-1);

write( men[punkt] );

gotoxy(wherex-1,wherey);

textattr:=112;

FF:=1;

REPEAT

c:=readkey;

if ch<>chr(0) then case c of

chr(80): begin

textattr:=112;

clrscr;

writeln;

textattr:=30;

writeln;

writeln(' АНАЛИЗ ПРИБЫЛИ И УБЫТКОВ ');

textattr:=112;

gotoxy(20,25); WRITELN('ДЛЯ ВЫХОДА НАЖМИТЕ "Esc"');

punkt:=1; x:=5; y:=5;

for i:=1 to 2 do begin

gotoxy(x,y+i-1);

write ( men[i] );

end;

textattr:=sel;

gotoxy(x,y+punkt);

write( men[2] );

gotoxy(wherex-1,wherey);

textattr:=112;

FF:=2;

end;

chr(72):Analiz(top,t,c);

chr(13): BEGIN

IF FF=1 THEN begin

gotoxy(20,10);

WRITELN(' ПРИБЫЛЬ ЗА ПРОШЕДШИЙ МЕСЯЦ ',a:10:2);

end;

IF FF=2 THEN begin

gotoxy(20,10);

WRITELN(' УБЫТКИ ЗА ПРОШЕДШИЙ МЕСЯЦ ',abs(b):10:2);

end;

END;

end;

until c=chr(27) ;

textattr:=norm;

End;

{--------------------------------основная программа----------------------------------}

Begin

assign(baza,'c:\BP\firma.dat'); {иниализация файла}

{$I-}reset(baza);{$I+}

if ioresult<>0 then top:=nil

else file_spisok(top);

Menu[1]:=' ЗАРЕГИСТРИРОВАТЬ ';

menu[2]:=' ПРОСМОТР ';

menu[3]:=' ПРОДАЖА ';

menu[4]:=' ВОЗВРАТ ';

menu[5]:=' АНАЛИЗ ';

menu[6]:=' КОНЕЦ ';

punkt:=1; x:=5; y:=5; textattr:=norm;

Menutoscr;

repeat

ch:=ReadKey;

if ch=chr(0) then

begin

ch:=ReadKey;

case ch of

chr(80) : { стрелка вниз }

if (punkt<k) then begin

gotoxy(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt+1;

textattr:=sel;

gotoxy(x,y+punkt-1);

write(menu[punkt]);

textattr:= norm;

end;

chr(72) : { стрелка вверх }

if (punkt<=k) and (punkt>1) then begin

gotoxy(x,y+punkt-1);

write(menu[punkt]);

punkt:=punkt-1;

textattr:=sel;

Соседние файлы в папке Курсовая Pascal Компьютерная фирма