汽車編程c端
親測可以運行 自己的課程設計 搞得很累 代碼如下我的課程設計 汽車租賃系統c語言
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxNum 20
typedef struct A{
int No; /*車輛編號*/
char Type; /*車類型*/
int Payment;/*租費*/
int fine; /*罰金*/
struct A *next;/*指向下一個結點*/
} car;
typedef struct B{
int No; /*顧客編號*/
char Name[20]; /*顧客姓名*/
char License; /*執照類別*/
int carNo; /*租憑的車輛編號*/
int Day; /*租的天數*/
int DelayDay;/*延遲的天數*/
struct B *next;
} client;
struct C{/*這個結構體是車輛鏈表的頭結點,A,B,C每種類型有一種*/
char Type;/*車輛型號*/
int avl; /*可用數*/
car *head;/*指向車輛結點*/
} headNode[3]={{'A',MaxNum,NULL},{'B',MaxNum,NULL},{'C',MaxNum,NULL}} ;
client *allClien=NULL;
int pay[3]={400,300,200},fine[3]={600,500,400};
void init();/*初始化*/
int menu();/*簡單菜單界面*/
void search();/*查詢*/
void carSc(); /*查詢車輛*/
void clientSc();/*查詢顧客*/
void rent(); /*租車*/
void giveback();/*還車*/
void addCli(client *cli);/*向顧客鏈表增加顧客*/
client* delCli(int clientNo);/*從顧客鏈表刪除一個顧客*/
void addCar(char carType,int carNo);
car* delCar(char type);
void Exit();/*退出*/
void main()
{
init();
while(1)
{
switch(menu())
{
case 1:search();break;
case 2:rent();break;
case 3:giveback();break;
case 4:Exit();
default:;
}
}
}
void init()
{
int i=0;
car *ptr,*pa,*pb,*pc;
headNode[0].head=NULL,headNode[1].head=NULL,headNode[2].head=NULL;
ptr=(car *)malloc(sizeof(car));
ptr->No=100;
ptr->Type='A'
ptr->Payment=400;
ptr->fine=600;
headNode[0].head=ptr;
pa=ptr;
pa->next=NULL;
for( i=1;i<20;i++){
ptr=(car *)malloc(sizeof(car));
ptr->No=100+i;
ptr->Type='A'
ptr->Payment=400;
ptr->fine=600;
pa->next=ptr;
pa=ptr;
pa->next=NULL;
}
free(ptr);
ptr=(car *)malloc(sizeof(car));
ptr->No=200;
ptr->Type='B'
ptr->Payment=300;
ptr->fine=500;
headNode[1].head=ptr;
pb=ptr;
pb->next=NULL;
for( i=1;i<20;i++){
ptr=(car *)malloc(sizeof(car));
ptr->No=200+i;
ptr->Type='A'
ptr->Payment=400;
ptr->fine=600;
pb->next=ptr;
pb=ptr;
pb->next=NULL;
}
free(ptr);
ptr=(car *)malloc(sizeof(car));
ptr->No=300;
ptr->Type='C'
ptr->Payment=200;
ptr->fine=400;
headNode[2].head=ptr;
pc=ptr;
pc->next=NULL;
for( i=1;i<20;i++){
ptr=(car *)malloc(sizeof(car));
ptr->No=300+i;
ptr->Type='A'
ptr->Payment=400;
ptr->fine=600;
pc->next=ptr;
pc=ptr;
pc->next=NULL;
}
free(ptr);
}
int menu()
{
int choice;
printf(" 選擇服務:1.查詢 2.租車 3.歸還 4.退出 ");
scanf("%d",&choice);
while(choice!=1&&choice!=2&&choice!=3&&choice!=4)
{
printf(" 輸入有誤,重新輸入:");
scanf("%d",&choice);
}
return choice;
}
void search()
{
int choice;
printf(" 你想查詢:1.汽車 2.顧客 3.返回 ");
scanf("%d",&choice);
while(choice!=1&&choice!=2&&choice!=3)
{
printf(" 輸入有誤,重新輸入:");
scanf("%d",&choice);
}
switch(choice)
{
case 1:carSc(); break;
case 2:clientSc(); break;
case 3: ;
default:;
}
}
void carSc()
{
printf(" 所有汽車信息: ");
printf(" A類汽車還剩%d輛. B類汽車還剩%d輛. C類汽車還剩%d輛.",
headNode[0].avl,headNode[1].avl,headNode[2].avl);
}
void clientSc()
{
client *ptr=allClien;
printf(" 所有顧客信息: ");
while(ptr!=NULL)
{ printf(" 顧客編號:%d",ptr->No);
printf(" 顧客姓名:%s",ptr->Name);
printf(" 駕照類型:%c",ptr->License);
printf(" 租賃車號:%d",ptr->carNo);
printf(" 租賃天數:%d",ptr->Day);
printf(" 延遲天數:%d",ptr->DelayDay);
ptr=ptr->next;
}
}
void addCli(client *cli)
{
if(allClien==NULL)
allClien=cli;
else
{
cli->next=allClien;
allClien=cli;
}
}
client* delCli(int clientNo)
{
client *ptr,*prePtr;;
ptr=allClien;
while(ptr!=NULL&&ptr->No!=clientNo)
{ prePtr=ptr;
ptr=ptr->next;
}
if(ptr!=NULL)
{
if(ptr==allClien)
{
allClien=NULL;
}
else
{
prePtr->next=ptr->next;
}
}
return ptr;
}
void rent()
{
char name[20],type,Yes_No;
int num,day,No;
car *carPtr;
client *cli;
printf(" 輸入執照類型(A/B/C):");
scanf("%c",&type);
while(type!='A'&&type!='B'&&type!='C')
{
printf("輸入有誤,重新輸入:");
scanf("%c",&type);
}
if(type=='A')
num=headNode[0].avl;
else if(type=='B')
num=headNode[1].avl;
else
num=headNode[2].avl;
printf(" %c類汽車還剩%d輛,是否要租憑(Y/N):",type,num);
scanf("%c",&Yes_No);
while(Yes_No!='Y'&&Yes_No!='N'&&Yes_No!='y'&&Yes_No!='n')
{
printf("Y或N:");
scanf("%c",&Yes_No);
}
/*增加顧客*/
if(Yes_No=='Y'||Yes_No=='y')
{
printf(" 輸入你的名字:");
scanf("%s",name);
printf(" 輸入你的租賃天數:");
scanf("%d",&day);
}
No=rand()%60+200;
carPtr=delCar(type);
cli=(client *)malloc(sizeof(client));
cli->No=No;
strcpy(cli->Name,name);
cli->License=type;
cli->carNo=carPtr->No;
cli->Day=day;
cli->DelayDay=0;
cli->next=NULL;
addCli(cli);
/*移出一輛車*/
printf(" 你的顧客編號是:%d",No);
printf(" 你所租賃的汽車是%c類車,車號是:%d",type,carPtr->No);
printf(" 你的租賃天數是%d天.",day);
}
void giveback()
{
int No;
long int payment;
client *ptr;
printf(" 顧客編號:");
scanf("%d",&No);
if((ptr=delCli(No))==NULL)
printf(" 該顧客不存在,無法歸還!");
else
{
switch(ptr->License)
{
case 1:payment=ptr->Day*400+ptr->DelayDay*600;break;
case 2:payment=ptr->Day*300+ptr->DelayDay*500;break;
case 3:payment=ptr->Day*200+ptr->DelayDay*400;break;
default:;
}
printf(" 顧客姓名:%s",ptr->Name);
printf(" 駕照類型:%c",ptr->License);
printf(" 租賃車號:%d",ptr->carNo);
printf(" 租賃天數:%d",ptr->Day);
printf(" 延遲天數:%d",ptr->DelayDay);
printf(" 所需費用:%ld",payment);
addCar(ptr->License,ptr->carNo);
free(ptr);
}
}
void addCar(char carType,int carNo)
{
car *ptr;
int index=carType-65;
ptr=headNode[index].head;
if(ptr==NULL)
{ptr=(car *)malloc(sizeof(car));
headNode[index].head=ptr;
headNode[index].avl++;
}
else
{while(ptr->next)
ptr=ptr->next;
ptr->next=(car *)malloc(sizeof(car));
ptr=ptr->next;
headNode[index].avl++;
}
ptr->No=carNo;
ptr->Type=carType;
ptr->Payment= pay[index];
ptr->fine=fine[index];
ptr->next=NULL;
}
car* delCar(char type)
{
car *rentcar;
car *pp;
switch(type)
{
case 'A':
rentcar=headNode[0].head;
headNode[0].head=rentcar->next;
headNode[0].avl--;
break;
case 'B':rentcar=headNode[1].head;
headNode[1].head=rentcar->next;
headNode[1].avl--;
break;
case 'C':rentcar=headNode[2].head;
headNode[2].head=rentcar->next;
headNode[2].avl--;
break;
default:;
}
return rentcar;
}
void Exit()
{
printf(" 歡迎使用.....888888888886666....");
exit(0);
}
Ⅱ 汽車如何編程
Define Class 環奇小大腳 As 舵機控制
Name = "環奇小大腳"
Procere Init()
This.COM口 = 9
This.速率 = 115200
Return DoDefault()
Endproc
Procere 定義油門曲線()
If Not DoDefault() Then
Return .F.
Endif
*-- 油門
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (0, -1, 1700) && 油門 - 倒車最大
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (0, 0, 1500) && 油門 - 中點
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (0, 0.05, 1450) && 油門 - 不動的
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (0, 1, 1350) && 油門 - 最大
*-- 方向舵
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (1, -1, 1450) && 方向舵 - 最左
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (1, 0, 1370) && 方向舵 - 中點
Insert Into 油門曲線 (通道, 位置, 脈沖寬度) Values (1, 1, 1250) && 方向舵 - 最右
Return .T.
Endproc
Enddefine
Define Class 舵機控制 As Form
Name = "舵機控制"
COM口 = 0
速率 = 115200
Procere Init()
This.定義油門曲線()
Return This.連接舵機控制板()
Endproc
Procere Destory()
*-- 釋放串口。
If Type("This.舵機控制板") = "O" Then
If This.舵機控制板.PortOpen Then
This.舵機控制板.PortOpen = .F.
Endif
Endif
Return .T.
Endproc
Procere 定義油門曲線()
*-- 創建油門曲線臨時表
Create Cursor 油門曲線 (通道 Integer, 位置 N(6, 4), 脈沖寬度 N(4))
Return .T.
Endproc
Procere 連接舵機控制板()
*-- 沒有「舵機控制板」就創建一個。
If Type("This.舵機控制板") <> "O" Then
This.AddObject("舵機控制板", "Olecontrol", "MSCommlib.MSComm")
Endif
*-- 打開串口。
If This.舵機控制板.PortOpen Then
This.舵機控制板.PortOpen = .F.
Endif
This.舵機控制板.CommPort = This.COM口
This.舵機控制板.Settings = Textmerge("<<This.速率>>,n,8,1")
If Not This.舵機控制板.PortOpen Then
This.舵機控制板.PortOpen = .T.
Endif
Return This.舵機控制板.PortOpen
Endproc
Procere 發送指令(通道, 位置)
Local 下限位置, 下限脈沖寬度, 上限位置, 上限脈沖寬度, 當前脈沖寬度, 串口指令代碼
m.下限位置 = -1
m.下限脈沖寬度 = 500
m.上限位置 = 1
m.上限脈沖寬度 = 2500
m.當前脈沖寬度 = 1500
m.串口指令代碼 = ""
*-- 1 找到當前位置最近的2個曲線值,如果找不到就取默認值 -1, 500 及 1, 2500。
*-- 2 生成指令。
*-- 3 發送給串口。
*-- 1
Select Top 1 * From 油門曲線 Where 通道 = m.通道 And 位置 = m.位置 Order By 位置 Desc Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.當前脈沖寬度 = curTemp.脈沖寬度
Else
Select Top 1 * From 油門曲線 Where 通道 = m.通道 And 位置 < m.位置 Order By 位置 Desc Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.下限位置 = curTemp.位置
m.下限脈沖寬度 = curTemp.脈沖寬度
Endif
Select Top 1 * From 油門曲線 Where 通道 = m.通道 And 位置 > m.位置 Order By 位置 Into Cursor curTemp
If Reccount("curTemp") > 0 Then
m.上限位置 = curTemp.位置
m.上限脈沖寬度 = curTemp.脈沖寬度
Endif
m.當前脈沖寬度 = Int((m.上限脈沖寬度 - m.下限脈沖寬度) / (m.上限位置 - m.下限位置) * (m.位置 - m.下限位置) + m.下限脈沖寬度)
Endif
*-- 2
m.串口指令代碼 = Textmerge("#<<m.通道>>P<<m.當前脈沖寬度>>")
Debugout m.串口指令代碼
*-- 3
This.舵機控制板.OutBufferCount = 0
This.舵機控制板.Output = 串口指令代碼 + Chr(13)
Endproc
Enddefine
Ⅲ 汽車電控編程語言是用什麼語言編程
汽車ECU編程是用匯編語言 ,不過可以用C代替,底層的東西需要硬體支持。
汽車ECU最簡單的是採用轉換儲存程序晶元方式,更換不同編程的晶元時,只要把ECU的背板拆開,拔掉原來的晶元再換上新的晶元便完事了,由於一些舊款的E-ROM晶元僅可寫入程序一次,因此每次修改程序後都須用刻錄機把程序刻入空白晶元來替換出原來的晶元。
很多新車的ECU使用了可以多次重復讀寫的Flash-Rom (快閃記憶)晶元,在修改程序時不用更換空白晶元便可直接載入,較E-Rom方便多了。
不論是哪種形式的晶元,原廠和晶元改裝商設計時都會加入保護設計來防止被解碼和盜拷,因此在改裝時,晶元改裝經銷商先要把每台車的數據上傳到晶元改裝商去認證車身號碼、ECU編號、年份/規格。在數據確定後,相關的程序才下傳到經銷商的電腦,技師再用刻錄機把數據寫入空白晶元或經原來用作連接原廠檢測電腦的插口,把ECU內的Flash-Rom晶元程序更新。