




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程设计课程名称 程序设计课程设计 设计题目 商品月销售信息管理软件设计 班级与班级代码 2015计算机三班 专 业 计算机科学与技术 指导教师: 胡玉平 学 号:姓 名: 史鹏飞 提交日期: 2016 年4 月 20 日 广东财经大学教务处制姓名 史鹏飞 课程设计成绩 评语:评价内容不及格及格中良优表达精练,格式准确,基本无错别字内容完整,思路清晰,结构严谨,设计科学,可操作性强程序能完成课程设计任务书所规定的任务,功能完善,独立分析和解决问题能力较好。代码简洁,算法清晰,可读性强无抄袭现象且课程设计报告体会深刻 指导教师(签名) 年 月 日商品月销售信息管理软件设计1 系统功能要求(需求分析):采用结构体数组或文件形式存储每种商品的信息,每种商品应包含如下几方面的信息:商品编号、商品名称、单价、生产地、本月当前销售总数量、本月当前销售总金额、库存余量。软件由主函数(含欢迎界面)和下列5个功能模块组成:(1)售出功能(被售出之商品数量 减x);(2)进货功能(被购进之商品数量增x);(3)查找功能(查找指定商品余存信息、价格信息);(4)排序功能(从当前销售总金额最大的商品排到最小);(5)退出程序2 系统总体(概要)设计思想(1)开发与设计的总体思想商品月销售信息管理软件算法说明:STEP1 预处理,定义结构体STEP2 进入欢迎界面STEP3 选择某一种功能STEP4 根据提示输入一个字母STEP5 对于输入的字母编辑关于显示、售出、进货、查找、统计功能的函数STEP6 如果输入的字母表示退出,退出系统(2)系体模块结构图(3)系统文件及函数组成、功能源文件函数名或其他成分功 能 merchandise.cmain 总控函数 menu_select 菜单选择 handle_menu 菜单处理 quit 结束运行 add_disp.c showTable 输出表头 addRecord 在表尾追加信息 display 显示信息 que_remv_modi.c removeRecord 删除指定记录 findRecord 查找指定记录 queryInfo 查询指定商品信息 copyRecord 复制记录 modifyRecord 修改指定商品信息 sal_ purchase.c purchase/saveRecords 商品进货/保存信息 sales/loadRecords 商品销售/读取信息merchandise.h 常数 提供常数 结构声明 商品信息结构 库函数及函数原型声明 引用库函数及函数系统详细设计(1)函数的描述文件存储操作函数函数原型:int saveRecords(void)功能:将记录存入默认文件或指定文件变量类型:文件指针、char型参数:void返回值:成功0,失败-1工作方式:数组records被保存至指定文件要求:报告是否有记录可存、是否能正常建立或打开文件、根据要求执行存入操作并保存存入记录的条数。文件读取操作函数函数原型:int loadRecords(void)功能:将默认文件或指定文件里的记录取入内存变量类型:文件指针、char型参数:void返回值:成功0,失败-1工作方式: records为从指定文件中读取出的记录。要求:报告是否有记录可存、是否能正常打开文件、是否覆盖已有记录以及读取记录的条数。显示所有商品信息函数函数原型:void display(void)功能:显示内存里的记录信息变量类型:int型参数:void返回值:void工作方式:从头部开始逐个显示记录信息内容。要求:报告是否有记录以及记录条数和内容。增加信息函数函数原型:void addRecord(void)功能:增加记录变量类型:int型、char型参数:void返回值:void工作方式:从尾部开始逐个追加记录。要求:将新纪录追加在记录尾部,并对记录进行计数。输出表头函数函数原型:void showTable(void)功能:输出表头信息变量类型:int型、char型参数:void返回值:void工作方式:输出一行表头信息。要求:输出一行表头信息。输出表头函数函数原型:void removeRecord(void)功能:删除内存数组中的指定记录。变量类型:int型、char型、指针型参数:void返回值:void工作方式:根据给定的关键字,查找符合的记录并删除之。要求:将后面的记录前移,同时改变名次并给出相关信息。查找指定记录函数函数原型:void findRecord(char*target,int t,int a)功能:查找指定记录。变量类型:int型、char型、指针型参数:char*target:欲查找记录的某一项与target相同。 int targetType:表明通过哪一项来查找。 int from:从第from项开始找。返回值:int(找到的记录的序号),查找符合记录的序号。工作方式:根据给定的关键字,查找符合的记录的序号。要求:找不到则返回-1。查询指定商品信息记录函数函数原型:void queryInfo(void)功能:将一个文件内容追加到另一个文件的尾部。变量类型:int型、指针型参数:void。返回值:void工作方式:可以按照商品编号、名称、单价来查询。要求:打印查询到的商品信息或给出相关信息。记录复制函数函数原型:void copeRecord(MerInfo*,MerInfo*)功能:将src指向的一条记录复制给dest指向的记录。变量类型:int型、char型、指针型参数:MerInfo*src为源记录,MerInfo*dest为目的记录。返回值:void工作方式:将源记录逐条复制到目的记录。要求:正确复制字符串。.修改指定商品信息函数函数原型: void modifyRecord(void)功 能:找到指定记录并修改变量类型:int型、char型返 回 值:void工作方式:可以按照编号、名称或单价找到要修改记录,确认后方可修改要 求:同时需要修改商品月售总量和总金额商品售出函数函数原型:void sales (void)功能:售出商品。变量类型:int型、char型参数:void。返回值:void工作方式:根据要求改变商品库存数量。要求:结束运行之前,对修改的记录进行存储。商品进货函数函数原型:void purchase(void)功 能:进货商品变量类型:int型、char型返 回 值:void工作方式:按编号找到要进货的记录,确定后输入要进货的数量要 求:结束运行之前,对修改的记录进行存储。菜单处理函数函数原型:void handle_menu(void) 功 能:处理选择的菜单命令变量类型:int型、char型返 回 值:void工作方式:根据命令,调整相应函数。要 求:给出结束信息菜单选择函数(一个管理员菜单,一个顾客菜单)函数原型:void menu_select(void)和void men_ select (void)功 能:接受用户选择的命令代码变量类型:int型、char型返 回 值:void工作方式:返回命令代码的整数值要 求:只允许选择规定键,如果输入不和要求,则提醒用户重新输入结束程序运行函数函数原型:void quit(ADDR*)功能:结束程序运行。变量类型: char型参数:void。返回值:void工作方式:根据要求决定在退出前是否将修改的记录存入文件。要求:结束运行之前,询问是否对修改的记录进行存储。主函数函数原型:void main(void)功能:控制程序。变量类型:int型、char型、指针型参数:void。返回值:void要求:管理菜单命令并完成初始化。头文件文件名称:merchandise.h功能:声明函数类型,包含文件及自定义宏和数据结构。变量类型:int型、char型、指针型要求:报告是否能正常打开文件执行存入操作及存入记录的条数。(2)主要函数流程图.增加新的商品信息函数流程图.按编号、名称或单价查找商品信息。(3)编码(附后)4 、系统测试程序调试结果如下:(1)登陆管理员/顾客账号: (2)添加商品信息(内含编号重复)(编号不能重复!)(3)显示商品信息(4)商品售出与进货(并显示售出与进货后的商品信息)(5)修改商品价格(并显示结果)(6)查询商品信息(7)删除商品信息(8)对商品信息进行排序5、总结:在这次设计软件中,我受益匪浅。以前很多忽略的问题在实践当中暴露无遗,例如一些数组指针的调用及空间分配问题让我在这次设计中苦恼了好久等等,还有软件在运行时莫名其妙就退出等书本上没有的问题。虽然这些问题让我废了好久的时间去解决,但在解决的过程中我学会了如何利用互联网查找相应的知识,提高了自己的自学能力。另外总会因为自己的粗心而让函数的参量、变量等东西兼顾不了,犯一些基础性的错误,日后一定要吸取教训,认真思考程序的流程。6、结束语:这个课程设计能够这样成功完成,靠的不仅是自身的努力,还有网上的知识、同学的无私帮助和老师的悉心教导和耐心解答。参考文献 1 谭浩强,C程序设计(第二版),北京:清华大学出版社,2001.1 (左对齐,宋体,五号)2 陈朔鹰,C语言程序设计习题集,北京:人民邮电出版社,2003.6附程序清单merchandise.h#ifndef H_STUDENT_HH /如果没有定义H_STUDENT_HH,继续执行#define H_STUDENT_HH/定义H_STUDENT_HH,可避免重复包含宏定义#include #include #include #include #include/头文件包含#define INITIAL_SIZE 100 / 数组初始大小#define INCR_SIZE 5/0 / 数组每次增加的大小/可根椐系统使用需要的常量定义struct merchandise_info char number20; / 商品编号char name20; / 商品名float price; / 单价char production20;/ 生产地int salesQuantity; / 总数量float salesAmount; / 总金额int inventory; /库存;typedef struct merchandise_info MerInfo;/定义一个类型名MerInfo代表定义的结构体merchandise_infoextern int numMer; / 记录的商品数extern MerInfo* records; / 记录商品信息的数组指针extern int arraySize; / 数组大小/共享的全局变量定义void handle_menu(void);void handle_men(void);int menu_select(void);void addRecord(void);void modifyRecord(void);void display(void);void queryInfo(void);void removeRecord(void);void decreaseAmount(void);void increaseAmount(void);void sortInfo(void);int saveRecords(void);int loadRecords(void);void quit(void);void qui(void);void showTable(void);int findRecord(char* target, int targetType, int from);void copyRecord(MerInfo* src, MerInfo* dest);/函数申明,注意()里必须包含对应函数形参类型#endif / H_STUDENT_HHmerchandise.c#includemerchandise.h/*初始化*/int numMer=0;/记录的商品数MerInfo*records=NULL;/记录商品信息的数组int arraySize;/数组的大小/* 主函数 */int main() char str15=spf; char str10; int mima1=123; int mima; char ch5;/初始化数组records=(MerInfo*)malloc(sizeof(MerInfo)*INITIAL_SIZE);/给指针records分配空间if (records=NULL)printf(memory fail!);exit(-1);/非0就会退出arraySize=INITIAL_SIZE; system(color 75);printf(n);printf(t*n); printf(t* *n);printf(t* 欢迎使用! *n);printf(t* 商 品月销售信息 *n);printf(t*shangpinyuexiaoshouxinxi *n);printf(t* 管 理 系 统 *n);printf(t* guanlixitong *n);printf(t* *n);printf(t* *n);printf(t*n);printf(t*n);printf(t*制作人 : 史鹏飞 *n);printf(t* 学号 :*n);printf(t*班级 : 计算机科学与技术三班 *n);printf(t*指导老师 : 胡玉平 *n);printf(t* *n);printf(t*n);printf(n);printf(是否是管理员,是管理员请输入y:); gets(ch);if(ch0=Y|ch0=y)for(;) printf(请输入用户名:); gets(str); if(strcmp(str,str1)=0) printf(请输入密码:); scanf(%d,&mima); if(mima=mima1) break; else printf(密码不正确!); else printf(该用户名不存在!); loadRecords(); handle_menu();elseloadRecords(); handle_men();system(pause); return 0;/* 菜单处理函数 */void handle_menu(void)for(;) switch(menu_select() case 1: display();/显示信息 break; case 2: addRecord();/增加新商品信息“这里要保存” break; case 3: increaseAmount();/商品进货 break; case 4: decreaseAmount();/商品售出 break; case 5: modifyRecord();/修改商品价格 break; case 6: queryInfo();/查询商品信息 break; case 7: removeRecord();/删除商品信息“这里要保存” break; case 8: sortInfo();/对商品月销售总金额排序 break; case 9: quit();void handle_men(void) int i;for(;)printf(n); printf ( t 1. 显示商品信息n ); printf ( t 2. 查询商品信息n );printf ( t 3. 结束运行n ); printf ( nt左边数字对应功能选择,请选1-3 );scanf(%d,&i); for(; ;)if(i=1 ) break; else printf(nt输入错误,重选1-3:);switch(i)case 1:display();/显示信息 break;case 2:queryInfo();/查询商品信息 break;case 3:qui();/* * 菜单选择函数menu_selected */int menu_select( )char s2;int cn=0;printf(n); printf ( t 1. 显示商品信息n ); printf ( t 2. 增加新商品信息n );printf ( t 3. 商品进货n );printf ( t 4. 商品售出n );printf ( t 5. 修改商品价格n );printf ( t 6. 查询商品信息n );printf ( t 7. 删除商品信息n );printf ( t 8. 对商品月销售总金额进行排序n );printf ( t 9. 结束运行n );printf ( nt左边数字对应功能选择,请选1-9 );/常用功能的提示应当放前面,对整个的功能排列作了对应调整for(; ;)gets(s);cn = atoi (s);if(cn9 ) printf(nt输入错误,重选1-9:);else break;return cn;/*结束运行,退出*参数量void*/void quit(void) char str5;printf(是否保存记录?(Y/n));gets(str);printf(正在退出.n);if(str0!=Y&str0!=y) saveRecords();printf(已经退出.n);free(records);exit(0);void qui(void) printf(正在退出.n);printf(已经退出.n);free(records);exit(0);add_disp.c#include merchandise.h/显示void showTable(void)printf(编号t名称t单价t生产地t总销量t总金额t库存n);/显示商品的信息void display(void)int i;if (numMer= 0) printf(没有可供显示的记录!); return;showTable();for (i=0; i= arraySize) / 现在的数组空间不足,需要重新申请空间records = realloc(records,(arraySize+INCR_SIZE)*sizeof(MerInfo);/新空间大小变为(arraySize+INCR_SIZE)记录大小,即在原来基础上增加INCR_SIZE个记录大小if (records = NULL)printf(memory failed!);exit(-1);arraySize = arraySize+INCR_SIZE; /arraySize修改为新空间可保存的记录数 printf(请输入该商品的编号:); while(1) gets(recordsnumMer.number); for(i=0;inumMer;i+) if(strcmp(recordsi.number,recordsnumMer.number)=0) printf(该编号已经存在,请重新输入一个编号:); break; if(i=numMer)break; printf(请输入该商品的名称:);gets(recordsnumM);printf(请输入该商品的单价:); scanf(%f,&recordsnumMer.price);gets(str);printf(请输入该商品的生产地:); gets(recordsnumMduction); printf(请输入该商品的本月当前销售总数量:); scanf(%d,&recordsnumMer.salesQuantity);recordsnumMer.salesAmount=recordsnumMer.salesQuantity*recordsnumMer.price;printf(请输入该商品的库存余量:); scanf(%d,&recordsnumMer.inventory); numMer+; saveRecords(); printf(现在一共有%d条信息n,numMer); /* * 文件排序操作函数 * 返回:void */void sortInfo(void) char str15;char str5;int i,j;MerInfo tmps;if (numMer = 0) printf(没有可供排序的记录!); return;printf(请输入您希望进行排序的方式:n);printf(1. 按商品编号进行升序排序n);printf(2. 按商品编号进行降序排序n);printf(3. 按商品名进行升序排序n);printf(4. 按商品名进行降序排序n);printf(5. 按销售总金额进行升序排序n);printf(6. 按销售总金额进行降序排序n);printf(7. 按错了,我并不想进行排序n);gets(str);if (str06) return; / 进行排序for(i=0;inumMer-1;i+) for(j=i+1;j0| (str0=2&strcmp(recordsi.number,recordsj.number)0)| (str0=4&strcmp(,)recordsj.salesAmount)| (str0=6&recordsi.salesAmountrecordsj.salesAmount) copyRecord(&recordsi,&tmps); copyRecord(&recordsj,&recordsi); copyRecord(&tmps,&recordsj); display();printf(排序已经完成n); printf(是否对排序的结果保存,是请输入Y,不是则回车或者输入其他字符。); gets(str1); if(str10=y|str10=Y) saveRecords();que_remv_modi.c#include merchandise.h/* * 查找指定的记录 * 参数:target:欲查找记录的某一项与target相同 *targetType:表明通过哪一项来查找,0为商品编号,1为商品名,2为单价 *from:从第from个记录开始找 * 返回:找到的记录的序号,若找不到则返回-1 */int findRecord(char*target, int targetType, int from)/重点理解2int i;for(i=from;inumMer;i+) if(targetType=0&strcmp(target,recordsi.number)=0)| (targetType=1&strcmp(target,)=0)| (targetType=2&atof(target)=recordsi.price) return i;/如果找到符合条件的记录,返回记录号i return -1;/如果没有找到,返回-1 /* * 查询指定商品的信息 * 可以按照商品编号、商品名或单价来查询 */void queryInfo(void)char str5;/查询方式字符串char target20;/查询的目标数据项int type;/查询项int count;/查询到的商品数int i; if(numMer=0)printf(没有可供查询的记录);return;while(1) printf(请输入查询的方式:(直接输入回车则结束查询)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; elseprintf(请输入欲查询的商品的单价:);gets(target);type = 2; i = findRecord(target,type,0);/,从0号记录起查找,查询项type,查询目标数据项targetif(i!=-1)/ 打印查询到的商品的信息showTable();/表头 count = 0;while(i != -1)count+;/查询到的商品数加1printf(%st%st%.2ft%s,recordsi.number,,recordsi.price,duction); printf(t%dt%.2ft%dn,recordsi.salesQuantity,recordsi.salesAmount,recordsi.inventory); /以不同的输出方式。输出i记录的各个数据i = findRecord(target,type,i+1);/从i+1条记录起查找下一条符合条件的记录if (count=0) printf(没有符合条件的商品!n); else printf(一共找到了%d种商品的信息n,count);/* * 删除指定的记录 */void removeRecord(void)char str5;char target20;int type;int i,j;if(numMer=0)printf(没有可供删除的记录);return;while(1) printf(请输入如何找到欲删除的记录的方式:(直接输入回车则结束移除操作)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; elseprintf(请输入该商品的单价:);gets(target);type = 2;i = findRecord(target,type,0);if (i=-1) printf(没有符合条件的商品!n);while(i != -1)showTable();printf(%st%st%.2ft%s,recordsi.number,,recordsi.price,duction); printf(t%dt%.2ft%dn,recordsi.salesQuantity,recordsi.salesAmount,recordsi.inventory);printf(确定要删除这件商品的信息吗?(y/N);gets(str); /重点理解3 if(str0=y|str0=Y) numMer-; /将后面的记录前移 for(j=i;jnumber,src-number);strcpy(dest-name,src-name);strcpy(dest-production,src-production);dest-price = src-price;dest-salesQuantity = src-salesQuantity;dest-salesAmount = src-salesAmount; dest-inventory = src-inventory;/* * 修改指定商品的信息 */void mod
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年甘肃武威嘉峪关临夏州中考物理试卷真题(含答案详解)
- 绿豆发芽率与株高生长规律探究:红蓝光LED照射实验报告论文
- 基于STEM教育的小学科学课程评价改革与实践策略研究论文
- 节目制作部管理制度
- 英格兰民宿管理制度
- 茶叶大学生创新创业计划书(5篇)
- 殡葬礼仪师试题【内含答案】
- 幼儿园变废为宝教案及教学设计
- 地理(北京)(A3考试版)
- 建筑施工特种作业-建筑起重机械安装拆卸工(塔式起重机)真题库-4
- 中国玉石及玉文化鉴赏知到章节答案智慧树2023年同济大学
- 家庭园艺营养土产品技术标准2022
- 美容院入股协议书
- 浅谈歌曲《小路》的情感表达
- 环境心理学永川观音山公园调研报告
- 2023年山东军转真题
- 国开电大专科《管理英语1》机考总题库
- 2023年杭州育才中学小升初语文考试真题卷含标准答案
- 《水产动物营养与饲料》期末考试复习题及参考答案
- SB/T 11067-2013金属材料仓储技术与管理规范
- 工业品营销-七重攻略
评论
0/150
提交评论