C++实现景区旅游信息管理系统攻略
功能需求分析
本系统需要实现以下功能:
- 对景区的基本信息进行管理,包括景区名称、地址、开放时间、门票价格等;
- 对景点的基本信息进行管理,包括景点名称、介绍、关联景区等;
- 实现游客信息的管理,包括游客姓名、年龄、性别、联系方式等;
- 对景区和景点进行组合,实现线路的生成和管理;
- 对游客线路的购买和管理,包括线路查询、购票、取消购票等;
- 统计线路销售和游客数量等信息。
系统设计
数据结构设计
根据以上需求,本系统需要设计以下数据结构:
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技术站