仓库管理系统程序设计训练报告_第1页
仓库管理系统程序设计训练报告_第2页
仓库管理系统程序设计训练报告_第3页
仓库管理系统程序设计训练报告_第4页
仓库管理系统程序设计训练报告_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

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

文档简介

66/67HUNANUNIVERSITY程序设计训练报告 学生姓名xxxxxxxxx学生学号xx2xxx 专业班级 xxxx班 指导老师 xxxx 2012年 6月 12日目录1 软件开发平台 22 软件功能说明 22.1 功能分析说明图 32.2 各项功能说明 33 软件设计详细内容 53.1 采用的主要数据结构类型 53.2 流程图 64 软件测试 114.1 软件测试用例 114.2 软件测试报告 255 附录 265.1 软件使用说明 265.2 源码 265.3 参考文献 376心得38 软件开发平台配置环境Windows7(32位)系统运行环境Windows7(32位)系统开发工具DevC++程序语言C语言软件功能说明仓库产品管理系统要求记录产品的名称、制造商、产地、原有产量、现有量、编号、产品位置。亓学忠:1、创建产品信息2、输出产品信息3、修改产品信息4、插入产品信息5、删除产品信息6、查询某产品信息7、按产品名称排序8、按产品编号排序9、保存产品信息到文件10、从文件文件中读取产品信息朱宏伟:1、目录2、主函数仓库产品管理系统输入产品信息输出产品信息修改产品信息仓库产品管理系统输入产品信息输出产品信息修改产品信息产品信息排序插入产品信息删除产品信息查询产品信息退出系统按产品名称排序按产品编号排序2.2各项功能说明要求对分别上面的每个功能模块进行详细的文字说明输入模块createList()在主函数里面选择1进入输入模块,首先建立一个名为product的文本文档,用scanf函数依次从键盘输入产品名称制造商产地原产量现有量编号存放位置。然后再把这些信息用printf函数写入文本文档,如果输入错误要重新输入。最后关闭文件。打印模块printList()在主函数里面选择2进入打印模块,打开名为product的文本文档,然后依次把文本里的产品名称制造商产地原有量现有量编号存放位置,用printf函数文本读出来,用printf函数显示出来,再关闭文件。查找模块find()在主函数里面选择8进入查找模块,再打开名为product的文本文档,然后输入要查找的产品的名称,通过strcmp函数找到该产品的位置,再通过printf函数输出该产品息。如果库中没有此种产品,会提示输入错误,重新输入产品名称。然后关闭文件退出查找模块。修改模块changeproduct()在主函数里面选择7进入输入模块,然后打开名为protect的文本文档,输入要修改的产品的名称,通过strcmp函数找到该产品的位置,找到后直接输入新的信息,如果产品库中没有此种产品的名称,会提示重新输入产品名称。然后关闭文件。删除模块delproduct()在主函数里面选择5进入删除模块,然后打开名为product的文本文档,然后要删除的产品的名称,通过strcmp函数找到该产品位置,找到后又分三种情况:1、如果该产品在链首,那么直接把链首位置后移到下一链节,然后清除此链节所占内存;2、如果产品信息在链尾,那么直接上一链节指向NULL,然后清除此链节所占空间;3、如果产品信息在链中,那么直接把上一链节的指针跳过此链节指向下一连接,然后清除此链节所占空间。如果找不到此种产品,会提示重新输入产品名称,正确输入后按上面的三种情况运行此模块。删除后退出删除模块。插入模块insertproduct()在主函数里选择6进入到插入模块,打开名为product的文本文档,然后直接输要插入的产品的名称制造商产地原产量现有量编号存放位置,然后此模块会直接把该信息插入到信息首位,插入后退出此模块。排序模块namesortList()或者numberssortList()在主函数里选择3进入按产品名称排序模块,选择4进入按产品编号排序模块,打开名为product的文本文档,然后模块会通过链节一个一个对比彼此的名称大小(用strcmp函数)或者编号大小,然后小者在前,大者在后重新排序,排序后退出此模块。退出系统模块通过输入0选择直接退出系统3软件设计详细内容3.1采用的主要数据结构类型仓库管理系统:#include<stdio.h>#include<string.h>#include<stdlib.h>链表3.2流程图1、main()函数流程图:namesortList(h)namesortList(h)numberssortList(h)breakbreakinputselectselect=0?select=1?Select=2?createList()breakbreakbreakbreakreturnYNNYNNYYSelect=3?NYYSelect=3?NNSelect=4?NSelect=5?YYprintList(hSelect=4?NSelect=5?YYprintList(h)Ndelproduct(h)NNNSelect=7?Select=6?YYYinsertproduct(h)delproduct(h)NNNSelect=7?Select=6?YYYinsertproduct(h)Select=10?NSelect=9?Select=8?breakbreakYYchangeproduct(h)Select=10?NSelect=9?Select=8?breakbreakYYchangeproduct(h)find(h)load(h)breakbreakYsave(h)load(h)breakbreakYsave(h)2、createList()函数流程图:printf();inputnprintf();inputni=1?i=3?i=2?printf();printf();i=n?NNYNYNYYYYNNYYprintf();returnhprintf();returnh3、printList()函数流程图:returnnewNode->next!=NULL?NreturnnewNode->next!=NULL?Nprintf();Yprintf();YnewNode=newNode->nextnewNode=newNode->nextinputnameYcur==NULL?printf();YinputnameYcur==NULL?printf();YNstrcmp(cur->name,name.)?curpre=curcur=cur->nextN N5、changeproduct()函数流程图:inputnameinputnameYcur==NULL?printf();YNstrcmp(cur->name,name.)?curpre=curcur=cur->nextNNinputnameNNstrcmp(cur->name,name)?inputnameNNstrcmp(cur->name,name)?curpre=curcur=cur->nextNNcur!=NULL?cur==h?h=h->nextfree(cur)cur->next==NULL?curpre->next=NULLfree(cur)curpre->next=cur->nextfree(cur)YYreturnYYYreturnYYY软件测试4.1 软件测试用例创建产品信息输出数据按名称排序按产品编号排序删除产品信息插入产品信息7、修改产品信息查询产品信息保存打开文件退出软件4.2软件测试报告将4.1测试过程中能完成的功能和不能完成的功能以及不能完全完成的功能进行列表分析,指出测试结果和出错原因,例如:标号项目预期结果实际结果出错原因出错次数01主函数菜单美观的菜单得到美观的菜单无无02输入产品信息正确输入数据完成无无03输出产品信息正确输出数据完成无无04按名称排序正确排序完成无无05按产品编号排序正确排序完成无无06删除产品信息正确删除数据完成无无07修改产品信息正确修改完成无无08查询产品信息正确查询到信息完成无无09退出系统正确退出系统完成无无5.附录5.1软件使用说明运行条件:本软件可以在DevC++和VisualC++里运行,在TurboC下不能运行,其他编程软件没有测试。进入菜单,选择你要执行模块,在初次使用时,应收先选择数字1输入航班信息后才能使用其他模块,5.2源码/*仓库产品管理系统亓学忠*/#include<stdio.h>/*包含常用库函数*/#include<string.h>/*包含strcmp、strcpy字符串比较拷贝函数*/#include<stdlib.h>/*包含exit强制结束函数*/#include<conio.h>structproduct/*定义相关链表*/{ charname[12];/*产品名称*/ charmanufacturer[30];/*制造商*/ charorigin[30];/*产地*/ intoriginqun;/*产品原有数量*/ intnowqun;/*现有产品数量*/ intnumbers;/*产品编号*/ charlocation[30];/*存放位置*/ structproduct*next;/*指向下一个同类型结构*/};voidW(){ printf("\n\n\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("\t☆☆\n"); printf("\t★★\n"); printf("\t☆☆\n"); printf("\t★★\n"); printf("\t☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆\n"); getch();};structproduct*createList()/*定义新建产品信息函数*/{ structproduct*head=NULL,*cur=NULL,*curnext=NULL;/*定义头节点、当前节点、下一个节点*/ intn,i;/*定义节点数、循环变量*/ printf("\t☆请输入要创建的节点数:"); scanf("%d",&n); for(i=0;i<n;i++)/*用for循环输入产品信息*/ { if(i==0)/*输入头节点信息*/ {A: printf("\t☆请输入第%d种产品的:名称制造商产地原产量现有量编号存放位置\n",i+1); curnext=(structproduct*)malloc(sizeof(structproduct));/*开辟curnext需要的空间*/ printf("\t"); scanf("%s%s%s%d%d%d%s",curnext->name,curnext->manufacturer,curnext->origin, &(curnext->originqun),&(curnext->nowqun),&(curnext->numbers),curnext->location); if(curnext->originqun<0||curnext->nowqun<0||curnext->originqun<curnext->nowqun)/*判断输入数据是否正确*/ { printf("\n\t★输入数据错误,请重新输入!\n\n"); gotoA; } curnext->next=NULL; head=curnext;/*将cuenext赋给头节点*/ cur=curnext;/*将cuenext赋给当前节点cur*/ } else { curnext=(structproduct*)malloc(sizeof(structproduct));/*开辟下一个节点需要的空间*/B:printf("\t☆请输入第%d种产品的:名称制造商产地原产量现有量编号存放位置\n",i+1); printf("\t"); scanf("%s%s%s%d%d%d%s",curnext->name,curnext->manufacturer,curnext->origin, &(curnext->originqun),&(curnext->nowqun),&(curnext->numbers),curnext->location); if(curnext->originqun<0||curnext->nowqun<0||curnext->originqun<curnext->nowqun)/*判断输入数据是否正确*/ { printf("\n\t★输入数据错误,请重新输入!\n\n"); gotoB; } curnext->next=NULL; cur->next=curnext;/*将当前节点与下个节点连接起来*/ cur=curnext;/*当前节点后移*/ } } system("cls");/*DOS清屏*/ printf("\n\t☆恭喜你输入已完成。\n\n"); returnhead;/*结束输入信息并返回主菜单*/};voidprintList(structproduct*h)/*定义输出产品信息函数*/{ structproduct*newNode; newNode=h;/*获取链表头指针*/ system("cls"); printf("\n\t名称\t制造商\t产地\t原产量\t现有量\t编号\t存放位置"); while(newNode->next!=NULL) { printf("\n\t%s\t%s\t%s\t%d\t%d\t%d\t%s",newNode->name,newNode->manufacturer,newNode->origin, newNode->originqun,newNode->nowqun,newNode->numbers,newNode->location); newNode=newNode->next; } printf("\n\t%s\t%s\t%s\t%d\t%d\t%d\t%s\n",newNode->name,newNode->manufacturer,newNode->origin, newNode->originqun,newNode->nowqun,newNode->numbers,newNode->location); printf("\n");}structproduct*delproduct(structproduct*h)/*定义删除某位产品的信息函数,名称由用户输入*/{ structproduct*cur=NULL,*curpre=NULL; charname[12];G: printf("\t☆请输入要删除的产品名称:"); scanf("%s",name); cur=h; while(cur!=NULL&&strcmp(cur->name,name))/*查找产品位置*/ { curpre=cur;/*如果不是所需节点,curpre指向后移*/ cur=cur->next;/*cur也后移*/ } if(cur==NULL)/*如果没有找到*/ { printf("\n\t★没有找到该产品,请重新输入!\n\n");gotoG; } if(!strcmp(cur->name,name))/*如果找到该产品*/ { if(cur==h)/*如果该节点在链首*/ { h=h->next;/*当前链首后移*/ free(cur);/*释放链首所占内存*/ } else { if(cur->next==NULL)/*如果该节点在链尾*/ { curpre->next=NULL;/*前一个链节指向空*/ free(cur);/*释放链尾所占内存*/ } else/*如果该节点在链中*/ { curpre->next=cur->next;/*该节点的前一位链节指向该链节后的下一位节点*/ free(cur);/*释放该节点所占内存*/ } } } system("cls"); printf("\n\t☆已成功删除该产品信息!\n\n"); returnh;/*结束该函数且返回新链表后返回主菜单*/}structproduct*changeproduct(structproduct*h)/*定义修改产品信息函数*/{ structproduct*cur=NULL,*curpre=NULL; charname[12];D: printf("\t☆请输入要修改产品名称:"); scanf("%s",name); cur=h; while(cur!=NULL&&strcmp(cur->name,name))/*查找产品位置*/ { curpre=cur; cur=cur->next; } if(cur==NULL)/*如果没有找到*/ { printf("\n\t★没有找到该产品,请重新输入!\n\n"); gotoD; } if(!strcmp(cur->name,name))/*如果找到该产品*/ {E: printf("\n\t名称制造商产地原产量现有量编号存放位置\n");/*输入该产品的新信息*/ printf("\t"); scanf("%s%s%s%d%d%d%s",cur->name,cur->manufacturer,cur->origin, &(cur->originqun),&(cur->nowqun),&(cur->numbers),cur->location); if(cur->originqun<0||cur->nowqun<0||cur->originqun<cur->nowqun)/*判断输入数据是否正确*/ { printf("\n\t☆输入数据错误,请重新输入!\n\n"); gotoE; } }system("cls"); printf("\n\n\t☆已成功修改信息!\n\n"); returnh;}structproduct*insertproduct(structproduct*h)/*插入新产品信息到链首*/{ structproduct*newproduct=NULL; newproduct=(structproduct*)malloc(sizeof(structproduct)); C: printf("\t请输入新产品的信息:名称制造商产地原有量现有量编号存放位置\n"); printf("\t"); scanf("%s%s%s%d%d%d%s",newproduct->name,newproduct->manufacturer,newproduct->origin, &(newproduct->originqun),&(newproduct->nowqun),&(newproduct->numbers),newproduct->location); if(newproduct->originqun<0||newproduct->nowqun<0||newproduct->originqun<newproduct->nowqun)/*判断输入数据是否正确*/ { printf("\n\t★输入数据错误,请重新输入!\n\n"); gotoC; } newproduct->next=h; h=newproduct; system("cls");/*DOS清屏*/ printf("\n\n\t☆已成功插入新产品信息!\n\n"); returnh;}structproduct*namesortList(structproduct*h)/*按名称对产品进行排序*/{ structproduct*newH=NULL,*newT=NULL,*cur,*curPre,*min,*minPre; if(h==NULL)/*空链*/ { returnh; } while(h!=NULL) { minPre=curPre=min=cur=h; while(cur!=NULL)/*检索名称最小的点*/ { if(strcmp(cur->name,min->name)<0) { min=cur; minPre=curPre; } curPre=cur; cur=cur->next; } if(newH==NULL)/*新链为空*/ { newH=min; newT=min; } else { newT->next=min;/*附到新链尾*/ newT=newT->next; } /*将最小节点和原链分离*/ if(min==h)/*min在链首*/ { h=h->next; } else { if(min->next==NULL) { minPre->next=NULL; } else { minPre->next=min->next; } } } min->next=NULL; system("cls"); printf("\n\n\t☆已成功按名称排名!\n\n"); returnnewH;}structproduct*numberssortList(structproduct*h)/*按产品编号排序*/{ structproduct*newH=NULL,*newT=NULL,*cur,*curPre,*min,*minPre; if(h==NULL) { returnh; } while(h!=NULL) { minPre=curPre=min=cur=h; while(cur!=NULL) { if(cur->numbers<min->numbers) { min=cur; minPre=curPre; } curPre=cur; cur=cur->next; } if(newH==NULL) { newH=min; newT=min; } else { newT->next=min; newT=newT->next; } if(min==h) { h=h->next; } else { if(min->next==NULL) { minPre->next=NULL; } else { minPre->next=min->next; } } } min->next=NULL; system("cls"); printf("\n\n\t☆已成功按编号排名!\n\n"); returnnewH;}voidfind(structproduct*h)/*按产品名查询某产品信息*/{ structproduct*cur=NULL,*curpre=NULL; charname[12];F: printf("\t☆请输入要查询的产品名称:");/*要查询的对象名*/ scanf("%s",name); cur=h; while(cur!=NULL&&strcmp(cur->name,name))/*查找产品位置*/ { curpre=cur; cur=cur->next; } if(cur==NULL)/*如果没有找到*/ { printf("\n\t★没有找到该产品,请重新输入!\n\n");gotoF; } if(!strcmp(cur->name,name))/*找到该产品*/ { system("cls");/*DOS清屏*/ printf("\n\n\t☆该产品信息:\n\n"); printf("\t名称\t制造商\t产地\t原产量\t现有量\t编号\t存放位置\n"); printf("\t%s\t%s\t%s\t%d\t%d\t%d\t%s\n\n",cur->name,cur->manufacturer, cur->origin,cur->originqun,cur->nowqun,cur->numbers,cur->location); }}voidsave(structproduct*h)/*保存*/{ FILE*fp; structproduct*cur; fp=fopen("product.txt","wb");/*打开文件进行操作*/ if(fp==NULL)/*若打开失败*/ { printf("\t★文件打开失败\n"); return; } cur=h; while(cur!=NULL)/*若正确打开*/ { fwrite(cur,sizeof(structproduct),1,fp);/*保存操作*/ cur=cur->next; } fclose(fp);/*操作完关闭文件*/ fflush(stdin); /*清除缓存*/ system("cls"); printf("\n\t☆恭喜你已成功保存数据!\n\n");}structproduct*load(structproduct*h)/*打开文件*/{ structproduct*cur,*temp,*newproduct,product; FILE*fp; fp=fopen("product.txt","rb");/*打开文件进行操作*/ if(fp==NULL)/*打开失败*/ { printf("\t★打开失败!\n"); returnh; } if(h!=NULL)/*成功打开*/ { cur=h; while(cur!=NULL) { temp=cur; cur=cur->next; free(temp); } } while(fread(&product,sizeof(structproduct),1,fp)!=0) { newproduct=(structproduct*)malloc(sizeof(structproduct)); *newproduct=product; newproduct->next=NULL; if(h==NULL) { temp=h=newproduct; } else { temp->next=newproduct; temp=newproduct; } } system("cls"); printf("\n\t☆已成功打开文件!\n\n"); fclose(fp); returnh;}voidmenu()/*目录*/{ printf("\t☆★☆★☆★☆★☆★☆★☆★☆目¤录☆★☆★☆★☆★☆★☆★☆\n"); printf("\t★★\n"); printf("\t☆1创建产品信息☆\n"); printf("\t★2

温馨提示

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

评论

0/150

提交评论