数据结构课程设计报告.docx

上传人:b****1 文档编号:2342560 上传时间:2023-05-03 格式:DOCX 页数:33 大小:237.77KB
下载 相关 举报
数据结构课程设计报告.docx_第1页
第1页 / 共33页
数据结构课程设计报告.docx_第2页
第2页 / 共33页
数据结构课程设计报告.docx_第3页
第3页 / 共33页
数据结构课程设计报告.docx_第4页
第4页 / 共33页
数据结构课程设计报告.docx_第5页
第5页 / 共33页
数据结构课程设计报告.docx_第6页
第6页 / 共33页
数据结构课程设计报告.docx_第7页
第7页 / 共33页
数据结构课程设计报告.docx_第8页
第8页 / 共33页
数据结构课程设计报告.docx_第9页
第9页 / 共33页
数据结构课程设计报告.docx_第10页
第10页 / 共33页
数据结构课程设计报告.docx_第11页
第11页 / 共33页
数据结构课程设计报告.docx_第12页
第12页 / 共33页
数据结构课程设计报告.docx_第13页
第13页 / 共33页
数据结构课程设计报告.docx_第14页
第14页 / 共33页
数据结构课程设计报告.docx_第15页
第15页 / 共33页
数据结构课程设计报告.docx_第16页
第16页 / 共33页
数据结构课程设计报告.docx_第17页
第17页 / 共33页
数据结构课程设计报告.docx_第18页
第18页 / 共33页
数据结构课程设计报告.docx_第19页
第19页 / 共33页
数据结构课程设计报告.docx_第20页
第20页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

数据结构课程设计报告.docx

《数据结构课程设计报告.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告.docx(33页珍藏版)》请在冰点文库上搜索。

数据结构课程设计报告.docx

数据结构课程设计报告

算法与数据结构

课程设计报告

 

题目:

汽车租借公司的管理

班级:

学号:

姓名:

指导教师:

成绩:

 

2013年1月17日

一、题目

问题描述

设计数据结构及算法完成某个汽车租借公司日常工作的组织与管理。

该管理系统的基本管理对象为汽车,每台汽车用一个licensenumber进行唯一标识。

每个汽车存在三种可能状态:

·可以租借(availableforrent)

·已借(rented)

·修理中(inrepair)

其中在available队列中汽车应该依据汽车行驶过的路程进行排序,行驶路程最少的汽车排在最前面。

在rented队列中汽车应该依据其预期返回时间进行排序,排在最前的应该是预期最早返回的汽车。

课程设计目的

应用线性数据结构存储信息,并能够应用上面的基本操作实现事务管理。

基本要求

1用三个链表组织三种状态的汽车。

2能够实现租借的日常事务:

引入新车,租借,收费,修理等。

3租借收费应该根据汽车行驶的路程及借去的时间综合计算得出,路程收费标准如下:

1.低于100㎞收费20.00元。

2.100㎞以外的路程0.15元/㎞。

4汽车根据行驶的路程定期进行维护。

5还需实现辅助操作:

汽车查询,打印全部信息,计算并打印收入、成本及收益。

6管理系统应有完整的界面。

实现提示

主要集中在链表的基本操作上。

 

二、设计思想

 

设计三个链表,分别为A(可以租借),R(已借),I(修理中)。

链表的操作有初始化通用过InitList()实现,链表的插入有函数linkInsert(),链表的排序通过插入排序,建立一个新的排序链表,由于三个链表的排序关键字不同,所以设计了Run_Sort()(按行驶路程排序,链表A)、Time_Sort()(按返回时间排序,链表I,R)函数实现,对三个链表进行排序。

使用Newday()函数模拟时间过去一天,返回时间减1。

为了使导入数据方便,数据的导入方式为文件导入,三种状态的车辆信息分别放在afr.txt(可以租借),rd.txt(已借),ir.txt(修理中)里面,打开程序后遍自动导入。

同时可以在这三个文件里经行修改管理。

引入新车:

在链表A的第一个结点前添加新节点。

租借:

将链表A的第一个结点删除,按返还时间排序后添加到链表R中。

收费:

被租借的车按一定的计算方法求的费用。

修理:

在链表A中,判断是否行驶路程超过一定值,如超过,则删除结点,添加到链表I的尾部。

基本功能包括:

1.添加新车2.租借3.修理4.查询车辆

5.显示所有车辆状态6.显示财务状况7.新的一天

结构关系:

enum{AFR,RD,IR}CarKind;//{可以租借,已借,修理中}

 

头文件:

InitList(LinkList&L)//构造一个空的带头结点的链表

ListInsert(LinkListL,inti,ElemTypee)//L为带头结点的单链表的头指针,本算法

//在链表中第i个结点之前插入新的元素e

Run_Sort(LinkListL,ElemTypee)//按路程查找e所排的位置序列,并返回序列

Time_Sort(LinkListL,ElemTypee)//按返回时间查找e所排的位置序列,并返回序列

ListDelete(LinkListL,ElemType&e)//删除以L为头指针(带头结点)的单链表中第1个结点,并赋值给e

Display(LinkListL)//打印链表信息

Write_to_File(LinkListL,char*str)//将链表写入到名为str的文件中

Read_from_File(LinkListL,char*str,CarKindk)//从名为str的文件中读取链表

主文件:

AddNewCar(LinkListL)//添加新车,在A中添加新节点

RentCar(LinkListA,LinkListR)//租车,从A中删除,添加到R

Repair(LinkListA,LinkListI)//修理,从A中删除,添加到I

Search(LinkListA,LinkListR,LinkListI)//在三个链表中查找

DisplayAll(LinkListA,LinkListR,LinkListI)//一次打印三个链表的信息

Financial(LinkListA,LinkListR,LinkListI)//财务状况函数

NewDay(LinkListA,LinkListR,LinkListI)//函数目的在于将期限减一,模拟过去一天。

如果时间为0,则将其从已借或修理中删除。

添加到可借链表中。

三、软件结构图及流程图

软件结构图:

 

流程图:

四、测试与分析

输入:

5

输出:

状态标识号行驶路程收益返回时间

01000

02000

0380000

0490000

1520202

1620202

1730203

1840204

29200351

210500802

211100203

212200354

输入:

1135

输出:

状态标识号行驶路程收益返回时间

013000

01000

02000

0380000

0490000

1520202

1620202

1730203

1840204

29200351

210500802

211100203

212200354

 

输入:

2110

输出:

已借车辆:

1520202

1620202

1730203

1840204

1190014010

输入:

35

 

输出:

状态标识号行驶路程收益返回时间

013000

02000

1520202

1620202

1730203

1840204

1190014010

29200351

210500802

211100203

212200354

2380005

2490005

输入:

48

输出:

状态标识号行驶路程收益返回时间

1840204

输入:

6

输出:

标志号收入

130

20

520

620

720

820

1140

935

1080

1120

1235

30

40

输入:

7

输入:

5

输出:

状态标识号行驶路程收益返回时间

013000

02000

09200350

1520201

1620201

1730202

1840203

119001409

210500801

211100202

212200353

2380004

2490004

输入:

0

五、源程序

LinkList.h

#include

#include

#include

#include

#include

#include

typedefintStatus;

typedefenum{AFR,RD,IR}CarKind;

//{可以租借,已借,修理中}

#defineOK1

#defineERROR0

#defineOVERFLOW1

#definenull0

typedefstruct

{

CarKindkind;//汽车状态

intlicense_number;//汽车标识号

intdistance_run;//行驶路程

floatincome;//此车的总收入费

inttime;//租借时间,以天为单位

}ElemType;

typedefstructLNode

{

ElemTypedata;//数据域

structLNode*link;//指针域

}LNode,*LinkList;

StatusInitList(LinkList&L)

{

L=(LinkList)malloc(sizeof(ElemType));

if(!

L)

exit(OVERFLOW);

L->link=null;

returnOK;

}

StatusListInsert(LinkListL,inti,ElemTypee)

{

LinkListp,s;

intj=0;

p=L;

while(p&&j

{

p=p->link;

++j;

}

if(!

p||j>i-1)//i大于表长或者小于1

{

cout<<"节点位置错误"<

returnERROR;

}

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

s->link=p->link;

p->link=s;//插入

returnOK;

}

StatusRun_Sort(LinkListL,ElemTypee)

{

LinkListp;

intj=1;

p=L->link;

while(p)

{

if(p->data.distance_run>e.distance_run)

returnj;

p=p->link;

++j;

}

returnj;

}

StatusTime_Sort(LinkListL,ElemTypee)

{

LinkListp;

intj=1;

p=L->link;

while(p)

{

if(p->data.time>=e.time)

returnj;

p=p->link;

j++;

}

returnj;

}

StatusListDelete(LinkListL,ElemType&e)

{

LinkListp,q;

intj=0;

p=L;

if(!

(p->link))

returnERROR;

q=p->link;

p->link=q->link;

e=q->data;

free(q);

returnOK;

}

voidDisplay(LinkListL)

{

LinkListp;

p=L->link;

while(p)

{

cout<data.kind

<data.license_number

<data.distance_run

<data.income

<data.time<

p=p->link;

}

}

voidWrite_to_File(LinkListL,char*str)

{

LinkListp;

p=L->link;

ofstreamoutf(str);

while(p)

{

outf<data.license_number

<data.distance_run

<data.income

<data.time;

p=p->link;

}

outf.close();

}

voidRead_from_File(LinkListL,char*str,CarKindk)

{

ElemTypep;

inti=1;

ifstreaminf(str);

while(inf)

{

inf>>setw(10)>>p.license_number

>>setw(10)>>p.distance_run

>>setw(10)>>p.income

>>setw(10)>>p.time;

p.kind=k;

ListInsert(L,i,p);

i++;

}

inf.close();

}

CarRent.cpp

#include

#include"linklist.h"

charafr[]="AFR.txt";

charrd[]="RD.txt";

charir[]="IR.txt";

voidAddNewCar(LinkListL)//添加新车

{

LinkLists;

CarKindk=AFR;

intI;

s=(LinkList)malloc(sizeof(LNode));

cout<<"输入汽车编号:

";

cin>>I;//应当设计判断是否冲突

s->data.kind=k;

s->data.distance_run=0;

s->data.income=0;

s->data.license_number=I;

s->data.time=0;

s->link=L->link;

L->link=s;

//因为链表中是按行驶路程排序,新车的行驶路程为0,所以加在第一个

}

voidRentCar(LinkListA,LinkListR)

{

LinkListp,s;

intnumber=0,day=0;

floatthis_income;

p=A->link;

cout<<"目前可租借车辆有:

"<

while(p)

{

cout<data.license_number<<"号车"<<"行驶路程为:

"<data.distance_run<

p=p->link;

}

cout<<"选择需要租借的编号:

";

cin>>number;

p=A->link;

for(;p->link;p=p->link)

{

if(p->link->data.license_number==number)

{

s=p->link;

p->link=p->link->link;//从链表A中删除,将该节点复制给s

cout<<"输入需要租借的天数:

";

cin>>day;

s->data.kind=RD;

s->data.distance_run+=day*90;//按每天90㎞算

if(day*90<100)

this_income=20;

else

this_income=20+(day*90-100)*0.15;

s->data.income+=this_income;

s->data.time=day;

cout<data.kind<data.license_number<

<data.distance_run<data.income

<data.time<

//将其添加到已借连接表中

ListInsert(R,Time_Sort(R,s->data),s->data);

cout<<"已借车辆为:

"<

Display(R);

cout<

//Write_to_File(A,afr);

//Write_to_File(R,rd);

return;

}

}

cout<

"<

}

voidRepair(LinkListA,LinkListI)//目前设计的是手动修理,可在NewDay()函数中设计自动完成修理

{

LinkLista,s,i;

a=A->link;

i=I;

while(a->link&&(a->link->data.distance_run<500))//设计达到500㎞就送修

a=a->link;//行驶路程是从小到大,所以一找到大于500㎞

s=a->link;//的车辆,就把A链表断开,成为两部分

a->link=null;//一部分是小于500的(a),另一部分是大于500的(s)//又I链表中是以修理返回时间排序的,且修理时间都初始化为5天

while(i->link)//因此s排在I链表的最后

i=i->link;

i->link=s;

while(s)

{

s->data.time=5;//每次修理5天

s->data.kind=IR;

s=s->link;

}

//Write_to_File(A,afr);

//Write_to_File(I,ir);

}

voidSearch(LinkListA,LinkListR,LinkListI)

{

LinkListp;

intnumber;

cout<<"输入车辆编号:

";

cin>>number;

p=A->link;//三个链表中一次查找

while(p)

{

if(p->data.license_number==number)

{

cout<

<<"收益"<

cout<data.kind<data.license_number

<data.distance_run<data.income

<data.time<

return;

}

p=p->link;

}

p=R->link;

while(p)

{

if(p->data.license_number==number)

{

cout<

<<"收益"<

cout<data.kind<data.license_number

<data.distance_run<data.income

<data.time<

return;

}

p=p->link;

}

p=I->link;

while(p)

{

if(p->data.license_number==number)

{

cout<

<<"收益"<

cout<data.kind<data.license_number

<data.distance_run<data.income

<data.time<

return;

}

p=p->link;

}

cout<<"无此车信息"<

}

voidDisplayAll(LinkListA,LinkListR,LinkListI)

{

cout<

Display(A);

cout<

Display(R);

cout<

Display(I);

cout<

}

 

voidFinancial(LinkListA,LinkListR,LinkListI)//财务状况函数

{//可添加固有成本,可变成本等数据丰富函数

LinkListp;

floatsum=0;

cout<

p=A->link;

while(p)

{

sum+=p->data.income;

cout<data.license_number<d

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2