沈阳航空航天大学
课 程 设 计 报 告
课程设计名称:C语言课程设计
课程设计题目: 车辆调度调度程序设计
院(系): 计算机学院
专 业: 计算机科学与技术
班 级:
学 号:
姓 名:
指导教师:
完成日期: 20##年3月17日
目 录
第1章 概要设计... 2
1.1题目的内容与要求... 2
1.2总体结构... 3
第2章 详细设计... 4
2.1主程序模块... 4
2.2车辆调用模块... 5
2.3车辆归还模块... 6
2.4车辆总览模块... 7
2.5车辆查询模块... 8
2.6新车登记模块... 9
2.7车辆注销模块... 10
第3章 调试分析... 11
3.1调试前期... 11
3.2调试中期... 12
3.3调试后期... 12
第4章 使用说明与执行结果... 13
4.1车辆调度:... 13
4.2车辆归还:... 14
4.3车况一览:... 16
4.4车辆查询:... 16
4.5新车登陆:... 17
4.6车辆注销:... 18
4.7退出系统:... 18
参考文献... 19
附 录(程序清单)... 20
内容:用文件系统设计实现一个简单的车辆调度系统。实现用车要求的登记、车辆的管理等功能。
建立车辆基本的情况表,内容包含车辆所有信息,包括车辆目前状态,认为司机和车辆是一一对应的,在用户要求时进行信息动态匹配,并且可以智能选择最合理的车辆资源满足用户要求,为简单起见,可以不考虑司机的情况即仅对车辆进行管理,程序最终输出结果是:本次调出的车辆或者司机。
要求:
1) 系统利用C语言实现;
2) 车辆调用或归还结束后,需要把新的车辆状况保存到文本文件中;
3) 采用VC环境进行调试运行。
本程序主要分为七个模块(功能模块图见图1.1):主程序模块,车辆调用模块,车辆归还模块,车辆总览模块,车辆查询模块,新车登记模块,车辆注销模块。
主程序模块:用于实现整个程序功能引导。
车辆调用模块:实现车辆调用功能。
车辆归还模块:实现车辆归还功能。
车辆总览模块:实现车辆总体情况查看功能。
车辆查询模块:实现单一车辆查询功能。
新车登记模块:实现新车登记,并存入到文件的功能。
车辆注销模块:实现车辆注销,并从文件中删除的功能。
图1.1 功能模块图
引导整个程序的运行,通过主函数模块分别调用各个模块,实现各项功能,流程如图2.1所示。
图 2.1 主模块流程图
注释:
1).先定义相关变量;
2).调用主菜单函数,并判断其返回值,进行相关操作。
用于实现车辆调出的功能,用户使用时,需要输入身份证号码,姓名,计划归还车辆时间,输入完毕后进行车辆条件选择阶段,系统会列出符合条件的车辆,用户可输入希望调用的车辆编号或让系统自动选择距离上次出车时间最长的汽车,选择完毕后,按任意键返回主菜单。流程如图2.2所示。
图2.2 车辆调用模块流程图
用于实现车辆归还操作,进入该功能后,用户需输入调用车辆时输入的姓名及身份证号,如果信息不符,还车失败,并且如果换车时间晚于与预还车时间,还车也会失败。流程如图2.3所示。
图2.3 车辆归还模块流程图
该模块主要实现用户对所有车辆在库车辆的总体情况查看功能。用户进入该功能后,系统将会列出所有车辆信息。流程如图2.4所示。
图2.4 车辆总览模块流程图
该模块主要实现单一车辆信息查询功能,用户只需输入所希望查找车辆编号,即可查找到相关车辆信息。流程如图2.4所示。
图2.5 车辆总览模块流程图
该模块主要实现将新的车辆信息加入到车辆信息库中,并可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。使用时用户需输入车牌号,司机姓名,车辆类型即可,系统会自动为新车辆编号,并且状态改为可调出。流程如图2.6所示。
图2.6 新车登陆模块流程图
该模块主要实现将车辆信息从车辆信息库中删除,并不可以在车辆调用以及车辆查询,车辆总览功能中发现车辆信息。使用时用户需输入车辆编号,系统便会删除车辆信息。流程如图2.7所示。
图2.7 车辆注销模块流程图
调试前期,错误比较多,都是语法错误,只需细心根据提示逐条改正即可。
错误1:
C:\Users\Administrator\Desktop\课设\vehicle.cpp(32) : error C2146: syntax error : missing ';' before identifier 'VehicleList'
改法:在前一末尾增加分号。
错误2:
C:\Users\Administrator\Desktop\课设\vehicle.cpp(32) : error C2057:expected constant expression is not integral
改法:意思是在此处需要一个整型常量表达式,查看此处代码,发现少定义一个表达式,定义一个即可。
错误3:
C:\Users\Administrator\Desktop\课设\vehicle.cpp(32) : error C2084:function 'main_menu' already has a body
改法:删除对此函数的定义。
错误4:
C:\Users\Administrator\Desktop\课设\vehicle.cpp(32) : error C2446:can not allocate an array of costant size 0
改法:查看对表达式是否赋值正确。
调试中期,已无语法错误,调试程序各个功能是否能够实现。
错误:
进入新车登陆功能后,输入车辆信息后并显示成功,但实际新车信息并没有存入文件中。
改法:检查新车登陆函数编写时了逻辑是否有误。发现对链表节点设置错误,改正节点。
调试后期,语法,逻辑均无错误。各项功能都已实现,菜单还不够完美,反复调试,使菜单界面清爽易懂。
主菜单:
******************************************************
* 汽车调度程序 *
******************************************************
* 1.汽车调度 *
* 2.汽车归还 *
* 3.车辆总况一览 *
* 4.车辆查询 *
* 5.新车登记 *
* 6.车辆注销 *
* 7.退出系统 *
******************************************************
* 请选择: 1-7 *
******************************************************
请输入您的选项:
进入车辆调度功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入租车人姓名: WAHAHA
请输入租车人身份证号: 123456789987654321
请输入计划归还时间(格式YYYY-MM-DD,如 20##-03-24): 20##-3-26
请选择您需要的车型(A.大型车 B.中型车 C.小型车 E.返回主菜单 请输入大写字母!):B
**************************可选车辆列****************************
车辆编号 车牌号 驾驶员 车辆类型 车辆状态 上次出车时间(DDYYMM)
1005 KDF005 LILIU B 可调出 NEW
1009 KDF009 ZHAOJIE B 可调出 20##-03-11
*****************************************************************
请输入车辆编号或输入W智能筛选(输入E返回主菜单):W
****************************车辆调度结果************************
已调出车辆:1005,驾驶员:LILIU,出车日期:20##-03-24
*****************************************************************
请按任意键继续. . .
1.信息输入错误
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号: 1001
请输入租车人姓名: YANGZHENPU
请输入租车人身份证号: 123456789987654321
租车人姓名或身份证号输入有误!
请按任意键继续. .
2.归还太迟:
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号: 1003
请输入租车人姓名: LIUZHIGONG
请输入租车人身份证号: 123456789123456789
归还失败,您的车辆已超期,请到总服务台办理超期还车手续!
请按任意键继续. . .
3.归还成功:
进入车辆归还功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入汽车编号: 1005
请输入租车人姓名: WAHAHA
请输入租车人身份证号: 123456789987654321
汽车归还成功!
请按任意键继续. . .
进入车况一览功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人姓名 计划归还时间
1001 KDF001 ZHANGSAN A 可调出 20##-03-12 N/A N/A
1002 KDF002 LISI B 出车中 20##-03-15 LIUZHIGONG 20##-03-20
1003 KDF003 ZHAOLIU A 出车中 20##-03-11 LIUZHIGONG 20##-03-14
1004 KDF004 ZHANGWU C 可调出 20##-03-12 N/A N/A
1005 KDF005 LILIU B 可调出 20##-03-24 N/A N/A
1006 KDF006 ZHAOLI B 出车中 20##-03-11 LIUZHIGONG 20##-03-17
1007 KDF007 ZHANGXUE A 出车中 20##-03-17 QIANGGE 20##-3-18
1008 KDF008 LIJIE C 可调出 NEW N/A N/A
1009 KDF009 ZHAOJIE B 可调出 20##-03-11 N/A N/A
1010 KDF010 ZHOUSU A 可调出 20##-03-14 N/A N/A
1011 DFD222 ZHIGONG C 可调出 NEW N/A N/A
1012 KDF010 ZHOULANG A 可调出 20##-03-15 N/A N/A
请按任意键继续. . .
进入车辆查询功能!
请输入汽车编号或车牌号: 1005
***************找到了符合条件的车辆信息*****************************
车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人姓名 计划归还时间
1005 KDF005 LILIU B 可调出 20##-03-24 N/A N/A
请按任意键继续. . .
进入车新车登陆功能!
请输入车牌号: KSF008
请输入驾驶员: LEHAHA
请选择车辆类型(A/B/C): C
成功登记牌号为:KSF008的车辆,车辆编号为:1013!
请按任意键继续. . .
进入车辆注销功能!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
请输入需要注销的车辆编号: 1011
已注销编号为1011的车辆!
请按任意键继续. . .
******************************************************
* 汽车调度程序 *
******************************************************
* 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int feature;//定义输入的功能选项
char now_date[12];//定义系统当前日期存储缓冲区
SYSTEMTIME sys; //定义系统时间变量
//定义车辆数据结构
typedef struct Vehicle
{
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;
//定义车辆链表
typedef struct VNode
{
Vehicle data;
struct VNode *next;
}VNode,*VehicleList;
//声明函数
VehicleList select_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 *return_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, char * key);//定义车辆删除函数
int datecmp(char *a,char *b);//定义日期比较函数
int quit();//定义退出函数
char *getS();
//定义字符串输入接口函数
char *getS()
{
char *c;
char s[30];
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->next=NULL;
return L;
}
//定义比较日期大小函数
int datecmp(char *a,char *b)
{
int i;
for(i=0;i<11;i++)
{
if(a[i]>b[i])
return 1;
else if(a[i]==b[i])
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_id[20],ver_no[20],driver[20],ver_type[20],ver_status[20],ver_date[20];
char lender_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);
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 %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);
}
//定义主菜单
int main_menu()
{
int i;
printf("******************************************************\n");
printf("* 汽车调度程序 *\n");
printf("******************************************************\n");
printf("* 1.汽车调度 *\n");
printf("* 2.汽车归还 *\n");
printf("* 3.车辆总况一览 *\n");
printf("* 4.车辆查询 *\n");
printf("* 5.新车登记 *\n");
printf("* 6.车辆注销 *\n");
printf("* 7.退出系统 *\n");
printf("******************************************************\n");
printf("* 请选择: 1-7 *\n");
printf("******************************************************\n");
printf("请输入您的选项:");
scanf("%d", &i);
feature=i;
return i;
}
//定义功能1--汽车调度
int dispatch(VehicleList L, char *lender_name, char *lender_id, char *return_time)
{
char *vtype,*vid;//车型
VehicleList p,q1,q2;
char tmpdate[20];
int i=0;
p=L;
q1=L;
q2=L;
strcpy(tmpdate,now_date);
printf("\n请选择您需要的车型(A.大型车 B.中型车 C.小型车 E.返回主菜单 请输入大写字母!):");
vtype = getS();
if (strcmp("E",vtype) == 0) return 0;//如果输入E,返回主菜单
printf("\n****************************************可选车辆列表******************************************");
printf("\n车辆编号 车牌号 驾驶员 车辆类型 车辆状态 上次出车时间(DDYYMM)\n");
while (L->next != NULL)
{//显示符合条件的在库车辆信息
if (strcmp("出车中",L->next->data.ver_status) !=0 && strcmp(vtype,L->next->data.ver_type) ==0)
{
if(datecmp(tmpdate,L->next->data.ver_last_date) > -1)//调用比较未调度时间的函数
{
q1=L;//获得最长时间没有被调度的车的节点指针
strcpy(tmpdate,q1->next->data.ver_last_date);
}
printf("%6s %10s %-10s %8s %13s %15s\n",
L->next->data.ver_id,L->next->data.ver_no,L->next->data.driver,L->next->data.ver_type,
L->next->data.ver_status,L->next->data.ver_last_date);
}
if (strcmp("NEW",L->next->data.ver_last_date) ==0 && strcmp(vtype,L->next->data.ver_type) ==0)
{
i++;//计算新车数量
q2=L;//获得新车的节点指针
}
L=L->next;
}
L=p;
printf("**************************************************************************\n");
printf("请输入车辆编号或输入W智能筛选(输入E返回主菜单):");
vid = getS();
if (strcmp("W",vid) == 0)
{
if(i>0)
{
printf("\n****************************************车辆调度结果****************************************");
printf("\n已调出车辆:%s,驾驶员:%s,出车日期:%s\n",q2->next->data.ver_id,q2->next->data.driver,now_date);
printf("**********************************************************************************************\n");
q2->next->data.ver_status="出车中";//修改车辆状态和上次出车时间
q2->next->data.ver_last_date=(char*)malloc(sizeof(char)*(strlen(now_date)+1));
strcpy(q2->next->data.ver_last_date,now_date);
strcpy(q2->next->data.lender_name,lender_name);
strcpy(q2->next->data.lender_id,lender_id);
strcpy(q2->next->data.return_time,return_time);
return 1;
}
else
{
printf("\n****************************************车辆调度结果****************************************");
printf("\n已调出车辆:%s,驾驶员:%s,出车日期:%s\n",q1->next->data.ver_id,q1->next->data.driver,now_date);
printf("**********************************************************************************************\n");
q1->next->data.ver_status="出车中";//修改车辆状态和上次出车时间
q1->next->data.ver_last_date=(char*)malloc(sizeof(char)*(strlen(now_date)+1));
strcpy(q1->next->data.ver_last_date,now_date);
strcpy(q1->next->data.lender_name,lender_name);
strcpy(q1->next->data.lender_id,lender_id);
strcpy(q1->next->data.return_time,return_time);
return 1;
}
}
else if ((p=select_vehicle(L,vid)) != NULL)
{
p->next->data.ver_status="出车中";//修改车辆状态和上次出车时间
p->next->data.ver_last_date=(char*)malloc(sizeof(char)*(strlen(now_date)+1));
strcpy(p->next->data.ver_last_date,now_date);
strcpy(p->next->data.lender_name,lender_name);
strcpy(p->next->data.lender_id,lender_id);
strcpy(p->next->data.return_time,return_time);
printf("\n****************************************车辆调度结果****************************************");
printf("\n已调出车辆:%s,驾驶员:%s,出车日期:%s\n",p->next->data.ver_id,p->next->data.driver,now_date);
printf("**********************************************************************************************\n");
return 1;
}
else if (strcmp("E",vid) == 0)
{
return 0;
}
else
{
printf("输入错误,请返回!\n");
return 3;
}
return 3;
}
//定义功能2--汽车归还
void back_vehicle(VehicleList L, char * key, char *lender_name,
char *lender_id)
{
VehicleList p;
if ((p=select_vehicle(L,key)) != NULL)
{
if (strcmp(lender_name,p->next->data.lender_name) == 0 &&
strcmp(lender_id,p->next->data.lender_id) == 0)//姓名和身份证号输入正确才可还车
{
if (datecmp(now_date,p->next->data.return_time) < 1)//如果实际归还时间超出预定归还时间,提示到服务台办理
{
p->next->data.ver_status="可调出";//恢复车辆状态及租车人信息为初始状态
p->next->data.lender_name="N/A";
p->next->data.lender_id="N/A";
p->next->data.return_time="N/A";
printf("\n汽车归还成功!\n\n");
}
else
{
printf("\n归还失败,您的车辆已超期,请到总服务台办理超期还车手续!\n\n");
}
}
else
{
printf("\n租车人姓名或身份证号输入有误!\n\n");
}
}else{
printf("\n没有查询到编号为:%s的车辆信息!\n\n",key);
}
}
//定义功能3--车辆总况一览
void list_all(VehicleList L)
{
printf("\n车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人姓名 计划归还时间\n");
while (L->next != NULL)
{
//显示所有已登记车辆信息
//if(strcmp("出车中",L->next->data.ver_status) !=0)
printf("%6s %8s %-10s %1s %9s %12s %9s %12s\n",
L->next->data.ver_id,L->next->data.ver_no,L->next->data.driver,
L->next->data.ver_type,L->next->data.ver_status,L->next->data.ver_last_date,
L->next->data.lender_name,L->next->data.return_time);
L=L->next;
}
printf("\n");
system("pause");
}
//定义功能4--车辆查询
VehicleList select_vehicle(VehicleList L, char * key)
{
VehicleList p;
p=L;
while (p->next != NULL)
{
//如果查找到符合条件的车辆信息,则返回这个车辆信息节点的指针,strcmp,字符串比较函数
if (strcmp(key,p->next->data.ver_id) == 0 || strcmp(key,p->next->data.ver_no) == 0)
{
return p;//P为该车辆信息节点的指针
}
else
{
p=p->next;
}
}
return NULL;
}
//定义功能5--新车登记
VehicleList register_vehicle(VehicleList L)
{
VehicleList p,q;
Vehicle v;//定义新增车辆结构体
int id=1001;//初始车辆编号起始ID
char tmpID[5];//车辆编号格式化为字符串
q=L;
while (q->next != NULL)
{
q=q->next;//将指针调至链表尾部以插入新数据
}
//printf("请输入车辆编号: ");
//v.ver_id=getS();
printf("请输入车牌号: ");
v.ver_no=getS();
printf("请输入驾驶员: ");
v.driver=getS();
printf("请选择车辆类型(A/B/C): ");
v.ver_type=getS();
v.ver_status="可调出";
v.ver_last_date="NEW";
v.lender_name="N/A";
v.lender_id="N/A";
v.return_time="N/A";
//自动生成车辆编号
sprintf(tmpID, "%d", id);
while(select_vehicle(L,tmpID) != NULL)
{
id++;
sprintf(tmpID, "%d", id);//将id转为字符串存储到tmpID中
}
v.ver_id=(char*)malloc(sizeof(char)*(strlen(tmpID)+1));//分配内存空间
strcpy(v.ver_id,tmpID);//将tmpID拷贝到车辆信息结构中
if(select_vehicle(L,v.ver_no) == NULL)
{
//检查是否已有该车牌号
p=(VehicleList)malloc(sizeof(VNode));//创建新的车辆节点
p->data=v;
q->next=p;//连接新的车辆节点
q=p; //将q指针移至最后节点
q->next=NULL;//将最后一个节点的next设为NULL
printf("\n成功登记牌号为:%s的车辆,车辆编号为:%s!\n\n",v.ver_no,v.ver_id);
}
else
{
printf("\n已存在该车辆!\n\n");
}
return L;
}
//定义功能6--车辆注销
void delete_vehicle(VehicleList L, char * key)
{
VehicleList p,q;
p=L;
if ((p=select_vehicle(L,key)) != NULL)
{
q=p->next;
p->next=q->next;//将节点p连接到下下一个节点,即删除找到的节点
free(q);
printf("\n已注销编号为%s的车辆!\n\n",key);
}
else
{
printf("\n没有找到符合条件的车辆!\n\n");
}
system("pause");
}
//定义功能7--退出系统函数
int quit()
{
char *temp;
temp=getS();//接受用户输入
if(strcmp("Y",temp)==0)
{
return 1;//返回1,为确实退出
}
else if(strcmp("N",temp)==0)
{
return 0;//返回0,则不退出,并清屏,加载主菜单
}
else
{
return 2;//返回2,说明输入错误,任意键返回主菜单
}
return 2;//默认返回2
}
int main()
{
VehicleList L1,tmpL;
char *vehicle_key,*lender_name,*lender_id,*return_time;
char *filename="vehicle.txt";//设置数据文件
GetLocalTime(&sys);
sprintf(now_date,"%4d-%02d-%02d",sys.wYear,sys.wMonth,sys.wDay);
L1=(VehicleList)malloc(sizeof(VNode));
L1=InitList(L1);
L1=LoadData(L1,"vehicle.txt");
main_menu:
//SaveData(L1,filename);//每完成一个操作都保存数据到文件,默认选择7程序退出时才保存数据
main_menu();//加载主菜单
switch (feature)
{
case 1:
{
int i;
printf("请输入租车人姓名: ");
lender_name = getS();
printf("请输入租车人身份证号: ");
lender_id = getS();
printf("请输入计划归还时间(格式YYYY-MM-DD,如 %s): ",now_date);
return_time = getS();
if (datecmp(now_date,return_time) > 0)
{
printf("\n归还时间输入错误,最少需要租一天,即时间应该大于等于 %s\n\n",now_date);
system("pause");
system("cls");
goto main_menu;
}
i=dispatch(L1,lender_name,lender_id,return_time); //调用车辆调度函数
if (i==0)
{
system("cls");
goto main_menu;
}
else
{
system("pause");
system("cls");
goto main_menu;
}
}
case 2:
{
printf("请输入汽车编号: ");
vehicle_key = getS();
printf("请输入租车人姓名: ");
lender_name = getS();
printf("请输入租车人身份证号: ");
lender_id = getS();
back_vehicle(L1,vehicle_key,lender_name,lender_id);//调用车辆归还函数
system("pause");
system("cls");
goto main_menu;
}
case 3:
{
list_all(L1);//调用车辆总览函数
system("cls");
goto main_menu;
}
case 4:
{
printf("请输入汽车编号或车牌号: ");
vehicle_key=getS();
tmpL=select_vehicle(L1,vehicle_key);//调用车辆查找函数
if (tmpL != NULL)//返回不为空,说明找到了
{
printf("\n*********************找到了符合条件的车辆信息*****************************\n");
printf("\n车辆编号 车牌号 驾驶员 车型 车辆状态 上次出车时间 租车人姓名 计划归还时间\n");
printf("%6s %8s %-10s %1s %9s %12s %9s %12s\n\n",
tmpL->next->data.ver_id,tmpL->next->data.ver_no,tmpL->next->data.driver,
tmpL->next->data.ver_type,tmpL->next->data.ver_status,
tmpL->next->data.ver_last_date,tmpL->next->data.lender_name,
tmpL->next->data.return_time);
system("pause");
}
else
{
printf("\n\n没有找到符合条件的车辆信息!\n\n");
system("pause");//按任意键继续
}
system("cls");
goto main_menu;
}
case 5:
{
L1=register_vehicle(L1);//调用车辆登记函数
system("pause");
system("cls");
goto main_menu;
}
case 6:
{
vehicle_key = "0008";
printf("请输入需要注销的车辆编号: ");
vehicle_key=getS();
delete_vehicle(L1,vehicle_key);//调用车辆注销函数
system("cls");
goto main_menu;
}
case 7:
{
int temp;
printf("您确定要退出系统?输入Y确定,输入N返回主菜单\n");
temp = quit();
if(1 == temp)
{
SaveData(L1,filename);//保存数据
return 0;
}
else if(0 == temp){
ystem("cls");
goto main_menu;//如果返回真则退出,否则返回主菜单
}
else
{
printf("输入错误!");
system("pause");
}
}
default:
{
system("cls");
getchar();
goto main_menu;//如果输入不在1-7内,则返回主菜单
}
}
return 0;
}
东莞理工学院《C语言程序设计》课程设计题目:图书信息管理系统院系:电子工程学院专业:电子信息工程年级:20##班别:2班指导教师:…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
河南理工大学计算机科学与技术学院课程设计报告20XX20XX学年第一学期课程名称C语言课程设计设计题目《小学算术运算测试》学生姓名…
C语言课程设计报告设计题目专业班级学号姓名任课老师时间目录一课程设计题目及所涉及知识点二课程设计思路及设计流程图三课程设计中遇到的…
C语言程序设计课程设计报告20xx20xx学年第1学期题目专业班级姓名学号指导教师成绩计算机科学与技术系20xx年12月31日目录…
大连交通大学软件学院C语言课程设计报告SOFTWAREINSTITUTEOFDALIANJIAOTONGUNIVERSITYEXP…
XX大学课程设计报告课程设计名称C语言课程设计课程设计题目排班系统院系XX学院专业XX班级XX学号XXXXXXXXXXXXX姓名X…
C语言课程设计报告姓名张林班级计算111班学号11060101241A类基本题1围绕着山顶有10个圆形排列的洞狐狸要吃兔子兔子说可…
高级语言程序设计C课程设计报告书目录一设计任务2二系统设计方案3三程序主要代码分析4四程序调试中出现的问题及其解决方法17五改进意…
C语言程序设计课程设计学生姓名学号系院专业设计论文题目学生选课系统管理完成日期20xx年6月指导教师目录一实验目的二实验内容三总体…
C课程设计报告题目小学算术运算测试设计者刘星刘俊良凌锋专业班级计算机网络0901班学号343337指导教师任长安所属系部计算机与信…