源碼
#include
#include?
//一個(gè)游客的基本信息:身份證號(hào)、姓名、年齡、門票類型、檢錄情況?
//使用結(jié)構(gòu)體把它們指向同一個(gè)個(gè)體,結(jié)構(gòu)體是一種自定義數(shù)據(jù)類型(一系列數(shù)據(jù)的集合),結(jié)構(gòu)體里面包括的是不同類型的數(shù)據(jù) (成員)
struct tourist
{
char id[100];
int age;
int s_;
int o_;
int wh; //是否在場(chǎng)內(nèi)?
}tr[10000]; //結(jié)構(gòu)體數(shù)組,每天限1,0000人
struct tourist *tp=tr;??//結(jié)構(gòu)體數(shù)組指針?
int main()
{//調(diào)用函數(shù)的聲明?
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("歡迎使用景區(qū)一體化管理系統(tǒng)\n(程序設(shè)計(jì)者:2022151404袁書瑞)\n");
printf("請(qǐng)選擇所使用的功能\n");
printf("功能選項(xiàng):\n 1.門票預(yù)訂系統(tǒng)(在售票大廳使用)\n 2.檢票入場(chǎng)系統(tǒng)(在景區(qū)入口使用)\n 3.檢票出場(chǎng)系統(tǒng)(在景區(qū)出口使用)\n 4.實(shí)時(shí)流量監(jiān)控\n") ;
printf("請(qǐng)輸入選項(xiàng)對(duì)應(yīng)的數(shù)字以使用相應(yīng)功能:");
int chs;
scanf("%d",&chs);//&一開始漏寫了導(dǎo)致程序自動(dòng)退出運(yùn)行?
while(1)
{switch(chs){
case 1:{
//購票和錄入信息?
tp=tr;//指針回到起點(diǎn)?
int num=0;//總計(jì)數(shù)器?
int price=0;//總票價(jià)?
while(1)
{printf("歡迎使用門票預(yù)訂系統(tǒng)\n(程序設(shè)計(jì)者:2022151404袁書瑞)\n\n\n");
printf("目前票價(jià)政策:\n1.未成年人:12周歲以下免費(fèi);13~18周歲半價(jià)\n2.學(xué)生票半價(jià)(檢票時(shí)需出示有效證件)\n");
printf("3.優(yōu)待票免費(fèi)(70周歲及以上老人、殘疾人、現(xiàn)役和離退休軍士等群體)\n");
printf("請(qǐng)輸入需要購票的人數(shù):\n");
int i1=1;?//內(nèi)部計(jì)數(shù)?
int n; //人數(shù)?
scanf("%d",&n);
for(;i1<=n;i1++)
{c_in(tp,i1);
ag(tp);
tpof(tp) ;
price=price+pr(tp);
tp++;}????//什么時(shí)候停止運(yùn)行,說明票訂滿了?
printf("您的訂單處理完成,總票價(jià):%d元\n",price);
num=num+n;
printf("是否繼續(xù)?(1/0)\n");
int yn;
scanf("%d",&yn);
if(yn==1)
{
}
else if(yn!=1)
{price=0; i1=1;
printf("感謝使用,祝您游玩愉快!\n\n\n");
printf("是否所有游客已完成購票?如果是,請(qǐng)輸入密鑰12345!\n如果不是,請(qǐng)輸入任意數(shù)字,繼續(xù)下面游客的購票服務(wù)!\n\n\n");
int ok;
scanf("%d",&ok);
if (ok==12345)
printf("購票系統(tǒng)使用完畢,共售出%d張門票\n",num) ;
chs=0;??//改變chs的值跳轉(zhuǎn)至default,之后就可以重新選擇功能?
break;
if (ok!=12345)
printf("請(qǐng)下一位游客購票。\n\n\n");?
}
}
break;
}?
case 2:
{//檢錄
while(1)
{printf("歡迎使用檢票入場(chǎng)系統(tǒng)\n(程序設(shè)計(jì)者:2022151404袁書瑞)\n");
tp=tr; // 指針回到起點(diǎn)?
//檢索身份證?
int ch1= ch_in (tp);
if(ch1==0)
printf("\n\n抱歉,沒有檢索到您的訂票信息,請(qǐng)購票后入場(chǎng)。\n\n\n");
if(ch1==1)
printf("\n\n歡迎游覽本景區(qū),祝您游玩愉快!\n\n\n");
printf("是否所有游客已經(jīng)完成入場(chǎng),如果是,請(qǐng)輸入密鑰13870!\n如果不是,請(qǐng)輸入任意數(shù)字繼續(xù)入場(chǎng)!\n\n\n");
int ol;
scanf("%d",&ol);?
if(ol==13870)
chs=0;
break;
if(ol!=13870)
printf("請(qǐng)下一位游客入場(chǎng)。\n\n\n");
}
break;
}
case 3:{
//檢出
while(1)
{printf("歡迎使用檢票出場(chǎng)系統(tǒng)\n(程序設(shè)計(jì)者:2022151404袁書瑞)\n\n");
tp=tr; // 指針回到起點(diǎn)?
//檢索身份證?
int ch2= ch_ot (tp);
if(ch2==0)
printf("\n\n抱歉,沒有檢索到您的身份信息,請(qǐng)咨詢工作人員。\n\n\n");
if(ch2==1)
printf("\n\n感謝游覽本景區(qū),歡迎下次光臨!\n\n\n");
printf("是否所有游客已經(jīng)完成出場(chǎng),如果是,請(qǐng)輸入密鑰98511!\n如果不是,請(qǐng)輸入任意數(shù)字繼續(xù)出場(chǎng)!\n\n\n");
int om;
scanf("%d",&om);?
if(om==98511)
chs=0;
break;
if(om!=98511)
printf("請(qǐng)下一位游客入場(chǎng)。\n\n\n");
}
break;
}
case 4:
{
//統(tǒng)計(jì)顯示在場(chǎng)人員
tp=tr;//指針復(fù)位?
int lv= live(tp);
printf("當(dāng)前在場(chǎng)人數(shù):%d",lv); //case必須要終止條件?
chs=0;?
break;
?
?}?
default:{printf("請(qǐng)重新選擇功能:");
scanf("%d",&chs) ; //如果不寫……
break;
}
}
}
}
//函數(shù)1:由身份證號(hào)碼讀取年齡 (函數(shù)只能單獨(dú)定義,不能寫在主函數(shù)當(dāng)中!)?
//身份證共有18位,其中7-10位數(shù)字代表出生年
void ag(struct tourist *p)
{int a;
int b=0;
int i=6;
for(;i<10;i++)
{a=(p->id)[i]-'0';??//字符轉(zhuǎn)數(shù)字?
?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;
}
//函數(shù)2: 計(jì)算單人票價(jià),需要知道的是 年齡age、學(xué)生s_if、優(yōu)待o_if,都可以從結(jié)構(gòu)體讀取?
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;
}
//函數(shù)3: 在系統(tǒng)中輸入每一位購票游客的身份證號(hào)碼
void c_in(struct tourist *p,int n)
{
while(1)
{printf("請(qǐng)輸入第%d位游客的身份證號(hào)碼:",n);
char a[100];?
scanf("%s",&a);?
int pan1;
int pan11=0;
for(pan1=0;pan1='0'&&a[pan1]<='9');
pan11++;}?//輸入的是不是純數(shù)字?
if(strlen(a)!=18||pan11!=18)?//檢查是否輸入錯(cuò)誤?
printf("輸入的身份證號(hào)碼格式錯(cuò)誤,請(qǐng)重新輸入:\n");
else
{int q;
for(q=0;q<18;q++)
{(p->id)[q]=a[q]; }
break;}//輸入正確則退出循環(huán)??
}}
//函數(shù)4 票型
void tpof(struct tourist *p)?
{if(p->age>=18)
{printf("是否購買學(xué)生票(半價(jià))?\n學(xué)生票適用于18周歲以上學(xué)生,需要在檢票時(shí)出示相關(guān)證件\n如果是,輸入1;不是,輸入0\n");
scanf("%d",&p->s_);}//是否購買學(xué)生票?
else if(p->age<18)
p->s_=0;
if(p->s_==0)
{printf("是否購買優(yōu)待票(免費(fèi))?\n優(yōu)待票需要在檢票時(shí)提供相關(guān)證明\n如果是,輸入1;不是,輸入0\n");
scanf("%d",&p->o_);}//是否購買優(yōu)待票?
else if(p->s_!=0)
p->o_=0;
}
//函數(shù)5 檢票入場(chǎng)?
int ch_in (struct tourist *p)
{printf("請(qǐng)輸入購票時(shí)填寫的身份證號(hào)碼:\n\n");
char ckid[100];
scanf("%s",&ckid);
int i;
int j;
int k=0;
int a=0;
if(strlen(ckid)!=18)
printf("輸入格式錯(cuò)誤,請(qǐng)重新輸入:\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;//已入場(chǎng)
printf("游客信息:\n身份證號(hào)碼:%s\n年齡:%d\n",p->id,p->age);
if(p->s_==1)
printf("票型:學(xué)生票,請(qǐng)出示學(xué)生證\n") ;?
else if(p->s_!=1)
if(p->o_==1)
printf("票型:優(yōu)待票,請(qǐng)出示相關(guān)證明\n");
else if(p->o_!=1)
printf("票型:全票");
break;}
else if(k!=18)
a=0;
k=0;
p++; }
return a;?
?}?
//函數(shù)6 檢票出場(chǎng)?
int ch_ot (struct tourist *p)
{printf("請(qǐng)輸入購票時(shí)填寫的身份證號(hào)碼:\n");
char ckid[100];
scanf("%s",&ckid);
int i;
int j;
int k=0;
int a=0;
if(strlen(ckid)!=18)
printf("輸入格式錯(cuò)誤,請(qǐng)重新輸入:\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;//已出場(chǎng)
break;}
else if(k!=18)
a=0;
k=0;
p++; }
return a;?
?}?
//函數(shù)7 實(shí)時(shí)流量監(jiān)控,統(tǒng)計(jì)人數(shù),顯示在場(chǎng)人員?
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;
}
標(biāo)簽: