C语言课程设计-车辆信息管理系统

C语言课程设计-车辆信息管理系统C 语言课程设计 车辆信息管理系统 这个是我学编程以来写的第一个管理系统 现在回来看 当时写的代码还是很青涩的 写得不好大家轻点喷 题目描述 建立车辆信息管理系统 实现车辆信息的添加和维护管理 系统存储数据要求

大家好,我是讯享网,很高兴认识大家。

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) 可自己定义其他功能需求,并编码实现

编写这个系统时我总结了一个思路,方便我编写代码和防止浪费不必要的时间。
开发平台:Dev-C++ 5.11
在这里插入图片描述
讯享网

接下来,按照步骤一步一步地实现…

步骤一:分析功能需求

问题的分析与总结是最重要的,只要把功能需求分析清楚,接下来编写代码的思路就会很清晰。

首先从题目来看我们要实现的功能有:1.录入车辆信息功能2.浏览车辆信息功能3.查询车辆信息功能4.修改车辆信息功能5.删除车辆信息功能6.排序浏览车辆信息功能。

功能要实现的需求有:
1、录入车辆信息功能:可实现输入车辆型号、厂商、车辆级别、座位数、排量、变速箱、车身颜色、车辆价格(同时需要按照指定的格式输入,否则显示错误,需要重新输入)。录入结束后,会为新的车辆信息自动生成一个编号,并且在屏幕上输出新增的车辆信息。
2、浏览车辆信息功能:选择该功能可以输出所有车辆信息,并且统计共有多少台车辆。
3、查询车辆信息功能:该功能可以提供菜单选择四种不同的方式进行查询:一、按厂商查询,二、按车型级别查询,三、按车辆价格范围查询(同时需要按照指定的格式输入,否则显示错误,需要重新输入)四、按厂商和车型级别查询。如果查询的车辆信息不存在,会提示该信息不存在。
4、修改车辆信息功能:该功能可以提供菜单选择某一项参数信息进行修改。选择想要修改的车辆信息编号,将需要修改的车辆信息输出,进行参数信息的修改。修改结束后,输出修改后的车辆信息。修改完成后,进行录入保存。
5、删除车辆信息功能:该功能可以提供菜单选择四种不同的方式进行删除:一、按车辆型号,二、按厂商,三、按车型级别,四、按车辆型号和厂商。将满足条件的车辆信息输出,如果找不到,则显示该信息不存在。否则判断是否删除(是:输入Y,否:输入N),删除结束后,进行录入保存。
6、排序浏览车辆信息功能:该功能可以提供菜单选择三种不同方式进行排序浏览:一、按价格,二、按座位,三、 按排量。
7、退出功能:可以实现退出车辆信息管理系统。(即结束程序)
8、所有的车辆信息可以存储在文件中,每次打开程序,可以把文件里的车辆信息导入到程序中,并且每次修改也可以保存在文件里,还有可以删除文件里面的车辆信息。

步骤二:分析业务逻辑

功能需求分析完毕后,接下来就是大体的功能交互分析,逻辑分析,画好系统程序流程图。注意这不是最终的流程图,如果在编写过程中有修改的话,也可以进行修改(也方便后期增加需求)
在这里插入图片描述

分析完业务逻辑之后,我们还需要考虑三个问题:1、数据的保存2、数据的展示3、用户的交互。
数据保存:
从题目来看数据应保存在文件中,我选择的是保存在txt文件中。
数据展示:
数据的可视化我是直接在控制台中进行输出。
用户交互:
用户的输入输出都是通过控制台,进行交互的。

步骤三:编写代码

定义数据结构:

struct Car //定义结构体  { 
    int number; //编号  char type[20]; //车辆型号  char merchant[20]; //厂商  char level[20]; //车辆级别  char seet[10]; //座位数  char output[10]; //排量  char gearbox[20]; //变速箱  char colour[10]; //车身颜色  float price; //车辆价格  } c[100]; //定义100个结构体数组 

讯享网

准备数据,(在工程目录下新建一个file.txt的文件,用于存放数据)
注意:
每行数据用英文格式的空格隔开。
在这里插入图片描述

读取文件中的数据:

讯享网 FILE *fp; int i=0; fp=fopen("file.txt","r"); //读取文件中的车辆信息。 while(!feof(fp)) { 
    fscanf(fp,"%d %s %s %s %s %s %s %s %f\n",&c[i].number,c[i].type,c[i].merchant,c[i].level,c[i].seet,c[i].output,c[i].gearbox,c[i].colour,&c[i].price); i++; //记录录入的车辆信息,每录入一条车辆信息i自增1。 } fclose(fp); //关闭文件  

保存数据到文件中:

 FILE *fp; int j; fp=fopen("file.txt","w"); //打开文件名为file的文件,文件file里面的车辆信息已经删除,重新录入。  for(j=0;j<i;j++) //读取车辆信息 { 
    if(c[j].number!=0) //判断编号是否是 0,如果是不输入,达到删除的目的,否则输入车辆信息。 fprintf(fp,"%d %s %s %s %s %s %s %s %0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); //录入车辆信息  } fclose(fp); //关闭文件 

主函数目录:

讯享网 int chose=0; //定义chose用来选择功能  while(chose!=7) //当chose等于7时结束循环。  { 
    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("请输入功能的选项:"); scanf("%d",&chose); //用于输入选择的功能 switch(chose) { 
    case 1: input(c,i);i++;break; //功能1:录入  case 2: browse(c,i);break; //功能2:浏览  case 3: inquiry(c,i);break; //功能3:查询 case 4: modify(c,i);rekeep(c,i);break; //功能4:修改 case 5: delete_0(c,i);rekeep(c,i);break; //功能5:删除 case 6: sort(c,i);break; //功能6:排序 case 7:printf("欢迎下次使用!\n");break; //功能7:退出 default:printf("您输入的数据有误!\n请重新输入!\n"); //如果输入的数字不是1到7会显示您输入的数据有误! } } 

接下来,就编写每一个功能函数~~~

1、void input(struct Car c[],int i) :为录入车辆信息功能的一个函数。主要功能为输入车辆信息,包括车辆型号、厂商、车型级别、座位数、排量、变速箱、车身颜色、车辆价格,并为新记录自动生成一个编号。输入时需按照指定的格式输入车辆信息(如果输入格式不对会有提示和需要重新输入)

void input(struct Car c[],int i) //功能1:录入功能的定义  { 
    FILE *fp; fp=fopen("file.txt","a"); //定义文件file.tet,录入时录入文件里 printf("请输入车辆的有关信息!\n\n"); printf("请输入车辆型号:"); scanf("%s",c[i].type); printf("请输入厂商:"); scanf("%s",c[i].merchant); printf("请输入车型级别:"); scanf("%s",c[i].level); printf("请输入座位数:"); scanf("%s",c[i].seet); printf("请输入排量:"); scanf("%s",c[i].output); printf("请输入变速箱:"); scanf("%s",c[i].gearbox); printf("请输入车身颜色:"); scanf("%s",c[i].colour); printf("请输入车辆价格:"); scanf("%f",&c[i].price); while(c[i].price==0||c[i].price<0) //容错处理,金额不能小于或等于零 { 
    printf("\n输入错误!\n价格不能为:零和负数\n\n"); printf("请重新输入车辆价格:"); scanf("%f",&c[i].price); } c[i].number=i+1; //自动生成一个编号  printf("输入完毕!\n\n"); printf("______________________________________________________________________________________________________________________\n"); //输出新增的车辆信息。 printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[i].number,c[i].type,c[i].merchant,c[i].level,c[i].seet,c[i].output,c[i].gearbox,c[i].colour,c[i].price); fprintf(fp,"%d %s %s %s %s %s %s %s %0.2f\n",c[i].number,c[i].type,c[i].merchant,c[i].level,c[i].seet,c[i].output,c[i].gearbox,c[i].colour,c[i].price); //录入新的车辆信息  printf("______________________________________________________________________________________________________________________\n\n"); fclose(fp); //关闭文件  } 

2、void browse(struct Car c[],int i) :为浏览所有车辆信息功能的一个函数。主要功能为输出已经输入的车辆信息以及后期修改后的车辆信息。并统计共有多少台车辆。

讯享网void browse(struct Car c[],int i) //功能2:浏览功能的定义  { 
    int j; printf("______________________________________________________________________________________________________________________\n"); printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); for(j=0;j<i;j++) //输出所有的车辆信息  { 
    printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n"); printf("共有%d台车辆\n\n",j);//输出一共有多少台车辆  } 

3、void inquiry(struct Car c[],int i) :为查询车辆信息功能的一个函数。里面同时也包含了四个函数。主要的功能为提供一个关于查询方式的菜单(1、按厂商查询 2、按车型级别查询 3、按车辆价格范围查询 4、按厂商和车型级别查询),里面的四个函数分别是:
一、void inquiry_1(struct Car c[],int i) :为按厂商查询的一个函数,主要功能为输出指定的厂商信息(若指定的厂商不存在,则会输出你查询的信息不存在,直接跳出函数)。
二、void inquiry_2(struct Car c[],int i) :为按车型级别查询的一个函数。主要功能为输出指定的车型级别信息(若指定的车型级别不存在,则会输出你查询的信息不存在,直接跳出函数)。
三、void inquiry_3(struct Car c[],int i) :为按车辆价格范围查询的一个函数。主要功能为输出指定的车辆价格范围内车辆信息(若价格不在范围之内,则会输出你查询的信息不存在,直接跳出函数)。
四、void inquiry_4(struct Car c[],int i) :为按厂商和车型级别查询的一个函数。主要功能为输出指定的厂商和车型级别的信息(若指定的厂商和车型级别不存在,则会输出你查询的信息不存在,直接跳出函数)。

void inquiry(struct Car c[],int i) //功能3:查询功能的定义  { 
    int chose; //定义chose用来选择功能 for(;chose!=5;) //当chose=5时结束循环。即退出查询功能  { 
    printf(" 需要选择的查询方式 \n"); printf(" *\n"); printf(" 1 按厂商查询 \n"); printf(" 2 按车型级别查询 \n"); printf(" 3 按车辆价格范围查询 \n"); printf(" 4 按厂商和车型级别查询 \n"); printf(" 5 退出查询 \n"); printf(" *\n"); //查询菜单:方便选择需要的功能 printf("请输入功能的选项:"); scanf("%d",&chose); //输入需要选择的查询方式 switch(chose) { 
    case 1:inquiry_1(c,i);break; //查询功能1:按厂商查询 case 2:inquiry_2(c,i);break; //查询功能2:按车型级别查询 case 3:inquiry_3(c,i);break; //查询功能3:按车辆价格范围查询  case 4:inquiry_4(c,i);break; //查询功能4:按厂商和车型级别查询 case 5:printf("已退出查询!\n");break; //查询功能5:退出查询功能  default:printf("您的输入有误!\n请重新输入!\n"); //如果输入的数字不是1到5会显示您输入的数据有误! } } } 
讯享网void inquiry_1(struct Car c[],int i) //按厂商查询功能的定义  { 
    int j,a=0; //定义a用于判断是否查询到信息 char q1[20]; //定义数组q1用于输入的赋值以及进行比较查询 printf("请输入需要查询的厂商:"); scanf("%s",q1); //输入需要查询的厂商 for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(strcmp(q1,c[j].merchant)==0) //判断输入的厂商与已存在的厂商是否有相同的  { 
    a++; //用于显示有没有查询到相应的厂商的输出 printf("______________________________________________________________________________________________________________________\n"); printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); break; } } for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(strcmp(q1,c[j].merchant)==0) //判断输入的厂商与已存在的厂商是否有相同的  printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n\n"); if(a==0) //对没有查询到信息进行输出 printf("您所要查找的信息不存在!\n"); } 

文章篇幅有限完整的代码我放到了文章的最后~~~有兴趣的同学可以看看

4、void modify(struct Car c[],int i) :为修改车辆信息功能的一个函数。主要功能为提供菜单选择某一项参数信息进行修改,包括车辆型号、厂商、车型级别、座位数、排量、变速箱、车身颜色、车辆价格。

void modify(struct Car c[],int i) //功能4:修改功能的定义  { 
    int j,n; //定义n用于输入想要修改的车辆信息编号。以及进行比较查询 int h=0,t=0,b=0; //定义h用于判断是否修改成功。 定义t用于判断是否退出俢改循环。定义b用于判断是否查询到信息。 char m; //定义m用于判断是否修改车辆信息。  int chose; //定义chose用于选择功能 browse(c,i); //输出车辆信息表  while(b==0) //此循环用于判断是否找到要修改的车辆信息编号 { 
    printf("请输入想要修改的车辆信息的编号:"); scanf("%d",&n); //输入想要修改的车辆信息的编号 for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(n==c[j].number) //判断输入的编号是否存在  { 
    b++; printf("______________________________________________________________________________________________________________________\n"); printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); printf("______________________________________________________________________________________________________________________\n\n"); break; } } if(b==0) //对没有查询到信息进行输出 printf("您想要修改的信息不存在!\n\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(" 8 按车辆价格 \n"); printf(" 9 退出修改 \n"); printf(" *\n"); //查询班费菜单:方便选择需要的功能 while(t==0) //此循环用于判断是否执行修改命令,如果不是1~9的命令,则会提示输入错误,请重新输入  { 
    printf("请输入修改的类型:"); scanf("%d",&chose); //输入需要选择的修改方式 switch(chose) { 
    case 1: printf("输入新的车辆型号:"); scanf("%s",c[j].type); h++;t++; break; case 2: printf("输入新的厂商:"); scanf("%s",c[j].merchant); h++;t++; break; case 3: printf("输入新的车型级别:"); scanf("%s",c[j].level); h++;t++; break; case 4: printf("输入新的座位数:"); scanf("%s",c[j].seet); h++;t++; break; case 5: printf("输入新的排量:"); scanf("%s",c[j].output); h++;t++; break; case 6: printf("输入新的变速箱:"); scanf("%s",c[j].gearbox); h++;t++; break; case 7: printf("输入新的车身颜色:"); scanf("%s",c[j].colour); h++;t++; break; case 8: printf("输入新的车辆价格:"); scanf("%f",&c[j].price); while(c[j].price==0||c[j].price<0) //容错处理,金额不能小于或等于零 { 
    printf("\n输入错误!\n价格不能为:零和负数\n\n"); printf("请重新输入车辆价格:"); scanf("%f",&c[j].price); } h++;t++; break; case 9: printf("已退出修改!\n");t++; break; default:printf("输入错误!\n");//如果输入的数字不是上面的数字会输出:输入错误!  } } if(h!=0) { 
    printf("______________________________________________________________________________________________________________________\n"); //输出修改后的车辆信息  printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); printf("______________________________________________________________________________________________________________________\n\n"); printf("修改成功!\n\n"); } } 

5、void Delete(struct Car c[],int i) :为删除车辆信息功能的一个函数。里面同时也包含了四个函数。主要功能为提供一个关于删除方式的菜单(1、按车辆型号删除 2、按厂商删除 3、按车型级别删掉 4、按车辆型号和厂商删除),里面的四个函数分别是:
一、void delete_1(struct Car c[],int i) :为按车辆型号删除的一个函数。主要功能为删除指定的车辆型号信息(若指定的车辆型号不存在,则会输出你查找的信息不存在)。
二、void delete_2(struct Car c[],int i) :为按厂商删除的一个函数,主要功能为删除指定的厂商信息(若指定的厂商信息不存在,则会输出你查找的信息不存在)。
三、void delete_3(struct Car c[],int i) :为按车型级别删除的一个函数。主要功能为删除指定的车型级别信息(若指定的车型级别信息不存在,则会输出你查找的信息不存在)。
四、void delete_4(struct Car c[],int i) :为按车辆型号和厂商删除的一个函数。主要功能为删除指定的车辆型号和厂商信息(若指定的车辆型号和厂商不存在,则会输出你查找的信息不存在)。

讯享网void delete_0(struct Car c[],int i) //功能5:删除功能的定义 { 
    int chose; //定义chose用于功能选择。 while(chose!=5) //当chose等于5时,退出删除功能。 { 
    printf(" 需要选择删除的方式 \n"); printf(" *\n"); printf(" 1 按车辆型号删除 \n"); printf(" 2 按厂商删除 \n"); printf(" 3 按车型级别删除 \n"); printf(" 4 按车辆型号和厂商删除 \n"); printf(" 5 退出删除 \n"); printf(" *\n"); //删除菜单:方便选择需要的功能 printf("请选择删除的方式:"); scanf("%d",&chose); //输入选择的功能 switch(chose) { 
    case 1:delete_1(c,i);break; //删除功能1:按车辆型号删除 case 2:delete_2(c,i);break; //删除功能2:按厂商删除 case 3:delete_3(c,i);break; //删除功能3:按车型级别删除 case 4:delete_4(c,i);break; //删除功能4:按车辆型号和厂商删除 case 5:printf("已退出删除!\n");break; //删除功能5:退出删除功能  default:printf("您的输入有误!\n请重新输入!\n"); //如果输入的数字不是1到5会显示您输入的数据有误! } } } 
void delete_1(struct Car c[],int i) //按车辆型号删除功能的定义  { 
    int j,b=0; //定义b用于判断是否查询到信息 char q1[20]; //定不义q1用于存放需要删除车辆型号。以及进行比较查询 printf("请输入需要删除车辆型号:"); scanf("%s",q1); //输入需要删除车辆型号 for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(strcmp(q1,c[j].type)==0) //判断输入的车辆型号和已存在的车辆型号是否有相同的 { 
    b++; printf("______________________________________________________________________________________________________________________\n"); printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); break; } } if(strcmp(q1,c[j].type)==0) //用于判断是否执行删除命令 { 
    for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(strcmp(q1,c[j].type)==0) //判断输入的车辆型号和已存在的车辆型号是否有相同的 printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n\n"); char c1; //定义c1用于输入Y或者N printf("确定删除该信息(Y/N):"); getchar(); //用于清除回车 scanf("%c",&c1); //需要输入Y或者N while(c1!='Y'&&c1!='N') //容错处理,用于判断是否是Y或者N,不是则需要重新输入 { 
    printf("输入错误,请重新输入(Y/N):"); getchar(); //用于清除回车 scanf("%c",&c1);//需要重新输入Y或者N } if(c1=='Y') //判断c1是否等于Y  { 
    for(j=0;j<i;j++) //对输入的信息在原数据进行搜索并输出 { 
    if(strcmp(q1,c[j].type)==0) //判断输入的车辆型号和已存在的车辆型号是否有相同的 { 
    c[j].number=0; strcpy(c[j].type," "); strcpy(c[j].merchant," "); strcpy(c[j].level," "); strcpy(c[j].seet," "); strcpy(c[j].output," "); strcpy(c[j].gearbox," "); strcpy(c[j].colour," "); c[j].price=0; } } printf("删除成功!\n\n"); } else { 
    printf("已退出删除功能!\n"); } } if(b==0) //对没有查询到信息进行输出 printf("您所要查找的信息不存在!\n\n"); } 

6、void sort(struct Car c[],int i) :为排序浏览车辆信息功能的一个函数。主要功能为提供一个关于排序方式的菜单(1、按价格排序 2、按座位排序 3、 按排量排序),利用冒泡排序法进行排序。

讯享网void sort(struct Car c[],int i) //功能6:排序功能的定义 { 
    struct Car d[100]; //定义结构体d,作为临时变量,用于交换数据。  int j,k,chose=0; //定义chose用于功能选择。  while(chose!=4) //当chose等于4时,退出排序功能。  { 
    printf(" 排序浏览\n"); printf(" *\n"); printf(" 1→ 按价格 \n"); printf(" 2→ 按座位 \n"); printf(" 3→ 按排量 \n"); printf(" 4→ 退出排序 \n"); printf(" *\n"); //菜单:方便选择需要的功能 printf("输入功能的选项:"); scanf("%d",&chose); //输入选择的功能 switch(chose) { 
    case 1: for(j=0;j<i-1;j++) //利用冒泡排序法进行从大到小排序 { 
    for(k=0;k<i-1;k++) { 
    if(c[k].price<c[k+1].price) //比较价格的大小  { 
    d[k]=c[k];//交换数据 c[k]=c[k+1];//交换数据 c[k+1]=d[k];//交换数据 } } } printf("______________________________________________________________________________________________________________________\n");//输出排序后的结果。 printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); for(j=0;j<i;j++) //输出所有的车辆信息  { 
    printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n");break; case 2: for(j=0;j<i-1;j++) //利用冒泡排序法进行从大到小排序 { 
    for(k=0;k<i-1;k++) { 
    if(strcmp(c[k].seet,c[k+1].seet)<0) //比较座位的大小  { 
    d[k]=c[k];//交换数据 c[k]=c[k+1];//交换数据 c[k+1]=d[k];//交换数据 } } } printf("______________________________________________________________________________________________________________________\n");//输出排序后的结果。 printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); for(j=0;j<i;j++) //输出所有的车辆信息  { 
    printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n");break; case 3: for(j=0;j<i-1;j++) //利用冒泡排序法进行从大到小排序 { 
    for(k=0;k<i-1;k++) { 
    if(strcmp(c[k].output,c[k+1].output)<0) //比较排量的大小  { 
    d[k]=c[k];//交换数据 c[k]=c[k+1];//交换数据 c[k+1]=d[k];//交换数据 } } } printf("______________________________________________________________________________________________________________________\n");//输出排序后的结果。 printf(" 编号 车辆型号 厂商 车型级别 座位数/座 排量/T 变速箱 车身颜色 车辆价格/万\n"); for(j=0;j<i;j++) //输出所有的车辆信息  { 
    printf(" %-10d %-11s %-13s %-14s %-10s %-10s %-16s %-12s %-0.2f\n",c[j].number,c[j].type,c[j].merchant,c[j].level,c[j].seet,c[j].output,c[j].gearbox,c[j].colour,c[j].price); } printf("______________________________________________________________________________________________________________________\n");break; case 4: printf("已退出排序!\n");break; //退出排序功能  default:printf("您输入的数据有误!\n请重新输入!\n"); //如果输入的是其他数字,显示您输入的数据有误! } } } 

步骤四:功能测试

就随便测了几个功能,边测边改bug
功能1:录入车辆信息
在这里插入图片描述
功能2:浏览车辆信息
在这里插入图片描述
功能3:查询车辆信息
在这里插入图片描述

总结

程序优点:基本实现要求的所有功能,程序能较好的运行,而且用户输入错误时有保障机制,能让用户重新输入数据。实现了所需的功能操作和更加有序的程序代码,输出时也能清晰显示,避免了输出时不理解的现象。同时,各种功能之间也会有一定的关系。它对某些输入有特定的输入,以避免输入数据中的错误。

程序不足:没有采用链表存储车辆信息,每次需要引用车辆信息时都需要把车辆信息全部录入,消耗资源大。

遇到的困难:1、数据录入TXT时,打开TXT文件时,如果用“w”,会先删除文件中的内容。如果用“r+”,会先覆盖文件中的内容。“a”为追加模式每次写入时,位置指针都会指向文件结尾以便于追加新内容。
2、程序结束时要在最后关闭文件fclose ( fp ),否则不会保存。
3、在功能输入数字时,若输入其它数据,可能会出现错误和无限循环。
4、在修改功能上,选择某一项参数信息进行修改,没有想到更好的方法确定参数信息,没有实现循环修改。

完整代码下载!!!

资源下载路径一

资源下载路径二

!!!

小讯
上一篇 2025-03-10 17:20
下一篇 2025-02-14 23:39

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/22284.html