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、在修改功能上,选择某一项参数信息进行修改,没有想到更好的方法确定参数信息,没有实现循环修改。
完整代码下载!!!
资源下载路径一
资源下载路径二文章来源:https://www.toymoban.com/news/detail-493885.html
!!!文章来源地址https://www.toymoban.com/news/detail-493885.html
到了这里,关于C语言课程设计-车辆信息管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!