Автор: Пользователь скрыл имя, 15 Ноября 2011 в 13:38, курсовая работа
Задание: Написать программу, выполняющую следующие действия с базой данных:
1) Ввод записи с произвольным номером;
2) Вывод записи с заданным номером;
3) Сортировка записей по цене, по возрастанию;
4) Вывод всех записей в отсортированном виде на принтер;
5) Сохранение всех записей в файле;
6) Чтение базы из файла.
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
НОВОСИБИРСКИЙ
ГОСУДАРСТВЕННЫЙ
ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра
Вычислительной техники
Курсовая работа
«Программирование на языке Си»
Вариант
2
Факультет: АВТФ
Группа:
АВТ-022
Выполнил:
Антонов А.П.
Новосибирск, 2011 г.
Задание: Написать программу, выполняющую следующие действия с базой данных:
1) Ввод записи с произвольным номером;
2) Вывод записи с заданным номером;
3) Сортировка записей по цене, по возрастанию;
4) Вывод всех записей в отсортированном виде на принтер;
5) Сохранение всех записей в файле;
6) Чтение базы
из файла.
Вариант полей базы данных D: название книги, количество страниц, цена.
Память выделять
динамически.
Листинг
программы:
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
#define N 200 //кол-во записей
#define S 30 //длина имени книги(naz)
#define D 30 //максимальная
длина имени файла
struct bib
{
char naz[S]; //Название книги
int pg; //кол-во страниц
float
cen; //цена
} *bd[N];
int n;//кол-во
внесенных записей
//функция сортировки массива по цене, по возрастанию
void sort ()
{
int i, j;
struct bib *tmp;
for(i=0;i<n-1;i++)
for(j=i+1;j<
if(bd[i]->
{
tmp=
bd[i]=
bd[j]=
}
}
//функция ввода i-ой записи с клавиатуры
void in(int i)
{
bd[i]=(struct bib*)malloc(sizeof(struct
bib));//выделение памяти
под каждую новую запись
if (i>=N) {printf("Таблица
переполнена\n"); return;}
printf("Название книги: ");
fflush(stdin);
gets(bd[i]->naz);
printf("Кол-во страниц: ");
scanf("%d", &(bd[i]->pg));
printf("Цена: ");
scanf("%f", &(bd[i]->cen));
}
//функция вывода i-ой записи
void out(int i)
{
if (i>=n) {printf("Запись с таким номером на существует\n"); return;}
setlocale(LC_ALL, "C");
printf("%2d. %-40s %4d стр. %6.2f руб.\n", i+1, bd[i]->naz, bd[i]->pg, bd[i]->cen);
setlocale(LC_ALL, "rus");
}
//функция записи в файл
void save (char p[])
{
int i;
FILE *fl;
fl=fopen(p, "w"); //открываем файл
fprintf(fl, "%d\n", n); //пишем в файл кол-во записей
for (i=0; i<n; i++) //идем по записи
fprintf(fl, "%-40s %4d %4f\n", bd[i]->naz, bd[i]->pg, bd[i]->cen); //пишем в файл
fclose(fl);
}
//функция чтения из файла
void load (char p[])
{
FILE *fl;
char c;
fl=fopen(p, "r");
if (!fl) {printf("Файл не найден\n"); return;}
fscanf(fl, "%d", &n); //читаем кол-во записей
c=fgetc(fl); //
if (n>N) n=N;
for (int i=0; i<n; i++)
{
int j;
bd[i]=(
c=getc(fl);
for (j=0; c!=' '; j++)
{
bd[i]-
c=
}
bd[i]->naz[
fscanf(fl, "%d%f", &bd[i]->pg, &bd[i]->cen);
c=getc(fl);
}
fclose(fl);
}
void main()
{
setlocale(LC_ALL, "rus");
int c, i;
char s[D];
while (1)
{
printf("\n(6)-
scanf("%d", &c);
switch (c)
{
case 1: //добавление записи
in(n++);
break;
case 2: //вывести на экран i-ю запись или все на принтер
printf("
scanf("%d", &i);
if (i==0)
for(; i<n; i++) fprintf(stdprn,"%d. %-10s %-5d %-10d \n", i+1, bd[i]->naz, bd[i]->pg, bd[i]->cen);
else
out(--
break;
case 3: //сохранить в файл
printf("
fflush(
gets(s);
save(s);
break;
case 4: //загрузить из файла
printf("
fflush(
gets(s);
load(s);
break;
case 5: //сортировка
sort();
break;
case 6: //Список команд
printf( "
break;
case 0: //выход
return;
}
}
}