1、车辆调度程序C语言课设报告沈阳航空航天大学课 程 设 计 报 告课程设计名称:C语言课程设计 课程设计题目: 车辆调度调度程序设计院(系): 计算机学院专 业: 计算机科学与技术班 级: 04010101学 号: * * *指导教师: 丛丽晖完成日期: 2010年3月17日第1章 概要设计1.1题目的内容与要求内容:用文件系统设计实现一个简单的车辆调度系统。实现用车要求的登记、车辆的管理等功能。建立车辆基本的情况表,内容包含车辆所有信息,包括车辆目前状态,认为司机和车辆是一一对应的,在用户要求时进行信息动态匹配,并且可以智能选择最合理的车辆资源满足用户要求,为简单起见,可以不考虑司机的情况即仅
2、对车辆进行管理,程序最终输出结果是:本次调出的车辆或者司机。要求:1)系统利用C语言实现;2)车辆调用或归还结束后,需要把新的车辆状况保存到文本文件中;3)采用VC环境进行调试运行。1.2总体结构本程序主要分为七个模块(功能模块图见图1.1):主程序模块,车辆调用模块,车辆归还模块,车辆总览模块,车辆查询模块,新车登记模块,车辆注销模块。主程序模块:用于实现整个程序功能引导。车辆调用模块:实现车辆调用功能。车辆归还模块:实现车辆归还功能。车辆总览模块:实现车辆总体情况查看功能。车辆查询模块:实现单一车辆查询功能。新车登记模块:实现新车登记,并存入到文件的功能。车辆注销模块:实现车辆注销,并从文
3、件中删除的功能。图1.1 功能模块图第2章 详细设计2.1主程序模块引导整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。6543210E 图2.1 主模块流程图注释:1).先定义相关变量;2).调用主菜单函数,并判断其返回值,进行相关操作。2.2车辆调用模块 用于实现车辆调出的功能,用户使用时,需要输入身份证号码,姓名,计划归还车辆时间,输入完毕后进行车辆条件选择阶段,系统会列出符合条件的车辆,用户可输入希望调用的车辆编号或让系统自动选择距离上次出车时间最长的汽车,选择完毕后,按任意键返回主菜单。流程如图2.2所示。否是图2.2 车辆调用模块流程图2.3车辆归
4、还模块 用于实现车辆归还操作,进入该功能后,用户需输入调用车辆时输入的姓名及身份证号,如果信息不符,还车失败,并且如果换车时间晚于与预还车时间,还车也会失败。流程如图2.3所示。否否是是图2.3 车辆归还模块流程图2.4车辆总览模块 该模块主要实现用户对所有车辆在库车辆的总体情况查看功能。用户进入该功能后,系统将会列出所有车辆信息。流程如图2.4所示。是否图2.4 车辆总览模块流程图2.5车辆查询模块 该模块主要实现单一车辆信息查询功能,用户只需输入所希望查找车辆编号,即可查找到相关车辆信息。流程如图2.4所示。否是图2.5 车辆总览模块流程图2.6新车登记模块 该模块主要实现将新的车辆信息加
5、入到车辆信息库中,并可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。使用时用户需输入车牌号,司机姓名,车辆类型即可,系统会自动为新车辆编号,并且状态改为可调出。流程如图2.6所示。图2.6 新车登陆模块流程图2.7车辆注销模块 该模块主要实现将车辆信息从车辆信息库中删除,并不可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。使用时用户需输入车辆编号,系统便会删除车辆信息。流程如图2.7所示。否是图2.7 车辆注销模块流程图第3章 调试分析3.1调试前期 调试前期,错误比较多,都是语法错误,只需细心根据提示逐条改正即可。 错误1:C:UsersAdministratorDeskto
6、p课设vehicle.cpp(32) : error C2146: syntax error : missing ; before identifier VehicleList改法:在前一末尾增加分号。错误2:C:UsersAdministratorDesktop课设vehicle.cpp(32) : error C2057:expected constant expression is not integral改法:意思是在此处需要一个整型常量表达式,查看此处代码,发现少定义一个表达式,定义一个即可。错误3:C:UsersAdministratorDesktop课设vehicle.cpp(3
7、2) : error C2084:function main_menu already has a body改法:删除对此函数的定义。错误4:C:UsersAdministratorDesktop课设vehicle.cpp(32) : error C2446:can not allocate an array of costant size 0改法:查看对表达式是否赋值正确。3.2调试中期 调试中期,已无语法错误,调试程序各个功能是否能够实现。 错误:进入新车登陆功能后,输入车辆信息后并显示成功,但实际新车信息并没有存入文件中。改法:检查新车登陆函数编写时了逻辑是否有误。发现对链表节点设置错误
8、,改正节点。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.
9、中型车 C.小型车 E.返回主菜单 请输入大写字母!):B*可选车辆列*车辆编号 车牌号 驾驶员 车辆类型 车辆状态 上次出车时间(DDYYMM) 1005 KDF005 LILIU B 可调出 NEW 1009 KDF009 ZHAOJIE B 可调出 2011-03-11*请输入车辆编号或输入W智能筛选(输入E返回主菜单):W*车辆调度结果*已调出车辆:1005,驾驶员:LILIU,出车日期:2011-03-24*请按任意键继续. . .4.2车辆归还:1.信息输入错误进入车辆归还功能!请输入汽车编号: 1001请输入租车人姓名: YANGZHENPU请输入租车人身份证号: 1234567
10、89987654321租车人姓名或身份证号输入有误!请按任意键继续. . 2.归还太迟:进入车辆归还功能!请输入汽车编号: 1003请输入租车人姓名: LIUZHIGONG请输入租车人身份证号: 123456789123456789归还失败,您的车辆已超期,请到总服务台办理超期还车手续!请按任意键继续. . .3.归还成功:进入车辆归还功能!请输入汽车编号: 1005 请输入租车人姓名: WAHAHA请输入租车人身份证号: 123456789987654321汽车归还成功!请按任意键继续. . .4.3车况一览: 进入车况一览功能!车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人
11、姓名 计划归还时间 1001 KDF001 ZHANGSAN A 可调出 2011-03-12 N/A N/A 1002 KDF002 LISI B 出车中 2011-03-15 LIUZHIGONG 2011-03-20 1003 KDF003 ZHAOLIU A 出车中 2011-03-11 LIUZHIGONG 2011-03-14 1004 KDF004 ZHANGWU C 可调出 2011-03-12 N/A N/A 1005 KDF005 LILIU B 可调出 2011-03-24 N/A N/A 1006 KDF006 ZHAOLI B 出车中 2011-03-11 LIUZH
12、IGONG 2011-03-17 1007 KDF007 ZHANGXUE A 出车中 2011-03-17 QIANGGE 2011-3-18 1008 KDF008 LIJIE C 可调出 NEW N/A N/A 1009 KDF009 ZHAOJIE B 可调出 2011-03-11 N/A N/A 1010 KDF010 ZHOUSU A 可调出 2011-03-14 N/A N/A 1011 DFD222 ZHIGONG C 可调出 NEW N/A N/A 1012 KDF010 ZHOULANG A 可调出 2011-03-15 N/A N/A请按任意键继续. . .4.4车辆查询
13、:进入车辆查询功能!请输入汽车编号或车牌号: 1005*找到了符合条件的车辆信息*车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人姓名 计划归还时间 1005 KDF005 LILIU B 可调出 2011-03-24 N/A N/A请按任意键继续. . .4.5新车登陆: 进入车新车登陆功能!请输入车牌号: KSF008请输入驾驶员: LEHAHA请选择车辆类型(A/B/C): C成功登记牌号为:KSF008的车辆,车辆编号为:1013!请按任意键继续. . . 4.6车辆注销:进入车辆注销功能!请输入需要注销的车辆编号: 1011已注销编号为1011的车辆!请按任意键继续.
14、. .4.7退出系统:* 汽车调度程序 * 1.汽车调度 * 2.汽车归还 * 3.车辆总况一览 * 4.车辆查询 * 5.新车登记 * 6.车辆注销 * 7.退出系统 * 请选择: 1-7 *请输入您的选项:7您确定要退出系统?输入Y确定,输入N返回主菜单Y参考文献1 张长海. C语言程序设计M . 北京:高等教育出版社,20062 裘宗燕. 从问题到程序:程序设计与C语言引论M . 北京:机械工业出版社,2005.93 王敬华,林萍,张清国. C语言程序设计教程M . 北京:清华大学出版社,2009.8、4 谭浩强. C程序设计M . 北京:清华大学出版社,20055 谭浩强. C程序设计
15、题解与上机指导M . 北京:清华大学出版社,20056 胡建平. C语言程设计学习指导书M . 天津:天津大学出版社,20057 谭明金,余海英. C语言程序设计实例精粹M . 北京:电子工业出版社,2006附 录(程序清单)#include #include #include #include int feature;/定义输入的功能选项char now_date12;/定义系统当前日期存储缓冲区SYSTEMTIME sys; /定义系统时间变量/定义车辆数据结构typedef struct Vehicle char *ver_id;/定义车辆编号 char *ver_no;/定义车辆牌号
16、char *driver;/定义车辆对应驾驶员 char *ver_type;/定义车辆类型 char *ver_status;/定义车辆状态 char *ver_last_date;/定义车辆归还日期 char *lender_name;/定义租车人姓名 char *lender_id;/定义租车人身份证号码 char *return_time;/定义归还时间Vehicle,*VData;/定义车辆链表typedef struct VNode Vehicle data; struct VNode *next;VNode,*VehicleList;/声明函数VehicleList select
17、_vehicle(VehicleList L, char * key);/定义车辆查询函数VehicleList InitList(VehicleList L);/定义链表初始化函数VehicleList LoadData(VehicleList L, char *filename);/定义信息读取函数void SaveData(VehicleList L, char *filename);/定义存储数据函数int main_menu();/定义主菜单int dispatch(VehicleList L, char *lender_name, char *lender_id, char *re
18、turn_time);/定义车辆调度函数void back_vehicle(VehicleList L, char * key, char *lender_name, char *lender_id);/定义车辆归还函数void list_all(VehicleList L);/定义车辆总览函数VehicleList select_vehicle(VehicleList L, char * key);/定义车辆查询函数VehicleList register_vehicle(VehicleList L);/定义车辆登记函数void delete_vehicle(VehicleList L, c
19、har * key);/定义车辆删除函数int datecmp(char *a,char *b);/定义日期比较函数int quit();/定义退出函数char *getS();/定义字符串输入接口函数char *getS() char *c; char s30; scanf(%s,s); c=(char*)malloc(sizeof(char)*(strlen(s)+1); strcpy(c,s); return c;/定义链表初始化函数VehicleList InitList(VehicleList L) L=(VehicleList)malloc(sizeof(VNode); L-nex
20、t=NULL; return L;/定义比较日期大小函数int datecmp(char *a,char *b) int i; for(i=0;ibi) return 1; else if(ai=bi) continue; else return -1; return 0;/定义从文件加载数据函数VehicleList LoadData(VehicleList L,char *filename) VehicleList p,q; /Vehicle v,v2,v3; Vehicle vdata; FILE *fp;/定义文件指针 char ver_id20,ver_no20,driver20,v
21、er_type20,ver_status20,ver_date20; char lender_name20,lender_id20,return_time20; q=L; if(fp = fopen(filename,r+) = NULL) printf(文件数据读取失败!n); else while (!feof(fp)/将文件中数据读取到链表中 fscanf(fp,%s %s %s %s %s %s %s %s %srn,ver_id,ver_no,driver, ver_type,ver_status,ver_date,lender_name,lender_id,return_time)
22、; 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(ve
23、r_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(vdat
24、a.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=(
25、VehicleList)malloc(sizeof(VNode); p-data=vdata; q-next=p; q=p; q-next=NULL; fclose(fp); return L;/定义存储数据函数void SaveData(VehicleList L, char *filename) VehicleList p; 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 %srn,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);/定义主菜单int main_menu() int i; printf(*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1