源码
#include
#include
//一个游客的基本信息:身份证号、姓名、年龄、门票类型、检录情况
//使用结构体把它们指向同一个个体,结构体是一种自定义数据类型(一系列数据的集合),结构体里面包括的是不同类型的数据 (成员)
struct tourist
{
char id[100];
int age;
int s_;
int o_;
int wh; //是否在场内
}tr[10000]; //结构体数组,每天限1,0000人
struct tourist *tp=tr; //结构体数组指针
int main()
{//调用函数的声明
void ag(struct tourist *p);
void c_in(struct tourist *p,int n);
void tpof(struct tourist *p);
int pr(struct tourist *p);
int ch_in (struct tourist *p);
int ch_ot (struct tourist *p);
int live(struct tourist *p);
//功能选择
printf("欢迎使用景区一体化管理系统\n(程序设计者:2022151404袁书瑞)\n");
printf("请选择所使用的功能\n");
printf("功能选项:\n 1.门票预订系统(在售票大厅使用)\n 2.检票入场系统(在景区入口使用)\n 3.检票出场系统(在景区出口使用)\n 4.实时流量监控\n") ;
printf("请输入选项对应的数字以使用相应功能:");
int chs;
scanf("%d",&chs);//&一开始漏写了导致程序自动退出运行
while(1)
{switch(chs){
case 1:{
//购票和录入信息
tp=tr;//指针回到起点
int num=0;//总计数器
int price=0;//总票价
while(1)
{printf("欢迎使用门票预订系统\n(程序设计者:2022151404袁书瑞)\n\n\n");
printf("目前票价政策:\n1.未成年人:12周岁以下免费;13~18周岁半价\n2.学生票半价(检票时需出示有效证件)\n");
printf("3.优待票免费(70周岁及以上老人、残疾人、现役和离退休军士等群体)\n");
printf("请输入需要购票的人数:\n");
int i1=1; //内部计数
int n; //人数
scanf("%d",&n);
for(;i1<=n;i1++)
{c_in(tp,i1);
ag(tp);
tpof(tp) ;
price=price+pr(tp);
tp++;} //什么时候停止运行,说明票订满了
printf("您的订单处理完成,总票价:%d元\n",price);
num=num+n;
printf("是否继续?(1/0)\n");
int yn;
scanf("%d",&yn);
if(yn==1)
{
}
else if(yn!=1)
{price=0; i1=1;
printf("感谢使用,祝您游玩愉快!\n\n\n");
printf("是否所有游客已完成购票?如果是,请输入密钥12345!\n如果不是,请输入任意数字,继续下面游客的购票服务!\n\n\n");
int ok;
scanf("%d",&ok);
if (ok==12345)
printf("购票系统使用完毕,共售出%d张门票\n",num) ;
chs=0; //改变chs的值跳转至default,之后就可以重新选择功能
break;
if (ok!=12345)
printf("请下一位游客购票。\n\n\n");
}
}
break;
}
case 2:
{//检录
while(1)
{printf("欢迎使用检票入场系统\n(程序设计者:2022151404袁书瑞)\n");
tp=tr; // 指针回到起点
//检索身份证
int ch1= ch_in (tp);
if(ch1==0)
printf("\n\n抱歉,没有检索到您的订票信息,请购票后入场。\n\n\n");
if(ch1==1)
printf("\n\n欢迎游览本景区,祝您游玩愉快!\n\n\n");
printf("是否所有游客已经完成入场,如果是,请输入密钥13870!\n如果不是,请输入任意数字继续入场!\n\n\n");
int ol;
scanf("%d",&ol);
if(ol==13870)
chs=0;
break;
if(ol!=13870)
printf("请下一位游客入场。\n\n\n");
}
break;
}
case 3:{
//检出
while(1)
{printf("欢迎使用检票出场系统\n(程序设计者:2022151404袁书瑞)\n\n");
tp=tr; // 指针回到起点
//检索身份证
int ch2= ch_ot (tp);
if(ch2==0)
printf("\n\n抱歉,没有检索到您的身份信息,请咨询工作人员。\n\n\n");
if(ch2==1)
printf("\n\n感谢游览本景区,欢迎下次光临!\n\n\n");
printf("是否所有游客已经完成出场,如果是,请输入密钥98511!\n如果不是,请输入任意数字继续出场!\n\n\n");
int om;
scanf("%d",&om);
if(om==98511)
chs=0;
break;
if(om!=98511)
printf("请下一位游客入场。\n\n\n");
}
break;
}
case 4:
{
//统计显示在场人员
tp=tr;//指针复位
int lv= live(tp);
printf("当前在场人数:%d",lv); //case必须要终止条件
chs=0;
break;
}
default:{printf("请重新选择功能:");
scanf("%d",&chs) ; //如果不写……
break;
}
}
}
}
//函数1:由身份证号码读取年龄 (函数只能单独定义,不能写在主函数当中!)
//身份证共有18位,其中7-10位数字代表出生年
void ag(struct tourist *p)
{int a;
int b=0;
int i=6;
for(;i<10;i++)
{a=(p->id)[i]-'0'; //字符转数字
switch(i){
case 6:b=b+a*1000;break;
case 7:b=b+a*100;break;
case 8:b=b+a*10;break;
case 9:b=b+a*1;break; }
}
p->age=2023-b;
}
//函数2: 计算单人票价,需要知道的是 年龄age、学生s_if、优待o_if,都可以从结构体读取
int pr(struct tourist *p)
{int c;
if(p->o_==1)
c=0;
else if(p->o_==0)
if(p->s_==0)
if(p->age>=18)
c=300;
if(p->age<18&&p->age>12)
c=150;
if(p->age<=12)
c=0;
else if(p->s_==1)
c=150;
else if(p->s_!=1&&p->s_!=0)
c=300;
else if(p->o_!=1&&p->o_!=0)
c=300;
return c;
}
//函数3: 在系统中输入每一位购票游客的身份证号码
void c_in(struct tourist *p,int n)
{
while(1)
{printf("请输入第%d位游客的身份证号码:",n);
char a[100];
scanf("%s",&a);
int pan1;
int pan11=0;
for(pan1=0;pan1='0'&&a[pan1]<='9');
pan11++;} //输入的是不是纯数字
if(strlen(a)!=18||pan11!=18) //检查是否输入错误
printf("输入的身份证号码格式错误,请重新输入:\n");
else
{int q;
for(q=0;q<18;q++)
{(p->id)[q]=a[q]; }
break;}//输入正确则退出循环
}}
//函数4 票型
void tpof(struct tourist *p)
{if(p->age>=18)
{printf("是否购买学生票(半价)?\n学生票适用于18周岁以上学生,需要在检票时出示相关证件\n如果是,输入1;不是,输入0\n");
scanf("%d",&p->s_);}//是否购买学生票
else if(p->age<18)
p->s_=0;
if(p->s_==0)
{printf("是否购买优待票(免费)?\n优待票需要在检票时提供相关证明\n如果是,输入1;不是,输入0\n");
scanf("%d",&p->o_);}//是否购买优待票
else if(p->s_!=0)
p->o_=0;
}
//函数5 检票入场
int ch_in (struct tourist *p)
{printf("请输入购票时填写的身份证号码:\n\n");
char ckid[100];
scanf("%s",&ckid);
int i;
int j;
int k=0;
int a=0;
if(strlen(ckid)!=18)
printf("输入格式错误,请重新输入:\n");
for(i=0;i<10000;i++)
{for(j=0;j<18;j++)
{if((p->id)[j]==ckid[j])
k++;}
if (k==18)
{a=1;
p->wh = 1;//已入场
printf("游客信息:\n身份证号码:%s\n年龄:%d\n",p->id,p->age);
if(p->s_==1)
printf("票型:学生票,请出示学生证\n") ;
else if(p->s_!=1)
if(p->o_==1)
printf("票型:优待票,请出示相关证明\n");
else if(p->o_!=1)
printf("票型:全票");
break;}
else if(k!=18)
a=0;
k=0;
p++; }
return a;
}
//函数6 检票出场
int ch_ot (struct tourist *p)
{printf("请输入购票时填写的身份证号码:\n");
char ckid[100];
scanf("%s",&ckid);
int i;
int j;
int k=0;
int a=0;
if(strlen(ckid)!=18)
printf("输入格式错误,请重新输入:\n");
for(i=0;i<10000;i++)
{for(j=0;j<18;j++)
{if((p->id)[j]==ckid[j])
k++;}
if (k==18)
{a=1;
p->wh = 0;//已出场
break;}
else if(k!=18)
a=0;
k=0;
p++; }
return a;
}
//函数7 实时流量监控,统计人数,显示在场人员
int live(struct tourist *p)
{ int n=0;
int i;
for(i=0;i<10000;i++)
{ if(p->wh==1)
{printf("%s\n",p->id);
n++;}
p++;
}
return n;
}
标签: