База данных
скачать (137.4 kb.)
Доступные файлы (9):
12.BAK | |||
12.CPP | |||
12.EXE | |||
12.OBJ | |||
BASE | |||
FUNC.BAK | |||
FUNC.CPP | |||
MAIN.BAK | |||
Курсач.doc | 262kb. | 15.06.2009 14:33 | ![]() |
содержание
- Смотрите также:
- PowerPoint Template [ документ ]
- Контрольные вопросы Дайте определение понятия «база данных» [ документ ]
- База данных: Процессоры [ документ ]
- Классификация баз данных. Локальная и удаленная базы данных. С точки зрения пользователя, база данных [ документ ]
- База данных. Основные понятия [ документ ]
- Программа - SLS V.2.2. Справочник лекарственных средств [ программа ]
- База данных Евровидение [ документ ]
- База данных, лекционный курс [ документ ]
- База данных [ документ ]
- База данных - Сотрудники [ документ ]
- База данных библиотеки [ документ ]
- АСУ и обработка информации на предприятии [ документ ]
Курсач.doc
Уфимский государственный авиационный технический университетКафедра технической кибернетики факультет информатики и робототехники
Задание
на курсовое проектирование по информатике, программированию и основам алгоритмизации
на тему «Экскурсии»
выдано 30 марта 2009г. студенту первого курса
группы УТС-117
Шумкову Алексею Владимировичу
Руководитель проекта: Доцент кафедры ТК
Ганеев Артур Рифович.
Уфа 2009
Постановка задачи: разработать программу на языке Си для обработки данных типа структура. Обработка данных должна включать следующие функции:
создание новой базы данных (с возможностью задания имени файла)
просмотр существующей базы данных (чтение данных осуществить из файла);
редактирование базы данных (с сохранением изменений в файле);
дополнение базы данных новыми записями (с сохранением в файле);
удаление записей из базы данных (с сохранением в файле);
поиск в базе данных (по одному и двум поисковым признакам) с выводом на экран найденных записей или сообщения о неуспешном поиске;
сортировка данных по заданному полю (с сохранением в файле).
Вариант № 19 «Экскурсии»
Наименование | Страна | Стоимость | Продолжительность | Транспорт |
| | | | |
Введение:
Целью работы является разработка программы на языке Си для обработки данных (требования к программе изложены в аннотации), моя программа должна корректно обрабатывать данные представление виде следующей таблицы:
Наименование | Страна | Стоимость | Продолжительность | Транспорт |
Разработанная программа позволяет выполнять следующие задачи:
1. Просмотр существующей базы данных
2. Создание новой базы данных
3. Редактирование базы данных (добавление, исправление и удаление записей)
4. Поиск в базе данных по одному или всем полям
5. Сортировка базы данных по определённому полю
1. Описание основных переменных и функций:
1.1 Описание функций
В программе используются следующие основные функции (табл. 1)
Таблица №1
Название функции | Параметры | Назначение |
void main | () | основная функция программы |
void create | () | создание файла новой базы данных |
void load | (char *base) | загрузка данных из файла в массив структур, base – имя файла базы данных |
void save | (char *base) | запись содержания структур в файл, base – имя файла базы данных |
void add | (char *base) | добавление записи в массив структур, base – имя файла базы данных |
void view | (char *base) | просмотр содержания массива, base – имя файла базы данных |
void edit | (char *base) | правка записи, base – имя файла базы данных |
void delet | (char *base) | удаление записи, base – имя файла базы данных |
void find | (char *base) | поиск записи (кол-во условий от 1 до 5) , base – имя файла базы данных |
void sort | (char *base) | сортировка базы данных, base – имя файла базы данных |
void sort1 | () | сортировка по названию |
void sort2 | () | сортировка по стране |
void sort3 | () | сортировка по стоимости |
void sort4 | () | сортировка по продолжительности |
void sort5 | () | сортировка по виду транспорта |
void replace | (int x) | меняет местами значения в массиве, элемент[x] меняется значением с элементом[x+1] |
1.2 Описание переменных
В программе используются следующие основные переменные (табл. 2)
Таблица №2
Название переменной | Тип | Назначение | Кол-во символов |
ch | char | хранит текущий пункт меню | 1 |
err | int | код ошибки | 1 |
*file | char | имя файла | 1 |
size | int | кол-во записей в БД | 1 |
*f | FILE | указатель на файл | 1 |
*name | char | имя файла | 1 |
list[] | kyrs | массив, в котором хранится БД | 300 |
fin[] | kyrs | массив, хранящий результаты поиска | 300 |
tmp | kyrs | временное хранилище записи БД | 1 |
j | int | счётчик цикла или элемент массива | 1 |
i | int | счётчик цикла или элемент массива | 1 |
2. Блок-схемы:
2.1 Общий принцип работы программы:

2.2 Блок-схемы основных функции программы:


Рис 3. – Функция create(), создает файл базы данных

Рис 4. – Функции open(), открывает файл базы данных

Рис 5. – Функции load(), загружает данные из файла в базу данных

Рис 6. – Функции save(), сохраняет изменения в файле базы данных

Рис 7. – Функции add(), добавляет запись в базу данных

Рис 8. – Функции view(), осуществляет просмотр базы данных

Рис 9. – Функции edit(), изменяет содержимое записи базы данных

Рис 10. – Функции delet(), удаляет запись из базы данных

Рис 11. – Функции find(), поиск записи с базе данных

Рис 12. – Функции sort(), сортировка быза данных

Рис 13. – Функции sort1()…sort5()1,осуществляют сортировку базы данных

Рис 14. – Функции replace(int x), меняет местами значения элементов массива
Листинг программы:
//12.cpp
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream.h>
#include <fstream.h>
#include <iomanip.h>
#include <io.h>
#include <dos.h>
#include "FUNC.cpp"
char ch, *file;
int err=0, size=0;
extern char *file;
void create();
void main()
{
clrscr();
cout<<"Viberite deistvie:"<<endl;
cout<<"1. Otkrit' bazu"<<endl;
cout<<"2. Sozdat' bazu"<<endl;
cout<<"3. Vihod"<<endl;
do ch=getch();
while((ch!='1')&&(ch!='2')&&(ch!='3'));
if (ch=='3') exit(0);
if (ch=='2') create();
if (ch=='1') {
while (err==0){
cout<<"Please enter name file: "<<endl;
char *name;
FILE *f;
cin>>name;
if ((f=fopen(name,"r"))==NULL){
cout<<"File not found!"<<endl;
}
else{
err=1;
file=new char(strlen(name));
strcpy(file,name);
fclose(f);
open(file);
}
}
}
delete file;
}
//FUNC.cpp
extern char ch;
extern int size;
int fs=0;
/*const int tab=1;
const int zag=4;
const int tex=7;*/
struct EXCURSION {
char na[30],country[30],tr[30];
int cost,du,id;
} list[300],tmp, fin[300];
void load(char *base);
void save(char *base);
void add(char *base);
void view(char *base);
void edit(char *base);
void delet(char *base);
void find(char *base);
void sort(char *base);
void sort1();
void sort2();
void sort3();
void sort4();
void sort5();
void replace(int);
void open(char *base){
load(base);
clrscr();
cout<<"Vibirite deistvie:"<<endl;
cout<<"1. Prosmotr"<<endl;
cout<<"2. Pravka bazi"<<endl;
cout<<"3. Dobavlenie "<<endl;
cout<<"4. Udalenie zapisi"<<endl;
cout<<"5. Poisk "<<endl;
cout<<"6. Sortirovka"<<endl;
cout<<"7. Vihod"<<endl;
do ch=getch();
while((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')&&(ch!='6')&&(ch!='7'));
switch (ch){
case '1': view(base);break;
case '2': edit(base);break;
case '3': add(base);break;
case '4': delet(base);break;
case '5': find(base);break;
case '6': sort(base);break;
case '7': exit(0); break;
default: exit(0);
}}
void sort(char *base){
clrscr();
cout<<"Please select field:\r\n1.Nazvanie 2.Strana 3.Cena 4.Prodolzhitelnost' 5.Transport\n6.Back to menu"<<endl;
do ch=getch();
while((ch!='1')&&(ch!='2')&&(ch!='3')&&(ch!='4')&&(ch!='5')&&(ch!='6'));
switch (ch){
case '1': sort1();break;
case '2': sort2();break;
case '3': sort3();break;
case '4': sort4();break;
case '5': sort5();break;
case '6': open(base);break;
default: exit(0);}
save(base);
cout<<"\r\nSorting...OK! View base";
getch();
open(base);}
void sort1(){
int i,j;
for (i=0; i<size; i++)
for (j=0; j<size; j++)
if (strcmp(list[j].na,list[j+1].na)>0) replace(j);
}
void sort2(){
int i,j;
for (i=0; i<size; i++)
for (j=0; j<size; j++)
if (strcmp(list[j].country,list[j+1].country)>0) replace(j);
}
void sort3(){
int i,j;
for (i=0; i<size; i++)
for (j=0; j<size; j++)
if (list[j].cost<list[j+1].cost) replace(j);}
void sort4(){
int i,j;
for (i=0; i<size; i++)
for (j=0; j<size; j++)
if (list[j].du<list[j+1].du) replace(j);}
void sort5(){
int i,j;
for (i=0; i<size; i++)
for (j=0; j<size; j++)
if (strcmp(list[j].tr,list[j+1].tr)>0) replace(j);}
void replace(int x){
strcpy(tmp.na,list[x].na);
strcpy(tmp.country,list[x].country);
tmp.cost=list[x].cost;
tmp.du=list[x].du;
strcpy(tmp.tr,list[x].tr);//1
strcpy(list[x].na,list[x+1].na);
strcpy(list[x].country,list[x+1].country);
list[x].cost=list[x+1].cost;
list[x].du=list[x+1].du;
strcpy(list[x].tr,list[x+1].tr);//2
strcpy(list[x+1].na,tmp.na);
strcpy(list[x+1].country,tmp.country);
list[x+1].cost=tmp.cost;
list[x+1].du=tmp.du;
strcpy(list[x+1].tr,tmp.tr);//3
strcpy(tmp.na, "");
strcpy(tmp.country, "");
tmp.cost=0;
tmp.du=0;
strcpy(tmp.tr, "");
}
void find(char *base){
clrscr();
cout<<"Please enter find record:\r\n";
cout<<"Nazvanie: "<<endl; cin>>tmp.na;
cout<<"Strana: "<<endl; cin>>tmp.country;
cout<<"Cena "<<endl; cin>>tmp.cost;
cout<<"Prodolzhitelnost: "<<endl; cin>>tmp.du;
cout<<"Transport: "<<endl; cin>>tmp.tr;
char *css;
int t=0;
for (;t<=strlen(tmp.na);t++){
css=strchr (tmp.na,' '); if (css) *(css)='_';}
int j=0,i=0;
for (;j<=size;j++)
if ((strcmp(tmp.na,list[j].na)==0)||(strcmp(tmp.country,list[j].country)==0)||(tmp.cost==list[j].cost)||(tmp.du==list[j].du)||(strcmp(tmp.tr,list[j].tr)==0)){
strcpy(fin[i].na,list[j].na);
strcpy(fin[i].country,list[j].country);
fin[i].cost=list[j].cost;
fin[i].du=list[j].du;
strcpy(fin[i].tr,list[j].tr);
fin[i].id=list[j].id;i++;
}
fs=--i;
strcpy(tmp.na, "");
strcpy(tmp.country, "");
tmp.cost=0;
tmp.du=0;
strcpy(tmp.tr, "");
getch();
int z,l,p=0;clrscr();
cout<<" ID ";
cout<<" Nazvanie ";
cout<<" Strana ";
cout<<" Cena ";
cout<<" Prodolzhtelnost' ";
cout<<" Transport ";
cout<<endl;
for(z=0; z<=fs; z++){
cout<<fin[z].id<<" ";
cout<<fin[z].na<<" ";
cout<<fin[z].country<<" ";
cout<<fin[z].cost<<" ";
cout<<fin[z].du<<" ";
cout<<fin[z].tr<<" ";
cout<<endl;
p++;
if (p==10){
p=0;getch();}}
getch();open(base);}
void delet (char *base){
clrscr();
int i,j;
cout<<"ID: ";
cin>>i;
--i;
if (i==size) --size;
else{
for (j=i;j<size;j++){
strcpy(list[j].na,list[j+1].na);
strcpy(list[j].country,list[j+1].country);
list[j].cost=list[j+1].cost;
list[j].du=list[j+1].du;
strcpy(list[j].tr,list[j+1].tr);
}
--size;}
cout<<"\r\nDelete record"<<i+1<<"OK!\r\n";
getch();
save(base);
open(base);}
void edit(char *base){
clrscr();
int i;
cout<<"ID: "; cin>>i; --i;
cout<<"\r\nOLD:\r\n";
cout<<"Nazvanie : \n"<<list[i].na;
cout<<"Strana : \n"<<list[i].country;
cout<<"Cena : \n"<<list[i].cost;
cout<<"Prodolzhitelnost' : \n"<<list[i].du;
cout<<"Transport\n"<<list[i].tr;
cout<<"\r\nNEW:\r\n";
cout<<"Nazvanie: "; cin>>tmp.na;
cout<<"Strana: "; cin>>tmp.country;
cout<<"Cena: "; cin>>tmp.cost;
cout<<"Prodolzhitelnost': "; cin>>tmp.du;
cout<<"Transport: "; cin>>tmp.tr;
char *css;
int t=0;
for (;t<=strlen(tmp.na);t++){
css=strchr (tmp.na,' '); if (css) *(css)='_';}
strcpy(list[i].na,tmp.na);
strcpy(list[i].country,tmp.country);
list[i].cost=tmp.cost;
list[i].du=tmp.du;
strcpy(list[i].tr,tmp.tr);
strcpy(tmp.na, "");
strcpy(tmp.country, "");
tmp.cost=0;
tmp.du=0;
strcpy(tmp.tr,"");
save(base);
getch();
open(base);}
void view(char *base){
int z,l,p=0;
clrscr();
cout<<" ID: ";
cout<<" Nazvanie: ";
cout<<" Strana: ";
cout<<" Cena: ";
cout<<" Prodolzhitelnost': ";
cout<<" Transport: ";
cout<<endl;
for(z=0; z<=size; z++){
cout<<list[z].id<<" ";
cout<<list[z].na<<" ";
cout<<list[z].country<<" ";
cout<<list[z].cost<<" ";
cout<<list[z].du<<" ";
cout<<list[z].tr<<" ";
cout<<endl;
p++;
if (p==10){
p=0;getch();}}
getch();
open(base);
}
void add(char *base){
clrscr();
FILE *f=fopen(base,"a");
cout<<"Nazvanie: "; cin>>tmp.na;
cout<<"Strana: "; cin>>tmp.country;
cout<<"Cena: "; cin>>tmp.cost;
cout<<"Prodolzhtelnost': "; cin>>tmp.du;
cout<<"Transport: "; cin>>tmp.tr;
char *css;
int t=0;
for (;t<=strlen(tmp.na);t++){
css=strchr (tmp.na,' '); if (css) *(css)='_';}
size++;
strcpy(list[size].na,tmp.na);
strcpy(list[size].country,tmp.country);
list[size].cost=tmp.cost;
list[size].du=tmp.du;
strcpy(list[size].tr,tmp.tr);
strcpy(tmp.na, "");
strcpy(tmp.country, "");
tmp.cost=0;
tmp.du=0;
strcpy(tmp.tr, "");
fclose(f);
save(base);
open(base);
}
void save(char *base){
int j=0;
FILE *f=fopen(base,"w");
fprintf(f,"%s %s %u %u %s", list[j].na, list[j].country, list[j].cost, list[j].du, list[j].tr);
for (j=1;j<=size;j++)
fprintf(f,"\n%s %s %u %u %s", list[j].na, list[j].country, list[j].cost, list[j].du, list[j].tr);
fclose(f);
}
void load(char *base){
int j=0;
FILE *f=fopen(base,"r");
while(!feof(f)){
fscanf(f,"%s %s %u %u %s", &tmp.na , &tmp.country, &tmp.cost, &tmp.du, &tmp.tr);
if (strcmp(tmp.na,"")!=0){
strcpy(list[j].na,tmp.na);
strcpy(list[j].country,tmp.country);
list[j].cost=tmp.cost;
list[j].du=tmp.du;
strcpy(list[j].tr,tmp.tr);
list[j].id=j+1;
j++;}
strcpy(tmp.na, "");
strcpy(tmp.country, "");
tmp.cost=0;
tmp.du=0;
strcpy(tmp.tr, "");}
size=--j;
fclose(f);}
Тестирование программы:
Рис.1 - Главное меню

На рисунке 1 представлено главное меню программы, которое позволяет осуществить открытие базы данных, создание базы данных или выход из программы. |
^
На рисунке 2 представлено меню программы для работы с БД, позволяющее открытие, редактирование, поиск и сортировку базы данных |

Рис.3 - Просмотр базы

Рис.4 – Изменение записи в БД.

Рис. 5 – Результаты поиска

На рисунке 5 представлен результат поиска в БД |
Рис.6 – Сортировка

На рисунке 6 представлен процесс сортировки БД |
Заключение:
В ходе выполнения курсовой работы разработана программа на языке Си для обработки данных типа структура. Обработка данных включает:
- создания новой БД
- просмотр существующей БД
- редактирование БД
- дополнение БД
- удаление записей из БД
- сортировка БД по определённому полю
- поиск записи по одному или нескольким критериям
При разработке программе использовались функции, массивы, циклы, указатели.
Разработанная программа позволяет повысить эффективность обработки данных и сократить время на поиск необходимых записей.
Скачать файл (137.4 kb.)