汽车租赁系统的c语言

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

汽车租赁系统的c语言,数据结构的语言程序
【问题描述】
汽车租赁公司拥有若干种不同类别的汽车,允许持有相应类别驾照的顾客租赁汽车,按照租赁的汽车类型和租赁的时间进行收费,租赁最长时间不能超过一周;若延迟归还,则按延迟的时间进行罚金处理。

其中,汽车信息包括:汽车编号、类别、收费标准、库存数量、延迟归还罚金标准;(汽车类别分为A、B、C三类,收费标准每天分别为:400、300、200元,延迟归还的罚金标准分别为:每天600、500、400元。


顾客租赁信息包括:顾客编号、顾客名、驾照类别(A、B、C三类)、租赁的汽车编号、租赁天数、延迟归还的天数)。

主要用到的知识点有:结构体、线性表、函数
【基本要求】设计一个汽车租赁管理系统,能够完成以下功能:
查询并显示汽车信息、顾客的租赁信息
顾客租赁汽车:首先检查顾客驾照类别,然后查询相应类别的汽车数量,若可租赁,则添加顾客信息、同时修改汽车库存量。

顾客归还汽车:首先检查归还日期并计算费用,然后删除该顾客的租赁信息表、修改汽车库存量。

系统以菜单的方式工作:运行界面可选择要执行的操作是查询?租赁还是归还?【测试数据】由读者自行设定
编译器是VC6
#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();/*向车辆链表归还车辆*/
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欢迎使用.....8886666...."); exit(0);
}。

相关文档
最新文档