C语言作业旅游线路管理.docx
《C语言作业旅游线路管理.docx》由会员分享,可在线阅读,更多相关《C语言作业旅游线路管理.docx(53页珍藏版)》请在冰豆网上搜索。
C语言作业旅游线路管理
C语言程序设计-旅游线路管理系统
一、课题内容和要求
旅游线路管理系统
问题描述:
旅游越来越成为人们生活的重要组成部分,请你为某旅行社设计一款实用旅游线路管理软件,方便旅行社的业务管理和推广。
该软件应具有客户登记、线路匹配、盈利统计等功能。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及些算法思想的应用。
功能要求:
(1)旅游管理系统信息应包括基本信息(根据实际情况):
旅行社信息,线路信息,员工信息等;
(2)需要输入口令进入旅游管理系统;
(3)实现所有相关信息的录入和浏览;
(4)业务管理功能:
业务登记,线路匹配,业务结算等;
(5)信息查询功能:
线路信息查询、人员信息查询、业务登记查询、确认出游查询、业务结算查询、各类线路的需求状况等;
(6)统计分析功能:
登记业务汇总表、确认出游汇总表、业务结算汇总表、阶段结算统计等;
(7)用不同的排序算法,根据不同条件(线路、目的地、出行人数等)进行排序,显示相关信息:
(8)统计某时间段内的销售业绩,统计收入。
(9)将本系统的所有相关信息内容存为文件。
选做要求:
(1)销售情况统计与分析,产生报表并打印;
(2)客户满意度调查,并将调查结果进行反馈;
(3)如果有更好的、更合理功能,可自加。
其他要求:
(1)界面美观,交互方便,实用性强。
(2)注释详细:
每个变量都要求有注释说明用途;函数有注释说明功能,对参数、返回值也要以注释的形式说明用途:
关键的语句段要求有注释解释。
(3)程序的层次清晰,可读性强。
(4)变量、函数命名符合规范。
(5)如有可能,可使用MFC 等开发工具,实现彩色或图形操作界面。
二、需求分析
旅游线路管理系统的功能框架图如图1所示。
图1功能框架图
(1)提供可操作的主菜单:
输出各菜单,用于显示以从文件中加载的总客户信息和若干个可选的功能选项。
根据客户输入的选项来运行不同的功能,运行不同的函数。
(2)基础信息查询:
通过调用文件,查询旅行社的基本信息。
(3)业务管理:
调用结构体,有三个功能,业务登记是将需要输入的信息写入结构体并写入文件,线路匹配是根据选择每条线路的用户的人数乘该线路的价格在进行选择,选择出一个收入最高的方案输出,业务结算时将输入的信息进行初步处理。
(4)信息查询:
通过调用函数对结构体信息进行处理,输出相应数据。
(5)统计分析:
输出相应的表格。
(6)密码函数:
将输入的字符转化为“*”。
(7)输入函数:
将数据输入结构体。
(8)分析函数:
分析那些游客选择了什么服务。
(9)输出函数:
将处理好的数据以表格形式输出。
(10)保存函数,将数据保存为文件。
(11)满意度函数:
调查用户满意度,并将调查结果进行反馈。
三、概要设计
1主要存储结构
typedefstructXL//线路结构体
{
intnum;//线路号
charmdd[LEN1];//目的地
intpay;//费用
charms[LEN2];//描述
floatmyd;//满意度
}XL;
typedefstructDate//时间结构体
{
intyear;//年
intmonth;//月
intday;//日
}Date;
typedefstructRY//人员结构体
{
charname[LEN1];//姓名
intnum;//人数
intxl;//出行线路
chartel[11];//联系方式
intack;//确认出游
Datetime;//结算时间
intmy;//满意度
}RY;
typedefstructJS
{
intnum;//线路号
intpay;//收入
intrenshu;//人数
charmdd[LEN1];//目的地
Datetime;//结算时间
chartel[LEN1];//联系方式
charname[LEN1];//姓名
}JS;
2主要函数流程
(1)写入函数:
j为用户组数,通过for循环控制输入游客组数,并将用户数据录入人员结构体数组同时将数据写入文件,如图2所示。
图2写入函数
(2)线路查询函数:
i为输入的查询线路号,要求1<=i<=线路总数,遍历所有线路,如果线路k的线路号为i,输出线路k的信息,如图3所示。
图3线路查询函数
(3)确认出游函数:
i为用户,遍历所有用户,如果用户i的确认出游(ack)值为1,则确认出游人数num加一,同时输出用户i的信息,最后再输出共有多少人(num)确认出游,如图4所示。
图4确认出游函数
N
N
Y
(4)线路需求状况函数:
i为线路号,j为用户,遍历所有线路,再遍历所有用户,如果用户j选择i号线路,选择该线路的人数(num)加一,最后输出每条线路有多少人选,如图5所示。
图5线路需求状况
四、源程序代码
#include
#include
#include
#include
#include
#include
#defineLEN120//姓名、性别、ID、电话号码和密码最大字符数
#defineLEN22000//路线描述最大字符数
#defineN150//路线种数最大值
#defineN21000//业务总数最大值
#defineSsystem("pause")
#defineQsystem("cls")
voidwelcome();//欢迎界面
voidDL();//登录函数
voidmenu();//主菜单
voidBase_inf();//基本信息菜单
voidManage();//业务管理菜单
voidSearch();//信息查询菜单
voidStatis();//统计分析菜单
voidMyd();//满意度菜单
voidover();//退出界面
voidfind_LXS();//旅行社信息
voidfind_XL();//线路信息
voidfind_YG();//员工信息
voidmanage_deng();//业务登记
voidmanage_pi();//线路匹配
voidmanage_jie();//业务结算
voidline_in();//线路信息录入
voidsearch_xl();//线路信息查询
voidsearch_ry();//人员信息查询
voidsearch_ack();//确认出游查询
voidsearch_xq();//各类线路需求状况
voidsearch_yw();//业务结算
voidstatis_den();//业务登记汇总表
voidstatis_chu();//确认出游汇总表
voidstatis_jie();//业务结算汇总表
voidstatis_qi();//阶段结算统计
voidfankui();//满意度调查
voidfkjg();//满意度反馈
voidscanf_ry();//人员信息录入
voidback();//返回
//voidIn();
typedefstructXL//线路结构体
{
intnum;//线路号
charmdd[LEN1];//目的地
intpay;//费用
charms[LEN2];//描述
floatmyd;//满意度
}XL;
typedefstructDate//时间结构体
{
intyear;//年
intmonth;//月
intday;//日
}Date;
typedefstructRY//人员结构体
{
charname[LEN1];//姓名
intnum;//人数
intxl;//出行线路
chartel[11];//联系方式
intack;//确认出游
Datetime;//结算时间
intmy;//满意度
}RY;
typedefstructJS
{
intnum;//线路号
intpay;//收入
intrenshu;//人数
charmdd[LEN1];//目的地
Datetime;//结算时间
chartel[LEN1];//联系方式
charname[LEN1];//姓名
}JS;
intk=1,m=1,b=1,luxianshu,yewushu,rynum;//定义全局变量
intp=0,q=0;
intrynum;//用户组数
rynum=10;//用户组数文件中的信息
XLline[LEN1];//线路结构体数组
RYry[LEN1];//人员结构体数组
Datesj[LEN1];//时间结构体数组
JSjies[LEN1];//结算信息结构体数组
intmain()//主函数
{
welcome();
system("color07");//设置颜色
line_in();
DL();
menu();
return0;
}
voidwelcome()//欢迎界面
{
printf("\n\n\n\n\n\n");
printf("【】**************************************【】\n");
printf("******************************************\n");
printf("****\n");
printf("**欢迎进入**\n");
printf("****\n");
printf("**旅行管理系统**\n");
printf("****\n");
printf("****\n",N2);
printf("****\n");
printf("******************************************\n");
printf("【】**************************************【】\n");
system("pause");
}
voidback()//返回函数
{
printf("\n\n按任意键返回!
");
getch();
}
voidline_in()//线路信息录入函数
{
FILE*fp;
inti;
Q;
fp=fopen("线路信息查询.txt","r");
if(!
fp)
{
printf("线路信息打开失败");
S;
exit
(1);
}
for(i=0;i<3;i++)//从事先写好的文件读入线路信息
fscanf(fp,"%d%s%d%s",&line[i].num,&line[i].mdd,&line[i].pay,&line[i].ms);
fclose(fp);
printf("线路信息录入完毕\n");
}
voidDL()//登录函数
{
while(m)
{
charpassword[LEN1];
unsignedcharc;
intz=0;
printf("请输入6位密码:
");
while((c=getch())!
='\r')//getch:
从键盘读入一个字符,不回显在显示器上#include
{
if(z
{
password[z++]=c;
putchar('*');//显示*号
}
}
putchar('\n');
password[z]='\0';
m=strcmp(password,"123456");//密码
if(m==0)
printf("登录成功!
\n");
else//密码错误
{
printf("密码错误!
\n");
putchar('\n');
printf("1--------重新输入\n");
printf("2--------退出系统\n");
flushall();//清空缓存
scanf("%d",&b);
}
if(m==0||b==2)
break;
}
if(b==2)
k=0;//k=0不执行menu函数,不显示主菜单
}
voidmenu()//主菜单函数
{
system("color07");//设置颜色
while(k)
{
intnum;
system("cls");
printf("\n\n\n\n\n\n");
printf("旅游管理系统\n\n");
printf("**************系统主菜单**************\n");
printf("***********----1-基础信息----***********\n");
printf("************----2-业务管理----************\n");
printf("*************----3-信息查询----*************\n");
printf("************----4-统计分析----************\n");
printf("***********---5-客户满意度---***********\n");
printf("**********----6-退出程序----**********\n");
printf("************************************\n");
printf("请输入选项编号(1-6):
");
scanf("%d",&num);
switch(num)
{
case1:
Base_inf();break;
case2:
Manage();break;
case3:
Search();break;
case4:
Statis();break;
case5:
Myd();break;
case6:
k=0;over();break;
case7:
default:
{
printf("请在1-6之间选择!
\n");
system("pause");
}break;
}
}
}
voidBase_inf()//基础信息菜单函数
{
intx=0,y=1;
while(y)
{
system("cls");
printf("\n\n\n\n\n\n");
printf("基础信息\n");
printf("---------------------------------------------\n");
printf("1-----旅行社信息\n");
printf("2-----线路信息\n");
printf("3-----员工信息\n");
printf("4-----返回上一层\n");
printf("请输入选项编号(1~4):
");
scanf("%d",&x);
switch(x)
{
case1:
find_LXS();break;
case2:
find_XL();break;
case3:
find_YG();break;
case4:
y=0;break;
default:
{
printf("请在1-4之间选择!
\n");
system("pause");
}break;
}
}
}
voidfind_LXS()//基本信息旅行社信息
{
char*p="旅行社信息.txt";
charch;
FILE*fp;
system("cls");
fp=fopen(p,"r");
if(!
fp)
{
printf("旅行社信息打开失败");
system("pause");
exit
(1);
}
while((ch=fgetc(fp))!
=EOF)//打开文件输出旅行社信息
{
putchar(ch);
}
putchar('\n');
fclose(fp);
back();
}
voidfind_XL()//基本线路信息
{
char*p="线路信息.txt";
charch;
FILE*fp;
system("cls");
fp=fopen(p,"r");
if(!
fp)
{
printf("线路信息打开失败");
system("pause");
exit
(1);
}
while((ch=fgetc(fp))!
=EOF)//打开文件输出线路信息
{
putchar(ch);
}
putchar('\n');
fclose(fp);
back();
}
voidfind_YG()//基本员工信息
{
char*p="员工信息.txt";
charch;
FILE*fp;
system("cls");
fp=fopen(p,"r");
if(!
fp)
{
printf("员工信息打开失败");
system("pause");
exit
(1);
}
while((ch=fgetc(fp))!
=EOF)//打开文件输出员工信息
{
putchar(ch);
}
putchar('\n');
fclose(fp);
back();
}
voidManage()//业务管理菜单函数
{
intx=0,y=1;
while(y)
{
system("cls");
printf("\n\n\n\n\n\n");
printf("业务管理\n");
printf("---------------------------------------------\n");
printf("1-----业务登记\n");
printf("2-----线路匹配\n");
printf("3-----业务结算\n");
printf("4-----返回上一层\n");
printf("请输入选项编号(1-4):
");
scanf("%d",&x);
switch(x)
{
case1:
manage_deng();break;
case2:
manage_pi();break;
case3:
manage_jie();break;
case4:
y=0;break;
default:
{
printf("请在1-4之间选择!
\n");
system("pause");
}break;
}
}
}
voidscanf_ry()//从文件读出登记人员信息(省的一个个输入,麻烦)
{
intt;
FILE*fp;
Q;
fp=fopen("登记业务.txt","r");
if(!
fp)
{
printf("fileeror\n");
exit
(1);
}
for(t=0;t<10;t++)//打开文件录入人员信息
{
fscanf(fp,"%s%d%d%s%d%d-%d-%d\n",&ry[t].name,&ry[t].num,&ry[t].xl,&ry[t].tel,&ry[t].ack,&ry[t].time.year,&ry[t].time.month,&ry[t].time.day);
}
printf("OK");
fclose(fp);
}
voidmanage_deng()//业务登记函数
{
inti;
intt;
//inta,r;
FILE*fp;
scanf_ry();
//system("cls");
fp=fopen("业务登记.txt","w");
if(!
fp)
{
printf("fileerror\n");
exit
(1);
}
/*printf("请输入登记组数:
");
scanf("%d",&r);
rynum=r;//全局变量登记组数赋值
printf("\n请输入客户的各项信息:
\n");
printf("姓名出行人数线路号电话是否确认出游结算时间\n");
printf("(是填1,否填0;结算时间格式:
2018-6-5(各部分以空格相连)\n");
for(i=0;i{
a=1;
while(a)
{
scanf("%s%d%d%s%d%d-%d-%d",&ry[i].name,&ry[i].num,&ry[i].xl,&ry[i].tel,&ry[i].ack,&ry[i].time.year,&ry[i].time.month,&ry[i].time.day);
if(strlen(ry[i].tel)==11&&ry[i].tel[0]=='1'&&ry[i].xl>=1&&ry[i].xl<=3)//判断用户输入信息正误(电话、线路号)
a=0;
else
printf("请检查并输入正确的登录信息\n");
}
}*/
for(t=0;t{
fprintf(fp,"%s%d%d%s%d%d-%d-%d\n",ry[t].name,ry[t].num,ry[t].xl,ry[t].tel,ry[t].ack,ry[t].time.year,ry[t].time.month,ry[t].time.day);
}
fclose(fp);
printf("录入成功\n")