สัปดาห์ที่ 4 String และ User-defined Types

จุดประสงค์การเรียนรู้

  1. จัดการข้อความด้วย String Operation ได้
  2. ออกแบบข้อมูลด้วย Structure, Union, typedef และ enum ได้
  3. สร้างโปรแกรมจัดเก็บข้อมูลที่มีโครงสร้างได้

เนื้อหา

String Management

การจัดการ String ครอบคลุมการสร้างข้อความ ค้นหา ตัดต่อ เปรียบเทียบ และตรวจสอบความถูกต้องของข้อมูล การทำงานกับ String ต้องระวังขนาด Buffer และรูปแบบข้อมูลที่ผู้ใช้ป้อน

Structure และ Union

Structure ใช้รวมข้อมูลหลายชนิดเป็นหน่วยเดียว เช่น ข้อมูลนักศึกษา ส่วน Union ใช้พื้นที่หน่วยความจำร่วมกัน เหมาะกับกรณีที่ข้อมูลมีได้หลายรูปแบบแต่ใช้ทีละแบบ

typedef และ enum

typedef ช่วยตั้งชื่อชนิดข้อมูลให้อ่านง่ายขึ้น ส่วน enum ใช้กำหนดค่าคงที่แบบมีความหมาย เช่น สถานะ ประเภท หรือระดับความสำคัญ

Workshop

พัฒนาโปรแกรมจัดเก็บข้อมูลด้วย Structure พร้อมใช้ enum แสดงสถานะของข้อมูล และเพิ่มฟังก์ชันค้นหา/แสดงผล

รายละเอียดการเรียนรู้

ผู้เรียนฝึกจัดการข้อมูลข้อความที่พบในโปรแกรมจริง เช่น ชื่อ รหัส อีเมล หรือคำอธิบายรายการ โดยให้ความสำคัญกับความยาวของข้อความ การเปรียบเทียบตัวพิมพ์เล็ก/ใหญ่ และการตรวจสอบข้อมูลก่อนบันทึก จากนั้นออกแบบ Structure เพื่อรวมข้อมูลที่เกี่ยวข้องกันเป็น record เดียว

การใช้ enum ช่วยลด magic number และทำให้สถานะของข้อมูลอ่านง่าย เช่น ACTIVE, INACTIVE, DELETED ส่วน typedef ช่วยให้ชนิดข้อมูลที่สร้างเองมีชื่อกระชับและสื่อความหมาย

แนวปฏิบัติ

  1. กำหนดขนาดข้อความให้เหมาะสม
  2. ตรวจสอบข้อมูลว่างหรือรูปแบบไม่ถูกต้อง
  3. แยกฟังก์ชันสร้าง แก้ไข ค้นหา และแสดงผล
  4. ใช้ enum แทนค่าตัวเลขที่สื่อสถานะ

แบบฝึกหัด

ออกแบบ Structure สำหรับข้อมูลนักศึกษา สินค้า หรือหนังสือ พร้อมฟังก์ชันค้นหาด้วยรหัสและแสดงรายการตามสถานะ

รูปแบบการนำเสนอเพิ่มเติมตามแม่แบบ

String Management คือการจัดการข้อความให้ถูกต้องและปลอดภัย ส่วน User-defined Types คือการสร้างชนิดข้อมูลที่สะท้อนข้อมูลจริง เช่น struct, union, typedef และ enum

%%{init: {'theme': 'base', 'themeVariables': {
  'background': '#282828',
  'primaryColor': '#3c3836',
  'primaryTextColor': '#fbf1c7',
  'primaryBorderColor': '#fabd2f',
  'lineColor': '#b8bb26',
  'secondaryColor': '#504945',
  'tertiaryColor': '#665c54',
  'fontFamily': 'Arial'
}}}%%
flowchart TD
  A[Input String
รับข้อความ] --> B[Validate
ตรวจรูปแบบ] B --> C[Store in Struct
เก็บในโครงสร้าง] C --> D[Use Enum Status
ใช้สถานะ enum] D --> E[Search/Display
ค้นหาและแสดงผล]

สมการประเมินพื้นที่ข้อความ

B=(L+1)×s

ตัวอย่างโค้ดทดลอง

#include <iostream>
#include <string>
using namespace std;

enum Status { ACTIVE, INACTIVE };

struct Student {
    string id;
    string name;
    Status status;
};

int main() {
    Student s = {"66001", "Anan", ACTIVE}; // ตัวอย่างการสร้าง record
    cout << s.id << " " << s.name << endl; // expected: 66001 Anan
    return 0;
}
ชนิดข้อมูล จุดประสงค์ ตัวอย่างใช้
struct รวม field หลายชนิด ข้อมูลนักศึกษา
enum กำหนดสถานะที่อ่านง่าย ACTIVE, INACTIVE
typedef ตั้งชื่อชนิดข้อมูล StudentList

กลับรายวิชา