




免费预览已结束,剩余8页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华南理工大学广州学院2011-2012学年度第二学期课程名称:数据结构作业题目:超市管理系统专 业:网络工程年 级:2010级姓 名:伍灼兴学 号:201038897003131 系统概述本系统是一个超市简单管理系统,以菜单为选择,通过调用相关的函数,实现添加、删除、排列、显示等不同功能,同时,本系统采用“链表”的形式,函数的返回只是一个头结点,通过头结点可以找到所有链表中的信息,只要找到头指针就能进行相应的操作,所以模块化的程序方便以后的添加和删除、查询某些功能;至于排序方面,本系统,采用稳定又快捷的排序方法冒泡排序,根据联系号码的数字顺序进行从小到大排列;程序中通过system(“cls”)清屏函数实现界面的转换,主函数中的循环保证程序不会退出,方便而美观;同时,还利用了字符串复制函数strcpy,作为一个简单的超市管理管理系统,除了完成以上一些基本输入功能外,还增加了文件的读入和写出功能,增强了程序的实用性。2 程序概要设计l 模块1:函数头文件 #include /包括cin , cout 函数定义#include /包括 文本文档的读/写/ 函数定义#include /包括 类,对象,数组函数定义l 模块2:主函数 int main()l 模块3:子函数 struct结构体的数据: void SuperMarket:input()/信息输入 void SuperMarket:display()/信息输出 class类的功能:SuperMessage: SuperMessage()/无参构造函数 SuperMessage:SuperMessage()/析构函数(释放单链表) void SuperMessage:Save()/保存文件void SuperMessage:BubbleSort()/冒泡排序 void SuperMessage:Insert()/插入void SuperMessage:Delete()/删除SuperMarket * SuperMessage:Search(char * goodsname)/ 查找void SuperMessage:Change()/修改void SuperMessage:Show()/显示2.1 实现功能l 函数头调用系统中的相关函数,以确保程序的运行正常。l 建立一个超市管理系统结构体SuperMarket有相关变量和链接指针:struct SuperMarket /数据结构体char goodsname100; /货物名称 int goodsmarket; /货物编号 int allgoodsmarket; /进货总数 char sellmarket100; /售出数目int reservemarket;/剩余库存数目int s; /定义变量SuperMarket * Next;/链表指向下一个节点void ReadFile(istream & in); /读入数据void input();/输入数据void display();/输出数据 ;l 建立一个超市管理系统类SuperMessage来说明超市管理系统里的功能内容(是通过函数来实现): class SuperMessage/功能类public:SuperMessage();/构造函数 SuperMessage();/析构函数(释放单链表)void Save();/保存数据SuperMarket * Search(char *); /查找void BubbleSort();/排序void Insert();/插入void Delete();/删除void Change();/更改void Show();/显示void Swap(SuperMarket *,SuperMarket *); /两个SuperMarket对象交换数据域private:SuperMarket * End,* Head;ifstream in; /定义读,写文件对象ofstream out;l 主函数:定义一个布尔型变量flag并初始化为真true,当while(flag),即flag=1,则执行while循环语句里面的代码,同时也用于退出系统时中的swith选择语句,令flag=false (case 0:flag=false;break;),输入0,则退出系统。2.2 程序流程确定?货物信息1.添加Y/输入N显示所有货物信息2.显示 有序显示货物用户信息3.排序结束输入货物名称显示4.查找选择功能进行操作使用界面输入货物名称删除5.删除输入货物名称重新输入货物信息6.修改保存货物信息到文件7.保存0.退出3 程序详细设计3.1 求解方法l 超市管理系统添加货物信息模块:主要功能是添加货物相关信息模块,添加货物信息操作是根据货物的要求实现的。包括添加货物相关信息的货物名称、货物编号、进货总数、售出数目、剩余库存数目,最后输入完成后,通过按任意键回到主界面,部分主要代码如下: void SuperMarket:input()/信息输入 cout请输入货物名称goodsname;cout请输入货物编号goodsmarket;cout请输入进货总数allgoodsmarket;cout请输入售出数目sellmarket;cout请输入剩余库存数目reservemarket;s=j+;void SuperMessage:Insert()/插入End-input();/从单链表尾部插入End-Next=new SuperMarket;End=End-Next;coutendl插入信息已成功Next; p!=End; p=p-Next)p-display(); 分析:这里用了一个for循环,起始值是Supermarket的头结点,从头结点开始直至指向尾结点,通过p指向数据输出display,把货物的相关信息全部列出来。l 超市管理系统排序货物信息模块:有效地排序所有货物的信息,主要根据货物编号码进行排序(递增的方式),大大提高的货物界面的可观性,考虑到稳定性和时间复杂性,所以用到冒泡排序(起泡法),部分代码如下: void SuperMessage:BubbleSort()/冒泡排序SuperMarket *p=NULL,*q=NULL;int exchange=j-1;int bound;int i;while(exchange)bound=exchange; exchange=0;for(p=Head-Next,i=1;iNext)if(p-allgoodsnumberp-Next-allgoodsnumber)Swap(p,p-Next); /调用交换函数exchange=p-s;Show();分析:定义Supermarket的两个指针,分别是p、q,并初始值为空NULL,用冒泡法进行两两比较,把最小的allgoodnumber筛选出来,以此类推,按递增的方式进行排序,其中这里用到swap语句,适用于进行两两交换的,非常适用于冒泡这种排序,同时调用Show()函数,显示所有货物的信息。l 超市管理系统查找货物信息模块:主要是查询货物的信息,界面提示要输入需要查询的货物名称,如果不正确,显示此货物不存在,提示用户重新核对。如果正确,则显示出货物的所有信息货物名称、货物编号、进货总数、售出数目、剩余库存数目。部分主要代码如下:SuperMarket * SuperMessage:Search(char * goodsname)/ 查找for(SuperMarket *p=Head-Next;p!=End;p=p-Next)if(!strcmp(p-goodsname,goodsname) if(x=4)p-display();return p;elsereturn p;if(x=4)cout此货物不存在,请重新核对endl;return 0;分析:在主函数main中的switch语句里,输入要查找货物的名称,其中此处用了比较字符串stcmp,即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇0为止。主要用于查找的货物名称与系统内部是否相同,for if语句就是用来判断,如果相同,就认为相等,就调用了display()输出数据,把需要查找的货物信息输出,不相等,int x是全局变量,提示用户核对后再输入。l 超市管理系统删除货物信息模块:主要功能是删除不再需要的货物信息,或货物已过了保存期,需要烧毁,就输入你要删除的货物名称如果没有的话,将提示:没有找到!如果找到,则提示货物相关信息的已经从超市管理系统中删去。部分主要代码如下: void SuperMessage:Delete()/删除char goodsname100;SuperMarket * p=new SuperMarket,*temp=NULL; cout请输入要删除的货物名称:goodsname;p-Next=Search(goodsname); /先进行查找,找到所要删除的结点if(Search(goodsname) temp=p-Next;p-Next=p-Next-Next; /摘链delete temp;cout删除成功!endl;elsecout没有找到!endl;分析:同时定义Supermarket指针p、temp为空,通过调用search()查找函数,输入要删除的货物名称,建立链表,通过指针快速查找到删除的结点,通过摘链的方法,即原本指向要删除结点的指针改指向要删除结点指向的指针,用了if的语句进行判断是否存在这个要删除的结点。l 超市管理系统修改货物信息模块:如果有货物的相关信息需要更新,则只需要输入要更改的货物名,就可以修改货物的相关信息,若只有一条信息修改,其他不变的信息按原来的信息输入,具体代码如下:void SuperMessage:Change()/修改char goodsname100;coutgoodsname;if(Search(goodsname)coutt t已找到已存货物,请输入新的信息!input();cout修改成功!endl; else cout没有找到!Next;p!=End;p=p-Next)out货物名称goodsnamet货物编号goodsmarkett进货总数号码allgoodsmarkett售出数目sellmarkett剩余库存数目reservemarketendl; /将数据存到外存文件里out.close();cout保存成功!endl;分析:输出流out的C+知识,要有头文件#include,out.open在原来的.cpp操作管理系统的文件夹里新建一个SuperMarket.txt文档文件,里面列出货物的所有相关信息,并提示“保存成功”。3.2 数据结构在原来的C+的基础上增加“单链表”, 用头插法建立单链表,链表的头指针head(即链表的第一个节点)方便了以后的插入、删除操作,之所以采用链表的形式,主要链表是采用动态存储分配,不会造成内存浪费和溢出;另外,链表执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素。除了“单链表”外,还增加了一种排序方法“冒泡“排序,在众多的外排序中,综合考虑到稳定性,时间复杂性等一系列的因素,决定用比较简单,空间复杂度较低,是稳定的“冒泡”排序(起泡法),虽然如此,但时间复杂度和效率并不高,有时因为数据多的缘故,导致系统崩毁,但对于小型的超市管理系统还是可以的。3.3 算法描述l /定义了三个全局变量:iint x=0;/主要用于switch语句 查找char a;/ 主要用于作为任意数字的输入int j=1; /主要用于信息输入 冒泡排序l /定义构造函数:SuperMessage:SuperMessage()/构造函数Head=new SuperMarket; /头插法建立单链表Head-Next=new SuperMarket;/建立链表End=Head-Next;/Head指向的Endin.open(SuperMarket.text);/打开外存文件,看是否有数据存在if(!in)cout超市管理系统暂时没有存货,如要存货,按主菜单功能输入ReadFile(in); /从in流里面读取数据到变量中if(End-goodsname0=0)break;/判断是否读完End-Next=new SuperMarket;End=End-Next;in.close();cout已成功读取超市存货内容!endl;cout输入任意字母继续a; l 定义析构函数:SuperMessage:SuperMessage()/析构函数(释放单链表)SuperMarket * temp;while(Head-Next!=End)temp=Head-Next;Head=Head-Next;delete temp; /删除结点 delete Head,End; /删除头尾指针3.4 算法复杂性分析在算法的复杂性表示中,O记号表示复杂度的上限,即:O(g(n) = 单向链表没有指向前节点的指针,必须从头指针开始遍历到p的前节点,最坏的情况为p指向的是链表的尾节点,应此为O(n)。冒泡排序的时间复杂度:1.最好情况:O(n) 2.最坏情况:O(n2) 3.平均情况:O(n2)4 使用情况4.1 实验环境CPU:AMD Athlon(速龙) II X3 440内存:2 GBytes主板:技嘉 GA-MA770T-UD3P (AMD 790X (RD780) + SB750)操作系统: window 7编译软件:Microsoft Visual C+ 6.0其它:略4.2 输入数据 主菜单:1 添加添加货物信息 2 显示货物信息 3 排序货物信息 4 查找货物信息 5 删除货物信息 6 修改货物信息 7保存货物信息 0退出系统 (用数字输入功能的序号,就可以进入所选功能)4.3 运行结果 添加货物信息: 显示货物信息: 排序货物信息: 查找货物信息: 删除货物信息: 修改货物信息: 保存文件:55总结终于把程序编写完成啦(*_*),这次编写的程序相比第一次难度大了不少,由于自己对C+的知识学得不扎实,很多不少的知识点,例如何为析构函数,何为构造函数的重要知识点都忘了很多,幸好这寒假我把厚厚的C+教材书拿回家看,恶补一些模糊的知识点,直至元宵节过后,就开始筹备开始编写程序,看到题目,按照老师的要求,主要用单链表完成一系列的任务,因此我开始利用离开学的这段时间内完成,每一天完成一点,一旦做起来就发现工作量挺大的,我写代码的情况不会直接在电脑上写,先在草稿子上写好一些基本功能,例如最为熟悉的排序,我最擅长用冒泡,因为在以前的编写时候经常用到,把有关的功能一段一段用代码写出来,当用到查找和删除,就第一时间想到“链表”,用头指针存取首剩余库存数目,方便的插入和删除的操作,每当写一段代码我不禁都会想起老师这学期说过知识点,哪些是误点,加上有网络这么大的平台,遇到想不明白的,时不时东百度,西Soso,让我在这次的大作业上掌握了不少知识。 当然这也是我C+的第二次的大检查,时刻严格要求自己,切记连一个“;”都不要忘记,自己动手,自己发现问题,解决问题,弥补自己的不足。到在上机过程中,平时没有掌握好的知识在这次设计中彻底暴露出来,一连串的错误,看的眼晕脑胀,经过不断的思考,不断查阅资料,不断上机运行,解决其中大部分问题,当然还有一些问题没有解决,例如一些不常用到的语句比较字符串stcmp,我是通过课外书才了解到这字符串还可以进行比较,说到这里,冒泡法里面的swap语句,进行两两互换,的确方便了不少,这才发现原来老师没讲的知识点,自己课外补充是非常重要的,但遗憾的是,此简单的超市管理系统仍存在着不少的缺陷,例如,如果输入的商品编号带有字母的话会导致系统崩毁,为什么?主要因为制作过程中,没考虑到这种情况,int类型的变成char类型的,会把指针的指向混乱,想到这里,我就没心思改下去,可能自己在指针这方面不够扎实,仍存在好多没注意的知识点,知识面还不够广,好多知识还需要学习,并且我相信在以
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人力资源部新员工培训
- 安全教育培训制度实施流程
- 施工企业文员培训课件
- 2025至2030年中国磁性液位开关市场现状分析及前景预测报告
- 西师版数学六年级上册周末复习安排及复习计划
- 二年级语文教师知识更新计划
- 武汉大学自主招生历史专业个人陈述自荐信范文
- 2025至2030年中国电动象市场现状分析及前景预测报告
- 2025至2030年中国熔盐调节阀市场现状分析及前景预测报告
- 2025至2030年中国烧烤架网罩市场现状分析及前景预测报告
- CO2还原合成甲醇反应器研究进展
- DB3713T-291-2023工程建设项目“多测合一”技术规程
- 土壤重金属迁移模型构建-洞察分析
- 临床用血总结
- 《如何推行改善提案》课件
- 【大学课件】商业银行风险管理
- 农业机械的智能控制
- 人教版道德与法治六上6上1单元第1课《感受生活中的法律》
- 绿化基础知识培训
- 2024国际技术转让合同(中英文对照)
- 购房委托协议文本
评论
0/150
提交评论