程序设计报告
程序设计报告
题目:商店库存管理系统
学生姓名: 院系、班级: 学号: 联系电话: Email : 完成日期:
一、使用的开发工具:VC++6.0,codeblocks
包含的文件:1、stdio.h 2、stdlib.h 3、string.h 4、conio.h 二、对题目的理解:
拿到题目,我首先想到模块化程序设计,将任务分成若干模块,我分成了8个模块,分别为load函数,用于生成文件和记录数据;printfxx函数,用于输出界面内容;chuangjian函数,用于建立商品档案;bianji函数,用于修改商品信息;add函数,用于添加新商品;del函数,用于删除商品信息;show函数,用于显示商品信息;tongji函数,用于统计商品销售额,剩余量和毛利;search函数,用于查询商品信息;end即结束。这些模块相互独立运行,通过文件指针进行商品信息的修改并保存,每个函数又分不同的选项,分别进行不同的操作,比如,查找分为按剩余量,种类和名称查找;显示函数分为按原来顺序显示,按销售额大小顺序显示,按毛利大小显示;编辑函数按种类和名称修改等。其次,对于数据描述,我用了结构体,在排序查询时,用结构体整体交换的方法,提高程序的执行效率;在主函数中,通过函数调用来实现特定功能。这样某个功能的异常不会影响整个函数,在debug时,更容易找到bug。 三、所用到的编程知识点:
1、 编译预处理:包括头文件的调用;
2、 函数的定义,声明与调用,本程序中,函数的定义均为空类型,没有返回值;在主
函数前将函数声明,在主函数后编写调用函数,是比较成熟的编程风格。
3、 定义文件指针,通过文件指针实现文件的打开,读写和保存,spdata为商品库存信
息文件,temp为临时文件,用整形变量count记录信息量。
4、 主函数用switch函数选择要进行的操作,用break跳出,提高了程序的执行效率, 5、 Printfxx用for循环实现※的输出,减少了代码量; 6、 用system(“cls”)实现清屏功能,达到分屏显示的目的;
7、 用fflush(stdin)来实现缓冲区残留数据的清除,防止缓冲区数据对以下程序的影响 8、 用if函数选择方式和判断条件,用while函数实现对商品信息的读写, 9、 选择法排序
10、fread,fwrite,fopen,fclose,的用法
11、结构体指针的应用(th+i)->number,编程结构的严谨,包括文件打开时的if((spdata=fopen("D:\\spdata","ab+"))==NULL) { printf("打开文件失败!"); exit(0); } 程序。 12、与用户友好化的界面与运行时的互动如:printf("\n还要继续添加要输入的数据吗?(y继续/n停止):"); printf("\n是否保存?(y保存/n不保存)"); 13、格式输入输出函数的应用和字符串输入函数的调用。 14、模块化程序设计; 15、用结构体整体交换的方法实现两个结构体的位置交换(这是结构体特有的不同于数组的独特之处);
16、用全局变量count不断更新信息数量。 四、主要数据结构
主要函数功能说明:
1、 main()函数:主要执行程序功能的函数,在一个程序中只有一个; 2、 chuangjian()函数:建立商品库存档案并保存; 3、 bianji()函数:实现对商品信息的修改;
4、 add()函数:对商品进行添加操作,添加了不同操作选项,如是否继续,是否保存,
实现与用户的互动;
5、 del()函数:删除商品信息,细节同add函数;
6、 show()函数:显示商品信息,并按原顺序,销售额大小和毛利大小进行显示; 7、 tongji()函数:统计销售额,剩余量和毛利;
8、 search()函数:查询商品信息,包括按剩余量,种类和名称进行查找,同样实现了与
当每项功能结束后,回到主菜单进行新的选择和操作
!
主要能实现数据的输入和保存!
del();
由于通过名称删除和通过种类编号删除的流程差不多,通过上面的流程图我们可以看出来,所以我把他们整合到一张图里,在这过程中,他们并不是同时进行的!而是只进行其中的一个!通过名称删除就不进行通过类别编号删除! 流程图就只介绍这几个比较重要的函数!
六、操作过程截图显示
界面显示
创建信息
编辑信息
增加信息
注意数据更新
显示信息
七、遇到的主要问题:
1、文件的使用:开始时采用的是在主函数中使用文件指针,但无法保存文件,后来在每个函数中均使用文件,spdata存储商品档案,temp临时存储商品档案,countn函数存贮添加商品档案,程序可以运行。
2、结构体交换时,开始使用的是结构体成员的逐个交换,结果报错,改进后将结构体整体交换,程序可以运行。
3、开始只用了一个人文件,没有考虑文件容量问题,后来改为三个文件,解决此问题,同时又增强了条理性。
4、如何不按固定模式跳出循环,如不受循环条件数量的限制,解决方法是用全局变量count,不断更新信息数量,同时用“是否继续”等增强与用户的互动,以增强信息的准确性。
八、典型BUG及解决
1、代码用语规范,解决方法是按照报错位置逐个修改(有赖于codeblocks的定位)
2、结构体的引用,解决方法用结构体引用的标准方法或用指针
3、结构体成员定义为char类型时没有指定字符数组长度,系统报错,解决方法是将char类型的成员指定结构体数组的长度
4、选择法排序没有加交换判断条件,解决方法加判断条件if(i!=index)
5、没有加load函数,无法生成文件,解决方法是补充load函数
6、由于功能较多,使多个功能使用时屏幕混乱解决用system(“cls”)清屏
7、文件读写用法存在问题,解决阅读教材,重新改正
8、数据类型不统一问题,解决方法,按报错位置统一数据类型
九、所用编程技巧
1、用全局变量count不断更新库存
2、用for循环减少代码量
3、充分利用结构体的特殊性
4、界面清晰与用户的互动
十、体会
1、C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,
并在实践中解决这些问题,不断提高自己转化知识的能力。在编程中我就遇到了许多困难,并耐心的改正才能将程序写好。
2、这次设计中,我的收获还有就是学会了用流程图来表达自己的想法,并根据流程图来逐步实现程序的功能。开始的时候,我画流程图很是困难,需要一个多小时才能清楚的根据自己的想法画出图来,后来画多了,就更加了解它的功能,十分得心应手,能够比较快而准确的画出来。
3、我学会了用模块化结构设计解决问题,将一个大问题分成若干小问题。
4、在编程过程中,我更学会了耐心,学会了认真,仔细谨慎等知识之外的品质,对我以后的工作学习有很大帮助.
5、当然我还有很多不足,虽然课程已结束,以后我还会用c语言课上学到的东西来指导我的学习和生活。
十一、特色
1、增加了是否继续等多种选项,实现互动。