用C语言进行商品信息管理系统设计_第1页
用C语言进行商品信息管理系统设计_第2页
用C语言进行商品信息管理系统设计_第3页
用C语言进行商品信息管理系统设计_第4页
用C语言进行商品信息管理系统设计_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、C语言程序设计课程设计报告专 业: 电子信息工程(本)班 级: 0902 姓 名: 学 号: 指导教师: 二0一0 年 十二 月 二十九 日目 录一.商品信息管理系统设计的目的03二.商品信息管理系统设计题目描述和要求04三.商品信息管理系统设计报告内容043.1需求分析043.2概要设计043.3详细设计053.4编写代码063.5程序分析11四.总结11五.参考书目12六.附源程序13二、设计目的 1、熟练掌握C语言课程中所学的理论知识;通过课程设计让我们对掌握的C语言的理论知识更加熟练, 加深对C语言的各种数据类型的理解,以及在编程中对各种数据类型,运算符和表达示的运用,更加熟练掌握运用

2、不同的结构类型如顺序结构、选择结构、循环结构,同时掌握数组、结构体在编程中的运用的优点。2、通过综合C语言的基本知识来解决实际问题;对理论知识有了一定的掌握后,要求我们能做到理论与实践相结合,通过综合C语言的基本知识来解决实际问题,这次的课程设计就是我们理论联系实际的案例,要求我们编写一个商品信息管理系统,方便对商品的各类指标进行存储,查询,为商店的管理带来方便,是我们对解决实际问题的一次尝试。3、加强分析和解决问题的能力。通过课程设计,加强我们对实际问题的分析能力,让我们在学习过程中的一些想法得到检验,可以让我们的思维在辩证中提高,最重要的是可以分析我们过往的不足,对于以后遇到类似问题可以更

3、加快速、完善的解决,同时让我们积累了一定的经验,为今后的发展奠定了基础。二.程序设计题目描述和要求设计对n种商品进行管理的商品信息管理系统,商品信息管理系统是为了商品信息管理的方便而做的一套商品信息管理系统。本管理系统只有获得权限的用户才可以管理商品信息,否则不可以进行操作,提高了管理系统的安全性。获得权限的用户可以进行商品信息修改、商品信息删除、商品信息查询、计算总价格和平均价格的基本操作,还可以轻而易举得到统计信息,即商品编号,商品名称,出厂日期,商品价格。充分展示了一个商品信息管理系统所带来的方便。(可是本系统不支持商品信息永久保留的功能)系统功能包括:1、系统以菜单方式工作,密码登陆。

4、2、商品信息的录入功能(增加数据)。用数组数据类型赋初值的方法把商品信息送到各个数组中(但注意要是合法数据),然后把它们输出显示。3、商品信息的删除(删除数据)。任意输入一个商品的编号,将它所有的信息从组数中删除。4、商品信息的浏览功能(查找数据)。任意输入一个商品的编号,打印出他的所有数据。要求能多次查找。5、商品信息的删除(修改数据)。任意输入一个商品的编号,打印出所有相关信息后,可对某一项信息进行修改并保存。6、商品信息的计算并排序。计算所有商品的总价格及平均价格(aver,单精度,输出一位小数),将包括所有数据的数组元素按价格从低到高的顺序排序打印出来。三.程序设计报告内容3.1需求分

5、析:题目要求设计的系统满足如下一些要求:菜单方式工作;添加商品信息;删除指定商品信息;修改指定商品信息;浏览指定商品的信息;计算所有商品的总价格和平均价格;对于排序,根据题目的要求和自身设计的需求,本程序按照每种商品的价格从低到高的方式进行排序。3.2概要设计:本系统分为以下几个模块来实现其功能:密码登陆验证模块,为单独设计函数,放在主体main函数中;任务选择主菜单模块,包括:增加商品信息模块,删除商品信息模块,查找商品信息模块,修改商品信息模块,计算商品总价格及商品平均价格模块,退出系统模块;以上各模块除退出系统直接调用系统exit函数外,其它模块均单独放在一个函数里;分支选择利用的是sw

6、itch语句。增加商品信息模块所用的函数接口为ADD,无参数调用;删除商品信息模块所用的函数接口为DELETEC【防止和系统的DELETE函数冲突】,无参数调用;查找商品信息模块的函数接口为FIND,无参数调用;修改商品信息模块的函数接口为MODIFY,无参数调用;计算商品平均价格和总价格的函数为AVER,无参数调用;主菜单功能选择模块函数接口为choose,无参数调用。系统使用的数据结构为结构体链表。结构体成员包括结构体成员变量和结构体方法,成员变量包括:Number,商品编号;name,商品名称;date,商品的出场日期;factory,制造商的名字;price,商品的价格;next结构体

7、指针,指向链表的下一个节点;pre结构体指针,指向链表的上一个节点。结构体成员列表包括:Course,构造函数;output,输出当前节点的信息,也就是商品的信息。链表有一个头节点:start,一个链表尾节点:cur,添加商品信息通过操作尾节点cur实现;删除商品信息,查找商品信息和修改商品信息都从start节点开始操作。本系统预设密码为“12345”,不提供密码修改功能。3.3 详细设计:Main函数:case 1:ADD(); break; 增加商品case 2:DELETEC();break; 删除商品case 3:FIND(); break; 查找商品case 4:MODIFY();b

8、reak; 修改商品信息case 5:AVER(); break; 总价格和平均价格case 6: sortSeq; break;按照商品价格排序case 7:SORT(); break;算法:本系统的密码登陆及验证模块,为单独设计的函数,放在主体main函数中。因此主体main函数包括了使系统通过密码登陆(本程序通过调试和实际的操作反馈出,密码登录次数在程序的设计过程中没有做出限制,可以说是设计的一个缺陷)。伪代码如下:while(密码不匹配) 重新输入密码end whilewhile (用户输入选择)if (选择增加商品信息) ADD( );else if (删除指定商品信息) DELET

9、EC( );else if (修改指定商品信息) MODIFY( );else if (查找指定商品信息) FIND( );Else if (计算总价格和平均价格)AVER( );Else if(退出系统)exit( );end while*添加商品信息伪代码如下:ADD:while(继续添加)(“输入添加商品的信息”)New(是一个新的节点,存储添加的商品信息)End while(“返回主菜单”)End ADD*删除商品信息伪代码如下:DELETEC:while(继续删除)输入删除的商品编号for(链表上的节点)if(当前节点的编号 = 待删除节点编号)删除当前节点,更改前后节点的next和

10、pre指针指向标记找到节点else then 继续遍历end forif(假如没有找到)输出提示信息else then输出删除成功end while返回主菜单end DELETEC*查找商品信息伪代码如下:FIND:while(继续查找)输入查找的商品编号for(链表上的节点)if(当前节点的编号 = 等待查找的节点编号)调用当前节点输出函数output,打印节点信息标记找到节点else then 继续遍历end forif(假如没有找到)输出提示信息end while返回主菜单end FIND*修改商品信息伪代码如下:MODIFY:while(继续修改)输入修改的商品编号for(链表上的节点

11、)if(当前节点的编号 = 待修改节点编号)输入新的商品信息标记找到节点else then 继续遍历end forif(假如没有找到)输出提示信息else then提示修改成功end while返回主菜单end MODIFY*计算总价格和平均价格伪代码如下:AVER:初始化总学分sum为0for(未到达末尾节点)将节点学分累加,保存到sum变量中同时累计节点个数end for打印并输出总价格和平均价格end AVER*选择函数伪代码如下:choose:打印主菜单,并提示输入命令编号然后系统执行指定命令end choose程序流程图如下:输入查询删除修改计算结束程序输入密码界面主菜单输入数据完毕

12、输入的数据输入的数据输入的数据输入的数据完毕完毕完毕选择功能计算总价格平均价格价格返回主菜单3.4 编写代码作为小组长除了参与主函数的设计外,我在小组内主要负责的模块是,商品信息输出和俺照价格(从低到高的顺序)进行排序两个模块。1、 个体任务模块的源代码如下:商品信息输入:Commodity *cur = NULL, *start = NULL;Commodity *tp_Pre = NULL;void ADD() int label;/商品编号 char name50;/商品名称 int elec; int sco;/学分 puts(输入添加的商品信息,按照如下格式:编号 名称 出场年月 价

13、格); puts(返回主菜单输入-1); while(true) scanf(%d, &label); if(-1 = label) break; scanf(%s %d %d, name, &elec, &sco); cur = new Commodity(label, name, elec, sco); if(NULL = start) start = cur; if(NULL = tp_Pre) tp_Pre = cur; else cur -pre = tp_Pre; tp_Pre -next = cur; tp_Pre = cur; puts(添加成功,您添加的信息如下:); cur

14、 -output();/ cur = cur -next; system(cls); 按照商品价格排序:sortSeqMAX;/结构体数组,用于排序用int MyCMP(const void *a, const void *b) struct Commodity* aa = (Commodity*)a; struct Commodity* bb = (Commodity*)b; return aa -price - bb -price;Commodity *cur = NULL, *start = NULL;Commodity *tp_Pre = NULL;2、 具体负责模块的功能的设计与实现

15、a、商品信息输入模块:void ADD() int label;/商品编号 char name50;/商品名称 int elec; int sco;/学分 puts(输入添加的商品信息,按照如下格式:编号 名称 出场年月 价格); puts(返回主菜单输入-1); while(true) scanf(%d, &label);/输入添加的商品编号 if(-1 = label) break;/假如输入-1,表示退出 scanf(%s %d %d, name, &elec, &sco);/否则,继续输入剩余信息 cur = new Commodity(label, name, elec, sco);

16、/构造一个新节点,存储新加商品的信息 if(NULL = start) start = cur;/假如是第一件商品,那么讲链表头结点指向他 if(NULL = tp_Pre) tp_Pre = cur;/同上,将当前指针指向第一个节点 else /否则,更改节点指向关系 cur -pre = tp_Pre; tp_Pre -next = cur; tp_Pre = cur; puts(添加成功,您添加的信息如下:); cur -output();/输出新加商品的信息,用于确认录入的正确性 cur = cur -next;/当前指针移向下一个节点位置 system(cls); b、按照价格排序模

17、块:void SORT()/排序函数 Commodity *tp = start;/构造一个临时结构指针,获取链表头指针 double aver = 0;/存储节点价格的平均值 int cnt = 0;/计数商品个数 while(NULL != tp)/从链表头结点开始遍历,获取每个节点,存到 /结构数组sortSeq中,便于下面调用系统的快速排序函数,因为链表不支持排序 sortSeqcnt + = *tp; tp = tp -next; /调用系统 的快速排序函数对结构数组按照价格关键字进行排序 qsort(sortSeq, cnt, sizeof(Commodity), MyCMP);

18、int i; /将排好序的结构数组按照排序规则:价格从小到大挨个输出 for(i = 0; i price - bb -price;Commodity *cur = NULL, *start = NULL;Commodity *tp_Pre = NULL;void ADD() int label;/商品编号 char name50;/商品名称 int elec; int sco;/学分 puts(输入添加的商品信息,按照如下格式:编号 名称 出场年月 价格); puts(返回主菜单输入-1); while(true) scanf(%d, &label); if(-1 = label) brea

19、k; scanf(%s %d %d, name, &elec, &sco); cur = new Commodity(label, name, elec, sco); if(NULL = start) start = cur; if(NULL = tp_Pre) tp_Pre = cur; else cur -pre = tp_Pre; tp_Pre -next = cur; tp_Pre = cur; puts(添加成功,您添加的信息如下:); cur -output();/ cur = cur -next; system(cls);void DELETEC() puts(输入要删除的商品编

20、号, -1退出); int lab; while(true) scanf(%d, &lab); if(-1 = lab) break; int find = 0; Commodity *tp = start; int cnt = 0; while(NULL != tp) + cnt; if(tp -label = lab) find = 1; break; tp = tp -next; if(1 = find) Commodity *bak = tp; puts(你要删除的商品是:); tp -output(); if(1 = cnt) tp = tp -next; start = start

21、 -next; if(NULL = bak -next)/链表最后一个元素 tp -pre -next = NULL; cur = tp -pre; else tp -pre -next = tp -next; tp -next -pre = tp -pre; delete bak; puts(删除成功); else puts(未找到指定商品); system(cls);void FIND() puts(输入要查找的商品编号, 返回主菜单请输入-1); while(true) int lab; scanf(%d, &lab); if(-1 = lab) break; int find = 0;

22、 Commodity *tp = start; while(NULL != tp) if(tp -label = lab) find = 1; break; tp = tp -next; if(1 = find) puts(商品信息如下:); tp -output(); else puts(未找到指定商品); system(cls);void MODIFY() puts(输入要修改的商品编号,返回主菜单输入-1); int lab; while(true) scanf(%d, &lab); if(-1 = lab) break; int find = 0; Commodity *tp = st

23、art; while(NULL != tp) if(tp -label = lab) find = 1; break; tp = tp -next; if(1 = find) puts(你要修改的商品信息如下:); tp -output(); puts(输入新的商品信息,系统将会自动覆盖原有信息:); scanf(%d %s %d %d, &tp -label, tp -name, &tp -elective, &tp -price); puts(修改完成); else puts(未找到指定商品); system(cls);void AVER() Commodity *tp = start;

24、int sum = 0; double aver = 0; int cnt = 0; while(NULL != tp) sum += tp -price; + cnt; tp = tp -next; printf(所有商品总价格为:t%dn所有商品平均价格为:t%.1lfn, sum, 1.0 * sum / cnt);void SORT()/排序函数 Commodity *tp = start; double aver = 0; int cnt = 0; while(NULL != tp) sortSeqcnt + = *tp; tp = tp -next; qsort(sortSeq, cnt, sizeof(Commodity), MyCMP); int i; for(i = 0; i cnt; + i) sortSeqi.output();int choose() int k; puts(t*商品信息管理系统*); SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED /*| FOREGROUND_GREEN | FOREG

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论