《C++程序设计》课程实习课程设计说明书之超市商品信息管理系统.docx
《《C++程序设计》课程实习课程设计说明书之超市商品信息管理系统.docx》由会员分享,可在线阅读,更多相关《《C++程序设计》课程实习课程设计说明书之超市商品信息管理系统.docx(23页珍藏版)》请在冰点文库上搜索。
![《C++程序设计》课程实习课程设计说明书之超市商品信息管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-4/29/48f33978-4b98-49b4-9a66-4d647517137e/48f33978-4b98-49b4-9a66-4d647517137e1.gif)
《C++程序设计》课程实习课程设计说明书之超市商品信息管理系统
超市商品信息管理系统
《C++程序设计》课程设计说明书
指导教师:
XXX
设计成员:
刘X
王X
赵X
张X
学院:
XXXXXXXXXXXXXXX学院
班级:
XXXX
齐齐哈尔大学计算机中心
二零零八年九月
《C++程序设计》课程设计任务书
适用专业:
计算机科学与技术
设计题目:
超市商品信息管理系统
一、已知技术参数或设计前提
1、中小型超市一般会有上万件商品。
2、每件商品需要记录商品名、条形码、类别、价格、出厂日期等商品的基本信息。
3、除此之外,还需要记录商品的其他相关信息,如生产厂家、供货处代码、厂家网址、厂家电话等。
4、超市商品的相关信息需要存储到文件系统中,同时需要提供对信息的添加、编辑、删除等操作。
5、超市管理员每天会记录购进的商品信息,核销过期的商品等。
二、设计内容及要求
1、使用链表结构操作数据,提供创建、插入、删除节点等操作。
2、使用类和结构表示商品信息。
3、实现商品信息的添加、编辑、删除等功能。
4、实现以商品名进行查询和显示所有商品信息的功能。
5、实现使用文本文件保存所有商品信息的存储功能。
三、课程设计工作计划
1、确定题目,成立设计小组,做用户需求分析(9月1日-9月5日)
2、查阅资料,进行问题分析,制定方案,确定成员分工(9月5日-9月10日)
3、根据方案编写程序并进行调试(9月10日-9月25日)
4、撰写设计说明书,完成设计(9月25日-10月1日)
5、提交设计内容,答辩
四、相关教材及参考书目
1、C++语言基础教程.吕凤翥编著.清华大学出版社
指导教师签字:
系主任签字:
年月日
2、C++程序设计教程.钱能编著.清华大学出版社
一、需求分析
中小型超市采购的商品一般都成千上万件。
对这些商品进行有效的管理必不可少。
每件商品一般都需要记录商品名、条形码、类别、价格、出厂日期等商品的基本信息。
除此之外,还需要记录商品的其他相关信息,如生产厂家、供货处代码、厂家网址、厂家电话等。
超市商品的相关信息需要存储到文件系统中,一般都需要提供对商品信息的添加、编辑、删除等操作。
超市管理员每天都会记录购进的商品信息,核销过期的商品等。
为了巩固我们所学的C++语言程序设计知识,也为了满足课程设计的要求,我们在对几个中小型超市进行调研的基础上,设计和实现一个小型的超市商品管理系统,提供商品系统的添加、删除、编辑等功能。
同类系统多数使用结构体数组来操作数据,本系统使用链表结构操作数据,提高了数据处理的效率。
二、系统总体设计
系统应该具有管理系统的基本功能,即对商品信息能够进行添加、删除、编辑等基本管理。
除此之外,还要考虑安全问题,即对系统设置密码,进行访问控制。
系统设置了相应的链表结果表示操作商品信息。
为了便于系统调试,系统将商品信息存储于文本文件中。
系统体系结构图2-1所示。
图2-1系统体系结构
根据需求分析,系统应该包含添加商品信息、删除商品信息、显示商品信息、查询商品信息、编辑商品信息、保存数据等6个主要功能模块。
系统总体框架如图2-2所示。
图2-2系统功能框图
三、模块功能实现
根据系统功能分析,设计具体的类以实现系统功能。
系统主要使用2个主要的类来实现系统功能:
一个为Manage类,负责实现系统界面的控制机制;另一个为list类,即链表类,实现系统的数据处理功能。
系统的主要类之间的关系如图3-1所示。
图3-1系统类之间的关系
1、list链表类的设计与实现
根据总体设计内容,本系统主要使用链表结构来操作数据,所以链表类的设计与实现为系统实现的核心。
链表类中的主要数据成员head为nodetype节点类型的数据。
nodetype的具体结构为:
typedefstructlinknode
{
charaddress[100];//厂家地址
charbirthday[100];//出厂日期
structscokksc;//供货处代号
structgoodsgo;//单个商品信息
structtelephonete;//购货方式
boolflag;
structlinknode*next;//指向节点的指针
}nodetype;
此节点类型类一个自定义的结构体,其中有7个数据域,两个整型数组分别代表厂家地址和出厂日期;还有三个数据域,是嵌入的结构体类型,分别代表供货处代号、单个商品信息、购货方式,其商品信息结构体的具体结构如下:
structgoods
{
charname[100];//商品名
chartype[100];//类别
charauthentication[100];//商品认证
charcompany[100];//公司名
charprice[50];//价格
};……
其他结构的详细信息请参考附录A:
程序源代码。
此节点类型的最后一个域是重要的指针域,用于存放指向下一个节点的指针。
根据上面设计的链表结构和系统功能设计的内容,可以进一步规划链表类的主要功能如下:
(1)添加节点
将新添加的商品信息填充到新创建的节点中,然后插入到链表里。
类的成员函数原型如下:
nodetype*List:
:
insertNode(inti);
其中,整型参数i为节点序号;函数返回值为链表的节点指针。
在此函数中,首先,定义h,p,s三个指向节点的指针,h为指向链表头的指针,p为查找节点时返回的指针,s为指向新生成的节点的指针;然后,使用malloc函数创建一个空的节点,即在堆空间创建一个nodetype类型的变量,将s指针指向此变量;判断是否是此链表的第一个节点,如果是,则s所指节点为链表的头节点,并将h指针指向链表头节点;如果不是,则需要查找节点的插入位置,根据函数参数i调用intFindNode函数查找插入位置,并将返回的位置指针复制给p;如果p所指向的值存在,则将创建的s节点插入,否则,显示i值错误。
一般插入节点的方法是使用下面两条语句:
s->next=p->next;
//s节点的next指针指向p节点的下一个节点
p->next=s;
//p的next指针指向s节点
函数最后,将h指向链表的头节点,并返回新创建的节点s的地址。
函数的程序流程图如图3-1所示。
图3-1插入节点流程图
(2)显示节点信息
在系统中,需要显示所有的商品名信息、一件商品的所有信息等,这些都需要显示节点保存的相应信息。
显示所有商品名,就是显示节点中的商品域中的商品名信息,它显示的是节点的一部分信息。
显示所有的商品名的成员函数原型如下:
voidList:
:
dispNameAll();
其函数功能是显示所有商品名,无参数,无返回值。
其函数体的主要源代码如下所示:
voidList:
:
dispNameAll()
{
nodetype*p=head;
cout<<"现有的商品:
"<if(p==NULL)
cout<<"没有任何商品数据"<while(p!
=NULL)
{
cout<<"商品名:
"<go.name<p=p->next;
}
}
在函数体中主要利用while循环遍历访问整个链表,p=p->next;语句主要功能是指向节点的指针不断下移,以访问所有的节点。
显示一件商品的所有信息使用的成员函数原型为:
voidList:
:
dispOneNode(nodetype*p);
函数的主要功能是显示一件商品的所有信息,参数p为指向节点的指针,无返回值。
函数通过参数接收指向节点的指针p,通过p访问其所指向的节点,并显示节点的所有信息(包括商品的基本信息,如商品名、价格等)。
函数体的主要代码如下:
voidList:
:
dispOneNode(nodetype*p)
{
if(p!
=NULL)
{
dispGoods(p);//显示一件商品的基本信息
dispScokk(p);//显示一件商品的供货站代码
dispTelephone(p);//显示一件商品的订货方式
}
}
(3)修改节点信息
由于节点保存的信息较多,使用了嵌套的结构体保存数据,所以修改时,也需要按照相应的结构进行修改。
可以修改商品的基本信息、商品的供货站代码和商品的订货方式。
使用的成员函数原型如下:
voideditGoods(nodetype*p);//编辑单个商品说明信息
voideditScokk(nodetype*p);//编辑单个商品供货方式
voideditTelephone(nodetype*p);//编辑单个商品订货方式
(4)查找定位节点
在进行节点的插入和编辑时,往往都需要按照指定的条件进行信息节点的查找。
可以通过商品名或节点序号进行节点的查找定位。
成员函数的原型如下所示:
nodetype*intFindNode(inti);//通过查找序号返回节点的指针
nodetype*strFindNode(charc[]);//通过查找商品名返回节点的指针
intfindByName(charc[]);//通过查找商品名返回节点的序号
其中,商品名查找节点,并返回节点指针使用较多,函数的主体代码如下所示。
nodetype*List:
:
strFindNode(charc[])
{
nodetype*p=head;
intj=1;
strcat(c,"\n");//从外部读入的字符串末尾都带了一个换行符
//查找第i个节点并由p指向该节点
while(p!
=NULL&&!
(checkString(c,p->go.name)))
{
j++;
p=p->next;
}
returnp;
}
此函数主要通过p指针的移动,并比较p所指向的节点中的商品名与给定的查找商品名是否一致,如果相同则找到,否则,继续移动p指针指向下一个节点继续比较,直到p指向链表尾(p为NULL)。
(5)删除节点
删除节点操作是一个常用的操作。
一般需要先找到要删除的节点,然后,将其从链表中删除。
由于节点是使用malloc函数生成的动态变量,所以,应该使用delete系统函数将其删除。
删除后还需要保存链表的连接性,即删除链表中的指定节点时,需要如图3-2所示的一些后继的处理步骤。
图3-2节点删除的处理步骤
删除节点的成员函数如下所示:
voidList:
:
deleteNode(inti)
{
nodetype*h=head,*p=head,*s;
intj=1;
if(i==1)//删除第一个节点
{
h=h->next;
delete(p);
}
else
{
p=intFindNode(i-1);//查找第i-1个节点,p指向这个节点
if(p!
=NULL&&p->next!
=NULL)
{
s=p->next;//s指向要删除的节点
p->next=s->next;
delete(s);
}
else
cout<<"输入的i值不正确"<}
head=h;
}
(6)创建链表与其他成员函数功能实现
略,详细内容请参看《课程设计提交的源代码》
2、Manage类的设计与实现
Manage类的主要功能是负责显示系统的主菜单和进行界面控制。
其主要类结构如下:
classManage
{
ListL1;//存储结构
public:
voidwelcome();//登录页面,密码控制
voidLoop();//主循环
voiddisplay();//显示菜单
};
其中,L1为List链表类的对象,是执行系统功能的核心部分。
voidManage:
:
Loop()成员函数主要负责进行界面控制。
Loop函数首先,进行系统初始化,包括创建List类的实例对象L1;定义字符数组ch接收用户输入的数字,并执行相应功能;定义两个指向节点的指针*p,*head,其中p为指向普通节点的指针,head为指向链表头节点的指针;定义整型变量i存放节点的序号;从外部文件读入数据创建链表,p指向链表的头节;并让head指向头节点;显示系统主菜单等。
这些步骤使系统得到初始化。
Loop函数体的程序流程图如图3-3所示。
图3-3Loop函数程序流程图
3、主函数的实现
在完成了上面两个主要类的基础上完成主函数。
在主函数中创建Manage类的一个实例Goods,并调用Manage类中的Welcome成员函数,显示程序界面,并进行访问控制。
main函数的主要代码如下:
voidmain()
{
ManageGoods;
Goods.welcome();//显示程序欢迎界面
}
四、系统的软硬件环境
1、软件环境
系统可以运行在WindowsXP/200X等操作系统上。
系统编辑编译环境为VisualC++6.0。
2.硬件环境
本系统在计算中心实验室的计算机上编辑测试。
测试用计算机的主要配置是CPU2.4GHz,256M内存,80G硬盘。
本系统可以运行在使用Windows操作系统的品牌机或兼容机上,具有80486,50MHz以上的处理器都可以运行本管理系统。
五、系统的使用说明
系统在完成后进行了详细的软件功能测试。
本系统可以完成对超市商品信息的添加、删除、显示、编辑等功能。
软件的使用步骤如下:
1、在课程设计的光盘中的“超市商品管理系统源代码”文件夹中找到“Debug”文件夹,在里面运行GoodsManage.exe可执行文件。
系统会弹出如图所示的系统程序登陆界面,输入正确的密码(默认密码为“admin”)后可以进入到程序主界面。
图5-1系统登陆界面
2、在主程序界面中,用户可以根据界面中的功能提示,输入相应的0-7的数字符号,执行相应的功能。
主程序界面如图5-2所示。
图5-2系统主功能菜单界面
3、在主菜单程序界面中用户如果输入1,并按回车键,则会进入到添加商品信息的程序界面中,如图5-3所示。
在这个界面中,会提示输入商品信息,如输入商品名、商品类别、出厂日期、商品认证、公司名、价格、厂址、条形码、购货网址、厂家电话等相关信息。
录入时,以回车为每一项的结束符。
图5-3添加商品信息界面
4、如果用户在主程序界面中,输入2则会进入到删除商品信息界面里。
在这个界面中,会显示已经存储在系统中的相关产品信息,主要是显示商品的名称。
用户可以查看后,确定自己要删除的信息,并输入要删除的商品的名称,以删除相应的商品。
程序界面如图5-4所示。
图5-4删除商品程序界面
5、如果用户在主程序界面中输入4、可以查询商品信息,如图5-5所示。
图5-5查询商品信息程序界面
六、结束语
超市商品管理系统使用了链表类结构和面向对象的编成方法,有效地提高了商品信息的管理效率和程序代码的复用率以及程序的可维护性与扩展性。
本小组成员通过一个多月的努力,从进入超市进行调研到系统设计并编写程序源代码以及系统编译测试,每个小组成员分工协作、共同努力圆满地完成了此次课程设计任务。
系统的总体设计和主函数部分以及程序的汇总调试由组长刘X完成;list链表类的插入、删除和显示功能的设计与实现由小组成员王X完成;list类的其余部分如节点的查找和创建的设计与实现由小组成员赵X完成;Manage类的设计与实现由小组成员张X完成。
通过本次课程设计,小组成员较好地掌握了链表的使用方法和面向对象程序设计的基本技能,为将来的深入学习打下了坚实的基础。
由于时间关系本系统还不是很完善,有些地方还需要改进。
比如数据存储使用的是文本文件。
这个系统也仅仅是一个利用链表类操作的基本系统,也希望以后能根据实际情况进一步的完善其功能,使其不但能满足课程设计的要求,还能有一定的实用价值。
在整个的课程设计过程中,小组得到了其他各组同学和指导教师的帮助,这些帮助使我们克服了课程设计过程中的遇到的一些困难。
在此表示衷心感谢。
七、参考文献
[1]C++语言基础教程.吕凤翥编著.清华大学出版社
[2]C++程序设计教程.钱能编著.清华大学出版社
[3]
[4]
[5]
[6]http:
//www.china-
[7]
[8]
[9]
附录A:
程序源代码
文件名:
main.cpp
#include"Manage.h"
/*****************************************************************/
/*模块功能:
主函数程序入口*/
/*全局变量:
无*/
/*创建人:
XXX*/
/*创建日期:
XXXX年XX月XX日*/
/*****************************************************************/
voidmain()
{
ManageGoods;
Goods.welcome();//显示程序欢迎界面
}
文件名:
Manage.h
#include
#include//strcpy():
字符串复制
#include//system("cls")
#include//文件操作(写文件)
#include"list.h"//创建类List的对象和节点指针
/*****************************************************************/
/*类功能:
程序界面显示、密码控制、菜单显示、循环控制*/
/*全局变量:
无*/
/*创建人:
XXX*/
/*创建日期:
XXXX年XX月XX日*/
/*****************************************************************/
classManage
{
ListL1;//存储结构
public:
voidwelcome();//登录页面
voidLoop();//主循环
voiddisplay();//显示菜单
};
文件名:
list.h
#include
#include
#include//字符串处理
#include//文件操作(读文件)
#include//system("cls")
/*****************************************************************/
/*类功能:
操作链表,包括添加、删除、编辑节点等操作*/
/*全局变量:
无*/
/*创建人:
XXX*/
/*创建日期:
XXXX年XX月XX日*/
/*****************************************************************/
//厂家地址
structaddress
{
charcountry[100];//国家
charcity[100];//城市
charstreet[100];//街道
};
//购货方式
structtelephone
{
charWebSite[50];//厂家网址
charFactoryTele[30];//厂家电话
charDeliverTele[30];//供货处电话
};
//商品信息
structgoods
{
charname[100];//商品名
chartype[100];//类别
charauthentication[100];//商品认证
charcompany[100];//公司名
charprice[50];//价格
};
//供货处代号
structscokk
{
charnum[50];//条形码
charjialefu[50];//家乐福
charwoerma[50];//沃尔玛
charsuguo[50];//苏果
charbailian[50];//白莲
};
//定义节点的类型
typedefstructlinknode
{
charaddress[100];//地址
charbirthday[100];//出厂日期
structscokksc;//供货处代号
structgoodsgo;//单个商品信息
structtelephonete;//购货方式
boolflag;
structlinknode*next;//指向节点的指针
}nodetype;
//链表类
classList
{
nodetype*head;
public:
List();
List:
:
~List();
linknode*createList(intn);//创建链表
intListLen();//返回链表长度
nodetype*intFindNode(inti);//通过查找序号返回节点的指针
nodetype*strFindNode(charc[]);//通过查找商品名返回节点的指针
intfindByName(charc[]);//通过查找商品名返回节点的序号
nodetype*insertNode(inti);//插入节点
voiddeleteNode(inti);//删除节点,删除第i个节点
nodetype*loadList();//初始化:
从外部读入数据
voidreadfromFile(F