C++实现景区旅游信息管理系统

C++实现景区旅游信息管理系统攻略

功能需求分析

本系统需要实现以下功能:

  1. 对景区的基本信息进行管理,包括景区名称、地址、开放时间、门票价格等;
  2. 对景点的基本信息进行管理,包括景点名称、介绍、关联景区等;
  3. 实现游客信息的管理,包括游客姓名、年龄、性别、联系方式等;
  4. 对景区和景点进行组合,实现线路的生成和管理;
  5. 对游客线路的购买和管理,包括线路查询、购票、取消购票等;
  6. 统计线路销售和游客数量等信息。

系统设计

数据结构设计

根据以上需求,本系统需要设计以下数据结构:

ScenicArea(景区)

成员变量 类型 描述
name string 景区名称
address string 景区地址
openTime string 景区开放时间
ticketPrice double 景区门票价格
attractions[] Attraction[] 景区下的景点列表

Attraction(景点)

成员变量 类型 描述
name string 景点名称
description string 景点介绍
scenicArea string 所属景区名称

Visitor(游客)

成员变量 类型 描述
name string 游客姓名
age int 游客年龄
gender string 游客性别
contactInfo string 游客联系方式

Route(线路)

成员变量 类型 描述
name string 线路名称
scenicAreas[] string[] 经过的景区名称列表
attractions[] string[] 经过的景点名称列表
price double 线路价格
tickets int 购买此线路的游客数量
visitors[] Visitor[] 购买此线路的游客列表

功能实现

1. 对景区的基本信息进行管理

对景区的基本信息进行管理,包括添加、删除和修改景区信息。使用文件存储景区信息,具体实现方法为使用fstream库操作文件。代码如下:

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

struct ScenicArea {
    string name;
    string address;
    string openTime;
    double ticketPrice;
};

void addScenicArea(ScenicArea sa) {
    fstream file("scenicAreas.txt", ios::app);
    file.write((char*)&sa, sizeof(sa));
    file.close();
}

void deleteScenicArea(string name) {
    fstream file("scenicAreas.txt", ios::in | ios::out | ios::binary);
    ScenicArea sa;
    while (file.read((char*)&sa, sizeof(sa))) {
        if (sa.name == name) {
            file.seekp(-sizeof(sa), ios::cur);
            ScenicArea newSA = {"", "", "", 0};
            file.write((char*)&newSA, sizeof(sa));
        }
    }
    file.close();
}

void modifyScenicArea(string name, ScenicArea newSA) {
    fstream file("scenicAreas.txt", ios::in | ios::out | ios::binary);
    ScenicArea sa;
    while (file.read((char*)&sa, sizeof(sa))) {
        if (sa.name == name) {
            file.seekp(-sizeof(sa), ios::cur);
            file.write((char*)&newSA, sizeof(newSA));
        }
    }
    file.close();
}

2. 对景点的基本信息进行管理

对景点的基本信息进行管理,包括添加、删除和修改景点信息。同样使用文件存储景点信息。代码如下:

struct Attraction {
    string name;
    string description;
    string scenicArea;
};

void addAttraction(Attraction attraction) {
    fstream file("attractions.txt", ios::app);
    file.write((char*)&attraction, sizeof(attraction));
    file.close();
}

void deleteAttraction(string name) {
    fstream file("attractions.txt", ios::in | ios::out | ios::binary);
    Attraction attraction;
    while (file.read((char*)&attraction, sizeof(attraction))) {
        if (attraction.name == name) {
            file.seekp(-sizeof(attraction), ios::cur);
            Attraction newAttraction = {"", "", ""};
            file.write((char*)&newAttraction, sizeof(newAttraction));
        }
    }
    file.close();
}

void modifyAttraction(string name, Attraction newAttraction) {
    fstream file("attractions.txt", ios::in | ios::out | ios::binary);
    Attraction attraction;
    while (file.read((char*)&attraction, sizeof(attraction))) {
        if (attraction.name == name) {
            file.seekp(-sizeof(attraction), ios::cur);
            file.write((char*)&newAttraction, sizeof(newAttraction));
        }
    }
    file.close();
}

3. 实现游客信息的管理

实现游客信息的管理,包括添加、删除和修改游客信息。同样使用文件存储游客信息。代码如下:

struct Visitor {
    string name;
    int age;
    string gender;
    string contactInfo;
};

void addVisitor(Visitor visitor) {
    fstream file("visitors.txt", ios::app);
    file.write((char*)&visitor, sizeof(visitor));
    file.close();
}

void deleteVisitor(string name) {
    fstream file("visitors.txt", ios::in | ios::out | ios::binary);
    Visitor visitor;
    while (file.read((char*)&visitor, sizeof(visitor))) {
        if (visitor.name == name) {
            file.seekp(-sizeof(visitor), ios::cur);
            Visitor newVisitor = {"", 0, "", ""};
            file.write((char*)&newVisitor, sizeof(newVisitor));
        }
    }
    file.close();
}

void modifyVisitor(string name, Visitor newVisitor) {
    fstream file("visitors.txt", ios::in | ios::out | ios::binary);
    Visitor visitor;
    while (file.read((char*)&visitor, sizeof(visitor))) {
        if (visitor.name == name) {
            file.seekp(-sizeof(visitor), ios::cur);
            file.write((char*)&newVisitor, sizeof(newVisitor));
        }
    }
    file.close();
}

4. 对景区和景点进行组合,实现线路的生成和管理

对景区和景点进行组合,实现线路的生成和管理。同样使用文件存储线路信息。代码如下:

struct Route {
    string name;
    string scenicAreas[10];
    string attractions[10];
    double price;
    int tickets;
    Visitor visitors[100];
};

void addRoute(Route route) {
    fstream file("routes.txt", ios::app);
    file.write((char*)&route, sizeof(route));
    file.close();
}

void deleteRoute(string name) {
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        if (route.name == name) {
            file.seekp(-sizeof(route), ios::cur);
            Route newRoute = {"", {""}, {""}, 0, 0};
            file.write((char*)&newRoute, sizeof(newRoute));
        }
    }
    file.close();
}

void modifyRoute(string name, Route newRoute) {
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        if (route.name == name) {
            file.seekp(-sizeof(route), ios::cur);
            file.write((char*)&newRoute, sizeof(newRoute));
        }
    }
    file.close();
}

5. 对游客线路的购买和管理

对游客线路的购买和管理,包括线路查询、购票、取消购票等。同样使用文件存储购票信息。代码如下:

void purchaseRoute(string name, Visitor visitor) {
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        if (route.name == name) {
            route.tickets++;
            strcpy_s((char*)&route.visitors[route.tickets], sizeof(Visitor), (char*)&visitor);
            file.seekp(-sizeof(route), ios::cur);
            file.write((char*)&route, sizeof(route));
        }
    }
    file.close();
}

void cancelRoute(string name, Visitor visitor) {
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        if (route.name == name) {
            for (int i = 0; i < route.tickets; i++) {
                if (strcmp((char*)&route.visitors[i], (char*)&visitor) == 0) {
                    for (int j = i; j < route.tickets - 1; j++) {
                        strcpy_s((char*)&route.visitors[j], sizeof(Visitor), (char*)&route.visitors[j + 1]);
                        route.tickets--;
                        file.seekp(-sizeof(route), ios::cur);
                        file.write((char*)&route, sizeof(route));
                    }
                }
            }
        }
    }
    file.close();
}

6. 统计线路销售和游客数量等信息

统计线路销售和游客数量等信息。使用文件读取信息并进行统计。代码如下:

void countTickets() {
    int tickets = 0;
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        tickets += route.tickets;
    }
    file.close();
    cout << "总票数为:" << tickets << endl;
}

void countSales() {
    double sales = 0.0;
    fstream file("routes.txt", ios::in | ios::out | ios::binary);
    Route route;
    while (file.read((char*)&route, sizeof(route))) {
        sales += route.price * route.tickets;
    }
    file.close();
    cout << "总销售额为:" << sales << endl;
}

示例说明

示例1:添加游客信息

Visitor visitor = {"张三", 30, "男", "13312345678"};
addVisitor(visitor);

以上示例中,创建了一个名为"张三"的Visitor结构体,并将其存储到visitors.txt文件中。

示例2:统计总票数

countTickets();

以上示例中,程序会读取routes.txt文件中每个Route结构体的tickets成员变量,将其相加后输出总票数。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现景区旅游信息管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C++简单实现shared_ptr的代码

    实现一个简单的shared_ptr需要考虑以下几个方面: 1.计数器实现:将指针的计数器放在一个自定义类中,当有多个shared_ptr指向同一个对象时,计数器加1;当一个指针被销毁时,计数器减1;当计数器为0时,释放对象所占用的内存。 2.拷贝构造函数和赋值运算符实现:在拷贝构造函数和赋值运算符中,需要将新对象的计数器指向原对象的计数器,使得两个对象指向同…

    C 2023年5月23日
    00
  • C++实现教职工信息管理系统

    C++实现教职工信息管理系统攻略 1. 确定需求 在开始编写代码之前,我们需要确定该教职工信息管理系统的需求,包括需要实现哪些功能、输入输出的格式等。 该系统需要实现的功能包括: 添加教职工信息 删除教职工信息 修改教职工信息 查询教职工信息 显示所有教职工信息 教职工信息需要包括: 姓名 工号 职称 部门 输入格式为: 添加教职工信息:姓名 工号 职称 部…

    C 2023年5月23日
    00
  • C语言实现线性动态(单向)链表的示例代码

    下面是详细讲解“C语言实现线性动态(单向)链表的示例代码”的完整攻略: 线性动态(单向)链表是什么? 线性动态(单向)链表是一种动态数据结构,由若干个节点组成。每个节点包含两个部分:数据部分和一个称为指针的部分。指针指向下一个节点,最后一个节点指向空地址(NULL)。链表起始点称为头节点,最后一个节点称为尾节点。 实现步骤 1. 定义节点结构体 定义节点结构…

    C 2023年5月23日
    00
  • 基于C语言实现创意多彩贪吃蛇游戏

    基于C语言实现创意多彩贪吃蛇游戏 游戏规则 贪吃蛇游戏是一款经典的益智游戏,其规则如下: 蛇开始时只有一个身体,每当蛇吃到食物时,就会在尾部增加一个身体,同时加分。 蛇每格时间会自动向前移动一格,如果碰到边缘或者碰到自己的身体,则游戏结束。 为了避免蛇一直沿着一条直线前进导致游戏时间过短,游戏中会随机生成食物,蛇需要不断吃食物才能继续游戏。 游戏实现 在C语…

    C 2023年5月24日
    00
  • C++实现宾馆房间管理系统

    C++实现宾馆房间管理系统攻略 1. 综述 C++实现宾馆房间管理系统是一个较为复杂的工程,具体包括以下几个部分:界面、数据存储、数据处理等,本攻略将分别进行讲解。 2. 界面 宾馆房间管理系统的界面一般需要包括以下几个模块: 登录模块 房间信息查询模块 房间信息编辑模块 订单信息查询模块 订单信息编辑模块 其中,登录模块一般会使用命令行界面进行实现,通过对…

    C 2023年5月23日
    00
  • C++类和对象深入探索之分文件编写点和圆的关系详解

    首先,为了讲解“C++类和对象深入探索之分文件编写点和圆的关系详解”,我们需要先了解C++中的类和对象是什么,以及如何实现类和对象。 类和对象的概念 在C++中,类是一种可以封装数据和方法的数据类型,可以理解为是对现实生活中某一个事物的抽象,例如现实生活中的汽车可以看作是一个类。而对象是类的一个实例化,是类的具体个体化,例如现实生活中的一辆特定品牌的汽车可以…

    C 2023年5月22日
    00
  • JS中循环遍历数组的四种方式总结

    JS中循环遍历数组的四种方式总结 在JavaScript编程中,遍历数组是一个非常常见的操作。在本文中,我将介绍四种JS中循环遍历数组的方式,它们分别是: for循环 forEach()方法 map()方法 for…in循环 1. for循环 for循环是最基本也是最常用的JS中遍历数组的方法。它的语法如下: for(let i = 0; i < …

    C 2023年5月22日
    00
  • C语言实现猜数字小游戏

    以下是详细讲解“C语言实现猜数字小游戏”的完整攻略。 第一步:获取用户输入的数字 为实现猜数字小游戏的基本功能,首先需要获取用户输入的数字。可以使用C语言的标准库函数scanf()来实现。示例代码如下: int guess_num; // 定义变量来存储用户输入的数字 printf("请猜一个数字:"); scanf("%d&q…

    C 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部