目录

该项目是基于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语言实现车辆管理系统相关推荐

  1. 教务处管理系统c语言编程,基于C语言的教务管理系统的设计

    基于C语言的教务管理系统的设计(任务书,开题报告,论文12000字,程序代码) 摘要 教务管理系统是现代化教育的重要组成部分,在现代高校管理中,一个高效的.准确的教务系统不仅能大大提高教学管理效率,还 ...

  2. c语言图书馆管理程的运行截图,基于C语言的图书馆管理系统(10页)-原创力文档...

    毕业论文范文模板 职业技术学院 编号 本科生毕业论文设计 题目 基于 C 语言的图书馆管理系统 作者姓名 指导教师 所在学院 职业技术学院 专业(系) 班级(届) 完成日期 2016 年 5 月 4 ...

  3. c语言图书管理系统解析,基于C语言的图书管理系统的设计与实现解析.doc

    毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...

  4. 教材征订管理系统c语言,基于C语言的图书管理系统的设计与实现范文.doc

    毕业论文 题目:基于C语言的图书管理系统的设计与实现 英文题目:Design and Implementation of Books Management System Based on C Lang ...

  5. C语言实现车辆管理系统

    数据结构,C语言,车辆管理系统 #include<stdio.h> #include<malloc.h> #include<stdlib.h> #include&l ...

  6. java企业车辆管理系统_基于jsp的企业车辆管理系统-JavaEE实现企业车辆管理系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的企业车辆管理系统, 该项目可用各类java课程设计大作业中, 企业车辆管理系统的系统架构分为前后台两部分, 最终实 ...

  7. 基于servlet的校园车辆管理系统

    开发环境 eclipse+mysql5.7+jdk1.8 系统简介 基于Web的校园车辆管理系统主要用于对校园内的车辆进行管理,基本功能包括:人员信息管理模块,车位信息管理模块,IC卡信息管理模块,固 ...

  8. 基于java的小区车辆管理系统

    本系统主要采用JSP为编程语言,可以方便管理小区车辆管理需要.后台主要包括车辆管理,停车卡管理,车位管理等功能.本系统操作简单,使用方便. 本系统旨在为小区物业管理人员提供一个功能齐全.使用方便的基于 ...

  9. 基于java的企业车辆管理系统的设计与实现

    通过计算机,能够直接"透视"车辆使用情况,数据计算自动完成,尽量减少人工干预,可以使用车信息更加规范化.透明化.因此,开发一套高效率,无差错的企业车辆管理系统软件十分必要,因此设计 ...

最新文章

  1. Adobe FrameMaker 2019中文版
  2. 测试我自己的系统是大端还是小端
  3. 智能合约重构社会契约(7)以太坊总结
  4. altium如何制作mark点_如何选择一家优质的网站制作公司,看这2点
  5. 计算机技术在风景园林中的应用和选择,数字技术在风景园林设计中的应用
  6. php键名相加,php二维数组相同键名相加实例
  7. Sino Global Capital CEO:Robinhood暂停GME股票交易凸显了DeFi的重要性
  8. 深度学习之TensorFlow
  9. python数据库操作orm_python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
  10. 【寻找最佳小程序】11期:车来了——时时公交就在你身边,到站准确率可控制在90%以上...
  11. Qt使用Windows蓝牙API搜索蓝牙设备并建立串口服务的方法
  12. Excel表格设置下拉选项并应用到整列及清除下拉项设置
  13. GitLab搭建局域网改外网
  14. dl----算法常识100例
  15. 数字证书明文_Android 明文数字证书风险解决方案
  16. 自动化运维-----项目实战: 基于Ansible的云平台自动化运维系统
  17. 搜狗workflow项目研究(一)综述
  18. 湖北省水系数据,水库数据,线要素和面要素
  19. 视频处理工具安利,要制作视频的快来
  20. 智能楼宇、智慧建筑3d可视化设计思路-小水智能

热门文章

  1. 4月3日工作总结及次日计划
  2. ChatGPT vscode中文插件
  3. opencv 区域生长(种子自动选取)python
  4. EXCEL与地图无缝结合,实现地址解析,标注联动更新
  5. Python实现 IOT(物联网) 自动化测试
  6. android资apk资源加密,4399游戏盒 安卓APK sign 加密分析 之 so文件分析
  7. python服务端开发调试日志系统_Python Django项目日志查询系统
  8. matlab实现聚类分析
  9. 静态时序分析 第六章 串扰和噪声
  10. 未明学院学员报告:「看电影攻略」之豆瓣电影票房与口碑分析,这几类电影不易踩雷!