基于C语言实现车辆管理系统
目录
该项目是基于C语言实现的一个简单的车辆管理系统,实现了车辆信息的增、删、改、查等功能,里面利用了C语言和数据结构的知识,项目中还可增加新功能,后续会更新。
项目说明
项目名称:车辆管理系统
项目背景:现如今,随着汽车数量的不断增加,很多地方因为车辆管理方法还比较落后,会专门招聘车辆管理人员将车辆信息进行统计并记录在册,很不方便。该管理系统就是为了解决此类问题而设计的。
项目功能:
实现了车辆信息(如:车辆的名称,车辆的编号,车辆的动力,车辆的价格,车辆的状态,车辆的型号,车辆的厂商,车辆的颜色)的增、删、改、查。
功能目录
代码实现
此项目是利用hash实现的车辆信息的增删改查,车辆的信息是利用结构体进行封装的,方便后续功能的增加或者删除。
头文件
#ifndef _CAR_H
#define _CAR_H#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 50
定义hash函数
//定义元素的类型
typedef struct car
{char name[30];//车名int num;//汽车的编号char power[10];//汽车的动力int price;//汽车的价格char status[20];//汽车的状态char xh[10];//型号char cs[10];//厂商char color[10];//颜色
}data_type;//定义链表节点的数据类型
typedef struct linkNode
{data_type data;struct linkNode *pNext;
}Link;//定义hash的数据类型
typedef struct hash
{Link *pArr[SIZE];//结构体类型的指针数组,存放size个Link *类型的指针int count;//汽车的数量int lastNum;//最后一辆车的编号
}Hash;
定义枚举
enum res
{HASH_NULL=-3,MALLOC_ERR,NOCAR,OK
};
函数声明
创建hash表
//创建一个hashOC表
//参数:空
//返回值:成功返回hash表首地址,失败返回NULL
Hash *createHash(void);
创建hash函数
//创建Hash函数
//参数:key
//返回值:返回key-1;
int hashFun(int key);
插入元素
//插入元素
int insertHash(Hash *pHash,data_type item);
显示信息
//显示
//参数:hash表头
//返回值:成功返回OK。失败返回失败原因
int showHash(Hash *pHash);
删除信息
//删除
//参数hash头,要删除的车辆的编号
//返回值:成功返回OK,失败返回失败原因
int deleteHash(Hash *pHash,int num);
修改信息
//修改
//参数:hash表头,修改车辆的编号
//成功返回OK,失败返回失败原因
int alterHash(Hash *pHash,data_type NewData);
查找信息
//查找
//参数:hash表头,要查找的车辆的编号,保存要查找的数据
//返回值:成功返回OK,失败返回失败原因
int searchHash(Hash *pHash,int num,data_type *pData);
销毁hash表
//销毁
//参数:hash
//成功返回OK,失败返回失败原因
int destoryHash(Hash **pHash);
主函数
将车辆的所有信息存放到文件中,方便后续的查看与调用。
首先是对文件的操作,此处是以只读的方式先打开文件,如果文件必须先存在,如果不存在,请先在该目录下新建文件(touch message.txt即可新建一个名为message.txt文件)。
//打开文件int fr=open("Message.txt",O_RDONLY);if(fr <0){perror("open err");return -1;}//操作文件data_type MessageData;while(1){int rd_count = read(fr,&MessageData,sizeof(data_type));if(0 == rd_count){printf("倒入信息完毕\n");break;}else if(rd_count<0){printf("倒入失败\n");return -1;}else{insertHash(pHash,MessageData);pHash->lastNum++;}}//关闭文件close(fr);
文件打开后要将数据写入到文件中,下面问写入数据到文件的代码
//打开文件int fw=open("Message.txt",O_WRONLY | O_CREAT,0666);if(fw<0){perror("open err");return -1;}//操作文件int i;for(i=0;i<pHash->lastNum;i++){Link *pFind=pHash->pArr[i];while(pFind != NULL){int fw_count = write(fw,&pFind->data,sizeof(data_type));if(fw_count == 0){printf("倒入失败\n");break;}else if(fw_count <0){printf("倒入失败\n");break;}pFind=pFind->pNext;}}//关闭文件close(fw);
菜单
printf("***************车辆管理系统*********************\n");printf("1\t\t插入\n");printf("2\t\t显示\n");printf("3\t\t删除\n");printf("4\t\t修改\n");printf("5\t\t查找\n");printf("-1\t\t退出\n");printf("***************请输入你的选择*******************\n");printf("************************************************\n");
插入信息到hash表中
//插入printf("请输入你要插入车辆的名称:\n");scanf("%s",item.name);item.num=pHash->lastNum+1;pHash->lastNum++;printf("请输入你要插入车辆的动力:\n");scanf("%s",item.power);printf("请输入你要插入车辆的价格:\n");scanf("%d",&item.price);printf("请输入你要插入车辆的状态:\n");scanf("%s",item.status);printf("请输入你要插入的车辆的型号\n");scanf("%s",item.xh);printf("请输入你要插入的车辆的厂商\n");scanf("%s",item.cs);printf("请输入你要插入的车辆的颜色\n");scanf("%s",item.color);insertHash(pHash,item);
显示
//显示showHash(pHash);
删除
printf("请输入你要删除的车辆的编号\n");scanf("%d",&num);deleteHash(pHash,num);printf("删除成功,已将信息修改\n");
修改
printf("请输入你修改的车辆的名称:\n");scanf("%s",item.name);printf("请输入你要修改车辆的编号:\n");scanf("%d",&item.num);printf("请输入你要修改车辆的动力:\n");scanf("%s",item.power);printf("请输入你要修改车辆的价格:\n");scanf("%d",&item.price);printf("请输入你要修改车辆的状态:\n");scanf("%s",item.status);printf("请输入你要修改车辆的型号:\n");scanf("%s",item.xh);printf("请输入你要修改车辆的厂商:\n");scanf("%s",item.cs);printf("请输入你要修改车辆的颜色:\n");scanf("%s",item.color);alterHash(pHash,item);
查找
//查找printf("请输入你要查找的车辆的编号\n");scanf("%d",&num);searchHash(pHash,num,NULL);
main函数整体代码
#include "../include/car.h"int main(void)
{int op=0;int num=0;data_type item;Hash *pHash=createHash();do{printf("\t\t *车辆管理系统*\n");printf("\t\t===================================================\n");printf("\t\t 欢迎使用车辆管理系统\n");printf("\t\t 按1进入系统菜单\n");printf("\t\t 按2推出系统\n");scanf("%d",&op);if(op==1)break;else if(op == 2)exit(0);}while(1);//打开文件int fr=open("Message.txt",O_RDONLY);if(fr <0){perror("open err");return -1;}//操作文件data_type MessageData;while(1){int rd_count = read(fr,&MessageData,sizeof(data_type));if(0 == rd_count){printf("倒入信息完毕\n");break;}else if(rd_count<0){printf("倒入失败\n");return -1;}else{insertHash(pHash,MessageData);pHash->lastNum++;}}//关闭文件close(fr);while(1){printf("***************车辆管理系统*********************\n");printf("1\t\t插入\n");printf("2\t\t显示\n");printf("3\t\t删除\n");printf("4\t\t修改\n");printf("5\t\t查找\n");printf("-1\t\t退出\n");printf("***************请输入你的选择*******************\n");printf("************************************************\n");scanf("%d",&op);if(-1 == op){break;}switch(op){case 1:{//插入printf("请输入你要插入车辆的名称:\n");scanf("%s",item.name);item.num=pHash->lastNum+1;pHash->lastNum++;printf("请输入你要插入车辆的动力:\n");scanf("%s",item.power);printf("请输入你要插入车辆的价格:\n");scanf("%d",&item.price);printf("请输入你要插入车辆的状态:\n");scanf("%s",item.status);printf("请输入你要插入的车辆的型号\n");scanf("%s",item.xh);printf("请输入你要插入的车辆的厂商\n");scanf("%s",item.cs);printf("请输入你要插入的车辆的颜色\n");scanf("%s",item.color);insertHash(pHash,item);break;}case 2:{//显示showHash(pHash);break;}case 3:{//删除printf("请输入你要删除的车辆的编号\n");scanf("%d",&num);deleteHash(pHash,num);printf("删除成功,已将信息修改\n");break;}case 4:{//修改printf("请输入你修改的车辆的名称:\n");scanf("%s",item.name);printf("请输入你要修改车辆的编号:\n");scanf("%d",&item.num);printf("请输入你要修改车辆的动力:\n");scanf("%s",item.power);printf("请输入你要修改车辆的价格:\n");scanf("%d",&item.price);printf("请输入你要修改车辆的状态:\n");scanf("%s",item.status);printf("请输入你要修改车辆的型号:\n");scanf("%s",item.xh);printf("请输入你要修改车辆的厂商:\n");scanf("%s",item.cs);printf("请输入你要修改车辆的颜色:\n");scanf("%s",item.color);alterHash(pHash,item);break;}case 5:{//查找printf("请输入你要查找的车辆的编号\n");scanf("%d",&num);searchHash(pHash,num,NULL);break;}}}//打开文件int fw=open("Message.txt",O_WRONLY | O_CREAT,0666);if(fw<0){perror("open err");return -1;}//操作文件int i;for(i=0;i<pHash->lastNum;i++){Link *pFind=pHash->pArr[i];while(pFind != NULL){int fw_count = write(fw,&pFind->data,sizeof(data_type));if(fw_count == 0){printf("倒入失败\n");break;}else if(fw_count <0){printf("倒入失败\n");break;}pFind=pFind->pNext;}}//关闭文件close(fw);//释放printf("释放前:%p\n",pHash);destoryHash(&pHash);printf("释放后:%p\n",pHash);return 0;
}
函数功能的实现
创建hash表
//创建一个hash表
//参数:void
//返回值:成功返回hash表的首地址,失败返回失败原因
Hash *createHash(void)
{Hash *pHash=NULL;pHash=(Hash *)malloc(sizeof(Hash));if(NULL == pHash){perror("malloc err");return NULL;}memset(pHash,0,sizeof(Hash));return pHash;
}
创建hash函数
//创建hash函数
int hashFun(int key)
{return key-1;
}
插入元素
//插入元素
//参数:hash表头,插入的元素
//返回值:成功返回OK,失败返回失败原因
int insertHash(Hash *pHash,data_type item)
{//入参判断if(NULL == pHash){return HASH_NULL;}//创建一个新节点Link *pNew = (Link *)malloc(sizeof(Link));if(NULL == pNew){perror("malloc err");return MALLOC_ERR;}memset(pNew,0,sizeof(Link));pNew->data=item;//通过hash函数得到要存储的下标int pos=hashFun(item.num);//保护号要插入节点后的所有节点pNew->pNext=pHash->pArr[pos];//插入新节点pHash->pArr[pos]=pNew;//count++;pHash->count++;return OK;
}
显示车辆信息
//显示
//参数:hash头
//返回值:成功返回OK。失败返回失败原因
int showHash(Hash *pHash)
{if(NULL == pHash){return HASH_NULL;}int i=0;Link *pFind=NULL;printf("车名\t");printf("编号\t");printf("动力\t");printf("价格\t");printf("状态\t");printf("型号\t");printf("厂商\t");printf("颜色\t");printf("\n");for(i=0;i<pHash->lastNum;i++){pFind=pHash->pArr[i];while(pFind != NULL){printf("%s\t",pFind->data.name);printf("%d\t",pFind->data.num);printf("%s\t",pFind->data.power);printf("%d\t",pFind->data.price);printf("%s\t",pFind->data.status);printf("%s\t",pFind->data.xh);printf("%s\t",pFind->data.cs);printf("%s\t",pFind->data.color);pFind=pFind->pNext;}printf("\n");}return OK;
}
删除车辆信息
//删除
//参数:hash表头,要删除的车辆的编号
//返回值:成功返回OK,失败返回失败原因
int deleteHash(Hash *pHash,int num)
{//入参判断if(NULL == pHash){return HASH_NULL;}if(num < 0 || num > pHash->lastNum){return NOCAR;}//通过Hash函数找到要删除的下标int pos=hashFun(num);//定义一个指针,指向链表的头节点Link *pFind=pHash->pArr[pos];if(NULL == pFind){return NOCAR;}while(pFind != NULL){if(pFind->data.num == num){//更改车辆状态信息pHash->count--;strcpy(pFind->data.status,"已卖出");break;}pFind=pFind->pNext;}return OK;
}
修改车辆信息
//修改
//参数:hash表头,修改的车辆信息
//返回值:成功返回OK,失败返回失败原因
int alterHash(Hash *pHash,data_type NewData)
{//入参判断if(NULL == pHash){return HASH_NULL;}//根据车辆的编号找到要修改的车辆的信息//根据hash函数找到要修改车辆的下标int pos=hashFun(NewData.num);//定义一个指针,初始化为链表的首节点Link *pFind = pHash->pArr[pos];//判断该指针是否为空,为空,则该位置无节点,不为空,则遍历,找到所要修改的车辆的编号,在将信息进行修改if(NULL == pFind){return NOCAR;}while(pFind != NULL){if(pFind->data.num == NewData.num){pFind->data=NewData;}pFind = pFind->pNext;}return OK;
}
查找
//查找
//参数:hash表头,要查找的车辆的编号,保存要查找的数据
//返回值:成功返回OK,失败返回失败原因
int searchHash(Hash *pHash,int num,data_type *pData)
{//入参判断if(NULL == pHash){return HASH_NULL;}if(num < 0 || num > pHash->lastNum){return NOCAR;}//根据车辆的编号找到要修改的车辆的信息//根据hash函数找到要修改车辆的下标int pos=hashFun(num);//定义一个指针,初始化为链表的首节点Link *pFind = pHash->pArr[pos];//判断该指针是否为空,为空,则该位置无节点,不为空,则遍历,找到与输入编号相同的车辆信息,然后打印其信息if(NULL == pFind){return NOCAR;}while(pFind != NULL){if(pFind->data.num == num){printf("%s\t",pFind->data.name);printf("%d\t",pFind->data.num);printf("%s\t",pFind->data.power);printf("%d\t",pFind->data.price);printf("%s\t",pFind->data.status);printf("%s\t",pFind->data.xh);printf("%s\t",pFind->data.cs);printf("%s\t",pFind->data.color);pFind=pFind->pNext;}}printf("\n");return OK;
}
销毁hash表
//销毁‘
//参数:hash
//成功返回OK,失败返回失败原因
int destoryHash(Hash **pHash)
{if(NULL == pHash || *pHash == NULL){return HASH_NULL;}//使用头删法删除链表,//定义指针Link *pFind=NULL;Link *pDel=NULL;int i;for(i=0;i<(*pHash)->lastNum;i++){pFind=(*pHash)->pArr[i];while(pFind != NULL){//头删法删除pDel=pFind;pFind=pFind->pNext;free(pDel);pDel=NULL;}}free(*pHash);*pHash=NULL;return OK;
}
运行结果
输入1进入系统菜单
输入1插入信息
插入信息完毕
输入2
红色框为插入车辆的信息
输入3,删除车辆信息。
此处是根据车辆的编号进行删除的,顾输入车辆编号4将刚刚插入的车辆信息进行删除。
删除后查看
删除后车辆的状态信息从之前的在库变为已卖出。
输入4,修改车辆的信息
修改后再次查看
车辆的价格和颜色均发生改变。
输入5查找车辆信息
查找完成。
输入-1退出
退出后将hash表进行释放。
尾
此项目是完成了一个简单的车辆管理系统,对于真正的车辆管理系统还有很大的欠缺,自己本身也对知识掌握的不是很充分,仅仅是实现了部分功能,望各位大佬问批评指正,感激之至。
基于C语言实现车辆管理系统相关推荐
- 教务处管理系统c语言编程,基于C语言的教务管理系统的设计
基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...
- c语言图书馆管理程的运行截图,基于C语言的图书馆管理系统(10页)-原创力文档...
毕业论文范文模板 职业技术学院 编号 本科生毕业论文设计 题目 基于 C 语言的图书馆管理系统 作者姓名 指导教师 所在学院 职业技术学院 专业(系) 班级(届) 完成日期 2016 年 5 月 4 ...
- c语言图书管理系统解析,基于C语言的图书管理系统的设计与实现解析.doc
毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...
- 教材征订管理系统c语言,基于C语言的图书管理系统的设计与实现范文.doc
毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...
- C语言实现车辆管理系统
数据结构,C语言,车辆管理系统 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include&l ...
- java企业车辆管理系统_基于jsp的企业车辆管理系统-JavaEE实现企业车辆管理系统 - java项目源码...
基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业车辆管理系统, 该项目可用各类java课程设计大作业中, 企业车辆管理系统的系统架构分为前后台两部分, 最终实 ...
- 基于servlet的校园车辆管理系统
开发环境 eclipse+mysql5.7+jdk1.8 系统简介 基于Web的校园车辆管理系统主要用于对校园内的车辆进行管理,基本功能包括:人员信息管理模块,车位信息管理模块,IC卡信息管理模块,固 ...
- 基于java的小区车辆管理系统
本系统主要采用JSP为编程语言,可以方便管理小区车辆管理需要.后台主要包括车辆管理,停车卡管理,车位管理等功能.本系统操作简单,使用方便. 本系统旨在为小区物业管理人员提供一个功能齐全.使用方便的基于 ...
- 基于java的企业车辆管理系统的设计与实现
通过计算机,能够直接"透视"车辆使用情况,数据计算自动完成,尽量减少人工干预,可以使用车信息更加规范化.透明化.因此,开发一套高效率,无差错的企业车辆管理系统软件十分必要,因此设计 ...
最新文章
- Adobe FrameMaker 2019中文版
- 测试我自己的系统是大端还是小端
- 智能合约重构社会契约(7)以太坊总结
- altium如何制作mark点_如何选择一家优质的网站制作公司,看这2点
- 计算机技术在风景园林中的应用和选择,数字技术在风景园林设计中的应用
- php键名相加,php二维数组相同键名相加实例
- Sino Global Capital CEO:Robinhood暂停GME股票交易凸显了DeFi的重要性
- 深度学习之TensorFlow
- python数据库操作orm_python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
- 【寻找最佳小程序】11期:车来了——时时公交就在你身边,到站准确率可控制在90%以上...
- Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法
- Excel表格设置下拉选项并应用到整列及清除下拉项设置
- GitLab搭建局域网改外网
- dl----算法常识100例
- 数字证书明文_Android 明文数字证书风险解决方案
- 自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统
- 搜狗workflow项目研究(一)综述
- 湖北省水系数据,水库数据,线要素和面要素
- 视频处理工具安利,要制作视频的快来
- 智能楼宇、智慧建筑3d可视化设计思路-小水智能