美发店管理系统设计
1、问题描述
定义顾客类,属性有:会员卡号、姓名、性别、电话等信息和相关的对属性做操作的行为。
定义员工类:属性有:编号、姓名、性别、电话、美发项目(理发、烫发、洗发)等信 息和相关的对属性做操作的行为。
定义美发类:属性有各种美发项目的收费标准和相关的对属性做操作的行为。
2、功能要求
(1)美发功能。根据顾客所要做的美发项目、服务的雇员、消费金额等将相应信息添 加到顾客类中指定顾客和员工类中指定员工信息里。
(2)简单管理功能。
添加功能:程序能够添加顾客信息和雇员信息,要求编号要唯一,如果添加了重复编号 的记录时,则提示数据添加重复并取消添加。
查询功能:可根据姓名、电话、卡号等信息对已添加的顾客信息进行查询,如果未找到, 给出相应的提示信息,如果找到,则显示相应的记录信息;还可以根据姓名、工种编号等信 息对雇员信息进行查询。
显示功能:可显示当前系统中所有顾客信息和雇员信息,每条信息占据一行。
编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。
删除功能:主要实现对已添加的顾客和雇员记录进行删除。如果当前系统中没有相应的 人员记录,则提示“记录为空!”并返回操作。
保存功能:可将当前系统中顾客和雇员记录存入文件中,存入方式任意。 读取功能:可将保存在文件中的信息读入到当前系统中,供用户进行使用。
(3)统计功能。能统计出顾客的消费总数、雇员的收入总数。都按从大到小排序。
3、问题的解决方案 根据系统功能要求,可以将问题解决分为以下步骤:
(1)应用系统分析,建立该系统的功能模块框图以及界面的组织和设计;
(2)分析系统中的各个实体及它们之间的关系;
(3)根据问题描述,设计系统的类层次;
(4)完成类层次中各个类的描述;
(5)完成类中各个成员函数的定义;
(6)完成系统的应用模块;
(7)功能调试;
(8)完成系统总结报告。
一、 总体设计
1.1 主菜单的组成
主菜单中有6个选项:管理顾客,管理员工,管理美发项目,美发功能,统计功能,退出系统
1.2 子菜单的功能
三个管理子菜单均有6个选项:显示信息,增加信息,删除信息,查询信息,保存信息,返回。
二、详细设计
2.1 程序流程图
(1)数据流图
数据流图是对系统数据流向的一种描述,并从本质上让程序的使用者,大致了解系统的使用方法。本管理系统的大致流程图如下:
(2)系统流程图
系统流程图是对系统的大致流程进行描述,本系统的系统流程图如下:
2.2 程序模块详细设计
2.2.1 主菜单
借助switch语句进行下一步的选择;
2.2.2 管理类子菜单
通过链表实现对数据的读取写入以及对数据的显示,增加,删除,查找,修改等功能;
以顾客管理子菜单界面为例:
2.2.3 美发功能
根据顾客所要做的美发项目编号、服务的雇员编号、消费金额等将相应信息添加到顾客类中指定顾客和员工类中指定员工信息里
2.2.4 统计功能
借助vector容器从文本文件中读取数据并进行排序,统计出顾客的消费总数、雇员的收入总数。都按从大到小排序。
三、设计核心技术实现
3.1 读取数据(以顾客类为例)
node* ReadData()//将文本数据以链表形式读取
{
m = 0;
node* head = NULL;
FILE* fp;
fp = fopen("Customer.txt", "r");
p1 = p2 = new node;
head = NULL;
while (!feof(fp))//没有到文件尾时
{
m++;
fscanf(fp, "%d %s %s %s %d\n", &p1->Id, &p1->Name, &p1->Sex, &p1->Phone,&p1->Money);//fscanf() 从流中按格式读取
if (m == 1)
head = p1;
else
p2->next = p1;
p2 = p1;
p1 = new node;
}
p2->next = NULL;
fclose(fp);
return head;
}
3.2 显示数据(以顾客类为例)
//输出函数将链表数据输出
int print(node* head)
{
cout << "卡号 姓名 性别 电话 累计消费" << endl
<< "**********************************************************\n";
if (m == 1)
{
cout << "没有顾客" << endl;
return 0;
}
node* p;
p = head->next;
while (p != NULL)
{
cout << p->Id << " " << p->Name << " " << p->Sex << " " << p->Phone << " " << p->Money<<endl;
p = p->next;
}
system("PAUSE");//暂停程序的执行,等待任意健继续执行
}
3.3 增加数据(以顾客类为例)
bool Findnode(node* head, int key)//查找是否存在Id为key的用户
{
node* ptr = head;
while (ptr != NULL && ptr->Id != key)
{
ptr = ptr->next;
}
if (ptr != NULL)
{
return 0;
}
else
{
return 1;
}
}
//增加函数在链表后增加数据
void creat(node* head)
{
cout << "请输入一个顾客信息:输入完毕请保存(注:卡号仅为数字)" << endl
<< "卡号 姓名 性别 电话" << endl
<< "**********************************************************\n";
cin >> p1->Id >> p1->Name >> p1->Sex >> p1->Phone;
while (cin.fail())
{
cin.clear();
cin.