【C语言】旅游景点信息管理系统

#include<string.h>
#include <stdio.h>
#include <stdlib.h>
#include<windows.h> //cls清屏
/* 旅游景点信息管理系统
旅游景点的信息包括:编号、景点名称、景点来源、景点历史、景点图片、地点、所在地区、门票价格、优惠条件等。系统能够完成旅游景点信息的查询、更新、插入、删除、排序等功能。
(1) 排序:按编号对所有旅游景点的信息进行排序。             
(2) 查询:分别按编号、景点名称、地点条件查找旅游景点信息。 
(3) 更新:按编号对某个旅游景点的某项信息进行修改。         
(4) 插入:加入新旅游景点的信息。                           
(5) 删除:按编号删除已注销的旅游景点的信息。              
(6) 浏览:输出所有旅游景点信息。                           
(7) 统计:统计某地区某地点旅游景点的数量并输出。             */

//链表定义
typedef struct
{
 int ID;                                   //编号//
 char spot_name[30];                      //景点名称//
 char spot_source[30];                    //景点来源//
 char spot_history[100];                  //景点历史//
 //unsigned char spot prcture;//          //景点图片//
 char spot[30];                          //地点//
 char spot_area[30];                     //所在地区//
 int price;                            //门票价格//
 char discount_situation[50];               //优惠条件//
}datatype;
typedef struct Node
{
 datatype data;
 struct Node* next;                      //定义为next的指针//
}Node;
Node list;                              //链表list//

//函数定义
int Menu();                            //主菜单                                            【通过】 
void Close_menu();                       //关闭主菜单                                      【通过】 
void Clean_screen();                      //清屏                                           【通过】 
int Read_file(Node*lp);                 //写入文件                                         【通过】 
int Save_file(Node*lp);                 //保存且关闭文件                                   【通过】 
void Sort(Node*lp);                      //排序:按编号对所有旅游景点的信息进行排序        【通过】 
void Search_menu(Node*lp);                //查询菜单: 1.编号 2.景点名称 3.地点条件        【通过】 
void Search_ID(Node*lp);                 //查询1:编号                                     【通过】 
void Search_spot_name(Node*lp);          //查询2:景点名称                                 【通过】 
void Search_spot(Node*lp);              //查询3:地点条件                                  【通过】 
void Update(Node*lp);                   //更新:按编号对某个旅游景点的某项信息进行修改     【通过】 
void Add_menu(Node*lp);                 //插入菜单                                         【通过】 
void Add(Node*lp,Node a);              //插入:加入新旅游景点的信息                        【通过】 
void Delete_menu(Node*lp);             //删除:按编号删除已注销的旅游景点的信息            【通过】 
void Printf(Node*lp);                  //浏览:输出所有旅游景点信息                        【通过】 
void Count(Node*lp);                   //统计:统计某地区某地点旅游景点的数量并输出        【通过】 


//主函数
int main() //【通过】
 {
     //SetConsoleOutputCP(65001);
     Read_file(&list);
     int go_on=1;
     while(1)
     {
     Menu();
     while(1)
     {printf("继续使用?1.返回主菜单 2.退出程序\n");
     scanf("%d",&go_on);
     if(go_on==2)
        exit(0);
     else if(go_on==1)
        break;
     else
        printf("选择错误,请重新输入\n");}
     }
 return 0;
 }

//子函数
int Menu()    //主菜单 【通过】
{
 int choice;
 Clean_screen();
 printf("旅游景点信息管理系统\n");
 printf("(1) 排序:按编号对所有旅游景点的信息进行排序。\n");
 printf("(2) 查询:分别按编号、景点名称、地点条件查找旅游景点信息。\n");
 printf("(3) 更新:按编号对某个旅游景点的某项信息进行修改。\n");
 printf("(4) 插入:加入新旅游景点的信息。\n");
 printf("(5) 删除:按编号删除已注销的旅游景点的信息。\n");
 printf ("(6) 浏览:输出所有旅游景点信息。\n");
 printf("(7) 统计:统计某地区某地点旅游景点的数量并输出。\n");
 printf("(8) 退出系统\n");
 printf("请输入选项:\n");
 scanf("%d",&choice);
 switch(choice)
 {
  case 1:
     Sort(&list);
     break;
  case 2:
     Search_menu(&list);
     break;
  case 3:
      Update(&list);
      break;
  case 4:
      Add_menu(&list);
      break;
  case 5:
      Delete_menu(&list);
      break;
  case 6:
      Printf(&list);
      break;
  case 7:
      Count(&list);
      break;
  case 8:
      Close_menu();
      break;
  default:printf("选择错误\n");break;
 }
 return 1;
}

void Close_menu()   //关闭主菜单【通过】
{
 exit(0);
}

void Clean_screen() //清屏 【通过】
{
 system("cls");
}

int Read_file(Node* lp) //【通过】
{
    FILE* fp = fopen("file.txt", "r");
    Node st;
    Node* s;
    Node* t = lp;

    if (fp == NULL)
    {
        return 0;
    }

    else while (fscanf(fp, "%d %s %s %s %s %s %d\n %s\n",&st.data.ID,st.data.spot_name,st.data.spot_source,st.data.spot_history,st.data.spot,st.data.spot_area,&st.data.price,&st.data.discount_situation) != EOF)
    {
        s = (Node*)malloc(sizeof(Node));
        *s = st;
        t->next = s;         // 尾插法
        t = s;
        t->next = NULL;
    }
    fclose(fp);
    return 1;
}

int  Save_file(Node*lp) //保存文件【通过】
{
    FILE* fpWrite = fopen("file.txt", "w");
    if (fpWrite == NULL)
    {
        return 0;
    }

    Node* p = lp->next;

    while (p != NULL)
    {
        fprintf(fpWrite,"%d %s %s %s %s %s %d\n %s\n",p->data.ID,p->data.spot_name,p->data.spot_source,p->data.spot_history,p->data.spot,p->data.spot_area,p->data.price,p->data.discount_situation);
        p = p->next;
    }
    fclose(fpWrite);
    return 1;
}

void Sort(Node*lp)                      //排序:按编号对所有旅游景点的信息进行排序 【通过】
{
 Clean_screen();
 for(Node*p=lp->next;p!=NULL;p=p->next)
 {
 for(Node*t=p;t!=NULL;t=t->next)
       {
           if(p->data.ID>t->data.ID)
          {  Node change=*p;
             *p=*t;
             *t=change;
             change.next=p->next;
             p->next=t->next;
             t->next=change.next;}
       }
 }
 Printf(lp);//显示输出结果
 Save_file(lp);
}

void Search_menu(Node*lp)                //查询菜单: 1.编号 2.景点名称 3.地点条件  【通过】
{
Clean_screen();
int choice=0;
printf("查询菜单:\n");
printf("1.编号查找\n");
printf("2.景点名称查找\n");
printf("3.地点条件查找\n");
scanf("%d",&choice);
switch(choice)
{
 case 1:Search_ID(lp);break;
 case 2:Search_spot_name(lp);break;
 case 3:Search_spot(lp);break;
 default:printf("选择错误");break;
}
}

void Search_ID(Node*lp)                //查询1:编号  【通过】
{
printf("输入编号:");
int id;
int flag=0;
scanf("%d",&id);
Node*ser_ID=lp->next;
while(ser_ID!=NULL)
{
    if(ser_ID->data.ID==id)
    {
     printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
     printf("%d %s %s %s %s %s %d\n %s\n",ser_ID->data.ID,ser_ID->data.spot_name,ser_ID->data.spot_source,ser_ID->data.spot_history,ser_ID->data.spot,ser_ID->data.spot_area,ser_ID->data.price,ser_ID->data.discount_situation);
     flag=1;
    }
     ser_ID=ser_ID->next;
}
if(flag==0)
    printf("无法找到\n");
}

void Search_spot_name(Node*lp)         //查询2:景点名称 【通过】
{
printf("输入景点名称:");
int flag=0;
char name[30];
scanf("%s",&name);
Node*ser_sp_n=lp;
while(ser_sp_n!=NULL)
{
    if(strcmp(name,ser_sp_n->data.spot_name)==0)
    {
     printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
     printf("%d %s %s %s %s %s %d\n %s\n",ser_sp_n->data.ID,ser_sp_n->data.spot_name,ser_sp_n->data.spot_source,ser_sp_n->data.spot_history,ser_sp_n->data.spot,ser_sp_n->data.spot_area,ser_sp_n->data.price,ser_sp_n->data.discount_situation);
     flag=1;
    }
    ser_sp_n=ser_sp_n->next;
}
if(flag==0)
    printf("无法找到\n");
}


void Search_spot(Node*lp)              //查询3:地点条件 【通过】
{
printf("输入地点条件:");
int flag=0;
char spot[30];
scanf("%s",&spot);
Node*ser_sp_s=lp;
while(ser_sp_s!=NULL)
{
    if(strcmp(spot,ser_sp_s->data.spot)==0)
    {
     printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
     printf("%d %s %s %s %s %s %d\n %s\n",ser_sp_s->data.ID,ser_sp_s->data.spot_name,ser_sp_s->data.spot_source,ser_sp_s->data.spot_history,ser_sp_s->data.spot,ser_sp_s->data.spot_area,ser_sp_s->data.price,ser_sp_s->data.discount_situation);
     flag=1;
    }
    ser_sp_s=ser_sp_s->next;
}
if(flag==0)
    printf("无法找到\n");
}

void Update(Node*lp)                  //更新:按编号对某个旅游景点的某项信息进行修改 【通过】
{
Clean_screen();
printf("输入编号:");
int id;
int flag=0;
scanf("%d",&id);
Node*ser_ID=lp;
while(ser_ID!=NULL)
{
    if(ser_ID->data.ID==id)
    {
     printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
     printf("%d %s %s %s %s %s %d\n %s\n\n",ser_ID->data.ID,ser_ID->data.spot_name,ser_ID->data.spot_source,ser_ID->data.spot_history,ser_ID->data.spot,ser_ID->data.spot_area,ser_ID->data.price,ser_ID->data.discount_situation);
     flag=1;
     break;
    }
     ser_ID=ser_ID->next;
}
if(flag==0)
    {printf("无法找到\n");
     }
if(flag==1){
int choice=0;
printf("1.景点名称\n");
printf("2.景点来源\n");
printf("3.景点历史\n");
printf("4.地点\n");
printf("5.所在地区\n");
printf("6.门票价格\n");
printf("7.优惠条件\n");
printf("请选择:\n");
getchar();
scanf("%d",&choice);
switch(choice)
{
 case 1:
     printf("输入景点名称\n");
     scanf("%s",ser_ID->data.spot_name);
     Printf(lp);
     break;
 case 2:
     printf("输入景点来源\n");
     scanf("%s",ser_ID->data.spot_source);
     Printf(lp);
     break;
 case 3:
     printf("输入景点历史\n");
     scanf("%s",ser_ID->data.spot_history);
     Printf(lp);
     break;
 case 4:
     printf("输入地点\n");
     scanf("%s",ser_ID->data.spot);
     Printf(lp);
     break;
 case 5:
     printf("输入所在地区\n");
     scanf("%s",ser_ID->data.spot_area);
     Printf(lp);
     break;
 case 6:
     printf("输入门票价格\n");
     scanf("%d",&ser_ID->data.price);
     Printf(lp);
     break;
 case 7:
     printf("输入优惠条件\n");
     getchar();
     scanf("%s",&ser_ID->data.discount_situation);
     Printf(lp);
     break;
 default: printf("选择错误\n");break;
}}

Save_file(lp);
}

void Add_menu(Node*lp)                      //插入菜单【通过】
{
Clean_screen();
Node Ad_m;
printf("请输入:\n");

int id;
int flag=0;
scanf("%d",&id);
Node*ser_ID=lp;
while(ser_ID!=NULL)
{
    if(ser_ID->data.ID==id)
    {
     flag=1;
     break;
    }
     ser_ID=ser_ID->next;
}
if(flag==1)
    {printf("编号重复\n");
     }
if(flag==0)
{


printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
scanf("%d %s %s %s %s %s %d %s",&Ad_m.data.ID,Ad_m.data.spot_name,Ad_m.data.spot_source,Ad_m.data.spot_history,Ad_m.data.spot,Ad_m.data.spot_area,&Ad_m.data.price,&Ad_m.data.discount_situation);
Add(&list,Ad_m);
Printf(lp);//显示输出结果
}
}

void Add(Node*lp,Node a)              //插入:加入新旅游景点的信息 【通过】
{
    Node*p=(Node*)malloc(sizeof(Node)); //头插法(可以考虑尾插法)
    Node*s=lp;
    *p=a;
    p->next=s->next;
    s->next=p;
    Save_file(lp);
}

/*void Delete_menu(Node*lp)             //删除 1【通过】
{
Clean_screen();
printf("输入编号:");
int id;
int flag=0;
scanf("%d",&id);
Node*ser_ID=lp;
while(ser_ID!=NULL)
{
    if(ser_ID->data.ID==id)
    {
     //printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格 优惠条件\n");
     printf("%d %s %s %s %s %s %f %f",ser_ID->data.ID,ser_ID->data.spot_name,ser_ID->data.spot_source,ser_ID->data.spot_history,ser_ID->data.spot,ser_ID->data.spot_area,ser_ID->data.price,ser_ID->data.discount_situation);
     flag=1;
     break;
    }
     ser_ID=ser_ID->next;
}
if(flag==0)
    {printf("无法找到\n");
    }
if(flag==1)
{Node*r=NULL;
r=ser_ID->next;
ser_ID->data=r->data;
ser_ID->next=r->next;
free(r);
Printf(lp);//显示输出结果
Save_file(lp);}
}
*/

void Delete_menu(Node*lp)             //删除2 【通过】
{
    Clean_screen();
    printf("输入编号:");
    int id;
    int flag=0;
    scanf("%d",&id);
    Node*ser_ID=lp;
    while(ser_ID!=NULL)
    {
        if(ser_ID->data.ID==id)
        {
            flag=1;
            break;
        }
        ser_ID=ser_ID->next;
    }
    if(flag==0)
    {
        printf("无法找到\n");
    }
    if(flag==1)
    {
        Node*r=NULL;
        r=ser_ID->next;
        if(r==NULL) // 如果要删除的节点是最后一个节点
        {
            Node*p=lp;
            while(p->next!=ser_ID)
            {
                p=p->next;
            }
            p->next=NULL;
        }
        else
        {
            ser_ID->data=r->data;
            ser_ID->next=r->next;
            free(r);
        }
        Printf(lp);//显示输出结果
        Save_file(lp);
    }
}

void Printf(Node*lp)                  //浏览:输出所有旅游景点信息   【通过】
{
Clean_screen();
Node*p=lp->next;
printf("编号 景点名称 景点来源 景点历史 地点 所在地区 门票价格\n 优惠条件\n");
while(p!=NULL)
{
  printf("%d %s %s %s %s %s %d\n %s\n",p->data.ID,p->data.spot_name,p->data.spot_source,p->data.spot_history,p->data.spot,p->data.spot_area,p->data.price,p->data.discount_situation);
  p=p->next;
}
}


void Count(Node*lp) //统计:统计某地区某地点旅游景点的数量并输出 【通过】
{
Clean_screen();
int num=0;
int num_1=0;
int num_2=0;
int flag_1=0;
printf("输入地点条件:\n");
char spot[30];
scanf("%s",&spot);
Node*ser_sp_s=lp;
while(ser_sp_s!=NULL)
{
    if(strcmp(spot,ser_sp_s->data.spot)==0)
    {
     num_1=num_1+1;
     flag_1=1;
    }
    ser_sp_s=ser_sp_s->next;
}
int flag_2=0;
printf("输入地区条件:\n");
char spot_area[30];
scanf("%s",&spot_area);
Node*ser_sp_s_a=lp;
while(ser_sp_s_a!=NULL)
{
    if(strcmp(spot_area,ser_sp_s_a->data.spot_area)==0)
    {
     num_2=num_2+1;
     flag_2=1;
    }
    ser_sp_s_a=ser_sp_s_a->next;
}
if(flag_1==0 && flag_2==0)
    printf("无法找到\n");
else
{   num=num_1+num_2;
    printf("数量为:%d\n",num);
}
}

  • 9
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
C语言景区旅游信息管理系统是一个用于管理景区旅游信息的软件系统。该系统主要包括景区信息、景点信息、旅游路线、游客信息、订单信息等模块,可以实现景区信息的录入、修改、查询和删除,景点信息的管理、旅游路线的规划、游客信息的登记和订单信息的管理等功能。 系统的主要功能模块如下: 1. 景区信息模块:该模块用于管理景区的基本信息,包括景区名称、地址、联系电话、简介等。管理员可以通过该模块对景区信息进行添加、修改、查询和删除操作。 2. 景点信息模块:该模块用于管理景区内的各个景点信息,包括景点名称、景点介绍、景点图片等。管理员可以通过该模块对景点信息进行添加、修改、查询和删除操作。 3. 旅游路线模块:该模块用于规划旅游路线,包括路线名称、路线介绍、路线图等。管理员可以通过该模块对旅游路线进行添加、修改、查询和删除操作。 4. 游客信息模块:该模块用于登记游客信息,包括姓名、性别、年龄、身份证号码等。管理员可以通过该模块对游客信息进行添加、修改、查询和删除操作。 5. 订单信息模块:该模块用于管理游客的订单信息,包括订单号、游客姓名、旅游路线、价格等。管理员可以通过该模块对订单信息进行添加、修改、查询和删除操作。 该系统可以大大提高景区管理效率和服务质量,方便游客查询和了解景区信息,同时也为景区管理者提供了更加方便快捷的管理方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值