在線OJ項目

需求:實現一個在線判題系統,用戶通過瀏覽器編寫和提交代碼,通過網絡傳輸,將代碼上傳到後臺,後臺對提交的代碼進行編譯運行,將編譯運行結果反饋給用戶
在線OJ前後臺的流程:
在線OJ項目

項目分爲五大模塊:

網絡服務模塊
搭建http服務器:
本人採用的是GitHub上提供的開源的httplib.h庫,在搭建http服務的時候,只需要我們包含該頭文件就可以使用了
提供http服務,串聯試題模塊和編譯運行模塊
1.獲取題目列表
2.提交選中的題目
3.提交題目代碼和題目描述,代碼的編譯框
試題模塊
1.從配置文件中加載題目
a.配置文件格式:
約定配置文件當中對題目的描述
題目的編號,題目的名字,題目所在的目錄,題目難度
b.加載題目的配置文件,使用數據結構保存加載出來的題目的介紹信息
c.針對每一道題目而言,需要根據給出的路徑進行加載
2.提供獲取整體題目的接口
給網絡服務模塊提供一個可以獲取所有題目描述的接口,展示給用戶
3.提供單個題目的接口
給網絡服務模塊獲取單個題目描述和作答的接口,展示給用戶
編譯運行模塊
1.編譯
a.將用戶提交的代碼寫到文件中
b.創建子進程,並且進行程序替換爲g++程序,進行編譯源碼文件
c.獲取編譯結果寫到標準輸出文件當中或者寫入標準錯誤文件中
2.運行
a.如果代碼走到運行階段,說明一定編譯出來可執行程序了,創建子進程,並且讓子進程進行程序替換,替換成可執行程序
b.將程序運行結果,保存到標準輸出或者標準錯誤文件中
日誌模塊
1.提供時間戳服務:爲了區分不同的用戶提交的代碼,當代嗎寫到文件當中的時候,使用時間戳來進行一個區分
2.提供URL解碼操作
工具模塊
1.實現切割字符串的函數
2.提供寫文件操作
3.提供讀文件操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章