/*----------------------城市公交查询系统--------------------------*作者:胡辉衡*学校:长沙学院*功能:实现城市公交查询的基本功能*实现技术:C语言及数据结构*指导老师:钟旭*完成时间:2015年12月21日------------------------------------------------------------------*/#includestdio.h#includeiostream#includestdlib.h#includestring.h#includeconio.hstructuser//记录账号信息{intidentity;//用户身份,值等于false时为普通用户,否则为管理员intuserId;//用户编号charloginName[40];//用户登录名charloginPassword[20];//登录密码structuser*next;//指向下一个用户信息的指针,便于建立链表};structcity{//记录城市信息intcityId;//城市编号charcityName[20];//城市名structcity*next;//指向下一个城市信息的指针,便于建立链表};structstation//记录车站信息{intstationId;//车站编号charstationName[20];//车站名称intcityId;//所属城市编号structstation*next;//指向下一个站点信息的指针,便于建立链表};structroad//记录公交线路信息{introadId;//公交线路编号charroadName[20];//公交线路名称intcityId;//所属城市编号structroad*next;//指向下一个公交线路信息的指针,便于建立链表};structrelation{//记录车站与公交线路之间的关系和站与站之间的信息intstationId;//车站编号introadId;//公交线路编号intsep;//车站在此公交线路的序号intdistance;//在此公交线路下这个车站到下一站的距离(单位:km)inttime;//在此公交线路下这个车站到下一站所需要的时间(单位:min)intcityId;//所属城市编号structrelation*next;//指向下一个站点与线路映射信息的指针,便于建立链表};intg_cityId=0;//记录当前城市编号的全局变量intMainInterface();//主界面structuser*Login();//登录函数structuser*Register();//注册函数structuser*FindPassword();//找回密码voidinitialize();//初始化intUserInterface(structuser*p);//用户界面intAdminInterface(structuser*p);//管理员界面structuser*Logout(structuser*p);//注销函数voidLineManage();//线路管理函数voidSiteManage();//站点管理函数voidLineQuery();//线路查询函数voidSiteQuery();//站点查询函数voidSiteToSiteQuery();//站站查询函数structuser*ChangePassword(structuser*p);//修改密码函数voidInputpw(char*password,intlen);//密码掩盖函数voidChangeCity();//切换城市voidAddCity();//增加城市voidSiteAdd();//站点增加函数voidSiteChange();//站点修改函数voidSiteDelete();//站点删除函数voidSiteDeleteDeal(intstationId);//站点删除处理函数voidLineAdd();//线路增加函数voidLineChange();//线路修改函数voidLineDelete();//线路删除函数voidLineInsertSite(introadId);//插入站点形成公交线路voidLineDeleteSite(introadId);//删除公交线路上所有的站点voidLineShow(introadId);//显示公交线路上所有的公交站点voidSiteShow(intstationId);//显示经过公交站点所有的公交线路voidShowAllWay(intstart,intend);//显示从起点到终点两次换乘及以下的所有乘车方式voidgraphFound();//将当前城市所有的公交线路和站点构成一张图voidshowRoadName(introadId);//根据线路编号显示公交线路名voidshowStationName(intstationId);//根据站点编号显示公交站点名intmain(){structuser*p;intoption;initialize();while(1){system(cls);option=MainInterface();switch(option){case49:p=Login();break;case50:p=Register();break;case51:p=FindPassword();break;default:exit(-1);}//printf(a);if(p==NULL){continue;}else{//printf(\t\t你的身份:);if(p-identity){while(p){//避免函数调用函数导致内存爆炸b:option=AdminInterface(p);switch(option){case49:LineManage();break;case50:SiteManage();break;case51:ChangeCity();break;case52:AddCity();break;case53:gotoa;/*UserInterface(p)*/;break;case54:p=Logout(p);break;default:exit(-1);}}}else{while(p){//避免函数调用函数导致内存爆炸a:option=UserInterface(p);switch(option){case49:LineQuery();break;case50:SiteQuery();break;case51:SiteToSiteQuery();break;case52:ChangeCity();break;case53:p=ChangePassword(p);break;case54:if(p-identity){gotob;}else{p=Logout(p);break;}default:exit(-1);}}}}//system(pause);}return0;}voidSiteAdd(){system(cls);printf(--------------------------站点增加界面-------------------------);FILE*fp;inti=1;boolmark=false;intstationId,cityId;intstationIdMark=0;//记录新建公交站点的编号(应大于所有已有的公交站点)charstationName[20];structstation*head,*p,*q;head=(structstation*)malloc(sizeof(structstation));head-next=NULL;fp=fopen(station.txt,r);if(fp){while(!feof(fp)){//产生链表p=(structstation*)malloc(sizeof(structstation));p-next=NULL;fscanf(fp,%d%s%d,&p-stationId,p-stationName,&p-cityId);if(p-stationIdstationIdMark){stationIdMark=p-stationId;}p-next=head-next;head-next=p;//printf(%d%s%d,stationId,stationName,cityId);/*if(cityId==g_cityId){p-cityId=cityId;p-stationId=stationId;strcpy(p-stationName,stationName);p-next=head-next;head-next=p;}*/}p=head-next;printf(\n\n本城市已有的公交站点:\n);//将本城市已有的公交站点全部显示出来while(p!=NULL){//printf(a);if(p-cityId==g_cityId){printf(%s\t,p-stationName);if(i%5==0){printf(\n);}i++;}p=p-next;}/*if(p==NULL){printf(\n\n本城市暂时还没有添加任何公交站点!\n);}else{printf(\n\n本城市已有的公交站点:\n);while(p!=NULL){//printf(a);printf(\t%s,p-stationName);if(i%5==0){printf(\n);i++;}p=p-next;}}*/printf(\n\n\n请输入你想要增加的公交站点名(输入0表示返回):);//对输入的公交站名做正确性验证while(1){fflush(stdin);gets(stationName);if(!strcmp(stationName,0)){//把输入0作为模块出口break;}p=head-next;mark=false;while(p!=NULL){if(!strcmp(p-stationName,stationName)&&p-cityId==g_cityId){mark=true;//表示公交站点已存在,不需要再添加break;}p=p-next;}if(mark){printf(此公交站点已存在!请重新输入公交站点名(输入0表示返回):);}elseif(strlen(stationName)20||strlen(stationName)4){printf(公交站点名长度不符合要求!请重新输入公交站点名(输入0表示返回):);}else{break;}}//将新建的公交站点结点插入到链表中if(strcmp(stationName,0)){p=(structstation*)malloc(sizeof(structstation));p-next=NULL;stationIdMark++;p-stationId=stationIdMark;p-cityId=g_cityId;strcpy(p-stationName,stationName);p-next=head-next;head-next=p;}fclose(fp);fp=fopen(station.txt,w);if(fp){p=head-next;while(p!=NULL){//更新公交站点文件信息//printf(b);fprintf(fp,%d%s%d,p-stationId,p-stationName,p-cityId);head-next=head-next-next;free(p);//释放链表结点,节省内存p=head-next;}free(head);fclose(fp);}else{printf(文件'city'打开失败!);s