[数据结构课设]汽车租借公司的管理
2017-11-21 16:53
288 查看
一、题目
汽车租借公司的管理
(1)问题描述
设计数据结构及算法完成某个汽车租借公司日常工作的组织与管理。该管理系统的基本管理对象为汽车,每台汽车用一个license number进行唯一标识。每个汽车存在三种可能状态:
·可以租借(available for rent)
·已借(rented)
·修理中(in repair)
其中在available队列中汽车应该依据汽车行驶的路程进行排序,行驶路程最少的汽车排在最前面。在rented队列中的汽车应依据其预期返回时间进行排序,排在最前的应是预期最早返回的汽车。
(2)课程设计目的
应用线性数据结构存储信息,并能够应用上面的基本操作实现事务管理。
(3)基本要求
①用三个链表组织三种状态的汽车。
②能够实现租借的日常事务:引入新车,租借,收费,修理等。
③租借收费应根据汽车行驶的路程及借去的时间综合计算得出,路程收费标准如下:
1.低于100Km收费20.00元
2.100Km以外的路程每Km收费0.15元
④汽车根据行驶的路程定期进行维护。
⑤还需实现辅助操作:汽车查询,打印全部信息,计算并打印收入、成本及收益。
⑥管理系统应有完整地界面(最好是图形化界面)。
(4)实现提示
主要集中在链表的基本操作上
二、主界面
三、源码
https://github.com/nasnan/CarCompany
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
struct allCarsNode
{
allCarsNode* next;
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
allCarsNode(const int& license, int& ranMiles, int& status, int& returnTime, int& repairedTime, double& income, allCarsNode *next)
{
this->license = license;
this->ranMiles = ranMiles;
this->status = status;
this->returnTime = returnTime;
this->repairedTime = repairedTime;
this->next = next;
this->income = income;
}
};
class allcars
{
public:
allcars(int initialCapacity = 10);
void addNewCar(int license = 0, int ranMiles = 0, int status = 0, int returnTime = 0, int repairedTime = 0, double income = 0);
void changeCarstatus(int license, int ranMiles, int status, int returnTime,int repairedTime, double income);
void erase(int license);
void prin();
int listSize;
allCarsNode* firstNode;
};
allcars::allcars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
//状态改为已借
void allcars::changeCarstatus(int license, int ranMiles, int status, int returnTime,int repairedTime, double income)
{
allCarsNode *findNode = firstNode;
for (int i = 0; i < listSize && findNode->license != license; i++)
findNode = findNode->next;
findNode->status = status;
findNode->ranMiles = ranMiles;
findNode->income = income;
findNode->returnTime = returnTime;
}
//所有车 加新车
void allcars::addNewCar(int license, int ranMiles, int status, int returnTime, int repairedTime, double income)
{
firstNode = new allCarsNode(license, ranMiles, status, returnTime, repairedTime, income, firstNode);
listSize++;
}
//删除
void allcars::erase(int license)
{
allCarsNode *deleteNode;
if (firstNode->license == license)
{
deleteNode = firstNode;
firstNode = firstNode->next;
}
else
{
allCarsNode* p = firstNode;
for (int i = 0; i < listSize && p->next->license != license; i++)
{
p = p->next;
}
deleteNode = p->next;
p->next = p->next->next;
}
listSize--;
delete deleteNode;
}
//所有车 输出
void allcars::prin()
{
cout << "" << setw(10) << "汽车编号" << setw(10) << "现在状态" << setw(10) << "驶过距离" << setw(10) << "归还时间" << setw(10) << "修理次数" << setw(10) << "带来收入" << endl;
for (allCarsNode *p = firstNode; p != NULL; p = p->next)
{
cout << "" << setw(10) << p->license << setw(10) << p->status << setw(10) << p->ranMiles << setw(10) << p->returnTime << setw(10) << p->repairedTime << setw(10) << p->income << endl;
}
}
//可借车的类
class avacars :public allcars
{
public:
avacars(int initialCapacity = 10);
};
//可借车初始化
avacars::avacars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
//已借车的类
class rentedcars : public allcars
{
public:
rentedcars(int initialCapacity = 10);
};
//已借车初始化
rentedcars::rentedcars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
class repaircars : public allcars
{
public:
repaircars(int initialCapacity = 10);
};
repaircars::repaircars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
void sortrent(rentedcars *re);
void writedata(allcars *a);
void sortava(avacars *ava);
//保证正确输入格式
template<class T>
T inputcheck()
{
T i;
while (1)
{
cin >> i;
if (cin.fail())
{
cout << "输入错误,请重新输入:";
cin.clear();
cin.sync();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
else
break;
}
return i;
}
//引入新车
void addnewcar(allcars *all, avacars *ava, rentedcars *ren, repaircars *rep,int license)
{
all->addNewCar(license);
ava->addNewCar(license);
}
//租车, 在allcars中改变状态为1, 从avacars列表删除, 加到rentedcars
void rentcar(allcars *a, avacars *ava, rentedcars *ren)
{
int license;
cout << "请输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
int renttime;
cout << "输入借车时间 :";
renttime = inputcheck<int>();
a->changeCarstatus(license, p->ranMiles, 1, renttime, p->repairedTime, p->income);
writedata(a);
ava->erase(license);
ren->addNewCar(p->license, p->ranMiles, 1, renttime, p->repairedTime, p->income);
sortrent(ren);
cout << "已租!\n";
}
else
cout << "序号不存在" << endl;
}
//还车收费
double charge(int miles)
{
double c = 0;
if (miles <= 100)
c = 20;
else
c = 20 + 0.15*(c - 100);
return c;
}
//还车, 在allcars中改状态为0,改行驶历程 收入, 从rentedcars中删除,加到avacars列表
void returncar(allcars *a, avacars *ava, rentedcars *ren)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
if (p->status == 1)
{
int ranmiles;
cout << "输入行驶路程 :";
ranmiles = inputcheck<int>();
double ch;
ch = charge(ranmiles);
cout << "行驶" << ranmiles << "km , 收费" << ch << "元。" << endl;
a->changeCarstatus(p->license, ranmiles + p->ranMiles, 0, 0, p->repairedTime, ch + p->income);
writedata(a);
ren->erase(p->license);
ava->addNewCar(license, p->ranMiles, 0, 0, p->repairedTime, p->income);
sortava(ava);
cout << "已还!\n";
}
else
cout << "此车并不在已借列表!\n";
}
else
cout << "序号不存在!\n";
}
//送修理, 在allcars改状态为2,加入repaircas列表
void repairecars(allcars *all, avacars *ava, repaircars *rep)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = all->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
all->changeCarstatus(license, p->ranMiles, 2, 0, p->repairedTime, p->income);
ava->erase(license);
writedata(all);
rep->addNewCar(license, p->ranMiles, 2, p->returnTime, p->repairedTime, p->income);
cout << "已送修理!\n";
}
else
cout << "序号不存在!\n";
}
//修理结束,在allcars改状态为0,从repaircars删除,加入avacars,改repairtime++
void finishrepaired(allcars *a, avacars *ava, repaircars *re)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
a->changeCarstatus(license, p->ranMiles, 0, 0, p->repairedTime++, p->income);
writedata(a);
re->erase(license);
ava->addNewCar(license, p->ranMiles, 0, p->returnTime, p->repairedTime, p->income);
sortava(ava);
cout << "已还!\n";
}
else
cout << "序号不存在!\n";
}
//可用车按行驶路程升序排列
void sortava(avacars *ava)
{
allCarsNode *pre, *p, *tail,
d124
*temp;
allCarsNode *firstNode;
ava->addNewCar(NULL);
firstNode = ava->firstNode;
tail = NULL;
pre = ava->firstNode;
while ((ava->firstNode->next->next) != tail)
{
p = ava->firstNode->next;
pre = ava->firstNode;
while (p->next != tail)
{
if ((p->ranMiles)>(p->next->ranMiles))
{
pre->next = p->next;
p->next = p->next->next;
pre->next->next = p;
p = pre->next; //p回退一个节点
}
p = p->next; //p再前进一个节点
pre = pre->next;
}
tail = p;
}
ava->erase(NULL);
}
//已借车按预期返回时间升序排列
void sortrent(rentedcars *re)
{
allCarsNode *pre, *p, *tail, *temp;
allCarsNode *firstNode;
re->addNewCar(NULL);
firstNode = re->firstNode;
tail = NULL;
pre = re->firstNode;
while ((re->firstNode->next->next) != tail)
{
p = re->firstNode->next;
pre = re->firstNode;
while (p->next != tail)
{
if ((p->returnTime)>(p->next->returnTime))
{
pre->next = p->next;
p->next = p->next->next;
pre->next->next = p;
p = pre->next; //p回退一个节点
}
p = p->next; //p再前进一个节点
pre = pre->next;
}
tail = p;
}
re->erase(NULL);
}
//保存allcars数据到本地
void writedata(allcars *a)
{
ofstream in;
in.open("carData.txt", ios_base::out | ios_base::trunc);
allCarsNode * p = a->firstNode;
while (p != NULL)
{
in << p->license << "\t" << p->status << "\t" << p->ranMiles << "\t" << p->returnTime << "\t" << p->repairedTime << "\t" << p->income << endl;
p = p->next;
}
in.close();
}
//读取本地已存的allcars数据
void readdata(allcars *a, avacars*ava, rentedcars*ret, repaircars*rep)
{
ifstream fread("carData.txt", ios::in);
if (!fread)
{
cerr << "open error!" << endl;
abort();
}
while (!fread.eof())
{
allCarsNode* next;
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
fread >> license >> status >> ranMiles >> returnTime >> repairedTime >> income;
a->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (fread.eof())
{
a->erase(license);
break;
}
if (status == 0)
ava->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 1)
ret->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 2)
rep->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
}
}
//2.引入新车
void addcar(allcars *all, avacars *ava, rentedcars *ren, repaircars *rep)
{
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
cout << "请输入车编号:";
license = inputcheck<int>();
cout << "请输入车行驶过的距离(km),不足1km按1km计算:";
ranMiles = inputcheck<int>();
cout << "请输入车的状态(0:可借,1:已借,2:在修理):";
status = inputcheck<int>();
cout << "请输入车归还时间:";
returnTime = inputcheck<int>();
cout << "请输入车维修过的次数:";
repairedTime = inputcheck<int>();
cout << "请输入车已带来的收入:";
income = inputcheck<double>();
all->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 0)
{
ava->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
sortava(ava);
}
if (status == 1)
{
ren->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
sortrent(ren);
}
if (status == 2)
rep->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
writedata(all);
cout << "已加入!" << endl;
}
void findcar(allcars *all)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = all->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
cout << "" << setw(10) << "汽车编号" << setw(10) << "现在状态" << setw(10) << "驶过距离" << setw(10) << "归还时间" << setw(10) << "修理次数" << setw(10) << "带来收入" << endl;
cout << "" << setw(10) << p->license << setw(10) << p->status << setw(10) << p->ranMiles << setw(10) << p->returnTime << setw(10) << p->repairedTime << setw(10) << p->income << endl;
}
else
cout << "序号不存在!\n";
}
void allincome(allcars *a)
{
double income = 0;
allCarsNode *p = a->firstNode;
while (p != NULL)
{
income += p->income;
p = p->next;
}
cout << "总共收益为 :" << income << "元" << endl;
}
int main()
{
allcars a(1);
avacars x(1);
rentedcars r(1);
repaircars re(1);
readdata(&a, &x, &r, &re);
while (1)
{
cout << "---------------------汽车租借公司管理系统---------------------" << endl;
cout << "*" << setw(35) << "1. 查看所有 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "2. 引入新车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "3. 租借汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "4. 归还汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "5. 修理汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "6. 结束修理 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "7. 查询 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "8. 打印可借 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "9. 打印已借 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "10. 打印修理 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "11. 计算收益 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "其他. 退出 " << setw(26) << "*" << endl;
cout << "--------------------------------------------------------------" << endl;
cout << "请输入选择:";
int i;
i = inputcheck<int>();
switch (i)
{
case 1: a.prin();
break;
case 2: addcar(&a, &x, &r, &re);
break;
case 3: rentcar(&a, &x, &r);
break;
case 4: returncar(&a, &x, &r);
break;
case 5: repairecars(&a, &x, &re);
break;
case 6: finishrepaired(&a, &x, &re);
break;
case 7: findcar(&a);
break;
case 8:
sortava(&x);
x.prin();
break;
case 9:
sortrent(&r);
r.prin();
break;
case 10: re.prin();
break;
case 11: allincome(&a);
break;
default:
exit(0);
break;
}
}
system("PAUSE");
}
汽车租借公司的管理
(1)问题描述
设计数据结构及算法完成某个汽车租借公司日常工作的组织与管理。该管理系统的基本管理对象为汽车,每台汽车用一个license number进行唯一标识。每个汽车存在三种可能状态:
·可以租借(available for rent)
·已借(rented)
·修理中(in repair)
其中在available队列中汽车应该依据汽车行驶的路程进行排序,行驶路程最少的汽车排在最前面。在rented队列中的汽车应依据其预期返回时间进行排序,排在最前的应是预期最早返回的汽车。
(2)课程设计目的
应用线性数据结构存储信息,并能够应用上面的基本操作实现事务管理。
(3)基本要求
①用三个链表组织三种状态的汽车。
②能够实现租借的日常事务:引入新车,租借,收费,修理等。
③租借收费应根据汽车行驶的路程及借去的时间综合计算得出,路程收费标准如下:
1.低于100Km收费20.00元
2.100Km以外的路程每Km收费0.15元
④汽车根据行驶的路程定期进行维护。
⑤还需实现辅助操作:汽车查询,打印全部信息,计算并打印收入、成本及收益。
⑥管理系统应有完整地界面(最好是图形化界面)。
(4)实现提示
主要集中在链表的基本操作上
二、主界面
三、源码
https://github.com/nasnan/CarCompany
#include<iostream>
#include<iomanip>
#include<fstream>
using namespace std;
struct allCarsNode
{
allCarsNode* next;
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
allCarsNode(const int& license, int& ranMiles, int& status, int& returnTime, int& repairedTime, double& income, allCarsNode *next)
{
this->license = license;
this->ranMiles = ranMiles;
this->status = status;
this->returnTime = returnTime;
this->repairedTime = repairedTime;
this->next = next;
this->income = income;
}
};
class allcars
{
public:
allcars(int initialCapacity = 10);
void addNewCar(int license = 0, int ranMiles = 0, int status = 0, int returnTime = 0, int repairedTime = 0, double income = 0);
void changeCarstatus(int license, int ranMiles, int status, int returnTime,int repairedTime, double income);
void erase(int license);
void prin();
int listSize;
allCarsNode* firstNode;
};
allcars::allcars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
//状态改为已借
void allcars::changeCarstatus(int license, int ranMiles, int status, int returnTime,int repairedTime, double income)
{
allCarsNode *findNode = firstNode;
for (int i = 0; i < listSize && findNode->license != license; i++)
findNode = findNode->next;
findNode->status = status;
findNode->ranMiles = ranMiles;
findNode->income = income;
findNode->returnTime = returnTime;
}
//所有车 加新车
void allcars::addNewCar(int license, int ranMiles, int status, int returnTime, int repairedTime, double income)
{
firstNode = new allCarsNode(license, ranMiles, status, returnTime, repairedTime, income, firstNode);
listSize++;
}
//删除
void allcars::erase(int license)
{
allCarsNode *deleteNode;
if (firstNode->license == license)
{
deleteNode = firstNode;
firstNode = firstNode->next;
}
else
{
allCarsNode* p = firstNode;
for (int i = 0; i < listSize && p->next->license != license; i++)
{
p = p->next;
}
deleteNode = p->next;
p->next = p->next->next;
}
listSize--;
delete deleteNode;
}
//所有车 输出
void allcars::prin()
{
cout << "" << setw(10) << "汽车编号" << setw(10) << "现在状态" << setw(10) << "驶过距离" << setw(10) << "归还时间" << setw(10) << "修理次数" << setw(10) << "带来收入" << endl;
for (allCarsNode *p = firstNode; p != NULL; p = p->next)
{
cout << "" << setw(10) << p->license << setw(10) << p->status << setw(10) << p->ranMiles << setw(10) << p->returnTime << setw(10) << p->repairedTime << setw(10) << p->income << endl;
}
}
//可借车的类
class avacars :public allcars
{
public:
avacars(int initialCapacity = 10);
};
//可借车初始化
avacars::avacars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
//已借车的类
class rentedcars : public allcars
{
public:
rentedcars(int initialCapacity = 10);
};
//已借车初始化
rentedcars::rentedcars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
class repaircars : public allcars
{
public:
repaircars(int initialCapacity = 10);
};
repaircars::repaircars(int initialCapacity)
{
if (initialCapacity < 1)
cout << "Illegalparametervalues.\n";
firstNode = NULL;
listSize = 0;
}
void sortrent(rentedcars *re);
void writedata(allcars *a);
void sortava(avacars *ava);
//保证正确输入格式
template<class T>
T inputcheck()
{
T i;
while (1)
{
cin >> i;
if (cin.fail())
{
cout << "输入错误,请重新输入:";
cin.clear();
cin.sync();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
continue;
}
else
break;
}
return i;
}
//引入新车
void addnewcar(allcars *all, avacars *ava, rentedcars *ren, repaircars *rep,int license)
{
all->addNewCar(license);
ava->addNewCar(license);
}
//租车, 在allcars中改变状态为1, 从avacars列表删除, 加到rentedcars
void rentcar(allcars *a, avacars *ava, rentedcars *ren)
{
int license;
cout << "请输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
int renttime;
cout << "输入借车时间 :";
renttime = inputcheck<int>();
a->changeCarstatus(license, p->ranMiles, 1, renttime, p->repairedTime, p->income);
writedata(a);
ava->erase(license);
ren->addNewCar(p->license, p->ranMiles, 1, renttime, p->repairedTime, p->income);
sortrent(ren);
cout << "已租!\n";
}
else
cout << "序号不存在" << endl;
}
//还车收费
double charge(int miles)
{
double c = 0;
if (miles <= 100)
c = 20;
else
c = 20 + 0.15*(c - 100);
return c;
}
//还车, 在allcars中改状态为0,改行驶历程 收入, 从rentedcars中删除,加到avacars列表
void returncar(allcars *a, avacars *ava, rentedcars *ren)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
if (p->status == 1)
{
int ranmiles;
cout << "输入行驶路程 :";
ranmiles = inputcheck<int>();
double ch;
ch = charge(ranmiles);
cout << "行驶" << ranmiles << "km , 收费" << ch << "元。" << endl;
a->changeCarstatus(p->license, ranmiles + p->ranMiles, 0, 0, p->repairedTime, ch + p->income);
writedata(a);
ren->erase(p->license);
ava->addNewCar(license, p->ranMiles, 0, 0, p->repairedTime, p->income);
sortava(ava);
cout << "已还!\n";
}
else
cout << "此车并不在已借列表!\n";
}
else
cout << "序号不存在!\n";
}
//送修理, 在allcars改状态为2,加入repaircas列表
void repairecars(allcars *all, avacars *ava, repaircars *rep)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = all->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
all->changeCarstatus(license, p->ranMiles, 2, 0, p->repairedTime, p->income);
ava->erase(license);
writedata(all);
rep->addNewCar(license, p->ranMiles, 2, p->returnTime, p->repairedTime, p->income);
cout << "已送修理!\n";
}
else
cout << "序号不存在!\n";
}
//修理结束,在allcars改状态为0,从repaircars删除,加入avacars,改repairtime++
void finishrepaired(allcars *a, avacars *ava, repaircars *re)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = a->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
a->changeCarstatus(license, p->ranMiles, 0, 0, p->repairedTime++, p->income);
writedata(a);
re->erase(license);
ava->addNewCar(license, p->ranMiles, 0, p->returnTime, p->repairedTime, p->income);
sortava(ava);
cout << "已还!\n";
}
else
cout << "序号不存在!\n";
}
//可用车按行驶路程升序排列
void sortava(avacars *ava)
{
allCarsNode *pre, *p, *tail,
d124
*temp;
allCarsNode *firstNode;
ava->addNewCar(NULL);
firstNode = ava->firstNode;
tail = NULL;
pre = ava->firstNode;
while ((ava->firstNode->next->next) != tail)
{
p = ava->firstNode->next;
pre = ava->firstNode;
while (p->next != tail)
{
if ((p->ranMiles)>(p->next->ranMiles))
{
pre->next = p->next;
p->next = p->next->next;
pre->next->next = p;
p = pre->next; //p回退一个节点
}
p = p->next; //p再前进一个节点
pre = pre->next;
}
tail = p;
}
ava->erase(NULL);
}
//已借车按预期返回时间升序排列
void sortrent(rentedcars *re)
{
allCarsNode *pre, *p, *tail, *temp;
allCarsNode *firstNode;
re->addNewCar(NULL);
firstNode = re->firstNode;
tail = NULL;
pre = re->firstNode;
while ((re->firstNode->next->next) != tail)
{
p = re->firstNode->next;
pre = re->firstNode;
while (p->next != tail)
{
if ((p->returnTime)>(p->next->returnTime))
{
pre->next = p->next;
p->next = p->next->next;
pre->next->next = p;
p = pre->next; //p回退一个节点
}
p = p->next; //p再前进一个节点
pre = pre->next;
}
tail = p;
}
re->erase(NULL);
}
//保存allcars数据到本地
void writedata(allcars *a)
{
ofstream in;
in.open("carData.txt", ios_base::out | ios_base::trunc);
allCarsNode * p = a->firstNode;
while (p != NULL)
{
in << p->license << "\t" << p->status << "\t" << p->ranMiles << "\t" << p->returnTime << "\t" << p->repairedTime << "\t" << p->income << endl;
p = p->next;
}
in.close();
}
//读取本地已存的allcars数据
void readdata(allcars *a, avacars*ava, rentedcars*ret, repaircars*rep)
{
ifstream fread("carData.txt", ios::in);
if (!fread)
{
cerr << "open error!" << endl;
abort();
}
while (!fread.eof())
{
allCarsNode* next;
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
fread >> license >> status >> ranMiles >> returnTime >> repairedTime >> income;
a->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (fread.eof())
{
a->erase(license);
break;
}
if (status == 0)
ava->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 1)
ret->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 2)
rep->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
}
}
//2.引入新车
void addcar(allcars *all, avacars *ava, rentedcars *ren, repaircars *rep)
{
int license;
int ranMiles;
int status; //0:可用 1:已借 2:在修
int returnTime;
int repairedTime;
double income;
cout << "请输入车编号:";
license = inputcheck<int>();
cout << "请输入车行驶过的距离(km),不足1km按1km计算:";
ranMiles = inputcheck<int>();
cout << "请输入车的状态(0:可借,1:已借,2:在修理):";
status = inputcheck<int>();
cout << "请输入车归还时间:";
returnTime = inputcheck<int>();
cout << "请输入车维修过的次数:";
repairedTime = inputcheck<int>();
cout << "请输入车已带来的收入:";
income = inputcheck<double>();
all->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
if (status == 0)
{
ava->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
sortava(ava);
}
if (status == 1)
{
ren->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
sortrent(ren);
}
if (status == 2)
rep->addNewCar(license, ranMiles, status, returnTime, repairedTime, income);
writedata(all);
cout << "已加入!" << endl;
}
void findcar(allcars *all)
{
int license;
cout << "输入序号 :";
license = inputcheck<int>();
allCarsNode *p = all->firstNode;
while (p != 0 && p->license != license)
p = p->next;
if (p != NULL)
{
cout << "" << setw(10) << "汽车编号" << setw(10) << "现在状态" << setw(10) << "驶过距离" << setw(10) << "归还时间" << setw(10) << "修理次数" << setw(10) << "带来收入" << endl;
cout << "" << setw(10) << p->license << setw(10) << p->status << setw(10) << p->ranMiles << setw(10) << p->returnTime << setw(10) << p->repairedTime << setw(10) << p->income << endl;
}
else
cout << "序号不存在!\n";
}
void allincome(allcars *a)
{
double income = 0;
allCarsNode *p = a->firstNode;
while (p != NULL)
{
income += p->income;
p = p->next;
}
cout << "总共收益为 :" << income << "元" << endl;
}
int main()
{
allcars a(1);
avacars x(1);
rentedcars r(1);
repaircars re(1);
readdata(&a, &x, &r, &re);
while (1)
{
cout << "---------------------汽车租借公司管理系统---------------------" << endl;
cout << "*" << setw(35) << "1. 查看所有 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "2. 引入新车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "3. 租借汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "4. 归还汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "5. 修理汽车 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "6. 结束修理 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "7. 查询 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "8. 打印可借 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "9. 打印已借 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "10. 打印修理 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "11. 计算收益 " << setw(26) << "*" << endl;
cout << "*" << setw(35) << "其他. 退出 " << setw(26) << "*" << endl;
cout << "--------------------------------------------------------------" << endl;
cout << "请输入选择:";
int i;
i = inputcheck<int>();
switch (i)
{
case 1: a.prin();
break;
case 2: addcar(&a, &x, &r, &re);
break;
case 3: rentcar(&a, &x, &r);
break;
case 4: returncar(&a, &x, &r);
break;
case 5: repairecars(&a, &x, &re);
break;
case 6: finishrepaired(&a, &x, &re);
break;
case 7: findcar(&a);
break;
case 8:
sortava(&x);
x.prin();
break;
case 9:
sortrent(&r);
r.prin();
break;
case 10: re.prin();
break;
case 11: allincome(&a);
break;
default:
exit(0);
break;
}
}
system("PAUSE");
}
相关文章推荐
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 分布式管理(每个公司管理每个公司自己的数据)
- 使用 MySQL 管理层次结构的数据
- 一步步教你如何用疯狂.NET架构中的通用权限系统 -- 分布式管理(每个公司管理每个公司自己的数据)
- 第10章 管理内存和低级数据结构
- 管理诊断数据(1)---故障诊断性基础结构
- 数据结构课程设计论文--学生信息管理系统
- 数据结构课程设计——学生成绩管理系统
- 数据结构课程设计-学生信息管理(改)
- 通用数据采集与统计分析管理系统,随数据库结构的调整而自动调整
- 数据结构课程设计、职工信息管理系统
- 数据结构课程设计--学生成绩管理系统
- 货物管理系统(数据结构顺序表)
- 数据结构课程设计-学生信息管理系统
- 数据结构课程设计-图书管理系统 作者:彭子竹
- 数据结构--停车场管理
- PL/SQL程序控制结构及在PL/SQL中更改数据和管理事务
- 数据结构课程设计(运动会成绩管理系统)
- 运维之mysql篇------1. 数据库服务概述 、 构建MySQL服务器 、 数据库基本管理 、 MySQL数据类型 、 表结构的调整
- [数据结构实验]学生成绩管理
- 数据结构课程设计—图书管理系统