当前位置:文档之家› 【数据结构】超市商品库存信息管理系统

【数据结构】超市商品库存信息管理系统

东北大学信息科学与工程学院数据结构课程设计报告题目超市商品库存信息管理系统课题组长宋振课题组成员常玉颖于红爽专业名称计算机科学与技术班级计1307指导教师杨雷2015 年1月课程设计任务书目录1 课题概述 (4)1.1 课题任务 (4)1.2 课题原理 (4)1.3 相关知识 (4)2 需求分析 (5)2.1 课题调研 (5)2.2 用户需求分析 (5)3 方案设计 (5)3.1 总体功能设计 (5)3.2 数据结构设计 (10)3.3 函数原型设计 (11)3.4 主算法设计 (12)3.5 用户界面设计 (14)4 方案实现 (15)4.1 开发环境与工具 (15)4.2 程序设计关键技术 (16)4.3 个人设计实现(按组员分工)4.3.1 宋振设计实现 (17)4.3.2 常玉颖设计实现 (17)4.3.3于红爽设计实现 (17)5 测试与调试 (23)5.1 个人测试(按组员分工) (23)5.1.1 宋振测试 (23)5.1.2 常玉颖测试 (23)5.1.3 于红爽测试 (23)5.2 组装与系统测试 (33)5.3 系统运行 (36)6 课题总结 (39)6.1 课题评价 (39)6.2 团队协作 (40)6.3 团队协作 (41)6.4 个人设计小结(按组员分工) (42)6.4.1宋振设计小结 (42)6.4.2 常玉颖设计小结 (42)6.4.3 于红爽设计小结 (42)7 附录A 课题任务分工 (50)A-1 课题程序设计分工 (50)A-2 课题报告分工 (51)附录B 课题设计文档(光盘) (52)B-1课程设计报告(电子版) (52)B-2源程序代码(*.H,*.CPP) (52)B-3工程与可执行文件) (52)B-4屏幕演示录像文件(可选) (52)附录C 用户操作手册(可选) (53)C.1 运行环境说明 (53)C.2 操作说明 (54)1 课题概述1.1课题任务超市商品库存信息管理系统【问题描述】对一个中小型超市的库存商品信息管理作一个简单的模拟。

【设计要求】设计超市库存商品信息维护管理的模拟程序。

(1)采用顺序表或结构体链表存储结构。

(2)实现超市商品的创建、分类、出库、入库、修改等管理功能。

(3)实现库存商品的各种查询和统计功能。

(4)考虑采用优化的查询和排序算法。

(5)其它完善性功能。

1.2 课题原理本程序采用邻接表的结构,将用户信息存在邻接表的顺序表中,将入库出库的商品信息存储在链表中。

程序运行前,将文件中的信息读入一个三维数组中,然后把三维数组读入邻接表中。

程序运行结束后,将邻接表的信息存储到三维数组中,再将三维数组的信息转存到文件中,实现了信息的长久存储。

总而言之,本实验的入库出库查询等功能,均是对邻接表的操作,存储是借助了一个三维数组存入到文件中。

1.3 相关知识数据结构:邻接表、邻接表的遍历,排序、查找、文件、顺序表。

2 需求分析2.1 课题调研本实验开始之前,询问了几家中小型超市,了解了他们商品库存运营的模式。

每一件商品都经历了入库、在库、出库三个过程。

入库需要的商品信息比较多,包括商品名称,入库时间,入库价格,入库数量,计量单位,经手人等相关信息。

而出库,在需要出售价格,出售数量,出手日期,经手人即可。

2.2 用户需求分析现代中小型超市基本都要走向实现商品信息智能化管理的道路,而商品库存管理系统能够有效的帮助他们记录每天的进账,出账,库存和交易记录。

此系统有效地解决了传统记账的繁琐,账本数据易丢失,账本信息不安全等问题,是未来包括超市在内的商店运营必备的产品。

3 方案设计3.1 总体功能设计该程序主要分为以下几大功能,包括入库,出库,以及对库存的操作。

对库存的操作又包括分类,查询等功能。

而查询又包括按商品名称查询,按商品交易记录查询等子功能。

而这些均建立在对邻接表的操作基础上实现的。

3.2 数据结构设计程序的数据结构包括邻接表、顺序表。

顺序表用来存储从客户端输入的商品入库出库信息,然后读入邻接表中,邻接表的顺序表存储用户信息,链表存储商品信息。

struct commodity//商品信息的结构体{char name[20];char brand[20];float purprice; //商品进价float selprice; //售价int count; //数量char purtime[20]; //进货时间char seltime[20]; //出货时间char unit[20]; //计量单位char brokerage[20]; //经手人char abstract[20]; //摘要struct commodity *next;int lin_len; //链表有多少节点int sign; //做相同累加运算时的标记位}Lnode,*Linklist,list[20][5][20];struct user{ //用户信息的结构体char account[20]; //账户char code[20]; //密码char name[20];char question[40];char answer[20]; //提示问题的答案int rec_len; //验证密码是否正确struct commodity rec[5]; //个人信息中增加的买卖记录,max1代表一个人最多可以存多少条记录int list_len;}u[max1];3.3 函数原型设计void backgroundset( ); //背景颜色设置函数void outsert_com(struct user u[],int q);void insert_com(struct user u[],int q);int jm(struct 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[]); //查找账户是第几个用户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 list[20][5][20],int q,int row);void search(struct user u[],int q);void com_remain(struct user u[],int q);void load2();3.4 主算法设计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=&u[q].rec[x2];for(i=0;i<list[q][x2][0].lin_len;i++){a=a->next;}a=InitLnode(a);printf("商品名称:");scanf("%s",&a->name);printf("\n");printf("商品品牌:");scanf("%s",&a->brand);printf("\n");printf("商品进价:");scanf("%f",&a->purprice);printf("\n");printf("商品售价:");scanf("%f",&a->selprice);printf("\n");printf("商品数量:");scanf("%d",&a->count);printf("\n");printf("商品进货时间:");scanf("%s",&a->purtime);printf("\n");printf("商品经手人:");scanf("%s",&a->brokerage);printf("\n");printf("商品摘要:");scanf("%s",&a->abstract);printf("\n");printf("计量单位:");scanf("%s",&a->unit);list[q][x2][0].lin_len++; //正确已验证,但是关闭程序再重启便没有,则说明save2或者load2有问题jm(u);save2();jm(u);}/**********************************************************/void outsert_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=&u[q].rec[x2];for(i=0;i<list[q][x2][0].lin_len;i++){a=a->next;}a=InitLnode(a);printf("商品名称:");scanf("%s",&a->name);printf("\n");printf("商品数量:");scanf("%d",&a->count);for(i=1;i<(list[q][x2][0].lin_len+1);i++){if(strcmp(a->name,list[q][x2][i].name)==0){strcpy(a->purtime,list[q][x2][i].purtime);strcpy(a->seltime,list[q][x2][i].seltime);strcpy(a->unit,list[q][x2][i].unit);strcpy(a->abstract,list[q][x2][i].abstract);a->purprice=list[q][x2][i].purprice;break;}}list[q][x2][0].lin_len++; //正确已验证,但是关闭程序再重启便没有,则说明save2或者load2有问题jm(u);save2();jm(u);}/***********************************************************/void remain(struct commodity list[20][5][20],int q,int row){ //商品库存信息int i,j,k,m;for(i=0;i<20;i++){list[q][row][i].sign=0;}struct commodity a[20];for(i=0;i<20;i++){a[i].count=0;}for(i=0;i<20;i++){strcpy(a[i].name,"0");}for(k=1;k<19;k++){once=0;for(m=k+1;m<20;m++){if(list[q][row][k].sign==0){strcpy(a[k].name,list[q][row][k].name);if(once==0){a[k].count=list[q][row][k].count;once++;}if(strcmp(list[q][row][k].name,list[q][row][m].name)==0){a[k].count=a[k].count+list[q][row][m].count;list[q][row][m].sign++;}}}}if(list[q][row][k].sign==0){strcpy(a[k].name,list[q][row][k].name);}for(i=0;i<20;i++){printf("%s:",a[i].name);printf("剩余库存:%d",a[i].count);printf("\n");}}/*************************************************************/void search(struct user u[],int q){ //按商品名称输出交易记录int xo;int i,j;char time[20],name[20];printf(".按商品名称查询");printf("请输入某类产品:\n");printf("请输入您要查询的种类\n1.食品\n2.家电\n3.运动器材\n4.衣服\n请输入1-4:");scanf("%d",&xo);switch(xo){case 1:printf("请输入您要查询的商品名称:");scanf("%s",&name);for(j=1;j<(list[q][xo][0].lin_len+1);j++){if(strcmp(list[q][xo][j].name,name)==0){printf("%s:\n",list[q][xo][j].name);printf("数量:%d\n",list[q][xo][j].count);}}break;case 2:printf("请输入您要查询的商品名称:");scanf("%s",&name);for(j=1;j<(list[q][xo][0].lin_len+1);j++){if(strcmp(list[q][xo][j].name,name)==0){printf("%s:\n",list[q][xo][j].name);printf("数量:%d\n",list[q][xo][j].count);}}break;case 3:printf("请输入您要查询的商品名称:");scanf("%s",&name);for(j=1;j<(list[q][xo][0].lin_len+1);j++){if(strcmp(list[q][xo][j].name,name)==0){printf("%s:\n",list[q][xo][j].name);printf("数量:%d\n",list[q][xo][j].count);}}break;case 4:printf("请输入您要查询的商品名称:");scanf("%s",&name);for(j=1;j<(list[q][xo][0].lin_len+1);j++){if(strcmp(list[q][xo][j].name,name)==0){printf("%s:\n",list[q][xo][j].name);printf("数量:%d\n",list[q][xo][j].count);}}break;}}/**********************************************************/void com_remain(struct user u[],int q) //查询某类商品的库存记录{int x1,i,j;char name[20];float count;struct commodity a;struct commodity *p;a.count=0;printf("输入您要查询的商品种类:");printf("请输入您要查询的种类\n1.食品\n2.家电\n3.运动器材\n4.衣服\n请输入1-4:");scanf("%d",&x1);printf("请输入商品名称:");scanf("%s",&name);for(i=1;i<(list[q][x1][0].lin_len+1);i++){if(strcmp(list[q][x1][i].name,name)==0){strcpy(,name);a.count=a.count+list[q][x1][i].count;}}printf("%s:",);printf("库存:%d",a.count);}3.5 用户界面设计本实验采用dos界面。

相关主题