Создание базы данных
Федеральное
Агентство по образованию.
ГОУ
ВПО Московский государственный открытый университет.
Чебоксарский
институт (филиал).
КАФЕДРА
Информационных
технологий и программирования
Специальность 220201
Курс II
(сокращенный).
Отделение: заочное.
Курсовая
работа
по
дисциплине:
Программирование
и основы алгоритмизации
Тема:
«Создание базы данных»
Вариант 19
Дата проверки:
Выполнила студентка:
Сергеева С.А.
Результат проверки:
Учебный шифр:
607079
Содержание:
1. Постановка задач
. Уточнение поставленных задач
.1 Язык программирования
.2 Способ хранения данных
.3 Назначение типов для данных
. Подробная структура 1 и 2-ой
таблицы
. Текст программы
5. Блок-схемы к запросам
.Системные требования
Список литературы
1. Постановка задач
Целью курсовой работы: закрепление теоретических
знаний, полученных по данному курсу и смежным дисциплинам, освоение современных
методов и средств программирования.
Задание:
I. Создать базу
данных, включая две таблицы: «Сотрудники технического бюро» и «Проекты и
разработки».
В структуре первой таблицы должны быть следующие
поля:
1. Порядковый (табельный) номер.
2. Ф.И.О. сотрудника.
. Пол сотрудника.
. Адрес сотрудника.
. Домашний телефон.
. Стаж работы.
. Дата рождения.
. Образование.
. Какое учебное заведение окончил.
. Область техники.
. Количество проектов.
. Оклад.
. Количество детей.
В структуре второй таблицы должны быть следующие
поля:
1. Ф.И.О. сотрудника
2. Наименование проекта или разработки
. Тип (проект или разработка)
. Дата начала создания проекта или
разработки
. Дата завершения проекта или разработки
. Полученный эффект в рублях.
. Тип эффекта ( технический или
экономический)
II. Заполнить
информацией обе таблицы, содержащие каждая не менее 20 записей. При занесении
информации в БД необходимо учесть возможность выполнения каждого запроса из III-го
пункта задания. Учесть также, что в первой таблице записи с одним сотрудником
не повторяются, а во второй - повторяются, т.к. один сотрудник технического
бюро может иметь несколько проектов и разработок.. Получить отчет на экран
монитора по заданным запросам :
а) Вывести список всех улиц, в которых проживают
сотрудники, в алфавитном порядке.
б) Отобрать сотрудников, окончивших конкретное
учебное заведение.
в) Отобрать сотрудников, имеющих эффект от
разработок свыше 100 тыс.руб.
г) Вывести список сотрудников по суммарному
эффекту в порядке убывания
IV. Составить
алгоритмы выполнения каждого запроса в виде R
- схемы.
V. Составить отчет
по курсовой работе, отражающий все этапы создания БД, тестирования программной
продукции с распечаткой всех используемых форм, R
- схем по выполненным запросам и программных кодов в виде модулей.
2. Уточнение поставленных задач
.1 Язык программирования
Для создания базы данных и дальнейшего
выполнения запросов по выше перечисленным параметрам я пользовалась языком
программирования С++.
Язык С++ представляет собой комбинацию языка
высокого уровня и ассемблера. Программа (база данных) была создана в
интегрированной среде (Turbo
C++ version
3.1), среда была разработана фирмой Borland для упрощения процесса создания
программ и их отладки.
.2 Способ хранения данных
Все данные которая использует программа хранятся
в 2-х текстовых файлах TAB1.rd
(первая таблица) и TAB2.rd
(вторая таблица). Данные хранятся в файлах поочередно через пробелы. В одной
строке не может содержаться данные более чем одного сотрудника.
.3 Назначение типов для данных
3. Подробная Структура 1-ой таблицы (struct
tab1)
Таблица 1
Наименование
поля
|
Расшифровка
поля
|
Кол-во
бит
|
Тип
в C++
|
nomer
|
Фамилия
|
null-terminated string
|
char*
|
fam
|
Имя
|
null-terminated string
|
char*
|
och
|
Отчество
|
null-terminated string
|
char*
|
pol
|
Пол
|
null-terminated string
|
char*
|
gor
|
Город
|
null-terminated string
|
char*
|
ulic
|
Улица
|
null-terminated string
|
char*
|
dk
|
Дом/Квартира
|
null-terminated string
|
char*
|
tel
|
Домашний
телефон
|
null-terminated string
|
char*
|
staj
|
Стаж
|
null-terminated string
|
char*
|
rojd
|
Дата
рождения
|
|
|
obraz
|
Образование
|
null-terminated string
|
char*
|
ucheb
|
Оконченное
учебное заведение
|
null-terminated string
|
char*
|
obteh
|
Область
техники
|
null-terminated string
|
char*
|
proek
|
Кол-во
проектов
|
1
bytes
|
int
|
okl
|
Оклад
|
4 bytes
|
long
|
deti
|
Кол-во
детей
|
1 byte
|
int
|
Подробная Структура 2-ой таблицы (struct
tab2).
Таблица 2
Расшифровка
поля
|
Кол-во
бит
|
Тип
в C++
|
fam
|
Фамилия
|
null-terminated string
|
char*
|
im
|
Имя
|
null-terminated string
|
char*
|
och
|
Отчество
|
null-terminated string
|
char*
|
raz
|
Наименование
|
null-terminated string
|
char*
|
tip
|
Тип
|
null-terminated string
|
char*
|
|
Дата
начала
|
|
|
ndat
|
День
|
1
byte
|
int
|
nmes
|
Месяц
|
1 byte
|
int
|
ngod
|
Год
|
1 bytes
|
int
|
|
Дата
завершения
|
|
|
kdat
|
День
|
1
byte
|
int
|
kmes
|
Месяц
|
1 byte
|
int
|
kgod
|
Год
|
1 bytes
|
int
|
eff
|
Эффект
|
4
bytes
|
long
|
tef
|
Тип
эффекта
|
null-terminated string
|
unsigned char
|
4. Текст программы
#include
<stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>tab1 // структура
первой
таблицы
{
char
nomer[15]; char fam[15];
char im[15]; char och[15];
char pol[5]; char gor[20];
char ulic[20]; char
dk[10];
char tel[50]; char
staj[20];
char rojd[15]; char
obraz[30];
int proek; long okl;
int deti;
};tab2
// структура второй таблицы
{
char fam[20]; char im[20];
char och[20]; char
raz[70];
char tip[15]; int nden;
int nmes; int ngod;
int kden; int kmes; int
kgod;
long eff; char tef[20];
};a[100];z;b[100];q;
*Inp, *Inp2;
// указатели на поток
int
s,k;
//Глобальные переменные, им будет присваиваться значение количества строк
структурных массивов.
void
scantab() // Процедура
чтения таблиц
{
int i,j,z;
// фаил открывается для чтения с дозаписью
Inp=fopen ("tab1.rd",
"r+");=0;
//Чтение первой таблицы идет пока файл не
достигнет конца
while (!feof(Inp))
{(Inp, "%s",
&a[i].nomer);(Inp, "%s", &a[i].fam);(Inp, "%s",
&a[i].im);(Inp, "%s", &a[i].och);(Inp, "%s",
&a[i].pol);(Inp, "%s", &a[i].gor);(Inp, "%s",
&a[i].ulic);(Inp, "%s", &a[i].dk);(Inp, "%s",
&a[i].tel);(Inp, "%s", &a[i].staj);(Inp, "%s",
&a[i].rojd);(Inp, "%s", &a[i].obraz);(Inp, "%s", &a[i].ucheb);(Inp,
"%s", &a[i].obteh);(Inp, "%d", &a[i].proek);(Inp,
"%ld", &a[i].okl);(Inp, "%d", &a[i].deti);++;
};=i;=fopen ("tab2.rd",
"r+"); i=0;
//Чтение второй таблицы идет пока файл не
достигнет конца
while (!feof(Inp2))
{(Inp2, "%s",
&b[i].fam);(Inp2, "%s", &b[i].im);(Inp2, "%s",
&b[i].och);(Inp2, "%s", &b[i].raz);(Inp2, "%s",
&b[i].tip);(Inp2, "%d", &b[i].nden);(Inp2, "%d",
&b[i].nmes);(Inp2, "%d", &b[i].ngod);(Inp2, "%d",
&b[i].kden);(Inp2, "%d", &b[i].kmes);(Inp2, "%d",
&b[i].kgod);(Inp2, "%ld", &b[i].eff);(Inp2, "%s",
&b[i].tef);++;
};=i;
}
printlist () // процедура
вывода на экран списка сотрудников
{i;(i=0; i<s; i++)
{(6);("%s ",
a[i].nomer);("%s ", a[i].fam);("%s ",
a[i].im);("%s", a[i].och); textcolor (9);(50, i+1); cprintf
("Kol-vo proektov : %d\n\r", a[i].proek);
}
}
swapb(int
&j) //процедура
меняющая элементы местами в структурном массиве b;
{
q=b[j];
b[j]=b[j+1];
b[j+1]=q;
}
void
swapa(int
&j) //процедура
меняющая элементы местами в структурном массиве a;
{=a[j];[j]=a[j+1];[j+1]=z;
} sort1()
// Процедура первого запроса
{i,j;(10);("Sortirovka po
ulicam progivaniya !!!\n\n\r");(i=0; i<s; i++)
for
(j=0; j<(s-1); j++)
//
сортировка методом «пузырька» в алфавитном порядке
if
(strcmp(a[j].ulic, a[j+1].ulic)>0) swapa(j);(i=0;i<s;i++)
{
textcolor (6);
cprintf ("%s ",
a[i].nomer);
printf ("%s ",
a[i].fam);
printf ("%s ",
a[i].im);
printf ("%s",
a[i].och); textcolor (9);
gotoxy (50, i+3); cprintf
("%s\n\r", a[i].ulic);
}
}
sort2() // Процедура
второго запроса
{i,j=3;w[10];(10);("Vvedite
Uchebnoe zavedinie (Primer: MGOU) : ");("%s",
&w);(11);();(10);("Sotridniki okonchivshie %s !!!\n\n\r",
w);(i=0; i<s; i++)
if
(strcmp(a[i].ucheb,w)==0)
//сравнение названия учебного заведения с нами введенным
{
textcolor (6);
cprintf ("%s ",
a[i].nomer);
printf ("%s ",
a[i].fam);
printf ("%s ",
a[i].im);
printf ("%s",
a[i].och); textcolor (9);
gotoxy (50, j++); cprintf
("%s\n\r", a[i].ucheb);
}
} sort3()
// Процедура третьего запроса
{i,j=1,x;=3;(10);("Sotrudniki
imeyushie effect ot razrabotok > 100000 p. !!!\n\n\r");(i=0; i<k;
i++)
if
(b[i].eff>=100000)
{
textcolor
(6);
cprintf
("%d) ",j++);
printf
("%s ", b[i].fam);
printf
("%s ", b[i].im);
printf
("%s\t", b[i].och);
textcolor
(9);
cprintf
("Nazvanie Proekta/Razrabotki : ");
cprintf
("%s\n\n\r", b[i].raz); x=x+3;
}
}
void
sort4() // Процедура
третьего запроса
{
int i,j,l;e;(10);("Sortirovka
po sumarnomu effektu !!!\n\n\r");(i=0; i<k; i++)
for (j=0; j<(k-1); j++)
if
(strcmp(b[j].fam, b[j+1].fam)<0) swapb (j);=0; j=0;(i<k)
{
e=b[i].eff;
i++;
{
// счетчик суммарного эффекта
while (strcmp(b[i].fam,
b[i-1].fam)==0 &&
strcmp(b[i].im,
b[i-1].im)==0 &&
strcmp(b[i].och,
b[i-1].och)==0)
{
e=e+b[i].eff;
i++;
}
b[j]=b[i-1];
b[j].eff=e; j++; l=j;
}
}=0;(i=0; i<l; i++)
for (j=0; j<(l-1); j++)
// сортировка суммарного эффекта в
порядке возрастания
if
(b[j].eff<b[j+1].eff) swapb(j);(i=0; i<l; i++)
{
printf ("%s ",
b[i].fam);
printf ("%s ",
b[i].im);
printf ("%s",
b[i].och);
textcolor (9); gotoxy (50,
i+3); cprintf ("Summarniy Effect = %ld p.\n\r", b[i].eff);
}
}dobsotr()
{i;(10);("Dobavleniennie
Sotridnika !!!\n\n\r");("Tabelniy nomer sotrudnika (Primer: #001) :
");("%s", &a[s].nomer);(Inp, "\n%s ",
a[s].nomer);("Familia : ");("%s", &a[s].fam);(Inp,
"%s ", a[s].fam);("Name : ");("%s",
&a[s].im);(Inp, "%s ", a[s].im);("Ochestvo :
");("%s", &a[s].och);(Inp, "%s ",
a[s].och);("Pol sotrudnika (m/g): ");("%s",
&a[s].pol);(Inp, "%s ", a[s].pol);("Gorod v kotorom
progivaet sotrudnik (Primer: Cheboksari) : ");("%s",
&a[s].gor);(Inp, "%s ", a[s].gor);("Ulica na kotoroy
progivaet sotrudnik (Primer: Afanas'eva) : ");("%s",
&a[s].ulic);(Inp, "%s ", a[s].ulic);("Nomer doma/Kvartira
(Primer: 16/23) : ");("%s", &a[s].dk);(Inp, "%s ",
a[s].dk);("Domashniy telefon (Primer: 87-98-01) : ");("%s",
&a[s].tel);(Inp, "%s ", a[s].tel);("Staj Raboti (Primer:
5-let) : ");("%s", &a[s].staj);(Inp, "%s ",
a[s].staj);("Data rojdeniya (Primer: 20.10.1980) :
");("%s", &a[s].rojd);(Inp, "%s ",
a[s].rojd);("Obrazovanie (Primer: Visshee-teh) : ");("%s",
&a[s].obraz);(Inp, "%s ", a[s].obraz);("Kakoe uchebnoe
zavedenie okonchil (Primer: MGOU) : ");("%s",
&a[s].ucheb);(Inp, "%s ", a[s].ucheb);("Oblast' tehniki :
");("%s", &a[s].obteh);(Inp, "%s ",
a[s].obteh);("Kolichestvo proektov : ");("%d",
&a[s].proek);(Inp, "%d ", a[s].proek);("Oklad :
");("%ld", &a[s].okl);(Inp, "%ld ",
a[s].okl);("Kolichestvo detey : ");("%d", &a[s].deti);(Inp,
"%d", a[s].deti);
if (a[s].proek>0)
{
textcolor (10);
cprintf
("\n\n\Opisanie Proekta ili razrabotki !!!\r");
for (i=0;
i<a[s].proek; i++)
{
fprintf (Inp2,
"\n%s ", a[s].fam);
fprintf (Inp2,
"%s ", a[s].im);
fprintf (Inp2,
"%s ", a[s].och);
printf
("\n\nNaimenovanie %d-ogo proekta ili razrabotki:\n(Vvoditsa_bes_probelov):
",i+1);
scanf
("%s", &b[k].raz);
fprintf (Inp2,
"%s ", b[k].raz);
printf ("Tip
(Proekt ili Razrabotka) : ");
scanf
("%s", &b[k].tip);
fprintf (Inp2,
"%s ", b[k].tip);
printf
("Data nachala sozdaniya proekta (Primer: 20 11 1999) : ");
scanf
("%d", &b[k].nden);
fprintf (Inp2,
"%d ", b[k].nden);
scanf
("%d", &b[k].nmes);
fprintf (Inp2,
"%d ", b[k].nmes);
scanf
("%d", &b[k].ngod);
fprintf (Inp2,
"%d ", b[k].ngod);
printf
("Data konca sozdaniya proekta (Primer: 01 10 2000) : ");
scanf
("%d", &b[k].kden);
fprintf (Inp2,
"%d ", b[k].kden);
scanf
("%d", &b[k].kmes);
fprintf (Inp2,
"%d ", b[k].kmes);
scanf
("%d", &b[k].kgod);
fprintf (Inp2,
"%d ", b[k].kgod);
printf
("Polucheniy effekt v rub. : ");
scanf
("%ld", &b[k].eff);
fprintf (Inp2,
"%ld ", b[k].eff);
printf ("Tip
effecta (Tehnicheskiy ili Ekonomicheskiy) : ");
scanf
("%s", &b[k].tef);
k=k+1;
}
}
fcloseall
(); // закрытие файлов для обновления списка после его перезаписи (добавления)
return 0;
}
void
delsotr() // Процедура
удаления из списка
{i,j,l;w[20],r[20],g[20];=fopen("tab1.rd",
"w"); //
открытие файлов для записи
Inp2=fopen ("tab2.rd",
"w");(10);("Vvedite F.I.O sotrudnika kotororo sleduet udalit' iz
bazi !!!\n\n\r");("Familiya : ");("%s",
&w);("Ima : ");("%s", &r);("Ochestvo :
");("%s", &g);=0;(i=0; i<s; i++)
if (strcmp(a[i].fam,w)!=0 &&
strcmp(a[i].im,r)!=0
&&
strcmp(a[i].och,g)!=0)
{
a[j]=a[i]; j++;
}(i=0; i<j; i++)
{
fprintf (Inp, "%s
", a[i].nomer);
fprintf (Inp, "%s
", a[i].fam);
fprintf (Inp, "%s
", a[i].im);
fprintf (Inp, "%s
", a[i].och);
fprintf (Inp, "%s
", a[i].pol);
fprintf (Inp, "%s
", a[i].gor);
fprintf (Inp, "%s
", a[i].ulic);
fprintf (Inp, "%s
", a[i].dk);
fprintf (Inp, "%s
", a[i].tel);
fprintf (Inp, "%s
", a[i].staj);
fprintf (Inp, "%s
", a[i].rojd);
fprintf (Inp, "%s
", a[i].obraz);
fprintf (Inp, "%s
", a[i].ucheb);
fprintf (Inp, "%s
", a[i].obteh);
fprintf (Inp, "%d
", a[i].proek);
fprintf (Inp, "%ld
", a[i].okl);
if (i==(j-1))
fprintf (Inp,
"%d", a[i].deti);
else fprintf (Inp,
"%d\n", a[i].deti);
}=s-1;=0;(i=0; i<k;
i++)
if (strcmp(b[i].fam,w)!=0
&&
strcmp(b[i].im,r)!=0
&&
strcmp(b[i].och,g)!=0)
{
b[j]=b[i]; j++;
}(i=0; i<j;
i++)
{
fprintf (Inp2,
"%s ", b[i].fam);
fprintf (Inp2,
"%s ", b[i].im);
fprintf (Inp2,
"%s ", b[i].och);
fprintf (Inp2,
"%s ", b[i].raz);
fprintf (Inp2,
"%s ", b[i].tip);
fprintf (Inp2,
"%d ", b[i].nden);
fprintf (Inp2,
"%d ", b[i].nmes);
fprintf (Inp2,
"%d ", b[i].ngod);
fprintf (Inp2,
"%d ", b[i].kden);
fprintf (Inp2,
"%d ", b[i].kmes);
fprintf (Inp2,
"%d ", b[i].kgod);
fprintf (Inp2,
"%ld ", b[i].eff);
if (i==(j-1))
fprintf (Inp2,
"%s", b[i].tef);
else fprintf
(Inp2, "%s\n", b[i].tef);
}=j;
fcloseall
(); // закрытие файлов для обновления списка после его перезаписи (удаления)
}main()
{let;();
// Вывод на экран простейшего интерфейса
do
{();(10);("Vibirite deystvie
!!!\n\n\r");(11);("[1] - Zapros #1\n\r");("[2] - Zapros
#2\n\r");("[3] - Zapros #3\n\r");("[4] - Zapros
#4\n\r");("[5] - Dobavit' sotrudnika\n\r");("[6] - Udalit'
sotrudnika\n\r");("[7] - Spisok sotrudnikov\n\r");("[0] -
Quit program");();=getch();
//
Вызов процедур в зависимости от нажатой кнопки
switch
(let)
{
case '1' : clrscr() ;
sort1 (); getch (); break;
case '2' : clrscr() ;
sort2 (); getch (); break;
case '4' : clrscr() ;
sort4 (); getch (); break;
case '5' : clrscr() ;
dobsotr (); getch (); break;
case '6' : clrscr() ;
delsotr (); getch (); break;
case '7' : clrscr() ;
printlist (); getch (); break;
case '0' : return 1;
default : clrscr ();
break;
}
}(1);
}
база данное запрос алгоритм
5. Блок-схемы к запросам
.1 Первый запрос
Результат запроса выводится в форме: (номер/
Ф.И.О/улица).
.2 Второй запрос
Результат запроса выводится в форме (номер/
Ф.И.О/Учебное заведение).
5.3 Третий запрос
Результат запроса выводится в форме
(номер/Ф.И.О/Эффект/Проект).
.4 Четвертый запрос
Результат запроса выводится в форме (Ф.И.О/
суммарный эффект).
6. Системные требования
Операционная система: MS-Windows
9-x, Me,
NT, 2k,
2k3, XP,
Vista;
Оперативная память: 8 Mb
и выше;
CPU: Intel
386 и выше;
Видеокарта: 4 Mb
и выше;
Не менее 10 мегабайт свободного места на жестком
диске.
Не требует установки С++ на компьютер.
Список литературы:
1. Программирование
на алгоритмических языках: : Лабораторный практикум / Под ред. И.Т. Артемьев,
Л.А. Ильина, Д.В. Ильин. -Чебоксары.: Чуваш. ун-т. 2005г -100 с.