《商品月销售信息管理软件设计.doc》由会员分享,可在线阅读,更多相关《商品月销售信息管理软件设计.doc(22页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、课程设计课程名称 程序设计课程设计 设计题目 商品月销售信息管理软件设计 班级及班级代码 专 业 计算机科学及技术 指导教师: 学 号: 姓 名: 提交日期: 2014 年6 月 18 日 广东财经大学教务处制姓名 课程设计成绩 评语:评价内容不及格及格中良优表达精练,格式准确,基本无错别字内容完整,思路清晰,结构严谨,设计科学,可操作性强程序能完成课程设计任务书所规定的任务,功能完善,独立分析和解决问题能力较好。代码简洁,算法清晰,可读性强无抄袭现象且课程设计报告体会深刻 指导教师(签名) 年 月 日商品月销售信息管理软件设计1 系统功能要求(需求分析):采用结构体数组或文件形式存储每种商品
2、的信息,每种商品包含如下几方面的信息:商品编号、商品名称、单价、生产地、本月当前销售总数量、本月当前销售总金额、库存余量。软件由主函数(含欢迎界面)和下列5个功能模块组成:(1)导入商品信息;(2)售出功能;(3)进货功能;(4)查找功能;(5)统计功能;(6)退出程序。2 系统总体(概要)设计思想(1)开发及设计的总体思想商品月销售信息管理软件算法说明:STEP1 预处理,定义结构体STEP2 进入欢迎界面,输入密码, STEP3 导入商品信息STEP4提示用户选择,根据提示输入一个字母STEP5选择某一种功能STEP6 对于输入的字母编辑关于售出. 进货.查找.统计功能的函数STEP7 如
3、果输入的字母表示退出,退出系统(2)系体模块结构图(3)系统文件及函数组成、功能源文件函数或其他成分功能goods.cmain总控函数menu_select菜单选择handle_menu菜单处理quit结束运行add_display.cshowTable输出表头addRecord在表尾追加信息display显示信息sell_buy.cdecreaseNum减少指定的商品数量increaseNum增加指定的商品数量find_count.cfindRecord查找指定的记录queryInfo查询指定商品的信息sort查询销售总金额最大的商品sav_load.csave文件存储load文件读取goo
4、ds.h常数提供常数结构声明商品信息结构库函数及函数原型声明引用库函数及函数3 系统详细设计 (1)函数的描述文件存储操作函数函数原型:int saveRecords(void)功能:将记录存入默认文件goods_info或者指定文件。参数:void返回值:成功0,失败-1。工作方式:数组records被保存至指定文件。要求:报告是否有记录可存、是否能正常建立或打开文件、根据要求执行存入操作并报告存入记录的条数。文件读取操作函数函数原型:int loadRecords(void)功能:将默认文件goods_info或者指定文件里的记录取入内存。参数:void。返回值:成功0,失败-1。工作方式
5、:records为从指定文件中读取出的记录。要求:报告是否有记录可存、是否能正常打开文件、是否覆盖已有记录以及读取记录的条数。显示所有商品信息函数函数原型: void display(void)功能:显示内存的记录信息。参数:void。返回值:void。工作方式:从头部开始逐个显示记录内容。要求:报告是否有记录及记录条数和内容。增加信息函数函数原型:void addRecord(void)功能:增加记录。参数:void。返回值:void。工作方式:从尾部开始逐个追加记录。要求:将新记录追加在记录尾部,并对记录进行计数。输出表头函数函数原型:void showTable(void)功能:输出表头
6、信息。参数:void。返回值:void。工作方式:输出一行表头信息。要求:输出一行表头信息。商品销售函数函数原型:void decreaseNum(void)功能:被售出之商品数量减x。参数:void。返回值:void。工作方式:可以按照商品编号、商品名称、单价、生产地找到要销售的商品,确认后方可销售。要求:同时要求该商品本月当前销售总数量、本月当前销售总金额按实际增加。商品进货函数函数原型:void increaseNum(void)功能:被购进之商品数量增x。参数:void。返回值:void。工作方式:可以按照商品编号、商品名称、单价、生产地找到要销售的商品,确认后方可进货。要求:同时要求
7、该商品本月当前销售总数量、本月当前销售总金额不变。查找指定记录函数函数原型:void findRecord(char*,int,int)功能:查找指定的记录。参数:char*target:欲查找记录的某一项及target相同。 int targetType:表明通过哪一项来查找,0为商品编号,1为商品名称,3为单价,4为生产地。 int from:从第from 个记录开始找。返回值:int(找到的记录的序号),若找不到则返回-1。工作方式:根据给定的关键字,查找符合记录的序号。要求:找不到则返回-1。查询指定商品信息函数函数原型:void queryInfo(void)功能:将一个文件的内容追
8、加到另一个文件的尾部。参数:void。返回值:void。工作方式:可以按照商品编号、商品名称、单价、生产地来查询。要求:打印查询到的学生的信息或给出相关信息。统计销售函数函数原型:void sort(void)功能:找出当前销售总金额最大的商品。参数:void。返回值:void。工作方式:使用冒泡排序法排序,并显示当前销售总金额最大的商品信息。要求:只能按销售总金额最大来排序。菜单处理函数函数原型:void handle_menu(void)功能:处理选择菜单命令。参数:void。返回值:void。工作方式:根据命令,调用相应函数。要求:给出结束信息。菜单选择函数函数原型:void menu
9、_select(void)功能:接收用户选择的命令代码。参数:void。返回值:int。工作方式:返回命令代码的整数值。要求:只允许选择规定建,如果输入不合要求,则提醒用户重新输入。结束程序运行函数 函数原型:void quit(ADDR*)功能:接收用户选择的命令代码。参数:void。返回值:void。工作方式:根据要求决定在退出之前是否将修改的记录存入文件。要求:结束运行之前,询问是否对修改的记录进行存储。 主函数函数原型:void main(void)功能:控制程序。参数:void。返回值:void。要求:管理菜单命令并完成初始化。goods.h功能:声明函数原型,包含文件及自定义宏和数
10、据结构。要求:报告是否能正常打开文件执行存入操作及存入记录的条数。 (2)主要函数流程图进货时的流程图售货时的流程图 (3)编码(附后)4 、系统测试5、总结:通这次实验,我收获颇多,也发现自己不足之处语言有些知识学得不够扎实,很多看不懂,需要老师指导。在做这个实验的过程,自己编写函数方面能力也有点不足,而且不够有时候数据类型不对应,有时候甚至是字符错误。不过也让我记住了出现错误的原因。基础不扎实,导致一些错误。通过这次我也懂得一个道理:不懂之处最好要自己试着解决,不行再向他人请教,还要利用网络资源补充知识。6、结束语感谢老师的耐心解惑和指导,也感谢思慧同学、李佳同学以及蔡师兄的热情帮助,耐心
11、且尽力解答我的问题。参考文献1刘振安,等.C语言程序设计M.北京:机械工业出版社,2007.2刘振安,等.C程序设计课程设计M.北京:机械工业出版社,2004.3刘振安,等.C/C+程序设计教程M北京:机械工业出版社,2008.4刘振安,等.C程序设计教程M.北京:机械工业出版社,2008.5刘燕君,等.C程序设计实践教程M北京:机械工业出版社,2009.6Sartaj Sahni.数据结构、算法及应用C+语言描述M.汪诗林,等译.北京:机械工业出版社,2000.7董兰芳,等。UML课程设计M.北京:机械工业出版社,2005.8裘宗燕.从问题到程序程序设计及C语言引论M.北京:机械工业出版社,
12、2005.9刘振安,等.C语言程序设计M.2版.北京:清华大学出版社,2008.10裘宗燕译.程序设计实践M.北京:机械工业出版社,2000.11张龙祥.UML及系统分析设计M.北京:人民邮电出版社,2001.12谭浩强.C程序设计M.北京清华大学出版社,2001.13Les Hancock,Morris Krieger.The C PrimerM.New York:McGraw-Hill,1982.14Brian W Kernighan,Dennis M Ritchie.C 程序设计语言M.徐宝文,李志,译.2版,新版.北京:机械工业出版社,2004.附程序清单goods.h#ifndef
13、H_GOODS_HH#define H_GOODS_HH#include#include#include#include#define INITIAL_SIZE 100/数组初始大小#define INCR_SIZE 50/数组每次增加的大小struct goods_infochar number15;/商品编号char name20;/商品名称int amount;/商品销售数量float price;/商品单价char address15;/商品生产地int rest;/现库存量float sum;/商品月总销售量typedef struct goods_info GooInfo;exte
14、rn int num;/记录的商品数extern GooInfo* records;/记录商品信息的数组extern int arraySize;/数组大小extern char savedTag;/信息是否已保存的标志,0为已保存,1为未保存void handle_menu(void);int menu_select(void);void decreaseNum(void);void addRecord(void);void display(void);void queryInfo(void);void increaseNum(void);void sort(void);int saveRe
15、cords(void);int loadRecords(void);void quit(void);void showTable(void);int findRecord(char* target,int targetType,int from);void copyRecord(GooInfo* dest);#endifgoods.c#includegoods.h初始化int num=0;/记录的商品数GooInfo* records=NULL;/记录商品的数组char savedTag=0;int arraySize;char str2;char user10;int i;主函数int ma
16、in()system(color FD); /修改软件背景颜色/初始化数组records=(GooInfo*)malloc(sizeof(GooInfo)*INITIAL_SIZE);if(records=NULL)printf(memory fail!); /内存不够,退出程序exit(-1);arraySize=INITIAL_SIZE;printf(n); printf(*n);printf(* *n);printf(* *n); printf(* *n); printf(* *n);printf( n);printf( 欢迎进入商品月销售管理系统 n); printf( n);prin
17、tf(* *n); printf(* *n); printf(* *n); printf(*n); printf(n); printf(t n);printf(t 13计算机1班50号 n); printf(t 设计者_朱冰 n);printf(t 指导老师_胡玉平n); printf(t n); printf(用户名:);gets(user);printf(O(_)O请输入密码:); for(i=0;i2;i+) stri=getch(); printf(*); if(strcmp(user,ZB)=0&strcmp(str,50)=0) handle_menu();菜单处理函数void h
18、andle_menu(void)for(;)switch(menu_select() case 1: addRecord(); break; case 2: increaseNum(); break; case 3: decreaseNum(); break; case 4: display(); break; case 5: queryInfo(); break; case 6: sort(); break; case 7: loadRecords(); case 8: quit();菜单选择函数int menu_select()char s2;int cn=0;printf(n);prin
19、tf(t么么哒(3)n);printf(t1.输入商品信息n); printf(t2.进货功能n);printf(t3.售出功能n);printf(t4.显示商品信息n);printf(t5.查找功能n);printf(t6.统计功能n);printf(t7.读取保存的记录n);printf(t8.退出程序n);printf(nt数字对应功能选择,请选择1-8:);for(;)gets(s); cn=atoi(s);if(cn8)printf(nt输入错误,重选1-8:);else break;return cn;void quit(void)char str5;if(savedTag=1)p
20、rintf(是否保存原来的记录呢?(y/n));gets(str);if(str0!=n& str0!=N)saveRecords();free(records);exit(0);add_disp.c#includegoods.h*输出表头void showTable(void) printf(*n);printf(编号t名称t生产地t单价t销售数量t现库存量t销售总额n);void display(void)int i;if(num=0)printf(没有可供选择的商品信息);return;showTable();for(i=0;i=arraySize)records=realloc(rec
21、ords,(arraySize+INCR_SIZE)*sizeof(GooInfo);if(records=NULL)printf(memory failed!);exit(-1);arraySize=arraySize+INCR_SIZE; printf(商品编号:);gets(recordsnum.number);printf(商品名称:); gets(recordsnum.name); printf(生产地:);gets(recordsnum.address); printf(单价:); scanf(%f,&recordsnum.price); printf(当前销售总数量:); sca
22、nf(%d,&recordsnum.amount);printf(库存余量:);scanf(%d,&recordsnum.rest);recordsnum.sum=recordsnum.amount*recordsnum.price;getchar();num+;printf(现在共有%d条信息,num); savedTag=1;save_load.c#includegoods.h文件存储操作函数int saveRecords()FILE *fp;char fname30;if(num=0)printf(没有记录可存!);return -1;printf(请输入要存入的文件名(直接回车选择文件
23、goo_info));gets(fname);if(strlen(fname)=0)strcpy(fname,goo_info);if(fp=fopen(fname,wb)=NULL)printf(不能存入文件n);return -1;printf(n存文件.n);fwrite(records,sizeof(GooInfo)*num,1,fp);fclose(fp);printf(%d条记录已经存入文件,请继续操作n,num);savedTag=0;/更新是否已保存的标记return 0;文件读取函数int loadRecords(void)char fname30;char str5;if(
24、num!=0&savedTag=0)printf(请选择您是要覆盖现有记录(y)还是要将);printf(读取的纪录添加到现有记录之后(n)?n);printf(直接回车则覆盖现有记录n);gets(str);if(str0=n|str0=N)/内存记录学生人数非0且已保存savedTag=1;elseif(savedTag=1)printf(读取文件将会更改原来的记录,);printf(是否保存原来的记录(y/n); gets(str);if(str0=n|str0=N)saveRecords();num=0;printf(请输入要读取的文件名(直接回车选择文件goo_info):);get
25、s(fname);if(strlen(fname)=0)strcpy(fname,goo_info);if(fp=fopen(fname,rb)=NULL)printf(打不开文件!请重新选择n);return -1;printf(n取文件.n);while(!feof(fp)/现在数组空间不足,需要重新申请空间if(numarraySize)records=realloc(records,(arraySize+INCR_SIZE)*sizeof(GooInfo);if(records=NULL)printf(memory failed!);exit(-1);arraySize=arraySi
26、ze+INCR_SIZE;if(fread(&recordsnum,sizeof(GooInfo),1,fp)!=1)break;num+;fclose(fp);printf(现在共有%d条记录。,num);handle_menu();*找到销售量最大的商品的函数void sort(void) int i,j;float max;if(num=0)printf(亲,当前没有信息可以查询哦);return; max=records0.sum; j=0; for(i=0;inum;i+) if(maxrecordsi.sum) max=recordsi.sum;j=i; showTable();
27、printf(最大销售额的商品信息是:n); printf(%st%st%st%.2ft%8dt%8dt%.2fn,recordsj.number,recordsj.name,recordsj.address,recordsj.price,recordsj.amount,recordsj.rest,recordsj.sum); printf(*n);find_count.c#includegoods.h*查找记录函数int findRecord(char target,int targetType,int from)int i;for(i=from;inum;i+)if(targetType=
28、0 & strcmp(target,recordsi.number)=0|(targetType=1 & strcmp(target,recordsi.name)=0)|(targetType=2 & strcmp(target,recordsi.address)=0)return i;return -1;*查询指定商品信息的函数void queryInfo(void)char str5;char target20;int type;int count;int i;if(num=0)printf(没有可供查询的记录);return;while(1)printf(请输入查询方式:(输入回车结束查
29、询)n);printf(1.按商品编号n); printf(2.按商品名称n); printf(3.按商品生产地n);gets(str);if(strlen(str)=0)break;if(str0=1)printf(请输入欲查询的商品编码:);gets(target);type=0;else if(str0=2)printf(请输入欲查询的商品名称:);gets(target);type=1;else if(str0=3) printf(请输入欲查询的商品生产地:);gets(target);type=3;i=findRecord(target,type,0);if(i!=1)showTab
30、le();count=0;while(i!=-1)count+;printf(%st%st%st%.2ft%8dt%8dt%.2fn,recordsi.number,recordsi.name,recordsi.address,recordsi.price,recordsi.amount,recordsi.rest,recordsi.sum); printf(*n);i=findRecord(target,type,i+1);if(count=0) printf(没有符合条件的商品n);elseprintf(一共找到%d条商品信息n,count);sell_buy.c#includegoods
31、.hvoid increaseNum(void)char str10;int i;char target20;int type;if(num=0)printf(仓库没有货了O_o,进货吧n);elseprintf(继续进货n);while(1)printf(您将要进货,确定么?(Y/n));gets(str);if(str0=n|str0=N)/不再进货break; printf(请输入进货商品的方式:(输入回车结束操作)n);printf(1.按商品编号n); printf(2.按商品名称n);gets(str);if(strlen(str)=0)break;if(str0=1)printf
32、(请输入商品编码:);gets(target);type=0;elseprintf(请输入商品名称:);gets(target);type=1;i=findRecord(target,type,0); while(i!=-1)showTable(); printf(%st%st%st%.2ft%8dt%8dt%.2fn,recordsi.number,recordsi.name,recordsi.address,recordsi.price,recordsi.amount,recordsi.rest,recordsi.sum);printf(*n);printf(确定购进该商品么?(Y/N))
33、; gets(str);if(str0=y|str0=Y)printf(请输入欲购入数量:n);gets(str);recordsi.rest=recordsi.rest+atoi(str);printf(进货后该商品的信息为:n);showTable(); printf(%st%st%st%.2ft%8dt%8dt%.2fn,recordsi.number,recordsi.name,recordsi.address,recordsi.price,recordsi.amount,recordsi.rest,recordsi.sum); printf(*n);else printf(不进货了.
34、n);break;if(i=-1)printf(无此商品,确定进货新的商品?(y/n)n); gets(str);if(str0=n|str0=N)/不再进货break;if(str0=y|str0=Y)printf(商品编号:);gets(recordsnum.number);printf(商品名称:); gets(recordsnum.name); printf(商品生产地:);gets(recordsnum.address);printf(单价:); scanf(%f,&recordsnum.price); printf(当前销售总数量:); scanf(%d,&recordsnum.amount);printf(库存余量:);scanf(%d,&record