c++面向对象文件加密

有一种加密方法为:其使用一个字母串(可以含重复字母,字母个数不超过50)作为密钥。假定密钥单词串为feather,则先去掉密钥单词中的重复字母得到单词串feathr,然后再将字母表中的其它字母以反序追加到feathr的后面:

879b7699e6794b7384fe807ddda60cb3.png

其中第一行为原始英文字母,第二行为对应加密字母。其它字符不进行加密。编写一个程序,用这种密码加密文件。假定要加密的文件名为encrypt.txt及加密后的文件名为output.txt,并假定输入文件中字母全为小写字母,并且输入密钥也全为小写字母。

【输入形式】

从标准输入中输入密钥串,并从文件encrypt.txt中读入要加密的内容。

【输出形式】

加密后结果输出到文件output.txt中。

【样例输入】

feather

和文件encrypt.txt中内容,例如被加密的文件encrypt.txt中内容为:

c language is wonderful.

【样例输出】

加密后output.txt文件中内容为:

a ufqzjfzh xl gpqthmrju.

【样例说明】

首先将给定的密钥单词去除重复字母,然后按照上面的加密对应表对encrypt.txt文件内容进行加密即可得到加密后的文件,其中只对英文字母进行加密对换,并且假设encrypt.txt中的英文字母全是小写字母。

代码:

#include<iostream>
#include<fstream>
using namespace std;
int main()
{
    ifstream infile;
    ofstream outfile;
    const int buf_size = 256;
    const int max = 26;
    char c[buf_size],d[buf_size];
    char buff[buf_size];
    char b[buf_size]{ 'z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'};
    char a[buf_size]{ 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z' };
    infile.open("encrypt.txt", ios::in);
    if (!infile) { cout << "file can't open.\n"; }
    outfile.open("output.txt", ios::out);
    if (!outfile) { cout << "file can't open.\n"; }
    int i = 0,j, len = 0,len1=max;
    cin >> buff;
    while (buff[i] != 0) { 
            i++; len++; }
    for (i = 0; i < len; i++)//去重
    {
        for (int j = i+1; j < len; j++)
        {
            if (buff[j] == buff[i])
            {
                for(int k=j;k<len-1;k++)
                buff[k] = buff[k + 1];
                j--;
                len--;
            }
        }
    }
    for (i = 0; i < len1; i++)
    {
        for (int j = 0; j < len; j++)
        {
            if (buff[j] == b[i])
            {
                if (i != len1 - 1)
                {
                    for (int k = i; k < len1 - 1; k++)
                        b[k] = b[k + 1];
                    len1--;
                    i--;
                    continue;
                }
                else { b[i] = 0; len1--; }
            }
        }
    }
    for (i = 0; i < len1; i++) { buff[len++] = b[i]; }
    infile.getline(c, buf_size);
    infile.close();
    for (i = 0; i < sizeof(c); i++)
    {
        for ( j = 0; j < len; j++)
        {
            if (c[i] == a[j])
            {
                d[i] = buff[j];
                break;
            }
        }
        if (j == len)d[i] = c[i];
    }
    outfile << d;
    outfile.close();
    return 0;
}

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一个基本的飞机订票管理系统程序的框架,您可以根据需要进行修改和完善。以下是示例代码: ```c++ #include <iostream> #include <fstream> #include <string> using namespace std; class Flight { private: string flightNo; // 航班号 string departure; // 出发地 string destination; // 目的地 int seatNum; // 座位总数 int bookedNum; // 已预订座位数 public: Flight() {} // 构造函数 Flight(string no, string dep, string des, int num) { flightNo = no; departure = dep; destination = des; seatNum = num; bookedNum = 0; } string getFlightNo() { return flightNo; } string getDeparture() { return departure; } string getDestination() { return destination; } int getSeatNum() { return seatNum; } int getBookedNum() { return bookedNum; } void bookSeat() { if (bookedNum < seatNum) { bookedNum++; cout << "预订成功!" << endl; } else { cout << "座位已满,预订失败!" << endl; } } }; class Airline { private: Flight* flights; // 航班数组 int flightNum; // 航班数量 public: Airline() { flights = NULL; flightNum = 0; } // 构造函数 ~Airline() { delete[] flights; } // 析构函数 void init() { // 从文件读取航班信息并初始化航班数组 ifstream infile("flights.txt"); if (!infile) { cout << "文件打开失败!" << endl; return; } infile >> flightNum; flights = new Flight[flightNum]; for (int i = 0; i < flightNum; i++) { string no, dep, des; int num; infile >> no >> dep >> des >> num; flights[i] = Flight(no, dep, des, num); } infile.close(); } void displayFlights() { // 显示所有航班信息 cout << "航班信息:" << endl; for (int i = 0; i < flightNum; i++) { cout << "航班号:" << flights[i].getFlightNo() << endl; cout << "出发地:" << flights[i].getDeparture() << endl; cout << "目的地:" << flights[i].getDestination() << endl; cout << "总座位数:" << flights[i].getSeatNum() << endl; cout << "已预订座位数:" << flights[i].getBookedNum() << endl; cout << endl; } } void bookSeat(string no) { // 根据航班号预订座位 bool found = false; for (int i = 0; i < flightNum; i++) { if (no == flights[i].getFlightNo()) { flights[i].bookSeat(); found = true; break; } } if (!found) { cout << "未找到该航班号,请重新输入!" << endl; } } }; int main() { Airline airline; airline.init(); cout << "欢迎使用飞机订票管理系统!" << endl; while (true) { int choice; cout << "请选择操作:1.查看航班信息 2.预订座位 3.退出程序" << endl; cin >> choice; if (choice == 1) { airline.displayFlights(); } else if (choice == 2) { string no; cout << "请输入航班号:" << endl; cin >> no; airline.bookSeat(no); } else if (choice == 3) { break; } else { cout << "输入错误,请重新输入!" << endl; } } cout << "程序已退出!" << endl; return 0; } ``` 该程序使用了面向对象编程的思想,定义了 Flight 和 Airline 两个类,分别表示航班和航空公司。Flight 类中包含航班号、出发地、目的地、座位总数和已预订座位数等信息,以及预订座位的方法。Airline 类中包含一个 Flight 类型的数组和航班数量,以及初始化航班数组、显示所有航班信息和预订座位等方法。在 main 函数中,首先创建一个 Airline 对象并初始化航班信息,然后根据用户选择执行不同的操作,直到用户选择退出程序。 需要注意的是,该程序只是一个示例,可能并不能完全满足您的需求,您需要根据实际情况进行修改和完善。同时,该程序只是将航班信息保存在文件中,没有进行数据加密和安全检查,如果需要更高的安全性,还需要进行进一步的加密和检查。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值