c++课程设计报告家电库存系统的设计.docx

上传人:b****6 文档编号:4019363 上传时间:2022-11-27 格式:DOCX 页数:23 大小:237.66KB
下载 相关 举报
c++课程设计报告家电库存系统的设计.docx_第1页
第1页 / 共23页
c++课程设计报告家电库存系统的设计.docx_第2页
第2页 / 共23页
c++课程设计报告家电库存系统的设计.docx_第3页
第3页 / 共23页
c++课程设计报告家电库存系统的设计.docx_第4页
第4页 / 共23页
c++课程设计报告家电库存系统的设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

c++课程设计报告家电库存系统的设计.docx

《c++课程设计报告家电库存系统的设计.docx》由会员分享,可在线阅读,更多相关《c++课程设计报告家电库存系统的设计.docx(23页珍藏版)》请在冰豆网上搜索。

c++课程设计报告家电库存系统的设计.docx

c++课程设计报告家电库存系统的设计

 

综合性设计报告

院(系):

_电子信息工程学院_班级:

学生姓名:

学号:

设计地点(单位)___计算机科学与工程实验室___________

设计题目:

_家电库存系统的设计________________

完成日期:

2009年9月11日

指导教师评语:

_______________________________________

__________________________________________________________________________________________________________________________________________________________________________________________________________________

成绩(五级记分制):

________________

指导教师(签字):

________________

 

课程设计任务书

设计题目:

家电库存系统的设计

学生姓名

课程名称

数据结构课程设计

专业班级

计科普2008-01,02

地点

计算机专业实验室

起止时间

2009.8.31-2009.9.11

设计内容及要求

以链表结构的有序表表示某商场家电部的库存模型。

当有提货或进货时需要对该链表及时进行维护。

每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。

链表结点的数据域包括:

类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。

程序功能包括:

初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。

设计

参数

测试数据要求:

家电类别(如:

电视机,空调,冰箱等)不少于5种,记录数量不少于50。

 

进度

要求

2009.8.31星期一完成任务的讲解、并接受课程设计任务,选定课程设计的题目

2009.9.1星期二了解任务的算法、并画出算法的程序流程图

2009.9.2星期三对任务的关键技术进行验证、并确定解决办法

2009.9.3星期四编制程序

2009.9.4星期五编制程序

2009.9.7星期一调试程序,并试运行

2009.9.8星期二整理课程设计过程中的各参数、进行总结并提出改进意见

2009.9.9星期三对改进办法进行实现,并编写课程设计报告

2009.9.10星期四编写课程设计报告并准备答辨

2009.9.11星期五参加答辨,提交设计报告

参考资料

1.严蔚敏吴伟民著,数据结构,清华大学出版社,2007.3

2.李春葆著,数据结构教程,清华大学出版社,2005.1

3.RichardF.GilbergBehrouzA.Forouzan,数据结构的C++伪码实现(英文版),人民邮电出版社,2002.1

其它

说明

1.本表应在每次实施前一周由负责教师填写二份,院系审批后交院系办备案,一份由负责教师留用。

2.若填写内容较多可另纸附后。

3.一题多名学生共用的,在设计内容、参数、要求等方面应有所区别。

摘要

本程序的作用是建立一个简单的家电库存管理系统。

当库存信息发生变化时要求能对链表的信息进行更新并存入文件。

每个工作日开始时,需要把磁盘中的商品信息读出并加入链表中,每个工作日结束之后,在将该链表中的数据以文件形式保存,链表结点的数据域包括:

类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。

程序功能包括:

初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。

程序需要对链表进行初始化、插入、删除、更新数据,查询等操作,还要求对文件的操作。

关键字:

链表数据域插入删除

第一部分设计题目、内容及要求

1.1设计题目

以链表结构的有序表表示某商场家电部的库存模型。

当有提货或进货时需要对该链表及时进行维护。

每个工作日结束之后,将该链表中的数据以文件形式保存,每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。

链表结点的数据域包括:

类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。

程序功能包括:

初始化、创建表、插入、删除、更新数据,查询及链表数据与文件之间的转换等。

1.2设计要求

要求实现以下功能

(1)初始化并创建链表:

能够初始化并创建商品信息表并按照单价的升序排列;

(2)插入及删除:

能够添加新商品信息并且当商品由于某种原因(损坏,售出及其他原因)而不得不删除之时能够顺利地实现删除操作;

(3)更新数据:

当商品的价格或者数量变动的时候能够作出相应的改变;

(4)查询:

能够按照某种要求需求商品的信息,并决定是否购买该商品,然后作出相应的数据更新;

(5)链表与文件之间的转换:

能够成功地将链表中的信息写入文件,并能根据需要读出文件中的信息。

第二部分概要设计

2.1链表节点信息说明

表1各数据类型名称及其表示意义

名称

数据类型

表示的意义

Species

字符

家电的类型(包括电视机,空调等类型)

Xinghao

字符串

家电的型号

Pinpai

字符串

家电的品牌

Danjia

浮点型

家电价格,为浮点型

Shuliang

整型

家电的数量

Data

节点信息,包括以上数据信息

next

指针

指向由Date和next组成节点

表中,Species表示家电的类型,用一个大写字母代替。

例如“D”表示电视机,“K”表示空调,“B”表示冰箱,“J”表示电脑,“X”表示洗衣机。

Xinghao和Pinpai都是以字符串的形式表示的,Danjia表示一个商品的价格,而Shuliang这表示某种商品的库存量。

Date则是数据域,包括以上五项。

而next则表示指向下一个节点的指针。

这就是一个商品种类的全部信息,用一个节点的空间来储存该类型商品的信息。

而在以后的删除和插入以及查询操作中在某些情况下只需对商品的库存量做一些修改久可以达到目的,非常方便。

2.2总体程序框图

结束

输入i值决定下一步操作

更新数据

退出并保存商品信息

查询并决定是否购买

从商品清单中读取信息

删除商品信息

添加商品

初始化商品信息

选择进入的模块

选择是否进入系统

 

i=1i=2

 

图2-1总体程序框图

 

第三部分详细设计

3.1初始化数据模块详细设计

3.1.1初始化数据模块伪码算法

intInticial(ListNode&p)

{while(i!

=2)

{scanf(&pp->Date);pp->next=p->next;p->next=pp;scanf(&i);

}Paixu(p);Display(p);ListTxt(p);

returnOK;}

其中,排序函数伪码算法如下:

intPaixu(ListNode&head)

{p=q=head->next;while(p!

=NULL)

{q=p->next;min=p->Date;

while(q!

=NULL)

{if(q->Date.Danjia<=min.Danjia)

{min=q->Date;q->Date=p->Date;p->Date=min;}q=q->next;

}p=p->next;}Display(head);

returnOK;

其次,由链表读入信息到文件函数伪码算法如下:

intListTxt(ListNode&head)

{

FILE*fp;p=head->next;

if(p==NULL)exit(0);

if((fp=fopen("e:

\\a.txt","w"))==NULL)exit(0);

while(p!

=NULL)

{fprintf(fp,p->Date);p=p->next;}

if(fclose(fp))exit(0);

return1;

}

3.1.2初始化模块程序流程图

scanf("%d",&i)

p->next=pp

pp->next=p->next

输入相应商品信息

结束

输出相应提示

p->next==NULL

Display(p)

Paixu(p)

i==2

NY

 

Y

N

ListTxt(p)

 

图3-1数据初始化模块程序流程图

 

3.2添加商品模块详细设计

3.2.1添加信息模块伪码算法

intInsert(ListNode&head,Node&a)

{

p=head->next;

if(p==NULL)exit(0);

while(p=p->next)p=p->next;

q->Date=a.Date;

q->next=p->next;p->next=q;

ListTxt(head);

returnOK;

}

在上面的算法中,首先要查看一下商品信息表示否为空,是则退出,否则继续操作。

在进入该模块之前,有关插入的商品的信息已经初始化完成,直接通过引用就可以使用。

本模块首先将要插入商品的有关信息映射到一个节点的数据域,然后将该节点插入到商品信息表中,再排序即可。

 

结束

ListTxt(head)

Paixu(head)

p->next=q;

q->next=p->next

将a中的数据映射到节点q的数据域

3.2.2添加商品模块程序流程图

 

p==NULL

NY

 

图3-2添加商品信息模块程序流程图

3.3删除货物模块详细设计

3.3.1删除模块伪码算法

intDelete(ListNode&head,Node&a)

{if(p==NULL)exit(0);scanf(&choice);

switch(choice){

case1:

scanf(a.Species);

while(p!

=NULL)

{if(strcmp(p-Date.Species,a.Species)==0)

{printf(p->Date);i++;}p=p->next;}

if(i==1)break;

else{p=head;scanf(&number);while(count

{if(strcmp(p->next->Date.Species,a.Species)==0){count++;

p=p->next;}

while(strcmp(p->next->Date.Species,a.Species)!

=0)p=p->next;

if(p->next->Date.Shuliang>a.Shuliang)p->next-Date.Shuliang-=a.Shuliang;

else{s=p->next;p->next=p->next->next;free(s);}Display(head);}

break;

case2:

scanf(a.XingHao);while(p!

=NULL){

if(strcmp(p->Date.XingHao,a.XingHao)==0){

printf(p->Date);i++;}p=p->next;}

if(i==1)break;

else{p=head;scanf(&number);

while(count

{if(strcmp(p->next->Date.XingHao,a.XingHao)==0)count++;

p=p->next;}

while(strcmp(p->Date.XingHao,a.XingHao)!

=0)p=p->next;}

if(p->next->Date.Shuliang>a.Shuliang)

p->next->Date.Shuliang-=a.Shuliang;else

{s=p->next;p->next=p->next->next;

}Display(head);}break;}ListTxt(head);

returnOK;}

3.3.2删除模块程序流程图

由于本模块流程图中有类似的操作,所以只给出其中一种情况下的流程图,其他两种情况下的流程图省略不写。

另外,此图还省略了其他不重要的操作。

结束

Display(head)

p->next=p->next->next

s=p->next

 

NY

p==NULL

 

Choice==1

N

Y

Choice==2

scanf("%d",&number)

N

 

以后商品数量是否大于删除数量

Y

 

Y

N

p->next->Date.Shuliang-=a.Shuliang

 

图3-3删除模块流程图

3.4查询模块详细设计

3.4.1查询模块伪码算法

intSearch(ListNode&head,Node&a)

{if(p==NULL){getch();system("cls");}scanf(&choice);

switch(choice)

{case1:

scanf(a.Species);

while(p!

=NULL){if(strcmp(p->Date.Species,a.Species)==0){printf(p->Date);i++;}

p=p->next;}if(i==1)printf("*对不起,没有找到相关商品的信息!

\n");

elsescanf(&choice1);

switch(choice1)

{case1:

p=head;scanf(&a.Shuliang);

while(count

{if(strcmp(p->next->Date.Species,a.Species)==0)

count++;p=p->next;}

while(strcmp(p->next->Date.Species,a.Species)!

=0)

p=p->next;

if(p->next->Date.Shuliang>a.Shuliang)

p->next->Date.Shuliang-=a.Shuliang;

else{

s=p->next;p->next=p->next->next;free(s);}break;

case2:

break;}

}break;

case2:

case1:

p=head;scanf(&a.Shuliang);

while(count

{if(strcmp(p->next->Date.XingHao,a.XingHao==0))

count++;

p=p->next;}

while(strcmp(p->next->Date.XingHao,a.XingHao)!

=0)

p=p->next;

if(p->next->Date.Shuliang>a.Shuliang)

p->next->Date.Shuliang-=a.Shuliang;

else{

s=p->next;p->next=p->next->next;free(s);}break;

case2:

break;}

}break;

case3:

case1:

p=head;scanf(&a.Shuliang);

while(count

{if(strcmp(p->next->Date.Brand,a.Brand)==0)

count++;

p=p->next;}

while(strcmp(p->next->Date.Brand,a.Brand)!

=0)

p=p->next;

if(p->next->Date.Shuliang>a.Shuliang)

p->next->Date.Shuliang-=a.Shuliang;

else{

s=p->next;p->next=p->next->next;free(s);}break;

case2:

break;}

}breakdefault:

getch();exit(0);}

return1;

}

3.4.2查询模块流程图

由于本模块流程图比较复杂,因此省略了一些不是很重要的部分。

 

Choice==1

i==1

Choice==2

输入number

i==2

p->next->Date.Shuliang>a.Shuliang

输入number

p->next->Date.Shuliang>a.Shuliang

s=p->next

p->next->Date.Shuliang-=a.Shuliang

 

p->next=p->next->next

p->next->Date.Shuliang-=a.Shuliang

s=p->next

p->next=p->next->nexttp->next->next

 

结束

 

图3-4查询模块流程图

3.5从文件中读取商品信息

3.5.1伪码算法

intTxtList(ListNode&head)

{q->next=NULL;FILE*fp;

if((fp=fopen("e:

\\a.txt","r"))==NULL)exit(0);

while(!

feof(fp))

{p=(ListNode)malloc(sizeof(Node));

fscanf(fp,p->Date);p->next=q->next;q->next=p;}

q->next=q->next->next;

if(Getlenth(q)==0)

{scanf(&choice);if(choice==1){Inticial(q);ListTxt(q);}

}s=q->next;

while(s!

=NULL){printf(s->Date);s=s->next;}

fclose(fp);return1;}

 

3.5.2读取信息模块程序流程图

Getlenth(q)==0

输入choice的值

q->next=q->next->next

向节点中读入信息

fp=open("e:

\\a.txt","r"))==NULL

结束

s=s->next

输出相应信息

choice==1

 

信息是否读取完毕

 

图3-5读取信息模块程序流程图

3.6数据更新模块详细设计

3.6.1数据更新模块伪码算法

intGengxin(ListNode&head)

{chara[40];charb[20];doubled;

while(p!

=NULL){printf(p->Date);

p=p->next;n++;}

while(choice1!

=2)

{

scanf(&k);p=head;

for(intcount=0;count

p=p->next;

printf(p->Date);scanf(&choice);

switch(choice)

{

case1:

scanf(fp);strcpy(p->Date.Species,fp);break;

case2:

scanf(a);strcpy(p->Date.XingHao,a);break;

case3:

scanf(b);strcpy(p->Date.Brand,b);break;

case4:

scanf(&d);p->Date.Danjia=d;break;

case5:

scanf(&number);p->Date.Shuliang=umber;break;

default:

}printf(p->Date);scanf(&choice1);

}

ListTxt(head);return1;

}

3.6.2更新数据模块程序流程图

结束

输入choice的值

Choice==3

Choice==4

Choice==2

Choice==1

choice1==2

 

输出相应商品信息

 

输入choice值

 

scanf("%s",a);strcpy(p->Date.XingHao,a)

scanf("%s",fp);strcpy(p->Date.Species,fp)

 

scanf("%s",b);strcpy(p->Date.Brand,b)

 

scanf("%d",&number);p->Date.Shuliang=number

scanf("%lf",&d);p->Date.Danjia=d

 

输出更新之后商品的信息

 

图3-6更新数据模块流程图

3.6退出并保存商品清单

3.6.1退出并保存商品伪码算法

intListTxt(ListNode&head)

{FILE*fp;p=head->next;if(p==NULL)exit(0);

if((fp=fopen("e:

\\a.txt","w"))==NULL)exit(0);

while(p!

=NULL)

{fprintf(fp,p->Date);p=p->next;}if(fclose(fp))exit(0);return1;}

3.6.2退出并保存商品程序流程图

P==NULL

(fp=fopen("e:

\\a.txt","w"))==NULL

结束

p=p->next

将相应信息读入文件

p==NULL

 

图3-7退出并保存商品程序流程图

第四部分调试分析

4.1问题回顾和分析

编写完程序之后,调试过程中出现不少问题。

主要包括以下几个。

首先,刚开始发现了一些由于粗心而出现的小问题,包括数据的输入

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 材料科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1