家电库存管理系统 c++课程设计报告



《家电库存管理系统 c++课程设计报告》由会员分享,可在线阅读,更多相关《家电库存管理系统 c++课程设计报告(32页珍藏版)》请在装配图网上搜索。
1、重庆科技学院 综合性设计报告 院(系):—电子信息工程学院—班级: 学生姓名:学号: 设计地点(单位)计算机科学与工程实验室 — — 设计题目:— 家电库存系统的设计 完成日期:2009年9月11日 指导教师评语: _ 成绩(五级记分制): 指导教师(签字): 重庆科技学院 课程设计任务书 设计题目:家电库存系统的设计 学生姓名 课程名称 数据结构课程设计 专业班级 计科普 2008-01,02 地 点 计算机专业实验室 起止时间 设 计 内 容 及 要 求 以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对 该链表及时进行
2、维护。每个工作日结束之后,将该链表中的数据以文件形式保存, 每日开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。 链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链 表的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链 表数据与文件之间的转换等。 设 计 参 数 测试数据要求:家电类别(如:电视机,空调,冰箱等)不少于5种,记录数量 不少于50。 进 度 要 求 星期一完成任务的讲解、并接受课程设计任务,选定课程设计的题目 星期二了解任务的算法、并画出算法的程序流程图 星期三对任务的关键技术进行验证、并确定解决办法
3、 星期四 编制程序 星期五 编制程序 星期一调试程序,并试运行 星期二 整理课程设计过程中的各参数、进行总结并提出改进意见 星期三对改进办法进行实现,并编写课程设计报告 星期四编写课程设计报告并准备答辨 星期五参加答辨,提交设计报告 参 考 资 料 1. 严蔚敏吴伟民著,数据结构,清华大学出版社,2007.3 2. 李春葆著,数据结构教程,清华大学出版社,2005.1 3. Richard F.Gilberg Behrouz A.Forouzan,数据结构的 C++伪码实现(央文版), 人民邮电出版社,2002.1 其 它 说 明 1.本表应在每次实施前一周
4、由负责教师填写二份,院系审批后交院系办备案,一份 由负责教师留用。2.若填写内容较多可另纸附后。3. 一题多名学生共用的,在设计 内容、参数、要求等方面应有所区别。 教研室主任:向毅 指导教师:向毅王双明 摘要 本程序的作用是建立一个简单的家电库存管理系统。当库存信息发生变化时要求能 对链表的信息进行更新并存入文件。每个工作日开始时,需要把磁盘中的商品信息读出 并加入链表中,每个工作日结束之后,在将该链表中的数据以文件形式保存,链表结点 的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表的有序性。程 序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据与文件
5、之间的 转换等。 程序需要对链表进行初始化、插入、删除、更新数据,查询等操作,还要求对文件 的操作。 关键字:链表 数据域插入删除 目录 第一部分 设计题目、内容及要求 1 1.1设计题目 1 1.2设计要求 1 第二部分概要设计 2 2.1链表节点信息说明 2 2.2总体程序框图 3 第三部分详细设计 4 3.1初始化数据模块详细设计 4 初始化数据模块伪码算法 4 初始化模块程序流程图 5 3.2添加商品模块详细设计 6 添加信息模块伪码算法 6 添加商品模块程序流程图 7 3.3删除货物模块详细设计 7 删除模块伪码算法 7 删除模块程序流程图 9
6、 3.4查询模块详细设计 10 查询模块伪码算法 10 查询模块流程图 12 3.5从文件中读取商品信息 13 伪码算法 13 读取信息模块程序流程图 14 3.6数据更新模块详细设计 15 数据更新模块伪码算法 15 更新数据模块程序流程图 15 3.6退出并保存商品清单 17 3.6.1 退出并保存商品伪码算法 17 退出并保存商品程序流程图 17 第四部分 调试分析 18 4.1问题回顾和分析 18 4.2经验和体会 18 第五部分用户使用说明 19 第六部分测试结果 20 6.1初始化模块测试图 20 6.2添加商品模块测试图 21 6.3删除商品
7、模块测试图 22 6.4查询模块测试图 23 6.5读取商品信息测试图 24 致谢 26 参考文献 27 第一部分设计题目、内容及要求 1.1设计题目 以链表结构的有序表表示某商场家电部的库存模型。当有提货或进货时需要对 该链表及时进行维护。每个工作日结束之后,将该链表中的数据以文件形式保存,每日 开始营业之前,需将以文件形式保存的数据恢复成链表结构的有序表。 链表结点的数据域包括:类别、型号、品牌、单价和数量,以单价的升序体现链表 的有序性。程序功能包括:初始化、创建表、插入、删除、更新数据,查询及链表数据 与文件之间的转换等。 1.2设计要求 要求实现以下功能 (1)
8、 初始化并创建链表:能够初始化并创建商品信息表并按照单价的升序排列; (2) 插入及删除:能够添加新商品信息并且当商品由于某种原因(损坏,售出及 其他原因)而不得不删除之时能够顺利地实现删除操作; (3) 更新数据:当商品的价格或者数量变动的时候能够作出相应的改变; (4) 查询:能够按照某种要求需求商品的信息,并决定是否购买该商品,然后作 出相应的数据更新; (5) 链表与文件之间的转换:能够成功地将链表中的信息写入文件,并能根据需 要读出文件中的信息。 第二部分概要设计 2.1链表节点信息说明 表1 各数据类型名称及其表示意义 名称 数据类型 表示的意义 Specie
9、s 字符 家电的类型(包括电视机,空调等类型) Xinghao 字符串 家电的型号 Pinpai 字符串 家电的品牌 Danjia 浮点型 家电价格,为浮点型 Shuliang 整型 家电的数量 Data 节点信息,包括以上数据信息 next 指针 指向由Date和next组成节点 表中,Species表示家电的类型,用一个大写字母代替。例如“D”表示电视机,“K” 表示空调,“B”表示冰箱,“J”表示电脑,“X”表示洗衣机。Xinghao和Pinpai都是以 字符串的形式表示的,Danjia表示一个商品的价格,而Shuliang这表示某种商品的
10、库存 量。Date则是数据域,包括以上五项。而next则表示指向下一个节点的指针。这就是 一个商品种类的全部信息,用一个节点的空间来储存该类型商品的信息。而在以后的删 除和插入以及查询操作中在某些情况下只需对商品的库存量做一些修改久可以达到目 的,非常方便。 2.2总体程序框图 选择是否进入系统 选择进入的模块 0 添 删 查 从 退 更 出并保存商品信息 商品清单中读取信息 询并决定是否购买 除商品信息 品信息 结束 输
11、入i值决定下一步操作 图2-1总体程序框图 第三部分详细设计 3.1初始化数据模块详细设计 初始化数据模块伪码算法 int Inticial(ListNode &p) { while(i != 2) { scanf(&pp->Date); pp->next = p->next;p->next = pp; scanf(&i); } Paixu(p);Display(p);ListTxt(p); return OK; } 其中,排序函数伪码算法如下: int Paixu(ListNode &head) { p = q = head->next; while(p != NUL
12、L) { q = p->next;min = p->Date; while(q != NULL) {if(q->Date.Danjia <= min.Danjia) {min = q->Date;q->Date = p->Date;p->Date = min;}q = q->next; }p = p->next;}Display(head); return OK; 其次,由链表读入信息到文件函数伪码算法如下: int ListTxt(ListNode &head) { FILE *fp; p = head->next; if(p == NULL)exit(0); if(
13、(fp = fopen("e:\\a.txt","w")) == NULL)exit(0); while(p != NULL) {fprintf(fp,p->Date);p = p->next;} if(fclose(fp))exit(0); return 1; 初始化模块程序流程图 图3-1数据初始化模块程序流程图 3.2添加商品模块详细设计
14、 添加信息模块伪码算法 int Insert(ListNode &head,Node &a) { p = head->next; if(p == NULL)exit(0); while(p = p->next)p = p->next; q->Date = a.Date; q->next = p->next;p->next = q; ListTxt(head); return OK; } 在上面的算法中,首先要查看一下商品信息表示否为空,是则退出,否则 继续操作。在进入该模块之前,有关插入的商品的信息已经初始化完成,直接 通过引用就可以使用。本模块首先将要插入商品的有关信
15、息映射到一个节点的 数据域,然后将该节点插入到商品信息表中,再排序即可。 添加商品模块程序流程图 图3-2 添加商品信息模块程序流程图 3.3删除货物模块详细设计 删除模块伪码算法 int Delete(ListNode &head,Node &a) { if(p == NULL)exit(0); scanf(&choice); switch
16、(choice){ case 1: scanf(a.Species); while(p != NULL) { if(strcmp(p-Date.Species,a.Species)==0) {printf(p->Date);i++;}p = p->next;} if(i == 1)break; else{p = head;scanf(&number);while(count < number - 1) {if(strcmp(p->next->Date.Species,a.Species) == 0){count ++; p = p->next;} while(strcmp(p->
17、next->Date.Species,a.Species) != 0)p = p->next; if(p->next->Date.Shuliang>a.Shuliang)p->next-Date.Shuliang-=a.Shuliang; else{ s = p->next; p->next = p->next->next; free(s);}Display(head); } break; case 2: scanf(a.XingHao); while(p !=NULL){ if(strcmp(p->Date.XingHao,a.XingHao) == 0) { printf(p->D
18、ate);i ++;}p = p->next;} if(i == 1)break; else{ p = head;scanf(&number); while(count < number - 1) {if(strcmp(p->next->Date.XingHao,a.XingHao) == 0)count ++; p = p->next;} while(strcmp(p->Date.XingHao,a.XingHao) != 0) p = p->next;} if(p->next->Date.Shuliang > a.Shuliang) p->next->Date.Shuliang -
19、= a.Shuliang; else { s = p->next; p->next = p->next->next; } Display(head);}break; }ListTxt(head); return OK;} 删除模块程序流程图 由于本模块流程图中有类似的操作,所以只给出其中一种情况下的流程图, 其他两种情况下的流程图省略不写。另外,此图还省略了其他不重要的操作。 图3-3 删除模块流程图 3.4查询模块详细设计 查询模块伪码算法 int Search(ListNode &head,Node &a) { if(p == NULL){ getch();sys
20、tem("cls");}scanf(&choice); switch(choice) { case 1:scanf(a.Species); while(p !=NULL){ if(strcmp(p->Date.Species,a.Species) == 0){printf(p->Date);i++;} p = p->next;}if(i == 1)printf(" *对不起,没有找到相关商品的信息! \n"); else scanf(&choice1); switch(choice1) { case 1:p = head;scanf(&a.Shuliang); while(coun
21、t < number - 1) { if(strcmp(p->next->Date.Species,a.Species) == 0) count ++; p = p->next; } while(strcmp(p->next->Date.Species,a.Species) != 0) p = p->next; if(p->next->Date.Shuliang > a.Shuliang) p->next->Date.Shuliang -= a.Shuliang; else{ s = p->next;p->next = p->next->next; free(s);} break;
22、 case 2:break;} }break; case 2: case 1:p = head;scanf(&a.Shuliang); while(count < number - 1) { if(strcmp(p->next->Date.XingHao,a.XingHao == 0)) count ++; p = p->next; } while(strcmp(p->next->Date.XingHao,a.XingHao) != 0) p = p->next; if(p->next->Date.Shuliang > a.Shuliang) p->next->Date.
23、Shuliang -= a.Shuliang; else{ s = p->next;p->next = p->next->next; free(s);} break; case 2:break;} }break; case 3: case 1:p = head;scanf(&a.Shuliang); while(count < number - 1) { if(strcmp(p->next->Date.Brand,a.Brand) == 0) count ++; p = p->next; } while(strcmp(p->next->Date.Brand,a.Brand)
24、 != 0) p = p->next; if(p->next->Date.Shuliang > a.Shuliang) p->next->Date.Shuliang -= a.Shuliang; else{ s = p->next;p->next = p->next->next; free(s);} break; case 2:break;} }break default:getch();exit(0);} return 1; } 查询模块流程图 由于本模块流程图比较复杂,因此省略了一些不是很重要的部分。 图3-4查询模块流程图
25、 3.5从文件中读取商品信息 伪码算法 int TxtList(ListNode &head) { q->next = NULL;FILE *fp; if((fp = fopen("e:\\a.txt","r")) == NULL)exit(0); while(!feof(fp)) { p = (ListNode)malloc(sizeof(Node)); fscanf(fp,p->Da
26、te);p->next = q->next;q->next = p;} q->next = q->next->next; if(Getlenth(q) == 0) { scanf(&choice); if(choice == 1) {Inticial(q);ListTxt(q);} } s = q->next; while(s != NULL){printf(s->Date);s = s->next;} fclose(fp);return 1;} 读取信息模块程序流程图
27、 3.6数据更新模块详细设计 数据更新模块伪码算法 int Gengxin(ListNode &head) { char a[40];char b[20];double d; while(p != NULL){printf(p->Date); p = p->next;n ++;} while(choice1 != 2) { scanf(&k);p = head; for(int count = 0;count < k;count ++) p = p->
28、next; printf(p->Date);scanf(&choice); switch(choice) { case 1:scanf(fp);strcpy(p->Date.Species,fp);break; case 2:scanf(a);strcpy(p->Date.XingHao,a);break; case 3:scanf(b);strcpy(p->Date.Brand,b);break; case 4:scanf(&d);p->Date.Danjia = d;break; case5:scanf(&number);p->Date.Shuliang= umber;br
29、eak; default:}printf(p->Date);scanf(&choice1); } ListTxt(head);return 1; } 更新数据模块程序流程图 图3-6更新数据模块流程图 3.6退出并保存商品清单 退出并保存商品伪码算法 int ListTxt(ListNode &head) { FILE *fp; p = head
30、->next; if(p == NULL)exit(0); if((fp = fopen("e:\\a.txt","w")) == NULL)exit(0); while(p != NULL) {fprintf(fp,p->Date);p = p->next;} if(fclose(fp))exit(0); return 1;} 退出并保存商品程序流程图 图3-7退出并保存商品程序流程图 第四部分调试分析 4.1问题回顾和分析 编写完程序之后,调试过程中出现不少问题。主要包括以下几个。 首先,刚开始发现了一些由于粗心而出现的小问题,包括数据的输入忘了 加取地址符,以及忘了
31、晴空缓冲区等等。后来就发现了一些函数也存在问题。 最先发现的是排序模块。此模块采用的是冒泡排序法,但是由于有一段时间没 有编程,所以对以前学过的知识有点生疏,进而在内存空间的分配以及排序的 顺序上出现了一些问题。最后,通过调试发现了其中的问题,进而采取了相应 的措施改正了错误。 其次,是删除模块。由于此模块“规模”比较宏大,所以出现的问题也最 多。首先是不能够选择通过哪种方式进行删除,然后在商品的时候,相应商品 的数量不会做出应该有的改变,甚至还出现一堆乱码。后来,通过单步调试找 出了问题的原因并作出了相应的修改,最后结果差强人意。 再次,则是在从文件中往内存中读取信息的时候出现的一个问题
32、,即因为 Feof函数的问题,从而在每次读取信息的时候都会多读出一个节点的信息,多 余信息通过乱码的形式显示出来,最后是通过向其他同学请教才解决的,因此 我又学到了一些知识。 最后,则是内存空间的释放问题。当其他模块的问题都解决之后,本以为 已经没有错误了,没想到每当程序运行完之后都会出现一个错误提示,后来才 发现是释放空间的模块出现了问题,同样,在找到问题之后终于解决了问题, 最终才勉强能够运行。 4.2经验和体会 通过做这个程序,我认识到了要想做出一个好的程序,首先必须了解到它 必须能够实现的功能以及涉及到知识点。然后将整个程序分为几个模块分别编 写好,才能达到预期的效果。在编写完程
33、序时要尽量避免一些低级错误的出现。 第五部分用户使用说明 本程序能够基本上实现包括初始化、插入及删除、查询及购买、链表与文 件之间的转换以及更新数据等一系列操作。 本程序分为几个模块,分别是数据初始化,添加商品信息,删除商品信息, 查询及购买商品,将链表中的商品信息写入到文件,将文件中的商品信息读入 链表并输出以及数据的更新等等。 1. 如果没有初始化数据的话,进入此模块就可以根据提示创建商品信息表。 2. 进入此模块可以根据系统的提示添加商品信息,并自己决定添加商品的 种类和数量等信息。 3. 进入此模块可以定量地删除你想要删除的商品,可以根据类型,型号和 品牌查询,然后删除。
34、 4. 进入此模块,可以输入你想要查找的商品的类型,型号和品牌进行查询, 如果有的话可以决定是否购特定数量的该商品。 5. 进入此模块,可以将已经创建好的商品清单中的商品信息输出到屏幕。 6. 进入此模块,系统会自动保存商品信息,然后安全推出。 7. 进入此模块,你可以修改某一种产品的某项数据,比如某一件商品的类 型活着型号等等。 每一个程序都不能说已经最好,只能不断改进,才能更好。本程序虽然基 本上实现了应该有的功能,但还有很多不足,限于当前水平问题,未能做出相 应的修改,望用户谅解并给予我们一定得支持,我们一定会将程序做的更好, 以回报广大客户对我们的厚爱,谢谢! 第六部分测试结
35、果 6.1初始化模块测试图 g "D :\我的文档\ DebuQ、KeCheng01.exe" 购..息 统 否简 系 是品 理 管 决取清 存 普品 电ffl-信信信; 家品品物品度据 入商商货商品霎 进建加腐商出新 迎创添删查从退更 依*1 .*2.0*4.«5.«6.*7. 欢迎进入初始化模块 请输入您的选择:1 请输入该商品类型:D 请输入该商品型号FD 请输入该商品品牌FDD 请输入该商品单价T3 请输入该商品数量桨3 :■ "D 我的文档 \ Debug1., KeCheng01.exe11 、这是第2条记录 2■退出
36、 欢迎进入初始化模块 陷输入该商品类型泅 #输入该商品型号:BB "输入该商品品牌:BBE #输入该商品单价H3 "输入该商品数量 扁选择&继续初始化 1 忙输入该商品型号:DDDD "输入该商品品牌:DDDDD "输入该商品单价= 1654 肩输入该商品数量口6 *输入该商品类型:D 图6-2数据初始化模块测试图(2) 为了方便,商品类型在此只输入一个特定字符代表一种商品类型。 6.2添加商品模块测试图 图6-3添加商品信息模块测试图(1)
37、 6.3删除商品模块测试图 。 D:\我的文档\Debug . KeCheng01.exe *3«4«5*6*7 从退更 是品 决戡清 普品 心息-94^ g信 富度据 农商品靠 葡商出新 购息 否信 请撤入您的选择:3 请输入您要删用的商品信息; 请端入要删除高品而数量" 光请选择您要的删除方式通过类型删除2 .通过型号删除3 ■通过品牌删除 1. d 花请耗入SW 除商品的类型W 共改下是矮笑型,型号,品牌,单价,数量输出 DD DDD 1326
38、.000000 32 漏输入您型删除的商邑序列号:1 *输出删除痂商商品蓿怠表二 DDD BBB BBBB DDD DDDDD 以下是按照商品的类型,型号,品牌,单价,数量依次列出的 13.000000 23 13.000000 63 1321.000000 23 1326.000000 22 1654.000000 36 DD BB BB DD DDDD 请输入您的选择H ■继续删除2 ■退出 6-5 图6-6删除商品信息模块测试图(2) 因为删除数量没有超过库存量,因此只需要对库存量做一下修改即可。
39、 6.4查询模块测试图 图6-7查询模块测试图(1) 图6-8查询模块测试图(2) 在以上两幅图中,图(1)表示按照型号查询到目标商品之后购买的操作,图(2) 表示的是按照类型查询到目标商品之后没有购买的操作。
40、 6.5读取商品信息测试图 g "D:\我的文6\Debug\KeCheng01.exe" 迎创添删查从退更 塞商出新 电渭信信信; 家岛品物品食据 入商商货 雷存管理系统 育芾决定是否购买 嚣也品信息 请输入您的选择:5 依次读出商品类型, DDD BB BBB DDDD BBB 型号, DDD BBB 品牌,单价,数量如下: 13.000000 21 132.000000 6S 1324.000000 1325.000000 1347.000000 20 314 请继续选择您想进行的操作:1-继续操作2
41、 -结束操结 ASDFD DDDDD BBBBB 图6-9读取商品信息测试图 在上图中,注意到读取的商品信息是按照价格由低到高排列的。价格是双精度浮 点型变量,数量为整型变量。 成*1.*2.*3.*4.*5.*6.*?. 迎创添删查从退更 电清信信信; 家导品物品食据 入商商货商品霎 进建加膺商出新 购息 统 否信 系 是品 理 定量 管 决取清 存 震品 心息息 隋输入您的选搀:? *商品美型 *1 .D *2 .B *3 .B *4 .D 霎.B DDD BB BBB DDDD BBB 型号 DDD BBB ASDFD DDDDD
42、 BBBBB 司品=3 :类型 B 品牌 单价 13.000000 21 132.000000 65 1324.000000 1325.000000 1347.000000 数量* 20 314 21 型号 品牌 单价 数量 BBB ASDFD 1324.000000 2。请选择您要 修改更新的项目T ■类型2 ,型号3 .品牌4■单价S ,数量 1 MD:\ 我的文若、Debug\ KeChengO 1 .exe11 3商品信息如下二 ASDFD 单价 1324.000000 数量 20 图6-10数据更新模块测试图 在以上的图中,系统首先给
43、出所有商品信息,然后让用户选择要更新的商品编 号。当选定需要更新的商品之后,系统会让用户选择需要更新的项目,包括类型, 型号,品牌,单价以及数量,图中选饿了类型,可以看到该商品的类型由B改成了 K,表示该模块运行正常。 致谢 在这几天程序的编写过程中,很多人给予了我真诚而又无私的帮助,在他们的帮助 下,我终于完成了任务,在此我谨对他们给予我最真挚的感谢! 谢谢我的同学们,是他们耐心地解答我提出的各种问题并且给我提出建议;谢谢老 师,是他们给我程序的编写提出了一些宝贵的建议和设计思路,使我的程序更加完善, 谢谢你们! 参考文献 1. 严蔚敏 吴伟民 著,数据结构,清华大学出版社,2007.3 2. 李春葆 著,数据结构教程,清华大学出版社,2005.1 3. Richard F.Gilberg Behrouz A.Forouzan,数据结构的C++伪码实现(英文版),人民邮电出版社, 2002.1 4. 王立柱 著C/C++与数据结构,清华大学出版社,2008.5
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。