汽车租赁系统的c语言,数据结构的语言程序 【问题描述】 汽车租赁公司拥有若干种不同类别的汽车,允许持有相应类别驾照的顾客租赁汽车,按照租赁的汽车类型和租赁的时间进行收费,租赁最长时间不能超过一周;若延迟归还,则按延迟的时间进行罚金处理。 其中,汽车信息包括:汽车编号、类别、收费标准、库存数量、延迟归还罚金标准;(汽车类别分为A、B、C三类,收费标准每天分别为:400、300、200元,延迟归还的罚金标准分别为:每天600、500、400元。) 顾客租赁信息包括:顾客编号、顾客名、驾照类别(A、B、C三类)、租赁的汽车编号、租赁天数、延迟归还的天数)。 主要用到的知识点有:结构体、线性表、函数 【基本要求】 设计一个汽车租赁管理系统,能够完成以下功能: 查询并显示汽车信息、顾客的租赁信息 顾客租赁汽车:首先检查顾客驾照类别,然后查询相应类别的汽车数量,若可租赁,则添加顾客信息、同时修改汽车库存量。 顾客归还汽车:首先检查归还日期并计算费用,然后删除该顾客的租赁信息表、修改汽车库存量。 系统以菜单的方式工作:运行界面可选择要执行的操作是查询?租赁还是归还? 【测试数据】由读者自行设定编译器是VC6 #include<> #include<> #include<> #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();/*向车辆链表归还车辆*/ car* delCar();/*从车辆链表拿出一辆车*/ 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; car *ptr,*pa=headNode[0].head,*pb=headNode[1].head,*pc=headNode[2].head; for(i=1;i<=MaxNum;i++) { ptr=(car *)malloc(sizeof(car)); ptr->No=100+i; ptr->Type='A'; ptr->Payment=400; ptr->fine=600; pa=ptr; pa=ptr->next; ptr=ptr=(car *)malloc(sizeof(car)); ptr->No=200+i; ptr->Type='B'; ptr->Payment=300; ptr->fine=500; pb=ptr; pb=ptr->next; ptr=(car *)malloc(sizeof(car)); ptr->No=300+i; ptr->Type='C'; ptr->Payment=200; ptr->fine=400; pc=ptr; pc=ptr->next; } pa=NULL;pb=NULL;pc=NULL; } int menu() { int choice; printf("\n\n\n选择服务:1.查询 2.租车 3.归还 4.退出\n"); scanf("%d",&choice); while(choice!=1&&choice!=2&&choice!=3&&choice!=4) { printf("\n输入有误,重新输入:"); scanf("%d",&choice); } return choice; } void search() { int choice; printf("\n你想查询:1.汽车 2.顾客 3.返回 \n"); scanf("%d",&choice); while(choice!=1&&choice!=2&&choice!=3) { printf("\n输入有误,重新输入:"); scanf("%d",&choice); } switch(choice) { case 1:carSc(); break; case 2:clientSc(); break; case 3: ; default:; } } void carSc() { printf("\n\n所有汽车信息:\n"); printf("\nA类汽车还剩%d辆.\nB类汽车还剩%d辆.\nC类汽车还剩%d辆.", headNode[0].avl,headNode[1].avl,headNode[2].avl); } void clientSc() { client *ptr=allClien; printf("\n\n所有顾客信息:\n"); while(ptr!=NULL) { printf("\n\n顾客编号:%d",ptr->No); printf("\n顾客姓名:%s",ptr->Name); printf("\n驾照类型:%c",ptr->License); printf("\n租赁车号:%d",ptr->carNo); printf("\n租赁天数:%d",ptr->Day); printf("\n延迟天数:%d",ptr->DelayDay); ptr=ptr->next; } } void addCli(client *cli) { if(allClien) allClien=cli; else { cli->next=allClien->next; 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("\n\n输入执照类型(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("\n%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("\n输入你的名字:"); scanf("%s",name); printf("\n输入你的租赁天数:"); 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("\n你的顾客编号是:%d",No); printf("\n你所租赁的汽车是%c类车,车号是:%d",type,carPtr->No); printf("\n你的租赁天数是%d天.",day); } void giveback() { int No; long int payment; client *ptr; printf("\n\n顾客编号:"); scanf("%d",&No); if((ptr=delCli(No))==NULL) printf("\n该顾客不存在,无法归还!"); 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("\n\n顾客姓名:%s",ptr->Name); printf("\n驾照类型:%c",ptr->License); printf("\n租赁车号:%d",ptr->carNo); printf("\n租赁天数:%d",ptr->Day); printf("\n延迟天数:%d",ptr->DelayDay); printf("\n\n所需费用:%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; } else {while(ptr->next) ptr=ptr->next; ptr->next=(car *)malloc(sizeof(car)); ptr=ptr->next; } ptr->No=carNo; ptr->Type=carType; ptr->Payment= pay[index]; ptr->fine=fine[index]; ptr->next=NULL; } car* delCar(char type) { car *rentcar; switch(type) { case 'A':rentcar=headNode[0].head; headNode[0].head=rentcar->next; break; case 'B':rentcar=headNode[1].head; headNode[1].head=rentcar->next; break; case 'C':rentcar=headNode[2].head; headNode[2].head=rentcar->next; break; default:; } return rentcar; } void Exit() { printf("\n欢迎使用.....888888888886666...."); exit(0); }