Программирование

Автор: Пользователь скрыл имя, 08 Апреля 2012 в 11:29, курсовая работа

Описание работы

Данная программа предназначена для шифрования файлов наложением кода ключа по методу XOR(исключающего или).

Содержание

1.Программа шифрования текста методом наложения кода ключа…..стр.3

2.Графическое приложение: игра PacMan……………………………..стр.13

3.Клиент базы данных Microsoft Access……………………………….стр.26

Работа содержит 1 файл

Курсовой.doc

— 566.50 Кб (Скачать)


 

 

Содержание

 

 

 

1.Программа шифрования текста методом наложения кода ключа…..стр.3

 

2.Графическое приложение: игра PacMan……………………………..стр.13

 

3.Клиент базы данных Microsoft Access……………………………….стр.26

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


1. Программа шифрования текста наложением кода ключа.

 

Данная программа предназначена для шифрования файлов наложением кода ключа по методу XOR(исключающего или).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1.Главное меню

2.Поле ввода ключа для шифрования

3.Кнопка для шифрования

4.Кнопка для расшифровки

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Результат работы программы:

Исходный текст:

             

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Текст после шифрования ключем “key” :

 

Файл после расшифровки:
 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основной алгоритм (шифрование и дешифрование текста)

 

Шифрование:

 

void __fastcall TForm1::Button3Click(TObject *Sender)

{

  ifstream inp("Input.txt");

  ofstream out("Output.txt");

  Edit3->Enabled=false;;

  if(!inp)

    {

    ShowMessage("Отсутствует входной файл!!!");

    }

  if (!Edit3->Text.Length())

   { ShowMessage("Введите ключ для шифрования!!!");

   Edit3->Enabled=true;

    }

  else

  kluch=Edit3->Text.c_str();

  int n=strlen(kluch);   //длина ключа

   int b,j,i=0;

 

   for(int k=0;k<n;k++)

   {         //преобразование символов ключа в прописные

     b=kluch[k];

     if(b<=-33&&b>=-64)b+=32;   //A->а,Б->б,...(русский алфавит)

     if(b==-81||b==-88||b==-86)b+=16; //Ї->ї,Є->є,Ё->ё

     if(b<=90&&b>=65)b+=32;    //A->a, B->b,...(английский )

     kluch[k]=b;

   }

 

  char temp,buffer=NULL;//buffer-считываемый символ,temp- преобразованный символ

 

  while(!inp.eof()) //пока не достигнут конец файла

    {

       inp.read((char*)&buffer,sizeof(buffer));//считываем очередной символ

       if(buffer==NULL)break;// если файл пустой

       j=fmod(i,n); // переменная j циклически изменяется от 0 до n-1

       temp=buffer^(kluch[j]+1);// применяем операцию "исключающее ИЛИ"

       out.put(temp);  //записываем кодированный символ

       i++;   //переходим к следующему символу ключевого слова

       buffer=NULL;

    }

 

  inp.close();

  out.close();

  ShowMessage("Файл зашифрован");

  }

 

 

 

 

 

 

Расшифровка

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ifstream inp("Output.txt");

  ofstream out("Uncrypted.txt");

   if(!inp)

    {

    ShowMessage("Отсутствует входной файл!!!");

    }

  if (!Edit3->Text.Length())

   { ShowMessage("Введите ключ для дешифрования!!!");

   Edit3->Enabled=true;

    }

int b,j,i=0;

int n=strlen(kluch);

   for(int k=0;k<n;k++)

   {         //преобразование символов ключа в прописные

     b=kluch[k];

     if(b<=-33&&b>=-64)b+=32;   //A->а,Б->б,...(русский алфавит)

     if(b==-81||b==-88||b==-86)b+=16; //Ї->ї,Є->є,Ё->ё

     if(b<=90&&b>=65)b+=32;    //A->a, B->b,...(английский )

     kluch[k]=b;

   }

char temp,buffer=NULL;

  while(!inp.eof())

    {

       inp.read((char*)&buffer,sizeof(buffer));

       if(buffer==NULL)break;

       j=fmod(i,n);

       temp=buffer^(kluch[j]+1);

       out.write((char*)&temp,sizeof(temp));

       i++;

       buffer=NULL;

     }

   

  inp.close();

  out.close();

    ShowMessage("Файл расшифрован");

}

 

 

 

 

 

 

 

 

 

 

 

 

Текст  программы:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include<stdio.h>

#include "Unit1.h"

#include<iostream.h>

#include<conio.h>

#include<fstream.h>

#include<string.h>

#include<math.h>

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

AnsiString fn1;

AnsiString fn2;

char* kluch;  //резервируем адрес для ключевого выражения

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

 

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

  ifstream inp("Input.txt");

  ofstream out("Output.txt");

  Edit3->Enabled=false;;

  if(!inp)

    {

    ShowMessage("Отсутствует входной файл!!!");

    }

  if (!Edit3->Text.Length())

   { ShowMessage("Введите ключ для шифрования!!!");

   Edit3->Enabled=true;

    }

  else

  kluch=Edit3->Text.c_str();

  int n=strlen(kluch);   //длина ключа

   int b,j,i=0;

 

   for(int k=0;k<n;k++)

   {         //преобразование символов ключа в прописные

     b=kluch[k];

     if(b<=-33&&b>=-64)b+=32;   //A->а,Б->б,...(русский алфавит)

     if(b==-81||b==-88||b==-86)b+=16; //Ї->ї,Є->є,Ё->ё

     if(b<=90&&b>=65)b+=32;    //A->a, B->b,...(английский )

     kluch[k]=b;

   }

 

  char temp,buffer=NULL;//buffer-считываемый символ,temp- преобразованный символ

 

  while(!inp.eof()) //пока не достигнут конец файла

    {

       inp.read((char*)&buffer,sizeof(buffer));//считываем очередной символ

       if(buffer==NULL)break;// если файл пустой

       j=fmod(i,n); // переменная j циклически изменяется от 0 до n-1

       temp=buffer^(kluch[j]+1);// применяем операцию "исключающее ИЛИ"

       out.put(temp);  //записываем кодированный символ

       i++;   //переходим к следующему символу ключевого слова

       buffer=NULL;

    }

 

  inp.close();

  out.close();

  ShowMessage("Файл зашифрован");

  }

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

ifstream inp("Output.txt");

  ofstream out("Uncrypted.txt");

   if(!inp)

    {

    ShowMessage("Отсутствует входной файл!!!");

    }

  if (!Edit3->Text.Length())

   { ShowMessage("Введите ключ для дешифрования!!!");

   Edit3->Enabled=true;

    }

int b,j,i=0;

int n=strlen(kluch);

   for(int k=0;k<n;k++)

   {         //преобразование символов ключа в прописные

     b=kluch[k];

     if(b<=-33&&b>=-64)b+=32;   //A->а,Б->б,...(русский алфавит)

     if(b==-81||b==-88||b==-86)b+=16; //Ї->ї,Є->є,Ё->ё

     if(b<=90&&b>=65)b+=32;    //A->a, B->b,...(английский )

     kluch[k]=b;

   }

char temp,buffer=NULL;

  while(!inp.eof())

    {

       inp.read((char*)&buffer,sizeof(buffer));

       if(buffer==NULL)break;

       j=fmod(i,n);

       temp=buffer^(kluch[j]+1);

       out.write((char*)&temp,sizeof(temp));

       i++;

       buffer=NULL;

     }

   

  inp.close();

  out.close();

    ShowMessage("Файл расшифрован");

}

//---------------------------------------------------------------------------

 

 

 

void __fastcall TForm1::N5Click(TObject *Sender)

{

Edit3->Enabled=true;;

Edit3->Text="";

}

//---------------------------------------------------------------------------

 

 

void __fastcall TForm1::N6Click(TObject *Sender)

{

MessageBox(Form1->Handle,"Программа шифрования текста наложением кода ключа\nРазработал Бутеев Илья\nГруппа АУ-20Д","О программе",MB_OK);

}

//---------------------------------------------------------------------------

 

 

 

 

2. Графическое приложение

 

Игра «PacMan»

 

Интерфейс программы

 

 

 

 

1.Главное меню

2.Статусная строка

3.Игровое поле

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Правила Игры

Правила игры в PacMan достаточно просты и понятны. Существует лабиринт, по которому ходят враги – приведения. Цель игры набрать максимальное количество очков за минимальное время и не быть съеденным приведением.

Текст программы

//---------------------------------------------------------------------------

#include <vcl.h>

#include <iostream.h>

#include <fstream.h>

#include <stdlib.h>

#include <math.h>

 

#include <mmsystem.hpp>

 

#pragma hdrstop

 

#include "Unit1.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

 

//---------------------КОНСТАНТЫ---------------------------------------------

 

//для работы с картой

 

              const byte Height  = 12;

              const byte Width   = 12;

    const int CellSize = 25;

    const int constMaxWay = CellSize / 3;

 

    const byte mpNone        = 0;

    const byte mpSeed        = 1;

    const byte mpEnergizer   = 2;

    const byte mpPacmanStart = 4;

 

    const int dx[4] = {1, 0, -1, 0};   // смещения, чтобы определить

    const int dy[4] = {0, -1, 0, 1};   // какую стену разбивать в BreakWall

 

//для звуков

 

    TMediaPlayer *MediaPlayer[10];

 

    const byte sMove         = 0;

    const byte sEatSeed      = 1;

    const byte sEatEnergizer = 2;

    const byte sShowBonus    = 3;

    const byte sEatBonus     = 4;

    const byte sEatGhost     = 5;

    const byte sDie          = 6;

    const byte sLoose        = 7;

    const byte sWin          = 8;

    const byte sNextLevel    = 9;

 

//---------------------ПЕРЕМЕННЫЕ--------------------------------------------

 

    int N = 0;

              int p_Life=3;

    int LevelSeed      = 0;

    int LevelEnergizer = 0;

    int Score = 0;

 

//для графики

 

    Graphics::TBitmap* ImageBuffer;  // буфер (все в него перед выводом на форму)

    Graphics::TBitmap* ImageSprites; //картинка со спрайтами

    Graphics::TBitmap* ImageBack;    //фон + лабиринт + неизменяемые элементы

 

//---------------------------------------------------------------------------

 

    struct Location

    {

        byte left_wall; //флаг наличия у данной локации левой и верхней стен

        byte up_wall;   //правая и нижняя вычисляются через соседние локации

        int attr;       //Outside = 0, Inside = 1, Border = 2.

        int mark;       // хранят N при волновой трассировке

        int map;        // карта

    } Maze[Height+1][Width+1];

  // +1 чтобы у ряда [Height][] была нижняя стена, а у [][Width] правая

 

//---------------------------------------------------------------------------

 

              class TBonus

    {

        public:

            int Kind; // вид бонуса

                                          int Time; // время до появления следующего

            int Life; // время "жизни" бонуса

 

            void Show()

            {

                if (Kind == 0)

                {

                    switch (random(10)) {

                        case 0: case 1: case 2: case 3: Kind = 4; break; // 40%

                        case 4: case 7: case 8:         Kind = 3; break; // 30%

                        case 5: case 6:                 Kind = 2; break; // 20%

                        case 9:                         Kind = 1; break; // 10%

                                                                      }

                                                                      Time = (5 + random(10)) * 100;

 

                                                        }

                else Time--;

 

                if ((Kind >= 0) && (Time == 0))

                                                        {

                    MediaPlayer[sShowBonus]->Play();

                                                                      Life = 1000;

 

                }

 

                if (Life != 0)

                {

                                                                      Form1->Sprites->Draw(ImageBack->Canvas,Height/2 * CellSize,Width /2 * CellSize,Kind + 61,true);

                    Life--;

                    if (Life == 0) Kind = 0;

                }

            }

    } Bonus;

 

//---------------------------------------------------------------------------

 

    class TPacman

    {

        public:

            int X;

            int Y;

            int StartX;

            int StartY;

            int Dir;

            int NewDir;

            int SpriteNum;

            bool Active;

            int ActiveTime;

            bool DirFlag[3];

 

 

            void VerifyDir()

            {

                if (Maze[X/CellSize][Y/CellSize].left_wall == '1')     DirFlag[0] = false;

                    else DirFlag[0] = true;

                if (Maze[X/CellSize][Y/CellSize].up_wall == '1')       DirFlag[1] = false;

                    else DirFlag[1] = true;

                if (Maze[X/CellSize + 1][Y/CellSize].left_wall == '1') DirFlag[2] = false;

                    else DirFlag[2] = true;

                if (Maze[X/CellSize][Y/CellSize + 1].up_wall == '1')   DirFlag[3] = false;

                    else DirFlag[3] = true;

            }

 

            void Go()

            {

                Form1->Sprites->Draw(ImageBuffer->Canvas, X, Y, Dir * 3 + SpriteNum);

                if ((X % CellSize == 0) && (Y % CellSize == 0))

                {

                    Dir = NewDir;

                    if (Maze[X/CellSize][Y/CellSize].mark != 1) WaveTracingSolve(X/CellSize,Y/CellSize);

 

                    switch (Maze[X/CellSize][Y/CellSize].map) {

                        case mpSeed        : MediaPlayer[sEatSeed]->Play();

                                             Score++;

                                             Maze[X/CellSize][Y/CellSize].map = mpNone;

                                             break;

                        case mpEnergizer     : MediaPlayer[sEatEnergizer]->Play();

                                             Score += 5;

Информация о работе Программирование