nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 23 Apr 2024 06:47



Reply to topic  [ 27 posts ]  Go to page 1, 2  Next
Онлайн-библиотекарь на Java-движке 
Author Message
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Есть предложение обсудить набор полей для онлайн-библиотекаря. По-моему совершенны необходимы следующие поля:

Автор(ы)
Название
Серия (если есть)
Издание (только для 2+)
Том (выпуск для журнала или бюллетеня)
Жанр (Категория)
Издательство (город, название издательства)
ISBN (ISSN)
Год издания
Год переиздания (только для изданий 2+)
Тип переиздания (без изменений, исправленное и дополненное, переработанное)
Страниц (общее количество)
Обложка (твердая, мягкая)
Формат (увеличенный, стандартный, уменьшенный, скан)
Состояние (Отличное, Хорошее, Приемлемое, Плохое, Ужасное, Макулатура)
Анотация
Владелец
Хранилище
Язык
Дата покупки
Место покупки
Цена (по которой куплено)
флаг "Прочитал"
Дата прочтения
флаг "Одолжил"
Когда одолжил
Кому одолжил
Дата возврата

Кроме них можно добавить вот такие:

Субъективное мнение
Рейтинг
Релевантность
Ключевые слова

Есть дополнения, вопросы, предложения и т.д. ?

_________________
Extreme Entertainment


22 Feb 2005 12:09
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Изменил тему топика

Вот мой первый опыт 1994 года на аналогичную тему:

Code:
 ------------------------------------------------------------------------------
|             УРАЛЬСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ                |
|              Кафедра  Автоматики и Информационных Технологий                 |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                 О Т Ч Е Т                                    |
|                          по практическому заданию                            |
|                                   курса                                      |
|              " Автоматизированные банки данных и базы знаний "               |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                        Студент       Шабаршин А.А            |
|                                        Преподаватель Сухарев  Ю.П            |
|                                        Оценка        ____________            |
|                                        Дата сдачи    ____________            |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                                                                              |
|                          Е К А Т Е Р И Н Б У Р Г                             |
|                                                                              |
|                                  1 9 9 4                                     |
|                                                                              |
|                                                                              |
|                                                                              |
|______________________________________________________________________________|
                                                                          1
--------------------------------------------------------------------------------
   Практическое задание состояло в создании базы данных  библиографических
карточек и программы управления этой базой . Поля базы данных :
   1  Фамилия И.О. автора
   2  Фамилия И.О. второго автора
   3  Фамилия И.О. третьего автора
   4  Название книги
   5  Язык оригинала
   6  Издательство
   7  Город издания
   8  Год издания
   9  Количество страниц
       10  Код десятичной классификации
       11  Шифр темы
       12  Дополнительные сведения


   База данных получила такую структуру :
       

ЗАПИСЬ#  FIELD_NAME FIELD_TYPE FIELD_LEN FIELD_DEC
      1  NAME       C                020       000
      2  NAME2      C                020       000
      3  NAME3      C                020       000
      4  TITLE      C                040       000
      5  LANG       C                004       000
      6  PUBL       C                020       000
      7  CITY       C                010       000
      8  YEAR       N                004       000
      9  PAGE       N                003       000
     10  CODE       N                010       000
     11  CIPHER     C                010       000
     12  REM        M                010       000

   Созданные файлы:  BIBLI.DBF  - файл базы данных
           BIBLI.DBT  - файл примечаний
           BIBLI.PRG  - командный файл
           BIBLI.IDX  - индексный файл

                                                                              2
--------------------------------------------------------------------------------
   В управляющей программе реализованы функции :
   
        1  Редактирование карточек
   2  Добавление карточки в базу данных
   3  Удаление карточки из базы данных
   4  Печать библиографической карточки
        5  Поиск
            - по автору
            - по названию книги
            - по языку оригинала
            - по издательству   
            - по городу издания
            - по году издания
            - по коду
            - по шифру
            - повторный по любому пункту
   6  Фильтрация
            - по автору
            - по названию книги
            - по языку оригинала
            - по издательству   
            - по городу издания
            - по году издания
            - по шифру
            - отмена фильтра
   7  Индексация
            - по первому автору
            - по названию книги
            - по языку оригинала
            - по издательству   
            - по городу издания
            - по году издания
       - по количеству страниц
            - по коду
            - по шифру
   8  Возвращение в ДОС
                                                                              3
--------------------------------------------------------------------------------
   Текст программы с  комментариями.
set talk off    && Запретить вывод протокола работы
set bell on     && Разрешить звуковой сигнал
set status off  && Запретить строку статуса
set escape off  && Запретить прерывание работы по ESC
set confirm on  && Включить подтверждение при вводе поля
set scoreboard off      && Не
set date german && Установить формат даты DD.MM.YY
set exact off   && Сравнивать две строки до конца одной из них
set memowidth to 80     && Установить ширину вывода поля MEMO
set color to n/rg,n/g   && Установка символьных атрибутов
@ 0,0 clear to 24,79    && Очистка экрана
@ 0,0 to 24,79 double   && Начертить двойную рамку во весь экран
set color to w+/n       && Написать заголовок и дату
@ 1,2 clear to 1,77
@ 1,4 say "Б И Б Л И О Г Р А Ф И Ч Е С К А Я   К А Р Т О Т Е К А"
??replicate(" ",10),date()
set color to n/rg
use bibli       && Открыть базу данных
@16,2 to 23,50                          && ПОМОЩЬ :
@17,4 say "В РЕЖИМЕ РЕДАКТИРОВАНИЯ"
@18,4 say "Esc - переход в меню. F1- просмотр примечаний"
@19,4 say "PgUp,PgDn - перелистывание страниц"
@20,4 say "Ctrl-Home - редактирование поля примечаний"
@21,4 say "---------------------------------------------"
@22,4 say "Шабаршин А.А. группа Р-410а        май 1994 г"
kk=0    && Начальные установки переменных
nn=1
no=1
loc=.f.
avt=.f.
str=replicate(" ",14)
strf=str
go top  && Установить указатель на первую запись
do while nn#8   && Цикл пока не выбрано предложение меню ВЫХОД
   c=2
   r=60
   if nn#0                      && Активизация меню
     @ c,r to c+9,r+17 double
     @ c+1,r+1 prompt " РЕДАКТИРОВАНИЕ "  && nn=1
     @ c+2,r+1 prompt " ДОБАВЛЕНИЕ     "  && nn=2
     @ c+3,r+1 prompt " УДАЛЕНИЕ       "  && nn=3
     @ c+4,r+1 prompt " ПЕЧАТЬ         "  && nn=4
     @ c+5,r+1 prompt " ПОИСК          "  && nn=5
     @ c+6,r+1 prompt " ФИЛЬТР         "  && nn=6
     @ c+7,r+1 prompt " ИНДЕКСИРОВАНИЕ "  && nn=7
     @ c+8,r+1 prompt " ВЫХОД В ДОС    "  && nn=8
     menu to nn
   endif
                                                                              4
--------------------------------------------------------------------------------
   if nn=0
      nn=1
   endif
   do case
   case nn=0    && Esc
        nn=1
   case nn=1    &&--------------------- РЕДАКТИРОВАНИЕ
    nn=0
    do while nn=0
     @ 2,1 clear to 15,54
     @ 3,2 say "Авторы  " get name
     @ 4,11 get name2
     @ 5,11 get name3
     @ 7,2 say "Заглавие" get title
     @ 9,2 say "Язык оригинала" get lang
     @ 9,22 say "Город" get city
     @ 11,2 say "Издательство" get publ
     @ 13,2 say "Год издания" get year
     @ 13,19 say "Количество страниц" get page
     @ 15,2 say "Шифр" get cipher
     @ 15,19 say "Код" get code
     @ 15,35 say "Примечания" get rem
     @ c,r to c+9,r+17
     read         && Редактировать
     kk=readkey() && Получить код завершения режима редактирования
     do case
        case kk=12.or.kk=268 && Esc-возврат в меню
         nn=no
         no=1
        case kk=7.or.kk=263  && PageDown-листать вниз (к концу)
         skip 1
         if eof()       && Проверка на конец файла
            go bottom   && Перейти на последнюю запись
         endif
        case kk=6.or.kk=262  && PageUp-листать вверх (к началу)
         skip -1
         if bof()       && Проверка на начало файла
            go top      && Перейти на первую запись
         endif
        case kk=36.or.kk=292 && F1-просмотр поля примечаний
         save screen        && Запомнить экран
         @0,0 to 2,79 double
         @2,2 say " примечания:"
         set color to w+/n
         @3,0 clear to 24,79
         @3,0 say ""
         ??rem
         ii=inkey(0)
         set color to n/rg
         restore screen     && Восстановить старый экран
     endcase
    enddo
                                                                              5
--------------------------------------------------------------------------------
   case nn=2    &&--------------------- ДОБАВЛЕНИЕ
    append blank    && Добавить в конец БД пустую запись
    go bottom       && и переставить на нее указатель
    no=2
    nn=0
   case nn=3    &&--------------------- УДАЛЕНИЕ
    set color to w+/n
    rr=c+10
    cc=r+3
    @ rr,r clear to rr+4,r+17
    @ rr+1,cc say "  УДАЛИТЬ"
    @ rr+2,cc say "    ЭТУ"
    @ rr+3,cc say "ЗАПИСЬ(Д/Н)?"
    @ rr+4,cc say "    "
    ii=inkey(0)     && Ожидание нажатия клавиши
    if ii=164.or.ii=132.or.ii=108.or.ii=76 && Проверка на Д,д,L,l
       ??"Да"
       delete       && Пометить запись на удаление
       pack         && Уничтожить помеченную запись
    else && Не уничтожать запись
       ??"Нет"
    endif   
    set color to n/rg
    @ rr,r clear to rr+4,r+17
    no=3
    nn=0
   case nn=4    &&--------------------- ПЕЧАТЬ
    save screen     && Запомнить экран
    set printer on  && Активизировать вывод на принтер
    set color to w+/n
    @ 0,0 clear to 24,79   
?" ----------------------------------------------------------------------------"
?"|  БИБЛИОГРАФИЧЕСКАЯ КАРТОЧКА                      ",time(),"     ",date()," |"
?"|----------------------------------------------------------------------------|"
?"| Шабаршин А.А     УГТУ-УПИ     РТФ     кафедра АИТ                 май 1994 |"
?" ---------------------------------------------------------------------------- "
?name,name2,name3         
?title
?"-",city,":",publ,",",year,".-",page,"c."
?"Язык оригинала:",lang,".Шифр:",cipher," Код:",code
?"Примечания:"
?rem
    set color to n/rg
    set printer off     && Отменить вывод на принтер
    restore screen      && Восстановить старый экран
    nn=0
    no=4
                                                                             6
--------------------------------------------------------------------------------
   case nn=5    &&--------------------- ПОИСК
    zapold=recno()
    mm=1
    c00=r-5
    c1=r+17
    r0=c+10
    r1=r0+10
    c0=c00+1
    rr0=r0+1
    cc0=c0
    rr1=r1-1
    cc1=c1-1
    @ r0,c00 to r1,c1 double
    @ r0+1,c0 prompt "      по автору      "
    @ r0+2,c0 prompt "  по названию книги  "
    @ r0+3,c0 prompt " по  языку оригинала "
    @ r0+4,c0 prompt "   по издательству   "
    @ r0+5,c0 prompt "  по городу издания  "
    @ r0+6,c0 prompt "   по году издания   "
    @ r0+7,c0 prompt "      по  коду       "
    @ r0+8,c0 prompt "      по шифру       "
    @ r0+9,c0 prompt "   ПОВТОРНЫЙ ПОИСК   "
    menu to mm
    if mm#0
       do case
          case mm=2
           s="title"
           stt=.t.
          case mm=3
           s="lang"
           stt=.t.
          case mm=4
           s="publ"
           stt=.t.
          case mm=5
           s="city"
           stt=.t.
          case mm=6
           s="year"
           stt=.f.
          case mm=7
           s="code"
           stt=.f.
          case mm=8
           s="cipher"
           stt=.t.
    endcase
                                                                              7
--------------------------------------------------------------------------------
    if mm#9
     @ rr0,cc0 clear to rr1,cc1
     @ rr0+3,cc0 say " Введите строку для"
     @ rr0+4,cc0 say "поиска" get str
     read
    endif           && Поиск автора по полям NAME,NAME2,NAME3
    if mm=1.or.mm=9.and.avt
       loc=.t.
       avt=.t.
       if mm=1
         locate for name=trim(str)
         fin=1
         if eof()
            locate for name2=trim(str)
            fin=2
            if eof()
               locate for name3=trim(str)
               fin=3
            endif
         endif
       else
         do case
            case fin=1
                 continue
                 if eof()
                    locate for name2=trim(str)
                    fin=2
                    if eof()
                       locate for name3=trim(str)
                       fin=3
                    endif
                 endif
            case fin=2
                 continue
                 if eof()
                    locate for name3=trim(str)
                    fin=3
                 endif
            case fin=3
                 continue
         endcase
       endif
    endif
    do case
       case mm=9.and.loc.and..not.avt
           continue
       case mm#9.and.mm#1
        avt=.f.
        loc=.t.
        if stt
           locate for &s=trim(str)
        else
           locate for &s=val(trim(str))
        endif
    endcase
                                                                              8
--------------------------------------------------------------------------------
    if eof()
     @ rr0,cc0 clear to rr1,cc1
     @ rr0+3,cc0 say " ЗАПИСЬ НЕ НАЙДЕНА !"   
     ??chr(7)
     ii=inkey(2)
     go zapold  && Вернуть указатель на старую запись
    endif
    endif
    @ r0,c00 clear to r1,c1 && Стереть меню
    no=5
    nn=0
   case nn=6    &&--------------------- ФИЛЬТР
    mm=1
    c00=r-5
    c1=r+17
    r0=c+10
    r1=r0+9
    c0=c00+1
    rr0=r0+1
    cc0=c0
    rr1=r1-1
    cc1=c1-1
    ree=recno()
    @ r0,c00 to r1,c1 double
    @ r0+1,c0 prompt "      по автору      "
    @ r0+2,c0 prompt "  по названию книги  "
    @ r0+3,c0 prompt " по  языку оригинала "
    @ r0+4,c0 prompt "   по издательству   "
    @ r0+5,c0 prompt "  по городу издания  "
    @ r0+6,c0 prompt "   по году издания   "
    @ r0+7,c0 prompt "      по шифру       "
    @ r0+8,c0 prompt "   ОТМЕНИТЬ ФИЛЬТР   "
    menu to mm
    if mm#0
    if mm=8     && Отменить фильтр
           set filter to
           @ 23,c0 clear to 23,78
    else
     @ rr0,cc0 clear to rr1,cc1
     @ rr0+2,cc0+3 say "Введите фильтр"
     @ rr0+4,cc0+3 get strf
     read
     if strf=replicate(" ",14)
        mm=0
     endif
     st=trim(strf) 
       do case
          case mm=1
           set filter to name=st.or.name2=st.or.name3=st
          case mm=2
           set filter to title=st
          case mm=3
           set filter to lang=st
                                                                              9
--------------------------------------------------------------------------------
          case mm=4
           set filter to publ=st
          case mm=5
           set filter to city=st
          case mm=6
           set filter to year=val(st)
          case mm=7
           set filter to cipher=st
    endcase
    @ 23,c0 say "  ФИЛЬТР УСТАНОВЛЕН"
    endif
    go top
    if eof() && По такому фильтру база данных становится пустой
       @ rr0,cc0 clear to rr1,cc1
       @ rr0+2,cc0 say "    ТАКОЙ ФИЛЬТР"
       @ rr0+4,cc0 say "     НЕУДАЧЕН !"
       ??chr(7)
       aa=inkey(2)
       set filter to
       go ree
       @ 23,c0 clear to 23,78
    endif
    endif
    @ r0,c00 clear to r1,c1
    no=6
    nn=0
   case nn=7    &&--------------------- ИНДЕКСИРОВАНИЕ
    mm=1
    c00=r-5
    c1=r+17
    r0=c+10
    r1=r0+10
    c0=c00+1
    @ r0,c00 to r1,c1 double
    @ r0+1,c0 prompt "  по первому автору  "
    @ r0+2,c0 prompt "  по названию книги  "
    @ r0+3,c0 prompt " по  языку оригинала "
    @ r0+4,c0 prompt "   по издательству   "
    @ r0+5,c0 prompt "  по городу издания  "
    @ r0+6,c0 prompt "   по году издания   "
    @ r0+7,c0 prompt "по количеству страниц"
    @ r0+8,c0 prompt "      по  коду       "
    @ r0+9,c0 prompt "      по шифру       "
    menu to mm
       if mm#0 && Уничтожить индексный файл
          close index
          erase bibli.idx
       endif
       do case && Установка индексов в зависимости от выбора
          case mm=1
           index on name to bibli
          case mm=2
           index on title to bibli
          case mm=3
           index on lang to bibli
          case mm=4
           index on publ to bibli
          case mm=5
           index on city to bibli
                                                                             10
--------------------------------------------------------------------------------
          case mm=6
           index on year to bibli
          case mm=7
           index on page to bibli
          case mm=8
           index on code to bibli
          case mm=9
           index on cipher to bibli
        endcase
        go top
        @ r0,c00 clear to r1,c1
        no=7
        nn=0
endcase
enddo
quit        && Выход в ДОС

Шабаршин А.А     группа Р-410а                                              11
--------------------------------------------------------------------------------
      ФУНКЦИОНАЛЬНЫЕ ЗАВИСИМОСТИ И ВОЗМОЖНЫЕ КЛЮЧИ

   Имеется набор атрибутов :

      NAME   - первый автор книги
      NAME2   - второй автор книги    (или строка пробелов)
      NAME3   - третий автор книги    (или строка пробелов)
      TITLE   - заголовок книги
      LANG   - язык оригинала
      PUBL   - издательство
      CITY   - город издания
      YEAR   - год издания
      PAGE   - количество страниц
      CODE   - библиотечный код
      CIPHER   - тематический шифр
      REM   - дополнительные сведения

   Необходимо проследить функциональные зависимости между атрибутами.
   Атрибуты имен авторов ( NAME , NAME2 , NAME3 ) определяют только сами себя.
Они не могут определять заголовок книги ( TITLE ), язык оригинала ( LANG ),
издательство  ( PUBL ), город издания ( CITY ), год издания ( YEAR ),количество
страниц ( PAGE ), библиотечный код ( CODE ), тематический шифр ( CIPHER ) и
дополнительные сведения ( REM ) потому-что вполне может существовать другая
книга этих авторов , имеющая  другой заголовок, написанная на другом языке,
изданная в другом издательстве и другом городе в другом году, имеющая другое
количество страниц , другой код библиотеки , написанная на другую тему и
имеющая другие дополнительные сведения о себе.
   Атрибут заголовка  ( TITLE )  определяет  только  самого  себя и не может
определять ничего другого, так-как другая книга может иметь тот-же заголовок.
   Не определют ничего кроме себя самих атрибуты языка оригинала ( LANG ),
года издания ( YEAR ), количества страниц ( PAGE ),тематического шифра (CIPHER).
   Атрибут издательства ( PUBL ) определяет город издания ( CITY ) , т.е.

    PUBL -> CITY                                                         (1)

   Атрибут кода ( CODE ) определяет весь остальной набор атрибутов , так-как
код книги отличает ее от всех остальных  книг :

    CODE -> {NAME,NAME2,NAME3,TITLE,LANG,PUBL,CITY,YEAR,PAGE,CIPHER,REM} (2)

   Атрибут дополнительных данных ( REM ) функционально зависит от набора
остальных атрибутов :

    {NAME,NAME2,NAME3,TITLE,LANG,PUBL,CITY,YEAR,PAGE,CODE,CIPHER} -> REM (3)

   Первичным ключом является атрибут кода ( CODE ).
 


                                12
--------------------------------------------------------------------------------
                    РЕАЛИЗАЦИЯ БОЛЬШЕГО КОЛИЧЕСТВА АВТОРОВ

   В базе данных BIBLI использовалось три поля авторов. Для большинства
случаев это много. Возможность заносить большее количество авторов,
не увеличивая количества полей авторов, реализуется использованием второй базы
данных BIBL_N :

   1   NUM   N   4
   2   NAME   C   20
 
 В базе данных BIBLI вместо полей авторов введем два числовых поля :

   1   NAME_B   N   4
   2   NAME_N   N   2
   ...   ...   ..   ..

 NAME_N - номер записи в базе данных BIBL_N, в которой хранится первый автор
книги из текущей карточки. NAME_N - количество авторов этой книги.
 В данном случае NAME_B может принимать значения от 1 до 9999, а NAME_N от 0
до 99. Например  :

BIBLI.DBF            BIBL_N.DBF
-----------------------         ------------------------------
N   NAME_B  NAME_N         N   NUM   NAME   
-----------------------         ------------------------------
1   0001   01         1   0001   Абель Питер
2   0002   03         2   0002   Ревунков Г.И
               3   0003   Самохвалов Э.Н
               4   0004   Чистов В.В
3   0005   01         5   0005   Страуструп Б.
4   0006   03         6   0006   Усатенко С.Т
               7   0007   Каченюк Т.К
5   0008   00 (нет авторов)   8   0008   Терехова М.В

   В этом случае можно реализовать все функции программы BIBLI:   

1. РЕДАКТИРОВАНИЕ
   Обращение к базе данных авторов по указателю NAME_B , в этом случае 
редактируется только NAME_N записей БД авторов.  Нужно предусмотреть меры по
защите указателя NAME_B и количества авторов NAME_N от изменения  иначе может
возникнуть путаница.
   При необходимости изменить количество авторов в старой записи БД
картотеки, следует реализовать следующий алгоритм :
   Так как авторы изменяемой карточки находятся в середине БД BIBL_N.DBF,
то их количество уменьшается путем уменьшения NANE_N, при этом теряется одна
или больше записей базы BIBL_N ,то есть на них ничто не ссылается. Потерянные
записи можно стереть, причем индексы NUM уже не будут равны номерам записей:

N   NUM   NAME
----------------------------
1   0001   Абель Питер
2   0002   Ревунков Г.И   (от трех авторов остался один, NAME_N=1 )
3   0005   Чистов В.В
4   0006   ...
                                                                             13
--------------------------------------------------------------------------------
   Если же требуется увеличение количества авторов, то уничтожаются все
записи базы BIBL_N начиная с NAME_B в количестве NAME_N. В конце же базы данных
организуется требуемое число (новое NAME_N) записей с новыми индексами NUM. При
этом в записи  карточки  необходимо изменить и NAME_B.
   В результате этих операций возникают промежутки между индексами NUM в
середине  БД авторов BIBL_N.DBF . Возможно разработать механизм заполнения этих
промежутков при организации новых карточек  с  подходящим  количеством  авторов
путем добавления в конец базы BIBL_N записей с промежуточными индексами NUM и
дальнейшей сортировкой файла BIBL_N.DBF по NUM.

2. ДОБАВЛЕНИЕ
   В общем случае при организации новой карточки в BIBLI.DBF полю NAME_B
присваивается число NUM+1 из последней записи базы BIBL_N.DBF .

3. УДАЛЕНИЕ
   При удалении записи карточки из  BIBLI.DBF  в базе данных  BIBL_N.DBF
удаляются записи с индексами NUM от  NAME_B  до  NAME_B+NAME_N-1 (NAME_N штук).

4. ПОИСК
   Поиск по авторам можно реализовать так :
   
   SET EXACT OFF
   SELECT 1
   USE BIBLI
   SELECT 2
   USE BIBL_N
    * Ввод строки для поиска STR
   STR=" ... "
   LOCATE NAME=STR
   NN=NUM   && Присвоить индекс NUM
   SELECT 1
   LOCATE NN>=NAME_B.AND.NN<NAME_B+NAME_N
   * Если .NOT.EOF() то карточка с таким автором найдена

   Реализация повторного поиска, фильтрации и индексации возможна, но
реализуется путем создания процедур-аналогов CONTINUE, SET FILTER и INDEX , что
достаточно сложно.


Есть еще второй опыт 1997 года: BIBLE - это переписанная на Clipper BIBLI с некоторыми дополнениями и расширениями. Исходники к сожалению потерял :(

Бинарники под ДОС тут: http://shaos.ru/pub/bible.rar

_________________
:dj: https://mastodon.social/@Shaos


22 Feb 2005 16:59
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Так вот пользуясь своим опытом могу сказать следующее - таблица должна быть не одна. Их должно быть несколько:

1) Книги (переиздания считаются разными книгами)
2) Авторы (у каждой книги может быть несколько авторов)
3) Ключевый слова (для быстрого поиска по ним)
4) Пользователи (которые могут добавлять книжки)
5) Книги пользователя (ссылки на таблицу книг плюс дополнительные приватные и публичные поля)

_________________
:dj: https://mastodon.social/@Shaos


22 Feb 2005 17:35
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Таблица книг (т.е.книг вообще - не конкретных экземпляров) lib_books:
id - идентификатор книги для внешних ссылок
author_id - код автора (ссылка на таблицу authors)
author2_id - код второго автора (ссылка на таблицу authors)
author3_id - код третьего автора (ссылка на таблицу authors)
author4_id - код четвертого автора (ссылка на таблицу authors)
author5_id - код пятого автора (ссылка на таблицу authors)
editor_id - код редактора (ссылка на таблицу authors) - это если у книги нет автора (т.е. под редакцией)
title - название книги
series_id - код серии (ссылка на таблицу series)
volume - том
issue - издание
publisher_id - код издательства (ссылка на таблицу publishers)
country_id - код страны (ссылка на таблицу countries)
city_id - код города (ссылка на таблицу cities) - если есть (обычно в русских книжках)
year - год издания (переиздания)
year1 - год первого издания
edition - номер редакции (1,2,3 и т.д.) если известно
edition_notes - комментарии к переизданию (исправленное, дополненное, переработанное)
code - код книги (ISBN/ISSN) - можно сделать ключевым полем (вторым после id)
ocode - код оргинала (если это перевод)
theme - тематический код (как в библиотеках)
lang - трехбуквенное обозначение языка книги (rus, eng и т.д)
olang - язык оригинала (если это перевод)
pages - количество страниц
genre_id - код жанра (?)
format - формат
cover - тип обложки
cover_price - цена указанная на обложке (часто встречается у советских и американских книг)
rate - рейтинг, вычисляемый из рейтинга книги у владельцев
ну и набор ключевых слов (ссылки на таблицу keywords):
keyword1_id
keyword2_id
keyword3_id

_________________
:dj: https://mastodon.social/@Shaos


Last edited by Shaos on 22 Feb 2005 21:11, edited 4 times in total.



22 Feb 2005 20:37
Profile WWW
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Таблица конкретной книги конкретного пользователя lib_user_books
id - идентификатор экземпляра книги
user_id - код пользователя из lib_users
book_id - код книги из lib_books
price - цена покупки экземпляра
date - дата покупки книги
shop_id - место покупки книги (ссылка на таблицу places?)
place - место хранения книги
read_flag - флаг "прочитал"
read_date - дата прочтения
loan_flag - флаг "одолжил"
loan_to - кому одолжил
loan_date - когда одолжил
loan_alert - дата когда надо предупреждать владельца чтобы забрал книжку ;)
cond - состояние книги по 5-бальной шкале (1-мусор, 2-плохое, 3-среднее, 4-хорошее, 5-отличное или новая книга)
rate - оценка владельца по 5-бальной системе (1-дерьмо, 5-супер)
notes - комментарии владельца о книжке

вопрос - что такое "релевантность"?

_________________
:dj: https://mastodon.social/@Shaos


22 Feb 2005 20:52
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Shaos wrote:
вопрос - что такое "релевантность"?

Применимо только к технической и научной литературе - степень достоверности или практического значения содержания книги на момент покупки. Пример: на данный момент книга о логарифмических линейках имеет релевантность 0 из 10, а у книги о самодельных параллельных вычислительных системах релевантность 10 из 10.

_________________
Extreme Entertainment


22 Feb 2005 23:45
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Shaos wrote:
вопрос - что такое "релевантность"?

Применимо только к технической и научной литературе - степень достоверности или практического значения содержания книги на момент покупки. Пример: на данный момент книга о логарифмических линейках имеет релевантность 0 из 10, а у книги о самодельных параллельных вычислительных системах релевантность 10 из 10.


Ну это субъективное понятие и может быть отнесено к юзерской базе данных? А это нельзя покрыть рейтингом?

_________________
:dj: https://mastodon.social/@Shaos


23 Feb 2005 07:39
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Shaos wrote:
Ну это субъективное понятие и может быть отнесено к юзерской базе данных?

В общем можно, правда понятие совершенно объективное.

Quote:
А это нельзя покрыть рейтингом?

Не думаю. Лучше уж тогда просто не вводить поле, раз назначение не совсем понятно ;)

_________________
Extreme Entertainment


26 Feb 2005 04:23
Profile
Online
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22566
Location: Silicon Valley
Reply with quote
Post 
Mac Buster wrote:
Shaos wrote:
Ну это субъективное понятие и может быть отнесено к юзерской базе данных?

В общем можно, правда понятие совершенно объективное.


Ну хорошо - это объективное понятие, строящееся на субъективном мнении отдельных экспертов ;)

_________________
:dj: https://mastodon.social/@Shaos


26 Feb 2005 09:34
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Количество книг в моей библиотеке достигло того предела, когда держать все названия и издания только в голове стало совершенно невозможно :) Я приступил к исследованию программ предназначенных для учета книг, но, к сожалению, среди десятка таких продуктов, даже профессиональных, вообще нет ничего подходящего. В основном предлагается нечто корявле с жутким интерфейсом, заставляющим пользователя полчаса соображать что куда вводить и почему то что он ввел появляется вообще не там, где ожидалось. Думаю, тем, кто ищет хорошую область применения своих знаний, стоит потратить время на изучение уже существующих и создание удобной и простой в использовании программы учета книг и периодики.

_________________
Extreme Entertainment


14 Aug 2005 01:39
Profile
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Shaos wrote:
author_id - код автора (ссылка на таблицу authors)
author2_id - код второго автора (ссылка на таблицу authors)
author3_id - код третьего автора (ссылка на таблицу authors)
author4_id - код четвертого автора (ссылка на таблицу authors)
author5_id - код пятого автора (ссылка на таблицу authors)

У меня уже есть книги, количество авторов которых, превышает 5 :wink:

_________________
Extreme Entertainment


14 Aug 2005 01:51
Profile
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Думаю стоит добавить в описание экземпляра поле с произвольной (или очень большой) длиной. У меня есть издания тезисов и докладов, надо где-то перечислять авторов и названия.

_________________
Extreme Entertainment


14 Aug 2005 01:53
Profile
God
User avatar

Joined: 29 Dec 2003 01:00
Posts: 1101
Location: Москва
Reply with quote
Post 
Mac Buster wrote:
Думаю стоит добавить в описание экземпляра поле с произвольной (или очень большой) длиной. У меня есть издания тезисов и докладов, надо где-то перечислять авторов и названия.

Обязательно!


14 Aug 2005 04:08
Profile ICQ WWW
Novelist
User avatar

Joined: 07 Apr 2001 17:00
Posts: 38
Reply with quote
Post 
Товарищи, зачем изобретать велосипед?

http://freshmeat.net/search/?q=+books&s ... x=0&Go.y=0

Десятки открытых софтин - от самых минималистичных, до полноценных онлайн библиотек с нормальными GUI.

_________________
...spinning through the world in motion...


15 Aug 2005 10:54
Profile WWW
Retired

Joined: 03 Aug 2003 22:37
Posts: 1474
Location: Moscow
Reply with quote
Post 
Lynx wrote:
Десятки открытых софтин - от самых минималистичных, до полноценных онлайн библиотек с нормальными GUI.

Большую часть видел, как раз о них-то и шла речь...

_________________
Extreme Entertainment


15 Aug 2005 12:44
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 27 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 30 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.