📄 c.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <CTYPE.H>
#include <conio.h>
typedef int BOOL ;
#define MAX_PATH 256
#define TRUE 1
#define FALSE 0
#define TOURSITE_NUMBER 8 //The number of toursites
#define CURRENTSELECT_NUMBER 100 //The max number of current store
#define MIDSEASON_START 7 //Beginning of midseason
#define MIDSEASON_END 10 //End of midseason
#define PASSWORDLEN 16 //Max length of the password of administrator
typedef struct{
int MidseasonTicket; //Prices for midseason tickets
int LowseasonTicket; //Prices for lowseason tickets
int Peoplelimit; //Quota of every tuorsite
int M_MaintenanceCost; //Maintenance cost in midseason
int L_MaintenanceCost; //Maintenance cost in lowseason
int CostOfLiving; //Cost of accommodation locally
double StudentDiscount; //Discount for student
double SoldierDiscount; //Discount for soldier
double ElderDiscount; //Discount for elder
double ChildDiscount; //Discount for chlid
double GroupDiscount; //Discount for group
double VisitTime; //Time needed for visiting
}TOURSITEINFOMATION; //Information of toursites
typedef struct{
int MidseasonIncome; //Current income in midseason
int LowseasonIncome; //Current income in lowseason
int MidseasonPeople; //Current number of tourists in midseason
int LowseasonPeople; //Current number of tourists in lowseason
int Date[12][31]; //The number of tourists everyday
}TOURSITEDATA; //Datas of toursites
typedef struct{
int Month; //Visiting month
int Day; //The number of days visiting
int PeopleNumber; //The total number of tourists
int Price; //Prices of tickets
double Discount; //Discount
int TotalPrice; //Total cost
char TourSite[128];
char TouristIdentity[32]; //Identity of tourists(student,elder,child)
}CURRENTSELECT; //Current selection of customer
typedef struct{
int Index;
int Val;
}SORTITEM; //Use for sequencing
char TourSiteStr[TOURSITE_NUMBER][128]= //Character string of toursites
{
"ForbiddenCity ",
"SummerPalace ",
"GreatWall ",
"BeiHai ",
"Yuanmingyuan ",
"TempleOfHeaven",
"Xiangshan ",
"LamaTemple "
};
char TouristIdentityStr[][32]= //Character string of tourist's identity
{
"Child",
"Student",
"Soldier",
"Elder",
"Adult",
"Group"
};
TOURSITEINFOMATION TourSiteInfo[TOURSITE_NUMBER]; //Variable of toursite information
TOURSITEDATA TourSiteData[TOURSITE_NUMBER]; //Variable of toursite data
SORTITEM SortItem[TOURSITE_NUMBER]; //Variable of sequence
CURRENTSELECT CurrentSelect[CURRENTSELECT_NUMBER]; //Select resultant variable
int CurrentSelectCount =0; //Select resultant counter
char Password[PASSWORDLEN+1]=""; //Variable of passwords of administrator
BOOL SelectToDataFlag; //Identifier
BOOL IsdigitStr(char *digitStr); //Function
void Clear();
void Initialize();
void WriteData();
void ViewSelect();
void SelectToData();
void Introduction();
void ViewSite(char *FileName);
void TicketSystem();
void QueryTourSitePeople();
void QueryData();
BOOL VerifyPassword();
void ChangePassword();
void QueryMidseasonIncome(int SelectedTourSite);
void QueryLowseasonIncome(int SelectedTourSite);
void QueryYearIncome(int SelectedTourSite);
int SelectTourSite();
int SelectMonth();
int SelectDate(int *SelectedMonth,int *SelectedDay);
void encrypt();
int GetPeopleInfo(int *TouristIdentity,int *PeopleNumber);
int CheckAllData();
double GetDiscount(int SelectedTourSite,int TouristIdentity);
void FreeCurrentSelect();
void DeleteCurrentSelect(int Index);
void QueryIncomeAndGain(int SelectedTourSite);
void TourSitePeopleSort();
void TourSiteIncomeSort();
void SortData();
void EstimateCost();
void Recommendation();
void main()
{
int ch;
Initialize();
while(1)
{
printf("Main Menu\n\n");
printf("1.Brief Introduce For Each PLace Of Interest.\n");
printf("2.Book Tickets.\n");
printf("3.Inquire about the number of people of every toursite\n");
printf("4.The sequence of numbers of tourists of every toursite\n");
printf("5.Choose the toursite and caculate the time and money needed\n");
printf("6.The toursites recommended\n");
printf("7.Inquire About Data(Only For Administrator).\n");
printf("8.Exit\n\n");
printf("Select:");
ch = getche();
printf("\n\n");
switch(ch)
{
case '1':
Introduction();
break;
case '2':
TicketSystem();
if(SelectToDataFlag)
{
SelectToDataFlag = FALSE;
WriteData();
}
Clear();
break;
case '3':
QueryTourSitePeople();
Clear();
break;
case '4':
TourSitePeopleSort();
Clear();
break;
case '5':
EstimateCost();
Clear();
break;
case '6':
Recommendation();
Clear();
break;
case '7':
QueryData();
Clear();
break;
case '8':
exit(0);
default:
break;
}
}
}
BOOL IsdigitStr(char *digitStr) //Check if the customer is entering characters
{
int rtn;
if(!digitStr) return FALSE;
int Len = strlen(digitStr);
if(!Len) return FALSE;
char *Temp = digitStr;
for(int i=0;i<Len;i++,Temp++)
{
rtn = isdigit( *Temp );
if(!rtn)
return FALSE;
}
return TRUE;
}
void Clear() //Press ESC and return
{
char ch;
printf("Press ESC Key for return menu!\n");
while(1)
{
ch = getch();
if(ch == 27)
break;
}
printf("\n");
}
void Initialize() //Initializing datas
{
int i=0;
FILE *fp = NULL;
for(i=0;i<TOURSITE_NUMBER;i++)
{
memset(&SortItem[i],0,sizeof(SORTITEM));
memset(&TourSiteInfo[i],0,sizeof(TOURSITEINFOMATION));
}
TourSiteInfo[0].ChildDiscount = 0; //Forbidden City
TourSiteInfo[0].StudentDiscount = 0.4;
TourSiteInfo[0].SoldierDiscount = 0.95;
TourSiteInfo[0].ElderDiscount = 0.5;
TourSiteInfo[0].GroupDiscount = 0.75;
TourSiteInfo[0].MidseasonTicket = 60;
TourSiteInfo[0].LowseasonTicket = 40;
TourSiteInfo[0].M_MaintenanceCost = 10000;
TourSiteInfo[0].L_MaintenanceCost = 4000;
TourSiteInfo[0].Peoplelimit = 30000;
TourSiteInfo[0].VisitTime = 1;
TourSiteInfo[0].CostOfLiving = 400;
TourSiteInfo[1].ChildDiscount = 0; //Summer Palace
TourSiteInfo[1].StudentDiscount = 0.5;
TourSiteInfo[1].SoldierDiscount = 0;
TourSiteInfo[1].ElderDiscount = 0.5;
TourSiteInfo[1].GroupDiscount = 0.6;
TourSiteInfo[1].MidseasonTicket = 30;
TourSiteInfo[1].LowseasonTicket = 20;
TourSiteInfo[1].M_MaintenanceCost = 10000;
TourSiteInfo[1].L_MaintenanceCost = 3000;
TourSiteInfo[1].Peoplelimit = 20000;
TourSiteInfo[1].VisitTime = 0.5;
TourSiteInfo[1].CostOfLiving = 280;
TourSiteInfo[2].ChildDiscount = 0; //Great Wall
TourSiteInfo[2].StudentDiscount = 0.55;
TourSiteInfo[2].SoldierDiscount = 0;
TourSiteInfo[2].ElderDiscount = 0.55;
TourSiteInfo[2].GroupDiscount = 0.65;
TourSiteInfo[2].MidseasonTicket = 45;
TourSiteInfo[2].LowseasonTicket = 40;
TourSiteInfo[2].M_MaintenanceCost = 10000;
TourSiteInfo[2].L_MaintenanceCost = 2500;
TourSiteInfo[2].Peoplelimit = 30000;
TourSiteInfo[2].VisitTime = 1;
TourSiteInfo[2].CostOfLiving = 380;
TourSiteInfo[3].ChildDiscount = 0; //BeiHai Park
TourSiteInfo[3].StudentDiscount = 0.5;
TourSiteInfo[3].SoldierDiscount = 0;
TourSiteInfo[3].ElderDiscount = 0.5;
TourSiteInfo[3].GroupDiscount = 0.55;
TourSiteInfo[3].MidseasonTicket = 10;
TourSiteInfo[3].LowseasonTicket = 5;
TourSiteInfo[3].M_MaintenanceCost = 3000;
TourSiteInfo[3].L_MaintenanceCost = 1500;
TourSiteInfo[3].Peoplelimit = 20000;
TourSiteInfo[3].VisitTime = 0.5;
TourSiteInfo[3].CostOfLiving = 280;
TourSiteInfo[4].ChildDiscount = 0; //Yuanmingyuan
TourSiteInfo[4].StudentDiscount = 0.5;
TourSiteInfo[4].SoldierDiscount = 0;
TourSiteInfo[4].ElderDiscount = 0.5;
TourSiteInfo[4].GroupDiscount = 0.6;
TourSiteInfo[4].MidseasonTicket = 10;
TourSiteInfo[4].LowseasonTicket = 10;
TourSiteInfo[4].M_MaintenanceCost = 4000;
TourSiteInfo[4].L_MaintenanceCost = 2500;
TourSiteInfo[4].Peoplelimit = 25000;
TourSiteInfo[4].VisitTime = 0.5;
TourSiteInfo[4].CostOfLiving = 240;
TourSiteInfo[5].ChildDiscount = 0; //Temple of Heaven
TourSiteInfo[5].StudentDiscount = 0.65;
TourSiteInfo[5].SoldierDiscount = 0;
TourSiteInfo[5].ElderDiscount = 0.65;
TourSiteInfo[5].GroupDiscount = 0.7;
TourSiteInfo[5].MidseasonTicket = 15;
TourSiteInfo[5].LowseasonTicket = 10;
TourSiteInfo[5].M_MaintenanceCost = 8000;
TourSiteInfo[5].L_MaintenanceCost = 5500;
TourSiteInfo[5].Peoplelimit = 15000;
TourSiteInfo[5].VisitTime = 0.5;
TourSiteInfo[5].CostOfLiving = 250;
TourSiteInfo[6].ChildDiscount = 0; //Xiangshan
TourSiteInfo[6].StudentDiscount = 0.5;
TourSiteInfo[6].SoldierDiscount = 0;
TourSiteInfo[6].ElderDiscount = 0.5;
TourSiteInfo[6].GroupDiscount = 0.55;
TourSiteInfo[6].MidseasonTicket = 10;
TourSiteInfo[6].LowseasonTicket = 5;
TourSiteInfo[6].M_MaintenanceCost = 3000;
TourSiteInfo[6].L_MaintenanceCost = 1000;
TourSiteInfo[6].Peoplelimit = 25000;
TourSiteInfo[6].VisitTime = 0.5;
TourSiteInfo[6].CostOfLiving = 200;
TourSiteInfo[7].ChildDiscount = 0; //Lama Temple
TourSiteInfo[7].StudentDiscount = 0.45;
TourSiteInfo[7].SoldierDiscount = 0;
TourSiteInfo[7].ElderDiscount = 0.45;
TourSiteInfo[7].GroupDiscount = 0.5;
TourSiteInfo[7].MidseasonTicket = 25;
TourSiteInfo[7].LowseasonTicket = 25;
TourSiteInfo[7].M_MaintenanceCost = 4500;
TourSiteInfo[7].L_MaintenanceCost = 2000;
TourSiteInfo[7].Peoplelimit = 15000;
TourSiteInfo[7].VisitTime = 0.5;
TourSiteInfo[7].CostOfLiving = 220;
fp=fopen("sitedata.dat","r+b"); //The file storing datas of toursites
if (fp==NULL){
fp=fopen("sitedata.dat","wb");
for(i=0;i<TOURSITE_NUMBER;i++)
{
memset(&TourSiteData[i],0,sizeof(TOURSITEDATA));
fwrite(&TourSiteData[i],1,sizeof(TOURSITEDATA),fp);
}
}
else
{
for(i=0;i<TOURSITE_NUMBER;i++)
{
fread(&TourSiteData[i],1,sizeof(TOURSITEDATA),fp);
}
}
fclose(fp);
for(i=0;i<CURRENTSELECT_NUMBER;i++)
{
memset(&CurrentSelect[i],0,sizeof(CURRENTSELECT));
}
SelectToDataFlag = FALSE;
}
void WriteData() //Write data into the file
{
FILE *fp = NULL;
int i=0;
fp=fopen("sitedata.dat","wb");
for(i=0;i<TOURSITE_NUMBER;i++)
{
fwrite(&TourSiteData[i],1,sizeof(TOURSITEDATA),fp);
}
fclose(fp);
}
void ViewSelect() //Chect the selecting datas
{
int i=0;
int TotalPrice=0;
printf(" TourSite\t\tMonth\tDay\tTour-ID\tPeople\tPrice\tDisct.\tTotal\n");
for(i=0; i < CurrentSelectCount; i++)
{
printf("%d. %s\t%d\t%d\t%s\t%d\t%d\t%.1f\t%d\n",i+1,
CurrentSelect[i].TourSite,CurrentSelect[i].Month,CurrentSelect[i].Day,
CurrentSelect[i].TouristIdentity,CurrentSelect[i].PeopleNumber,
CurrentSelect[i].Price,CurrentSelect[i].Discount,CurrentSelect[i].TotalPrice);
TotalPrice += CurrentSelect[i].TotalPrice;
}
printf("\t\t\t\t\t\t\t\t\t%d\n\n",TotalPrice);
}
void SelectToData() //Write the selecting datas into the datas of toursites
{
int i,j;
for(i=0;i<CurrentSelectCount;i++)
{
for(j=0;j<TOURSITE_NUMBER;j++)
{
if(strcmp(CurrentSelect[i].TourSite,TourSiteStr[j])==0)
{
TourSiteData[j].Date[CurrentSelect[i].Month-1][CurrentSelect[i].Day-1]+=CurrentSelect[i].PeopleNumber;
if(CurrentSelect[i].Month>=MIDSEASON_START && CurrentSelect[i].Month<=MIDSEASON_END)
{
TourSiteData[j].MidseasonPeople += CurrentSelect[i].PeopleNumber;
TourSiteData[j].MidseasonIncome += CurrentSelect[i].TotalPrice;
}
else
{
TourSiteData[j].LowseasonPeople += CurrentSelect[i].PeopleNumber;
TourSiteData[j].LowseasonIncome += CurrentSelect[i].TotalPrice;
}
}
}
memset(&CurrentSelect[i],0,sizeof(CURRENTSELECT)); //Memorize datas and reset to zero
}
CurrentSelectCount = 0; //Reset the counter to zero
}
void Introduction() //Introduction to every toursite
{
int ch;
while(1)
{
printf("Brief Introduce For Each Place Of Interest.\n\n");
printf("1.Forbidden City\n");
printf("2.Summer Palace\n");
printf("3.Great Wall\n");
printf("4.BeiHai Park\n");
printf("5.YuanMingYuan Park\n");
printf("6.Temple Of Heaven\n");
printf("7.XiangShan Park\n");
printf("8.Lama Temple\n");
printf("9.Return\n\n");
printf("Select:");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -