วันพุธที่ 13 กรกฎาคม พ.ศ. 2554

เรคคอร์ด


โครงสร้างข้อมูลเรคคอร์ด 
               
                เรคคอร์ด  (Record)  หรือระเบียนเป็นโครงสร้างข้อมูลที่ผู้ใช้ต้องกำหนดคุณสมบัติขึ้นมาก่อนเช่นเดียวกับอาร์เรย์  แต่แตกต่างกันที่อาร์เรย์ประกอบด้วยสมาชิกทุกตัวมีโครงสร้างข้อมูลชนิดเดียวกัน  ส่วนเรคคอร์ดประกอบด้วยสมาชิกแต่ละตัวที่สามารถมีโครงสร้างข้อมูลชนิดใดก็ได้ไม่จำเป็นต้องเหมือนกัน  จึงเป็นโครงร้างข้อมูลที่ถูกใช้งานบ่อยมากเพื่อเก็บข้อมูลทางธุรกิจ  สมาชิกในเรคคอร์ดเรียกว่าเขตข้อมูลหรือฟิลด์  (Field)  และไม่มีการจัดลำดับสมาชิกเช่นเดียวกับอาร์เรย์  ถูกเรียกใช้งานโดยใช้ชื่อของสมาชิกตัวนั้น  ส่วนอาร์เรย์ไม่มีชื่อจะใช้ดัชนี  โดยพื้นฐานเรคคอร์ดมีลักษณะเป็นตารางแถวเดียว  ดังในรูปที่  3.2   เป็นการเก็บค่าของแต่ละเขตข้อมูลที่มีโครงสร้างข้อมูลต่างกันประกอบด้วย  เลขจำนวนเต็ม  ข้อความ  และเลขทศนิยม

11,0500.00
24/6 Sukumvit…
27
Chanrung
Wilaiporn
 110211
                รูปที่  3.2   ตัวอย่างโครงสร้างข้อมูลเรคคอร์ดที่แต่ละเขตข้อมูลมีโครงสร้างข้อมูลต่างกัน

การกำหนดเรคคอร์ด 
                เรคคอร์ดมีการกำหนดรูปแบบเป็น  ดังนี้
                                Rec  (Field1,  Field2, . . . ,  FieldN)
          โดย  Fieldi  เป็นสมาชิกของเรคคอร์ด  และ  1≤ i ≤ N
          เป็นการสร้างเรคคอร์ดชื่อ  Rec  ที่มีสมาชิก  N  ตัว การใช้งานเรคคอร์ดเมื่อต้องการอ้างถึงสมาชิกจะใช้เครื่องหมายมหัพภาค  (จุด)  แสดงคุณสมบัติ  (Qualification)  คั่นระหว่างชื่อเรคคอร์ดกับชื่อเขตข้อมูลดังนี้
                                Rec . Fieldi

ตัวอย่างการใช้เรคคอร์ด
                สมาชิกของเรคคอร์ดอาจจะประกอบด้วยโครงสร้างข้อมูลได้หลากหลายรูปแบบ  จึงนำมาใช้กับการเก็บข้อมูลทางธุรกิจ  เช่น  การเก็บข้อมูลพนักงานซึ่งมีข้อมูลประกอบด้วย  รหัส  ชื่อ  หมายเลขโทรศัพท์  และเงินเดือน  ดังในตารางที่  3.2   เป็นตัวอย่างโปรแกรม  Record1.c    ที่
รับข้อมูลเข้ามาทางคีย์บอร์ดเก็บไว้ในเรคคอร์ดและดึงออกมาแสดงผลทางจอภาพ

ตารางที่   3.2   ตัวอย่างโปรแกรม  Record1.c

#include<stdio.h>
#include<coio.h>
#include<string.h>
struct Enployee  {
          int ID;
          char Name[80];
          char Phone[80];
          float Salary;
};
void  printRecord( struct Employee e )  {
          printf( “ID-number  Number   Phone   Salary\n” );
          printf( “%-10d %-20s %-12s %-8.2f\n”,  e.ID, e.Name,  e.Phone, e.Salary );
}
main()  {
          struct Employee emp1;
          int id;
          char name[80];
          char phone[80];
          float salary;
          printf( “Employee Records: \n” );
          printf( “Enter ID-number:  “ );
          scanf( “%d” , &id );
          emp1.ID  =  id;
          getchar();
          printf( “Enter name:  “);
          gets( name );
          strcpy(emp1.Name,name);
         
          printf( “Enter phone:  “);
          scanf( “%s”, phone );
          strcpy( emp1.Phone,phone );
          printf( “Enter salary:  “);  
          scanf( “%f”, &salary );
          emp1.Salary  =  salary;
          printf( “\nValue in record is\n” );
          printRecord( emp1 );
          getch();

เป็นการเก็บข้อมูลพนักงานในรูปแบบเรคคอร์ดที่ชื่อ   emp1  โดยมีการกำหนดชนิดของเรคคอร์ดที่จะใช้งาน  ซึ่งประกอบด้วยเขตข้อมูลที่เก็บค่ารหัส  ชื่อ  หมายเลขโทรศัพท์  และเงินเดือน  ดังนี้
                                Struct  Employee   {
                             Int  ID;
                             char  Name[80];
                             char  Phone[80];
                             float Salary;
                   };
                ภาษาซีใช้คำ  Struct  หมายถึง  โครงสร้างข้อมูลเรคคอร์ด  ตามด้วยชื่อของโครงสร้างข้อมูล  จากนั้นตามด้วยชื่อสมาชิกแต่ละตัวพร้อมกับกำหนดโครงสร้างข้อมูลให้แต่ละตัว  เมื่อใช้งานต้องประกาศสร้างตัวแปรเรคคอร์ด  emp1  ดังนี้
                                Struct  Employee  emp1;
          เมื่อใดที่ต้องการเก็บข้อมูลหรือดึงข้อมูลมาใช้งานจะเป็นดังนี้
                                emp1.ID
                   emp1.Name
                   emp1.Phone
                   emp1.Salary

                จากตัวอย่างมีการเขียนฟังก์ชัน  printRecord  เป็นตัวปฏิบัติการของเรคคอร์ด  ทำหน้าที่ในการแสดงผลทางจอภาพเป็นแบบตาราง  เมื่อใดที่มีการประกาศตัวแปรเรคคอร์ดใหม่มาใช้งาน ตัวแปรทุกตัวก็สามารถใช้ตัวปฏิบัติการร่วมกันได้
                โดยทั่วไปการใช้โครงสร้างข้อมูลเรคคอร์ดจะไม่ใช้เพียงเรคคอร์ดเดียว  แต่จะใช้หลาย ๆ  เรคคอร์ดเพื่อเก็บข้อมูลที่มีลักษณะแบบเดียวกันเป็นจำนวนมาก ๆ  ที่เรียกว่าฐานข้อมูล  (Database)  วิธีการหนึ่งที่นำมาใช้คือ  กำหนดเป็นอาร์เรย์ให้แต่ละสมาชิกมีโครงสร้างข้อมูลเรคคอร์ด  แต่มีข้อจำกัดี่จำนนสมาชิกคงที่เปลี่ยนแปลงไม่ได้  มีอีกวิธีการหนึ่ง  คือ  กำหนดเป็นแบบไดนามิก  (Dynamic)  โดยการขอพื้นที่ในหน่วยความจำให้กับโครงสร้างข้อมูลเรคคอร์ดเมื่อต้องการใช้งาน และไม่จำกัดจำนวนเรคคอร์ดจนกว่าหน่วยความจำเต็ม  แต่การเขียนโปรแกรมก็จะซับซ้อนมากขึ้น  ดังตารางที่  3.3  เป็นตัวอย่างโปรแกรม  Record2.c

ตารางที่  3.3  ตัวอย่างโปรแกรม  Record2.c
#include<stdio.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct employee  {
          int ID;
          char Name[80];
          char Phone[80];
          floar Salary;
};
typedef struct employee Employee;
typedef Employee* Employees;
Employees createEmployee()   {
          Employees e = malloc( sizeof (Employee) );
          Return e;
}
void  printEmployee( Employees e )  {
          printf( “%-10d %-20s %-12s %-8.2f\n”, e-›ID, e-›Name, e-›Phone, e-›Salary );
}
main()  {
          Employees emp1 = createEmployee();
          Employees emp2 = createEmployee();
          emp1 -›ID  =  1101;
          strcpy( emp1-›Name, “Sinsamut” );
          strcpy( emp1-›Phone, “123456789” );
          emp1 -›Salary  =  12345.00;
          emp2 -›ID  =  2041;
          strcpy( emp2-›Name, “Sudsakorn” );
          strcpu( emp2-›Phone, “987654321”);
          emp2-›Salary  =  (float)54321.975;
          printf( “Employee Records\n” );
          printf( “ID – number  Name     Phone       Salary\n” );
          printEmployee( emp1 );
          printEmployee( emp2 );
          getch();
}

          จากตัวอย่าเป็นการกำหนดโครงสร้างข้อมูลชื่อใหม่  (Alias)   คือ   Employee   และ   Employees   ที่เป็นพอยน์เตอร์โดยมีลักษณะเป็นโครงสร้างข้อมูลเรคคอร์ด  ดังนี้
                   typedef struct employee Employee;
                   typedef struct Employee* Employees;
          เมื่อต้องการใช้งานจะต้องขอพื้นที่หน่วยความจำใช้งานให้กับแต่ละเรคคอร์ดในฟังก์ชัน   createEmployee  ดังนี้
                                Eployees  e  =  malloc ( sizeof (Employees) );

          เนื่องจากการเก็บข้อมูลของเรคคอร์ดจะนำไปไว้ในพื้นที่หน่วยความจำที่ขอไว้  ในการอ้างแต่ละสมาชิกในแบบเดิมที่ใช้เครื่องหมายมหัพภาค  จึงต้องเปลี่ยนมาเป็นเครื่องหมายลูกศร(->)  ดังนี้
                   emp1 -› ID
                   emp1 -› Name
                   emp1 -› Phone
                   emp1 -› Salary
                 ในการกำหนดโครงสร้างข้อมูลที่เป็นแบบไดนามิกช่วยให้การเขียนโปรแกรมมีความยืดหยุ่นสูง  แต่มีความซับซ้อนขึ้นและผู้เขียนโปรแกรมจะต้องคอยจัดการด้วยตนเอง  และเป็นรูปแบบพื้นฐานที่จะนำไปใช้กับโครงสร้างข้อมูลแบบอื่น ๆ  ต่อไป

0 ความคิดเห็น:

แสดงความคิดเห็น

สมัครสมาชิก ส่งความคิดเห็น [Atom]

<< หน้าแรก