C语言课程设计报告--公交路线管理系统
C语言课程设计——简易公交车管理系统(数组实现)
/**************************头文件声明************************************/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"/**************************函数声明************************************/void init(); //初始化函数void add(); //信息录入函数void view(); //信息显示函数void mod(); //信息修改函数void modmeun(); //修改菜单void modnavimeun(); //路线修改菜单void del(); //信息删除函数void find(); //信息查询函数void findmeun(); //查询菜单void findnavi(); //路线导航查询函数void findnum(); //路线编号查询函数void findstameun(); //站台信息查询菜单void findsta(); //站台信息查询函数void save(); //信息保存函数void mainmeun(); //主菜单char Test(char a,char b,char c); //菜单输入检测函数/**************************宏定义声明************************************/ #define N 100 //公交车数量/**************************结构体定义************************************/ struct station //途径站点信息{char c[20]; //站点名称};struct bus //公交车信息{char num[20]; //公交车路线编号char name[20]; //司机姓名int n; //站台数目struct station b[12]; //站台名称char topen[20]; //起始时间char tclose[20]; //终止时间int money; //票价}a[N];/**************************函数定义************************************/int main(){char a;init();printf("\n\t\t目前所能录入的公交车数量上限为 %d 辆\n\n",N);printf("\n\t\t输入回车键继续\n");fflush(stdin); //清除键盘缓冲区while(1){system("cls");mainmeun();a=Test(getchar(),'1','6'); //菜单检测输入函数switch(a){case '1': system("cls"); add(); break;case '2': system("cls"); view(); break;case '3': system("cls"); mod(); break;case '4': system("cls"); del(); break;case '5': system("cls"); find(); break;case '6': return 0;}}return 0;}void init() //初始化函数{FILE *fp; //文件指针int i;if((fp=fopen("bus.txt","r+"))==NULL) //初次尝试打开"bus.txt"文本文件{printf("\n\t\t文件打开失败\n\n\t\t正在尝试创建新文件...\n");fp=fopen("bus.txt","w"); //创建"bus.txt"文本文件if((fp=fopen("bus.txt","r+"))==NULL) //再次判断是否打开成功{printf("\t\t文件创建失败\n");return;}}fp=fopen("bus.txt","r+");for(i=0;i<N;i++) //将磁盘中的信息输出到内存中if(fread(&a[i],sizeof(struct bus),1,fp)!=1)break;fclose(fp);printf("\n\t\t初始化完成\n\n");return;}void add() //信息录入函数{FILE *fp=NULL; //文件指针int i,j;char cc[20];for(i=0;i<N;i++){if(*a[i].num!='\0')continue;else{printf("\n添加第%d辆公交车路线记录:\n",i+1);printf("\n请输入路线编码(3位编码,第一位为大写字母,后两位为数字):\n"); //路线编码scanf("%s",cc);for(j=0;j<N;j++) //检验是否重复if(strcmp(a[j].num,cc)==0){printf("\n与已有路线编码重复,按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}strcpy(a[i].num,cc);printf("\n请输入司机姓名: "); //司机姓名scanf("%s",a[i].name);printf("\n请输入途径站台总数(>=2): "); //站台总数scanf("%d",&a[i].n);printf("\n");if(a[i].n<2||a[i].n>12){while(a[i].n<2||a[i].n>12){printf("\n站台总数应满足(2<=n<=12),请重新输入: ");scanf("%d",&a[i].n);printf("\n");}}for(j=0;j<a[i].n;j++){printf("请输入第%d个站台名称: ",j+1); //站台名称scanf("%s",a[i].b[j].c);}printf("\n自动生成公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++){printf(" ----> (%d) %s",j+1,a[i].b[j].c);}printf("\n\n请输入公交车的起始时间(格式为:时:分): "); //起始时间scanf("%s",a[i].topen);printf("请输入公交车的终止时间(格式为:时:分): "); //终止时间scanf("%s",a[i].tclose);printf("\n请输入公交车的票价: "); //票价scanf("%d",&a[i].money);printf("\n第%d辆公交车路线记录创建成功\n",i+1);save();printf("\n\t按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}}if(i==N)printf("\n\n\n\t空间已满,不能录入\n");printf("\n\t按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void view() //信息显示函数{int i,j,min;struct bus t;for(i=0;*a[i].num!='\0'&&i<N;i++) //按“路线编号”用选择法排序{min=i;for(j=i+1;*a[j].num!='\0'&&j<N;j++)if(strcmp(a[i].num,a[j].num)>0)min=j;t=a[i];a[i]=a[min];a[min]=t;}printf("\n\n 公交车信息库");printf("\n**************************************************************** ****************\n");for(i=0;*a[i].num!='\0'&&i<N;i++){printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n**************************************************************** ****************\n");printf("\n\t\t公交车信息显示完毕\n");printf("\n\t\t输入回车键返回主菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void mod() //信息修改函数{int i,j,m=0;char t,cc[20],mod[20];printf("请输入要修改信息的公交车路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++) //查找所输入的公交车{if(strcmp(a[i].num,cc)==0){m=1;printf("\n\n\t\t已找到\n");while(1){system("cls");printf("\n\n 正在修改的公交车信息\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");modmeun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','5'); //菜单检测输入函数system("cls");switch(t){case '1': //修改路线编号{int k;printf("\n请输入新的公交车编号:");scanf("%s",mod);for(k=0;*a[k].num!='\0'&&k<N;k++){if(strcmp(a[k].num,mod)==0){printf("与已有编号重复,按回车键返回主菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}}strcpy(a[i].num,mod);save();break;}case '2': //修改车辆信息{printf("\n请输入新的司机姓名:");scanf("%s",a[i].name);printf("\n请输入新的公交车票价:");scanf("%d",&a[i].money);save();break;}case '3': //修改行车路线{void modnavimeun(); //路线修改菜单int k;char z;while(1){system("cls");modnavimeun();fflush(stdin); //清除键盘缓冲区z=Test(getchar(),'1','5'); //菜单检测输入函数system("cls");switch(z){case '1': //添加站点{if(a[i].n+1>12) //判断是否满足条件{printf("\n站台总数达到12个,无法添加新站点\n\n按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}printf("\n请输入需要添加第几个站点:");scanf("%d",&k);while(a[i].n+1<k){printf("目前共%d个站点,无法添加第%d个站点\n请重新输入:",a[i].n,k);scanf("%d",&k);printf("\n");}a[i].n=a[i].n+1;for(j=a[i].n;j>k-1;j--){a[i].b[j]=a[i].b[j-1];}printf("\n请输入新添加的站点名称:");scanf("%s",a[i].b[k-1].c);save();break;}case '2': //修改站点{printf("\n请输入需要修改第几个站点:");scanf("%d",&k);printf("\n请输入新的站点名称:");scanf("%s",a[i].b[k-1].c);save();break;}case '3': //删除站点{printf("\n请输入需要删除第几个站点:");scanf("%d",&k);for(j=k-1;j<a[i].n;j++){a[i].b[j]=a[i].b[j+1];}a[i].n=a[i].n-1;save();break;}case '4': //重置路线{printf("\n请输入新的途径站台总数(2<=n<=12): ");scanf("%d",&a[i].n);printf("\n");while(a[i].n<2||a[i].n>12) //判断是否满足条件{printf("\n站台总数应满足(2<=n<=12),请重新输入: ");scanf("%d",&a[i].n);printf("\n");}for(j=0;j<a[i].n;j++){printf("请输入新的第%d个站台名称:",j+1);scanf("%s",a[i].b[j].c);}printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");save();break;}case '5': //返回菜单{printf("\n\t\t按回车键返回菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}}}}case '4': //修改行车时间{printf("\n\n请输入公交车的起始时间(格式为:时:分): ");scanf("%s",a[i].topen);printf("请输入公交车的终止时间(格式为:时:分): ");scanf("%s",a[i].tclose);save();break;}case '5':{printf("\n\t\t按回车键返回主菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}}}}}if(m==0)printf("\n\n\t\t无此公交车信息\n");printf("\n\t\t按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void modmeun() //修改菜单{printf("\n\t\t 修改菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、修改路线编号 *");printf("\n\t\t* 2、修改车辆信息 *");printf("\n\t\t* 3、修改行车路线 *");printf("\n\t\t* 4、修改行车时间 *");printf("\n\t\t* 5、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void modnavimeun() //路线修改菜单{printf("\n\t\t 路线修改菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、站点添加 *");printf("\n\t\t* 2、站点修改 *");printf("\n\t\t* 3、站点删除 *");printf("\n\t\t* 4、路线重置 *");printf("\n\t\t* 5、返回菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void del() //信息删除函数{int i,j,t,m=0;char cc[20];printf("\n请输入要删改信息的公交车路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++) //查找所输入的公交车{if(strcmp(a[i].num,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("即将删除该公交车信息\n确定请按1:");scanf("%d",&t);if(t==1){if(i+1==N)memset(&a[i],'\0',sizeof(struct bus)); //最后一辆直接进行清空elsefor(j=i;*a[j].num!='\0'&&j+1<N;j++) //后面的公交车信息补上删去的公家车信息a[j]=a[j+1];printf("编号为%s的公交车信息删除完毕!\n",cc);save();break;}}}if(m==0)printf("\n\n\t\t无此公交车信息\n");printf("\n\n\t输入回车键返回主菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void find() //信息查询函数{char t;while(1){findmeun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','4'); //菜单检测输入函数switch(t){case '1': system("cls"); findnavi();break; //路线导航查询case '2': system("cls"); findnum();break; //路线编号查询函数case '3': system("cls"); findsta();break; //站台信息查询函数case '4': system("cls"); return; //返回主菜单}}return;}void findmeun() //查询菜单{printf("\n\t\t 查询菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、路线导航查询 *");printf("\n\t\t* 2、路线编号查询 *");printf("\n\t\t* 3、站台信息查询 *");printf("\n\t\t* 4、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void findnavi() //路线导航查询函数{int i,j,k,m=0;char c1[20],c2[20];printf("请输入您目前所在的站点:\n\t\t");scanf("%s",c1);printf("请输入您想要前往的站点:\n\t\t");scanf("%s",c2);printf("\n\n您可选择的公交车信息如下\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){for(j=0;j<a[i].n;j++)for(k=j+1;k<a[i].n;k++)if(strcmp(a[i].b[j].c,c1)==0&&strcmp(a[i].b[k].c,c2)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t\t\t\t显示完毕\n");if(m==0)printf("\n\n\t\t\t\t抱歉,无途径此路线的公交车\n");printf("\n\t\t\t\t输入回车键返回查询菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void findnum() //路线编号查询函数{int i,j,m=0;char cc[20];printf("请输入您想要查找的公交路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++){if(strcmp(a[i].num,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");break;}}if(m==0)printf("\n\t\t无此公交车信息\n");printf("\n\t\t输入回车键返回查询菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void findstameun() //站台信息查询菜单{printf("\n\t\t 站台信息查询菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、起始站台查询 *");printf("\n\t\t* 2、终止站台查询 *");printf("\n\t\t* 3、途径站台查询 *");printf("\n\t\t* 4、返回查询菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void findsta() //站台信息查询函数{int i,j,k;char t;char cc[20];while(1){int m=0;findstameun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','4'); //菜单检测输入函数system("cls");switch(t){case '1':{printf("请输入您所要查询的起始站台名称:\n");scanf("%s",cc);printf("\n以%s为起始站台的公交车如下:\n",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){if(strcmp(a[i].b[0].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '2':{printf("请输入您所要查询的终止站台名称:\n");scanf("%s",cc);printf("\n以%s为终止站台的公交车如下:\n",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){k=a[i].n;if(strcmp(a[i].b[k-1].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '3':{printf("请输入您所要查询的途径站台名称:\n");scanf("%s",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++)for(k=1;k<a[i].n-1;k++)if(strcmp(a[i].b[k].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕\n");if(m==0)printf("\n\t没有公交车以该站点为途径站台\n");break;}case '4':{printf("\n\t\t按回车键返回查询菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}fflush(stdin); //清除键盘缓冲区getchar();system("cls");}}return;}void save() //信息保存函数{FILE *fp=NULL;int i;if((fp=fopen("bus.txt","w+"))==NULL) //以读写的方式打开名称为"bus"的文本文件{printf("文件打开错误\n");return;}fp=fopen("bus.txt","w+");for(i=0;*a[i].num!='\0'&&i<N;i++) //将内存中的数据输出到磁盘中if(fwrite(&a[i],sizeof(struct bus),1,fp)!=1)break;printf("\n\t保存成功\n");fclose(fp);return;}void mainmeun() //主菜单{printf("\n\t\t 主菜单");printf("\n\t\t****************************************");printf("\n\t\t* 1、信息录入 *");printf("\n\t\t* 2、信息显示 *");printf("\n\t\t* 3、信息修改 *");printf("\n\t\t* 4、信息删除 *");printf("\n\t\t* 5、信息查询 *");printf("\n\t\t* 6、退出系统 *");printf("\n\t\t****************************************");printf("\n\n\t\t\t请输入您的选择:");}//菜单输入检测函数char Test(char a,char b,char c){while(a<b||a>c){printf("\n\t\t\t输入错误,请重新输入: ");fflush(stdin); //清除键盘缓冲区a=getchar();}return a;}。
公交查询管理系统课程设计
公交查询管理系统课程设计一、课程目标知识目标:1. 学生能理解公交查询管理系统的基础知识,掌握系统的功能模块及其相互关系。
2. 学生能了解数据库的基本原理,运用SQL语句进行公交信息查询和管理。
3. 学生了解计算机网络通信的基本概念,理解公交查询系统中数据传输的原理。
技能目标:1. 学生具备运用编程语言设计简单公交查询管理系统的能力,能实现线路查询、站点查询、换乘查询等功能。
2. 学生掌握数据库操作技能,能独立完成公交信息的添加、删除、修改和查询。
3. 学生具备一定的项目协作能力,能在团队中分担任务,共同完成公交查询管理系统的设计与实现。
情感态度价值观目标:1. 培养学生对公交查询管理系统实际应用场景的兴趣,激发学习编程和数据库技术的热情。
2. 培养学生认真负责的工作态度,注重代码规范和团队协作,养成良好的编程习惯。
3. 增强学生的社会责任感和环保意识,让他们意识到公交出行对环境保护的重要性。
本课程针对高年级学生,结合计算机科学与技术相关课程,注重理论知识与实践操作的相结合。
课程目标旨在使学生掌握公交查询管理系统相关知识,提高实际操作技能,培养团队协作能力和积极的社会情感价值观。
通过分解课程目标为具体学习成果,为教学设计和评估提供明确依据。
二、教学内容1. 公交查询管理系统概述:介绍系统的基本概念、功能模块及其在实际生活中的应用。
- 教材章节:第一章 绪论2. 数据库原理与应用:讲解数据库的基本概念、关系型数据库设计、SQL语句操作。
- 教材章节:第二章 数据库原理、第三章 SQL语言3. 编程语言基础:学习一种编程语言(如Python、Java等),掌握基本语法和面向对象编程。
- 教材章节:第四章 编程语言基础4. 计算机网络通信:介绍基本概念,理解公交查询系统中数据传输的原理。
- 教材章节:第五章 计算机网络通信5. 公交查询管理系统设计与实现:- 线路查询功能:学习如何设计线路查询算法,实现线路查询功能。
C语言课程设计报告--公交路线管理系统
计算机科学与技术系课程设计报告2011 ~2012 学年第二学期课程面向过程综合设计课程设计名称公交路线管理系统学生姓名学号专业班级指导教师2012 年6 月一、设计思想我的系统主要功能是实现对公交路线的查询管理和维护。
众所周知,公交车在每一个城市中都有着非常大的作用,几乎每个市民都要用到公交车。
以及公交车的路线经常会有所改动。
因此如果使用我的这个系统,就可以及时的对路线信息进行修改和保存可以很好地满足市民的查询,方便人民的生活。
而且该系统使用起来也很方便。
用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能查询到你需要的信息。
本系统具有显示路线信息、添加线路信息、删除线路信息、修改线路信息、查询信息的功能。
用户们可以根据自己所需要的情况进行相应的功能选择,得到自己所需要的信息。
其具体功能简单描述如下:(1)显示路线信息:即将路线信息显示到屏幕中,供用户查看。
该功能比较简单,在这里不具体说明。
(2)添加路线信息:即添加一条新的公交路线或者是某一条路线上的站点。
每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。
这样,就实现了对公交路线的添加信息管理。
(3)删除路线信息:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。
若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。
(4)修改路线信息:即能修改一条你需要该的路线信息。
修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。
(5)查询路线信息:即能够查找出你要的公交路线信息和总共有多少站。
简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。
《C语言程序设计》公交车管理系统源码
《C语言程序设计》公交车管理系统源码#include<stdio.h>main(){int ticket=0,stops=0,symbol=0,cardnumber=0,cardmoney=0,num=0; int i=0,balance=0,maxindex=0;int cnum[20]={0},cmoney[20]={0},cbalance[20]={0},flag[20]={0}; char choose='\0';while(1){ clrscr();printf("\n\t\t||=======================================||"); printf("\n\t\t||---------------------------------------||"); printf("\n\t\t||-------------Welcome-------------------||"); printf("\n\t\t||----------use bus traffic--------------||"); printf("\n\t\t||--------------Card---------------------||"); printf("\n\t\t||---------------------------------------||"); printf("\n\t\t||=======================================||"); printf("\n\n\n\n");printf("\n\t\t||---------------------------------------||"); printf("\n\t\t||----------Please input(0-8)------------||"); printf("\n\t\t||---------------------------------------||"); printf("\n\t\t| 1.Add new Card |");printf("\n\t\t| 2.Logout Card |");printf("\n\t\t| 3.Modify Card |");printf("\n\t\t| 4.Read card |");printf("\n\t\t| 5.Save money |");printf("\n\t\t| 6.Stat.max money |");printf("\n\t\t| 7.Display |");printf("\n\t\t| 8.Delete Data File |");printf("\n\t\t| 0.Exit |");printf("\n\t\t|-----------------------------------------|"); printf("\n\t\t");scanf("%c",&choose);switch(choose){ case'1':for(i=0;i<num;i++)if(flag[i]==1)break;cardnumber=i;printf("\n\tHow much money you want to save in your card"); scanf("%d",&cardmoney);cnum[cardnumber]=cardnumber+1;cmoney[cardnumber]=cardmoney;cbalance[cardnumber]=cardmoney;flag[cardnumber]=0;if(cardnumber==num) num++;printf("\n\t|--%5d--|--%5d--|--%5d--|",cnum[i],cmoney[i],cbalance[i]);getch();break;case'2':printf("\n\tPlease input your card number:");scanf("%d",&cardnumber);for(i=0;i<num;i++)if(cnum[i]==cardnumber && flag[i]!=1){printf("\n\tReturu you balance money:%d.",cbalance[i]);do{printf("\n\n\tAre you sure logout the card(y/n)?");scanf("%c",&choose);}while(choose!='y' && choose!='y' && choose!='N' && choose!='n'); if(choose=='y' || choose=='y'){cmoney[i]=0;cbalance[i]=0;flag[i]=1;}break;}if(i==num){printf("\n\ntNo find the card.");getch();}break;case'3':printf("\n\tPlease input card number that you want to modify:"); scanf("%d",&cardnumber);for(i=0;i<num;i++)if(cnum[i]==cardnumber && flag[i]!=1){do{clrscr();printf("\n\t\t-------------------------------------------"); printf("\n\t\t please input modify Item ");printf("\n\t\t-------------------------------------------"); printf("\n\t\t------------ 1.save money------------------"); printf("\n\t\t------------ 2.balance money---------------"); printf("\n\t\t------------ 3.Return----------------------"); printf("\n\t\t-------------------------------------------"); scanf("%c",&choose);switch(choose){case'1':printf("\n\tPlease input new save money:"); scanf("%d%",&cardmoney);cbalance[i]+=cardmoney-cmoney[i];cmoney[i]=cardmoney;break;case'2':printf("\n\tPlease input new balance money:"); scanf("%d%",&balance);cbalance[i]=balance;break;case'3':break;default:printf("\n\tInput error, Please input again!"); getch();continue;}}while(choose!='3');break;}if(i==num){printf("\n\tNo find the card.");getch();}break;case'4':printf("\n\tPlease input your card number:");scanf("%d",&cardnumber);for(i=0;i<num;i++)if(cnum[i]==cardnumber && flag[i]!=1){ while(symbol==0){ printf("\n\tHow many you want to take bus stops:"); scanf("%d",&stops);if(stops<1||stops>30){printf("\n\tInput error.Please input again.");getch();}else if(stops<=10){ticket=1;symbol=1;}else if(stops<=15){ticket=2;symbol=1;}else if(stops<=20){ticket=3;symbol=1;}else if(stops<=25){ticket=4;symbol=1;}else if(stops<=30){ticket=5;symbol=1;}}if(cbalance[i]>=ticket){printf("\n\tBefore:");printf("cnum:%5d cmoner:%5dcbalance:%5d",cnum[i],cmoney[i],cbalance[i]); cbalance[i]-=ticket;printf("\n\tAfter:");printf("cnum:%5d cmoner:%5dcbalance:%5d",cnum[i],cmoney[i],cbalance[i]);getch();}else{printf("\n\tYour card balance money is not enough.Please use cash.");getch();}break;}if(i==num){ printf("\n\tNo find the card");getch();}break;case'5':printf("\n\tPlease input your card number:");scanf("%d",&cardnumber);for(i=0;i<num;i++)if(cnum[i]==cardnumber && flag[i]!=1){ do{ printf("\n\tPlease input you want to save money in thecard:");scanf("%d",&cardmoney);if(cardmoney<=0)printf("\n\tInput error.Please input again.");}while(cardmoney<=0);cmoney[i]=cardmoney;cbalance[i]+=cardmoney;printf("\n\tYour card have already saved money:%5d.",cardmoney); printf("\n\tcnum:% 5d cmoney:%5d cbalance:%5d",cnum[i],cmoney[i],cbalance[i]);getch();break;}if(i==num){ printf("\n\tNo find the card.");getch();}break;case'6':maxindex=0;for(i=1;i<num;i++)if(cmoney[maxindex]<cmoney[i])maxindex=i;printf("\n\tMax save money is:%d.",cmoney[maxindex]);printf("\n\tcnum:%5d cmoney:%5d cbalance:%5d",cnum[maxindex],cmoney[maxindex],cbalance[maxindex]); getch();break;case'7':clrscr();printf("\n\t|---------------------------------------|"); printf("\n\t|--Cardnum--|--Savvemoney--|--Balance-- |"); for(i=0;i<num;i++){ if(flag[i]==1) continue;else{ printf("\n\t|-----------------------------|");printf("\n\t|--%5d--|--%5d--|--%5d--------|");cnum[i],cmoney[i],cbalance[i];if((i+1)%10==0){ getch();printf("Press any key to go on...");}}}printf("\n\t|---------------------------------|");getch();break;case'8':printf("\n\tYou select 8");getch();break;case'0':do{ printf("\n\tAre you sure exit(y/n):");scanf("%c",&choose);}while(choose!='Y' && choose!='y' && choose!='N'&&choose!='n');if(choose=='Y'||choose=='y')exit(0);break;default:printf("\n\tYou input error.Please input again."); getch();}}}。
《C语言版交通管理系统》课程设计实验指导
任务四:数据更新与删除模块
2. 实现事务处理机制,确保数据一致性。
3. 提供友好的用户界面,方便管理员进行操作。
04
实验结果与演示
实验结果展示
实验结果展示
学生需要将实验结果以书面报告 的形式展示出来,包括程序代码、 运行结果、数据分析和结论等部 分。
实验结果评价
教师对学生的实验结果进行评估, 包括程序的正确性、效率、可读 性和可维护性等方面。
03
培养学生对实际问题的分析和解决能力,提高学生 的编程实践能力和团队协作能力。
实验要求
01
完成一个简单的交通管理系统,实现车辆信息录入、
查询、修改和删除等基本功能。
02
在实现基本功能的基础上,可适当增加其他功能,如
按车牌号查询、按车主姓名查询、统计车辆数量等。
03
保证程序的正确性、稳定性和可维护性,遵循良好的
将各个模块进行整合,实现系统整体功能。
数据结构设计
车辆信息表
存储车辆的基本信息,如车牌号、车 型、颜色等。
驾驶员信息表
存储驾驶员的基本信息,如姓名、性 别、年龄等。
违章记录表
存储违章记录的信息,如违章时间、 地点、违章内容等。
事故处理表
存储事故处理的信息,如事故时间、 地点、责任方等。
03
实验任务与步骤
任务一:数据录入模块
2. 实现添加新数据的函数,包括输入验证和错误处理。
3. 确保数据的一致性和完整性。
任务二:数据查询模块
• 数据查询模块概述:该模块允许 用户根据特定条件查询交通信息。
任务二:数据查询模块
功能要求 1. 能够按车辆ID查询车辆信息。 2. 能够按驾驶员ID查询驾驶员信息。
C语言公交系统
C语言公交系统1. 简介C语言公交系统是一个基于C语言开发的交通管理系统,用于模拟公交车的运行和管理。
该系统可以实现公交车的添加、删除、查询、乘客上下车等功能,方便管理者对公交车运营情况进行监控。
2. 功能模块2.1 添加公交车该功能模块用于向系统中添加新的公交车。
2.1.1 输入•公交车编号:每辆公交车都有一个唯一的编号,用于区分不同的公交车。
•公交车型号:描述公交车的型号和特征。
•公交车座位数:记录公交车的座位数。
•公交车价格:表示公交车的票价。
2.1.2 输出•添加成功:成功向系统中添加一辆新的公交车。
•添加失败:输入的公交车编号已存在,无法添加。
2.2 删除公交车该功能模块用于在系统中删除已经存在的公交车。
2.2.1 输入•公交车编号:指定欲删除的公交车编号。
2.2.2 输出•删除成功:成功从系统中删除指定的公交车。
•删除失败:输入的公交车编号不存在,无法删除。
2.3 查询公交车该功能模块用于查询已经存在的公交车信息。
2.3.1 输入•公交车编号:指定要查询的公交车编号。
2.3.2 输出•查询结果:显示指定公交车的详细信息,包括公交车编号、型号、座位数和票价。
2.4 乘客上车该功能模块用于模拟乘客上车的过程。
2.4.1 输入•公交车编号:指定要上车的公交车编号。
•上车人数:记录上车的乘客人数。
2.4.2 输出•乘客上车成功:成功将指定数量的乘客上车,并更新公交车实际载客数量。
•乘客上车失败:输入的公交车编号不存在,无法上车。
2.5 乘客下车该功能模块用于模拟乘客下车的过程。
2.5.1 输入•公交车编号:指定要下车的公交车编号。
•下车人数:记录下车的乘客人数。
2.5.2 输出•乘客下车成功:成功将指定数量的乘客下车,并更新公交车实际载客数量。
•乘客下车失败:输入的公交车编号不存在,无法下车。
3. 数据结构3.1 公交车信息结构体typedef struct {int busId; // 公交车编号char model[20]; // 公交车型号int seatCount; // 公交车座位数float price; // 公交车票价int passengerCount; // 实际载客数量} Bus;3.2 公交车信息链表节点结构体typedef struct Node {Bus bus; // 公交车信息struct Node* next; // 下一个节点指针} Node;4. 算法流程4.1 添加公交车1.输入要添加的公交车信息。
《C#程序设计》课程设计-公交路线查询
《C#程序设计》课程设计公交路线查询系统㈠需求分析:随着现代社会的发展,交通也越来越发达,人们也开始不断的外出旅游,不管是市内还是市外对一个准确明了的交通路线需求越来越大,以前我们只能通过电话咨询、看地图、向路人打听来了解讯息,这不仅浪费精力财力时间,而且极为不方便。
在这样一个需求下,我们所设计的公交路线查询系统就产生了很大的价值,它能很方便的查询到公交路线,准确的告诉你从A到B该怎么去才最为快捷!这也是我们设计这个系统的初衷!1.功能需求首先我们系统最基本要满足顾客的需求就是公交路线的查询。
但是我们清楚的知道,死的列表将造成许多不便,因为路线会随着城市建设而变化,所以我们的路线是可以实时的去更新的,这样就牵扯到再数据库中的更新、删除功能,附带通过报表清楚的显示出来修改后的内容。
触发器功能实现公交路线中的一些数值计算,比如几站路等。
我们所要实现的就是站点查询、换车查询、线路查询。
2.数据需求数据库中包含管理者的账户密码。
公交路线数据(包括起始站到终点站的其间所有站点)。
3.性能需求客户需要的是一个快捷准确的查询系统,包括一次转车到达以及二次转车到达,不能有任何差错。
所以关于线路查询的C#程序语句要考虑周全不能有任何差池。
数据库中数据也需要其准确性。
㈡概要设计:设计思想:随着公路规模的不断扩大,公交数量的急剧增加,有关公交管理的各种信息量也在不断成倍增长。
面对庞大的信息量,就需要有公交信息管理系统来提公交房管理工作的效率。
通过这样的系统,我们可以做到信息的规范管理和快速查询,从而减少了管理方面的工作量。
目前,我国各省市的公交查询工作还未实现数字化。
整个过程既浪费能源又浪费资源。
最后导致浪费时间,无法按时到达目的地。
因此,开发一个能够对最新的公交线路进行查询的信息平台就显得尤其重要。
所开发的系统将在一定程度上能够克服以上的种种缺点,实现各项工作在线完成,为乘客提供一个完全公开、开放、完善的管理平台,放便了乘客的出行,大大节省了乘客的宝贵时间。
公交车信息c课程设计
公交车信息c课程设计一、课程目标知识目标:1. 让学生掌握公交车的基本信息,包括线路、站点、运营时间等。
2. 培养学生运用地图、公交查询工具等获取所需公交信息的能力。
3. 了解城市公共交通系统的基本构成及其在生活中的重要性。
技能目标:1. 培养学生通过观察、询问、搜索等途径获取公交车信息的能力。
2. 培养学生运用所学的公交信息,解决实际生活中的出行问题。
3. 提高学生的团队协作能力和问题解决能力。
情感态度价值观目标:1. 培养学生对公共交通的尊重和爱护,树立绿色出行意识。
2. 培养学生关注社会、关爱他人的情感,学会为他人提供帮助。
3. 培养学生积极向上的生活态度,认识到学习与生活的紧密联系。
课程性质:本课程为实践性课程,结合学生生活实际,通过实际操作和团队合作,培养学生获取和处理公交车信息的能力。
学生特点:考虑到学生所在年级,具备一定的信息获取和处理能力,对公共交通有一定了解,但实际操作能力有待提高。
教学要求:教师需结合学生特点,设计富有实践性和趣味性的教学活动,引导学生主动参与,提高学生的动手操作能力和问题解决能力。
同时,注重培养学生的情感态度价值观,使学生在学习过程中形成正确的价值观。
通过分解课程目标,为后续教学设计和评估提供依据。
二、教学内容1. 公交车的基本信息:介绍公交车的线路、站点、运营时间等,结合教材相关章节,让学生了解城市公共交通的基本情况。
2. 公交信息查询工具:讲解地图、公交查询APP等工具的使用方法,学会如何获取所需的公交车信息。
3. 实践活动:组织学生分组进行实地考察,收集公交车线路、站点等信息,并整理成报告。
4. 公交出行问题解决:针对实际生活中的公交出行问题,如线路选择、换乘等,引导学生运用所学知识进行分析和解决。
5. 绿色出行意识培养:结合教材内容,讲解公共交通对环境保护的重要性,引导学生树立绿色出行意识。
6. 团队协作与问题解决:通过实践活动,培养学生团队协作能力和问题解决能力。
《C#程序设计》课程设计-公交路线查询
《C#程序设计》课程设计公交路线查询系统㈠需求分析:随着现代社会的发展,交通也越来越发达,人们也开始不断的外出旅游,不管是市内还是市外对一个准确明了的交通路线需求越来越大,以前我们只能通过电话咨询、看地图、向路人打听来了解讯息,这不仅浪费精力财力时间,而且极为不方便。
在这样一个需求下,我们所设计的公交路线查询系统就产生了很大的价值,它能很方便的查询到公交路线,准确的告诉你从A到B该怎么去才最为快捷!这也是我们设计这个系统的初衷!1.功能需求首先我们系统最基本要满足顾客的需求就是公交路线的查询。
但是我们清楚的知道,死的列表将造成许多不便,因为路线会随着城市建设而变化,所以我们的路线是可以实时的去更新的,这样就牵扯到再数据库中的更新、删除功能,附带通过报表清楚的显示出来修改后的内容。
触发器功能实现公交路线中的一些数值计算,比如几站路等。
我们所要实现的就是站点查询、换车查询、线路查询。
2.数据需求数据库中包含管理者的账户密码。
公交路线数据(包括起始站到终点站的其间所有站点)。
3.性能需求客户需要的是一个快捷准确的查询系统,包括一次转车到达以及二次转车到达,不能有任何差错。
所以关于线路查询的C#程序语句要考虑周全不能有任何差池。
数据库中数据也需要其准确性。
㈡概要设计:设计思想:随着公路规模的不断扩大,公交数量的急剧增加,有关公交管理的各种信息量也在不断成倍增长。
面对庞大的信息量,就需要有公交信息管理系统来提公交房管理工作的效率。
通过这样的系统,我们可以做到信息的规范管理和快速查询,从而减少了管理方面的工作量。
目前,我国各省市的公交查询工作还未实现数字化。
整个过程既浪费能源又浪费资源。
最后导致浪费时间,无法按时到达目的地。
因此,开发一个能够对最新的公交线路进行查询的信息平台就显得尤其重要。
所开发的系统将在一定程度上能够克服以上的种种缺点,实现各项工作在线完成,为乘客提供一个完全公开、开放、完善的管理平台,放便了乘客的出行,大大节省了乘客的宝贵时间。
C语言开发的智能交通管理系统设计
C语言开发的智能交通管理系统设计智能交通管理系统是利用现代信息技术对城市道路交通进行智能化管理的系统,通过实时监测、数据分析和智能决策,提高交通运行效率,减少交通拥堵,改善交通环境。
本文将介绍如何利用C语言开发智能交通管理系统,包括系统架构设计、功能模块实现等内容。
1. 系统架构设计智能交通管理系统主要包括数据采集模块、数据处理模块、决策控制模块和用户界面模块四大部分。
数据采集模块负责采集道路交通信息,包括车辆数量、车速、车辆类型等数据。
数据处理模块对采集到的数据进行处理和分析,提取有用信息。
决策控制模块根据数据分析结果进行智能决策,如调整信号灯时长、引导车辆绕行等。
用户界面模块为用户提供友好的操作界面,展示交通信息和系统运行状态。
2. 功能模块实现2.1 数据采集模块数据采集模块可以利用传感器、摄像头等设备获取道路上的交通信息。
在C语言中,可以通过串口通信或网络编程实现与外部设备的数据交互。
例如,通过串口读取传感器数据,或通过网络接收摄像头传输的图像数据。
2.2 数据处理模块数据处理模块主要负责对采集到的原始数据进行处理和分析。
在C语言中,可以编写算法对车辆数量、车速等数据进行统计和分析。
同时,还可以利用数据结构如链表、树等存储和管理数据,提高处理效率。
2.3 决策控制模块决策控制模块根据数据处理结果进行智能决策。
在C语言中,可以编写决策算法实现自动调整信号灯时长、优化路线规划等功能。
同时,还可以结合实时性操作系统技术确保系统响应速度和稳定性。
2.4 用户界面模块用户界面模块为用户提供操作界面,展示交通信息和系统状态。
在C语言中,可以利用图形库如GTK+、Qt等实现GUI界面。
通过按钮、图表等元素展示交通信息,并提供操作接口供用户进行设置和查询。
3. 系统优化与扩展为了进一步提升智能交通管理系统的性能和功能,可以考虑以下优化与扩展方向:算法优化:对数据处理和决策算法进行优化,提高系统响应速度和准确性。
c语言课程设计公交路线
c语言课程设计公交路线一、教学目标本章节的教学目标旨在让学生掌握C语言编程基础,能够运用C语言实现简单的公交路线管理系统。
具体目标如下:1.知识目标:–了解C语言的基本语法和数据类型。
–掌握函数的定义和调用。
–理解指针的概念及其应用。
–熟悉结构体和文件操作。
2.技能目标:–能够编写简单的C语言程序。
–能够运用结构体设计公交路线数据结构。
–能够实现公交路线信息的增删改查功能。
–能够运用文件操作保存和读取公交路线信息。
3.情感态度价值观目标:–培养学生的编程兴趣,提高学生解决问题的能力。
–培养学生团队合作精神,激发学生创新意识。
二、教学内容本章节的教学内容主要包括以下几个部分:1.C语言基本语法和数据类型。
2.函数的定义和调用。
3.指针的概念及其应用。
4.结构体的使用和内存布局。
5.文件操作。
6.公交路线管理系统的实现。
三、教学方法为了达到本章节的教学目标,我们将采用以下教学方法:1.讲授法:讲解C语言的基本语法、数据类型、函数、指针、结构体和文件操作等知识点。
2.案例分析法:分析实际案例,让学生理解公交路线管理系统的实现原理。
3.实验法:让学生动手编写代码,实现公交路线管理功能。
4.讨论法:分组讨论,分享学习心得和解决问题的方法。
四、教学资源本章节的教学资源包括:1.教材:《C语言程序设计》。
2.参考书:《C语言 Primer》。
3.多媒体资料:PPT课件、教学视频。
4.实验设备:计算机、编程环境。
教学资源将用于支持教学内容和教学方法的实施,帮助学生更好地理解和掌握C语言编程,提高学生的编程能力。
五、教学评估本章节的教学评估将采用多元化的评估方式,以全面、客观地评价学生的学习成果。
评估方式包括:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
2.作业:布置相关的编程作业,评估学生的编程能力和对知识的掌握程度。
3.考试:期末进行笔试考试,测试学生对C语言编程知识的掌握情况。
公交路线查询系统(基于数据结构和C语言)
公交路线查询系统(基于数据结构和C语言)#include#include#include#include#define max 30#define len 20#define MAX 100typedef struct Linedot{//站int stopno;//站号char stopname[max];//站名struct Linedot *next;}linedot,*dot;typedef struct lineway{//线路int lineNo;//线路号int stopnum;//该线路上站的个数dot stop;//站}way;typedef struct lineNode{int linenum;//线路条数way data[len];//线路}line;typedef struct co_Node{int zhanNo;int busNo;struct co_Node *next;}co_node,*co_zhan;typedef struct Node{int firstbus;//始发车号char stopname[max];//站名co_zhan zhan;}node,*list;typedef struct zhanNode{int vexnum;//顶点数int arcnum;//弧数node vexs[max];//顶点}spot;typedef struct sqNode//定义双向队列{int data;struct sqNode *prior;struct sqNode *next;}sqnode,*sqlist;typedef struct//双向链队列类型{sqlist front;sqlist rear;}LQ;void initqueue(LQ *Q)//初始化队列{Q->front=Q->rear=new sqnode;Q->front->data=Q->rear->data=-1;Q->front->next=Q->rear->next=NULL; Q->front->prior=Q->rear->prior=NULL; }void enqueue(LQ *Q,int e)//进队{sqlist p;p=new sqnode;p->data=e;p->next=NULL;p->prior=Q->front;Q->rear->next=p;Q->rear=p;}void dequeue(LQ *Q,int *e)//出队{Q->front=Q->front->next;if(Q->front!=NULL)*e=Q->front->data;else*e=-1;}typedef struct stackNode//定义栈{int figuer;struct stackNode *next;}stacknode,*stack;void initstack(stack *S)//初始化栈{*S=NULL;}void push(stack *S,int e)//进栈{stack p;p=new stacknode;p->figuer=e;p->next=*S;*S=p;}int pop(stack *S,int *e)//出栈{stack p=*S;if(p==NULL){printf("栈空!\n");return 0;}*e=p->figuer;*S=(*S)->next;delete p;return 1;}void gettop(stack S,int *e)//得到栈顶{if(S==NULL){printf("栈空!\n");return;}*e=S->figuer;}int locate(spot C,char e[]){int i;for(i=0;i<c.vexnum;i++){if(strcmp(C.vexs[i].stopname,e)==0)return i;}if(i>C.vexnum){printf("Not found!\n");return -1;}}void init(FILE *fp,line *W,spot *C)//公交线路初始化{dot p,q;co_zhan R;int i,j,m,n,num;char vex1[max],vex2[max];if((fp=fopen("f.txt","r"))==NULL)//打开文件{printf("The file error!\n");getchar();exit(0);}fscanf(fp,"%d",&W->linenum);for(i=0;ilinenum;i++)fscanf(fp,"%d%d",&W->data[i].lineNo,&W->data[i].stopnu m);//输入线路号和该线路上站的个数for(i=0;ilinenum;i++){W->data[i].stop=NULL;for(j=0;jdata[i].stopnum;j++){p=new linedot;p->next=NULL;fscanf(fp,"%d%s",&p->stopno,p->stopname);//输入站名q=W->data[i].stop;if(!q)W->data[i].stop=p;else{while(q->next)q=q->next;</c.vexnum;i++)q->next=p;}}}fscanf(fp,"%d%d",&C->vexnum,&C->arcnum);for(i=0;ivexnum;i++){fscanf(fp,"%s%d",C->vexs[i].stopname,&C->vexs[i].firstbus); C->vexs[i].zhan=NULL;}for(i=0;iarcnum;i++){fscanf(fp,"%s%s%d",vex1,vex2,&num);m=locate(*C,vex1);n=locate(*C,vex2);R=new co_node;R->zhanNo=n;R->busNo=num;R->next=C->vexs[m].zhan;C->vexs[m].zhan=R;}}void search1(line W)//查询指定车次的线路及途经站点{dot p;int i,n,k=0;printf("请输入车次:");scanf("%d",&n);for(i=0;i<w.linenum;i++){if(W.data[i].lineNo==n){p=W.data[i].stop;while(p){if(k==0)printf("%s",p->stopname);elseprintf("->%s",p->stopname);p=p->next;k++;}}}}void search2(line W,spot C){int k,i;char vex[max];dot p;printf("请输入站点名:");scanf("%s",vex);k=locate(C,vex);if(C.vexs[k].firstbus!=0)printf("该站点的始发车有:%d\n",C.vexs[k].firstbus); elseprintf("该站无始发车!\n");printf("该站点的过路车有:");for(i=0;i<w.linenum;i++)p=W.data[i].stop;if(!p)continue;while(p){if(strcmp(p->stopname,vex)==0&&p!=W.data[i].stop) printf("%d ",W.data[i].lineNo);p=p->next;}}}int stackempty(stack S){if(S==NULL)return 1;return 0;}void updown(stack S,stack *S1){stack p;while(!stackempty(S)){p=new stacknode;p->figuer=S->figuer;p->next=*S1;*S1=p;S=S->next;}void printstack(spot C,stack S)//打印栈里的元素{stack S1,p;co_zhan q;initstack(&S1);updown(S,&S1);p=S1;while(p){ q=C.vexs[p->figuer].zhan;while(q){if(p->next==NULL)break;if(q->zhanNo!=p->next->figuer)q=q->next;elsebreak;}printf("%s-%d->",C.vexs[p->figuer].stopname,q->busNo); p=p->next;}}void printqueue(sqlist Q,spot C){sqlist p;stack S,S1;initstack(&S);initstack(&S1);p=Q;while(p->data!=-1){push(&S,p->data);p=p->prior;}updown(S,&S1);printstack(C,S1);}void search3(spot C,int s,int e) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line%d:",i++); printqueue(Q.front->prior,C); printf("%s\n",C.vexs[e].stopname);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL){if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1)enqueue(&Q,k);p=p->next;}}}void search4(spot C,int s,int e,LQ *Q,int visit[]){int u,k;co_z</w.linenum;i++)</w.linenum;i++)han p;if(!visit[s]){visit[s]=1;enqueue(Q,s);while(Q->front!=Q->rear){dequeue(Q,&u);p=C.vexs[u].zhan;if(u==e){printf("-->>Line:");printqueue(Q->front->prior,C); printf("%s\n",C.vexs[e].stopname); break;}while(p){k=p->zhanNo;if(!visit[k]){visit[k]=1;enqueue(Q,k);}}}}}int count(spot C,stack S,int e){int i,j,n=0,No=-1;stack p;co_zhan q;p=S;while(p){i=p->figuer;p=p->next;if(!p)break;j=p->figuer;q=C.vexs[i].zhan;while(q){if(q->zhanNo==j&&q->busNo!=No) {n++;No=q->busNo;break;}else}}return n-1;}void destroy(stack *S){stack p=*S;while(!stackempty(*S)){*S=(*S)->next;delete(p);p=*S;}}void savestack(stack S,stack *S2) {stack S1;initstack(&S1);updown(S,&S1);updown(S1,S2);}void change(sqlist Q,stack *S) {sqlist p;p=Q;while(p->data!=-1){push(S,p->data);p=p->prior;}}void search5(spot C,int s,int e,stack *S,stack *S2,int *m) {co_zhan p;int flag;LQ Q;sqlist q;int u,k,n1,n=MAX,i=1;initqueue(&Q);enqueue(&Q,s);while(Q.front!=Q.rear){dequeue(&Q,&u);p=C.vexs[u].zhan;if(u==e){change(Q.front,S);n1=count(C,*S,e);if(n1<n){savestack(*S,S2);n=n1;*m=n;}destroy(S);dequeue(&Q,&u);if(u==-1)break;p=C.vexs[u].zhan;}while(p){k=p->zhanNo;q=Q.front;while(q->prior!=NULL) {if(q->data!=k){q=q->prior;flag=1;}else{flag=0;break;}}if(k!=s&&flag==1) enqueue(&Q,k);p=p->next;}}}int menu(){int n;printf("*******************欢迎使用K城公交查询系统******************\n");printf("**************1.查询指定车次的线路及途经站点****************\n");printf("**************2.查询指定站点的始发车和过路车****************\n");printf("**************3.查询指定起点和终点所经的所有线路************\n");printf("**************4.查询指定起点和终点所经站点最少的线路********\n");printf("**************5.查询指定起点和终点换乘次数最少的乘车路线****\n");printf("**************0.退出****************************************\n");printf("******************************************************* *****\n");printf("-----起点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜门西/清华大学西门/圆明园/颐和园/香山\n");printf("-----终点站:电力大学/朱辛庄/北郊农场桥东/京昌路回龙观/北京师\n");printf(" 范大学/德胜</n)门西/清华大学西门/中关村/圆明园/颐和园\n");printf(" /西单\n");printf("-----公交线路:345/442/696/681/699/826\n");printf("******************************************************* *****\n");printf("请选择:");scanf("%d",&n);getchar();return n;}void main(){stack S,S2,S3;LQ Q;int n,m,i,s,e,k=1,visit[len],u; char ch='Y',start[max],end[max]; FILE *fp;line W;spot C;init(fp,&W,&C);do{n=menu();switch(n){case 1:search1(W);break;case 2:search2(W,C);break; case 3:for(i=0;i<len;i++)visit[i]=0;initstack(&S);printf("请输入起点和终点:"); scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的所有路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search3(C,s,e);break;case 4:for(i=0;i<len;i++)visit[i]=0;initqueue(&Q);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最短路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search4(C,s,e,&Q,visit);break;case 5:initstack(&S);initstack(&S2);initstack(&S3);printf("请输入起点和终点:");scanf("%s%s",start,end);s=locate(C,start);e=locate(C,end);printf("%s到%s的最少换乘路线如下:\n",C.vexs[s].stopname,C.vexs[e].stopname);search5(C,s,e,&S,&S2,&m);updown(S2,&S3);pop(&S3,&u);printf("-->>Line:");printstack(C,S3);printf("%s\n",C.vexs[e].stopname); printf("共换乘%d次\n",m);break; case 0:exit(0);break;default:printf("error!\n");}getchar();printf("\n继续吗?Y/N:");scanf("%c",&ch);}while(ch=='Y'||ch=='y');}</len;i++)</len;i++)。
C语言课程设计——简易公交车管理系统
#include ""#include ""#include ""#include ""/**************************函数声明************************************/void init(); .\n");fp=fopen("","w"); um!='\0')continue;else{printf("\n添加第%d辆公交车路线记录:\n",i+1);printf("\n请输入路线编码(3位编码,第一位为大写字母,后两位为数字):\n"); um,cc)==0){printf("\n与已有路线编码重复,按回车键返回!!!\n");fflush(stdin); um,cc);printf("\n请输入司机姓名: "); ame);printf("\n请输入途径站台总数(>=2):"); ;printf("\n");if(a[i].n<2||a[i].n>12){while(a[i].n<2||a[i].n>12){printf("\n站台总数应满足(2<=n<=12),请重新输入: ");scanf("%d",&a[i].n);printf("\n");}}for(j=0;j<a[i].n;j++){printf("请输入第%d个站台名称: ",j+1);[j].c);}printf("\n自动生成公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++){printf(" ----> (%d) %s",j+1,a[i].b[j].c);}printf("\n\n请输入公交车的起始时间(格式为:时:分): "); open);printf("请输入公交车的终止时间(格式为:时:分): "); close);printf("\n请输入公交车的票价: "); oney);printf("\n第%d辆公交车路线记录创建成功!!!\n",i+1);save();printf("\n\t按回车键返回!!!\n");fflush(stdin); um!='\0'&&i<N;i++) um!='\0'&&j<N;j++)if(strcmp(a[i].num,a[j].num)>0)min=j;t=a[i];a[i]=a[min];a[min]=t;}printf("\n\n 公交车信息库");printf("\n********************************************************************************\n");for(i=0;*a[i].num!='\0'&&i<N;i++){printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n********************************************************************************\n");printf("\n\t\t公交车信息显示完毕!!!\n");printf("\n\t\t输入回车键返回主菜单:");fflush(stdin); um!='\0'&&i<N;i++) um,cc)==0) {m=1;printf("\n\n\t\t已找到!!!\n");while(1){system("cls");printf("\n\n 正在修改的公交车信息\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");modmeun();fflush(stdin); um!='\0'&&k<N;k++){if(strcmp(a[k].num,mod)==0){printf("与已有编号重复,按回车键返回主菜单\n");fflush(stdin);um,mod);save();break;}case '2': ame);printf("\n请输入新的公交车票价:");scanf("%d",&a[i].money);save();break;}case '3': +1>12) +1<k){printf("目前共%d个站点,无法添加第%d个站点\n请重新输入:",a[i].n,k);scanf("%d",&k);printf("\n");}a[i].n=a[i].n+1;for(j=a[i].n;j>k-1;j--){a[i].b[j]=a[i].b[j-1];}printf("\n请输入新添加的站点名称:");scanf("%s",a[i].b[k-1].c);save();break;}case '2': [k-1].c);save();break;}case '3': ;j++){a[i].b[j]=a[i].b[j+1];}a[i].n=a[i].n-1;save();break;}case '4': ;printf("\n");while(a[i].n<2||a[i].n>12) ;printf("\n");}for(j=0;j<a[i].n;j++){printf("请输入新的第%d个站台名称:",j+1);scanf("%s",a[i].b[j].c);}printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");save();break;}case '5': open);printf("请输入公交车的终止时间(格式为:时:分): ");scanf("%s",a[i].tclose);save();break;}case '5':{printf("\n\t\t按回车键返回主菜单\n");fflush(stdin);um!='\0'&&i<N;i++) um,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("即将删除该公交车信息!!!\n确定请按1:");scanf("%d",&t);if(t==1){if(i+1==N)memset(&a[i],'\0',sizeof(struct bus));um!='\0'&&j+1<N;j++) um!='\0'&&i<N;i++){for(j=0;j<a[i].n;j++)for(k=j+1;k<a[i].n;k++)if(strcmp(a[i].b[j].c,c1)==0&&strcmp(a[i].b[k].c,c2)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t\t\t\t显示完毕\n");if(m==0)printf("\n\n\t\t\t\t抱歉,无途径此路线的公交车\n");printf("\n\t\t\t\t输入回车键返回查询菜单:");fflush(stdin); um!='\0'&&i<N;i++){if(strcmp(a[i].num,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");break;}}if(m==0)printf("\n\t\t无此公交车信息\n");printf("\n\t\t输入回车键返回查询菜单:");fflush(stdin); um!='\0'&&i<N;i++){if(strcmp(a[i].b[0].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '2':{printf("请输入您所要查询的终止站台名称:\n");scanf("%s",cc);printf("\n以%s为终止站台的公交车如下:\n",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){k=a[i].n;if(strcmp(a[i].b[k-1].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '3':{printf("请输入您所要查询的途径站台名称:\n");scanf("%s",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++)for(k=1;k<a[i].n-1;k++)if(strcmp(a[i].b[k].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机姓名: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为途径站台\n");break;}case '4':{printf("\n\t\t按回车键返回查询菜单\n");fflush(stdin); um!='\0'&&i<N;i++) //将内存中的数据输出到磁盘中if(fwrite(&a[i],sizeof(struct bus),1,fp)!=1)break;printf("\n\t保存成功!!!\n");fclose(fp);return;}void mainmeun() //主菜单{printf("\n\t\t 主菜单");printf("\n\t\t****************************************");printf("\n\t\t* 1、信息录入 *");printf("\n\t\t* 2、信息显示 *");printf("\n\t\t* 3、信息修改 *");printf("\n\t\t* 4、信息删除 *");printf("\n\t\t* 5、信息查询 *");printf("\n\t\t* 6、退出系统 *");printf("\n\t\t****************************************");printf("\n\n\t\t\t请输入您的选择:");}//菜单输入检测函数char Test(char a,char b,char c){while(a<b||a>c){printf("\n\t\t\t输入错误,请重新输入: ");fflush(stdin); //清除键盘缓冲区a=getchar();}return a;}。
公交信息查询系统C语言
《c语言程序设计》课程设计报告公交信息查询系统院系:信息技术学院专业:运算机科学与技术1.题目:公交信息查询系统1.题目的描述设计简单的公交信息查系统,要求有简单的界面,该程序应该有以下功能:查询公交车的线路;查询停泊站点信息;查询任意两点之间可搭车辆;显示公交线路图(选作);2.算法设计/设计思想构建子函数gjlx(),实现线路的查询及输入其对应的线路功能;调入函数m()中。
在函数ma( )构建子函数gjjg( ),通过函数间的挪用实现公交站点信息查询功能构建子函数JIKE3();实现输入任意两个站点就可显示通过他的车号及无直接车的转车的车号。
用到textbackground();函数对背景颜色修改。
构建init()函数,在函数JIKE4()中挪用,挪用到系统图形函数outtextxy();closegrap();line();setcolor();rectangle();drawpoly();init();图形初始化函数;outtextxy();在自定的点输出函数;closegraph();返回文本模式函数;line();画直线函数;setcolor();设制图形背景颜色hans;rrectangle();画矩形函数;drawpoly();画多边形函数;构建主函数main();switch();函数挪用JIKE3();m();JIKE4();ma();及退出函数exit ();3.结构框图,各模块功能描述。
第一模块,构建子函数gjlx(),实现线路的查询及输入其对应的线路功能;调入函数m()中。
第二模块,在函数ma( )构建子函数jggj( ),通过函数间的挪用实现公交站点信息查询功能m()函数为进入第二模块时选择菜单;第三模块,构建子函数JIKE3();实现输入任意两个站点就可显示通过他的车号及无直接车的转车的车号。
用到textbackground();函数对背景颜色修改。
第四模块,构建init()函数,在函数JIKE4( )中挪用JIKE4( ) 函数功能是显示地图构建主函数main();用switch()函数挪用JIKE3();m();JIKE4();ma();退出函数exit();main();函数功能是显示进入时的选择菜单;主菜单第一模块,查询公交线路,依照地提示进入选择菜单;输入要查询的车号确认即可显示出信息。
C语言课程设计——简易公交车管理系统(数组实现)
/**************************头文件声明************************************/#include "stdio.h"#include "stdlib.h"#include "string.h"#include "conio.h"/**************************函数声明************************************/void init(); //初始化函数void add(); //信息录入函数void view(); //信息显示函数void mod(); //信息修改函数void modmeun(); //修改菜单void modnavimeun(); //路线修改菜单void del(); //信息删除函数void find(); //信息查询函数void findmeun(); //查询菜单void findnavi(); //路线导航查询函数void findnum(); //路线编号查询函数void findstameun(); //站台信息查询菜单void findsta(); //站台信息查询函数void save(); //信息保存函数void mainmeun(); //主菜单char Test(char a,char b,char c); //菜单输入检测函数/**************************宏定义声明************************************/ #define N 100 //公交车数量/**************************结构体定义************************************/ struct station //途径站点信息{char c[20]; //站点名称};struct bus //公交车信息{char num[20]; //公交车路线编号char name[20]; //司机int n; //站台数目struct station b[12]; //站台名称char topen[20]; //起始时间char tclose[20]; //终止时间int money; //票价}a[N];/**************************函数定义************************************/int main(){char a;init();printf("\n\t\t目前所能录入的公交车数量上限为 %d 辆\n\n",N);printf("\n\t\t输入回车键继续\n");fflush(stdin); //清除键盘缓冲区while(1){system("cls");mainmeun();a=Test(getchar(),'1','6'); //菜单检测输入函数switch(a){case '1': system("cls"); add(); break;case '2': system("cls"); view(); break;case '3': system("cls"); mod(); break;case '4': system("cls"); del(); break;case '5': system("cls"); find(); break;case '6': return 0;}}return 0;}void init() //初始化函数{FILE *fp; //文件指针int i;if((fp=fopen("bus.txt","r+"))==NULL) //初次尝试打开"bus.txt"文本文件{printf("\n\t\t文件打开失败\n\n\t\t正在尝试创建新文件...\n");fp=fopen("bus.txt","w"); //创建"bus.txt"文本文件if((fp=fopen("bus.txt","r+"))==NULL) //再次判断是否打开成功{printf("\t\t文件创建失败!!!\n");return;}}fp=fopen("bus.txt","r+");for(i=0;i<N;i++) //将磁盘中的信息输出到存中if(fread(&a[i],sizeof(struct bus),1,fp)!=1)break;fclose(fp);printf("\n\t\t初始化完成!!!\n\n");return;}void add() //信息录入函数{FILE *fp=NULL; //文件指针int i,j;char cc[20];for(i=0;i<N;i++){if(*a[i].num!='\0')continue;else{printf("\n添加第%d辆公交车路线记录:\n",i+1);printf("\n请输入路线编码(3位编码,第一位为大写字母,后两位为数字):\n"); //路线编码scanf("%s",cc);for(j=0;j<N;j++) //检验是否重复if(strcmp(a[j].num,cc)==0){printf("\n与已有路线编码重复,按回车键返回!!!\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}strcpy(a[i].num,cc);printf("\n请输入司机: ");//司机scanf("%s",a[i].name);printf("\n请输入途径站台总数(>=2): "); //站台总数scanf("%d",&a[i].n);printf("\n");if(a[i].n<2||a[i].n>12){while(a[i].n<2||a[i].n>12){printf("\n站台总数应满足(2<=n<=12),请重新输入: ");scanf("%d",&a[i].n);printf("\n");}}for(j=0;j<a[i].n;j++){printf("请输入第%d个站台名称: ",j+1); //站台名称scanf("%s",a[i].b[j].c);}printf("\n自动生成公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++){printf(" ----> (%d) %s",j+1,a[i].b[j].c);}printf("\n\n请输入公交车的起始时间(格式为:时:分): "); //起始时间scanf("%s",a[i].topen);printf("请输入公交车的终止时间(格式为:时:分): "); //终止时间scanf("%s",a[i].tclose);printf("\n请输入公交车的票价: "); //票价scanf("%d",&a[i].money);printf("\n第%d辆公交车路线记录创建成功!!!\n",i+1);save();printf("\n\t按回车键返回!!!\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}}if(i==N)printf("\n\n\n\t空间已满,不能录入!!!\n");printf("\n\t按回车键返回!!!\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void view() //信息显示函数{int i,j,min;struct bus t;for(i=0;*a[i].num!='\0'&&i<N;i++) //按“路线编号”用选择法排序{min=i;for(j=i+1;*a[j].num!='\0'&&j<N;j++)if(strcmp(a[i].num,a[j].num)>0)min=j;t=a[i];a[i]=a[min];a[min]=t;}printf("\n\n 公交车信息库");printf("\n**************************************************************** ****************\n");for(i=0;*a[i].num!='\0'&&i<N;i++){printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n**************************************************************** ****************\n");printf("\n\t\t公交车信息显示完毕!!!\n");printf("\n\t\t输入回车键返回主菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void mod() //信息修改函数{int i,j,m=0;char t,cc[20],mod[20];printf("请输入要修改信息的公交车路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++) //查找所输入的公交车{if(strcmp(a[i].num,cc)==0){m=1;printf("\n\n\t\t已找到!!!\n");while(1){system("cls");printf("\n\n 正在修改的公交车信息\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");modmeun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','5'); //菜单检测输入函数system("cls");switch(t){case '1': //修改路线编号{int k;printf("\n请输入新的公交车编号:");scanf("%s",mod);for(k=0;*a[k].num!='\0'&&k<N;k++){if(strcmp(a[k].num,mod)==0){printf("与已有编号重复,按回车键返回主菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}}strcpy(a[i].num,mod);save();break;}case '2': //修改车辆信息{printf("\n请输入新的司机:");scanf("%s",a[i].name);printf("\n请输入新的公交车票价:");scanf("%d",&a[i].money);save();break;}case '3': //修改行车路线{void modnavimeun(); //路线修改菜单int k;char z;while(1){system("cls");modnavimeun();fflush(stdin); //清除键盘缓冲区z=Test(getchar(),'1','5'); //菜单检测输入函数system("cls");switch(z){case '1': //添加站点{if(a[i].n+1>12) //判断是否满足条件{printf("\n站台总数达到12个,无法添加新站点\n\n按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}printf("\n请输入需要添加第几个站点:");scanf("%d",&k);while(a[i].n+1<k){printf("目前共%d个站点,无法添加第%d个站点\n请重新输入:",a[i].n,k);scanf("%d",&k);printf("\n");}a[i].n=a[i].n+1;for(j=a[i].n;j>k-1;j--){a[i].b[j]=a[i].b[j-1];}printf("\n请输入新添加的站点名称:");scanf("%s",a[i].b[k-1].c);save();break;}case '2': //修改站点{printf("\n请输入需要修改第几个站点:");scanf("%d",&k);printf("\n请输入新的站点名称:");scanf("%s",a[i].b[k-1].c);save();break;}case '3': //删除站点{printf("\n请输入需要删除第几个站点:");scanf("%d",&k);for(j=k-1;j<a[i].n;j++){a[i].b[j]=a[i].b[j+1];}a[i].n=a[i].n-1;save();break;}case '4': //重置路线{printf("\n请输入新的途径站台总数(2<=n<=12): ");scanf("%d",&a[i].n);printf("\n");while(a[i].n<2||a[i].n>12) //判断是否满足条件{printf("\n站台总数应满足(2<=n<=12),请重新输入: ");scanf("%d",&a[i].n);printf("\n");}for(j=0;j<a[i].n;j++){printf("请输入新的第%d个站台名称:",j+1);scanf("%s",a[i].b[j].c);}printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");save();break;}case '5': //返回菜单{printf("\n\t\t按回车键返回菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}}}}case '4': //修改行车时间{printf("\n\n请输入公交车的起始时间(格式为:时:分): ");scanf("%s",a[i].topen);printf("请输入公交车的终止时间(格式为:时:分): ");scanf("%s",a[i].tclose);save();break;}case '5':{printf("\n\t\t按回车键返回主菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}}}}}if(m==0)printf("\n\n\t\t无此公交车信息!!!\n");printf("\n\t\t按回车键返回\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void modmeun() //修改菜单{printf("\n\t\t 修改菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、修改路线编号 *");printf("\n\t\t* 2、修改车辆信息 *");printf("\n\t\t* 3、修改行车路线 *");printf("\n\t\t* 4、修改行车时间 *");printf("\n\t\t* 5、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void modnavimeun() //路线修改菜单{printf("\n\t\t 路线修改菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、站点添加 *");printf("\n\t\t* 2、站点修改 *");printf("\n\t\t* 3、站点删除 *");printf("\n\t\t* 4、路线重置 *");printf("\n\t\t* 5、返回菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void del() //信息删除函数{int i,j,t,m=0;char cc[20];printf("\n请输入要删改信息的公交车路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++) //查找所输入的公交车{if(strcmp(a[i].num,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("即将删除该公交车信息!!!\n确定请按1:");scanf("%d",&t);if(t==1){if(i+1==N)memset(&a[i],'\0',sizeof(struct bus)); //最后一辆直接进行清空elsefor(j=i;*a[j].num!='\0'&&j+1<N;j++) //后面的公交车信息补上删去的公家车信息a[j]=a[j+1];printf("编号为%s的公交车信息删除完毕!\n",cc);save();break;}}}if(m==0)printf("\n\n\t\t无此公交车信息!!!\n");printf("\n\n\t输入回车键返回主菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void find() //信息查询函数{char t;while(1){findmeun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','4'); //菜单检测输入函数switch(t){case '1': system("cls"); findnavi();break; //路线导航查询case '2': system("cls"); findnum();break; //路线编号查询函数case '3': system("cls"); findsta();break; //站台信息查询函数case '4': system("cls"); return; //返回主菜单}}return;}void findmeun() //查询菜单{printf("\n\t\t 查询菜单 ");printf("\n\t\t********************************************");printf("\n\t\t* 1、路线导航查询 *");printf("\n\t\t* 2、路线编号查询 *");printf("\n\t\t* 3、站台信息查询 *");printf("\n\t\t* 4、返回到主菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void findnavi() //路线导航查询函数{int i,j,k,m=0;char c1[20],c2[20];printf("请输入您目前所在的站点:\n\t\t");scanf("%s",c1);printf("请输入您想要前往的站点:\n\t\t");scanf("%s",c2);printf("\n\n您可选择的公交车信息如下\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){for(j=0;j<a[i].n;j++)for(k=j+1;k<a[i].n;k++)if(strcmp(a[i].b[j].c,c1)==0&&strcmp(a[i].b[k].c,c2)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t\t\t\t显示完毕\n");if(m==0)printf("\n\n\t\t\t\t抱歉,无途径此路线的公交车\n");printf("\n\t\t\t\t输入回车键返回查询菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void findnum() //路线编号查询函数{int i,j,m=0;char cc[20];printf("请输入您想要查找的公交路线编号:\n");scanf("%s",cc);for(i=0;*a[i].num!='\0'&&i<N;i++){if(strcmp(a[i].num,cc)==0){m=1;printf("\n已找到:\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");break;}}if(m==0)printf("\n\t\t无此公交车信息\n");printf("\n\t\t输入回车键返回查询菜单:");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return;}void findstameun() //站台信息查询菜单{printf("\n\t\t 站台信息查询菜单");printf("\n\t\t********************************************");printf("\n\t\t* 1、起始站台查询 *");printf("\n\t\t* 2、终止站台查询 *");printf("\n\t\t* 3、途径站台查询 *");printf("\n\t\t* 4、返回查询菜单 *");printf("\n\t\t********************************************");printf("\n\n\t\t请输入您的选择:");}void findsta() //站台信息查询函数{int i,j,k;char t;char cc[20];while(1){int m=0;findstameun();fflush(stdin); //清除键盘缓冲区t=Test(getchar(),'1','4'); //菜单检测输入函数system("cls");switch(t){case '1':{printf("请输入您所要查询的起始站台名称:\n");scanf("%s",cc);printf("\n以%s为起始站台的公交车如下:\n",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){if(strcmp(a[i].b[0].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '2':{printf("请输入您所要查询的终止站台名称:\n");scanf("%s",cc);printf("\n以%s为终止站台的公交车如下:\n",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++){k=a[i].n;if(strcmp(a[i].b[k-1].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为起始站台\n");break;}case '3':{printf("请输入您所要查询的途径站台名称:\n");scanf("%s",cc);printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n");for(i=0;*a[i].num!='\0'&&i<N;i++)for(k=1;k<a[i].n-1;k++)if(strcmp(a[i].b[k].c,cc)==0){m=1;printf("\n");printf("\t路线编号: %-6s\t单程票价: %d 元\t\t司机: %s\n",a[i].num,a[i].money,a[i].name);printf("\t起始时间: %-6s\t终止时间: %-6s\t站台总数: %d\n",a[i].topen,a[i].tclose,a[i].n);printf("\t公交路线:(1) %s",a[i].b[0].c);for(j=1;j<a[i].n;j++)printf(" ---->(%d) %s",j+1,a[i].b[j].c);printf("\n\n");}printf("\n- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \n\n");printf("\t已全部显示完毕!!!\n");if(m==0)printf("\n\t没有公交车以该站点为途径站台\n");break;}case '4':{printf("\n\t\t按回车键返回查询菜单\n");fflush(stdin); //清除键盘缓冲区getchar();system("cls");return; //返回主菜单}fflush(stdin); //清除键盘缓冲区getchar();system("cls");}}return;}void save() //信息保存函数{FILE *fp=NULL;int i;if((fp=fopen("bus.txt","w+"))==NULL) //以读写的方式打开名称为"bus"的文本文件{printf("文件打开错误!!!\n");return;}fp=fopen("bus.txt","w+");for(i=0;*a[i].num!='\0'&&i<N;i++) //将存中的数据输出到磁盘中if(fwrite(&a[i],sizeof(struct bus),1,fp)!=1)break;printf("\n\t保存成功!!!\n");fclose(fp);return;}void mainmeun() //主菜单{printf("\n\t\t 主菜单");printf("\n\t\t****************************************");printf("\n\t\t* 1、信息录入 *");printf("\n\t\t* 2、信息显示 *");printf("\n\t\t* 3、信息修改 *");printf("\n\t\t* 4、信息删除 *");printf("\n\t\t* 5、信息查询 *");printf("\n\t\t* 6、退出系统 *");printf("\n\t\t****************************************");printf("\n\n\t\t\t请输入您的选择:");}//菜单输入检测函数char Test(char a,char b,char c){while(a<b||a>c){printf("\n\t\t\t输入错误,请重新输入: ");fflush(stdin); //清除键盘缓冲区a=getchar();}return a;}。
c语言课程设计交通
c语言课程设计交通一、教学目标本章节的教学目标分为三个部分:知识目标、技能目标和情感态度价值观目标。
1.知识目标:通过本章节的学习,学生需要掌握C语言的基本语法、数据类型、运算符、控制结构等基础知识。
2.技能目标:学生能够运用C语言编写简单的交通管理系统,实现对车辆信息的增删查改功能。
3.情感态度价值观目标:培养学生对编程语言的兴趣,提高学生解决问题的能力,培养学生的创新思维。
二、教学内容本章节的教学内容主要包括以下几个部分:1.C语言的基本语法和数据类型。
2.运算符和控制结构。
3.函数的定义和调用。
4.文件的读写操作。
5.交通管理系统的实现。
三、教学方法为了提高教学效果,本章节将采用多种教学方法:1.讲授法:讲解C语言的基本语法、数据类型、运算符和控制结构等知识点。
2.案例分析法:通过分析实际的交通管理系统案例,让学生理解并掌握如何运用C语言解决实际问题。
3.实验法:让学生动手编写交通管理系统,提高学生的实际操作能力。
4.讨论法:在课堂上学生进行讨论,促进学生之间的交流与合作。
四、教学资源为了支持教学内容的实施,我们将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《C语言编程实例教程》。
3.多媒体资料:交通管理系统的案例视频、演示文稿等。
4.实验设备:计算机、网络等。
通过以上教学资源的支持,为学生提供丰富的学习体验,提高教学效果。
五、教学评估本章节的评估方式包括以下几个方面:1.平时表现:通过学生在课堂上的参与度、提问回答、小组讨论等表现来评估。
2.作业:布置相关的编程作业,评估学生对C语言知识的掌握程度和运用能力。
3.考试:进行期末考试,包括选择题、填空题、编程题等,全面评估学生的学习成果。
评估方式应客观、公正,能够全面反映学生的学习成果。
通过评估,及时发现学生的不足,给予针对性的指导和帮助。
六、教学安排本章节的教学安排如下:1.教学进度:按照教材的章节顺序进行教学,确保学生系统地掌握C语言知识。
公交公司管理课程设计---+公交公司管理系统
公交公司管理课程设计-—- 公交公司管理系统*******************实践教学*******************2011年秋季学期面向对象语言课程设计题目:公交公司管理系统专业班级:计算机科学与技术二班姓名: 冯宝义学号: 10240216指导教师:李明成绩:1目录摘要。
...。
..。
..。
.。
.。
...。
.。
..。
.。
.。
...。
.。
...。
...。
.。
..。
.....。
.。
.。
..。
.。
.。
..。
.。
..。
.....。
...。
.....。
..。
..。
.3 序言 ..。
..。
....。
.。
....。
.....。
....。
.。
.。
..。
..。
.。
...。
....。
..。
....。
......。
..。
.。
..。
.。
.. .。
.。
.。
.。
..。
. 4 正文 .。
.。
..。
....。
...。
...。
.。
...。
.....。
..。
..。
.。
.。
.。
..。
..。
..。
....。
...。
..。
.。
...。
.。
....。
..。
.。
..。
.。
..。
.。
.. 5 1. 问题描述 ..。
....。
.。
.。
...。
...。
.。
..。
.。
..。
....。
.。
..。
.。
.。
...。
.。
.。
..。
.。
.....。
..。
..。
.。
..。
.。
5 2. 系统总体设计。
.。
....。
....。
.。
......。
..。
..。
.......。
..。
...。
. .。
.。
..。
..。
..。
.。
...。
..。
..。
..。
5 3。
详细设计 .....。
.。
..。
..。
.。
...。
.。
.。
..。
.。
.。
.。
..。
.。
.。
.。
.。
....。
.。
..。
..。
..。
........。
.。
7 4。
程序调试与测试 ...。
.。
.。
..。
.。
.。
.。
..。
.。
.。
.。
..。
...。
. .。
.........。
..。
.。
.。
.。
.。
...。
.。
....。
. 7 5。
结果分析。
.。
.。
....。
.。
.。
.。
.。
...。
.....。
.....。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
合肥学院计算机科学与技术系课程设计报告2011 ~2012 学年第二学期课程面向过程综合设计课程设计名称公交路线管理系统学生姓名学号**********专业班级指导教师2012 年6 月一、设计思想我的系统主要功能是实现对公交路线的查询管理和维护。
众所周知,公交车在每一个城市中都有着非常大的作用,几乎每个市民都要用到公交车。
以及公交车的路线经常会有所改动。
因此如果使用我的这个系统,就可以及时的对路线信息进行修改和保存可以很好地满足市民的查询,方便人民的生活。
而且该系统使用起来也很方便。
用户只需根据显示的提示信息进行选择和输入就可以实现你要求的功能查询到你需要的信息。
本系统具有显示路线信息、添加线路信息、删除线路信息、修改线路信息、查询信息的功能。
用户们可以根据自己所需要的情况进行相应的功能选择,得到自己所需要的信息。
其具体功能简单描述如下:(1)显示路线信息:即将路线信息显示到屏幕中,供用户查看。
该功能比较简单,在这里不具体说明。
(2)添加路线信息:即添加一条新的公交路线或者是某一条路线上的站点。
每次可以添加一条路线信息,若用户想添加多条路线信息的话可以重复执行该功能,同样的,添加站点的话也是每一次添加一个站点,若用户想添加多条路线信息的话也只需要重复执行该功能即可。
这样,就实现了对公交路线的添加信息管理。
(3)删除路线信息:即能删除掉一条你所不需要的公交路线信息和某一条路线上的站点。
若要删除路线时只需要输入你要删除的公交路线号即可,若要删除站点也只需输入你要删除的站点序号,不需要输入该站点名称。
(4)修改路线信息:即能修改一条你需要该的路线信息。
修改内容包括:修改该条公交路线号、修改站点名称(输入新的信息时该条路线的站点长度不能改变,若要改变站点长促可以选择增加和删除功能,即可实现)。
(5)查询路线信息:即能够查找出你要的公交路线信息和总共有多少站。
简单地说,就是用户先选择你要查询的公交路线号,在输入起点站和终点站名称,然后系统就会自动显示出起点站和终点站之间共有多少站点,以及起点站和终点站之间所有站点的序号和名称,从而使用户一目了然的知道站点信息,而不需要像看地图那样一个站点一个站点的用肉眼进行查找,这就为用户节省了很多时间。
(6)保存信息:即将信息存入指定文件中。
当用户对原始数据进行相关的改动(主要是对路线信息进行增加、删除、修改)之后,用户可以根据自己的选择判断是否要保存到文件中,这样就实现了信息的记录功能,以方便用户随时进行查看。
二、设计表示1、程序的设计方法:我的系统的设计流程还是比较简单,原始数据全部都被保存在busline.txt文件中,用户就不必自己一个一个的输入信息。
程序执行时从文件中读出,该程序中用到结构体,因为结构体可以很好地表示公交车站台名。
写无返回值的主函数void main()和子函数void MENU()菜单函数对系统的功能进行显示,每次用户选择某一功能时都可以看到路线的大致信息,以便于用户更准确的选择功能。
其中利用switch条件分支语句进行子函数功能的选择和调用。
并且使用while循环语句进行多次循环执行,就可以实现对信息的多次删除、增加、修改和查询,直到达到用户满意时由用户自己选择退出系统。
同时我的程序还使用了清屏函数,对上一次程序运行的结果清楚只显示本次运行的相关信息,这样就可以使界面更加美观,简单明了,当用户对信息进行有关的改动之后,用户根据自己的选择是否保存入文件中,就可以保存他所要的信息了。
程序设计的主要流程图如下:2、程序的设计步骤:以下是我对本程序的每个模块的详细介绍:一:主函数构建无返回值的主函数,主函数用来实现对子模块的调用功能,用while循环语句来控制循环次数,用户可以根据自己的需求选择任何时候退出系统。
对子模块的调用主要使用switch开关控制语句,根据选择实现用户要求的功能。
二:头文件,定义结构体,结构体中还嵌套了一个结构体,定义结构体成员,,其对整个程序都有效。
三:显示菜单显示该系统所能完成的功能,其中包括:显示路线信息、增加线路信息、删除路线信息、修改路线信息、查询路线信息、将信息保存带文件中和退出功能一目了然。
根据用户的需求自由选择功能实现。
四:从文件中读取线路信息该功能以子函数的形式给出,执行此程序时首先定义文件指针FILE *fp,在打开此文件时,文本文档里应该有用户需要的数据,从而才能从文件中正确读取出来,若文件打开不成功则会显示“不能打开此文件!”。
读取结束后必须要关闭文件,即fclose(fp),这样就完成了从文件中读取信息的功能。
五:在窗口中显示路线信息该功能以子函数的形式给出,无返回值。
向窗口中读入线路信息。
六:增加线路信息。
这个模块,包括了增加线路和增加站台数两种情况。
如果你选择增加公交路线,你需要输入新的公交车的车牌号,和新公交车经过的站台。
如果你增加站台,你要输入正确的公交车的车牌号,然后你就可以增加站台了。
该子函数虽然没有用到链表,但也是有着严谨的结构。
功能齐全。
实现了对公交路线信息的增加。
七:删除线路信息。
这个模块,包括了删除线路和删除站台数两种情况。
如果你选择删除公交路线,你需要输入要删除的公交车的车牌号,以及你要删除的站台信息。
如果你只想删除站台,你只要输入正确的公交车的车牌号,然后你就可以输入要删除的站台信息了。
该子函数虽然没有用到链表,但也是有着严谨的结构。
功能齐全。
实现了对公交路线信息的增加。
八:修改线路信息同上分析,该子函数也是一个无返回值的函数,修改时,先确定你要修改哪条路线,,在重新输入新的信息即可,新输入的信息会覆盖原有信息,所以可以实现对线路进行修改。
九:查询路线信息该子函数是一个无返回值的函数。
使用时先输入你要找的路线号,再输入你要经历的起点站和终点站,程序就会为你显示出起点站和终点站之间共有多少站,并且输出起点站和终点站之间所有站序号和站点名称。
十:将信息保存到文件中。
当用户对原始路线信息进行改动之后,或许要将修改过后的信息保存起来,此时用户就可以自己选择是否要将信息保存起来,保存的位置是本系统实现设定好的,保存之后的信息在busline2.txt下,也方便用户的查看。
3、实现注释:本系统对于菜单显示表上的功能基本上都能实现,但是不是很完善,很多地方我还没有考虑到,或许是考虑的不够周全,但是有些不足的地方,是我的能力所不能达到的,还希望老师能够谅解,不过等以后学过新的知识用新的方法或许就能将系统做进一步的改进。
4、程序的缺点:我觉得本系统很不完善,很多功能虽然能实现,特别是链表没有太多的应用,但是实现的不够完美,很多细节我都没有考虑到,比如查询路线时,不能大致故略出起点站和终点站需要的时间;修改路线信息时,重新输入该条路线的信息时,路线上站点的个数不能改变,要改变的话还得选择增加或删除功能;还有就是用户将改动过后的信息保存到文件中后,以后该文件中的数据用户如果要使用的话,不能从文件中读取显示到屏幕上。
这些都是我的系统一些不完善的地方,希望以后有能力的时候,能进一步对系统进行修改和完善。
三、用户手册用户根据窗口上的提示信息输入想要的目的,其中包括显示信息,增加信息,删除信息,查询信,保存信息,退出,这些功能的实现分别是按键1到7,当用户输入信息时如果输入错误,则会有错误提示。
直到用户输入正确。
如果用户想保存信息,信息将保存在busline2.txt中。
用户可以进行查询。
三、调试及测试1、文本中的信息如下:90112 1 abc 2 薛河 3 张小郢 4 晨风苑 5 bcd 6 江淮 7 南七里 8 中国科技大学 9 安医附院 10 稻香楼 11 廻龙桥 12 飞凤街2313 1 博物馆 2 市一院 3 百花井 4 逍遥津 5 大东门 6 金大塘 7 三里街 8 铜陵北路 9 五里井 10 汽车东站 11 东七里站 12 卫材总厂 13 火车站3114 1 公交二公司 2 大铺 3 新加坡花园城 4 通用所 5 科学大道 6 十里庙 7 怀宁路 8 三十四中 9 牙膏厂 10 青阳路 11 国购广场 12 安农 13 逍遥津 14 大东门3016 1 客车厂 2 三十二中 3 公交三公司 4 卫岗 5 仪表厂 6 东陈岗 7 屯溪路 8 大钟楼9 四牌楼 10 市府广场 11 百花井 12 双岗 13 安农大 14 通用所 15 火车站 16 汽车站117 1 柳荫塘 2 王草坊 3 东城世家 4 吴小郢 5 八佰户 6 花溪新村 7 铜陵新村 8 市二院 9 abc 10 和平路 11 bcd 12 三孝口 13 江淮 14 南七里 15 三十四中 16 飞凤街 17 火车站2、本程序的运行结果如下所示:四、课程设计小结通过这次实训,增加了我学习软件技术的兴趣,虽然还不明确软件技术包含的具体内容,但从C语言这门课程开始,已发现程序设计的乐趣,在学习C语言的过程中也学到了许多计算机应用基础知识,对计算机的机体也有了一个大体的了解。
这次实训是老师给了题目,经过自己的努力,实现要求。
先做简单的小程序输出和输入,一步步的再做其它要求,在实际操作过程中犯的一些错误还会有意外的收获,感觉实训很有意思。
在具体操作中对这学期所学的C语言的理论知识得到巩固,达到实训的基本目的,也发现自己的不足之出,在以后的上机中应更加注意,同时体会到C语言具有的语句简洁,使用灵活,执行效率高等特点。
发现上机实训的重要作用,特别是对数组和循环有了深刻的理解。
通过实际操作,学会 C语言程序编程的基本步骤、基本方法,开发了自己的逻辑思维能力,培养了分析问题、解决问题的能力。
深刻体会到“没有做不到的,只有想不到的”,“团结就是力量”,“实践是检验真理的标准”……的寓意。
在此希望以后应多进行这样的实训,加长设间,培养我们独立思考问题的能力,提高实际操作水平,感谢老师的指导。
五、参考文献[1] 严蔚敏等《数据结构(c语言版)》北京:清华大学出版社,1997年4月第1版;[2] 谭浩强编著《C程序设计(第3版) 》北京:清华大学出版社;[3] 洪国胜等编著《C++ Builder程序设计轻松上手》北京:清华大学出版社;[4] 严蔚敏等《数据结构(c语言版)》北京:清华大学出版社,1997年4月第1版;[5] 宁正元《数据结构(c语言)》南京:东南大学出版社。
2000年6月第1版;[6] 明日科技编著《Visual C++程序开发范例宝典》北京:人民邮电出版社;六、源程序代码#include "stdio.h"#include "malloc.h"#include "string.h"#include "stdlib.h"typedef struct station //公交站{int num; //站序号char name[20];//站名称}Stop;typedef struct busline //公交路线{int busnum; //公交车号码Stop stop[50]; //线路上的站}BL;typedef struct STA{char a[20];}Sta;BL bl[50];int m=5;//定义全局变量int z[15];//站台数void MENU(){printf("\t********欢迎使用公交路线查询系统********\n");printf("\t1------显示路线信息---------------------\n");printf("\t2------增加线路信息---------------------\n");printf("\t3------删除路线信息---------------------\n");printf("\t4------修改路线信息---------------------\n");printf("\t5------查询路线信息---------------------\n");printf("\t6------将信息保存带文件中---------------\n");printf("\t7------退出-----------------------------\n");printf("\t请选择...\n");}void Read()//从文件中读取{int i,j;FILE *fp;fp=fopen("busline.txt","r+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(i=0;i<m;i++){fscanf(fp,"%d",&bl[i].busnum);fscanf(fp,"%d",&z[i]);for(j=0;j<z[i];j++){fscanf(fp,"%d %s",&bl[i].stop[j].num,bl[i].stop[j].name);}}printf("\n");fclose(fp);}void Write()//在窗口中显示{int i,j;BL bl[50];FILE *fp;fp=fopen("busline.txt","r+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(i=0;i<m;i++){fscanf(fp,"%d",&bl[i].busnum);printf("\t%d",bl[i].busnum);printf("\n");fscanf(fp,"%d",&z[i]);for(j=0;j<z[i];j++){fscanf(fp,"%d %s",&bl[i].stop[j].num,bl[i].stop[j].name);printf("%d %s",bl[i].stop[j].num,bl[i].stop[j].name);}printf("\n");}fclose(fp);}void Add()//增加信息{FILE *fp;int i,j,n,k,t;int op;printf("您要添加公交路线还是公交站点?\n");puts("1--添加公交路线 2--添加公交站点\n");printf("请选择:");scanf("%d",&op);switch(op){case 1:printf("输入你要添加的公交路线信息:\n");printf("车牌号:");scanf("%d",&bl[m].busnum);printf("你要增加几个站台");scanf("%d",&z[m]);printf("站台:");for(j=0;j<z[m];j++){scanf("%s",bl[m].stop[j].name);bl[m].stop[j].num=j+1;}printf("%d",bl[m].busnum);printf("\n");for(j=0;j<z[m];j++){printf("%d %s",bl[m].stop[j].num,bl[m].stop[j].name);}printf("\n");fp=fopen("busline.txt","w+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(t=0;t<m+1;t++){fprintf(fp,"%d\t",bl[t].busnum);fprintf(fp,"\n");fprintf(fp,"%d",z[t]);for(j=0;j<z[t];j++){fprintf(fp," %d %s",j+1,bl[t].stop[j].name);}fprintf(fp,"\n");}fclose(fp);m=m+1;break;case 2:fp=fopen("busline.txt","r+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(i=0;i<m;i++){fscanf(fp,"%d",&bl[i].busnum);fscanf(fp,"%d",&z[i]);for(j=0;j<z[i];j++){fscanf(fp,"%d %s",&bl[i].stop[j].num,bl[i].stop[j].name);}} fclose(fp);printf("你要增加哪一路公交车的站台");while(i!=1){scanf("%d",&k);for(t=0;t<m;t++){if(k==bl[t].busnum){i=1;break;}}if(i!=1)printf("输入错误,请重新输入:");}printf("你要增加几站");scanf("%d",&n);printf("输入站台");for(j=z[t];j<n+z[t];j++){scanf("%s",bl[t].stop[j].name);bl[t].stop[j].num=j+1;}z[t]=n+z[t];printf("%d",z[t]);printf("%d",bl[t].busnum);printf("\n");for(j=0;j<z[t];j++){printf("%d %s",bl[t].stop[j].num,bl[t].stop[j].name);}printf("\n");fp=fopen("busline.txt","w+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(i=0;i<m;i++){fprintf(fp,"%d\t",bl[i].busnum);fprintf(fp,"\n");fprintf(fp,"%d",z[i]);for(j=0;j<z[i];j++){fprintf(fp," %d %s",j+1,bl[i].stop[j].name);}fprintf(fp,"\n");}fclose(fp);break;}}void Cut()//删除信息{int i=0,k,j,n,t;int a[15];int op;char b[15]={"已被删"};FILE *fp;printf("您是要删除公交路线还是线路站点:\n");printf("1---删除公交路线 2---删除站点\n");printf("你的选择:");scanf("%d",&op);switch(op){case 1:printf("输入你要删除的公交路线:\n");while(i!=1){scanf("%d",&k);for(t=0;t<m;t++){if(k==bl[t].busnum){i=1;break;}}if(i!=1)printf("输入错误,请重新输入:");}for(i=0;i<m;i++){if(i==t)printf("\n");else{printf("%d",bl[i].busnum);printf("\n");for(j=0;j<12;j++){printf("%d %s",bl[i].stop[j].num,bl[i].stop[j].name);}printf("\n");}}fp=fopen("busline.txt","w+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(i=0;i<m;i++){if(i==t)fprintf(fp,"");else{fprintf(fp," %d\t",bl[i].busnum);fprintf(fp,"\n");fprintf(fp,"%d",z[i]);for(j=0;j<z[i];j++){fprintf(fp," %d %s",j+1,bl[i].stop[j].name);}}}fclose(fp);m=m-1;break;case 2:printf("输入你要删除的哪路公交路线上的站点:\n");while(i!=1){scanf("%d",&k);for(t=0;t<m;t++){if(k==bl[t].busnum){i=1;break;}}if(i!=1)printf("输入错误,请重新输入:");}printf("你要删除几个站台");scanf("%d",&n);printf("输入要删除第几站");for(i=0;i<n;i++){scanf("%d",&a[i]);for(j=0;j<12;j++)if(bl[t].stop[j].num==a[i])strcpy(bl[t].stop[j].name,b);}for(i=0;i<m-1;i++){printf("\n%d",bl[i].busnum);printf("\n");for(j=0;j<z[i];j++){printf("%d %s",bl[i].stop[j].num,bl[i].stop[j].name);}}printf("\n");break;}}void Revamp()//修改信息{int i=0,j,t;int k,n,b[11];Sta sta[20];FILE *fp;printf("你要修改哪一路公交车");scanf("%d",&k);for(t=0;t<m;t++){if(k==bl[t].busnum){i=1;break;}}printf("输入你要修改几个站台的信息");scanf("%d",&n);printf("输入第几站和站名");for(j=0;j<n;j++)scanf("%d %s",&b[j],sta[j].a);for(i=0;i<12;i++){for(j=0;j<n;j++){if(b[j]==bl[t].stop[i].num){strcpy(bl[t].stop[i].name,sta[j].a);}}}for(i=0;i<m;i++){printf("%d",bl[i].busnum);printf("\n");for(j=0;j<z[t];j++){printf("%d %s",bl[i].stop[j].num,bl[i].stop[j].name);}}fp=fopen("busline.txt","w+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(t=0;t<m;t++){fprintf(fp,"%d\t",bl[t].busnum);fprintf(fp,"\n");fprintf(fp,"%d",z[t]);for(j=0;j<z[t];j++){fprintf(fp," %d %s",j+1,bl[t].stop[j].name);}fprintf(fp,"\n");}fclose(fp);}void Search()//查询信息{int i,j,l=1,k=0;int t,t1,t2;char Q[20],Z[20];printf("请输入要查询的车牌号");while(k!=1){scanf("%d",&k);for(t=0;t<=m;t++){if(k==bl[t].busnum){k=1;break;}}if(k!=1)printf("输入错误,请重新输入:");}while(k!=0||l!=0){printf("请输入起始站:");scanf("%s",Q);printf("请输入终点站:");scanf("%s",Z);for(i=0;i<z[t];i++){if(strcmp(Q,bl[t].stop[i].name)==0){t1=bl[t].stop[i].num-1;k=0;}if(strcmp(Z,bl[t].stop[i].name)==0){t2=bl[t].stop[i].num-1;l=0;}}if(k!=0||l!=0)printf("输入错误,请重新输入!\n");}j=t2-t1+1;printf("%d",j);printf("从%s到%s共有%d站",bl[t].stop[t1].name,bl[t].stop[t2].name,j);printf("中间站台是\n");j=1;for(i=t1;i<=t2;i++){printf("%d %s",j,bl[t].stop[i].name);j++;}printf("\n");}void Save()//保存信息{int j,t;FILE *fp;fp=fopen("busline2.txt","w+");if(fp==NULL){printf("不能打开此文件!");exit(0);}for(t=0;t<m;t++){fprintf(fp,"%d\t",bl[t].busnum);fprintf(fp,"\n");for(j=0;j<z[t];j++){fprintf(fp,"%d %s--",j+1,bl[t].stop[j].name);}fprintf(fp,"\n");}fclose(fp);}void main()//***************主函数{int op;Read();while(12){MENU();scanf("%d",&op);getchar();system("cls");switch(op){case 1: Write();break;case 2: Add();break;case 3: Cut();break;case 4: Revamp();break;case 5:Search();break;case 6:Save();break;case 7: printf("谢谢使用\n");exit(0);break;default:printf("输入错误,请重新输入!\n");}}}。