LionelFreud

博客园 首页 新随笔 联系 订阅 管理

      此程序为商品管理系统,是我在大一下学期和我的组员一起设计完成的程序,现在我再次实验,并且与网上的各大主流APP进行对比,发现我们的程序明显存在严重的不合理性,作为我们的大作业,我们的功能太过于单调,无法更加快捷得使得用户完成他们想需求。

      首先我要介绍的是是系统本身存在的几个主要功能。作为系统的管理员,我们做的只是三个最基础的功能,增加商品,下架商品以及修改商品的信息、增加是由用户输入商品的信息,确认保存后将数据存入文本文件中。删除功能会使用delete语句将其从链表中删除。修改商品功能在由用户决定要修改的信息类别,再进行修改,也可以修改所有的商品信息,这样就不用经过增加又删除的双重操作,可以简化操作。

       但是,我们会发现,不管是什么销售类APP,都会在上面存在搜索栏,方便用户进行快速检索,如果我们单单将一件件商品罗列出来,没有对应的关键词会浪费顾客大量的时间。所以我增设了查询功能,但是时间有限,我的检索就是通过名称来搜索,再将结点中信息一起输出,达到方便客户的效果。

以下是部分核心代码的展示

这是我们对于商品的信息定义,包括了代码,名称,产地,单价以及库存量,既可以让系统方便读取,也可以随时进行因为库存不足的下架。

这是增加商品的代码,增加商品功能是通过相当于c语言中链表的方式,先创建一个类指针p,再输入相关商品的基本信息。由于是类指针可以一次性录入商品的所有的内容,就相对其他的指针较为方便。最后运用if的循环语句来实现查找链表末尾,并加入新的结点。

这是删除商品的代码,比之增加的函数就是多了一个从原有的链表中查找结点的代码。其中删除是用delete,delete的主要优势就是执行删除的过程是每次从表中删除一行,并且同时将该行的删除操作作为事务记录在日志中保存以便进行进行回滚操作。

修改商品功能也是先用商品名称来查找结点,方式和删除功能相同,在由用户决定要修改的信息类别,再进行修改。当然,也可以修改所有的商品信息,这样就不用经过增加又删除的双重操作,可以简化操作,全改的方式是通过重新创建一个结点去替换原有的结点。

      然后我增加了查询系统,我们的系统中采用了商品名称查询的方式,主要是考虑了中国人对汉字相对敏感的习惯。查找的方式主要是if循环语句中用strcmp函数去比对,找到了之后就是判断这个商品的结点是不是表头,如果是就要goods=p1->next,将指针对应到新的表头上,不是就是简单的将上一个结点的指针变量指向下一个结点。通过查找结点,并将其信息统一输出。

void Supermarket::Query()
{
cout<<"\n****************查询****************\n";
char name[20];
cout<<"\n请输入要查询的商品名称:\n";
cin>>name;
Goods *p1=goods;
while(p1)
{
if(strcmp(p1->name,name)==0)
{
break;
}
else
{
p1=p1->next;
}
}
if(p1!=NULL) //若找到结点
{
cout<<"\n要查询的信息如下:\n";
cout<<"商品代码:\t"<<p1->num<<"\n"<<"商品名称:\t"<<p1->name<<"\n";
cout<<"商品产地:\t"<<p1->person<<"\n"<<"商品单价:\t"<<p1->price<<"\n";
cout<<"商品库存量:\t"<<p1->amount<<"\n";
cout<<"*************************************";
}
else //未找到结点
{
cout<<"\nSorry,未找到该类商品!\n";
cout<<"*************************************";
}
}

以上就是我增设的代码

这是两种查找的情况。

通过这次的实验,我发现我们的程序还是稍显稚嫩,在以后的实验里,我需要对比主流的成品并且使得我们的程序可以满足大部分人的需求。

posted on 2021-03-09 21:56  LionelFreud  阅读(167)  评论(0)    收藏  举报