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、在修改功能上,选择某一项参数信息进行修改,没有想到更好的方法确定参数信息,没有实现循环修改。

完整代码下载!!!

资源下载路径一

资源下载路径二

!!!

  • 32
    点赞
  • 205
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
车辆违章管理信息系统是一个用于管理车辆违章信息的系统,下面是一个基于C语言的简单实现: 1. 添加车辆信息 ```c void addCarInfo(CarInfo car[], int *count) { printf("请输入车辆信息:\n"); printf("车牌号:"); scanf("%s", car[*count].carId); printf("车主姓名:"); scanf("%s", car[*count].name); printf("性别:"); scanf("%s", car[*count].sex); printf("违章时间:"); scanf("%s", car[*count].violateTime); printf("违章地点:"); scanf("%s", car[*count].address); printf("违章情况:"); scanf("%s", car[*count].situation); printf("处罚情况:"); scanf("%s", car[*count].punish); (*count)++; printf("添加成功!\n"); } ``` 2. 查询车辆违章信息 ```c void queryCarInfo(CarInfo car[], int count) { char carId[maxsize]; printf("请输入要查询的车牌号:"); scanf("%s", carId); int flag = 0; for (int i = 0; i < count; i++) { if (strcmp(car[i].carId, carId) == 0) { printf("车牌号:%s\n", car[i].carId); printf("车主姓名:%s\n", car[i].name); printf("性别:%s\n", car[i].sex); printf("违章时间:%s\n", car[i].violateTime); printf("违章地点:%s\n", car[i].address); printf("违章情况:%s\n", car[i].situation); printf("处罚情况:%s\n", car[i].punish); flag = 1; } } if (!flag) { printf("未查询到该车辆违章信息!\n"); } } ``` 3. 统计车辆罚款总金额 ```c void countFine(CarInfo car[], int count) { char carId[maxsize]; printf("请输入要统计罚款总金额的车牌号:"); scanf("%s", carId); int totalFine = 0; for (int i = 0; i < count; i++) { if (strcmp(car[i].carId, carId) == 0) { int fine = 0; for (int j = 0; j < strlen(car[i].punish); j++) { if (car[i].punish[j] >= '0' && car[i].punish[j] <= '9') { fine = fine * 10 + car[i].punish[j] - '0'; } } totalFine += fine; } } printf("车牌号为%s的车辆罚款总金额为%d元。\n", carId, totalFine); } ```
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值