资源描述
*******************
实践教学
*******************
兰州理工大学
计算机与通信学院
2014年春季学期
C程序设计 课程设计
题 目: 班车信息管理系统
专业班级: 计算机科学与技术6班
姓 名: 苏志飞
学 号: 13240623
指导教师: 唐建新
成 绩:_______________
0
摘 要
随着信息技术在管理上越来越广泛的的应用,管理系统的实施在技术上已逐步成熟,管理系统是一个不断发展的学科,任何部门,服务系统的展开都离不开信息技术管理。鉴于此我们开发了一个采用C语言编辑的基本班车信息管理查询服务系统,该系统具备了
1录入班车相关信息。2查询信息(按班车的发车时间及其车号查找)。并输出班车当前所在信息。3信息的输出,显示所有班车信息,满足乘客的需求。4删除班车信息,使班车服务流畅化。5状态转换。运用c语言,编写程序使得复杂的交通变得井然有序。
就现在的交通设施,我们开展了此次c语言课程设计,从多方面提升自己的编译能力,为以后的专业开展奠定基础。
关键词:信息管理,车票,班车
目 录
一、前言 1
二、需求分析 2
三、总体设计 3
四、详细设计 4
1、数据定义 4
2、算法流程图 4
五、编码 6
六、测试与分析 7
七、设计总结 8
参考文献 9
致谢 10
附 录 11
一、 前言
传统的班车信息管理存在着许多的弊端,比如计算方面的误差、整个系统的管理和班车信息的查询等。伴随着信息时代的来临,信息处理器——计算机的应用于班车信息的日常管理为班车管理的现代化带来了从未有过的动力和机遇,采用计算机管理信息系统已成为班车信息管理科学化和现代化的重要标志给班车服务行业带来了明显的经济效益和社会效益。利用班车信息系统管理整个运行的过程,可以节省大量的时间和精力,有助于及时了解各个环节中信息的变更,有利于提高工作人员的工作效率。在此背景下,本文论述了班车管理系统的设计和实现。
我们学习程序设计课程的目的掌握设计程序的思路,学习会用计算机语言编写程序,以实现所需要处理的任务。要正确处理算法与语法的关系,算法是程序的核心、是灵魂,语法是外壳、是工具。不应把学习重点放在语法规则上,语法是重要的,不掌握语法规则就无法编写出正确的程序。一定要把重点放在解题的思路上,通过思考,和大量的阅读,来构造一个完整的程序。因为:重要的是学会编程,而不是背语法。
其次,主要是学习程序设计的方法,进行程序设计的基本训练,学生应该把精力放在最基本,最常用的内容上,学好基本功,在基础上加强自己。
二、需求分析
2.1选题背景:
随着计算机的普及,信息产业的发展,现在计算机已经被各个领域使用。传统班车信息管理存在着许多的弊端,比如计算方面的误差、整个系统的管理和班车信息的查询等。但是现在班车管理已经信息化、自动化,通过一些编程语言来实现,再经过实践来验证,最后就有一个完整的班车信息管理系统。它包括班车信息的录入、浏览和查询。
2.2编写目的:
通过对用户需求进行调查分析,做出需求分析文档作为项目设计的基本准则要求,以及作为系统分析员进行系统分析和测试人员进行测试时的手册
2.3需求概述:
设计一个班车信息管理系统,使之能提供以下功能:
1) 录入班车信息并保存,包括发车时间、班车车号、班车型号、车票价格
2) 浏览全部车次信息,并按输入顺序显示
3) 查询班车信息,可按车号和发车时间
4) 班车信息的删除
5)班车状态的转换
6)班车信息管理系统的初始化
2.4需求说明:
班车信息包括车号、发车时间、班车型号、车票价格
录入的班车信息要求用文件形式保存,并可以对其进行浏览、查询、等操作;
班车信息的显式要求有一定的规范格式
所设计的系统应以菜单方式工作,应为用户提供清晰的使用提示,依据用户的选择来进行各种处理,并要求在此过程中能够尽可能的兼容用户使用过程中的异常情况
三、总体设计
根据需求分析,本人按照结构化程序设计的原则将整个系统划分若干个功能模块。 系统各子模块的设计如图1所示。
班车信息管理系统
班
车
信息输出
班车信息录入
班
车
信息查询
系统初始化
班
车
状态转换
班
车
信息删除
退出
图1 班车信息管理系统功能模块图
四、详细设计
1、数据定义
结构体类型
typedef struct
{char number[10];/*班车车号*/
char time[20]; /*发车时间*/
char model[20]; /*班车型号*/
int price; /*车票价格*/
int state; /*班车状态*/
}mbus;
typedef struct
{mbus bus[1000];
int count;
}mstop;
mstop stop;
指针变量
{ FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
fp=fopen("stop.txt","wt"); /*以写的方式打开stop*/
fwrite(&stop.count,sizeof(int),1,fp);
fwrite(stop.bus,sizeof(stop.bus[1]),stop.count+1,fp);
fclose(fp); /*关闭文件*/
}
2、 主要算法流程图
录入函数流程
start
void luru() /*车辆信息录入
while(a!=0)
printf("录入班车信息\n")
输入有误
end
查询函数流程图
start
满足指令
end
printf("\t\t2发车时间查询\n");
printf("\t\t1 型号查询\n")
对不起,输入有误
显示所有班车信息
start
void shanchu()
班车信息删除流程图
满足要求
请输入要删除的班车型号和发车时间
输入有误
已经修改的班车信息
end
start
状态转换函数流程图
void setstate()
printf("请输入班车车号,转换班车的状态: " );
是否转换
转换后的班车信息
原有的班车信息
end
班车信息输出
五、编码
只写步骤和思路,源代码见光盘(附录:6号New Roman, 行距固定10磅)。
void main()
{ int i;
char ch='1';
FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
if((fp=fopen("stop.txt","rt"))==NULL) /*以写的方式打开stop*/
stop.count=0;
else
{ fread(&stop.count,sizeof(int),1,fp);
fread(stop.bus,sizeof(stop.bus[1]),stop.count+1,fp);
fclose(fp);/*关闭文件*/
}
printf("\n\n\n\t\t\t欢迎使用班车管理系统!\n\t"); /*班车管理系统欢迎界面*/
printf("操作说明:\n");
printf(" 1.数据输入完成后按 Enter 键确认.\n");
printf(" 2.班车信息当中车费价格,车号只能是整数.\n");
printf(" 3.班车信息状态栏中,1表示未发车,0表示已发车.\n");
printf(" 4.对于录入的班车信息的状态,系统默认为1\n");
printf(" 5.请严格按照要求操作.\n");
printf("\n\n\t\t\t请按任意键继续.");
getch();
while(ch!='0')
{printf("\n\n\n\n\n");
printf("\t\t\t\t\t 班车管理系统\n"); /*班车管理系统菜单选项*/
for(i=0;i<80;i++ )
printf("*");
printf("\n");
printf("\t\t1----------------班车信息录入\n");
printf("\t\t2----------------班车信息查询\n");
printf("\t\t3----------------班车信息输出\n");
printf("\t\t4----------------删除班车信息\n");
printf("\t\t5----------------系统初始化\n");
printf("\t\t6-----------------班车状态转换\n");
printf("\t\t0-----------------退出\n");
/*班车管理系统各个选项及其后继步骤*/
scanf("%c",&ch);
switch(ch)
{
case '1':
luru();
break;
case '2':
search();
break;
case '3':
print();
break;
case '4':
shanchu();
break;
case '5':
initiate();
break;
case '6':
setstate();
break;
default:
break;
}
}
printf("\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用!"); /*班车管理系统关闭状态*/
getch();
}
void save()
{ FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
fp=fopen("stop.txt","wt"); /*以写的方式打开stop*/
fwrite(&stop.count,sizeof(int),1,fp);
fwrite(stop.bus,sizeof(stop.bus[1]),stop.count+1,fp);
fclose(fp); /*关闭文件*/
}
void luru() /*车辆信息录入*/
while(a!=0)
{stop.count++;
printf("录入班车信息\n");
printf("请输入班车车号: ");
scanf("%s",stop.bus[stop.count].number);
printf("请输入型号: ");
scanf("%s",stop.bus[stop.count].time);
printf("请输入发车时间: ");
scanf("%s",stop.bus[stop.count].model);
printf("请输入车费标价: ");
fflush(stdin);
scanf("%d",&stop.bus[stop.count].price);
stop.bus[stop.count].state=1;
printf("退出请按 0 ,继续请按 1 : "); /*班车信息录入结束*/
scanf("%d",&a);
}
save();
}
void search() /*车辆信息查询*/
{ int a=0;
printf("---------班车信息查询-----------\n");
printf("\t\t1----------------- 型号查询\n");
printf("\t\t2------------------发车时间查询\n");
printf("请选择查询方式: ");
scanf("%d",&a);
switch (a)
{
case 1:
search_by_time();
break;
case 2:
search_by_model();
break;
default:
break;
}
}
void search_by_time()
{ int n=1,i;
char a[20];
printf("请输入你要查找班车的型号: ");
scanf("%s",a);
printf("车号 \t型号 \t发车时间 \t车费 \t状态\n");
for(i=1;i<=stop.count;i++)
if(strcmp(a,stop.bus[i].time)==0)
{
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.bus[i].price,stop.bus[i].state);
/* 显示车号 型号 发车时间 车费 车辆状态*/
n=0;
}
if(n==1) /*如果没有数据显示对不起....*/
printf("对不起,没有相应信息 ");
getch();
}
void search_by_model()
{char a[20];
int n=1,i;
printf("请输入你要查找班车的发车时间: ");
scanf("%s",a);
printf("车号\t 型号\t 发车时间\t 价格\t 状态\n");
for(i=1;i<=stop.count;i++)
if(strcmp(a,stop.bus[i].model)==0)
{
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.bus[i].price,stop.bus[i].state);
/* 显示车号 型号 发车时间 车费 车辆状态*/
n=0;
}
if(n==1) /*如果没有数据显示对不起....*/
printf("对不起,没有相应信息 ");
getch();
}
void print()
{int i,n;
printf("车号\t 型号\t 发车时间\t 价格\t 状态\n");
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.bus[i].price,stop.bus[i].state);
/* 显示车号 型号 发车时间 车费 车辆状态*/
getch();
}
void shanchu() /* 班车信息删除*/
{ int i,j,ch,n=0;
char a[20],b[20];
printf("-----------------------班车信息删除-----------------------------------------\n");
printf("请输入要删除的班车的型号和发车时间\n");
printf("\t型号:");
scanf("%s",a);
printf("\t发车时间: ");
scanf("%s",b);
for(i=1;i<=stop.count;i++)
if(strcmp(a,stop.bus[i].time)==0&&strcmp(b,stop.bus[i].model)==0 )
{ n=i;
printf("车号\t 型号\t 发车时间\t 价格\t 状态\n");
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\t\t\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.bus[i].price,stop.bus[i].state);
/* 显示车号 型号 发车时间 车费 车辆状态*/
printf("是否删除信息 ? 1(是),0(否) ");
scanf("%d",&ch);
if(ch==1)
{for(j=i+1;j<=stop.count;j++)
stop.bus[j-1]=stop.bus[j];
stop.count--;
}
else
break;
}
save();
if(n==0)
{printf("班车信息输入有误");
getch();
}
}
void initiate()
{int i;
FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
fp=fopen("stop.txt","wt"); /*以写的方式打开stop*/
printf("系统初始化后系统所有信息将全部丢失,\n");
printf("是否仍选择初始化?(是(1),否(0))");
scanf("%d",&i);
if(i==1)
{stop.count=0;
save();
fclose(fp); /*关闭文件*/
return;
}
return;
}
void setstate() /*班车状态转换*/
{ int i,a,n=1;
char ch[20];
printf("请输入班车车号,转换班车的状态: " );
scanf("%s",ch);
for(i=1;i<=stop.count+1;i++)
if((strcmp(ch,stop.bus[i].number))==0 )
{ printf("车号\t 型号\t 发车时间\t 价格\t 状态\n");
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.b
{printf("状态转换(是 (1),否(0)) : ");
scanf("%d",&a);
if(a==1)
{if(stop.bus[i].state==1)
stop.bus[i].state=0;
else if(stop.bus[i].state==0 )
stop.bus[i].state=1 ;
save();
}
六、 测试与分析
1.欢迎及操作说明界面运行结果
2.菜单界面运行结果
3.录入班车信息
运行结果
4.班车信息查询运行结果
5.班车信息输出
运行结果:
6班车信息删除运行结果
366
7.班车信息初始化运行结果:
8.班车状态转换运行结果:
七、设计总结
通过此次课程设计,使我更加扎实的掌握了有关c语言方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。
过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。参考文献
1.姜灵芝,余健. C语言课程设计案例精编.北京:清华大学出版社,2008
2.王新,孙雷. C语言课程设计.北京:清华大学出版社,2009
3.游洪跃、彭骏、谭斌.C语言程序设计实验与课程设计教程.北京:清华大学出版社,2011
4.王连相.C/C++程序设计上机指导与测试. 北京:中国铁道出版社,2006
5.C语言函数手册,机械工业出版社,1999
致谢
本课题在选题及进行过程中得到唐老师的悉心指导。论文行文过程中,唐老师多次帮助我分析思路,开拓视角,在我遇到困难想放弃的时候给予我最大的支持和鼓励。唐老师严谨求实的治学态度,踏实坚韧的工作精神,将使我终生受益。再多华丽的言语也显苍白。在此,谨向唐老师致以诚挚的谢意和崇高的敬意。
附 录
小五,Times New Raman,行距:固定行距10磅
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void save();
void luru();
void search();
void search_by_time();
void search_by_model();
void print();
void shanchu();
void initiate();
void setstate();
typedef struct
{char number[10];/*班车车号*/
char time[20]; /*发车时间*/
char model[20]; /*班车型号*/
int price; /*车票价格*/
int state; /*班车状态*/
}mbus;
typedef struct
{mbus bus[1000];
int count;
}mstop;
mstop stop;
void main()
{ int i;
char ch='1';
FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
if((fp=fopen("stop.txt","rt"))==NULL) /*以写的方式打开stop*/
stop.count=0;
else
{ fread(&stop.count,sizeof(int),1,fp);
fread(stop.bus,sizeof(stop.bus[1]),stop.count+1,fp);
fclose(fp);/*关闭文件*/
}
system("graftabl 936"); /*调用Ms-Dos中文支持 */
printf("\n\n\n\t\t\t欢迎使用班车管理系统!\n\t"); /*班车管理系统欢迎界面*/
printf("操作说明:\n");
printf(" 1.数据输入完成后按 Enter 键确认.\n");
printf(" 2.班车信息当中车费价格,车号只能是整数.\n");
printf(" 3.班车信息状态栏中,1表示未发车,0表示已发车.\n");
printf(" 4.对于录入的班车信息的状态,系统默认为1\n");
printf(" 5.请严格按照要求操作.\n");
printf("\n\n\t\t\t请按任意键继续.");
getch();
while(ch!='0')
{printf("\n\n\n\n\n");
printf("\t\t\t\t\t 班车管理系统\n"); /*班车管理系统菜单选项*/
for(i=0;i<80;i++ )
printf("*");
printf("\n");
printf("\t\t1----------------班车信息录入\n");
printf("\t\t2----------------班车信息查询\n");
printf("\t\t3----------------班车信息输出\n");
printf("\t\t4----------------删除班车信息\n");
printf("\t\t5----------------系统初始化\n");
printf("\t\t6-----------------班车状态转换\n");
printf("\t\t0-----------------退出\n");
for(i=0;i<80;i++ )
printf("*");
printf("\n\n");
printf(" \t请输入你的选择: "); /*班车管理系统各个选项及其后继步骤*/
scanf("%c",&ch);
switch(ch)
{
case '1':
luru();
break;
case '2':
search();
break;
case '3':
print();
break;
case '4':
shanchu();
break;
case '5':
initiate();
break;
case '6':
setstate();
break;
default:
break;
}
}
printf("\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用!"); /*班车管理系统关闭状态*/
getch();
}
void save()
{ FILE *fp; /*定义1文件型指针变量,指针名叫fp*//*fp指向file类型结构体的指针*/
fp=fopen("stop.txt","wt"); /*以写的方式打开stop*/
fwrite(&stop.count,sizeof(int),1,fp);
fwrite(stop.bus,sizeof(stop.bus[1]),stop.count+1,fp);
fclose(fp); /*关闭文件*/
}
void luru() /*车辆信息录入*/
{int a=1;
while(a!=0)
{stop.count++;
printf("录入班车信息\n");
printf("请输入班车车号: ");
scanf("%s",stop.bus[stop.count].number);
printf("请输入型号: ");
scanf("%s",stop.bus[stop.count].time);
printf("请输入发车时间: ");
scanf("%s",stop.bus[stop.count].model);
printf("请输入车费标价: ");
fflush(stdin);
scanf("%d",&stop.bus[stop.count].price);
stop.bus[stop.count].state=1;
printf("退出请按 0 ,继续请按 1 : "); /*班车信息录入结束*/
scanf("%d",&a);
}
save();
}
void search() /*车辆信息查询*/
{ int a=0;
printf("---------班车信息查询-----------\n");
printf("\t\t1----------------- 型号查询\n");
printf("\t\t2------------------发车时间查询\n");
printf("请选择查询方式: ");
scanf("%d",&a);
switch (a)
{
case 1:
search_by_time();
break;
case 2:
search_by_model();
break;
default:
break;
}
}
void search_by_time()
{ int n=1,i;
char a[20];
printf("请输入你要查找班车的型号: ");
scanf("%s",a);
printf("车号 \t型号 \t发车时间 \t车费 \t状态\n");
for(i=1;i<=stop.count;i++)
if(strcmp(a,stop.bus[i].time)==0)
{
printf("%s\t\t%s\t\t%s\t\t%d\t\t%d\n",stop.bus[i].number,stop.bus[i].time,stop.bus[i].model,stop.bus[i].price,stop.bus[i].state);
/* 显示车号 型号 发车时间 车费 车辆状态*/
n=0;
}
if(n==1) /*如果没有数据显示对不起....*/
printf("对不起,没有相应信息 ");
getch();
展开阅读全文