收藏 分享(赏)

C语言超市商品管理系统.doc

上传人:精品资料 文档编号:8320399 上传时间:2019-06-20 格式:DOC 页数:27 大小:220.50KB
下载 相关 举报
C语言超市商品管理系统.doc_第1页
第1页 / 共27页
C语言超市商品管理系统.doc_第2页
第2页 / 共27页
C语言超市商品管理系统.doc_第3页
第3页 / 共27页
C语言超市商品管理系统.doc_第4页
第4页 / 共27页
C语言超市商品管理系统.doc_第5页
第5页 / 共27页
点击查看更多>>
资源描述

1、题 目: 超市商品管理系统院 系: 信息科技学院专 业: 计算机科学与技术姓 名: 学 号: 指导教师: 日 期: 桂林电子科技大学信息科技学院实 训 报 告目 录1 问题定义 32 系统设计 321 总体设计322 详细设计32.2.1 数据结构设计 32.2.2 主控流程 32.2.3 信息输入模块 42.2.4 信息增加模块 .42.2.5 信息修改模块 42.2.6 信息删除模块 .42.2.7 信息查看模块 .42.2.8 信息统计模块 42.2.9 函数功能描述 43 系统实现 53.1 编码 53.1.1 程序预处理 .53.1.2 主函数 main() .53.1.3 主菜单界

2、面 . 63.1.4 商品信息建立 . .73.1.5 商品信息查看 .93.1.6 商品信息增加 .113.1.7 商品信息删除 .123.1.8 商品信息修改 .143.1.9 商品数目统计 .163.2 测试与调试 223.2.1 概述 .223.2.2 程序测试 .224 系统维护 255 归纳总结 255.1 开发经验 255.2 实训中遇到的问题及解决方法 255.3 设计中的不足之处255.4 感想和心得体会 256 参考资料 25超市商品管理系统本题目设计目的是训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉 C语言的单链表的各种基本操作。本程序中涉及结构体、单链表、文

3、件保存等方面的知识。通过本程序的训练,使学生能对 C 语言的链表的操作有一个更深刻的了解,掌握利用单链表存储结构实现对超市信息管理系统的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。1、问题定义创建一个超市管理系统。该程序具有保存商品信息、查询商品信息、修改商品信息、删除商品信息、统计商品信息并具有自动判断商品价格、库存等的功能。超市管理系统主界面2、系统设计21 总体设计本程序采用模块化设计方法,即将一个大任务分成一个个小任务,然后分别设计个小任务。划分出来的模块相对独立而又相互关联,容易理解。本程序由 5 大模块组成:1. 输入信息模块2. 增加信息模块3. 修改信息模块4. 删

4、除信息模块5. 统计信息模块22 详细设计2.2.1 数据结构设计定义结构体struct good int num; /*商品编号 */char name20; /*商品名称*/char kind40; /*商品类型*/float price; /*商品价格*/char unit10; /*商品单位*/int quantity; /*商品数量*/struct good *next; /*定义结构体指针类型*/*head,*p1,*p2;单链表 good 结构体struct good /*定义结构体*/int num; /*商品编号 */char name20; /*商品名称*/char kin

5、d40; /*商品类型*/float price; /*商品价格*/char unit10; /*商品单位*/int quantity; /*商品数量*/struct good *next; /*定义结构体指针类型*/*head,*p1,*p2;2.2.2 主控 main()函数执行流程Int main()struct good *p1,*p2; while(1)if(m=1)printf(“*商品信息的查看*n“); if(m=2)printf(“*商品信息的输入*n“); if(m=3)printf(“*商品信息的统计*n“); if(m=4)printf(“*退出*n“); break;

6、return 0; 本商品管理系统执行主流程。它先以可读写的方式打开数据文件,此文件默认为“C:goods list.txt”,若该文件不存在,则新建此文件。当打开文件操作成功后,从文件中一次读出一条记录,然后执行显示主菜单和进入主循环操作,进行按键判断。2.2.3 输入信息模块记录可以从以文件形式存储的数据文件中读入,也可从键盘逐个输入商品记录。商品记录由商品的基本信息和成绩信息字段构成。当从数据文件中读入记录时,也就是把在以记录为单位存储的数据文件中,将记录逐条复制到单链表中。2.2.4 增加信息模块 增加信息模块主要实现信息增加2.2.5 修改信息模块 修改信息模块主要实现信息修改2.2

7、.6 删除信息模块 删除信息模块主要实现信息删除2.2.7 查看信息模块 查看信息模块主要实现信息查看2.2.8 统计信息模块 统计信息模块主要实现信息统计2.2.9 函数功能描述shuchu()shuchu()函数用于输出商品信息。 struct good *paixu(struct good*head2)此函数用于给链表排序。 jisuan()jisuan()函数用于判断商品的类别。 printf0(struct good *p)printf0(struct good *p)函数用于遍历链表并打印电器类商品。 printf1(struct good *p)printf1(struct go

8、od *p)函数用于遍历链表并打印日用品类商品。 printf2(struct good *p)printf2()函数用于遍历链表并打印办公用品类商品。 printf3(struct good *p)printf3 struct good *p ()函数用于遍历链表并打印食品类商品。 shunxudayin()shunxudayin()函数用于给商品排序并打印。 tongji1()tongji1()函数用于统计给库存量低于 100 的货名和类别。 tongji2()tongji2()函数用于统计商品库存量有 2 种以上(含两种)低于 100 的商品类别。完成在上述系统设计后,即可着手进行系统实

9、现的工作,开始程序代码的编写。3、系统实现31 编码3.1.1 程序预处理包括加载头文件,定义结构体、常量和变量,并对它们进行初始化工作。#include “stdio.h“ /*输入,输出头文件*/ #include “stdlib.h“ /*申请空间头文件*/ #include “string.h“ /*对字符串加工头文件*/ #include “conio.h“ /*清屏头文件*/ FILE *fp;int n=0; /*定义文件指针类型*/int i,j,a4,m; /*定义整数类型*/ float aver4,sum4,g4,h; /*定义浮点类型*/ 3.1.2 主函数 main(

10、)main()函数主要实现了对整个程序的运行控制,以及相关功能模块的调用。Int main()struct good *p1,*p2; while(1)if(m=1)printf(“*商品信息的查看*n“); if(m=2)printf(“*商品信息的输入*n“); if(m=3)printf(“*商品信息的统计*n“); if(m=4)printf(“*退出*n“); break;return 0; 3.1.3 主菜单界面用户进入商品管理系统时,需要显示主菜单,提示用户进行选择,完成相应任务。printf(“ 桂林电子科技大学信息科技学院超市管理系统 n“);printf(“*n“);pri

11、ntf(“1 -输出查看或者修改已存信息 -n“);printf(“-n“);printf(“2 -重新输入新信息(并且删除原有信息)-n“);printf(“-n“);printf(“3 统计商品信息(如果您还没有查看过信息请先按 1)n“); printf(“-n“);printf(“4 -退出-n“);printf(“*n“);scanf(“%d“,3.1.4 商品信息建立用户进入商品管理系统时,对某个商品的信息进行处理。struct good /*定义结构体*/int num; /*商品编号 */char name20; /*商品名称*/char kind40; /*商品类型*/flo

12、at price; /*商品价格*/char unit10; /*商品单位*/int quantity; /*商品数量*/struct good *next; /*定义结构体指针类型*/*head,*p1,*p2;struct good *createlist() /*创建链表函数*/struct good *head1,*p1,*p2; /*定义结构体指针类型*/if(fp=fopen(“goods message.txt“,“w“)=NULL) /*判断能否打开文件 */printf(“can not open the file“);exit(0); /*结束程序*/head1=(stru

13、ct good *)malloc(sizeof(struct good); /*申请头结点空间 */ p1=head1;p2=head1;printf(“*n“);printf(“请输入信息:编号,名称,类型,价格,单位,数目n“);printf(“ (以输入“1”表示结束输入)n“);printf(“*n“);printf(“_n“);scanf(“%d %s %s %f %s %d“, /*输入商品信息 */ printf(“_n“);p1-next=NULL;fprintf(fp,“%d %s %s %f %s %d “,p1-num,p1-name,p1-kind,p1-price,p

14、1-unit,p1-quantity); /*将商品信息写入文件 */while(1)p1=(struct good *)malloc(sizeof(struct good); /*申请新空间*/printf(“*n“);printf(“请输入信息:编号,名称,类型,价格,单位,数目n“);printf(“ (以输入“1”表示结束输入)n“);printf(“*n“);printf(“_n“);scanf(“%d“,if(p1-num=-1) /*申请空间结束条件*/printf(“_nn“);fprintf(fp,“%d“,-1);fclose(fp);return head1; /*返回头

15、指针*/scanf(“%s %s %f %s %d“,p1-name,p1-kind, /*输入商品信息*/printf(“_n“);fprintf(fp,“%d %s %s %f %s %d “,p1-num,p1-name,p1-kind,p1-price,p1-unit,p1-quantity); /*将商品信息写入文件 */p1-next=NULL;p2-next=p1;p2=p1;3.1.5 商品信息查看void shuchu() /*输出商品信息函数*/ dostruct good *p3,*p4,*p5; /*定义结构体指针类型*/int n=0,p=0,q=0,r=0;prin

16、tf(“所有商品信息:n“);printf(“编号,名称,类型,价格,单位,数目n“);printf(“*n“); if(fp=fopen(“goods message.txt“,“rb+“)=NULL) /*判断能否打开文件*/printf(“can not open the file“);exit(0); /*结束程序 */head=(struct good *)malloc(sizeof(struct good); /*申请头结点空间 */ p3=head;fscanf(fp,“%d %s %s %f %s %d “, /*从文件中写到链表*/ while(1)p4=(struct go

17、od *)malloc(sizeof(struct good); /*申请头结点空间*/ fscanf(fp,“%d “,if(p4-num!=-1) /*判断循环结束条件*/fscanf(fp,“%s %s %f %s %d “,p4-name,p4-kind, /*从文件中写到链表 */ p4-next=NULL;p3-next=p4;p3=p4;elsep3-next=NULL;break;fclose(fp); /*关闭文件 */ p3=head;while(p3!=NULL) printf(“ %d %s %s %0.1f %s %dnn“,p3-num,p3-name,p3-kin

18、d,p3-price,p3-unit,p3-quantity); printf(“_n“); p3=p3-next;printf(“*n“); printf(“/n“); while(n!=4)p3=head;printf(“*n“); printf(“1 添加商品信息n“);printf(“2 删除某商品信息n“);printf(“3 修改某商品信息n“);printf(“4 返回(当你完成了对某一商品的添加、删除或者修改后请按 4 返回)n“);printf(“*n“); scanf(“%d“,3.1.6 商品信息增加if(n=1) /*添加商品信息 */ printf(“请输入商品 编号

19、 名称 类型 价格 单位 数目n“);printf(“*n“); p4=(struct good *)malloc(sizeof(struct good); /*申请空间*/scanf(“%d %s %s %f %s %d“, /*输入商品信息*/ p4-next=NULL;while(p3-next!=NULL) /*判断循环结束条件 */p3=p3-next;p3-next=p4;p3=head;if(fp=fopen(“goods message.txt“,“w“)=NULL) /*判断能否打开文件*/printf(“can not open the file“);exit(0); /*

20、结束程序*/while(p3!=NULL)fprintf(fp,“%d %s %s %f %s %d “,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*将商品信息写入文件 */p3=p3-next;fprintf(fp,“%d“,-1);fclose(fp); /*关闭文件 */printf(“*n“); printf(“_n“);printf(“-请按 4 返回-n“);printf(“_n“);printf(“*n“); 3.1.7 商品信息删除if(n=2) /*删除商品 */printf(“*n“); printf(“请

21、输入需要删除的商品编号n“);printf(“*n“); scanf(“%d“,printf(“*n“); printf(“1 确认删除n2 取消删除 n“);printf(“*n“); scanf(“%d“,if(r=1)if(head-num)=p)head=head-next;free(p3); /*释放空间 */elsep4=head;p3=p4-next;while(p3!=NULL) /*判断循环结束条件*/if(p3-num)=p)p5=p3-next;free(p3); /*释放空间 */p4-next=p5;break;p3=p3-next;p4=p4-next;if(fp=

22、fopen(“goods message.txt“,“w“)=NULL) /*判断能否打开文件*/printf(“can not open the file“);exit(0); /*结束程序 */p3=head;while(p3!=NULL) /*判断循环结束条件*/fprintf(fp,“%d %s %s %f %s %d “,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*将商品信息写入文件 */p3=p3-next;fprintf(fp,“%d“,-1);fclose(fp); /*关闭文件 */if(r=2)contin

23、ue; /*继续循环 */printf(“*n“); printf(“_n“);printf(“-请按 4 返回-n“);printf(“_n“);printf(“*n“); 3.1.8 商品信息修改if(n=3) /*修改某商品信息 */printf(“请输入需要修改的商品编号n“);scanf(“%d“,while(p3!=NULL) /*判断循环结束条件*/if(p3-num)=q) /*判断是否为所需要修改的商品*/ printf(“请输入商品单价与库存量(如果单价不变请输入原来的单价)n“);scanf(“%f %d“, /*输入商品价格与库存量*/ p3=p3-next;if(fp

24、=fopen(“goods message.txt“,“w“)=NULL) /*判断能否打开文件*/printf(“can not open the file“);exit(0); /*结束程序*/p3=head;while(p3!=NULL) /*判断循环结束条件*/fprintf(fp,“%d %s %s %f %s %d “,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*将商品信息写入文件 */p3=p3-next;fprintf(fp,“%d“,-1);fclose(fp); /*关闭文件*/printf(“*n“);

25、printf(“_n“);printf(“-请按 4 返回-n“);printf(“_n“);printf(“*n“); if(n=4) /*退出*/break;printf(“*n“); printf(“1 继续修改n-n2 返回n“);printf(“*n“); scanf(“%d“,if(p=1)continue; /*继续循环 */if(p=2)break; /*跳出循环 */while(n!=2);fclose(fp); /*关闭文件 */3.1.9 商品信息统计void printf0(struct good *p) /*遍历链表并打印电器类商品函数*/struct good *p

26、3; /*定义结构体指针类型*/p3=p;while (p3!=NULL) /*判断遍历链表循环结束条件*/if(strcmp(p3-kind,c)=0) /*判断商品类型是否为电器类型*/printf(“%dt%st%st%0.1ft%st%dn“,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*输出电器类商品信息*/printf(“_n“);p3=p3-next;return;void printf1(struct good *p) /*遍历链表并打印日用品类商品函数*/struct good *p3; /*定义结构体指针类型

27、*/p3=p; while (p3!=NULL) /*判断遍历链表循环结束条件*/if(strcmp(p3-kind,d)=0) /*判断商品类型是否为日用品类型*/printf(“%dt%st%st%0.1ft%st%dn“,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*输出日用品类商品信息*/printf(“_n“);p3=p3-next;return;void printf2(struct good *p) /*遍历链表并打印办公用品类商品函数*/struct good *p3; /*定义结构体指针类型*/p3=p;whi

28、le (p3!=NULL) /*判断遍历链表循环结束条件*/if(strcmp(p3-kind,e)=0) /*判断商品类型是否为办公用品类型*/printf(“%dt%st%st%0.1ft%st%dn“,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*输出办公用品类商品信息*/printf(“_n“);p3=p3-next;return;void printf3(struct good *p) /*遍历链表并打印食品类商品函数*/struct good *p3; /*定义结构体指针类型*/p3=p;while (p3!=NUL

29、L) /*判断遍历链表循环结束条件*/ if(strcmp(p3-kind,f)=0) /*判断商品类型是否为食品类型*/printf(“%dt%st%st%0.1ft%st%dn“,p3-num,p3-name,p3-kind,p3-price,p3-unit,p3-quantity); /*输出食品类商品信息*/printf(“_n“);p3=p3-next;return;void shunxudayin()for(i=0;iquantityname,p1-kind); /*输出商品名称及类别*/printf(“_n“);p1=p1-next;void tongji2()printf(“n

30、*n“);printf(“商品库存量有 2 种以上(含 2 种)低于 100 的商品类别:n“);printf(“*n“);printf(“_n“);if(a0=2) /*判断电器类库存量是否为 2 种以上(含 2 种)低于 100*/printf(“电器n“);printf(“_n“);if(a1=2) /*判断日用品类库存量是否为 2 种以上(含 2 种)低于 100*/printf(“日用品n“);printf(“_n“);if(a2=2) /*判断食品类库存量是否为 2 种以上(含 2 种)低于 100*/printf(“食品n“);printf(“_n“);if(a3=2) /*判断

31、办公用品类库存量是否为 2 种以上(含 2 种)低于 100*/printf(“办公用品n“);printf(“_n“);32 测试与调试3.2.1 概述一般情况下,为解决一个问题所编写的程序代码较长,可能包括几百条甚至成千上万条语句。在检查并排除所有语法错误后,还会有不易发现的逻辑错误,因此要对程序进行认真仔细的测试与调试。测试是通过运行程序发现错误的过程,常见的错误有数据溢出、数组越界、进入死循环、语句顺序颠倒、多加“;”或少加“”等等。调试则是确定测试中找到的错误性质并改正错误的过程。测试与调试通常交替进行,即测试调试再测试再调试。能检查出尚未发现的、各种不同类型错误的测试才是成功的测试

32、。测试程序需要测试用例,测试用例可用如下公式表示:测试用例测试数据预期结果。好的测试用例应该是用尽可能少的测试数据发现尽可能多的错误,即发现错误的概率要大。要选择合适的测试数据,使系统在运行时尽量能执行到每条语句,以测试各指令是否正确。还应分别测试输入合法数据与非法数据时,程序的运行情况, 。对于合法数据,还要考虑数据的一般性与特殊性,如求最大值的问题,应测试最大值在最前面、最后面、中间某一位置的情况。测试程序时,用监视窗口可以随时查看变量或表达式的值,有时还可以将部分程序代码用注释符暂时括起来,缩短程序,以便压缩出错代码的范围。3.2.2 程序测试 在主菜单中选择 2本程序需要先建立文件才能

33、运行其他功能。当用户输入 2 并按回车键后,即可进入输入信息并建立文件的界面。 在主菜单中选择 1建立文件信息后既可输入 1 进行查看和修改信息。 在商品信息菜单中选择 1在商品信息菜单中选择 1 后按回车,既可进入添加商品信息的界面 在商品信息菜单中选择 2在商品信息菜单中选择 2 后按回车,既可进入删除商品信息界面。 在商品信息菜单中选择 3在商品信息菜单中选择 3 后按回车,既可进入修改商品信息的界面。 在主菜单中选择在主菜单中选择 3 后按回车,既可进入商品信息统计界面4、系统维护经测试与调试确认软件无错时,开发就告一段落,这时可以交付软件供用户使用,但是在软件的使用过程中还会面临更加

34、漫长的工作,即软件维护。一般维护的工作有:更改使用中发现的错误;为适应实际环境而对程序进行修改;为满足新的需求而对程序作必要的改进等等。5、归纳总结51 开发经验通过对本题目的开发,体会到要掌握以下几点内容。52 实训中遇到的问题及解决方法在这次实训中,碰到最大的问题是链表的使用,因为我本身对链表的操作并不是特别熟练。后来经过老师的指导,并查找了大量资料,终于初步掌握了链表的使用与操作。53 设计中尚存的不足之处关于这次的程序,也有挺多不足的地方。首先,我觉得程序还不够完善,有些地方甚至有点乱;其次,因时间紧急并没有加上查询功能;最后,就是该程序界面不够美观大方。54 感想和心得体会通过这次实训,我感触甚深, C 语言是一门高深的计算机语言,很多 C 语言的精髓我都没有很好掌握。我应该更要在 C 语言方面下工夫,毕竟 C 语言是 C+等更多计算机语言的基础,C 语言学不好意味着以后对其他计算机语言的学习会更吃力。6、参考资料1 谭浩强. C 程序设计(第三版). 清华大学出版社, 2005

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报