本文实例为大家分享了C语言实现车辆信息管理系统的具体代码,供大家参考,具体内容如下
车辆信息管理系统问题描述:建立车辆信息管理系统,实现车辆信息的添加和维护管理。
系统存储数据要求:每台车辆至少需要包含以下属性,系统中保存多台车辆的信息:
车辆型号(如思域、卡罗拉、天籁等)
厂商(如广汽本田、一汽大众、东风日产等)
车型级别(如紧凑型车、中型车、SUV等)
座位数(如5座、7座等)
排量(如1.2T、1.4T、1.5T、1.6T等)
变速箱(如手动、手自一体、无级变速等)
车身颜色(白色、黑色等)
车辆价格(单位为万)
程序基本要求:1、 要有系统菜单,选择不同选项执行不同功能。每个功能执行结束后,需返回到系统菜单,继续进行功能选择操作。
2、系统需要完成以下基本功能,每个功能的代码封装在单独的函数里:
(1) 系统初始化时,至少要有10条车辆记录信息。
(2) 录入车辆信息:录入某台车辆的基本信息,为新记录自动生成一个记录号。输入数据时要有提示语,录入结束后在屏幕上输出新增的车辆信息。
车辆信息输出格式如下:
车辆型号 厂商 车型级别 座位数 排量 变速箱 车身颜色 车辆价格
雅阁 本田 中型车 5座 1.5T 无级变速 白色 19.98万
(3) 浏览所有车辆信息:统计共有多少台车辆,并在屏幕中显示所有车辆信息。
(4) 按不同字段查询车辆信息,包括按照厂商、车型级别、车辆价格范围(输入最低价格、最高价格)
(5) 修改车辆信息:对车辆的基本信息进行修改,要求提供菜单选择某一项参数信息进行修改,而不是重新覆盖录入整条信息。
(6) 删除车辆信息:将满足条件的车辆信息删除,包括按型号、厂商删除。要求删除前,先按照型号或者厂商查找需要删除的车辆信息,如果找不到则给出对应的提示信息。
扩展要求:(1) 实现排序功能。例如按车辆价格、座位数、排量等对车辆信息进行排序。
(2) 所有车辆信息存储在文件中。
(3) 每次打开程序,把文件中的信息导入到程序中。
(4) 可自己定义其他功能需求,并编码实现。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
typedef struct car Car,*cheliang;
struct car
{
char brand[20];//型号
char manufacturar[15];//产商
char degree[15];//等级
int seats;//座位数
float displacement;//排量
char biansuxiang[20];//变速箱
char color[20];//颜色
char price[30];//价格
cheliang next;
};
cheliang head,tail;
/***********************************************************************
* 说明: 从data.dat中读取车辆信息保存为单链表
***********************************************************************/
void read_cars();
/***********************************************************************
* 说明: 把车辆信息写入data.dat中
***********************************************************************/
void write_cars();
/***********************************************************************
* 说明: 新增车辆信息
***********************************************************************/
void add_car();//没问题
/***********************************************************************
* 说明: 把所有的车辆信息输出到电脑
***********************************************************************/
void display_cars();//没问题
/***********************************************************************
* 说明: 修改车辆信息
***********************************************************************/
void change();
/***********************************************************************
* 说明: 查找车辆信息
***********************************************************************/
void find();
/***********************************************************************
* 说明: 按车辆型号来查找车辆信息
***********************************************************************/
void find_brand();
/***********************************************************************
* 说明: 按产商来查找车辆信息
***********************************************************************/
void find_manufacturar();//没问题
/***********************************************************************
* 说明: 按车辆等级来查找车辆信息
***********************************************************************/
void find_degree();
/***********************************************************************
* 说明: 按车辆价格来查找车辆信息
***********************************************************************/
void find_price();
/***********************************************************************
* 说明: 删除车辆信息
***********************************************************************/
void delete_car();
/***********************************************************************
* 说明: 通过车辆型号来删除车辆信息
***********************************************************************/
void delete_car_brand();
/***********************************************************************
* 说明: 通过产商来删除车辆信息
***********************************************************************/
void delete_car_manufacturar();
int main()
{
read_cars();//读取文件
int i;
while(1)
{
while(1)
{
printf("请选择相关操作:\n1.增加车辆信息\n2.浏览车辆信息\n");
printf("3.查询车辆信息\n4.修改车辆信息\n5.删除车辆信息\n6.保存数据并退出管理系统\n");
printf("请输入数字选择要实现的功能:\n");
scanf("%d",&i);
if(i>=1&&i<=6)
{
break;
}
else
{
printf("数字错误,请重新输入");
}
}
switch(i)
{
case 1: add_car();break;
case 2: display_cars();break;
case 3: find();break;
case 4: change();break;
case 5: delete_car();break;
case 6: write_cars();//把数据信息保存到文件里
printf("谢谢使用!\n");
exit(0);
}
}
return 0;
}
void read_cars()
{
FILE *fp;
if (0 != fopen_s(&fp, "data.dat", "a+b"))//fopen_s方法返回值是0或非0,0代表打开成功,非0代表打开失败
{
perror("打开文件失败,原因是");//perror(s) 用来将上一个函数发生错误的原因输出到标准设备(stderr)
getch();
exit(1);
}
cheliang car;
head = (cheliang)malloc(sizeof(Car));
if (NULL == head)
{
printf("内存分配失败!\n");
exit(EXIT_FAILURE);
}
head->next = NULL;
tail = head;
while (1)
{
car = (cheliang)malloc(sizeof(Car));
if (fread(car, sizeof(Car), 1, fp) == 0)
{
free(car);
break;
}
car->next = NULL;
tail->next = car;
tail = car;
}
fclose(fp);
}
void write_cars()
{
FILE *fp;
if (0 != fopen_s(&fp, "data.dat", "w+"))//打开文件
{
perror("打开文件失败,原因是");
_getch();
return;
}
cheliang car = head->next;
while (car != NULL)
{
fwrite(car, sizeof(Car), 1, fp);
car = car->next;
}
fclose(fp);//关闭文件
}
void add_car()
{
cheliang p,temp;
p=(cheliang)malloc(sizeof(Car));
if(p==NULL)
{
printf("内存分配失败");
exit(1);
}
printf("请输入车辆信息\n型号:");
scanf("%s",p->brand);
printf("商家:");
scanf("%s",p->manufacturar);
printf("等级:");
scanf("%s",p->degree);
printf("座位数:");
scanf("%d",&p->seats);
printf("排量:");
scanf("%f",&p->displacement);
printf("变速箱:");
scanf("%s",p->biansuxiang);
printf("颜色:");
scanf("%s",p->color);
printf("价格:");
scanf("%s",p->price);
if(NULL == head->next)
{
head->next = p;
p->next = NULL;
}
else
{
temp = head->next;//头插法
head->next = p;
p->next = temp;
}
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
}
void display_cars()
{
int a=0;
cheliang p=head->next;
if(NULL == head->next)
{
printf("无车辆信息\n");
return ;
}
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
for(;p!=NULL;p=p->next)
{
a++;
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
}
printf("一共有%d台车辆信息",a);
}
void find()
{
int k;
while(1)
{
printf("请选择查找方式:1.按照型号查找 2.按照产商查找 3.按照等级查找 4.按照价格查找");
printf("请选择:");
scanf("%d",&k);
if(k>=1&&k<=4){
break;
}
else{
printf("数字错误,请重新输入");
}
}
switch(k)
{
case 1: find_brand();break;
case 2: find_manufacturar();break;
case 3: find_degree();break;
case 4:find_price();break;
}
}
void find_brand()
{
cheliang p;
p=head->next;
printf("请输入要查找的型号:");
char brand[20];
scanf("%s",brand);
int j=0;
printf("您要找的资料是:\n");
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(p!=NULL)
{
if(strcmp(p->brand,brand)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
p=p->next;
j++;
}
else
p=p->next;
}
if(j==0)
{
printf("该系统无该产商的车辆信息");
}
}
void find_manufacturar()
{
cheliang p;
p=head->next;
printf("请输入要查找的产商:");
char manufacturar[15];
int j=0;
scanf("%s",manufacturar);
fflush(stdin);
printf("您要找的资料是:\n");
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(p!=NULL)
{
if(strcmp(p->manufacturar,manufacturar)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
p=p->next;
j++;
}
else
p=p->next;
}
if(j==0)
{
printf("该系统无该产商的车辆信息");
}
}
void find_degree()
{
cheliang p;
p=head->next;
printf("请输入找要寻找的等级:");
char degree[15];
int j=0;
scanf("%s",degree);
printf("您要找的资料是:\n");
fflush(stdin);
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(p!=NULL)
{
if(strcmp(p->degree,degree)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
p=p->next;
j++;
}
else
p=p->next;
}
if(j==0)
{
printf("该系统无该等级的车辆信息");
}
}
void find_price()
{
cheliang p;
p=head->next;
//char price_max[30],price_min[30];
int price_max,price_min;
int j=0;
printf("请输入价格的最大值:");
scanf("%d",&price_max);
fflush(stdin);
printf("请输入价格的最小值:");
scanf("%d",&price_min);
fflush(stdin);
printf("您要找的资料是:\n");
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(p!=NULL)
{
if(atoi(p->price)>price_min && atoi(p->price)<price_max)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",p->brand,p->manufacturar,p->degree,p->seats,p->displacement,p->biansuxiang,p->color,p->price);
j++;
}
p=p->next;
}
if(j==0)
{
printf("该系统无该价格范围的车辆信息");
}
}
void change()
{
cheliang q;
int i;
q=head->next;
int j=0;
printf("请输入要修改车辆的型号:\n");
char brand[20];
scanf("%s",brand);
fflush(stdin);
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(q!=NULL)
{
if(strcmp(q->brand,brand)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",q->brand,q->manufacturar,q->degree,q->seats,q->displacement,q->biansuxiang,q->color,q->price);
j++;
while(1){
printf("1.改变型号 2.改变产商 3.改变等级 4.改变座位数 5.改变排量 6.改变变速箱 7.改变颜色 8.改变价格");
printf("请输入要修改的车辆信息的类型:");
scanf("%d",&i);
if(i>=1&&i<=8){
break;
}
else{
printf("请输入正确的数字");
}
}
switch(i)
{
case 1:
printf("型号:");
char str1[20];
scanf("%s",str1);
strcpy(q->brand,str1);break;
case 2:
printf("产商:");
char str2[15];
scanf("%s",str2);
strcpy(q->manufacturar,str2);break;
case 3:
printf("等级:");
char str3[15];
scanf("%s",str3);
strcpy(q->degree,str3);break;
case 4:
printf("座位数:");
int str4;
scanf("%d",&str4);
q->seats=str4;break;
case 5:
printf("排量:");
float str5;
scanf("%f",&str5);
q->displacement=str5;break;
case 6:
printf("变速箱:");
char str6[20];
scanf("%s",str6);
strcpy(q->biansuxiang,str6);break;
case 7:
printf("颜色:");
char str7[20];
scanf("%s",str7);
strcpy(q->color,str7);break;
case 8:
printf("价格:");
char str8[30];
scanf("%s",str8);
strcpy(q->price,str8);break;
}
printf("修改成功\n");
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",q->brand,q->manufacturar,q->degree,q->seats,q->displacement,q->biansuxiang,q->color,q->price);
q=q->next;
break;
}
else
{
q=q->next;
}
}
if(j==0)
{
printf("没找到你要的型号");
}
}
void delete_car()
{
int i;
while(true){
printf("按什么的方式寻找车辆:1.型号 2.产商\n");
scanf("%d",&i);
if(i>=1&&i<=2){
break;
}
else{
printf("数字错误,请重新输入");
}
}
switch(i)
{
case 1: delete_car_brand();break;
case 2: delete_car_manufacturar();break;
}
}
void delete_car_brand()
{
cheliang p,q;
int j=0;
char brand[20];
printf("请输入要删除的车辆的型号:");
scanf("%s",brand);
fflush(stdin);
//p=head;
q=head;
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(q->next!=NULL)
{
if(strcmp(q->next->brand,brand)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",q->next->brand,q->next->manufacturar,q->next->degree,q->next->seats,q->next->displacement,q->next->biansuxiang,q->next->color,q->next->price);
j++;
p=q->next;
q->next = q->next->next;
printf("数据删除成功!\n");
free(p);
break;
}
else
q=q->next;
}
if(j==0)
{
printf("该系统无你所要删除的车辆信息!\n");
}
}
void delete_car_manufacturar()
{
cheliang p,q;
int j=0;
char manufacturar[15];
printf("请输入要删除的车辆的产商:");
scanf("%s",manufacturar);
fflush(stdin);
q=head;
printf("%-15s|%-15s|%-15s|%5s|%5s|%-15s|%-15s|%-5s\n",
"车辆型号", "厂商", "车型级别", "座位数", "排量(L)", "变速箱", "车身颜色", "车辆价格(万)");
while(q->next!=NULL)
{
if(strcmp(q->next->manufacturar,manufacturar)==0)
{
printf("%-16s%-16s%-16s%-7d%-8.1f%-16s%-16s%-5s\n",q->next->brand,q->next->manufacturar,q->next->degree,q->next->seats,q->next->displacement,q->next->biansuxiang,q->next->color,q->next->price);
j++;
p=q->next;
q->next = q->next->next;
printf("数据删除成功!\n");
free(p);
break;
}
else
q=q->next;
}
if(j==0)
{
printf("该系统无你所要删除的车辆信息!\n");
exit(0);
}
}