目 录
一、成员分工1
二、需求分析2
三、总体设计3
四、详细设计4
五、系统测试30
六、总结32
七、参考文献33
一 成员分工
我们小组成员共有两名,分别是李书文、卢增凌、张晗,为了能按时圆满的完成这次C++课程设计,我们小组进行了详细的分工,以确保设计能按时完成。经过周密的考虑和详细的调查最终确定该美发店管理系统需要以下几个功能模块:
主菜单
人员管理子菜单
消费情况子菜单
账单管理子菜单
顾客管理模块
员工管理模块
消费管理功能模块
项目管理功能模块
经过小组成员的讨论,并根据个人的特长和具体爱好做如下具体分工:
李书文具体完成以下模块的设计与实现:
)顾客管理模块
)员工管理模块
张晗具体完成以下模块的设计与实现
)消费管理功能模块
)项目管理功能模块
卢增凌主要具体完成以下模块的设计与实现:
主菜单
人员管理子菜单
消费情况子菜单
二 需求分析
1.系统概述
该管理系统在Windows系统为用户提供美发店管理的基本功能,用户可以通过键盘选择选项,用来选择需要的操作,键盘录入数据,普通的操作有显示数据,添加数据,保存数据。该管理系统所有数据均保存在d盘目录下,用户可以自行查看,关闭管理系统数据不会丢失。
2.系统运行环境
硬件环境。本系统适用于那种酷睿i3以上计算机,内存容量为512M,应配备,键盘,鼠标,显示器等外部设备。
(2)软件、运行环境。本系统的设计采用C++ 编写。在Windows 7环境下测试通过
3.功能需求描述
这是一次尝试,一个比较成功的设计,其精彩的算法与漂亮的程序结构足以让人兴奋了。
根据顾客所要做的美发项目、服务的雇员、消费金额等将相应信息添加到顾客类中指定顾客和员工类中指定员工信息里。同时可以管理店里人员的基本信息,如顾客、经理、员工等。
三 总体设计
1.屏幕的组成
管理系统需要与简洁明了的界面,让人一看就明了,操作简单,不繁琐
2.主菜单的组成
主菜单中有4个选项:员工管理,顾客管理,美发项目,顾客消费情况
3.子菜单的功能
所有主菜单都有显示信息,增加信息,删除信息,保存信息,返回
四 详细设计
1.程序流程图
(1)数据流图
数据流图是对系统数据流向的一种描述,并从本质上让程序的使用者,大致了解系统的使用方法。本管理系统的大致流程图如下:
(2)系统功能模块
(3) 系统流程图
系统流程图是对系统的大致流程进行描述,本游戏的系统流程图如下:
2程序模块详细设计
根据上面所介绍的本系统的各个模块及其需要实现的功能,下面详细设计如下:
(1)主菜单的设计
程序界面程序会在每次用户选择完选项后,进行刷新,是用户一直可以观察到选项目录。另外,界面做美化处理,使程序界面更加友好,在使用上给用户一种清新怡然的感觉。其界面如图所
实现此功能代码如下:
void itemmenu()
{
int choose;
cout<<endl<<endl
<<" **************************"<<endl
<<" *** 美发店管理系统 ***"<<endl
<<" **************************"<<endl
<<" 作者:李书文 卢增凌 张晗"<<endl
<<" 文档将保存在d盘 "<<endl;
cout<<"******************员工管理功能菜单***************"<<endl//功能表
<<" -------------------------------------------------------"<<endl
<<" -- 1.管理顾客 2.管理员工 --"<<endl
<<" -- 3.查看美发项目 4.顾客消费清康 --"<<endl
<<" -- --"<<endl
<<" -- 选择选项后,按回车确认 --"<<endl
<<" -----------------------------------------"<<endl <<endl<<endl;
cin>>choose;
switch(choose)
{
case 1:customer();break;
case 2:worker();break;
case 3:items();break;
case 4:manage();break;
default:cout<<"error";itemmenu();
}
}
(2)顾客管理功能的设计
实现此功能代码如下:
class Customer
{
private:
int m ;
public :
typedef struct node
{
int Number;
char Name[10];
char Sex[4];
char PhoneNumber[15];
node *next;
}node,*linklist;
node *p1,*p2;
//*************************读入数据
node* ReadData()
{
m= 0;
node *head;
FILE *fp;
if((fp=fopen("d:\\Customer.txt","r"))==0)
{
cout<<"没有顾客,请输入信息"<<endl;
cout<<"请输入信息:(输入0 0 0 0结束),输入完毕请保存"<<endl
<<"会员号 姓名 性别 电话"<<endl
<<"**********************************************************\n";
p1=p2=new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
while(p1 -> Number != 0 )
{
m++;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
}
p2 -> next = NULL;
return head;
}
p1=p2=new node;
head = NULL;
while (!feof(fp))
{
m++;
fscanf(fp,"%d %s %s %s\n",&p1->Number,&p1->Name,&p1->Sex,&p1->PhoneNumber);
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
}
p2 -> next = NULL;
fclose(fp);
return head;
}
void creat(node *head)
{
cout<<"请输入信息:(输入会员号码为0时结束)输入完毕请保存"<<endl
<<"会员号 姓名 性别 电话"<<endl
<<"**********************************************************\n";
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
while(p1 -> Number != 0 )
{
m = m+1;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
}
p2 -> next = NULL;
}
int print(node*H)
{
cout<<"会员号 姓名 性别 电话"<<endl
<<"**********************************************************\n";
if(m == 0)
{cout<<"没有顾客"<<endl;return 0;}
struct node *p;
p = H ;
while(p!=NULL)
{
cout<<p->Number<<"\t"<<p->Name<<"\t"<<p->Sex<<"\t"<<p->PhoneNumber<<endl;
p=p->next;
}
system("PAUSE");
}
int Delete(node *Head)
{
int num;
cout<<"请输入要删除的顾客会员卡号:输入完毕请保存"<<endl;
cin>>num;
node *p3,*p4,*tem;
p3 = Head;
if(p3 ->Number == num)
{tem=Head; Head=tem ->next;return 0;}
p4 = p3;
p3 = p3->next;
while(p3!=NULL)
{
if(p3->Number == num)
{p4->next = p3 ->next;return 0;}
//
p4 = p3;
p3 = p3 ->next;
}
}
//************写入数据
int WriteData(node *head)
{
FILE *fp;
node *p;
if((fp=fopen("d:\\Customer.txt","w"))==NULL)
{
printf("打开文件出错\n");
return 0;
}
p=head;
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s\n",p->Number,p->Name,p->Sex,p->PhoneNumber);
p=p->next;
}
fprintf(fp,"\0");
rewind(fp);
fclose(fp);//关闭文件
}
};
void customer()
{
Customer m;
Customer::node*list;
list=m.ReadData();
customermenu(list,m);
}
void customermenu(Customer::node*list,Customer m)
{
int choose;
cout<<endl<<endl
<<" **************************"<<endl
<<" *** 美发店管理系统 ***"<<endl
<<" **************************"<<endl
<<" 作者:李书文 卢增凌 张晗"<<endl
<<" 文档将保存在d盘 "<<endl;
cout<<"**********************vip理功能菜单**********************"<<endl//功能表
<<" ----------------------------------------------------------"<<endl
<<" -- 1.显示所有VIP信息 2.增加VIP信息 --"<<endl
<<" -- 3.删除VIP信息 4.保存 --"<<endl
<<" -- 5.返回 --"<<endl
<<" -- 选择选项后,按回车确认 --"<<endl
<<" ----------------------------------------------------------"<<endl <<endl;
cin>>choose;
switch(choose)
{
case 1:m.print(list);break;
case 2:m.creat(list);break;
case 3:m.Delete(list);break;
case 4:m.WriteData(list);break;
case 5:itemmenu();break;
default:cout<<"error"<<endl;customermenu(list,m);break;
}
customermenu(list,m);
}
(3)员工管理功能的设计
class Worker
{
private:
int m ;
public :
typedef struct node
{
int Number;
char Name[10];
char Sex[4];
char PhoneNumber[11];
node *next;
}node,*linklist;
node *p1,*p2;
node* ReadData()
{
m= 0;
node *head;
FILE *fp;
if((fp=fopen("d:\\Worker.txt","r"))==0)
{
cout<<"没有员工,请输入信息"<<endl;
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 姓名 性别 电话 "<<endl
<<"**********************************************************\n";
p1=p2=new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
while(p1 -> Number != 0 )
{
m++;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
}
p2 -> next = NULL;
return head;
}
p1=p2=new node;
head = NULL;
while (!feof(fp))
{
m++;
fscanf(fp,"%d %s %s %s\n",&p1->Number,&p1->Name,&p1->Sex,&p1->PhoneNumber);
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
}
p2 -> next = NULL;
fclose(fp);
return head;
}
void creat(node *head)
{
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 姓名 性别 电话"<<endl
<<"**********************************************************\n";
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
while(p1 -> Number != 0 )
{
m = m+1;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name>>p1->Sex>>p1->PhoneNumber;
}
p2 -> next = NULL;
}
int print(node*H)
{
cout<<"编号 姓名 性别 电话"<<endl
<<"**********************************************************\n";
if(m == 0)
{cout<<"没有员工"<<endl;return 0;}
struct node *p;
p = H ;
while(p!=NULL)
{
cout<<p->Number<<"\t"<<p->Name<<"\t"<<p->Sex<<"\t"<<p->PhoneNumber<<endl;
p=p->next;
}
system("PAUSE");
}
int Delete(node *Head)
{
int num;
cout<<"请输入要删除的员工:输入完毕请保存"<<endl;
cin>>num;
node *p3,*p4,*tem;
p3 = Head;
if(p3 ->Number == num)
{tem=Head; Head=tem ->next;return 0;}
p4 = p3;
p3 = p3->next;
while(p3!=NULL)
{
if(p3->Number == num)
{p4->next = p3 ->next;return 0;}
//
p4 = p3;
p3 = p3 ->next;
}
}
int WriteData(node *head)
{
FILE *fp;
node *p;
if((fp=fopen("d:\\Worker.txt","w"))==NULL)
{
printf("打开文件出错\n");
return 0;
}
p=head;
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s\n",p->Number,p->Name,p->Sex,p->PhoneNumber);
p=p->next;
}
fprintf(fp,"\0");
rewind(fp);
fclose(fp);//关闭文件
}
};
void workermenu(Worker::node*list,Worker m)
{
int choose;
cout<<endl<<endl
<<" **************************"<<endl
<<" *** 美发店管理系统 ***"<<endl
<<" **************************"<<endl
<<" 作者:李书文 卢增凌 张晗 "<<endl
<<" 文档将保存在d盘 "<<endl;
cout<<"*********************员工管理功能菜单*******************"<<endl//功能表
<<" ----------------------------------------------------------"<<endl
<<" -- 1.显示所有员工信息 2.增加员工信息 --"<<endl
<<" -- 3.删除员工信息 4.保存 --"<<endl
<<" -- 5.返回 --"<<endl
<<" -- 选择选项后,按回车确认 --"<<endl
<<" -------------------------------------------------"<<endl<<endl <<endl;
cin>>choose;
switch(choose)
{
case 1:m.print(list);break;
case 2:m.creat(list);break;
case 3:m.Delete(list);break;
case 4:m.WriteData(list);break;
case 5:itemmenu();break;
default:cout<<"error"<<endl;workermenu(list,m);break;
}
workermenu(list,m);
}
void worker()
{
Worker m;
Worker::node*list2;
list2=m.ReadData();
workermenu(list2,m);
}
(4)管理消费信息功能模块
实现此功能相关代码如下:
class Manage
{
private:
int m;
public:
typedef struct node
{
int Number;
char Name1[10];
char Name2[10];
char Price[3];
node *next;
}node,*linklist;
node *p1,*p2;
node* ReadData()
{
m= 0;
node *head;
FILE *fp;
if((fp=fopen("d:\\Manage.txt","r"))==0)
{
cout<<"没有管理信息,请输入信息"<<endl;
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 顾客 员工 价格"<<endl
<<"**********************************************************\n";
p1=p2=new node;
cin>>p1->Number>>p1->Name1>>p1->Name2>>p1->Price;
while(p1 -> Number != 0 )
{
m++;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name1>>p1->Name2>>p1->Price;
}
p2 -> next = NULL;
return head;
}
p1=p2=new node;
head = NULL;
while (!feof(fp))
{
m++;
fscanf(fp,"%d %s %s %s\n",&p1->Number,&p1->Name1,&p1->Name2,&p1->Price);
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
}
p2 -> next = NULL;
fclose(fp);
return head;
}
void creat(node *head)
{
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 顾客 员工 价格"<<endl
<<"**********************************************************\n";
cin>>p1->Number>>p1->Name1>>p1->Name2>>p1->Price;
while(p1 -> Number != 0 )
{
m = m+1;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->Name1>>p1->Name2>>p1->Price;
}
p2 -> next = NULL;
}
int print(node*H)
{
cout<<"编号 顾客 员工 价格"<<endl
<<"**********************************************************\n";
if(m == 0)
{cout<<"没有账单"<<endl;return 0;}
struct node *p;
p = H ;
while(p!=NULL)
{
cout<<p->Number<<"\t"<<p->Name1<<"\t"<<p->Name2<<"\t"<<p->Price<<endl;
p=p->next;
}
system("PAUSE");
}
int Delete(node *Head)
{
int num;
cout<<"请输入要删除的编号,删除完毕请保存"<<endl;
cin>>num;
node *p3,*p4,*tem;
p3 = Head;
if(p3 ->Number == num)
{tem=Head; Head=tem ->next;return 0;}
p4 = p3;
p3 = p3->next;
while(p3!=NULL)
{
if(p3->Number == num)
{p4->next = p3 ->next;return 0;}
//
p4 = p3;
p3 = p3 ->next;
}
}
int WriteData(node *head)
{
FILE *fp;
node *p;
if((fp=fopen("d:\\Manage.txt","w"))==NULL)
{
printf("打开文件出错\n");
return 0;
}
p=head;
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s\n",p->Number,p->Name1,p->Name2,p->Price);
p=p->next;
}
fprintf(fp,"\0");
rewind(fp);
fclose(fp);//关闭文件
}
};
、、、、、、、、、、、、、、、、、、、、、、
void managemenu(Manage::node*list,Manage m)
{
int choose;
cout<<endl<<endl
<<" **************************"<<endl
<<" *** 美发店管理系统 ***"<<endl
<<" **************************"<<endl
<<" 作者:李书文 卢增凌 张晗 "<<endl
<<" 文档将保存在d盘 "<<end;
cout<<"***************************manage管理功能菜单**********************"<<endl//功能表
<<" ----------------------------------------------------------"<<endl
<<" -- 1.显示所有管理信息 2.增加信息 --"<<endl
<<" -- 3.删除信息 4.保存 --"<<endl
<<" -- 5.返回 --"<<endl
<<" -- 选择选项后,按回车确认 --"<<endl
<<" ------------------------------------------------"<<endl<<endl<<endl;
cin>>choose;
switch(choose)
{
case 1:m.print(list);break;
case 2:m.creat(list);break;
case 3:m.Delete(list);break;
case 4:m.WriteData(list);break;
case 5:itemmenu();break;
default:cout<<"error"<<endl;managemenu(list,m);break;
}
managemenu(list,m);
}
void manage()
{
Manage m;
Manage::node*list3;
list3=m.ReadData();
managemenu(list3,m);
}
(6)美发项目功能模块
此模块用来显示所有的美发项目,以及项目的价格。
实现此功能相关代码如下:
class Item
{
private:
int m;
public:
typedef struct node
{
int Number;
char item[10];
char Price[3];
node *next;
}node,*linklist;
node *p1,*p2;
node* ReadData()
{
m= 0;
node *head;
FILE *fp;
if((fp=fopen("d:\\Item.txt","r"))==0)
{
cout<<"没有美发信息,请输入信息"<<endl;
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 项目 价格"<<endl
<<"**********************************************************\n";
p1=p2=new node;
cin>>p1->Number>>p1->item>>p1->Price;
while(p1 -> Number != 0 )
{
m++;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->item>>p1->Price;
}
p2 -> next = NULL;
return head;
}
p1=p2=new node;
head = NULL;
while (!feof(fp))
{
m++;
fscanf(fp,"%d %s %s %s\n",&p1->Number,&p1->item,&p1->Price);
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
}
p2 -> next = NULL;
fclose(fp);
return head;
}
void creat(node *head)
{
cout<<"请输入信息:(美发编号为0时结束),输入完毕请保存"<<endl
<<"编号 项目 价格"<<endl
<<"**********************************************************\n";
cin>>p1->Number>>p1->item>>p1->Price;
while(p1 -> Number != 0 )
{
m = m+1;
if(m == 1)
head = p1;
else
p2 -> next = p1;
p2 = p1;
p1 = new node;
cin>>p1->Number>>p1->item>>p1->Price;
}
p2 -> next = NULL;
}
int print(node*H)
{
cout<<"编号 项目 价格"<<endl
<<"**********************************************************\n";
if(m == 0)
{cout<<"没有项目"<<endl;return 0;}
struct node *p;
p = H ;
while(p!=NULL)
{
cout<<p->Number<<"\t"<<p->item<<"\t"<<p->Price<<endl;
p=p->next;
}
system("PAUSE");
}
int Delete(node *Head)
{
int num;
cout<<"请输入要删除的美发项目,删除完毕请保存"<<endl;
cin>>num;
node *p3,*p4,*tem;
p3 = Head;
if(p3 ->Number == num)
{tem=Head; Head=tem ->next;return 0;}
p4 = p3;
p3 = p3->next;
while(p3!=NULL)
{
if(p3->Number == num)
{p4->next = p3 ->next;return 0;}
//
p4 = p3;
p3 = p3 ->next;
}
}
int WriteData(node *head)
{
FILE *fp;
node *p;
if((fp=fopen("d:\\Item.txt","w"))==NULL)
{
printf("打开文件出错\n");
return 0;
}
p=head;
while(p!=NULL)
{
fprintf(fp,"%d %s %s %s\n",p->Number,p->item,p->Price);
p=p->next;
}
fprintf(fp,"\0");
rewind(fp);
fclose(fp);//关闭文件
}
};
void itemsmenu(Item::node*list,Item m)
{
int choose;
cout<<endl<<endl
<<" **************************"<<endl
<<" *** 美发店管理系统 ***"<<endl
<<" **************************"<<endl
<<" 作者:李书文 卢增凌 张晗"<<endl
<<" 文档将保存在d盘 "<<endl;
cout<<"***********************美发管理功能菜单*****************************"<<endl//功能表
<<" ----------------------------------------------------------"<<endl
<<" -- 1.显示所有美发信息 2.增加信息 --"<<endl
<<" -- 3.删除信息 4.保存 --"<<endl
<<" -- 5.返回 --"<<endl
<<" -- 选择选项后,按回车确认 --"<<endl
<<" ------------------------------------------------" <<endl<<endl<<endl;
cin>>choose;
switch(choose)
{
case 1:m.print(list);break;
case 2:m.creat(list);break;
case 3:m.Delete(list);break;
case 4:m.WriteData(list);break;
case 5:itemmenu();break;
default:cout<<"error"<<endl;itemsmenu(list,m);break;
}
itemsmenu(list,m);
}
void items()
{
Item m;
Item::node*list3;
list3=m.ReadData();
itemsmenu(list3,m);
}
五 系统测试
运行程序,进入系统界面
子菜单
(1) 功能菜单
(2) 显示所有信息
输入信息
4.删除功能
5. 若进入相应功能没有数据
经过测试,该系统能够较好地满足用户的需要,能够比较顺利的进行管理。
六 总结
经过我们努力的设计和开发,程序基本开发完毕。在本次课程设计中困难遇到不少,深深体会到了做一个系统,首先进行需求分析的重要性,了解了一个系统的制作,从功能分析到功能模块分析、与其他系统的关系,这些都有待以后进一步改进。经过这次的课程设计,在设计中不断完善中,我们知道要做好一件事首先要理清思路,弄懂到底要解决什么问题及相应的步骤,采取的方法和开发工具,以及对一些可能的程序异常或是常见问题的容错检测和修正方案等。对于软件系统的开发,跟应该按照软件工程的相关方法流程等规定进行。写代码并不是最首要的。应根据问题的特色详细的进行需求分析,确定概念模型,然后确定逻辑模型,选定开发工具和开发方案,同时注意文档的修订等。做到每一步思路清晰,有章可依等。
本次课程设计过程,使我们对VC++课程设计有了更深刻的认识。大大提高了模型规划、系统设计和软件编程的能力,自身的各方面的素质也得到了提高。同时也培养了我们的团队协作精神。这次课程设计不仅充实了我们的计算机专业知识,扩大了知识面,增强分析问题和解决问题的能力,也提高自学的能力与软件开发能力,为今后的工作打下了坚实的基础。
七 参考文献
C++程序设计(第三版).电子工业出版社.2009年8月.
赵树升 赵韶平. Windows信息安全原理与实现.清华大学出版社.2004年9月.
赛奎春.Visual C++ 信息系统开发实例精选,2005
杨永国. Visual C++ 6.0实用教程. 清华大学出版社,2004
唐俊明. Visual C++ 6.0 编程实例与技巧. 高等教育出版,2002
潘锦平. 软件系统开发技术. 西安电子科技大学出版社, 1997
郑阿奇 丁有和 编著 Visual C++(第2版).机械工业出版社.2008年8月.
侯俊杰 编著 深入浅出MFC(第2版).华中科技大学出版社.2008年1月.
孙鑫 余安萍 编著 VC++ 深入浅出
详解.电子工业出版社.2006年6月.
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_66999594/article/details/139567542