c++校园超市商品信息管理系统课程设计说明书含源代码.docx
《c++校园超市商品信息管理系统课程设计说明书含源代码.docx》由会员分享,可在线阅读,更多相关《c++校园超市商品信息管理系统课程设计说明书含源代码.docx(39页珍藏版)》请在冰豆网上搜索。
![c++校园超市商品信息管理系统课程设计说明书含源代码.docx](https://file1.bdocx.com/fileroot1/2023-2/2/a8e9df6a-40a7-491a-80b6-de0542f2f9a2/a8e9df6a-40a7-491a-80b6-de0542f2f9a21.gif)
c++校园超市商品信息管理系统课程设计说明书含源代码
计算机科学与技术教研室
课程设计说明书
(2015-2016学年第二学期)
课程名称
程序设计基础课程设计
设计题目
校园超市商品信息管理系统
学号
**********
姓名
***
小组成员
***,**,**
起止时间:
****年**月**日至****年**月**日
课程设计
评语
平时表现比较积极,纪律良好,没有缺勤的情况,在演示过程中,表达流畅,做出来的作品也有很强的使用价值,设计报告写的也比较全面,比较细致,深入人心,老师在提问的过程中,回答问题也头头是道,没有磕磕绊绊的情况发生,对于问题的解答也比较透彻。
平时成绩
报告成绩
演示与答辩成绩
成绩总评
指导教师
(签字)
年月日
注:
成绩均用百分制。
总成绩=平时成绩*20%+报告成绩*40%+演示与答辩成绩*40%
设计题目:
校园超市商品信息管理系统
1.课程设计目的
本系统的目的在于,可以很好的管理超市商品与销售员之间的关系,使得系统的功能和用途更加的全面和实用,这样两个和在一起可以避免用户使用起来的麻烦,使得可以更好的方便于使用者。
本课程设计的目的就是要通过一次集中的强化训练,能及时巩固已学的知识,补充未学的但又必要的内容。
进行课程设计目的在于加深对程序设计基础理论和基本知识的理解,促进理论与实践的结合,进一步提高程序设计能力。
具体目的如下:
(1)更深入地理解和掌握该课程中的有关基本概念,程序设计思想和方法。
(2)培养综合运用所学知识独立完成课程设计的能力。
(3)培养勇于探索、严谨推理、实事求是、有错必改、用实践来检验理论,全方位考虑问题等科学技术人员应具备的素质。
(4)可以运用自己所学的知识在系统的实现。
2、课程设计正文
2.1系统分析
2.1.1可行性分析
从经济、技术、法律、操作四方面的分析可以看出,本系统的开发时机成熟。
从多种角度考虑,都是可行的,采用本系统,能够使整个超市内部所有的信息工作简化、提高工作效益。
由于采用统一的数据信息,使相关资料能够查询所需要的数据、资料及其它信息,使信息快速高效运行。
2.1.2需求分析
该设计是通过计算机设计程序软件来实现校园超市商品信息管理系统的基本业务,商品共包含以下信息项:
商品编号、商品名称、商品进货数目、商品销售数目、商品剩余库存数目、商品单价、商品产地、商品销售额等;主要功能包括:
创建商品信息文件,增加、删除、修改商品信息,销售商品、通过关键字、厂家名称或者编号来查找商品,按照不同的条件对商品信息进行统计工作。
在该系统中利用通过类的方式来定义对象以及在类中定义各项的成员函数和数据成员来实现对商品信息的管理。
中小型超市采购的商品一般都成千上万件。
对这些商品进行有效的管理必不可少。
每件商品一般都需要记录商品名、商品编号、产地、价格、出厂日期等商品的基本信息。
除此之外,还需要记录商品的其他相关信息,如生产厂家、进货数量、销售数量、剩余库存数量等。
超市商品的相关信息需要存储到磁盘文件中,一般都需要提供对商品信息的添加、编辑、删除、查找等操作。
超市管理员每天都会记录购进的商品信息,核销过期的商品等。
为了巩固我们所学的C++语言程序设计知识,也为了满足课程设计的要求,我们设计和实现一个小型的超市商品管理系统,提供商品系统的添加、删除、编辑、查找等功能。
同类系统多数使用结构体数组来操作数据,本系统使用类定义对象,以及成员函数和数据成员来完成对增删查改功能的实现,利用链表结构操作数据,提高了数据处理的效率。
2.1.3功能分析
(1)分别定义两个类为Supermarket和Supermarketmassage来实现对价格信息、名称信息、数量信息的存储、更正、删除与查询以及其他功能的实现。
(2)初始化功能
当系统第一次启动时,系统中没有关于商品的信息,所以要根据商品的类型输入关于商品的一系列信息,把这些信息放在磁盘文件中。
例如:
编号、名称、进货总数、销售数目、剩余库存数目、单价、产地、销售额以及生产日期和保质期。
(3)查询功能
此时每件商品所包含的信息已经全部在磁盘文件中,所以就要通过一系列的函数来方便使用者查询有关商品的信息,以便更及时地发现商品在销售过程中存在的问题并及时改正或者更新。
输入需要查询的商品名称或者编号,如果搜索到的信息与使用者输入进去的信息相同,则返回此件商品所在的位置,输出商品的各项信息。
反之,如果搜索不到此件商品,则输出无此商品的信息。
(4)修改功能
先在磁盘文件中找出是否有该商品,然后提示使用者要进行修改操作的编号,将修改过的商品放到原来那个商品所在的位置,将结果保存到原文件中,就提示使用者按任意字符继续。
(5)销售功能
提示使用者输入要进行销售的商品的编号或者名称,通过在函数中搜索,如果系统中有该商品的信息,则提示使用者输入要销售的数量,通过if语句,检查一下输入的数量是否大于库存数量,如果大于库存数量,则提示使用者要重新输入;如果小于库存数量,就将该商品所对应的库存数量减去销售数量,再把剩下的商品数量存入到磁盘文件中,完成了销售功能。
2.2系统设计
2.2.1概要设计
系统功能结构图如图1所示。
图1系统功能结构图
2.2.2详细设计
(1)增加函数的设计
该函数实现了对超市商品的增加功能,输入商品的信息,此时磁盘文件中就已经存入了这件商品的信息。
增加函数流程图如图2所示。
图2增加函数流程图
(2)删除函数的设计
该函数实现了对超市商品的删除功能,输入商品的生产日期和截止日期,判断是否过期,如果过期就输入这件商品的编号或名称,最后就删除成功。
删除函数流程图如图3所示。
图3删除函数流程图
(3)查找函数的设计
该函数实现了对超市商品的查找功能,输入想要查找到商品的编号或名称,如果找到了就显示出来,否则就显示找不到该商品。
查找函数流程图如图4所示。
图4查找函数流程图
(4)修改函数的设计
该函数实现了对超市商品信息的修改功能,输入想要修改的商品信息,如果在系统中找到了该商品,则输入该商品修改过的信息,再存入到磁盘文件中去,修改成功。
修改函数流程图如图5所示。
图5修改函数流程图
(5)销售函数的设计
该函数实现了对超市商品的销售功能,输入要销售的商品的编号或名称,如果系统中存在该商品信息,则输入要销售的数量,如果小于库存量,则输出销售成功,并将销售过后的剩余库存量存入到磁盘文件中去。
销售函数流程图如图6所示。
图6销售功能流程图
2.3系统实现
(1)进入系统
进入系统图如图7、图8所示。
图7进入系统界面图
图8系统菜单图
(2)增加界面
增加界面图如图9所示。
图9增加界面图
(3)查找界面
查找界面图如图10、图11所示。
图10按名称查找商品界面图
图11按编号查找商品界面图
(4)销售界面
销售界面图如图12所示。
图12销售界面图
(5)退出系统
退出系统界面图如图13所示。
图13退出系统界面图
2.4系统测试与维护
2.4.1系统测试
(1)voidAddItem()/*添加商品信息*/
例:
input:
(商品名称):
aoutput:
商品名称:
a
input:
(商品编号):
1001output:
商品编号:
1001
input:
(进货总数):
10output:
进货总数:
10
input:
(销售数目):
20output:
销售数目:
20
input:
(剩余库存):
10output:
剩余库存:
10
input:
(产地):
ssoutput:
产地:
ss
input:
(单价):
10output:
单价:
10
(2)voidSupermarketmassage:
:
RemoveItem()/*删除商品信息*/
例:
input:
(删除商品名称):
aoutput:
删除成功
(3)voidSupermarketmassage:
:
ModifyItem()/*修改商品信息*/
例:
input:
(商品名称):
aoutput:
商品名称:
a
input:
(商品编号):
1001output:
商品编号:
1001
input:
(进货总数):
10output:
进货总数:
10
input:
(销售数目):
20output:
销售数目:
20
input:
(剩余库存):
50output:
剩余库存:
50
input:
(产地):
ssoutput:
产地:
ss
input:
(单价):
10output:
单价:
10
(4)voidSupermarketmassage:
:
Find()/*查询商品信息*/
例:
input:
(商品名称):
aoutput:
商品名称:
查找商品名称
input:
(商品编号):
1001output:
输出商品信息
系统测试图如图14、15所示。
图14系统测试图输入界面图
图15系统测试退出界面图
2.4.2系统维护
经过多次的对系统的测试,能够保证系统准确无误的运行,用户可以放心使用。
3、课程设计总结
在为期十天的课程设计中,通过完成这次老师布置的任务,体会颇多,收获也很多。
利用设计这次校园超市商品信息管理系统的机会使我比较熟练的掌握了这学期所学习有关c、c++中的一些主要的知识点和应用点。
例如:
类和对象的定义、类内数据成员及成员函数的声明和定义、类的实现、构造函数与析构函数的定义等等。
不只是死板的只知道书本上的知识,能够学以致用。
在本次的课程设计中,我不仅仅只学到了利用c++语言来编写程序,还学到了程序开发的一些比较重要的步骤,比如需求分析、总体设计、程序模块设计(包含功能需求、程序代码设计与分析、运行结果等)、对系统的检测和维护等一些中重要的东西。
为整个课程设计中的程序设计模块提供主要思路以及实现功能的主要方法,这个工作说起来简单,却不太容易实现,整体的思路对于能否完成一个比较漂亮的程序是至关重要的,如果最一开始的整体思路都没有明确,或者说我们定下来的主题很难用我们学过的知识去实现,这将会导致以后的一系列工作都无法开展。
所以说,有一个明确的主题是重中之重。
由于我们的人力和所学的知识有限,导致我们此次工作中存在着许多的不足和缺点。
比如,这个系统只能实现简单的增、删、查、改,还有好多的功能不能去实现,比如说打折活动、员工与老板之间的联系、顾客与售货员之间的联系都没有在这个系统中体现出来,这个系统只能体现出来商品与顾客之间的联系,比较单一,纯粹的就是一个单链结构,没有扩散出来。
再比如,这个系统几乎没有亮点可寻,只是普普通通的,规规矩矩的按照学过的或者是从别的书籍中得到的知识来编写的程序,没有让人耳目一新的新颖的地方,创新的东西太少。
其实,我在本次的课程设计中也学到了不少东西,同时也运用到了我们的系统中。
例如:
(1)对链表的灵活运用。
链表,是存储数据的一个很方便的工具,简而言之,就是基于链式储存结构下的线性表。
包括单向链表、双向链表以及循环链表。
链表的基本操作包括创建链表、在链表中插入结点、在链表中删除结点、遍历链表中的内容以及销毁链表等。
相对于顺序表来说,它方便进行插入、删除操作,但是,线性表的内容遍历与输出需要从头指针开始。
在这个系统中我们用到了链表的遍历,主要是利用它来查询我们要找的商品信息。
(2)#include头文件的应用。
此头文件包含了本程序中的按任意键继续的函数,是库函数。
conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作,比如getch()函数等等。
(3)voidReadFile(istream&in)函数。
它的输入参数是标准输入流,没有输出。
函数完成的作用是,依次将标准输入流中的数据读入到变量中。
通过此次课程设计,学到的也不只有这些新知识,对于编程的思想和方法我也颇有感触。
如果想要编写出来逻辑清晰,可读性比较强的程序,应该在编程之前先有一个对于程序设计的整体思路,并把它记录下来,这样就可以避免了直接编程序的手忙脚乱。
还有就是编程的思想,存储数据最好的就是用链表或者是对象数组,在编写稍微复杂一点的程序时,尽量用类定义对象以及数据成员、成员函数等的方式来实现。
还有就是,我的能力也相应的提高了一些,比如就是比较浅显的掌握和运用链表结构,能够比以前更加熟练的利用类以及成员函数来实现功能。
既复习了以前的旧知识,又学到了一些新的知识;设计增强了我所用所学知识去解决具体问题的能力,进一步培养了我独立思考问题和解决问题的能力。
特别是学会了在VisualC++6.0集成开发环境中如何调试程序的方法。
本次实践也锻炼了我面对难题,自己思索,自己探索,自己查资料发现问题、解决问题的独断能力。
总的来说,收获还是比较多的。
4、参考文献
[1]谭浩强.c++程序设计(第二版)[M],北京:
清华大学出版社,2004.
[2]李云清,杨庆红.数据结构[M].人民邮电大学出版社,2004.6
[3]赵晓,王丽丽“C++面向对象程序设计”多样实验探究[J]《计算机时代》2013
[4]袁素梅,付文成基于VisualC++6.0的学生信息管理系统[J]《电脑编程技巧与维护》2012
答辩记录
答辩小组教师:
**,***
提问与答辩情况记录如下:
1.你的系统中的查找功能是如何实现的?
答:
也是利用链表结构,显示遍历链表,找到想要根据编号或者名称查找的商品,如果找到了想要找到商品,就调用显示函数,将商品的信息显示出来。
2.你最后运行界面的颜色是如何显示出来的?
答:
是通过#include这个头文件,这是个可以调用库函数的一个c语言的头文件。
还用到了system("colorC");其中color后面的C是前景色代号,还可以在C之前加一些代码作为背景色代号,各颜色代码如下:
0=黑色1=蓝色2=绿色3=湖蓝色4=红色5=紫色6=黄色7=白色8=灰色9=淡蓝色A=淡绿色B=淡浅绿色C=淡红色D=淡紫色E=淡黄色F=亮白色
3.“按任意键继续”是怎样实现的?
答:
先是定义了#include这个头文件,然后调用这个库函数中的getch()函数,最后在自己想用到“按任意键继续”这个功能的地方直接调用这个函数就可以了。
4.你的系统中为什么选择用链表结构?
答:
由于本题目的数据元素的个数不可预知,所以使用链表。
链表是动态的,可以在需要的时候增长和减小其长度,而数组是在编译时分配内存的,所以其大小是不可改变的,而且会出现内存浪费的情况。
我认为单循环链表能较好的解决问题。
在建立循环链表时,因为链表的大小由输入决定,因此与其匹配的结点数也是变化的,所以要进行动态内存分配。
附录:
程序源代码
#include
#include
#include
#include
#include//用getch()
usingnamespacestd;
intnumber;
classSupermarket
{
public:
charname[20];
charNum[20];
intCnum;//进货总数
intMnum;//销售数目
intEnum;//剩余库存数目
doublePrice;//单价
charAdd[20];//产地
doubleSum;//销售额
Supermarket*Next;
voidInput()
{
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;
}
voidReadFile(istream&in)//文件指针
{
in>>name>>Num>>Cnum>>Mnum>>Enum>>Add>>Price>>Sum;
}
voidShow()
{
cout<<"商品名:
"<<<"商品编号:
"<<<"进货总数:
"<<<"销售数目:
"<<<"剩余库存:
"<<<"产地:
"<<<"单价:
"<<<"销售额:
"<<}
voidShow1()
{
cout<<"商品名:
"<<<"商品编号:
"<<<"进货总数:
"<<<"销售数目:
"<<<"剩余库存:
"<<<"产地:
"<<<"单价:
"<<<"销售额:
"<<}
};
classSupermarketmassage
{
public:
Supermarketmassage();
~Supermarketmassage();
voidShowMenu();
voidFind();
voidSave();
voidModifyItem();
voidRemoveItem();
voidsale();//销售函数
voidSwap(Supermarket*,Supermarket*);
voidSort();//voidUnpass();
intListCount();//voidAverage();
voidDisplay()
{inti=1;
for(Supermarket*p=Head->Next;p!
=End;p=p->Next,i++)
{
if(i==2)
p->Show1();
elsep->Show();
}
cout<<"输入任意字符!
继续……";
getch();
}
voidAddItem()
{
End->Input();
End->Next=newSupermarket;
End=End->Next;
cout<<"添加成功!
"<cout<<"输入任意字符!
继续……";
getch();
}
private:
Supermarket*Head,*End;
ifstreamin;
ofstreamout;
Supermarket*FindItem(char*name)
{
for(Supermarket*p=Head;p->Next!
=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!
strcmp(p->Next->name,name))
returnp;
returnNULL;
}
Supermarket*FindNum(char*Num)
{
for(Supermarket*p=Head;p->Next!
=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!
strcmp(p->Next->Num,Num))
returnp;
returnNULL;
}
Supermarket*FindAdd(char*Add)
{
for(Supermarket*p=Head;p->Next!
=End;p=p->Next)//匹配成功则返回上一个指针,不成功就返回空
if(!
strcmp(p->Next->Add,Add))
returnp;
returnNULL;
}
};
Supermarketmassage:
:
Supermarketmassage()
{
Head=newSupermarket;
Head->Next=newSupermarket;
End=Head->Next;
in.open("sort.txt");
if(!
in)
cout<<"这是一个新系统,无商品信息。
请先输入。
"<else
{
while(!
in.eof())
{
End->ReadFile(in);
if(End->name[0]=='\0')
break;
End->Next=newSupermarket;
End=End->Next;
}
in.close();
cout<<"\t\t读取商品信息成功!
"<}
}
Supermarketmassage:
:
~Supermarketmassage()
{
Save();
for(Supermarket*temp;Head->Next!
=End;)
{
temp=Head->Next;
Head->Next=Head->Next->Next;
deletetemp;
}
deleteHead,End;
}intEnum1=100;
voidSupermarketmassage:
:
ShowMenu()
{
cout<<"〒〒〒〒〒〒〒〒〒〒☆超市商品管理系统☆〒〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒★★★★★★★★★★★★★★★★★★〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆1.增加商品信息☆★〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆2.显示商品信息☆★〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆3.排序统计商品☆★〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆4.查找商品信息☆★〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆5.删除商品信息☆★〒〒〒〒〒〒〒〒〒"<cout<<"〒〒〒〒〒〒〒〒〒★☆6.修改商品信息☆★〒〒