程式碼相似度比對工具 1.0

23 10 2008

最近在找有沒有能夠在批改程式作業的時候

想比較方便檢查哪些同學是抄襲的

不過網路上的程式通常都是付費的,

於是就自己寫了個程式

可以比對C,C++,Java的程式碼相似度,
變數名稱變動或者函數位置調整都可以偵測出來。
可用於學校作業批改時檢查抄襲問題。
用法:

請在Windows命令行底下
假設有 test1.cpp 與 test2.cpp 要比對

請執行
cmpsrc test1.cpp test2.cpp

程式會計算相似度並輸出結果

http://www.cis.nctu.edu.tw/~is93061/cmpsrc_v1.zip

當然如果你要一次比對好幾個檔案 目前沒有直接提供這個功能

不過你可以自己寫個batch檔來呼叫我這個程式





以C++重寫Borland VCL Framework

4 09 2008

以C++重寫Borland VCL Framework一直是我的夢想

所以我開始這個計畫,就是實現一個與VCL很相似的Win32 GUI Framework

目前都還在起步階段

我設計的這個framework暫時稱作Compact GUI Library (CGL)

目前的framework程式碼 在此下載

支援GNU C++,MS VC++,Borland C++ Compiler

整個framework的變數命名都盡量與VCL相近

說明白一點,就是我要用純C++重寫Borland VCL。

不想再看到任何Object Pascal的影子!

到底CGL與VCL有多相近呢?

一個典型的CGL 程序的代碼範例如下:

#include "cgl.hpp"

class TForm1:public TForm{
    public:
        TButton *btn,*btn2;
        TForm1(char *_ClassName):TForm(_ClassName)
        {
            ;
        }
        void Init()
        {
            btn = new TButton;
            btn->AttachTo(this->Handle);
            btn->OnMouseClick = TMEM(TForm1,clickbutton);
            btn->Height = 10;
            btn2 = new TButton;
            btn2->AttachTo(this->Handle);
        }
        ~TForm1()
        {
            delete btn;
        }
        int clickbutton(void * Sender)
        {
            ShowMessage("Button Clicked!");
            Caption = "Google !";
            Canvas->MoveTo(0,0);
            Canvas->LineTo(350,350);
            Canvas->Brush->Style = bsSolid;
            Canvas->Rectangle(0,0,400,400);
            Canvas->Font->Size = 24;
            Canvas->Font->Name = "新細明體";
            Canvas->Font->Underline = true;
            Canvas->TextOut( 50,50 , "窗外有藍天,視野寬廣無限。" );
            TBitmap *bmp = new TBitmap(200,200);
            bmp->Canvas->Brush->Color = TColor(120,235,160);
            bmp->Canvas->FillRect(TRect(0,0,200,200));
            bmp->Canvas->Brush->Style = bsClear;
            bmp->Canvas->Font->Italic = true;
            bmp->Canvas->Font->Size = 16;
            bmp->Canvas->TextOut(0,0,"CodeGear C++Builder");
            ::BitBlt( Canvas->Handle() ,0,0,200,200,bmp->Canvas->Handle(),0,0,SRCCOPY);
            delete bmp;
            return 0;
        }
};

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine, int nCmdShow)
{
    Application = new TAPPLICATION;
    Application->Init(hInstance,hPrevInstance);

    try{
        TForm1 *win;
        win = new TForm1("Form1");
        win->Create();
        win->Init();
        win->Width = 600;
        win->Height = 200;
    }catch( Exception &exception ){
        Application->ShowException(&exception);
    }
    catch (...)
    {
        try
        {
            throw Exception("");
        }
        catch (Exception &exception)
        {
            Application->ShowException(&exception);
        }
    }

    int ret = Application->Run();
    delete Application;
    return ret;
}