Grader on Windows with TC
ระบบมีสองส่วน คือส่วนที่เป็นระบบรับโปรแกรมบนเว็บ ซึ่งพัฒนาด้วยภาษา php บนระบบฐานข้อมูล MySQL และส่วนที่เป็นโปรแกรมทำงานที่เซิร์ฟเวอร์สำหรับตรวจโปรแกรม โดยจะเรียก Turbo C หรือ Borland C มาคอมไพล์และตรวจผลลัพธ์โปรแกรม
เนื้อหา
การติดตั้งโปรแกรม
ระบบฐานข้อมูลและเว็บเซิร์ฟเวอร์
ระบบตรวจที่พัฒนาขึ้นใช้ระบบฐานข้อมูล MySQL และพัฒนาด้วยภาษา php
ใช้ AppServ
AppServ เป็นระบบที่รวม Apache Web Server, PHP, MySQL และ PHPMySQLAdmin สำหรับติดตั้งในโปรแกรมเดียว เว็บดังกล่าวมีหน้าที่เป็นภาษาไทย ให้เลือกภาษาจากกล่องเลือกทางด้านขวา
1. ดาวน์โหลดและติดตั้ง AppServ 2.4.9 (อย่าเลือก 2.5.9) จาก sourceforge ให้บันทึกไดเร็กทรอรีที่ติดตั้งไว้ด้วย (ถ้าทำตามค่าปกติ จะติดตั้งที่ C:\AppServ
2. เมื่อติดตั้งแล้ว โครงสร้างไดเร็กทรอรีที่ได้จะเป็นดังนี้ (ดูรายละเอียดเพิ่มเติม)
C:\AppServ | +-- Apache2.2 +-- MySQL +-- php5 \-- www
ไดเร็กทรอรี www จะเป็นที่จะติดตั้งระบบรับโปรแกรมของผ่านเว็บ
3. สำหรับการใช้งานโปรแกรมต่าง ๆ ที่มากับ AppServ ให้ดูจากเว็บของ AppServ
ติดตั้งตรง
1. ติดตั้ง MySQL
ติดตั้ง MySQL Community Server 5.0 โดยเลือกติดตั้งหัวข้อ Windows Essentials
2. ติดตั้ง Apache Webserver
ติดตั้ง Apache Http Server โดยเลือกติดตั้ง แฟ้มติดตั้งนี้
ระบบรับโปรแกรมผ่านทางเว็บ
โปรแกรมตรวจ
การคอมไพล์โปรแกรมตรวจ
ลง Dev C++ (4.9.9.2), ตั้ง include paths, แก้ compiler options เพิ่ม -D ON_WINDOWS, ลง libmysql DevPak (เลือก Tools -> Check for Updates/Packages)
การตั้งค่าเริ่มต้น
การสร้างบัญชีผู้ใช้
การเพิ่มโจทย์
การใช้งาน
รายละเอียดเพิ่มเติม
โครงสร้างฐานข้อมูล
ตารางและคอลัมน์ต่าง ๆ มีดังนี้
TABLE: user_info ตารางผู้ใช้ COLUMNS: user_id varchar(10) รหัสประจำตัวผู้ใช้ name varchar(100) ชื่อ passwd varchar(10) รหัสผ่าน grp varchar(10) รหัสกลุ่ม (หรือศูนย์) type char(1) ประเภทผู้ใช้: 'C' คือผู้เข้าแข่งขัน (contestant) 'S' คืออาจารย์ผู้ดูแลกลุ่ม (supervisor) และ 'A' คือผู้ดูแลระบบ
TABLE: prob_info ตารางปัญหา COLUMNS: prob_id varchar(10) รหัสปัญหา name varchar(100) ชื่อปัญหา avail char(1) เปิดให้ส่ง ('Y' หรือ 'N') prob_order int(10) ลำดับในการแสดงผล ปัญหาจะแสดงตาม prob_order จากน้อยไปมาก
TABLE: submission ตารางเก็บโปรแกรมที่ส่ง COLUMNS: user_id varchar(10) prob_id varchar(10) sub_num int(11) หมายเลขของการส่ง (ส่งครั้งที่) นับสำหรับผู้ใช้และปัญหานี้ เริ่มจาก 1 time datetime code mediumtext ซอร์สโปรแกรมที่ส่ง PRIMARY KEY: (`user_id`,`prob_id`,`sub_num`)
TABLE: grd_queue คิวรอการตรวจ COLUMNS: q_id int(10) user_id varchar(10) prob_id varchar(10) sub_num int(10)
TABLE: grd_status สถานะของการตรวจ COLUMNS: user_id varchar(10) prob_id varchar(10) res_id int(10) รหัสสถานะ ดูตาราง res_desc score int(10) grading_msg varchar(50) ข้อความจากการตรวจ (แสดงเป็นสตริงของอักษร P, -, x, และ T) compiler_msg text ข้อความจาก compiler PRIMARY KEY: (`user_id`,`prob_id`)
ตารางประกอบ
TABLE: res_desc COLUMNS: res_id int(10) res_text varchar(45) DATA: (1,'in queue'), (2,'grading'), (3,'accepted'), (4,'rejected');