汽车汇管理 系统

<span style="font-family:SimSun;font-size:18px;"><span style="font-family:SimSun;font-size:18px;">
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>


//定义一个结构体 Car
struct Car
{
	int Numb; //汽车编号
	char Name[20];//汽车名字
	double Price; //汽车价钱
	double Volume;//汽车排量
    double Speed; //汽车速度
	double FuelTankCapacity;//汽车油箱容量
};


//typedef struct Car Car;


//定义一个结构体 链表
struct Node
{
	Car data;              //链表的数据域
	struct Node * Next;    //链表的指针域
};


//定义一个 全局变量 
struct Node * Head = NULL;


//链表的头插法
void AddHead(Car d)
{
	struct Node * New = (struct Node *)malloc(sizeof(struct Node));
	New -> data = d;
	New ->Next = Head;
	Head = New;
}


//链表的尾插法
void AddTail(Car d)
{
	struct Node * New = (struct Node *)malloc(sizeof(struct Node));
	struct Node * Tail = Head;
	New ->data = d;
	New ->Next = NULL;
	if(!Tail)
	{
		Head = New;
		return ;
	}
	while(Tail->Next)
	{
		Tail = Tail ->Next;
	}
	Tail ->Next = New;
}


//汽车信息输出
void Print()
{
	struct Node * p = Head;
	printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
	while(p)
	{
		printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
		p = p ->Next;
	}
}


//输入学生信息
void Input(int i)
{
	char c = '0';
	do
	{
		Car d;
		printf("请输入:\n");
		printf("汽车编号, 汽车名, 汽车价钱, 汽车排量, 汽车速度, 汽车油箱容量:  \n");
		scanf("%d%s%lf%lf%lf%lf",&d.Numb,d.Name,&d.Price,&d.Volume,&d.Speed,&d.FuelTankCapacity);
		switch(i)
		{
		case 1:
			AddHead(d);
			break;
		case 2:
			AddTail(d);
			break;
		}
		Print();
		printf("是否要继续添加 [y/n]: \n");
		c=getch();
		putch(c);
		putch('\n');
	}while(c != 'N' && c != 'n');
}


//选择输入汽车信息的方法
void InputMenu()
{
	system("cls");
	printf("****** ------ *********\n");
	printf("      1.头插法:       \n");
	printf("      2.尾插法:        \n");
	printf("      0.返回主菜单:   \n");
	printf("-----------------------\n");
	int i = 0;
	scanf("%d",&i);
	if(1 == i || 2 == i)
	{
		Input(i);
	}
}


//链表的删除
int Remove(int Numb)
{
	struct Node * p =Head , *p1;
	if(p->data.Numb == Numb)
	{
		Head = p->Next;
		free(p);
		return 1;
	}
	while(p)
	{
		if(p->data.Numb == Numb)
		{
			p1->Next = p->Next;
			free(p);
			return 1;
		}
		p1 = p;
		p = p->Next;
	}
	return 0;
}


//删除汽车信息
void Delete()
{
	char c = '0';
	do
	{
		int Numb;
		printf("请输入你要删除的编号\n");
		scanf("%d",&Numb);
		if(Remove(Numb))
		{
			printf("删除成功\n");
		}
		else
		{
			printf("删除失败\n");
		}
		Print();
		printf("是否要继续删除 [y/n]: \n");
		c =getch();
		putch(c);
		putch('\n');
	}while(c!='N' && c!='n');
	
	
}


//链表的修改
int ModifyData(int Numb)
{
	struct Node *p = Head;
	while(p)
	{
		if(p->data.Numb == Numb)
		{
			printf("请输入新的汽车名字,汽车价格,汽车速度,汽车排量,汽车油箱容量\n");
			char Name[20];
			double Price;
			double Volume;
			double Speed;
			double FuelTankCapacity;
			scanf("%s%lf%lf%lf%lf",Name,&Price,&Volume,&Speed,&FuelTankCapacity);
			strcpy(p->data.Name,Name);
			p->data.Price = Price;
			p->data.Volume = Volume;
			p->data.Speed = Speed;
			p->data.FuelTankCapacity = FuelTankCapacity;
			return 1;
		}
		p = p ->Next;
	}
	return 0;
}


//修改汽车信息
void Modify()
{
	char c ='0';
	do
	{
		int Numb;
		printf("请输入你要修改的汽车编号\n");
		scanf("%d",&Numb);
		if(ModifyData(Numb))
		{
			printf("修改成功\n");
		}
		else
		{
			printf("修改失败\n");
		}
		Print();
		printf("是否要继续修改 [y/n]: \n");
		c = getch();
		putch(c);
		putch('\n');
	}while(c!='N' && c!='n');
	
	
}


//按汽车编号进行查找
void FindNumb()
{
	struct Node * p =Head;
	int Numb = 0;
	printf("请输入你要查找的编号: \n");
	scanf("%d",&Numb);
	while(p)
	{
		if(p->data.Numb == Numb)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
			break;
		}
		else
		{
			printf("没有你要查找的汽车编号 \n");
			break;
		}
		p = p->Next;
	}
}


//按汽车名进行查找
void FindName()
{
	struct Node * p = Head;
	char Name[20];
	printf("请输入你要查找的汽车名: \n");
	scanf("%s",Name);
	while(p)
	{
		if(strcmp(p->data.Name,Name)==0)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
			
		}
		else
		{
			printf("你要查找的汽车名不存在\n");
			break;
		}
		p = p ->Next;
	}
	
	
}
// 按汽车价格区间查找
void FindPrice()
{
	struct Node * p =Head;
	int Price1,Price2;
	printf("请输入你要查找的汽车的价格区间\n");
	scanf("%d%d",&Price1,&Price2);
	while(p)
	{
		if(p->data.Price>= Price1 && p->data.Price <=Price2)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
			
		}
		else
		{
			printf("你所查找的汽车的价格区间不存在\n");
			break;
		}
		p = p ->Next;
	}
}
//按汽车排量区间查找
void FindVolume()
{
	struct Node * p =Head;
	int Volume1,Volume2;
	printf("请输入你要查找的汽车的排量区间\n");
	scanf("%d%d",&Volume1,&Volume2);
	while(p)
	{
		if(p->data.Volume>= Volume1 && p->data.Volume<=Volume2)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
			
		}
		else
		{
			printf("你输入的汽车的排量区间不存在\n");
			break;
		}
		p = p ->Next;
	}
}
//按汽车速度区间查找
void FindSpeed()
{
	struct Node * p =Head;
	int Speed1,Speed2;
	printf("请输入你要查找的汽车的速度区间\n");
	scanf("%d%d",&Speed1,&Speed2);
	while(p)
	{
		if(p->data.Speed>= Speed1 && p->data.Speed<Speed2)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
		}
		else
		{
			printf("你输入的汽车的速度区间不存在\n");
			break;
		}
		p = p->Next;
	}
	
	
}
//按汽车油箱容量空间查找
void FindFuelTankCapacity()
{
	struct Node *p =Head;
	int FuelTankCapacity1,FuelTankCapacity2;
	printf("请输入你要查找的汽车的油箱容量区间\n");
	scanf("%d%d",&FuelTankCapacity1,&FuelTankCapacity2);
	while(p)
	{
		if(p->data.FuelTankCapacity>= FuelTankCapacity1 && p->data.FuelTankCapacity<= FuelTankCapacity2)
		{
			printf("汽车编号,汽车名,汽车价钱,汽车排量,汽车速度,汽车油箱容量 \n");
			printf("%d\t  %s\t  %.2lf\t    %.2lf\t%.2lf\t %.2lf\n",p->data.Numb,p->data.Name,p->data.Price,p->data.Volume,p->data.Speed,p->data.FuelTankCapacity);
		}
		else
		{
			printf("你输入的汽车的油箱容量区间不存在\n");
			break;
		}
	}
	p =p ->Next;
}
//查找汽车信息
int Find()
{
	system("cls");
	printf("**********---------------------**********\n");
	printf("            1.按汽车编号查找             \n");
	printf("            2.按汽车名查找               \n");
	printf("            3.按汽车价格区间查找         \n");
	printf("            4.按汽车排量区间查找         \n");
	printf("            5.按汽车速度区间查找         \n");
	printf("            6.按汽车油箱容量区间查找     \n");
	printf("            0.返回主菜单                 \n");
	printf("-----------------------------------------\n");
	int i=0;
	scanf("%d",&i);
	switch(i)
	{
	case 1:
		FindNumb();
		break;
	case 2:
		FindName();
		break;
	case 3:
		FindPrice();
		break;
	case 4:
		FindVolume();
		break;
	case 5:
		FindSpeed();
		break;
	case 6:
		FindFuelTankCapacity();
		break;
	default :
		return i;
	}
	system("pause");
	return i;
}


//按汽车编号进行排序
void SortByNumb()
{
	struct Node *p = Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		q = p->Next;
		m = p;
		while(q)
		{
			if(q->data.Numb < m->data.Numb)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p != m)
		{
			Car t = p->data;
			p->data = m ->data;
			m->data = t;
		}
		p = p ->Next;
	}
}


//按汽车名进行排序
void SortByName()
{
	struct Node * p = Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		q = p->Next;
		m = p;
		while(q)
		{
			if(strcmp(q->data.Name , m->data.Name) < 0)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p != m)
		{
			Car t = p->data;
			p->data = m->data;
			m->data = t;
		}
		p = p ->Next;
	}
}


//按汽车价格进行排序
void SortByPrice()
{
	struct Node * p =Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		m = p;
		q = p->Next;
		while(q)
		{
			if(q->data.Price < m->data.Price)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p!=m)
		{
			Car t = p ->data;
			p->data = m ->data;
			m->data = t;
		}
		p = p->Next;
	}
}


//按汽车排量进行排序
void SortByVolume()
{
	struct Node * p= Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		m = p;
		q = p ->Next;
		while(q)
		{
			if(q->data.Volume<m->data.Volume)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p != m)
		{
			Car t =p->data;
			p->data = m->data;
			m->data=t;
		}
		p = p -> Next;
	}
}


//按汽车速度进行排序
void SortBySpeed()
{
	struct Node * p= Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		m = p;
		q = p ->Next;
		while(q)
		{
			if(q->data.Speed<m->data.Speed)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p != m)
		{
			Car t =p->data;
			p->data = m->data;
			m->data=t;
		}
		p = p -> Next;
	}
}


//按汽车油箱容量进行排序
void SortByFuelTankCapacity()
{
	struct Node * p= Head , *q , *m;
	if(!p)
	{
		return ;
	}
	if(!p->Next)
	{
		return ;
	}
	while(p)
	{
		m = p;
		q = p ->Next;
		while(q)
		{
			if(q->data.FuelTankCapacity<m->data.FuelTankCapacity)
			{
				m = q;
			}
			q = q ->Next;
		}
		if(p != m)
		{
			Car t =p->data;
			p->data = m->data;
			m->data=t;
		}
		p = p -> Next;
	}
}


//对汽车信息进行排序
int Browse()
{
	printf("***********-----------***********\n");
	printf("       1.按编号进行排序          \n");
	printf("       2.按汽车名进行排序        \n");
	printf("       3.按价钱进行排序          \n");
	printf("       4.按排量进行排序          \n");
	printf("       5.按速度进行排序          \n");
	printf("       6.按油箱容量进行排序      \n");
	printf("       0.退回主菜单              \n");
	printf("---------------------------------\n");
	int i = 0;
	scanf("%d",&i);
	switch(i)
	{
	case 1:
		SortByNumb();
		break;
	case 2:
		SortByName();
		break;
	case 3:
		SortByPrice();
		break;
	case 4:
		SortByVolume();
		break;
	case 5:
		SortBySpeed();
		break;
	case 6:
		SortByFuelTankCapacity();
		break;
	default :
		return i;
	}
	Print();
	system("pause");
	return i;
}


//Welcome 主界面
int Welcome()
{
	system("cls");
	system("color 2e");
	printf("\n\n\n");
	printf("\t************-------------------------**************\n");
	printf("\t*             欢迎使用汽车汇管理系统              *\n");
	printf("\t---------------------------------------------------\n");
	printf("\t*               1.增加汽车信息                    *\n");
	printf("\t*               2.删除汽车信息                    *\n");
	printf("\t*               3.修改汽车信息                    *\n");
	printf("\t*               4.查询汽车信息                    *\n");
	printf("\t*               5.遍历汽车信息                    *\n");
	printf("\t*               0.退出管理系统                    *\n");
	printf("\t---------------------------------------------------\n");
	printf("请输入你所选的功能: \n");
	int i = 0;
	scanf("%d",&i);
	switch(i)
	{
	case 1:
		InputMenu();          //输入信息
		system("pause");
		break;
	case 2:
		Delete();             //删除信息
		system("pause");
		break;
	case 3:
		Modify();             //修改信息
		system("pause");
		break;
	case 4:
		while(Find())         //查找信息
		{
			;
		}
		break;
	case 5:
		while(Browse())       //排序  输出
		{
			;
		}
		break;
	}
	return i;
}


//把信息写入到文件
void Save()
{
	FILE * fp = fopen("e:\\2.txt","a+");
	Node * p = Head;
	while(p)
	{
		fwrite(p,1,sizeof(Car),fp);
		p = p ->Next;
	}
	fclose(fp);
}


//把信息从文件中读出
void Load()
{
	FILE * fp =fopen("e:\\2.txt","a+");
	Car data;
	while(1)
	{
		int n = fread(&data,1,sizeof(data),fp);
		if(n<=0)
		{
			break;
		}
		AddTail(data);
	}
	fclose(fp);
}


// 堆内存 全部回收
void RemoveAll()
{
	struct Node * p = Head , *p1;
	while(p)
	{
		p1 = p;
		p = p -> Next;
		free(p1);
	}
}


int main(int argc , char * argv[])
{
	Load();
	while(Welcome())
	{
		;
	}
	Save();
	RemoveAll();
	return 0;
}</span></span>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值