车辆调度程序C语言课设报告.docx
《车辆调度程序C语言课设报告.docx》由会员分享,可在线阅读,更多相关《车辆调度程序C语言课设报告.docx(35页珍藏版)》请在冰豆网上搜索。
车辆调度程序C语言课设报告
沈阳航空航天大学
课程设计报告
课程设计名称:
C语言课程设计
课程设计题目:
车辆调度调度程序设计
院(系):
计算机学院
专业:
计算机科学与技术
班级:
04010101
学号:
*************
******
指导教师:
丛丽晖
完成日期:
2010年3月17日
第1章概要设计
1.1题目的内容与要求
内容:
用文件系统设计实现一个简单的车辆调度系统。
实现用车要求的登记、车辆的管理等功能。
建立车辆基本的情况表,内容包含车辆所有信息,包括车辆目前状态,认为司机和车辆是一一对应的,在用户要求时进行信息动态匹配,并且可以智能选择最合理的车辆资源满足用户要求,为简单起见,可以不考虑司机的情况即仅对车辆进行管理,程序最终输出结果是:
本次调出的车辆或者司机。
要求:
1)系统利用C语言实现;
2)车辆调用或归还结束后,需要把新的车辆状况保存到文本文件中;
3)采用VC环境进行调试运行。
1.2总体结构
本程序主要分为七个模块(功能模块图见图1.1):
主程序模块,车辆调用模块,车辆归还模块,车辆总览模块,车辆查询模块,新车登记模块,车辆注销模块。
主程序模块:
用于实现整个程序功能引导。
车辆调用模块:
实现车辆调用功能。
车辆归还模块:
实现车辆归还功能。
车辆总览模块:
实现车辆总体情况查看功能。
车辆查询模块:
实现单一车辆查询功能。
新车登记模块:
实现新车登记,并存入到文件的功能。
车辆注销模块:
实现车辆注销,并从文件中删除的功能。
图1.1功能模块图
第2章详细设计
2.1主程序模块
引导整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。
‘6’
‘5’
‘4’
‘3’
‘2’
‘1’
‘0’
‘E’
图2.1主模块流程图
注释:
1).先定义相关变量;
2).调用主菜单函数,并判断其返回值,进行相关操作。
2.2车辆调用模块
用于实现车辆调出的功能,用户使用时,需要输入身份证号码,姓名,计划归还车辆时间,输入完毕后进行车辆条件选择阶段,系统会列出符合条件的车辆,用户可输入希望调用的车辆编号或让系统自动选择距离上次出车时间最长的汽车,选择完毕后,按任意键返回主菜单。
流程如图2.2所示。
否
是
图2.2车辆调用模块流程图
2.3车辆归还模块
用于实现车辆归还操作,进入该功能后,用户需输入调用车辆时输入的姓名及身份证号,如果信息不符,还车失败,并且如果换车时间晚于与预还车时间,还车也会失败。
流程如图2.3所示。
否
否
是
是
图2.3车辆归还模块流程图
2.4车辆总览模块
该模块主要实现用户对所有车辆在库车辆的总体情况查看功能。
用户进入该功能后,系统将会列出所有车辆信息。
流程如图2.4所示。
是
否
图2.4车辆总览模块流程图
2.5车辆查询模块
该模块主要实现单一车辆信息查询功能,用户只需输入所希望查找车辆编号,即可查找到相关车辆信息。
流程如图2.4所示。
否
是
图2.5车辆总览模块流程图
2.6新车登记模块
该模块主要实现将新的车辆信息加入到车辆信息库中,并可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。
使用时用户需输入车牌号,司机姓名,车辆类型即可,系统会自动为新车辆编号,并且状态改为可调出。
流程如图2.6所示。
图2.6新车登陆模块流程图
2.7车辆注销模块
该模块主要实现将车辆信息从车辆信息库中删除,并不可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。
使用时用户需输入车辆编号,系统便会删除车辆信息。
流程如图2.7所示。
否
是
图2.7车辆注销模块流程图
第3章调试分析
3.1调试前期
调试前期,错误比较多,都是语法错误,只需细心根据提示逐条改正即可。
错误1:
C:
\Users\Administrator\Desktop\课设\vehicle.cpp(32):
errorC2146:
syntaxerror:
missing';'beforeidentifier'VehicleList'
改法:
在前一末尾增加分号。
错误2:
C:
\Users\Administrator\Desktop\课设\vehicle.cpp(32):
errorC2057:
expectedconstantexpressionisnotintegral
改法:
意思是在此处需要一个整型常量表达式,查看此处代码,发现少定义一个表达式,定义一个即可。
错误3:
C:
\Users\Administrator\Desktop\课设\vehicle.cpp(32):
errorC2084:
function'main_menu'alreadyhasabody
改法:
删除对此函数的定义。
错误4:
C:
\Users\Administrator\Desktop\课设\vehicle.cpp(32):
errorC2446:
cannotallocateanarrayofcostantsize0
改法:
查看对表达式是否赋值正确。
3.2调试中期
调试中期,已无语法错误,调试程序各个功能是否能够实现。
错误:
进入新车登陆功能后,输入车辆信息后并显示成功,但实际新车信息并没有存入文件中。
改法:
检查新车登陆函数编写时了逻辑是否有误。
发现对链表节点设置错误,改正节点。
3.3调试后期
调试后期,语法,逻辑均无错误。
各项功能都已实现,菜单还不够完美,反复调试,使菜单界面清爽易懂。
第4章使用说明与执行结果
主菜单:
******************************************************
*汽车调度程序*
******************************************************
*1.汽车调度*
*2.汽车归还*
*3.车辆总况一览*
*4.车辆查询*
*5.新车登记*
*6.车辆注销*
*7.退出系统*
******************************************************
*请选择:
1-7*
******************************************************
请输入您的选项:
4.1车辆调度:
进入车辆调度功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入租车人姓名:
WAHAHA
请输入租车人身份证号:
123456789987654321
请输入计划归还时间(格式YYYY-MM-DD,如2011-03-24):
2011-3-26
请选择您需要的车型(A.大型车B.中型车C.小型车E.返回主菜单请输入大写字母!
):
B
**************************可选车辆列****************************
车辆编号车牌号驾驶员车辆类型车辆状态上次出车时间(DDYYMM)
1005KDF005LILIUB可调出NEW
1009KDF009ZHAOJIEB可调出2011-03-11
*****************************************************************
请输入车辆编号或输入W智能筛选(输入E返回主菜单):
W
****************************车辆调度结果************************
已调出车辆:
1005,驾驶员:
LILIU,出车日期:
2011-03-24
*****************************************************************
请按任意键继续...
4.2车辆归还:
1.信息输入错误
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号:
1001
请输入租车人姓名:
YANGZHENPU
请输入租车人身份证号:
123456789987654321
租车人姓名或身份证号输入有误!
请按任意键继续..
2.归还太迟:
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号:
1003
请输入租车人姓名:
LIUZHIGONG
请输入租车人身份证号:
123456789123456789
归还失败,您的车辆已超期,请到总服务台办理超期还车手续!
请按任意键继续...
3.归还成功:
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号:
1005
请输入租车人姓名:
WAHAHA
请输入租车人身份证号:
123456789987654321
汽车归还成功!
请按任意键继续...
4.3车况一览:
进入车况一览功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
车辆编号车牌号驾驶员车型车辆状态上次出车时间租车人姓名计划归还时间
1001KDF001ZHANGSANA可调出2011-03-12N/AN/A
1002KDF002LISIB出车中2011-03-15LIUZHIGONG2011-03-20
1003KDF003ZHAOLIUA出车中2011-03-11LIUZHIGONG2011-03-14
1004KDF004ZHANGWUC可调出2011-03-12N/AN/A
1005KDF005LILIUB可调出2011-03-24N/AN/A
1006KDF006ZHAOLIB出车中2011-03-11LIUZHIGONG2011-03-17
1007KDF007ZHANGXUEA出车中2011-03-17QIANGGE2011-3-18
1008KDF008LIJIEC可调出NEWN/AN/A
1009KDF009ZHAOJIEB可调出2011-03-11N/AN/A
1010KDF010ZHOUSUA可调出2011-03-14N/AN/A
1011DFD222ZHIGONGC可调出NEWN/AN/A
1012KDF010ZHOULANGA可调出2011-03-15N/AN/A
请按任意键继续...
4.4车辆查询:
进入车辆查询功能!
请输入汽车编号或车牌号:
1005
***************找到了符合条件的车辆信息*****************************
车辆编号车牌号驾驶员车型车辆状态上次出车时间租车人姓名计划归还时间
1005KDF005LILIUB可调出2011-03-24N/AN/A
请按任意键继续...
4.5新车登陆:
进入车新车登陆功能!
请输入车牌号:
KSF008
请输入驾驶员:
LEHAHA
请选择车辆类型(A/B/C):
C
成功登记牌号为:
KSF008的车辆,车辆编号为:
1013!
请按任意键继续...
4.6车辆注销:
进入车辆注销功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入需要注销的车辆编号:
1011
已注销编号为1011的车辆!
请按任意键继续...
4.7退出系统:
******************************************************
*汽车调度程序*
******************************************************
*1.汽车调度*
*2.汽车归还*
*3.车辆总况一览*
*4.车辆查询*
*5.新车登记*
*6.车辆注销*
*7.退出系统*
******************************************************
*请选择:
1-7*
请输入您的选项:
7
您确定要退出系统?
输入Y确定,输入N返回主菜单
Y
参考文献
[1]张长海.C语言程序设计[M].北京:
高等教育出版社,2006
[2]裘宗燕.从问题到程序:
程序设计与C语言引论[M].北京:
机械工业出版社,2005.9
[3]王敬华,林萍,张清国.C语言程序设计教程[M].北京:
清华大学出版社,2009.8、
[4]谭浩强.C程序设计[M].北京:
清华大学出版社,2005
[5]谭浩强.C程序设计题解与上机指导[M].北京:
清华大学出版社,2005
[6]胡建平.C语言程设计学习指导书[M].天津:
天津大学出版社,2005
[7]谭明金,余海英.C语言程序设计实例精粹[M].北京:
电子工业出版社,2006
附录(程序清单)
#include
#include
#include
#include
intfeature;//定义输入的功能选项
charnow_date[12];//定义系统当前日期存储缓冲区
SYSTEMTIMEsys;//定义系统时间变量
//定义车辆数据结构
typedefstructVehicle
{
char*ver_id;//定义车辆编号
char*ver_no;//定义车辆牌号
char*driver;//定义车辆对应驾驶员
char*ver_type;//定义车辆类型
char*ver_status;//定义车辆状态
char*ver_last_date;//定义车辆归还日期
char*lender_name;//定义租车人姓名
char*lender_id;//定义租车人身份证号码
char*return_time;//定义归还时间
}Vehicle,*VData;
//定义车辆链表
typedefstructVNode
{
Vehicledata;
structVNode*next;
}VNode,*VehicleList;
//声明函数
VehicleListselect_vehicle(VehicleListL,char*key);//定义车辆查询函数
VehicleListInitList(VehicleListL);//定义链表初始化函数
VehicleListLoadData(VehicleListL,char*filename);//定义信息读取函数
voidSaveData(VehicleListL,char*filename);//定义存储数据函数
intmain_menu();//定义主菜单
intdispatch(VehicleListL,char*lender_name,char*lender_id,char*return_time);//定义车辆调度函数
voidback_vehicle(VehicleListL,char*key,char*lender_name,char*lender_id);//定义车辆归还函数
voidlist_all(VehicleListL);//定义车辆总览函数
VehicleListselect_vehicle(VehicleListL,char*key);//定义车辆查询函数
VehicleListregister_vehicle(VehicleListL);//定义车辆登记函数
voiddelete_vehicle(VehicleListL,char*key);//定义车辆删除函数
intdatecmp(char*a,char*b);//定义日期比较函数
intquit();//定义退出函数
char*getS();
//定义字符串输入接口函数
char*getS()
{
char*c;
chars[30];
scanf("%s",s);
c=(char*)malloc(sizeof(char)*(strlen(s)+1));
strcpy(c,s);
returnc;
}
//定义链表初始化函数
VehicleListInitList(VehicleListL)
{
L=(VehicleList)malloc(sizeof(VNode));
L->next=NULL;
returnL;
}
//定义比较日期大小函数
intdatecmp(char*a,char*b)
{
inti;
for(i=0;i<11;i++)
{
if(a[i]>b[i])
return1;
elseif(a[i]==b[i])
continue;
else
return-1;
}
return0;
}
//定义从文件加载数据函数
VehicleListLoadData(VehicleListL,char*filename)
{
VehicleListp,q;
//Vehiclev,v2,v3;
Vehiclevdata;
FILE*fp;//定义文件指针
charver_id[20],ver_no[20],driver[20],ver_type[20],ver_status[20],ver_date[20];
charlender_name[20],lender_id[20],return_time[20];
q=L;
if((fp=fopen(filename,"r+"))==NULL)
{
printf("文件数据读取失败!
\n");
}
else
{
while(!
feof(fp))//将文件中数据读取到链表中
{
fscanf(fp,"%s%s%s%s%s%s%s%s%s\r\n",ver_id,ver_no,driver,
ver_type,ver_status,ver_date,lender_name,lender_id,return_time);
vdata.ver_id=(char*)malloc(sizeof(char)*(strlen(ver_id)+1));
vdata.ver_no=(char*)malloc(sizeof(char)*(strlen(ver_no)+1));
vdata.driver=(char*)malloc(sizeof(char)*(strlen(driver)+1));
vdata.ver_type=(char*)malloc(sizeof(char)*(strlen(ver_type)+1));
vdata.ver_status=(char*)malloc(sizeof(char)*(strlen(ver_status)+1));
vdata.ver_last_date=(char*)malloc(sizeof(char)*(strlen(ver_date)+1));
vdata.lender_name=(char*)malloc(sizeof(char)*(strlen(lender_name)+1));
vdata.lender_id=(char*)malloc(sizeof(char)*(strlen(lender_id)+1));
vdata.return_time=(char*)malloc(sizeof(char)*(strlen(return_time)+1));
strcpy(vdata.ver_id,ver_id);
strcpy(vdata.ver_no,ver_no);
strcpy(vdata.driver,driver);
strcpy(vdata.ver_type,ver_type);
strcpy(vdata.ver_status,ver_status);
strcpy(vdata.ver_last_date,ver_date);
strcpy(vdata.lender_name,lender_name);
strcpy(vdata.lender_id,lender_id);
strcpy(vdata.return_time,return_time);
p=(VehicleList)malloc(sizeof(VNode));
p->data=vdata;
q->next=p;
q=p;
}
}
q->next=NULL;
fclose(fp);
returnL;
}
//定义存储数据函数
voidSaveData(VehicleListL,char*filename)
{
VehicleListp;
FILE*fp;//定义文件指针
p=L;
if((fp=fopen(filename,"w+"))==NULL)
{
printf("文件写入失败!
\n");
}
else
{
while(p->next!
=NULL)
{
fprintf(fp,"%s%s%s%s%s%s%s%s%s\r\n",p->next->data.ver_id,p->next->data.ver_no,
p->next->data.driver,p->next->data.ver_type,p->next->data.ver_status,
p->next->data.ver_last_date,p->next->data.lender_name,
p->next->data.lender_id,p->next->data.return_time);
p=p->next;
}
}
fclose(fp);
}
//定义主菜单
intmain_menu()
{
inti;
printf("**********