เรคคอร์ด
โครงสร้างข้อมูลเรคคอร์ด
เรคคอร์ด (Record) หรือระเบียนเป็นโครงสร้างข้อมูลที่ผู้ใช้ต้องกำหนดคุณสมบัติขึ้นมาก่อนเช่นเดียวกับอาร์เรย์ แต่แตกต่างกันที่อาร์เรย์ประกอบด้วยสมาชิกทุกตัวมีโครงสร้างข้อมูลชนิดเดียวกัน ส่วนเรคคอร์ดประกอบด้วยสมาชิกแต่ละตัวที่สามารถมีโครงสร้างข้อมูลชนิดใดก็ได้ไม่จำเป็นต้องเหมือนกัน จึงเป็นโครงร้างข้อมูลที่ถูกใช้งานบ่อยมากเพื่อเก็บข้อมูลทางธุรกิจ สมาชิกในเรคคอร์ดเรียกว่าเขตข้อมูลหรือฟิลด์ (Field) และไม่มีการจัดลำดับสมาชิกเช่นเดียวกับอาร์เรย์ ถูกเรียกใช้งานโดยใช้ชื่อของสมาชิกตัวนั้น ส่วนอาร์เรย์ไม่มีชื่อจะใช้ดัชนี โดยพื้นฐานเรคคอร์ดมีลักษณะเป็นตารางแถวเดียว ดังในรูปที่ 3.2 เป็นการเก็บค่าของแต่ละเขตข้อมูลที่มีโครงสร้างข้อมูลต่างกันประกอบด้วย เลขจำนวนเต็ม ข้อความ และเลขทศนิยม
เรคคอร์ด (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 ที่มีสมาชิก N ตัว การใช้งานเรคคอร์ดเมื่อต้องการอ้างถึงสมาชิกจะใช้เครื่องหมายมหัพภาค (จุด) แสดงคุณสมบัติ (Qualification) คั่นระหว่างชื่อเรคคอร์ดกับชื่อเขตข้อมูลดังนี้
Rec . Fieldi
ตัวอย่างการใช้เรคคอร์ด
สมาชิกของเรคคอร์ดอาจจะประกอบด้วยโครงสร้างข้อมูลได้หลากหลายรูปแบบ จึงนำมาใช้กับการเก็บข้อมูลทางธุรกิจ เช่น การเก็บข้อมูลพนักงานซึ่งมีข้อมูลประกอบด้วย รหัส ชื่อ หมายเลขโทรศัพท์ และเงินเดือน ดังในตารางที่ 3.2 เป็นตัวอย่างโปรแกรม Record1.c ที่
รับข้อมูลเข้ามาทางคีย์บอร์ดเก็บไว้ในเรคคอร์ดและดึงออกมาแสดงผลทางจอภาพ
สมาชิกของเรคคอร์ดอาจจะประกอบด้วยโครงสร้างข้อมูลได้หลากหลายรูปแบบ จึงนำมาใช้กับการเก็บข้อมูลทางธุรกิจ เช่น การเก็บข้อมูลพนักงานซึ่งมีข้อมูลประกอบด้วย รหัส ชื่อ หมายเลขโทรศัพท์ และเงินเดือน ดังในตารางที่ 3.2 เป็นตัวอย่างโปรแกรม Record1.c ที่
รับข้อมูลเข้ามาทางคีย์บอร์ดเก็บไว้ในเรคคอร์ดและดึงออกมาแสดงผลทางจอภาพ
ตารางที่ 3.2 ตัวอย่างโปรแกรม Record1.c
#include<stdio.h>
#include<coio.h>
#include<string.h>
#include<stdio.h>
#include<coio.h>
#include<string.h>
struct Enployee {
int ID;
char Name[80];
char Phone[80];
float Salary;
};
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 );
}
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;
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 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 );
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;
scanf( “%f”, &salary );
emp1.Salary = salary;
printf( “\nValue in record is\n” );
printRecord( emp1 );
printRecord( emp1 );
getch();
เป็นการเก็บข้อมูลพนักงานในรูปแบบเรคคอร์ดที่ชื่อ emp1 โดยมีการกำหนดชนิดของเรคคอร์ดที่จะใช้งาน ซึ่งประกอบด้วยเขตข้อมูลที่เก็บค่ารหัส ชื่อ หมายเลขโทรศัพท์ และเงินเดือน ดังนี้
Struct Employee {
Int ID;
char Name[80];
char Phone[80];
float Salary;
};
Int ID;
char Name[80];
char Phone[80];
float Salary;
};
ภาษาซีใช้คำ Struct หมายถึง โครงสร้างข้อมูลเรคคอร์ด ตามด้วยชื่อของโครงสร้างข้อมูล จากนั้นตามด้วยชื่อสมาชิกแต่ละตัวพร้อมกับกำหนดโครงสร้างข้อมูลให้แต่ละตัว เมื่อใช้งานต้องประกาศสร้างตัวแปรเรคคอร์ด emp1 ดังนี้
Struct Employee emp1;
เมื่อใดที่ต้องการเก็บข้อมูลหรือดึงข้อมูลมาใช้งานจะเป็นดังนี้
emp1.ID
emp1.Name
emp1.Phone
emp1.Salary
emp1.Name
emp1.Phone
emp1.Salary
จากตัวอย่างมีการเขียนฟังก์ชัน printRecord เป็นตัวปฏิบัติการของเรคคอร์ด ทำหน้าที่ในการแสดงผลทางจอภาพเป็นแบบตาราง เมื่อใดที่มีการประกาศตัวแปรเรคคอร์ดใหม่มาใช้งาน ตัวแปรทุกตัวก็สามารถใช้ตัวปฏิบัติการร่วมกันได้
โดยทั่วไปการใช้โครงสร้างข้อมูลเรคคอร์ดจะไม่ใช้เพียงเรคคอร์ดเดียว แต่จะใช้หลาย ๆ เรคคอร์ดเพื่อเก็บข้อมูลที่มีลักษณะแบบเดียวกันเป็นจำนวนมาก ๆ ที่เรียกว่าฐานข้อมูล (Database) วิธีการหนึ่งที่นำมาใช้คือ กำหนดเป็นอาร์เรย์ให้แต่ละสมาชิกมีโครงสร้างข้อมูลเรคคอร์ด แต่มีข้อจำกัดี่จำนนสมาชิกคงที่เปลี่ยนแปลงไม่ได้ มีอีกวิธีการหนึ่ง คือ กำหนดเป็นแบบไดนามิก (Dynamic) โดยการขอพื้นที่ในหน่วยความจำให้กับโครงสร้างข้อมูลเรคคอร์ดเมื่อต้องการใช้งาน และไม่จำกัดจำนวนเรคคอร์ดจนกว่าหน่วยความจำเต็ม แต่การเขียนโปรแกรมก็จะซับซ้อนมากขึ้น ดังตารางที่ 3.3 เป็นตัวอย่างโปรแกรม Record2.c
โดยทั่วไปการใช้โครงสร้างข้อมูลเรคคอร์ดจะไม่ใช้เพียงเรคคอร์ดเดียว แต่จะใช้หลาย ๆ เรคคอร์ดเพื่อเก็บข้อมูลที่มีลักษณะแบบเดียวกันเป็นจำนวนมาก ๆ ที่เรียกว่าฐานข้อมูล (Database) วิธีการหนึ่งที่นำมาใช้คือ กำหนดเป็นอาร์เรย์ให้แต่ละสมาชิกมีโครงสร้างข้อมูลเรคคอร์ด แต่มีข้อจำกัดี่จำนนสมาชิกคงที่เปลี่ยนแปลงไม่ได้ มีอีกวิธีการหนึ่ง คือ กำหนดเป็นแบบไดนามิก (Dynamic) โดยการขอพื้นที่ในหน่วยความจำให้กับโครงสร้างข้อมูลเรคคอร์ดเมื่อต้องการใช้งาน และไม่จำกัดจำนวนเรคคอร์ดจนกว่าหน่วยความจำเต็ม แต่การเขียนโปรแกรมก็จะซับซ้อนมากขึ้น ดังตารางที่ 3.3 เป็นตัวอย่างโปรแกรม Record2.c
ตารางที่ 3.3 ตัวอย่างโปรแกรม Record2.c
#include<stdio.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>
struct employee {
int ID;
char Name[80];
char Phone[80];
floar Salary;
};
int ID;
char Name[80];
char Phone[80];
floar Salary;
};
typedef struct employee Employee;
typedef Employee* Employees;
typedef Employee* Employees;
Employees createEmployee() {
Employees e = malloc( sizeof (Employee) );
Return e;
}
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 );
}
printf( “%-10d %-20s %-12s %-8.2f\n”, e-›ID, e-›Name, e-›Phone, e-›Salary );
}
main() {
Employees emp1 = createEmployee();
Employees emp2 = createEmployee();
Employees emp1 = createEmployee();
Employees emp2 = createEmployee();
emp1 -›ID = 1101;
strcpy( emp1-›Name, “Sinsamut” );
strcpy( emp1-›Phone, “123456789” );
emp1 -›Salary = 12345.00;
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;
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 );
printf( “ID – number Name Phone Salary\n” );
printEmployee( emp1 );
printEmployee( emp2 );
getch();
}
}
จากตัวอย่าเป็นการกำหนดโครงสร้างข้อมูลชื่อใหม่ (Alias) คือ Employee และ Employees ที่เป็นพอยน์เตอร์โดยมีลักษณะเป็นโครงสร้างข้อมูลเรคคอร์ด ดังนี้
typedef struct employee Employee;
typedef struct Employee* Employees;
typedef struct Employee* Employees;
เมื่อต้องการใช้งานจะต้องขอพื้นที่หน่วยความจำใช้งานให้กับแต่ละเรคคอร์ดในฟังก์ชัน createEmployee ดังนี้
Eployees e = malloc ( sizeof (Employees) );
เนื่องจากการเก็บข้อมูลของเรคคอร์ดจะนำไปไว้ในพื้นที่หน่วยความจำที่ขอไว้ ในการอ้างแต่ละสมาชิกในแบบเดิมที่ใช้เครื่องหมายมหัพภาค จึงต้องเปลี่ยนมาเป็นเครื่องหมายลูกศร(->) ดังนี้
emp1 -› ID
emp1 -› Name
emp1 -› Phone
emp1 -› Salary
emp1 -› Name
emp1 -› Phone
emp1 -› Salary
ในการกำหนดโครงสร้างข้อมูลที่เป็นแบบไดนามิกช่วยให้การเขียนโปรแกรมมีความยืดหยุ่นสูง แต่มีความซับซ้อนขึ้นและผู้เขียนโปรแกรมจะต้องคอยจัดการด้วยตนเอง และเป็นรูปแบบพื้นฐานที่จะนำไปใช้กับโครงสร้างข้อมูลแบบอื่น ๆ ต่อไป
0 ความคิดเห็น:
แสดงความคิดเห็น
สมัครสมาชิก ส่งความคิดเห็น [Atom]
<< หน้าแรก