【数据结构】超市商品库存信息管理系统_第1页
【数据结构】超市商品库存信息管理系统_第2页
【数据结构】超市商品库存信息管理系统_第3页
【数据结构】超市商品库存信息管理系统_第4页
【数据结构】超市商品库存信息管理系统_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.东北大学信息科学与工程学院数据结构课程设计报告题目 超市商品库存信息管理系统课题组长 宋振课题组成员 常玉颖 于红爽专业名称 计算机科学与技术班级 计1307指导教师 杨雷2015 年 1月课程设计任务书题目:超市商品库存信息管理系统问题描述:对一个中小型超市的库存商品信息管理作一个简单的模拟。设计要求:设计超市库存商品信息维护管理的模拟程序。(1)采用顺序表或结构体链表存储结构。(2)实现超市商品的创建、分类、出库、入库、修改等管理功能。(3)实现库存商品的各种查询和统计功能。(4)考虑采用优化的查询和排序算法。(5)其它完善性功能。指导教师签字:年月日目录1 课题概述41.1 课题任务4

2、1.2 课题原理41.3 相关知识42 需求分析52.1 课题调研52.2 用户需求分析53 方案设计53.1 总体功能设计53.2 数据结构设计103.3 函数原型设计113.4 主算法设计123.5 用户界面设计144 方案实现154.1 开发环境与工具154.2 程序设计关键技术164.3 个人设计实现(按组员分工)4.3.1 宋振设计实现17 4.3.2 常玉颖设计实现174.3.3于红爽设计实现175 测试与调试235.1 个人测试(按组员分工)235.1.1 宋振测试235.1.2 常玉颖测试235.1.3 于红爽测试235.2 组装与系统测试335.3 系统运行366 课题总结3

3、96.1 课题评价396.2 团队协作406.3 团队协作416.4 个人设计小结(按组员分工)426.4.1宋振设计小结426.4.2 常玉颖设计小结426.4.3 于红爽设计小结427 附录A 课题任务分工50A-1 课题程序设计分工50A-2 课题报告分工51 附录B 课题设计文档(光盘)52B-1课程设计报告(电子版)52B-2源程序代码(*.H,*.CPP)52B-3工程与可执行文件)52 B-4屏幕演示录像文件(可选)52 附录C 用户操作手册(可选)53C.1 运行环境说明53C.2 操作说明541 课题概述1.1课题任务超市商品库存信息管理系统【问题描述】对一个中小型超市的库存

4、商品信息管理作一个简单的模拟。【设计要求】设计超市库存商品信息维护管理的模拟程序。(1)采用顺序表或结构体链表存储结构。(2)实现超市商品的创建、分类、出库、入库、修改等管理功能。(3)实现库存商品的各种查询和统计功能。(4)考虑采用优化的查询和排序算法。(5)其它完善性功能。1.2 课题原理本程序采用邻接表的结构,将用户信息存在邻接表的顺序表中,将入库出库的商品信息存储在链表中。程序运行前,将文件中的信息读入一个三维数组中,然后把三维数组读入邻接表中。程序运行结束后,将邻接表的信息存储到三维数组中,再将三维数组的信息转存到文件中,实现了信息的长久存储。 总而言之,本实验的入库出库查询等功能,

5、均是对邻接表的操作,存储是借助了一个三维数组存入到文件中。1.3 相关知识数据结构:邻接表、邻接表的遍历,排序、查找、文件、顺序表。2 需求分析2.1 课题调研 本实验开始之前,询问了几家中小型超市,了解了他们商品库存运营的模式。每一件商品都经历了入库、在库、出库三个过程。入库需要的商品信息比较多,包括商品名称,入库时间,入库价格,入库数量,计量单位,经手人等相关信息。而出库,在需要出售价格,出售数量,出手日期,经手人即可。2.2 用户需求分析现代中小型超市基本都要走向实现商品信息智能化管理的道路,而商品库存管理系统能够有效的帮助他们记录每天的进账,出账,库存和交易记录。此系统有效地解决了传统

6、记账的繁琐,账本数据易丢失,账本信息不安全等问题,是未来包括超市在内的商店运营必备的产品。3 方案设计3.1 总体功能设计 该程序主要分为以下几大功能,包括入库,出库,以及对库存的操作。对库存的操作又包括分类,查询等功能。而查询又包括按商品名称查询,按商品交易记录查询等子功能。而这些均建立在对邻接表的操作基础上实现的。3.2 数据结构设计程序的数据结构包括邻接表、顺序表。 顺序表用来存储从客户端输入的商品入库出库信息,然后读入邻接表中,邻接表的顺序表存储用户信息,链表存储商品信息。 struct commodity/商品信息的结构体 char name20; char brand20; flo

7、at purprice; /商品进价 float selprice; /售价 int count; /数量 char purtime20; /进货时间 char seltime20; /出货时间 char unit20; /计量单位 char brokerage20; /经手人 char abstract20; /摘要 struct commodity *next; int lin_len; /链表有多少节点 int sign; /做相同累加运算时的标记位 Lnode,*Linklist,list20520; struct user /用户信息的结构体 char account20; /账户

8、char code20; /密码 char name20; char question40; char answer20; /提示问题的答案 int rec_len; /验证密码是否正确 struct commodity rec5; /个人信息中增加的买卖记录,max1代表一个人最多可以存多少条记录 int list_len;umax1; 3.3 函数原型设计void backgroundset( ); /背景颜色设置函数 void outsert_com(struct user u,int q); void insert_com(struct user u,int q); int jm(st

9、ruct user u); /加密解密函数 int getcode(struct user u); /找回密码函数 int regist(struct user u); /注册函数 void save(struct user u); /存入文件函数 void load( ); /读出函数 void save2(); int lookup_accounts( struct user u,char acc); /匹配账号函数 struct user check_code(struct user u,char acc,char c); /匹配密码函数 int find_acc(char accou)

10、; /查找账户是第几个用户 void print_message( struct user *p); /显示用户信息 void out_print(struct user u,int q,int row); struct commodity* InitLnode(struct commodity *p); void remain(struct commodity list20520,int q,int row); void search(struct user u,int q); void com_remain(struct user u,int q); void load2();3.4 主算

11、法设计void insert_com(struct user u,int q) /商品入库 int i; struct commodity *a; printf("请输入您要添加的种类n1.食品n2.家电n3.运动器材n4.衣服n请输入1-4:"); int x2; scanf("%d",&x2); a=&uq.recx2; for(i=0;i<listqx20.lin_len;i+) a=a->next; a=InitLnode(a); printf("商品名称:"); scanf("%s&qu

12、ot;,&a->name); printf("n"); printf("商品品牌:"); scanf("%s",&a->brand); printf("n"); printf("商品进价:"); scanf("%f",&a->purprice); printf("n"); printf("商品售价:"); scanf("%f",&a->selprice); pr

13、intf("n"); printf("商品数量:"); scanf("%d",&a->count); printf("n"); printf("商品进货时间:"); scanf("%s",&a->purtime); printf("n"); printf("商品经手人:"); scanf("%s",&a->brokerage); printf("n");

14、printf("商品摘要:"); scanf("%s",&a->abstract); printf("n"); printf("计量单位:"); scanf("%s",&a->unit); listqx20.lin_len+; /正确已验证,但是关闭程序再重启便没有,则说明save2或者load2有问题 jm(u); save2(); jm(u);/*/void outsert_com(struct user u,int q) /商品出库 int i; struct

15、commodity *a; printf("请输入您要添加的种类n1.食品n2.家电n3.运动器材n4.衣服n请输入1-4:"); int x2; scanf("%d",&x2); a=&uq.recx2; for(i=0;i<listqx20.lin_len;i+) a=a->next; a=InitLnode(a); printf("商品名称:"); scanf("%s",&a->name); printf("n"); printf("商品

16、数量:"); scanf("%d",&a->count); for(i=1;i<(listqx20.lin_len+1);i+) if(strcmp(a->name,)=0) strcpy(a->purtime,listqx2i.purtime); strcpy(a->seltime,listqx2i.seltime); strcpy(a->unit,listqx2i.unit); strcpy(a->abstract,listqx2i.abstract); a->purprice=

17、listqx2i.purprice; break; listqx20.lin_len+; /正确已验证,但是关闭程序再重启便没有,则说明save2或者load2有问题 jm(u); save2(); jm(u);/*/void remain(struct commodity list20520,int q,int row) /商品库存信息 int i,j,k,m; for(i=0;i<20;i+) listqrowi.sign=0; struct commodity a20; for(i=0;i<20;i+) ai.count=0; for(i=0;i<20;i+) strc

18、py(,"0"); for(k=1;k<19;k+) once=0; for(m=k+1;m<20;m+) if(listqrowk.sign=0) strcpy(,); if(once=0) ak.count=listqrowk.count; once+; if(strcmp(,)=0) ak.count=ak.count+listqrowm.count; listqrowm.sign+; if(listqrowk.sign=0) strcpy(ak

19、.name,); for(i=0;i<20;i+) printf("%s:",); printf("剩余库存:%d",ai.count); printf("n"); /*/void search(struct user u,int q) /按商品名称输出交易记录 int xo; int i,j; char time20,name20; printf(".按商品名称查询"); printf("请输入某类产品:n"); printf("请输入

20、您要查询的种类n1.食品n2.家电n3.运动器材n4.衣服n请输入1-4:"); scanf("%d",&xo); switch(xo) case 1: printf("请输入您要查询的商品名称:"); scanf("%s",&name); for(j=1;j<(listqxo0.lin_len+1);j+) if(strcmp(,name)=0) printf("%s:n",); printf("数量:%dn"

21、,listqxoj.count); break; case 2: printf("请输入您要查询的商品名称:"); scanf("%s",&name); for(j=1;j<(listqxo0.lin_len+1);j+) if(strcmp(,name)=0) printf("%s:n",); printf("数量:%dn",listqxoj.count); break; case 3: printf("请输入您要查询的商品名称:&quo

22、t;); scanf("%s",&name); for(j=1;j<(listqxo0.lin_len+1);j+) if(strcmp(,name)=0) printf("%s:n",); printf("数量:%dn",listqxoj.count); break; case 4: printf("请输入您要查询的商品名称:"); scanf("%s",&name); for(j=1;j<(listqxo0.li

23、n_len+1);j+) if(strcmp(,name)=0) printf("%s:n",); printf("数量:%dn",listqxoj.count); break; /*/void com_remain(struct user u,int q) /查询某类商品的库存记录 int x1,i,j; char name20; float count; struct commodity a; struct commodity *p; a.count=0; printf("输入您要查询的商

24、品种类:"); printf("请输入您要查询的种类n1.食品n2.家电n3.运动器材n4.衣服n请输入1-4:"); scanf("%d",&x1); printf("请输入商品名称:"); scanf("%s",&name); for(i=1;i<(listqx10.lin_len+1);i+) if(strcmp(,name)=0) strcpy(,name); a.count=a.count+listqx1i.count; printf(

25、"%s:",); printf("库存:%d",a.count);3.5 用户界面设计 本实验采用dos界面。通过输出等函数使界面尽量做的美观。每一层都有返回上一层和返回主界面的功能。首先第一个页面是登陆注册找回密码界面,登陆界面进入后到达程序的主界面,也就是主要功能的界面,此界面包括入库,出库,商品库存查询,商品信息查询等功能。第一个界面程序主界面4 方案实现4.1 开发环境与工具开发环境:Console application控制平台开发工具:codeblocks4.2 程序设计关键技术 1.采用邻接表、顺序表的结构存储信息,并将信息从邻

26、接表存储到顺序表然后转存到 文件中,程序运行时,将文件中信息读取到顺序表中,进而构造邻接表用来存储信息,最终实现对邻接表的操作。 2.加密功能采用抑或的方式,使得程序安全性提高 3.对邻接表的遍历,输出,查找。4.3 个人设计实现(按组员分工)4.3.1 宋振程序设计实现/*结构体的设计*/struct commodity char name20; char brand20; float purprice; /商品进价 float selprice; /售价 int count; /数量 char purtime20; /进货时间 char seltime20; /出货时间 char unit

27、20; /计量单位 char brokerage20; /经手人 char abstract20; /摘要 struct commodity *next; int lin_len; /链表有多少节点 int sign; /做相同累加运算时的标记位 Lnode,*Linklist,list20520; struct user char account20; /账户 char code20; /密码 char name20; char question40; char answer20; /提示问题的答案 int rec_len; /验证密码是否正确 struct commodity rec5;

28、/个人信息中增加的买卖记录,max1代表一个人最多可以存多少条记录 int list_len;umax1; /max1代表最多可以存多少个人的信息。 void backgroundset( ); /背景颜色设置函数/*匹配账号是否正确*/int lookup_accounts(struct user u,char acc) int i; for(i=0;i<max1;i+) if(strcmp(ui.account,acc)=0) return ok; return null; /*匹配密码是否正确*/ struct user check_code(struct user u,char

29、acc,char c) struct user a; int i=0; a.rec_len=0; for(i=0;i<max1;i+) if(strcmp(ui.account,acc)=0) if(strcmp(ui.code,c)=0) return ui; else return a; /*注册功能*/int regist(struct user u) /是将注册的新账号传递给ui,然后使用save函数保存到文件 char account20; char code20; char name20; char question40; char answer20; int m; int

30、fh2=0; printf("nnnnnnn"); do fh2=0; /每次都初始化,防止fh2,即使账号不重复也循环 printf("tt 要注册的账号(10个字以内,否则后果自负):"); scanf("%s",account); if(strlen(account)>20) /确定账号不溢出 system("cls"); printf("nnnnnnnnnnn"); printf("tttt溢出了,同学!"); printf("nnnnnnnnnn&q

31、uot;); Sleep(2000); exit(0); else printf("n"); for(m=0;m<max1;m+) if(strcmp(um.account,account)=0) printf("tt 该账号已存在!请重新输入!nn"); fh2=1; /注册账号重复返回功能 while(fh2); printf("tt 请设置密码:"); scanf("%s",code); printf("n"); printf("tt 请输入姓名:"); scan

32、f("%s",name); printf("n"); printf("tt 请输入密保提示问题:"); scanf("%s",question); printf("n"); printf("tt 请输入密保答案:"); scanf("%s",answer); printf("n"); printf("tt 恭喜您,%s同学成功注册账号nn",name); strcpy(uu0.rec_len.account,acco

33、unt); strcpy(uu0.rec_len.code,code); strcpy(uu0.rec_,name); strcpy(uu0.rec_len.question,question); strcpy(uu0.rec_len.answer,answer); u0.rec_len+; jm(u); save(u); load(); jm(u); /*找回密码功能*/int getcode(struct user u) char account20; char answer20; char name20; int m=0; int i; printf("nnnn

34、nnnnn"); printf("tt 请输入要找回的账号:"); scanf("%s",account); printf("n"); for(i=0;i<max1;i+) if(strcmp(ui.account,account)=0) printf("tt %s:",ui.question); scanf("%s",answer); printf("n"); if(strcmp(ui.answer,answer)=0) printf("tt 请输

35、入姓名:"); scanf("%s",name); printf("n"); if(strcmp(,name)=0) m=1; system("cls"); printf("nnnnnnnnnnnntt 信息验证正确!nn"); printf("tt 您的密码是:%s",ui.code); if(m=0) printf("tt 输入有误哦!"); /*加密功能*/int jm(struct user u) int acc_len; int cod_le

36、n; int nam_len; int qus_len; int ans_len; int com_name_len; int com_brand_len; int pur_price_len; int sel_price_len; int pur_time_len; int sel_time_len; int brokerage_len; int abstract_len; int unit_len; int count_len; int i=0,j; int m=0; int n=0; for(i=0;i<5;i+) acc_len=strlen(ui.account); cod_l

37、en=strlen(ui.code); qus_len=strlen(ui.question); ans_len=strlen(ui.answer); nam_len=strlen(); for(n=0;n<5;n+) com_name_len=strlen(); com_brand_len=strlen(ui.recn.brand); pur_time_len=strlen(ui.recn.purtime); sel_time_len=strlen(ui.recn.seltime); brokerage_len=strlen(ui.recn.bro

38、kerage); abstract_len=strlen(ui.recn.abstract); unit_len=strlen(ui.recn.unit); for(m=0;m<com_name_len;m+) m=m(m%com_name_len); for(m=0;m<com_brand_len;m+) ui.recn.brandm=ui.recn.brandm(m%com_brand_len); for(m=0;m<sel_time_len;m+) ui.recn.seltimem=ui.recn.seltimem(m%s

39、el_time_len); for(m=0;m<pur_time_len;m+) ui.recn.purtimem=ui.recn.purtimem(m%pur_time_len); for(m=0;m<brokerage_len;m+) ui.recn.brokeragem=ui.recn.brokeragem(m%brokerage_len); for(m=0;m<abstract_len;m+) ui.recn.abstractm=ui.recn.abstractm(m%abstract_len); for(m=0;m<unit_len;m+) ui.recn.unitm=ui.recn.unitm(m%unit_len); for(n=0;n<5;n+) ui.recn.count=ui.rec

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论