资源描述
《C++程序设计》
题目: 超市管理系统
班级: 信 管
学号: 1251220117
姓名: 吴昊翀
指导老师:刘 欣
2014.01.01
目 录
一.设计目的与任务描述…………………………………
二.设计思想………………………………………………
三.系统功能与设计过程…………………………………
四.程序源代码……………………………………………
五.运行情况………………………………………………
六.心得体会………………………………………………
七.参考文献………………………………………………
超市管理系统
一. 设计目的与任务描述
设计目的:
1.熟悉C++语言系统开发的基本过程
2.巩固所学知识,培养和提高学生分析和解决实际问题的能力
任务描述:
需求分析:
中小型超市采购的商品一般都成千上万件。对这些商品进行有效的管理必不可少。每件商品一般都需要记录商品名、条形码、类别、价格、出厂日期等商品的基本信息。除此之外,还需要记录商品的其他相关信息,如生产厂家、供货处代码、厂家网址、厂家电话等。超市商品的相关信息需要存储到文件系统中,一般都需要提供对商品信息的添加、编辑、删除等操作。超市管理员每天都会记录购进的商品信息,核销过期的商品等。
为了巩固我们所学的C++语言程序设计知识,也为了满足课程设计的要求,我们在对几个中小型超市进行调研的基础上,设计和实现一个小型的超市商品管理系统,提供商品系统的添加、删除、编辑等功能。同类系统多数使用结构体数组来操作数据,本系统使用链表结构操作数据,提高了数据处理的效率。
设计一个小型超市管理系统,用链表来存储商品的基本信息(包括商品名称,代码产地,单价等)。完成以下基本功能:
A、添加商品信息:有商品代码、商品名称、产地、商品单价、库存量等。
B、修改,删除商品信息:输入商品名称,修改或删除相应商品信息。
C、查询,统计商品:输入商品名称,查询,统计相应商品信息。
二:设计思想
(1) 设计菜单来实现功能设计
1增加商品
2显示商品
3排序统计商品
4查找商品
5删除商品
6修改商品
7安全退出
(2) 设计class Supermarket商品类,实现对商品信息的描叙;设计 class Supermarketmassage类,实现对商品信息的增加,删除,修改,查询,统计等。以下是函数功能表:
函数
功能
void Display()
输出商品的信息
Supermarket()
构造函数
~Supermarket()
析构函数
void AddItem()
增加商品
void RemoveItem()
删除商品
void ModifyItem()
修改商品
void Find()
查询商品
int ListCount()
统计商品
void Save()
基础数据存盘
void Sort()
排序商品
Supermarketmassage()
构造函数
(3) 用类的成员函数对链表的数据进行操作,其功能如上表所列。
三.设计类及对象
本程序定义了两个类,定义如下:
1. class Supermarket
class Supermarket
{public:
char name[20];
char Num[20];
int Cnum; //进货总数
int Mnum; //销售数目
int Enum; //剩余库存数目
double Price; //单价
char Add[20]; //产地
double Sum; //销售额
Supermarket * Next;
void Input()
{
cout<<"\t\t请输入商品名:";cin>>name;
cout<<"\t\t请输入商品编号:"; cin>>Num;
cout<<"\t\t请输入商品进货总数:"; cin>>Cnum;
cout<<"\t\t请输入商品销售数目:"; cin>>Mnum;
cout<<"\t\t请输入商品剩余库存数目:"; cin>>Enum;
cout<<"\t\t请输入商品产地:"; cin>>Add;
cout<<"\t\t请输入商品单价:"; cin>>Price;
Sum=Mnum*Price;
}
void ReadFile(istream & in) //文件指针
{
in>>name>>Num>>Cnum>>Mnum>>Enum>>Add>>Price>>Sum;
}
void Show()
{
cout<<"商品名:"<<name<<endl
<<"商品编号:"<<Num<<endl
<<"进货总数:"<<Cnum<<endl
<<"销售数目:"<<Mnum<<endl
<<"剩余库存:"<<Enum<<endl
<<"产地:"<<Add<<endl
<<"单价:"<<Price<<endl
<<"销售额:"<<Sum<<endl
<<endl;
}
};
2 class Supermarketmassage;
class Supermarketmassage
{
public:
Supermarketmassage();
~Supermarketmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Supermarket *,Supermarket *);
void Sort();
//void Unpass();
int ListCount();
//void Average();
void Display()
{
for(Supermarket * p=Head->Next;p!=End;p=p->Next)
p->Show(); cout<<"输入任意字符!继续……";
getch();
}
void AddItem()
{
End->Input();
End->Next=new Supermarket;
End=End->Next;
cout<<"添加成功!"<<endl; cout<<"输入任意字符!继续……";
getch();
}
private: Supermarket * Head,* End;
ifstream in;
ofstream out;
Supermarket *FindItem(char * name)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Supermarket *FindNum(char * Num)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->Num,Num))return p;
return NULL;
}
Supermarket *FindAdd(char * Add)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成就返回空
if(!strcmp(p->Next->Add,Add))return p;
return NULL;
}
};
四.程序源代码
# include <iostream>
# include <fstream>
# include <string.h>
#include <conio.h>//用getch();
using namespace std;
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌Supermarket类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Supermarket
{public:
char name[20];
char Num[20];
int Cnum; //进货总数
int Mnum; //销售数目
int Enum; //剩余库存数目
double Price; //单价
char Add[20]; //产地
double Sum; //销售额
Supermarket * Next;
void Input()
{
cout<<"\t\t请输入商品名:";cin>>name;
cout<<"\t\t请输入商品编号:"; cin>>Num;
cout<<"\t\t请输入商品进货总数:"; cin>>Cnum;
cout<<"\t\t请输入商品销售数目:"; cin>>Mnum;
cout<<"\t\t请输入商品剩余库存数目:"; cin>>Enum;
cout<<"\t\t请输入商品产地:"; cin>>Add;
cout<<"\t\t请输入商品单价:"; cin>>Price;
Sum=Mnum*Price;
}
void ReadFile(istream & in) //文件指针
{
in>>name>>Num>>Cnum>>Mnum>>Enum>>Add>>Price>>Sum;
}
void Show()
{
cout<<"商品名:"<<name<<endl
<<"商品编号:"<<Num<<endl
<<"进货总数:"<<Cnum<<endl
<<"销售数目:"<<Mnum<<endl
<<"剩余库存:"<<Enum<<endl
<<"产地:"<<Add<<endl
<<"单价:"<<Price<<endl
<<"销售额:"<<Sum<<endl
<<endl;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌Supermarketmassage类﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
class Supermarketmassage
{
public:
Supermarketmassage();
~Supermarketmassage();
void ShowMenu();
void Find();
void Save();
void ModifyItem();
void RemoveItem();
void Swap(Supermarket *,Supermarket *);
void Sort();
//void Unpass();
int ListCount();
//void Average();
void Display()
{
for(Supermarket * p=Head->Next;p!=End;p=p->Next)
p->Show(); cout<<"输入任意字符!继续……";
getch();
}
void AddItem()
{
End->Input();
End->Next=new Supermarket;
End=End->Next;
cout<<"添加成功!"<<endl; cout<<"输入任意字符!继续……";
getch();
}
private: Supermarket * Head,* End;
ifstream in;
ofstream out;
Supermarket *FindItem(char * name)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->name,name))return p;
return NULL;
}
Supermarket *FindNum(char * Num)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!strcmp(p->Next->Num,Num))return p;
return NULL;
}
Supermarket *FindAdd(char * Add)
{
for(Supermarket * p=Head;p->Next!=End;p=p->Next)//匹配成功则返回上一个指针,不成就返回空
if(!strcmp(p->Next->Add,Add))return p;
return NULL;
}
};
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌构造函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Supermarketmassage::Supermarketmassage()
{
Head=new Supermarket;
Head->Next=new Supermarket;
End=Head->Next;
in.open("sort.txt");
if(!in)
cout<<"这是一个新系统,无商品信息。请先输入。"<<endl;
else
{
while(!in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')break;
End->Next=new Supermarket; End=End->Next;
}
in.close();
cout<<"\t\t读取商品信息成功!"<<endl;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌析构函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
Supermarketmassage::~Supermarketmassage()
{
Save();
for(Supermarket * temp;Head->Next!=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
delete temp;
}
delete Head,End;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌菜单﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::ShowMenu()
{
cout<<"〓〓〓〓〓〓〓〓〓〓 ☆ 超 市 商 品 管 理 系 统 ☆ 〓〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓★★★★★ ★★★★★★★★ ★★★★★〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 1.增加商品信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 2.显示商品信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 3.排序统计商品 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 4.查找商品信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 5.删除商品信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 6.修改商品信息 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"〓〓〓〓〓〓〓〓〓★ ☆ 0.安全退出系统 ☆ ★〓〓〓〓〓〓〓〓〓"<<endl;
cout<<"\n\t\t\n\t\t请选择:";
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌查找函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::Find()
{
char name[20] ,Num[10];
int x; Supermarket * p=NULL;
cout<<"\n\t\t*********************************\n";
cout<<"\t\t※ 1.按商品的名称查找\n\t\t※ 2.按商品编号查找";
cout<<"\n\t\t*********************************\n请选择:";
cin>>x;
switch(x)
{
case 1:
{
cout<<"\t\t请输入要查找的商品的名称:";
cin>>name;
if(p=FindItem(name))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该商品信息!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
case 2:
{
cout<<"\t\t请输入要查找的商品编号:";
cin>>Num;
if(p=FindNum(Num))
{
p->Next->Show();
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到该编号的商品!"<<'\n'<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}break;
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌修改信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::ModifyItem() //修改信息
{
char name[20];
Supermarket* p=NULL;
cout<<"\t\t请输入要修改的商品名:";
cin>>name;
if(p=FindItem(name))
{
cout<<"\t\t已找到商品的信息,请输入新的信息!"<<endl;
p->Next->Input();
cout<<"修改成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌删除信息﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::RemoveItem() // 删除信息
{
char name[20]; Supermarket * p=NULL,*temp=NULL;
cout<<"\t\t请输入要删除的商品名:"<<endl;cin>>name;
if(p=FindItem(name))
{
temp=p->Next;
p->Next=p->Next->Next;
delete temp;
cout<<"\t\t删除成功!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
else
{
cout<<"\t\t没有找到!"<<endl;
cout<<"输入任意字符!继续……";
getch();
}
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::Swap(Supermarket *p1, Supermarket *p2)//交换两个combox变量的数据域
{
Supermarket *temp=new Supermarket;
strcpy(temp->name,p1->name); //字符串name里面
strcpy(temp->Num,p1->Num);
strcpy(temp->Add,p1->Add);
temp->Cnum=p1->Cnum;
temp->Mnum=p1->Mnum;
temp->Enum=p1->Enum;
temp->Price=p1->Price;
temp->Sum=p1->Sum;
strcpy(p1->name,p2->name);
strcpy(p1->Num,p2->Num);
strcpy(p1->Add,p2->Add);
p1->Cnum=p2->Cnum;
p1->Mnum=p2->Mnum;
p1->Enum=p2->Enum;
p1->Price=p2->Price;
p1->Sum=p2->Sum;
strcpy(p2->name,temp->name);
strcpy(p2->Num,temp->Num);
strcpy(p2->Add,temp->Add);
p2->Cnum=temp->Cnum;
p2->Mnum=temp->Mnum;
p2->Enum=temp->Enum;
p2->Price=temp->Price;
p2->Sum=temp->Sum;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌统计﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int Supermarketmassage::ListCount()//统计当前链表的记录总数,返回一个整数
{
if(! Head)
return 0;
int n=0;
for(Supermarket * p=Head->Next;p!=End;p=p->Next)
{
n++;
}
return n;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌排序﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::Sort()//对当前链表进行排序
{
cout <<"Sorting..."<<endl;
Supermarket *p=NULL,*p1=NULL,*k=NULL;
int n=Supermarketmassage::ListCount();
if(n<2)
return;
for(p=Head->Next;p!=End;p=p->Next)
for(k=p->Next;k!=End;k=k->Next)
{
if(p->Add>k->Add)
{
Supermarketmassage::Swap(p,k);
}
}
cout <<"排序完成!"<<endl;
getch();
return;
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌保存函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
void Supermarketmassage::Save()
{
out.open("sort.txt");
for(Supermarket *p=Head->Next;p!=End;p=p->Next)
out<<"商品名称:"<<p->name<<"\t\t"
<<"商品编号:"<<p->Num<<"\t\t"
<<"进货总数:"<<p->Cnum<<"\t\t"
<<"销售数目:"<<p->Mnum<<"\t\t"
<<"剩余库存:"<<p->Enum<<"\t\t"
<<"商品产地:"<<p->Add<<"\t\t"
<<"商品单价:"<<p->Price<<"\t\t"
<<"销售额:"<<p->Sum<<'\n';
out.close();
}
//﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌主函数﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌
int main()
{
int x,i=0;
bool quit=false;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t◎★★★★【 欢迎进入超市商品管理系统 】★★★★◎"<<endl;
for(i=0;i<3;i++)
cout<<"\t\t◎\t\t\t\t\t\t ◎"<<endl;
cout<<"\t\t§§§§§§§§§§§§§§§§§§§§§§§§§§\n"<<endl;;
Supermarketmassage Grade;
cout<<"按任意键开始……";
getch();
while(!quit)
{
system("cls");
Grade.ShowMenu();
cin>>x;
switch(x)
{
case 0:quit=true;break;
case 1:Grade.AddItem();break;
case 2:Grade.Display();break;
case 3:Grade.Sort();break;
case 4:Grade.Find();break;
case 5:Grade.RemoveItem();break;
case 6:Grade.ModifyItem();break;
}
}
return 0;
}
五.运行情况
1. 程序界面
2. .程序主界面
3.增加
4.显示
5.排序统计
6.查找
7.删除
8.修改
9.退出
六.心得体会
在为期两周的课程设计中,通过完成本次任务,体会颇多,学到很多东西。利用设计这次超市管理系统的机会使我们熟练的掌握了这学期所学的有关visual c++中的一些主要知识点和应用点,如类的定义,类的实现,对象的定义,构造函数等等。能够学以致用,不至于自己所学知识由于没有经历可用过程,而放弃对它的兴趣。从而对Microsoft Visual C++ 6.0又有了更深入的认识!在这次课程设计中,我们还懂得了程序开发的一些比较重要的步骤,比如需求分析、总体设计、程序模块设计(含功能需求、程序代码设计与分析、运行结果)等。总之,通过这次课程设计,收获颇丰,相信会为以后的学习和工作带来很大的好处。最重要的还是激发了我对编程的兴趣和热情,让我从一个只懂理论变成了能做一些小型程序,让我们对编程更加热爱了。
整体地评价这次课程设计,我认为收获很大,正如上面所说的那样,通过课程设计,既复习了以前的旧知识,又学到了一些新的知识;设计增强了我们所用所学知识去解决具体问题的能力,进一步培养了我们独立思考问题和解决问题的能力。特别是学会了在Visual C++ 6.0集成开发环境中如何调试程序的方法。当然,老师的悉心指导和同学的帮助也是不可忽视的,在此感谢本次课程设计中所有辅导老师对我们的关心和帮助,诚心诚意感谢他们对我的鼓励与教导,是他们在我迷茫的时候给了我些许提示,激发了我的编程的灵感;最后,本次实践也锻炼了我们面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。
七.参考文献
《C程序设计》 谭浩强 编著 清华大学出版社
《C++面向对象程序设计》 谭浩强 编著 清华大学出版社
展开阅读全文