求一篇<汽车租赁管理系统>的毕业设计论文VB+ACCESS

汽车租赁系统的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()

{

exit(0);

}