当前位置:首页 >> 计算机软件及应用 >>

数据结构课程设计实习-仓库进销存管理系统


数据结构与算法 课程设计报告

题 学

目: 院:

仓库进销存管理系统 计算机与控制工程学院 软件 101 王海川 王一萍

专业班级: 学生姓名: 指导教师:

2012 年 06 月 2 9 日

综合实践 1 评分表
班级 题目: 评分标准
评分标准 选题 分数权重 A 10 评分的依据 C 得分

姓名

指导教师

选题符合大纲要求,题 选题基本符合大纲要 目较新颖,工作量大 求,工作量适中 态度端正,能主动认真 完成各个环节的工作, 不迟到早退,出勤好。 能正确选择存储结构, 定义准确,算法流程图 或类 C 语言描述的算 法准确无误 具有独立分析、解决问 题能力,有一定的创造 性,能够独立完成软件 的设计与调试工作,程 序结构清晰,逻辑严 谨,功能完善。 能准确回答老师提出 的问题 程序运行正确、界面清 晰,测试数据设计合 理。 格式规范,层次清晰, 设计思想明确,解决问 题方法合理,体会深 刻。 总分 能够完成各环节基本 工作,出勤较好。 能正确选择存储结构, 算法流程图或类 C 语 言描述的算法基本准 确 有一定的分析、 解决问 题能力。 能够在老师指 导下完成软件的设计 与调试工作, 程序功能 较完善。 能基本准确回答老师 提出的问题 程序运行正确、 界面较 清晰, 能给出合适的测 试数据。 格式较规范, 设计思想 基本明确, 解决问题方 法较合理。

工作态度

10

存储结构、算 法描述

20

独立解决问题 的能力

10

答辨问题回答 程序运行情况

20 10

综合实践报告

20

指导教师(签字) : 注:介于 A 和 C 之间为 B 级,低于 C 为 D 级和 E 级。按各项指标打分后,总分 在 90~100 为优, 80~89 为良, 70~79 为中, 60~69 为及格, 分以下不及格。 60





1. 问题描述????????????????????????????1 2. 需求分析????????????????????????????1 3. 软件概要设计??????????????????????????2 3.1 设计分析 ??????????????????????????2 3.1.1 设计理念 ????????????????????????2 3.1.2 设计框架 ????????????????????????2 4. 软件详细设计??????????????????????????3 4.1 数据流程及结构应用 ?????????????????????3 4.1.1 数据结构应用 ??????????????????????3 4.1.2 主要流程图 ???????????????????????3 4.2 主要函数设计 ????????????????????????4 4.2.1 主函数的设计? ?????????????????????4 4.2.2 录入函数的设计 ?????????????????????5 4.2.3 查找函数的设计 ?????????????????????7 4.2.4 删除函数的设计 ?????????????????????8 4.2.5 排序函数的设计 ?????????????????????9 5. 软件测试分析 ?????????????????????????11 5.1 函数模块的设计???????????????????????11 5.1.1 登录函数的测试?????????????????????11 5.1.2 录入函数的测试?????????????????????12 5.1.3 查找函数的测试?????????????????????12 5.1.4 修改函数的测试?????????????????????13 5.1.5 插入函数的测试?????????????????????13 5.1.6 删除函数的测试?????????????????????14 5.1.7 排序函数的测试?????????????????????14 5.2 文件模块的测试???????????????????????15 5.2.1 文件读取的测试?????????????????????15 5.2.2 文件写入的测试?????????????????????15 6. 课程设计总结 ?????????????????????????16 7. 参考文献 ???????????????????????????16 附录

1.问题描述
仓库管理的重要性: 仓库作为一总货品资源的集散地,货品的种类繁多,包含很多的信息数据管 理。据调查得知,以前仓库进行信息管理的方式主要是基于文本、表格等纸介质 的手工处理, 对于货品的出入库情况的统计和核实等旺旺采用对账本的的人工检 查, 对管理者的管理权限的不受约束, 任何人都可以查看, 引起资料外泄。 另外, 数据信息处理工作量大,容易出错,不宜查找。而且,一般储存情况是记录在账 本上的, 仓库管理人员也只是当时记得比较清楚, 时间长了进行查询会造成费事、 费时、费力,如对很长时间的商品以及大量商品进行管理就更加困难了。因此我 们很有必要建立一个仓库进销存管理系统, 使商品管理工作更加规范化、 系统化、 程序化,提高信息处理的速度和准确性。

2.软件需求分析
商场购物已成为每家每户生活中必须的经历,随着人流量的增大。商场出售 的商品种类也越来越多, 商场的仓库需要有规格有条理的管理方式,灵活记录每 天的情况。针对上面的情况,开发一个系统软件成为必然。该系统需要能够 方 便的对每天进销存货操作和每天的销售额及库存量进行记录, 能够给小型商场提 供诸多方便。因此,商场库存系统应运而生。 功能需求: (1)用户自行注册登录,保证仓库商品信息的保密性。 (2)仓库各种商品信息的输入,主要包括商品名称、数量、类别、日期等。 (3)仓库各种商品信息的查询、修改和维护。 (4)对仓库中损坏商品信息的删除。 (5)仓库商品信息列表的生成显示。 (6)实现商品信息对文本中的保存。

3.软件概要设计
3.1 设计分析
3.1.1 设计理念 仓库存系统主要运用了数据结构中线性表的链式存储, 链式存储空间的可扩 展性大,将链表中的数据以文件的形式保存,程序功能包括初始化、创建表、插 入、删除和查找等,以最少的内存使用和最高的效率为原则,实现客户的需求。 进入主菜单,选择相应的功能按照提示即可进入相应的操作。 主菜单主要实现以下函数模块功能: (1)录入商品函数 LinkList goods_input()//运用链式存储 void file_write(Node *p) LinkList file_read() 商品信息写入文件的函数 文件中的信息读出的函数 (2)查找商品函数 (3)修改信息函数 (4)插入商品函数 (5)删除商品函数

void goods_find() void goods_change() void goods_insert() void goods_delete() void goods_rank()

(6)商品信息排序函数 3.1.2 设计框架

4.软件详细设计
4.1 数据流程及结构应用
4.1.1 数据结构应用 为了能够提高内存的利用及各功能的实现,程序主要使用了: (1)线性表的链式存储,分配存储空间,空间可扩展性强,方便频繁的录入、 插入、查找、删除和排序等而不占用多余的内存。 (主要应用) (2)文件文本的读取与写入,为了方便用户更加快速的执行管理操作。 (3)结构体的定义,定义了商品结构体和日期结构体。 (4)登录用户时的字符串读取及验证。 4.1.2 主要流程图

图 4-1 程序流程图

4.2 主要函数设计
4.2.1 主函数的设计 程序启动进入主函数,进入主菜单 界面和用户进行交互。用户可以直接明 了的清楚软件的功能项目,调用各个模块的功能项目,进行选择。
void main() { int c; key(); do { printf("请按任意键返回主菜单!"); getch(); system("cls"); printf("\n**************************** 欢 迎 进 入 商 场 货 物 管 理 系 统 ****************************\n\n"); printf(" 1: 录入商品信息;\n"); printf(" 2: 查找商品信息;\n"); printf(" 3: 修改商品信息;\n"); printf(" 4: 插入商品信息;\n"); printf(" 5: 删除商品信息;\n"); printf(" 6: 商品信息排序;\n"); printf(" 7: 统计商品信息;\n"); printf(" 0: 退出系统;\n"); printf(" 请选择(0~7): "); scanf("%d",&c); while(1) { if(c==1||c==2||c==3||c==4||c==5||c==6||c==7||c==0)break; else { printf("\n 输入有误,请重新输入!\n 清选择(0~7):"); scanf("%d",&c); if(c==1||c==2||c==3||c==4||c==5||c==6||c==7||c==0) break; } } switch(c) { case 1:goods_input();break; case 2:goods_find();break;

case 3:goods_change();break; case 4:goods_insert();break; case 5:goods_delete();break; case 6:goods_rank();break; case 7:goods_tongji();break; case 0 :break; } }while(c!=0); }

4.2.2 录入函数的设计 数据录入是该软件必备的基本功能当链表为空时, 对商品信息变量 “商品号” 判断并进行录入,系统调用录入函数,在用户输入商品信息后添加到链表里,在 添加过程中按提示自动插入到相应位置。添加成功后,返回主菜单并提示用户保 存到自建的文本中,并可以根据各个模块要求进行读取修改。
LinkList goods_input() { LinkList L; Node *p1,*p2; int i=1; void file_write(Node *p); int flag=1; L=p2=(Node*)malloc(sizeof(Node));//为头节点分配存储空间 while(flag) { p1=(Node*)malloc(sizeof(Node)); printf("请输入第%d 种商品的信息(商品号为 0 时,结束商品输入):\n\n",i++); flushall(); printf("商品号:"); scanf("%ld",&p1->num); if(p1->num!=0) { flushall(); printf("名称:"); scanf("%s",&p1->name); flushall(); printf("类别:"); scanf("%s",&p1->kind); flushall(); printf("生产日期(年月日用空格隔开):");

scanf("%d%d%d",&p1->pro_date.year,&p1->pro_date.month,&p1->pro_date.day); flushall(); printf("保质期:"); scanf("%d",&p1->save_day); flushall(); printf("商品数量:"); scanf("%d",&p1->shuliang); flushall(); printf("进价:"); scanf("%f",&p1->jinjia); flushall(); printf("售价:"); scanf("%f",&p1->shoujia); flushall(); printf("销售日期(年月日用空格隔开):"); scanf("%d%d%d",&p1->sale_date.year,&p1->sale_date.month,&p1->sale_date.day); p2->next=p1; p2=p1; } else { flag=0; break; } } p2->next=NULL; file_write(L); free(p1); return(L); }

保存文本文件的读写函数模块:
void file_write(Node *p) //将商品信息写入文件 { } LinkList file_read()//将文件中的信息读出的函数 { }

4.2.3 查找函数的设计 查找商品是信息管理的基本功能, 当数据很多时怎么快速找到商品对管理员

来说很重要,系统调用查找函数模块,显示查找菜单。根据提示输入需要查找的 “商品号”进行查找,查找成功,用户会看到查找商品的详细信息,如没有该商 品,则查找失败,查找函数设计:
void goods_find() { long snum; int flag=0,t; Node *p0,*p1; p1=p0=file_read(); while(1) { flag=0; printf("请输入你要查找的商品信息的商品号:"); scanf("%ld",&snum); while( p0->next!=NULL) { p0=p0->next; if(p0->num==snum) { flag=1; break; } } if(flag==1) { printf("该商品的信息如下:\n\n"); printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销 售日期\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-% 02d",p0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0 ->pro_date.day,p0->save_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sa le_date.year,p0->sale_date.month,p0->sale_date.day); } else printf("此商品号不存在,查找失败!\n"); p0=p1; printf("结束查找按 0,继续查找按 1:"); scanf("%d",&t); if(t==0) break; } }

4.2.4 删除函数的设计 删除是一项对数据管理的功能,将过期的商品信息删除,以免影响仓库管 理,删除函数的原理和查找函数原理一样,只是在输入“商品号”找到对应的商 品后删除该结点,就会删除该商品的所有详细信息,并提示用户保存!
void goods_delete() { long num; Node *p,*p0,*p1,*p2; int flag=0,t; p0=file_read(); while(1) { flag=0; p1=p2=p0; p=p1->next; if(p==NULL) flag=0; printf("请输入你要删除的商品的商品号:"); scanf("%ld",&num); while(p!=NULL) { if(p->num==num) { p1->next=p->next; free(p); flag=1; break; } p1=p; p=p->next; flag=0; } if(flag==1) printf("你已正确删除!\n"); else printf("你输入的商品号不存在!\n"); printf("结束删除按 0,继续删除按 1:"); scanf("%d",&t); if(t==0) break; } p0=p0->next; printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期

\n"); while(p0!=NULL) { printf("-------------------------------------------------------------------------------\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p0-> num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0>save_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date. month,p0->sale_date.day); p0=p0->next; } file_write(p2); }

4.2.5 排序函数的设计 商品信息排序,为了可以更清楚的了解到商品库存量的多少,方便于管理者 对商场商品的销售政策和对即将过期商品的多少有所了解, 使仓库管理员更直观 的了解到仓库库存。该函数找到商品的记录信息按照商品数量从小到大重新排 序,排序完后,返回主菜单并提示用户保存!
void goods_rank() { Node *p,*q,*k,*L,t; Node *p0; int flag=0; L=file_read(); p=L->next; while(p->next) { k=p; q=p->next; while(q) { if((k->shuliang)>(q->shuliang)) k=q; q=q->next; } if(p!=k) { t=*p; *p=*k; *k=t;

t.next=p->next; p->next=k->next; k->next=t.next; flag=1; } p=p->next; } if(flag=1) printf("按商品数量从小到大排序成功!\n"); else printf("按商品数量从小到大排序失败!\n"); p0=L; p0=p0->next; printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期 \n"); while(p0!=NULL) {printf("-------------------------------------------------------------------------------\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d", p0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day ,p0->save_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_d ate.month,p0->sale_date.day); p0=p0->next; } file_write(L); }

5.软件测试分析
5.1 函数模块的测试
5.1.1 登录函数的测试

图 5-1-1 登录测试(a) (b)

5.1.2 录入商品函数的测试

图 5-1-2 录入商品信息测试

5.1.3 查找商品函数的测试

图 5-1-3 查找商品信息测试

5.1.4 修改商品函数的测试

图 5-1-4 修改商品信息测试

5.1.4 插入商品函数的测试

图 5-1-4 插入商品信息测试

5.1.5 删除商品函数的测试

图 5-1-5 删除商品信息测试

5.1.6 商品排序函数的测试

图 5-1-6 商品信息排序测试

5.2 文件模块的的测试
5.2.1 文件读取测试

图 5-2-1 文件读取

5.2.2 文本写入测试

图 5-2-2 文本写入

6.课程设计总结
经过近两周的课程设计实习过程中我学到了很多, 我做的是商场仓库管理系 统,这个系统基本完成了预期的一些基本功能(商品信息的录入、删除、查找和 修改等) ,实现了仓库管理的信息化,满足了客户对于基本仓库管理的需求。这 次课程设计中, 各个功能模版的执行主要运用了本学期学习的数据结构中的线性 表链式存储的方式,节点的插入删除等 。让我们再一次在应用中对线性表的运 用有所提高,并加深了数据结构与实际应用的联系。 此外,这次的课程设计,还加强了我们动手、思考和解决问题的能力。巩固 和加深了对数据结构的理解, 提高综合运用本课程所学知识的能力。培养了我选 用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、 解决问题的能力。通过实际编译系统的分析设计、编程调试,掌握应用软件的分 析方法和工程设计方法。 而且做课程设计同时也是对课本知识的巩固和加强,平 时看课本时, 有些问题就不是很能理解, 做完课程设计, 那些问题就迎刃而解了。 而且还可以记住很多东西。认识来源于实践,实践是认识的动力和最终目的,实 践是检验真理的唯一标准。 所以这个期末测试之后的课程设计对我们的作用是非 常大的。

7.参考文献
严蔚敏, 吴伟民. 数据结构(C 语言版). 北京: 清华大学出版社, 1997.4 严蔚敏, 吴伟民, 米宁. 数据结构题集(C 语言版). 北京: 清华大学出版 社, 1999.2

附录
使用说明: 本系统软件为仓库管理中的基本软件,实现功能为商品信息的录入、查找、 删除、修改和查看等。用户首先需要注册然后登录到主菜单,按菜单提示选择相 应的模块操作进行仓库管理的实施。 用户还可以在创建的文本中直接查看保存的 商品信息,方便用户直接的对仓库的管理与查看。使用流程按提示操作即可。

源代码:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> //日期结构体 typedef struct { int year; int month; int day; }DATE; //商品结构体 //定义链表 typedef struct Node { long num; char name[20]; char kind[20]; DATE pro_date; int save_day; int shuliang; float jinjia; float shoujia; DATE sale_date; struct Node *next; }Node,*LinkList; //申请函数 void apply() { int i,flag=1; FILE *fp; char name[20],key[20]; flushall(); printf("用户名(不能为空):"); scanf("%s",name); flushall(); printf("密码(不能为空):"); for(i=0;i<=20;i++) { key[i]=getch(); if(key[i]==13)

{ key[i]='\0'; break; } printf("*"); } fp=fopen("key.txt","w"); if(fp==NULL) { printf("the file can not open!"); flag=0; exit(1); } fprintf(fp,"%s %s",name,key); fclose(fp); if(flag==1) printf("\n 申请成功,请登录!\n"); else printf("\n 申请失败,请重新申请!\n"); } //登录函数 int load() { FILE *fp; int i; char name[20],key[20]; char name1[20],key1[20]; fp=fopen("key.txt","r"); fscanf(fp,"%s %s",name,key); fclose(fp); printf("用户名(不能为空):"); scanf("%s",name1); flushall(); printf("密码(不能为空):"); for(i=0;i<=20;i++) { key1[i]=getch(); if(key1[i]==13) { key1[i]='\0'; break; } printf("*"); }

printf("\n"); if(strcmp(name1,name)==0&&strcmp(key1,key)==0) { printf("登陆成功!\n\n");return 1; } else { printf("用户名或密码错误;请重新登录!"); return 0;} } //密码保护系统 void key() { int choice,c; do { printf("\n**************************** ********************************\n\n"); printf(" 1: 新用户注册; printf(" 2: 新用户登录; printf("请选择:"); scanf("%d",&choice); switch(choice) { case 1: apply(); break; case 2: c=load();break; } }while(c!=1); } LinkList goods_input() {













\n\n"); \n\n");

LinkList L; Node *p1,*p2; int i=1; void file_write(Node *p); int flag=1; L=p2=(Node*)malloc(sizeof(Node));//为头节点分配存储空间 while(flag) { p1=(Node*)malloc(sizeof(Node)); printf("请输入第%d 种商品的信息(商品号为 0 时,结束商品输入):\n\n",i++); flushall(); printf("商品号:"); scanf("%ld",&p1->num); if(p1->num!=0) { flushall();// i/o 库函数 清除缓冲

printf("名称:"); scanf("%s",&p1->name); flushall(); printf("类别:"); scanf("%s",&p1->kind); flushall(); printf("生产日期(年月日用空格隔开):"); scanf("%d%d%d",&p1->pro_date.year,&p1->pro_date.month,&p1->pro_date.day); flushall(); printf("保质期:"); scanf("%d",&p1->save_day); flushall(); printf("商品数量:"); scanf("%d",&p1->shuliang); flushall(); printf("进价:"); scanf("%f",&p1->jinjia); flushall(); printf("售价:"); scanf("%f",&p1->shoujia); flushall(); printf("销售日期(年月日用空格隔开):"); scanf("%d%d%d",&p1->sale_date.year,&p1->sale_date.month,&p1->sale_date.day); p2->next=p1; p2=p1; } else { flag=0; break; } } p2->next=NULL; file_write(L); free(p1); return(L); } //将商品信息写入文件 void file_write(Node *p) { FILE *fp;

char filename[50];int c; printf("是否保存?(保存按 1;不保存按 0):"); scanf("%d",&c); if(c==1) { flushall(); printf("\n 为了将你操作的信息保存下来,请输入要写入的文件的路经或文件:"); gets(filename); fp=fopen(filename,"w");//文件写入 if(fp==NULL) { printf("\n this file can not be open!"); exit(1); } p=p->next; while(p!=NULL) { fprintf(fp,"%ld %s %s %d %d %d %d %d %f %f %d %d %d\n",p->num,p->name,p->ki nd,p->pro_date.year,p->pro_date.month,p->pro_date.day,p->save_day,p->shuliang,p->jinjia ,p->shoujia,p->sale_date.year,p->sale_date.month,p->sale_date.day); p=p->next; } fclose(fp); printf("文件保存成功!"); }

} //将文件中的信息读出的函数 LinkList file_read() { FILE *fp; LinkList L; Node *p1,*p2; char filename[50]; int i,k=0,t=-2; flushall(); printf("请输入要读取的文件的路径或文件名:"); gets(filename); flushall(); printf("请输入商品的种类数:"); scanf("%d",&i); fp=fopen(filename,"r");//文件读出 L=p2=(Node*)malloc(sizeof(Node));//为头节点分配存储空间

while(t!=EOF&&k<i) { p1=(Node*)malloc(sizeof(Node)); t=fscanf(fp,"%ld %s %s %d %d %d %d %d %f %f %d %d %d",&p1->num,p1->name,p 1->kind,&p1->pro_date.year,&p1->pro_date.month,&p1->pro_date.day,&p1->save_day,&p 1->shuliang,&p1->jinjia,&p1->shoujia,&p1->sale_date.year,&p1->sale_date.month,&p1->sa le_date.day); p2->next=p1; p2=p1; k++; } p2->next=NULL; fclose(fp); return L; } //查找商品信息 void goods_find() { long snum; int flag=0,t; Node *p0,*p1; p1=p0=file_read(); while(1) { flag=0; printf("请输入你要查找的商品信息的商品号:"); scanf("%ld",&snum); while( p0->next!=NULL) { p0=p0->next; if(p0->num==snum) { flag=1; break; } } if(flag==1) { printf("该商品的信息如下:\n\n"); printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期 \n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p 0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0->s

ave_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date.month,p0->s ale_date.day); } else printf("此商品号不存在,查找失败!\n"); p0=p1; printf("结束查找按 0,继续查找按 1:"); scanf("%d",&t); if(t==0) break; } } //修改商品信息 void goods_change() { Node *p1,*p0,*p2; int c,flag=0,t; long snum; p2=p0=file_read(); while(1) { flag=0; p1=p0->next; if(p1==NULL) flag=0; printf("请输入你要修改的商品信息的商品号:"); scanf("%ld",&snum); while(p1!=NULL) { if(p1->num==snum) { flag=1; break; } p1=p1->next; } if(flag==1) { printf(" 1:商品号;\n"); printf(" 2: 商品名称;\n"); printf(" 3: 商品类别;\n"); printf(" 4: 商品生产日期;\n"); printf(" 5: 商品保质期;\n"); printf(" 6: 商品数量\n"); printf(" 7: 商品进价\n"); printf(" 8: 商品售价\n");

printf(" 9: 商品销售日期\n"); printf(" 请选择修改的内容(1~9):"); scanf("%d",&c); while(1) { if(c==1||c==2||c==3||c==4||c==5||c==6||c==7||c==8||c==9)break; else { printf("\n 输入有误,请重新输入!\n 清选择(1~9):"); scanf("%d",&c); if(c==1||c==2||c==3||c==4||c==5||c==6||c==7||c==8||c==9) break; } } switch(c) { case 1: { printf("\n 输入修改后的商品号:"); scanf("%ld",&p1->num);break; } case 2: { printf("输入修改后的商品名:"); scanf("%s",&p1->name);break; } case 3: { printf("输入修改后的商品类别:"); scanf("%s",&p1->kind);break; } case 4: { printf("输入修改后的商品生产日期(年月日之间用空格隔开):"); scanf("%d%d%d",&p1->pro_date.year,&p1->pro_date.month,&p1->pro_date.day);break; } case 5: { printf("输入修改后的商品保质期:"); scanf("%d",&p1->save_day);break; } case 6: { printf("输入修改后的商品数量:");

scanf("%d",&p1->shuliang);break; } case 7: { printf("输入修改后的商品进价:"); scanf("%f",&p1->jinjia);break; } case 8: { printf("输入修改后的商品售价:"); scanf("%f",&p1->shoujia);break; } case 9: { printf("输入修改后的商品销售日期(年月日之间用空格隔开):"); scanf("%d%d%d",&p1->sale_date.year,&p1->sale_date.month,&p1->sale_date.day);break ; } } printf("修改后的商品信息如下:\n\n"); printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02 d",p1->num,p1->name,p1->kind,p1->pro_date.year,p1->pro_date.month,p1->pro_date.day, p1->save_day,p1->shuliang,p1->jinjia,p1->shoujia,p1->sale_date.year,p1->sale_date.month, p1->sale_date.day); } else printf("此商品号不存在,修改失败!\n"); p0=p2; printf("结束修改按 0,继续修改按 1:"); scanf("%d",&t); if(t==0) break; } file_write(p0); } //插入商品 void goods_insert() { Node *p0,*p1,*p2,*p3; int k,i,flag,t; p0=file_read();

while(1) { p3=p2=p0; k=0; printf("请输入插入位置 i 的值(i 的值小于商品的种类数):"); scanf("%d",&i); while(p2!=NULL&&k<i-1) { p2=p2->next; k=k+1; } if(k!=i-1) flag=0; p1=(Node*)malloc(sizeof(Node)); printf("请输入要插入的商品号 名称 类别 生产日期 保质期 数量 进价 售价 销 售日期:\n"); scanf("%ld%s%s%d%d%d%d%d%f%f%d%d%d",&p1->num,p1->name,p1->kind, &p1->pro_date.year,&p1->pro_date.month,&p1->pro_date.day,&p1->save_day,&p1->shuli ang,&p1->jinjia,&p1->shoujia,&p1->sale_date.year,&p1->sale_date.month,&p1->sale_date. day); p1->next=p2->next; p2->next=p1; flag=1; if(flag==1) printf("插入位置合理!\n"); else printf("插入位置不合理!\n"); printf("结束插入按 0,继续插入按 1:"); scanf("%d",&t); if(t==0) break; } p0=p0->next; printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期\n"); while(p0!=NULL) { printf("--------------------------------------------------------------------------------\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p 0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0->s ave_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date.month,p0->s ale_date.day); p0=p0->next; }

file_write(p3); } //删除商品信息 void goods_delete() { long num; Node *p,*p0,*p1,*p2; int flag=0,t; p0=file_read(); while(1) { flag=0; p1=p2=p0; p=p1->next; if(p==NULL) flag=0; printf("请输入你要删除的商品的商品号:"); scanf("%ld",&num); while(p!=NULL) { if(p->num==num) { p1->next=p->next; free(p); flag=1; break; } p1=p; p=p->next; flag=0; } if(flag==1) printf("你已正确删除!\n"); else printf("你输入的商品号不存在!\n"); printf("结束删除按 0,继续删除按 1:"); scanf("%d",&t); if(t==0) break; } p0=p0->next; printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期\n"); while(p0!=NULL) { printf("--------------------------------------------------------------------------------\n");

printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p 0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0->s ave_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date.month,p0->s ale_date.day); p0=p0->next; } file_write(p2); } //商品信息排序(简单选择排序) void goods_rank() { Node *p,*q,*k,*L,t; Node *p0; int flag=0; L=file_read(); p=L->next; while(p->next) { k=p; q=p->next; while(q) { if((k->shuliang)>(q->shuliang)) k=q; q=q->next; } if(p!=k) { t=*p; *p=*k; *k=t; t.next=p->next; p->next=k->next; k->next=t.next; flag=1; } p=p->next; } if(flag=1) printf("按商品数量从小到大排序成功!\n"); else printf("按商品数量从小到大排序失败!\n");

p0=L; p0=p0->next; printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期\n"); while(p0!=NULL) { printf("--------------------------------------------------------------------------------\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p 0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0->s ave_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date.month,p0->s ale_date.day); p0=p0->next; } file_write(L); } //商品信息统计 void goods_tongji() { Node *p0,*p1; int liang_sum=0; float lirun_sum=0; p0=p1=file_read(); p0=p0->next; printf(" 商品信息统计表 \n\n"); printf("商品号\t 名称\t 类别\t 生产日期\t 保质期\t 数量\t 进价\t 售价\t 销售日期\n"); while(p0!=NULL) { printf("--------------------------------------------------------------------------------\n"); printf("%ld\t%s\t%s\t%02d-%02d-%02d\t%d\t%d\t%0.2f\t%0.2f\t%02d-%02d-%02d",p 0->num,p0->name,p0->kind,p0->pro_date.year,p0->pro_date.month,p0->pro_date.day,p0->s ave_day,p0->shuliang,p0->jinjia,p0->shoujia,p0->sale_date.year,p0->sale_date.month,p0->s ale_date.day); p0=p0->next; } printf("\n"); p1=p1->next; while(p1!=NULL) { liang_sum+=p1->shuliang; // printf("商品数量:%d\n",p1->shuliang); lirun_sum+=((p1->shoujia)-(p1->jinjia))*(p1->shuliang);

p1=p1->next; } printf("迄今,商店里还有%d 件商品;\n 总利润为%0.2f 元;\n",liang_sum,lirun_sum); if(liang_sum<=200) printf("注意:商店里的商品偏少,请适当进货!\n"); else if(liang_sum>1100) printf("注意:商店里积压的货物太多,请及时清仓!\n"); else printf("\n 商品总件数大于 200 件,小于 1100 件,无需进货,清仓!\n"); } void main() { int a; key(); do { printf("请按任意键返回主菜单!"); getch(); system("cls"); printf("\n**************************** 欢 迎 进 入 商 场 货 物 管 理 系 统 ****************************\n\n"); printf(" 1: 录入商品信息;\n"); printf(" 2: 查找商品信息;\n"); printf(" 3: 修改商品信息;\n"); printf(" 4: 插入商品信息;\n"); printf(" 5: 删除商品信息;\n"); printf(" 6: 商品信息排序;\n"); printf(" 7: 统计商品信息;\n"); printf(" 0: 退出系统;\n"); printf(" 请选择(0~7): "); scanf("%d",&a); while(1) { if(a==1||a==2||a==3||a==4||a==5||a==6||a==7||a==0)break; else { printf("\n 输入有误,请重新输入!\n 清选择(0~7):"); scanf("%d",&a); if(a==1||a==2||a==3||a==4||a==5||a==6||a==7||a==0) break; } } switch(a) { case 1:goods_input();break;//录入商品函数

case 2:goods_find();break;//查找商品函数 case 3:goods_change();break;//修改信息函数 case 4:goods_insert();break;//插入商品函数 case 5:goods_delete();break;//删除商品函数 case 6:goods_rank();break;//商品信息排序函数 case 7:goods_tongji();break;//统计信息函数 case 0 :break; } }while(a!=0); }


相关文章:
数据结构课程设计实习-仓库进销存管理系统
数据结构与算法 课程设计报告 题学 目: 院: 仓库进销存管理系统 计算机与控制工程学院 软件 101 王海川 王一萍 专业班级: 学生姓名: 指导教师: 2012 年 06 月...
数据结构课程设计 仓库库存管理系统
数据结构课程设计_C语言_库... 4页 2财富值 数据结构课程设计实习-仓库......仓库管理系统 C语言 C++ 数... 2页 免费如要投诉违规内容,请到百度文库投诉中心...
数据结构课程设计_仓库库存管理系统
数据结构课程设计_仓库库存管理系统_管理学_高等教育_教育专区。库存物品信息管理...《数据结构(C 语言)实践教程》 李春葆 编著 清华大学出版社 西安电子科技大学...
数据结构课程设计+2011-2012-1
仓库条码进销存管理系统 13页 免费 基于内容语义的图像检索技... 67页 免费 数据...《数据结构》是一门实践性较强的软件基础课程,为了学好这门课程,必须在掌握理...
数据结构课程设计—进销存货物管理系统论文.
数据结构课程设计进销存货物管理系统论文._人力资源管理_经管营销_专业资料。桂林电子科技大学课程设计(论文)说明书用纸 课程设计(论文)说明书 题学专姓学 目: ...
数据结构课程设计报告
怀化学院计算机系 《数据结构课程设计报告书产品进销存储管理系统 学生姓名:...库房的产品进销存情况进行管理 4.开发者:李莹 1.3 文档概述 1、采用数据结构...
数据结构课程设计报告-电器库存管理系统
数据结构课程设计报告-电器库存管理系统_管理学_高等教育_教育专区。课程设计报告 课程设计名称:数据结构课程设计 课程设计题目:电器库存管理系统 院(系):计算机信息...
数据结构-家电库存管理系统课程设计报告
本次课程设计针对当前的需求,设计一个家电仓库信息的管理系统以方便商家更 快捷更有效的对仓库货品的信息进行管理,给商家创造更多的价值! 该系统整体运用了数据结构...
范例-算法与数据结构课程设计
120 数据结构与算法课程设计 说明书 进销存货物管理系统 学专 院: 业: 计算机...如何将学到的 知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的...
算法与数据结构课程设计
算法与数据结构课程设计_工学_高等教育_教育专区。进销存货物管理系统 算法与数据...如何将学到的 知识转化为自己的东西,学会了怎么更好的处理知识和实践相结合的...
更多相关标签: