Курсовой проект_ Разработка программного обеспечен
.DOCГосударственный Университет Управления
Кафедра Документоведения и Документационного Обеспечения Управления
Курсовой проект
по дисциплине "Алгоритмизация и языки программирования"
На тему: Разработка программного обеспечения автоматизированного рабочего места
Выполнил студент 1-го курса Д/О
Института Информационных Систем Управления
Преподаватель: Романчуков Виктор Григорьевич.
Москва, 2004 г.
Задание
Составить комплекс программ, работающих в режиме диалога с пользователем под управлением главного меню. Комплекс должен осуществлять следующие функции:
-
Ввод данных в файлы базы данных.
-
Корректировку данных в файлах.
-
Распечатку записей файлов.
-
Печать документов заданной формы.
-
Выход в Паскаль (C++) и в DOS.
Структура файлов базы данных:
1. Шифр издания, автор, наименование.
2. Шифр издания, издательство, год издания, тематика
Формы документов:
1. Книги, изданные после ... года:
шифр издания, автор, наименование, издательство, год издания, тематика.
Схема алгоритма
Программа на языке Pascal
uses
crt;
type
t1=record sh:integer;avt,naz:string[15] end;
t2=record sh:integer;izd,tem:string[15];year:integer end;
var
f1:file of t1;
f2:file of t2;
procedure init;
begin
assign(f1,'data1');
assign(f2,'data2');
{$I-}
reset (f1);
if ioresult <> 0 then rewrite (f1);
reset (f2);
if ioresult <> 0 then rewrite (f2);
{$I+}
end;
procedure vi1;
var
st:t1;
i:integer;
begin
i:=1;
seek(f1,0);
writeln('N':3,'шифр':6,'автор':15,'название':15);
while not eof(f1) do begin
read(f1,st);
writeln(filepos(f1)+1:3,st.sh:6,st.avt:15,st.naz:15);
if ((i mod 24)=0) then begin
write('нажмите любую клавишу');
readkey;
end;
i:=i+1;
end;
write('< конец >');
readkey;
end;
procedure vi2;
var
st:t2;
i:integer;
begin
i:=1;
seek(f2,0);
writeln('N':3,'шифр':6,'издательство':15,'тематика':15,'год':5);
while not eof(f2) do begin
read(f2,st);
writeln(filepos(f2)+1:3,st.sh:6,st.izd:15,st.tem:15,st.year:5);
if ((i mod 24)=0) then begin
write('нажмите любую клавишу');
readkey;
end;
i:=i+1;
end;
write('< конец >');
readkey;
end;
procedure add1;
var
st:t1;
begin
write('шифр: ');readln(st.sh);
write('автор: ');readln(st.avt);
write('название: ');readln(st.naz);
seek(f1,filesize(f1));
write(f1,st);
end;
procedure add2;
var
st:t2;
begin
write('шифр: ');readln(st.sh);
write('издательство: ');readln(st.izd);
write('тема: ');readln(st.tem);
write('год: ');readln(st.year);
seek(f2,filesize(f2));
write(f2,st);
end;
procedure del1;
var
n,i:byte;
st:t1;
begin
if filesize(f1)=0 then begin
writeln('записей нет');
readkey;
end
else begin
write('введите номер записи для удаления (1-',filesize(f1),') ');
readln(n);
if (n<1) or (n>filesize(f1)) then exit;
for i:=n to filesize(f1)-1 do begin
seek(f1,i);
read(f1,st);
seek(f1,i-1);
write(f1,st);
end;
seek(f1, filesize(f1)-1);
truncate(f1);
end;
end;
procedure del2;
var
n,i:byte;
st:t2;
begin
if filesize(f2)=0 then begin
writeln('записей нет');
readkey;
end
else begin
write('введите номер записи для удаления (1-',filesize(f2),') ');
readln(n);
if (n<1) or (n>filesize(f2)) then exit;
for i:=n to filesize(f2)-1 do begin
seek(f2,i);
read(f2,st);
seek(f2,i-1);
write(f2,st);
end;
seek(f2, filesize(f2)-1);
truncate(f2);
end;
end;
procedure doc;
var
year,flg,i:integer;
st1:t1;
st2:t2;
begin
write('найти книги после ');readln(year);
seek(f2,0);
writeln('шифр':6,'автор':15,'название':15,'издательство':15,'год':5,'тематика':15);
i:=1;
while not eof(f2) do begin
read(f2,st2);
if st2.year>= year then begin
flg:=0;
seek(f1,0);
while ((not eof(f1)) and (flg=0)) do begin
read(f1,st1);
if (st1.sh=st2.sh) then flg:=1;
end;
if flg=0 then
writeln('книга с шифром ',st2.sh,' не найдена')
else
writeln(st1.sh:6,st1.avt:15,st1.naz:15,st2.izd:15,st2.year:5,st2.tem:15);
if ((i mod 24)=0) then begin
write('нажмите любую клавишу');
readkey;
end;
i:=i+1;
end
end;
write('< конец >');
readkey;
end;
begin
init;
Repeat
Clrscr;
writeln('╔════════════════════════════════════════╗');
writeln('║ Главное меню программы ║');
writeln('╟────────────────────────────────────────╢');
writeln('║ 1 - Просмотреть 1-й файл ║');
writeln('║ 2 - Просмотреть 2-й файл ║');
writeln('║ 3 - Добавить записи в 1-й файл ║');
writeln('║ 4 - Добавить записи во 2-й файл ║');
writeln('║ 5 - Удалить записи в 1-м файле ║');
writeln('║ 6 - Удалить записи во 2-м файле ║');
writeln('║ 7 - Вывести документ ║');
writeln('║ 8 - Выход ║');
writeln('╚════════════════════════════════════════╝');
case readkey of
'1' : vi1;
'2' : vi2;
'3' : add1;
'4' : add2;
'5' : del1;
'6' : del2;
'7' : doc;
'8' : exit;
end
until false;
end.
Программа на языке C++
#include <io.h>
#include <iostream.h>
#include <conio.h>
#include <fcntl.h>
#include <SYS\STAT.h>
struct t1{
int sh;
char avt[15],naz[15];
};
struct t2{
int sh,year;
char izd[15],tem[15];
};
int f1,lt1,f2,lt2;
void init(){
lt1=sizeof(t1);
lt2=sizeof(t2);
if ((f1=open("data1",O_RDWR|O_BINARY))==-1)
f1=creat("data1",S_IREAD|S_IWRITE);
if ((f2=open("data2",O_RDWR|O_BINARY))==-1)
f2=creat("data2",S_IREAD|S_IWRITE);
}
void vi1()
{
t1 st;
int i;
i=1;
lseek(f1,0,0);
cout << " N шифр автор название\n";
while (!eof(f1))
{
read(f1,&st,lt1);
cout.width(3); cout << i;
cout.width(6); cout << st.sh;
cout.width(15);cout << st.avt;
cout.width(15);cout << st.naz << "\n";
if ((i % 24)==0)
{
cout << "нажмите любую клавишу\n";
getch();
}
i++;
}
cout << "< конец >";getch();
}
void vi2()
{
t2 st;
int i;
i=1;
lseek(f2,0,0);
cout << " N шифр издательство тематика год\n";
while (!eof(f2))
{
read(f2,&st,lt2);
cout.width(3); cout << i;
cout.width(6); cout << st.sh;
cout.width(15);cout << st.izd;
cout.width(15);cout << st.tem;
cout.width(5); cout << st.year << "\n";
if ((i % 24)==0)
{
cout << "нажмите любую клавишу\n";
getch();
}
i++;
}
cout << "< конец >";getch();
}
void add1()
{
t1 st;
cout << "шифр: ";cin >> st.sh;
cout << "автор: ";cin >> st.avt;
cout << "название: ";cin >> st.naz;
lseek(f1,0,2);
write(f1,&st,lt1);
}
void add2()
{
t2 st;
cout << "шифр: ";cin >> st.sh;
cout << "издательство: ";cin >> st.izd;
cout << "тематика: ";cin >> st.tem;
cout << "год: ";cin >> st.year;
lseek(f2,0,2);
write(f2,&st,lt2);
}
void del1()
{
int n,i;
t1 st;
if (filelength(f1)==0)
{
cout << "записей нет";
getch();
return;
}
cout << "введите номер записи для удаления (1-" <<
(filelength(f1)/lt1) << ") ";
cin >> n;
if ((n<1) | (n>(filelength(f1)/lt1))) return;
for (i=n;i<(filelength(f1)/lt1);i++)
{
lseek(f1,i*lt1,0);
read(f1,&st,lt1);
lseek(f1,(i-1)*lt1,0);
write(f1,&st,lt1);
}
chsize(f1,filelength(f1)-lt1);
}
void del2()
{
int n,i;
t2 st;
if (filelength(f2)==0)
{
cout << "записей нет";
getch();
return;
}
cout << "введите номер записи для удаления (1-" <<
(filelength(f2)/lt2) << ") ";
cin >> n;
if ((n<1) | (n>(filelength(f2)/lt2))) return;
for (i=n;i<(filelength(f2)/lt2);i++)
{
lseek(f2,i*lt2,0);
read(f2,&st,lt2);
lseek(f2,(i-1)*lt2,0);
write(f2,&st,lt2);
}
chsize(f2,filelength(f2)-lt2);
}
void doc()
{
int year,i,flg;
t1 st1;
t2 st2;
cout << "найти книги после ";
cin >> year;
lseek(f2,0,0);
cout << " шифр автор название издательство" <<
" год тематика\n";
i=1;
while (!eof(f2))
{
read(f2,&st2,lt2);
if (st2.year>=year)
{
flg=0;
lseek(f1,0,0);
while (!(eof(f1) | flg))
{
read(f1,&st1,lt1);
if (st1.sh==st2.sh) flg=1;
}
if (!flg)
cout << "книга с шифром " << st2.sh << " не найдена!\n";
else
{
cout.width(6); cout << st1.sh;
cout.width(15);cout << st1.avt;
cout.width(15);cout << st1.naz;
cout.width(15);cout << st2.izd;
cout.width(5); cout << st2.year;
cout.width(15);cout << st2.tem << "\n";
if ((i%24)==0)
{
cout << "нажмите любую клавишу\n";
getch();
}
i++;
}
}
}
cout << "< конец >";
getch();
}
void main()
{
int vid;
init();
do
{
clrscr();
cout << "╔════════════════════════════════════════╗\n";
cout << "║ Главное меню программы ║\n";
cout << "╟────────────────────────────────────────╢\n";
cout << "║ 1 - Просмотреть 1-й файл ║\n";
cout << "║ 2 - Просмотреть 2-й файл ║\n";
cout << "║ 3 - Добавить записи в 1-й файл ║\n";
cout << "║ 4 - Добавить записи во 2-й файл ║\n";
cout << "║ 5 - Удалить записи в 1-м файле ║\n";
cout << "║ 6 - Удалить записи во 2-м файле ║\n";
cout << "║ 7 - Вывести документ ║\n";
cout << "║ 8 - Выход ║\n";
cout << "╚════════════════════════════════════════╝\n";
switch (getch())
{
case 49: vi1(); break;
case 50: vi2(); break;
case 51: add1(); break;
case 52: add2(); break;
case 53: del1(); break;
case 54: del2(); break;
case 55: doc(); break;
case 56: return;
}
}
while (1);
}