campo-sirio/cb5/relate3.c

109 lines
2.4 KiB
C
Raw Normal View History

/***********************************************************************\
* *
* RELATE3.C Copyright (C) 1993 Sequiter Software Inc. *
* *
\***********************************************************************/
/* See User's Manual, page 145 */
#include "d4all.h"
#ifdef __TURBOC__
extern unsigned _stklen = 10000;
#endif
CODE4 code_base;
DATA4 *student,*enrollment,*classes;
FIELD4 *student_id,*first_name,*last_name,*age,*class_code,*class_title;
TAG4 *code_tag,*id_tag;
RELATE4 *class_rel,*student_rel,*enroll_rel;
void print_students() ;
void open_data_files() ;
void open_data_files()
{
d4init(&code_base);
student = d4open(&code_base,"STUDENT");
enrollment = d4open(&code_base,"ENROLL");
classes = d4open(&code_base,"CLASSES");
student_id = d4field(student,"ID");
first_name = d4field(student,"F_NAME");
last_name = d4field(student,"L_NAME");
age = d4field(student,"AGE");
class_code = d4field(classes,"CODE");
class_title = d4field(classes,"TITLE");
id_tag = d4tag(student,"ID_TAG");
code_tag = d4tag(enrollment,"C_CODE_TAG");
e4exit_test(&code_base);
}
void print_students()
{
printf("\n %s ",f4str(first_name));
printf("%s ",f4str(last_name));
printf("%s ",f4str(student_id));
printf("%s ",f4str(age));
}
void set_relation()
{
class_rel = relate4init(classes);
enroll_rel = relate4create_slave(class_rel,enrollment,"CODE",code_tag);
student_rel = relate4create_slave(enroll_rel,student,"STU_ID_TAG",id_tag);
}
void print_student_list(char *expr,long direction)
{
int rc,end_value;
relate4query_set(class_rel,expr);
relate4sort_set(class_rel,"STUDENT->L_NAME + STUDENT->F_NAME");
relate4type(enroll_rel,relate4scan);
if(direction > 0)
{
rc = relate4top(class_rel);
end_value = r4eof;
}
else
{
rc = relate4bottom(class_rel);
end_value = r4bof;
}
printf("\n%s",f4str(class_code));
printf(" %s\n",f4str(class_title));
for (;rc != end_value; rc = relate4skip(class_rel,direction))
print_students();
}
void main()
{
open_data_files();
set_relation();
print_student_list("CODE = 'MATH114 '",1L);
print_student_list("CODE = 'CMPT411 '",-1L);
relate4unlock(class_rel);
relate4free(class_rel,0);
d4close_all(&code_base);
d4init_undo(&code_base);
mem4reset() ;
}