功能架构图:
系统分析及设计:
系统设计的对象有两个类:维修记录类和维修记录链表管理类。
维修记录类用于保存维修记录的各种信息,并用一个next指针指向下一个维修记录。维修记录链表管理类用于对维修记录进行管理,用一个head_node指针指向维修记录的链表,对链表进行各种操作,以实现3.1中所描述的增删改查等系统功能,两个类的结构如图2所示:
类的编写与实现:
// Record_Maintenance类:
class Record_Maintenance
{
private:
string id; //记录id
string address; //住户
string Appointment_date; //预约日期
string date; //实际维修日期
string type; //维修内容
string price; // 收费金额
string cost; //成本
string name; //维修人
string remark; //备注
public:
// 构造函数
Record_Maintenance() {};
Record_Maintenance(string id, string address, string app_date, string date, string type, string price, string cost,
string name, string remark) :id(id), address(address), Appointment_date(app_date), date(date), type(type),
price(price), cost(cost), name(name), remark(remark) {};
Record_Maintenance* next=nullptr; // 指向链表的下一个节点
string Get_id() { return this->id; } // 返回id
string Get_address() { return this->address; } // 获取住户信息
string Get_Appointment_date() { return this->Appointment_date; } // 获取预约日期
string Get_date() { return this->date; } // 获取实际维修日期
string Get_type() { return this->type; } // 获取装修内容
string Get_price() { return this->price; } // 获取收费金额
string Get_cost() { return this->cost; } // 获取成本
string Get_name() { return this->name; } // 获取维修人
string Get_remark() { return this->remark; } // 获取备注
};
// Manage_Record类
class Manage_Record
{
private:
int size; // 记录链表大小
Record_Maintenance* ptr; //链表指针
public:
Manage_Record(){
head_node = new Record_Maintenance;
ptr = new Record_Maintenance;
head_node->next = ptr;
ptr->next = nullptr;
size = 2;
}; //构造函数
Record_Maintenance* head_node; //头指针
Record_Maintenance* Get_all() { return this->head_node; }// 返回链表所有记录
int Get_size() { return this->size; }// 返回链表所有记录
void Add_record(Record_Maintenance& a); //添加一个维修记录
bool Remove_record(string id); // 删除一个维修记录
bool Modify_record(Record_Maintenance& a); // 修改一个记录
Record_Maintenance* Query_appointment_records();// 查询预约到期记录
bool Statistics(string index, int& num, int& price, int& cost);//根据楼号统计维修记录数量及总维修收费金额、总维修材料成本金额。num是维修记录数量,price是总收费金额,cost是总成本
Record_Maintenance* soft_date(); // 按实际维修日期排序并返回排序后的指针
bool Cmp_Id(string id); // 查看该ID是否已经存在
vector<string> split(const string& s, const string& seperator); // 用于分割字符串的函数
~Manage_Record() //析构函数
{
while (1) {
ptr = head_node;
if (ptr == nullptr) break;
head_node = head_node->next;
delete ptr;
}
}
};
// 运用时,用head_node指针指向链表头部,在插入时采用头插法,使head_node一直指向链表的头部。
排序算法流程图:
删除记录流程图:
查询预约到期记录流程图:
统计流程图:
需要完整的代码实现可以私信联系我,原创不易,请勿白嫖。