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 主要存储结构 typedef struct XL
//线路结构体 {
号路线//
;mun tniﻩ 地得目//
;]1NEL[ddm rahcﻩ 用费//
;yap tniﻩ 述描//
;]2NEL[sm rahcﻩ 度意满//
;dym taolfﻩ}XL; typedef struct Date
//时间结构体 {
年//
;raey tniﻩ int month;
//月
int day;
//日 }Date; typedef struct RY
//人员结构体 {
char name[LEN1];//姓名
int num;
//人数
路线行出//
;lx tniﻩ 式方系联//
;]11[let rahcﻩ int ack;
//确认出游
间时算结//
;emit etaDﻩ int my;
//满意度 }RY; typedef struct JS {
int num;
//线路号
入收//
;yap tniﻩ int renshu;
//人数
char mdd[LEN1]; //目得地
间时算结//
;emit etaDﻩ 式方系联// ;]1NEL[let rahcﻩ char name[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 确认出游函数 (4)线路需求状况函数:i 为线路号,j 为用户,遍历所有线路,再遍历所有用户,如果用户 j 选择 i 号线路,选择该线路得人数(num)加一,最后输出每条线路有多少人选,如图 5 所示。
N
图 5 线路需求状况 四、源程序代码
#include <stdio、h> #include <stdlib、h> #include 〈conio、h〉 #include <ctype、h> #include <string、h>
#include 〈windows、h> #define LEN1 20
//姓名、性别、ID、电话号码与密码最大字符数 #define LEN2 2000
//路线描述最大字符数 #define N1 50
//路线种数最大值 #define N2 1000
//业务总数最大值 #define S system(”pause”)
#define Q system(”cls")
void wele();
//欢迎界面 void DL();
//登录函数 void menu();
//主菜单 void Base_inf();
//基本信息菜单 void Manage();
//业务管理菜单 void Search();
//信息查询菜单 void Statis();
//统计分析菜单 void Myd();
//满意度菜单 void over();
//退出界面 void find_LXS();
//旅行社信息 void find_XL();
//线路信息 void find_YG();
//员工信息 void manage_deng();//业务登记 void manage_pi();
//线路匹配 void manage_jie(); //业务结算 void line_in();
//线路信息录入 void search_xl();
//线路信息查询 void search_ry();
//人员信息查询 void search_ack(); //确认出游查询 void search_xq();
//各类线路需求状况 void search_yw();
//业务结算 void statis_den(); //业务登记汇总表 void statis_chu(); //确认出游汇总表 void statis_jie(); //业务结算汇总表 void statis_qi();
//阶段结算统计 void fankui();
//满意度调查 void fkjg();
//满意度反馈 void scanf_ry();
//人员信息录入 void back();
//返回 //void In(); typedef struct XL
//线路结构体 {
int num;
//线路号
char mdd[LEN1];
//目得地
int pay;
//费用
char ms[LEN2];
//描述
float myd;
//满意度 }XL;
typedef struct Date
//时间结构体 {
年//
;raey tniﻩ 月//
;htnom tniﻩ 日//
;yad tniﻩ}Date; typedef struct RY
//人员结构体 {
char name[LEN1];//姓名
数人//
;mun tniﻩ 路线行出//
;lx tniﻩ 式方系联//
;]11[let rahcﻩ 游出认确//
;kca tniﻩ Date time;
//结算时间
度意满//
;ym tniﻩ}RY; typedef struct JS {
int num;
//线路号
入收//
;yap tniﻩ int renshu;
//人数
地得目// ;]1NEL[ddm rahcﻩ 间时算结//
;emit etaDﻩ 式方系联// ;]1NEL[let rahcﻩ 名姓//;]1NEL[eman rahcﻩ}JS; int k=1,m=1,b=1,luxianshu,yewushu,rynum;
//定义全局变量 int p=0,q=0; int rynum;
//用户组数 rynum=10;
//用户组数文件中得信息 XL line[LEN1];
//线路结构体数组 RY ry[LEN1];
//人员结构体数组 Date sj[LEN1];
//时间结构体数组 JS jies[LEN1];
//结算信息结构体数组 int main()
//主函数 {
;)(elewﻩ system(”color 07");
//设置颜色
;)(ni_enilﻩ DL();
;)(unemﻩ return 0; } void wele()
//欢迎界面 {
printf("\n\n\n\n\n\n”); **********************】【
”(ftnirpﻩ****************【】\n"); ************************
"(ftnirpﻩ******************\n”);
pr i ntf ( "
**
**\n”);
入
进
迎
欢
**
"(ftnirpﻩ**\n");
" ( f tn i r pﻩ
**
**\n");
printf(”
**
旅
行
管
理
系
统
**\n”); rpﻩ i ntf("
**
**\n”);
prin t f ( ”
* *
**\n",N2);
" (ftni r pﻩ
* *
**\n");
printf(”
******************************************\n");
printf(”
【】**************************************【】\n”);
system("pause"); } void back()
//返回函数 {
printf("\n\n 按任意键返回!");
;)(hctegﻩ} void line_in()
//线路信息录入函数 {
FILE *fp;
int i;
Q;
;)"r”,”txt、询查息信路线”(nepof=pfﻩ )pf!(fiﻩ {ﻩ
printf(”线路信息打开失败");
S;
;)1(tixeﻩ }
息信路线入读件文得好写先事从//
)++i;3<i;0=i(rofﻩ ,ddm、]i[enil&,mun、]i[enil&,”s% d% s% d%”,pf(fnacsfﻩ&line[i]、pay,&line[i]、ms);
fclose(fp);
printf("线路信息录入完毕\n”); } void DL()
//登录函数 {
while(m)
{
;]1NEL[drowssap rahcﻩ
unsigned char c;
;0=z tniﻩ
printf(”请输入 6 位密码:”);
while((c=getch())!='\r’)//getch:从键盘读入一个字符,不回显在显示器上#include<conio、h>
{ ﻩ ,符字印打可为 c 果如 tnirpsi//
))c(tnirpsi && 1NEL〈z(fiﻩﻩ将返回非 0 值,否则返回 0,头文件#include 〈ctype、h〉
ﻩ {
ﻩ ﻩ password[z++]=c;
ﻩﻩ putchar('*");
//显示*号
}ﻩ
}
;)"n\’(rahctupﻩ
;’0\’=]z[drowssapﻩ
码密//;)"654321”,drowssap(pmcrts=mﻩ
)0==m(fiﻩﻩ
ﻩ printf(”登录成功!\n");
误错码密//
esleﻩﻩ
{
;)”n\!误错码密”(ftnirpﻩ
;)’n\'(rahctupﻩﻩ
printf(”1-—-——-——重新输入\n”);
printf("2————---—退出系统\n”);
flushall();
//清空缓存 ﻩ;)b&,"d%"(fnacsﻩ }ﻩﻩ
if(m==0||b==2)
break;
}ﻩ )2==b(fiﻩ 单菜主示显不,数函unem 行执不 0=k//
;0=kﻩﻩ} void menu()
//主菜单函数 {
system("color 07”);
//设置颜色
while(k)
{ﻩ
int num;
system("cls”);
;)"n\n\n\n\n\n\”(ftnirpﻩ
printf(”
旅游管理系统\n\n”); 单菜主统系**************
"(ftnirpﻩﻩ**************\n”);
息信础基—1—---***********
"(ftnirpﻩ———-***********\n");
务业—2—-—-************
”(ftnirpﻩ管理—-—-************\n");
printf("
*************—---3-信息查询---—*************\n");
分计统-4——--************
"(ftnirpﻩ析-———************\n");
printf("
***********—--5-客户满意度—--***********\n");
printf(”
**********--—-6-退出程序—-—-**********\n");
************************
”(ftnirpﻩ************\n”);
ﻩ ;)”:)6-1(号编项选入输请"(ftnirpﻩﻩ
;)mun&,"d%"(fnacsﻩ )mun(hctiwsﻩﻩ
{ﻩﻩ;kaerb;)(fni_esaB:1 esacﻩﻩ
;kaerb;)(eganaM:2 esacﻩ
ﻩ case 3:Search();break;
;kaerb;)(sitatS:4 esacﻩﻩ
ﻩ case 5:Myd();break; ﻩ;kaerb;)(revo;0=k:6 esacﻩ
ﻩ case 7:
ﻩ default:
{ ﻩﻩ ﻩ;)"n\!择选间之 6—1 在请"(ftnirpﻩ;)"esuap"(metsysﻩﻩ
}break;
ﻩ
}ﻩ } } void Base_inf()
//基础信息菜单函数 {
int x=0,y=1;
)y(elihwﻩ
{ﻩ
system("cls");
;)"n\n\n\n\n\n\"(ftnirpﻩﻩ
;)”n\息信础基
”(ftnirpﻩ -—----——----—----—---
"(ftnirpﻩ--—--—--———--—----—----—\n");
信 社 行 旅—-—-—1
"(ftnirpﻩ息\n");
息
信
路
线—----2
"(ftnirpﻩ\n");
printf("
3—-—--员
工
信
息\n");
回 返—----4
”(ftnirpﻩ上 一 层\n”);
;)”:)4~1(号编项选入输请”(ftnirpﻩﻩ
;)x&,"d%"(fnacsﻩ
)x(hctiwsﻩ {ﻩﻩﻩ
;kaerb;)(SXL_dnif:1 esacﻩ
;kaerb;)(LX_dnif:2 esacﻩﻩ
;kaerb;)(GY_dnif:3 esacﻩﻩ
;kaerb;0=y:4 esacﻩﻩ
ﻩ default:
ﻩ { ﻩ
ﻩ
;)”n\!择选间之 4-1 在请"(ftnirpﻩ
ﻩ
system("pause"); }ﻩ
;kaerbﻩ } ﻩ }ﻩ} void find_LXS()
//基本信息旅行社信息 {
;"txt、息信社行旅"=p* rahcﻩ char ch;
;pf* ELIFﻩ ;)”slc"(metsysﻩ fp=fopen(p,"r");
if(!fp)
{ﻩ
printf(”旅行社信息打开失败");
;)”esuap”(metsysﻩﻩ
exit(1);
}
息信社行旅出输件文开打//
)FOE=!))pf(ctegf=hc((elihwﻩ {ﻩ
;)hc(rahctupﻩ }ﻩ putchar('\n’);
fclose(fp);
;)(kcabﻩ} void find_XL()
//基本线路信息 {
char *p="线路信息、txt";
;hc rahcﻩ FILE *fp;
;)”slc"(metsysﻩ ;)"r",p(nepof=pfﻩ if(!fp)
{
;)”败失开打息信路线”(ftnirpﻩ
system("pause");
;)1(tixeﻩ }ﻩ while((ch=fgetc(fp))!=EOF)
//打开文件输出线路信息
{
;)hc(rahctupﻩﻩ }ﻩ ;)"n\"(rahctupﻩ fclose(fp);
back(); } void find_YG()
//基本员工信息 {
char *p=”员工信息、txt”;
;hc rahcﻩ FILE *fp;
system("cls");
;)”r”,p(nepof=pfﻩ )pf!(fiﻩ {ﻩ
;)"败失开打息信工员"(ftnirpﻩ
;)”esuap"(metsysﻩ
exit(1);
}
息信工员出输件文开打//
)FOE=!))pf(ctegf=hc((elihwﻩ {
;)hc(rahctupﻩ }
;)’n\'(rahctupﻩ
;)pf(esolcfﻩ ;)(kcabﻩ} void Manage()
//业务管理菜单函数 {
;1=y,0=x tniﻩ )y(elihwﻩ {ﻩ
;)"slc"(metsysﻩ
;)”n\n\n\n\n\n\”(ftnirpﻩ
printf(”
业务管理\n");
---—--—----—-----——-----—----
"(ftnirpﻩ—---—-----—-——-—\n");
登
务
业-—---1
”(ftnirpﻩ记\n");
printf("
2——---线
路
匹
配\n");
结
务
业--——-3
”(ftnirpﻩ算\n”);
回 返—----4
"(ftnirpﻩ上 一 层\n");
;)”:)4-1(号编项选入输请"(ftnirpﻩ
;)x&,”d%”(fnacsﻩ
)x(hctiwsﻩ { ﻩ
ﻩ case 1:manage_deng();break;
ﻩ case 2:manage_pi();break;
ﻩ case 3:manage_jie();break; ﻩ
;kaerb;0=y:4 esacﻩ
:tluafedﻩ ﻩ{ﻩﻩﻩ ﻩ;)”n\!择选间之 4—1在请"(ftnirpﻩ;)”esuap”(metsysﻩﻩ }
;kaerbﻩﻩ
}ﻩ }ﻩ} void scanf_ry()
//从文件读出登记人员信息(省得一个个输入,麻烦)
{
;t tniﻩ FILE *fp;
Q;
fp=fopen("登记业务、txt”,"r");
)pf!(fiﻩ
{
;)"n\"(ftnirpﻩ
;)1(tixeﻩ }ﻩ for(t=0;t<10;t++)
//打开文件录入人员信息
{
&,eman、]t[yr&,”n\d%-d%-d% d% s% d% d% s%”,pf(fnacsfﻩry[t]、num,&ry[t]、xl,&ry[t]、tel,&ry[t]、ack,&ry[t]、time、year,&ry[t]、time、month,&ry[t]、time、day);
}
;)"KO”(ftnirpﻩ fclose(fp); } void manage_deng()
//业务登记函数 {
int i;
;t tniﻩ// ;r,a tniﻩ FILE *fp;
;)(yr_fnacsﻩ//
system(”cls");
fp=fopen("业务登记、txt",”w");
)pf!(fiﻩ {
;)”n\"(ftnirpﻩ ;)1(tixeﻩﻩ } /* printf("请输入登记组数:");
;)r&,"d%"(fnacsﻩ rynum=r;
//全局变量登记组数赋值
;)"n\:息信项各得户客入输请n\"(ftnirpﻩ printf(”姓名 出行人数 线路号 电话 就是否确认出游
结算时间 \n"); )连相格空以分部各( 5-6—8102:式格间时算结;0 填否,1填是就("(ftnirpﻩ\n");
息信记登户用入录//
)++i;r<i;0=i(rofﻩ {
;1=aﻩ
while(a)
{ﻩﻩ ,eman、]i[yr&,”d%—d%-d% d% s% d% d% s%"(fnacsﻩﻩ&ry[i]、num,&ry[i]、xl,&ry[i]、tel,&ry[i]、ack,&ry[i]、time、year,&ry[i]、time、month,&ry[i]、time、day); ﻩ 、]i[yr&&"1"==]0[let、]i[yr&&11==)let、]i[yr(nelrts(fiﻩxl〉=1&&ry[i]、xl〈=3)
//判断用户输入信息正误(电话、线路号)
ﻩ ﻩ a=0;
esleﻩﻩ ﻩ;)"n\息信录登得确正入输并查检请”(ftnirpﻩ
}ﻩ /*}ﻩ 件文入写息信得记登户用将//
)++t;munyr<t;0=t(rofﻩ {ﻩ
ﻩ 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");
;)"n\:息信认确 n\n\"(ftnirpﻩ for(i=0;i<rynum;i++)
//确认信息
{ﻩ
printf("%s %d %d %s %d
%2d-%2d—%2d\n",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);
}
back(); } void manage_pi()
//线路匹配函数 {
;m,a,j,t,r,i tniﻩ int c=0;
;}0{=]1NEL[xedni tniﻩ ;)"w","txt、配匹路线"(nepof=pf* ELIFﻩ ;)"n\式方系联
用费 数人
名姓 号路线”,pf(ftnirpfﻩ Q;
路线有所历遍//
)++i;3<i;0=i(rofﻩ {ﻩ
;0=tﻩ 员人有所历遍//
)++r;munyr<r;0=r(rofﻩﻩ
{
ﻩ if(ry[r]、xl==i+1&&ry[r]、ack==1)
//如果该用户选择该路线并且确认出游
{ﻩ ﻩ ﻩ ﻩ index[t]=r;
//将此用户得人员下标存入下标数组
;++tﻩ
ﻩﻩ c=1;
}ﻩ ﻩ
}ﻩ
)0==c(fiﻩ
{ﻩﻩ;)1+i,"n\游出人无 d% 路线"(ftnirpﻩ
ﻩ
;)pf(esolcfﻩ
;kaerbﻩﻩ }ﻩﻩ 标下得户用个一后最得路线该择选 m//
;]1-t[xedni=mﻩﻩ 得路线该即算结得户用个一后最该为 a//
;yap、]i[enil*mun、]m[yr=aﻩ收入
组数标下历遍//
)++j;t〈j;0=j(rofﻩﻩ
{ﻩ
ﻩ if(ry[index[j]]、num*line[i]、pay〉=a)
//通过比较找出该线路收入最高得人得下标与收入
{ﻩﻩﻩ ﻩ;yap、]i[enil*mun、]]j[xedni[yr=aﻩ
;]j[xedni=mﻩﻩ
}ﻩ
}ﻩ ;)"n\式方系联
用费 数人
名姓 号路线”(ftnirpﻩﻩ,eman、]m[yr,mun、]i[enil,"n\s% d6% d4% s6-% d6%"(ftnirpﻩﻩry[m]、num,a,ry[m]、tel); ,eman、]m[yr,mun、]i[enil,”n\s% d6% d4% s6—% d6%”,pf(ftnirpfﻩﻩry[m]、num,a,ry[m]、tel); 结算结到入输息信员人与路线将//
;mun、]i[enil=mun、]i[seijﻩﻩ构体数组中
;a=yap、]i[seijﻩﻩ
jies[i]、renshu=ry[m]、num;
jies[i]、time、year=ry[m]、time、year;
jies[i]、time、month=ry[m]、time、month;
;yad、emit、]m[yr=yad、emit、]i[seijﻩ
;)let、]m[yr,let、]i[seij(ypcrtsﻩ ;)eman、]m[yr,eman、]i[seij(ypcrtsﻩﻩ }ﻩ ;)pf(esolcfﻩ back(); } void manage_jie()
//业务结算函数 {
;j,i tniﻩ ;)”w”,"txt、算结务业"(nepof=pf* ELIFﻩ Q;
printf("业务结算:\n\n");
入收总与入收分得路线各算结//
)++i;3〈i;0=i(rofﻩ {
;)"n\ 间时算结
入收 数人 号路线”(ftnirpﻩﻩ 、]i[seij,mun、]i[seij,"n\ d2%—d2%-d2%
d6% d4% d6%”(ftnirpﻩrenshu,jies[i]、pay,jies[i]、time、year,jies[i]、time、month,jies[i]、time、day);
fprintf(fp,"线路号 人数 收入
结算时间 \n");
fprintf(fp,"%6d %4d %6d
%2d—%2d—%2d \n”,jies[i]、num,jies[i]、renshu,jies[i]、pay,jies[i]、time、year,jies[i]、time、month,jies[i]、time、day);
}ﻩ j=jies[0]、pay+jies[1]、pay+jies[2]、pay;
;)j,”n\d%:入收计合n\n\"(ftnirpﻩ ;)j,"n\d%:入收计合n\n\",pf(ftnirpfﻩ ;)pf(esolcfﻩ ;)(kcabﻩ} void Search()
//信息查询菜单函数 {
int x=0,y=1;
while(y)
{
;)"slc"(metsysﻩ
;)"n\n\n\n\n\n\"(ftnirpﻩ
;)"n\询查息信
"(ftnirpﻩ ———-—--—-—-—--—------—
"(ftnirpﻩ------———--------—-———-\n”);
查 息 信 路 线---—-1
”(ftnirpﻩ询\n”); \询 查 息 信 员 人--—--2
”(ftnirpﻩﻩn");
printf("
3—--—-确 认 出 游 查 询\n”);
务 业--—--4
”(ftnirpﻩ结 算 查 询\n");
状 求 需 路 线——---5
"(ftnirpﻩ况\n");
上
回
返---——6
”(ftnirpﻩﻩ一
层\n");
printf("请输入选项编号(1—5):”);
;)x&,"d%"(fnacsﻩﻩ
)x(hctiwsﻩ
{
ﻩ case 1:search_xl();break;
case 2:search_ry();break;
;kaerb;)(kca_hcraes:3 esacﻩﻩ
ﻩ case 4:search_yw();break;
ﻩ case 5:search_xq();break;
;kaerb;0=y:6 esacﻩﻩﻩ
:tluafedﻩ
ﻩ { ﻩ
ﻩ ﻩ printf("请在 1-6之间选择!\n”);
system("pause”);
}
;kaerbﻩﻩ
}ﻩ }ﻩ} void search_xl()
//线路信息查询函数 {
int i,y=1;
)y(elihwﻩ {ﻩ
;)"slc”(metsysﻩ
;0=yﻩ
;)”:)3—1(号路线得询查要您入输请"(ftnirpﻩ
;)i&,"d%”(fnacsﻩ
if(i>=1&&i〈=3)
//控制查询号在1-3 之间
{ ﻩ
ﻩ printf("路线号 目得地
费用
描述\n");
ﻩ printf(”%6d %6s
%5d %s\n”,line[i—1]、num,line[i-1]、mdd,line[i-1]、pay,line[i—1]、ms);
} ﻩ
esleﻩ
{ﻩ
;1=yﻩﻩ
;)"n\!择选间之 3-1 在请"(ftnirpﻩ
;)"esuap"(metsysﻩﻩ } ﻩ }ﻩ back(); } void search_ry()
//人员信息查询函数 {
int i,y=0;
;]1NEL[t rahcﻩ ;Qﻩ printf("请输入电话号码:");
scanf("%s",&t);
printf(”查询结果:\n");
)++i;munyr<i;0=i(rofﻩ {ﻩ )0==)t,let、]i[yr(pmcrts(fiﻩﻩ
{ﻩ
否为 1 非,是就为 1 值 kca 游出认确//
;"否"=]1NEL[s rahcﻩﻩ
ﻩ if(ry[i]、ack==1)
ﻩ
strcpy(s,"就是");
ﻩ
;)"n\ 间时算结
游出
话电 路线 数人
名姓"(ftnirpﻩﻩ、]i[yr,”n\ d2%-d2%—d2%
s4% s11% d4% d4% s6—%"(ftnirpﻩname,ry[i]、num,ry[i]、xl,ry[i]、tel,s,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day); ﻩ;1=yﻩ
}ﻩ
if(y==1) break;
}ﻩ if(y==0)
;)"!在存不息信得找查所您,起不对”(ftnirpﻩ back(); } void search_ack()
//确认出游信息查询函数 {
int i,n=0;
;”是就”=]1NEL[s rahcﻩ Q;
printf(”姓名
人数 线路 电话
出游
结算时间 \n");
)++i;munyr<i;0=i(rofﻩ {ﻩ
)1==kca、]i[yr(fiﻩ
{
n++;
ﻩ printf("%-6s %4d %4d %11s %2s
%2d—%2d—%2d \n”,ry[i]、name,ry[i]、num,ry[i]、xl,ry[i]、tel,s,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day);
}ﻩ }ﻩ ;)n,"游出认确人 d% 有共 n\"(ftnirpﻩ back(); } void search_xq()
//线路需求状况查询函数 {
int i,t,num;
;Qﻩ 员人有所历遍//
)++i;3<i;0=i(rofﻩ {
;)1+i,"
d%:号路线"(ftnirpﻩ
num=0;
)++t;munyr<t;0=t(rofﻩ {ﻩﻩﻩ路线该==号路线员人//
)1+i==lx、]t[yr(fiﻩ
ﻩﻩ num++;
//人数+1
} ﻩ
printf("选择%d 号线路得有 %d 组人\n”,i+1,num);
}ﻩ ;)(kcabﻩ} void search_yw()
//业务查询函数 {
int i,y;
while(y)
{ﻩ
Q;
y=0;
printf("请输入要查询得线路号(1—3):”);
;)i&,”d%"(fnacsﻩﻩ
3-1 号路线定确//
)3=<i&&1=>i(fiﻩ {ﻩﻩ
i=i-1;
;)”n\:果结询查”(ftnirpﻩ
printf("线路号 人数 收入
结算时间\n");
ﻩ printf(”%6d %4d %6d %2d—%2d-%2d\n",jies[i]、num,jies[i]、renshu,jies[i]、pay,jies[i]、time、year,jies[i]、time、month,jies[i]、time、day);
}
esleﻩ
{
ﻩ printf("请在 1—3 之间选择\n");
ﻩ y=1;
;Sﻩﻩ
}ﻩ }ﻩ ;)(kcabﻩ} void Statis()
//统计分析菜单函数 {
;1=y,0=x tniﻩ while(y)
{
;)"slc"(metsysﻩ
;)"n\n\n\n\n\n\"(ftnirpﻩ
printf("
统计分析\n");
----—-———-—-----——-——-
"(ftnirpﻩ—-—--—-——--—---——------\n");
总汇务业记登—---—1
"(ftnirpﻩ表\n");
汇游出认确----—2
”(ftnirpﻩ总表\n”);
表总汇算结务业-----3
”(ftnirpﻩﻩ\n”);
统算结段阶—----4
"(ftnirpﻩ计等\n");
printf(”
5--—--返 回 上 一 层\n");
;)":)5—1(号编项选入输请"(ftnirpﻩ
scanf(”%d”,&x);
)x(hctiwsﻩﻩ
{ﻩ
;kaerb;)(ned_sitats:1 esacﻩ
ﻩ case 2:statis_chu();break;
;kaerb;)(eij_sitats:3 esacﻩﻩ;kaerb;)(iq_sitats:4 esacﻩﻩ
;kaerb;0=y:5 esacﻩ
default:
{
ﻩﻩ printf(”请在 1-5 之间选择!\n”); ﻩ
;)”esuap”(metsysﻩﻩ
ﻩ }break;
}
}ﻩ} void statis_den()
//登记业务汇总表 {
int i;
;”是就”=]1NEL[kca rahcﻩ FILE *fp=fopen("登记业务汇总表、txt”,”w");
;Qﻩ\
表总汇务业记登
”(ftnirpﻩn"); ---——-----—---—----—--—-—-—--—-——----|"(ftnirpﻩ-—--—-———-
|\n");
printf("| 姓名 |路线|人数|
联系方式
| 结算时间 |确认出游|\n");
" ,p f ( f t nirpfﻩ
登 记 业 务 汇 总 表
\n");
//将表格写出到文件
fprintf(fp,”|----—-——-——-—-—---—----——----—----—--—---——————
|\n");
fprintf(fp,”| 姓名 |路线|人数|
联系方式
| 结算时间 |确认出游|\n");
)++i;munyr<i;0=i(rofﻩ {ﻩ
)1=!kca、]i[yr(fiﻩ
;)”否”,kca(ypcrtsﻩ
-—---—|----—----——-|—---|—---|-—---—|"(ftnirpﻩﻩ-—--|——---—--|\n");
、]i[yr,"n\|s8%|d2%-d2%—d2%|s21%|d4%|d4%|s6%|"(ftnirpﻩname,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day,ack);
fprintf(fp,"|-——-—-|-—-—|—--—|------—-----|-———----——|--------|\n”);
fprintf(fp,"|%6s|%4d|%4d|%12s|%2d—%2d-%2d|%8s|\n",ry[i]、name,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day,ack);
} --—--——------------—----—---——-—----|"(ftnirpﻩ-—----—-—----|\n"); -—---—-------—--—--———--—-—----—----—|”,pf(ftnirpfﻩ------------|\n");
fclose(fp);
;)(kcabﻩ} void statis_chu()
//确认出游汇总表 {
int i;
Q; \
表总汇游出认确
"(ftnirpﻩn");
printf(”|-——-------—------—-——-—-----—--—---------——-—-—--|\n");
printf(”| 姓名 |路线|人数|
联系方式
| 结算时间 |确认出游|\n”);
for(i=0;i<rynum;i++)
{ﻩ )1==kca、]i[yr(fiﻩﻩ { ﻩ --—|-——--—--—---|—--—|----|——--—-|"(ftnirpﻩﻩ—-—-—--|--——----|\n");
ﻩ printf(”|%6s|%4d|%4d|%12s|%2d—%2d—%2d|
就是
|\n”,ry[i]、name,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day);
}ﻩﻩ } ------———-----——--———————--—---—-——|”(ftnirpﻩ-—--———-—-—--—|\n”);
;)(kcabﻩ} void statis_jie()
//业务结算汇总表 {
int i,j=0,k=0;
Q;
printf(”
业务结算汇总表
\n"); --—-—--——--—--—--—-—--—------—---—---—|"(ftnirpﻩ———--—----|\n”);
printf("|线路号| 收入 |人数|
联系方式
| 姓名| 结算时间 |\n");
for(i=0;i<3;i++)
{ﻩ
printf(”|---———|—-—---|----|-—-—------——|----—|-—-—--—---|\n"); \|d2—%-d2-%-d2—%|s5%|s21%|d4%|d6%|d6%|"(ftnirpﻩﻩn”,jies[i]、num,jies[i]、pay,jies[i]、renshu,jies[i]、tel,jies[i]、name,jies[i]、time、year,jies[i]、time、month,jies[i]、time、day);
}ﻩ printf("|-—-—--|—-—---|——--|—--—---—-——-|--———|--—--—----|\n”);
)++i;3〈i;0=i(rofﻩ {
;yap、]i[seij=+jﻩ
;uhsner、]i[seij=+kﻩ }ﻩ printf("|合计
|%6d|%4d|--—---—---——|-—---|—-—--——--—|\n”,j,k);
printf(”|—--———-----———-——-———-———-—--———--——-—----——-—-—|\n”);
back(); } void statis_qi()
//阶段结算汇总表 {
;r,y,n,i tniﻩ ;Qﻩ ;)"n\表总汇算结段阶”(ftnirpﻩ printf("请输入截止时间(格式 2018-6-5):");
;)r&,y&,n&,"d%-d%—d%”(fnacsﻩ|-—-—---—-——--—-—--—-———-----—-—-------——|”(ftnirpﻩ\n");
;)”n\| 间时算结 |
式方系联
|数人|线路| 名姓 |”(ftnirpﻩ for(i=0;i<rynum;i++)
{
)n<raey、emit、]i[yr(fiﻩ
{ﻩﻩ
ﻩ printf("|-——---|---—|-———|—--—-------—|--—-
—---—-|\n”);
n、]i[yr,”n\|d2%—d2%—d2%|s21%|d4%|d4%|s6%|”(ftnirpﻩﻩame,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day);
}
)n==raey、emit、]i[yr(fi esleﻩ {ﻩﻩﻩ)y<htnom、emit、]i[yr(fiﻩ {ﻩﻩﻩ ﻩ ﻩ printf("|——---—|——-—|-———|--—--—-----—|—--—--————|\n”); ﻩﻩ ,eman、]i[yr,"n\|d2%-d2%-d2%|s21%|d4%|d4%|s6%|"(ftnirpﻩry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day);
} ﻩﻩ
)y==htnom、emit、]i[yr(fi esleﻩ
ﻩ {
ﻩﻩ if(ry[i]、time、day<=r)
{ﻩ ﻩﻩ
ﻩ --|-----—-—--—-|—-—-|—-——|—--——-|"(ftnirpﻩﻩ——--—-—-|\n");
ﻩﻩ printf(”|%6s|%4d|%4d|%12s|%2d-%2d-%2d|\n”,ry[i]、name,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day);
ﻩ
}ﻩ
}ﻩ } ﻩ }
pri n t f ( " | - -- - - - -— - -— - - - - - - - - - - --—--— -—--——-———-—-|\n");
;)(kcabﻩ} void Myd()
//满意度菜单函数 {
int x=0,y=1;
)y(elihwﻩ {
system(”cls");
;)"n\n\n\n\n\n\"(ftnirpﻩ ;)"n\度意满户客
”(ftnirpﻩﻩ-———--—--—------————--——
"(ftnirpﻩﻩ------——--—-—-—---—--\n”);
\查调度意满--—--1
"(ftnirpﻩn");
printf("
2-—--—满意度
反馈\n"); 一上回返—————3
”(ftnirpﻩﻩ层\n”);
;)":)3—1(号编项选入输请"(ftnirpﻩﻩ
;)x&,”d%"(fnacsﻩ
switch(x)
{ﻩ
;kaerb;)(iuknaf:1 esacﻩ
;kaerb;)(gjkf:2 esacﻩ
;kaerb;0=y:3 esacﻩ
ﻩ default:
ﻩ { ﻩ
ﻩ printf(”请在 1-3 之间选择!\n");
ﻩ
;)”esuap"(metsysﻩ
ﻩ }break;
} ﻩ }ﻩ} void fankui()
//满意度调查函数 {
char c[LEN1];
int i,j=1,y=1;
;Qﻩ )y(elihwﻩ {ﻩ
;0=yﻩ
printf("请输入您得电话号码:");
;)c&,"s%”(fnacsﻩﻩ
if(strlen(c)==11&&c[0]=='1")
{ﻩﻩ
for(i=0;i〈rynum;i++)
{ﻩ
ﻩ if(strcmp(ry[i]、tel,c)==0)
ﻩ { ﻩﻩﻩ
;)"n\:息信得您认确 n\"(ftnirpﻩ
ﻩ;)"n\
式方系联
数人 线路
名姓"(ftnirpﻩﻩﻩ 、]i[yr,lx、]i[yr,eman、]i[yr,"n\s21% d4% d4% s6%"(ftnirpﻩﻩnum,ry[i]、tel);
ﻩ
;)":)否0,是就 1(意满否是就游旅次本对 n\n\"(ftnirpﻩﻩﻩﻩﻩ;)ym、]i[yr&,"d%"(fnacsﻩﻩﻩﻩ;0=jﻩ
}
}ﻩ ﻩ
if(j==1)
{ﻩ ﻩ
ﻩ printf(”查无此人\n");
ﻩﻩ printf("请确认您得电话号码\n"); ﻩﻩ
;1=yﻩﻩﻩ
;Sﻩ }ﻩﻩﻩ
}ﻩ
else
{ﻩﻩ
;)”n\误错式格码号话电”(ftnirpﻩ
ﻩ y=1;
S;
}ﻩ }ﻩ ;)(kcabﻩ} void fkjg()
//满意度反馈函数 {
int i,j;
;m,n taolfﻩ ;Qﻩ )++i;3<i;0=i(rofﻩ {ﻩ
n=0;
;0=mﻩ )++j;munyr<j;0=j(rofﻩﻩ
{ﻩ
)1+i==lx、]j[yr(fiﻩﻩ
{ﻩ
n++;
if(ry[j]、my==1)
ﻩ
;++mﻩﻩ
}
}ﻩ
line[i]、myd=m/n;
;)dym、]i[enil,mun、]i[enil,"n\f%:度意满得 d% 路线”(ftnirpﻩ }ﻩ S;
;)(kcabﻩ} void over()
//结束函数 {
system("cls");
;)"n\n\n\n\n\n\"(ftnirpﻩ*************************】【
”(ftnirpﻩ*****************【】\n”);
printf("
**********************************************\n");
p r int f ( ”
* *
**\n”);
printf("
**
谢
谢
使
用
**\n");
pr i n t f("
* *
**\n");
系
理
管
行
旅
**
"(ftnirpﻩ统
**\n”);
" ( f t n irpﻩ
* *
**\n");
printf(”
**
再见!
**\n");
p rintf ( "
* *
**\n”);
printf("
**********************************************\n”); ***********************】【
"(ftnirpﻩ*******************【】\n”);
back(); } 五、
测试数据及其结果 分析
(1)测试输出功能:如图 6 所示,显示开始界面;如图7所示,显示一级目录;如图 8所示,显示二级目录;如图 9 所示,显示位于计算机中得文本文件。
图 6 开始界面显示
图 7 一级目录显示
图 8 二级子目录“基本信息"显示
图9 显示文件里得内容 (2)输入密码功能:输入密码,屏幕显示为*;如果密码输入错误,则需要重新输入。如图 10,输入123457,实际密码为 123456。
图 10 输入错误密码提示 (3)输入功能:在业务管理——业务登记中可以输入游客信息,在输入完游客信息返回输出所有得游客信息以确认。如图 11 所示,逐条输入每个游客信息。
图 11 输入游客信息 (4)匹配功能:根据选择各线路得用户人数再结合线路价格选择出一个最佳出游方案并输出;如图12 所示,显示各线路所得得最佳方案。
图 12 线路匹配最佳方案显示 (5)查询功能:通过调用结构体数组或者文件内得信息可以实现一系列得查询功能;如图 13 所示,查询各线路信息;图 14 所示,查询确认出游信息;如图 15 所示,查询各类线路需求状况等。
图 13 线路信息查询
图 14 确认出游查询
图 15 各类线路需求状况查询 (6)统计功能:通过调用结构体数组或者文件内得信息可以实现一系列得统计功能,同时通过输出符号将其制作表格输出并写入文件;如图16 所示统计确认出游得人数并生成表格;如图 17 所示,可以结算某一阶段得业务。
图 16 确认出游汇总表
图 17 阶段结算汇总表 (7)用户满意度调查:用户输入本次旅行得满意度,反馈每条线路得满意度;如图 18所示实现客户满意度调查;如图 19反馈每条线路得满意度.
图 18 满意度调查
图 19 满意度反馈 结果分析如下。
(1)在登录时,如果输入错误得密码,系统会提示密码错误并提供重新输入与退出系统两个选项. (2)在输入菜单选项就是,如果输入得内容不就是 1—6 之间得数字,而就是其她数字,系统将继续执行,提示输入范围不对,并等待下次正确输入。
(3)在业务登记、人员查询与满意度调查中,如果输入了错误得电话号码格式(长度不等于 11或者首位不为 1),系统将会提示电话号码格式错误并等待重新输入正确得内容. (4)在需要输入所须查找得名称处如输入名称不在系统中,系统提示错误并等待重新输入正确得内容。
(5)在阶段结算统计中,输入结算得截止时间,系统将会自动判断并输出截止时间之前得各用户信息同时生成表格。
六、调试 过程中得问题
(1)在表格绘制时总会出现表格数据与表格边框脱离得情况,导致表格输出始终数据与框对不齐,主要就是因为数据得长度没有控制,这时我们就在输出变量前面控制其输出长度。其中最要注意得就是在 C 语言控制台输出中,一个汉字相当于两个字符大小,占两个字节.如: printf(”|—--—-—-———------——------—------———--
--———-----—
|\n"); printf("| 姓名 |路线|人数|
联系方式
| 结算时间 |确认出游|\n"); printf(”|----——|—-——|—-——|--—-—--——---|---—————-—|-—--—---|\n"); printf(”|%6s|%4d|%4d|%12s|%2d-%2d-%2d|%8s|\n”,ry[i]、name,ry[i]、xl,ry[i]、num,ry[i]、tel,ry[i]、time、year,ry[i]、time、month,ry[i]、time、day,ack); 这样就解决了对齐问题。
(2)在编程过程中,一个汉字占两字节,因此想要将汉字赋值给变量,该变量要定义成字符串,而不就是字符型,定义成字符型,对该变量当成字符进行操作,编译器会warning,不会 error,输出乱码;对含汉字得变量进行操作要使用字符串.如:
char s[LEN1]="否";
if(ry[i]、ack==1)
);’是就’=]0[s 成写能不(;)"是就",s(ypcrtsﻩ(3)一开始输入密码时密码时直接显示出来得,不能实现其保密化。解决方案:
unsigned char c; int z=0;
printf("请输入 6 位密码:”);
器示显在显回不,符字个一入读盘键从:hcteg//)"r\'=!))(hcteg=c((elihwﻩ
{ﻩ
if(z〈LEN1 && isprint(c))
{ﻩ
ﻩ
password[z++]=c; ﻩﻩ
号*示显//
;)"*'(rahctupﻩ
ﻩ }
}
;)"n\"(rahctupﻩ
password[z]="\0";
码密//;)"654321”,drowssap(pmcrts=mﻩ
)0==m(fiﻩﻩ
ﻩ printf("登录成功!\n"); 这样打出得密码就会显示成*号。
(4)人员信息查询得时候,要求输入电话号码查询,由于电话号码就是 11位数,用int 型变量会出现越界现象,加之还要判断首位数,所以将电话号码设置成字符串,对电话号码进行操作时用控制字符串得函数。如: char t[LEN1]; printf(”请输入电话号码:"); scanf("%s",&t);(输入电话号码字符串) for(i=0;i<rynum;i++)
{ 号话电得中体构结与串符字得入输断判()0==)t,let、]i[yr(pmcrts(fiﻩ码字符串就是否相等)
{„„} (5)输入结算时间时,一开始就是定义成字符串,后来在实现阶段统计就是不好判断时间,该成 int 比较好判断与操作.如:
printf("姓名 出行人数 线路号 电话 就是否确认出游
结算时间 \n”); printf("(就是填1,否填 0;结算时间格式:2018-6-5 (各部分以空格相连)\n”); for(i=0;i〈r;i++)
//录入用户登记信息 { a=1;
)a(elihwﻩﻩ {ﻩﻩ ﻩﻩ
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)//判断用户输入信息正误(电话、线路号)
ﻩﻩ
;0=aﻩ
else
ﻩ;)"n\息信录登得确正入输并查检请"(ftnirpﻩ }ﻩﻩ } 在这里还添加了判断用户输入得电话号码就是否合乎格式得功能,如果用户输入得电话号码不为 11 位或者首位不为1,则提示格式错误。
七、 课 程 总结
通过此次程序设计,使我更加扎实得掌握了有关C语言编程,在设计过程中虽然遇到了一些问题,但经过一次又一次得思考,一遍又一遍得检查终于找出了原因所在,也暴露出了前期我在这方面得知识欠缺与经验不足。实践出真知,通过亲自动手制作,使我们掌握得知识不再就是纸上谈兵。
错现发断不们我,中程过计设序程在。焉大莫善,改能而过ﻫ误,不断改正,不断领悟,不断获龋最终得检测调试环节,本身就就是在践行“过而能改,善莫大焉”得知行观。这次程序设计终于顺利完成了,在设计中遇到了很多问题,最后在老师得指导下,终于游逆而解.在今后社会得发展与学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦得发现问题所在,然后一一进行解决,只有这样,才能成功得做成想做得事,才能在今后得道路上劈荆斩棘,而不就是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及她人对您得认可! 在这次得设计周中,在编程得过程中,我们认识到自己得不足,在一些重要得地方一度没有头绪,也在网上寻求了一定量得帮助,最终完成了这次得程序设计要求。
在这几天里面,我们可以说将忘却了快一年得知识重新拾起,重新复习了一下C语言得知识点,可以说,这次得程序设计使得我们得收获良多,不经从知识层面上面就是得我们对于C语言有了更好地掌握,也使得我们在于分组分工得能力方面更强。
但就是由于程序设计周得时间角度那导致我们并没有足够多得时间来更好地完善我们得程序,使得我们得程序更上一层楼,这个可就是说就是我们得一点遗憾了。
...