cC语言物品管理-设计报告(共46页).doc
精选优质文档-倾情为你奉上学号2016-2017学年 第2学期C语言物品管理课程设计报告题目:C语言物品管理专业:网络工程班级:16级(3)班姓名:代应豪指导教师:代美丽成绩: 计算机学院 2017 年 4月 27 日专心-专注-专业 目录 1设计内容及要求 . 2 1.1概述. 2 1.2主要功能. 2 1.3设计目的及具体要求. 2 2 概要设计. 2 2.1系统的功能简介. 2 2.2 总体程序框图 . 3 2.3各个模块之间的主要关系. 3 3设计过程及程序代码 . 3 3.1定义结构体及宏定义. 4 3.2主函数 main().4 3.3输入物品信息函数. .5 3.4输出显示物品函数. 5 3.5将物品写入磁盘. 6 3.6插入物品记录函数. 7 3.7 删除一个物品记录函数 . 7 3.8按照物品编号进行递增排序函数. 8 3.9按照物品总价进行递增排序函数. 8 3.10对物品记录进行排序函数. 9 3.11输出头部信息函数. 10 3.12输出一条物品信息函数. .10 3.13判断该编号物品是否存在函数. 10 3.14根据物品编号进行查找函数. 10 3.15根据物品名字进行查找函数. 10 3.16对物品记录进行查找函数. 11 4设计结果与分析 . 12 4.1各个模块的程序流程图 . 12 1) 主函数程序(N-S)流程图及运行界面. 12 2) 输入物品记录信息的(N-S)流程图及程序运行界面. .13 5设计心得 . 21 6参考文献 .22 7源程序代码(物品管理系统) . 231. 设计内容及要求1.1概述 物品管理系统主要根据课程设计要求进行设计,从对物品的简单处理着手设计一份物品管理系统。1.2主要功能物品管理系统是一个针对物品管理的系统。该系统功能主要包括八大模块: 1)插入物品记录:输入物品个数,根据物品个数依次输入每个物品记录的详细信息。例如物品编号、名字、单价、数量。 2)输出物品记录:对已经写入磁盘的记录信息的显示。如无数据,则显示无数据!3) 将物品记录写入文件。4) 插入一个物品记录。5) 删除一个物品记录。6) 对物品记录进行排序。7) 对物品记录进行查找。8) 退出系统。1.3设计目的及具体要求主要利用C语言的文件操作能力设计开发一个小型的信息系统,至少具有如下功能:物品的读和写、物品信息的增删改、物品信息的排序、查找。操作界面要符合用户的一般习惯,图形或文本界面都可以。要求:系统以菜单方式工作,根据菜单项序号提示进行工作。物品信息包括编号看、名称、单价、数量、总价。系统以菜单方式工作,实现对物品信息的录入、修改、统计、排序、查询、输出等功能。2概要设计2.1系统的功能简介该系统的主要功能是系统以菜单方式工作,实现对物品信息的录入,修改,统计,排序,查询,输出等功能。2.2总体程序框图物品管理系统操作主要流程如下,各个函数分别实现不一样的功能。2.3各个模块之间的主要关系该程序的功能主要是实现物品信息的录入,并对物品的相应信息进行进本的增删该的计算。各个模块之间的关系是相互联系的。首先,主函数包含了所有的子函数。主函数是整个程序的核心。子函数之间也是有联系的,对物品读取,插入删除,检索排序必须是在主函数的情况下进行的。因此在第一步选择菜单项是非常重要的。第一步菜单项的选择决定用户所要实现的操作功能。3设计过程及程序代码整个系统除了主函数外,另外还有8个函数,实现7人功能:输入功能、输出功能、写入磁盘功能、插入并显示功能、分类查找并显示功能、分类排序并显示功能。各个函数的详细设计说明分别如下:3.1定义结构体及宏定义#include "stdio.h"#include "string.h" #define NAME_MAX_LEN 20 #define Prod_MAX_NUM 50typedef struct int num; char nameNAME_MAX_LEN;double unitprice; int amount; double totalprice; prodNode; typedef struct sequenceprodNode dataProd_MAX_NUM; int len; seq; seq product;3.2主函数main()void main() int menuItemCode=1; product.len=0; while (menuItemCode!=0)printf("nn"); printf("*物品管理系统*n"); printf("* 1.输入物品记录 *n"); printf("* 2.输出物品记录 *n"); printf("* 3.将物品记录写入文件 *n");printf("* 4.插入一个物品记录 *n"); printf("* 5.删除一个物品记录 *n");printf("* 6.对物品记录进行排序 *n"); printf("* 7.对物品记录进行查找 *n"); printf("* 0.退出系统 *n"); printf("*n"); printf("请输入所选项菜单项序号:"); scanf("%d",&menuItemCode); switch (menuItemCode)case 1:inputGoods(); break; case 2:outputGoods(); break; case 3:saveGoods(); break; case 4:insertOneGoods(); break;case 5:deleteOneGoods(); break; case 6:sortGoods(); break; case 7:searchGoods(); break; case 0:break; default:printf("输入超出范围!n"); break;3.3输入物品信息函数void inputGoods() int i,n; printf("请输入物品个数:n"); scanf("%d",&n); if (n<0) return; for (i=0;i<n;i+)printf("输入物品的编号:n"); scanf("%d",&product.datai.num); printf("输入物品的名字:n"); scanf("%s",product.datai.name); printf("输入物品的单价:n"); scanf("%lf",&product.datai.unitprice); printf("输入物品的数量:n"); scanf("%d",&product.datai.amount); product.datai.totalprice=product.datai.unitprice*product.datai.amount;product.len=n;3.4输出显示物品函数void outputGoods() int i; if (product.len=0) printf("n无数据!n"); return; printf("n物品的记录为:n"); printf("编号t名字t单价 t数量t总价n");for (i=0;i<product.len;i+)printf("%dt%st%lft%dt%.2lf",product.datai.num,product.datai.name,product.datai.unitprice,product.datai.amount,product.datai.totalprice); printf("n"); 3.5将物品写入磁盘void saveGoods() int i; FILE *fp; if (product.len=0) printf("n无数据!n");return;fp=fopen("D:goods.txt","w"); if (fp=NULL)printf("文件打开失败!n"); return;fprintf(fp,"%st","编号"); fprintf(fp,"%st","名称"); fprintf(fp,"%st ","单价"); fprintf(fp,"%st","数量");fprintf(fp,"%s","总价"); for (i=0;i<product.len;i+) fprintf(fp,"n"); fprintf(fp,"%dt",product.datai.num); fprintf(fp,"%st",product.datai.name); fprintf(fp,"%lft",product.datai.unitprice); fprintf(fp,"%dt",product.datai.amount); fprintf(fp,"%.2lf",product.datai.totalprice); fclose(fp); printf("已成功存盘!n");3.6插入物品记录函数void insertOneGoods() prodNode G; int i,pos; if(product.len=Prod_MAX_NUM) printf("表已满!n"); return;printf("请输入插入位置:"); scanf("%d",&pos); if (pos<0|pos>product.len) printf("插入位置出错!n");return;printf("请输入要插入的物品记录:n"); printf("请输入编号:"); do scanf("%d",&G.num); if (G.num<=0) printf("输入的编号不合理,请重新输入。n"); while (G.num<=0); printf("输入物品的名字:n"); scanf("%s",G.name);printf("输入物品的单价:n"); scanf("%lf",&G.unitprice); printf("输入物品的数量:n"); scanf("%d",&G.amount); G.totalprice=G.unitprice*G.amount; for (i=product.len-1;i>=pos;i-)product.datai+1=product.datai; product.datapos=G; product.len=product.len+1; printf("插入成功!");3.7删除一个物品记录函数void deleteOneGoods() int i,pos; if (product.len=0)printf("表空!n"); return;printf("请输入要删除的物品记录的位置:"); scanf("%d",&pos); if (pos<0|pos>product.len-1) printf("删除的位置出错!n"); return; for(i=pos+1;i<=product.len-1;i+) product.datai-1=product.datai;product.len=product.len-1; printf("删除成功!n");3.8按照物品编号进行递增排序函数void bubbleSortByNum() int i,j,n; prodNode temp; int tag; n=product.len; for(tag=1,i=0;i<n-1 && tag=1;i+)tag=0; for (j=n-1;j>i;j-) if (product.dataj.num<product.dataj-1.num) temp=product.dataj; product.dataj=product.dataj-1; product.dataj-1=temp;tag=1; 3.9按照物品总价进行递增排序函数void bubbleSortByTotal() int i,j,n; prodNode temp; int tag; n=product.len;for (tag=1,i=0;i<n-1 && tag=1;i+) tag=0; for (j=n-1;j>i;j-)if (product.dataj.totalprice<product.dataj-1.totalprice) temp=product.dataj; product.dataj=product.dataj-1; product.dataj-1=temp;tag=1;3.10对物品记录进行排序函数void sortGoods() int subMenuItem=1; while (subMenuItem!=0)printf("nn"); printf("*排序子菜单*n"); printf("* 1.按照物品编号进行递增排序 *n"); printf("* 2.按照物品总价进行递增排序 *n"); printf("* 0.退出子菜单 *n"); printf("*n"); printf("请输入所选子菜单项序号:"); scanf("%d",&subMenuItem); switch (subMenuItem)case 1:bubbleSortByNum(); printf("已按照物品的编号进行递增排序。排序后的结果为:n"); outputGoods(); break;case 2: bubbleSortByTotal(); printf("已按照物品的总价进行递增排序。排序后的结果为:n"); outputGoods(); break;case 0:break; default:printf("输入超出范围!n"); break;3.11输出头部信息函数void outputHead() printf("编号t名字t单价 t数量t总价n");3.12输出一条物品信息函数void outputOneGoods(prodNode s) printf("%dt%st%lf t%dt%.2lf",s.num,s.name,s.unitprice,s.amount,s.totalprice);printf("n"); 3.13判断该编号物品是否存在函数int isNumberExist (int number) int n,i=0; n=product.len; while (i<n && product.datai.num!=number)i+; if (i<n) return i; else return -1;3.14根据物品编号进行查找函数void seqSearchByNumber (int number) int pos; pos=isNumberExist(number); if (pos !=-1) printf("查找成功!查找结果如下:n"); outputHead(); outputOneGoods(product.datapos); elseprintf("查找失败!编号为%d的物品不存在。n",number); 3.15根据物品名字进行查找函数void seqSearchByName(char name) int flag=0; int n,i; n=product.len; i=0; while (i<n)if (strcmp(product.datai.name,name)=0) if (flag=0) flag=1; printf("查找成功!查找结果如下:n"); outputHead(); outputOneGoods(product.datai);i+;if (flag=0) printf("查找失败!名字为%s的物品不存在。n",name); 3.16对物品记录进行查找函数void searchGoods() int number; char nameNAME_MAX_LEN; int subMenuItem=1;while (subMenuItem!=0)printf("nn"); printf("*查找子菜单*n"); printf("* 1.根据物品编号进行查找 *n"); printf("* 2.根据物品名字进行查找 *n"); printf("* 0.退出系统 *n"); printf("*n"); printf("请输入所选子菜单项序号:"); scanf("%d",&subMenuItem); switch (subMenuItem)case 1: printf("请输入要查找的物品编号:"); scanf("%d",&number); seqSearchByNumber(number); break; case 2: printf("请输入要查找的物品名字:"); scanf("%s",name); seqSearchByName(name); break; case 0:break; default:printf("输入超出范围!n"); break;4设计结果与分析4.1各个模块的程序流程图1)主函数程序(N-S)流程图及运行界面主函数程序(N-S)流程图简单说明:该功能主要显示给用户一个进入界面,它主要的是显示该程序主要能够执行哪些功能。根据用户输入的不同的菜单项对应不同的功能。 主菜单2)输入物品记录信息的(N-S)流程图及程序运行界面物品记录信息的(N-S)流程定义变量 int menuItemCode=1;product;len=0 While(menuItemCode); Scanf(“%d”,&menuItemCode); Switch(menuItemCode); Case 1:inputGods(); break; 请输入物品信息 Case 2:outputGods(); break; 显示物品信息 Case 3:saveGoods(); break; 将物品记录存盘 Case 4:insertOneGoods(); break; 插入一个物品信息 Case 5 :deleteOneGoods(); break; 删除一个物品记录 Case 6:sortGoods(); break; 将物品记录排序 Case 7:searchGoods(); break; 查找物品记录 Case 0: 退出系统 break; 返回程序主界面该模块主要是对物品信息进行录入,录入的主要有物品记录的编号、名字、单价、数量等信息然后在存盘。 物品录入信息 物品记录信息存盘物品记录存盘详细信息 输出物品记录插入物品记录 插入物品之显示结果 删除物品记录 删除物品记录之显示结果 对物品记录按编号递增排序 对物品记录按总价递增排序查找子菜单界面根据物品编号查找根据物品名字查找退出系统源程序如下:#include "stdio.h"#include "string.h" #define NAME_MAX_LEN 20 #define Prod_MAX_NUM 50typedef struct int num; char nameNAME_MAX_LEN;double unitprice; int amount; double totalprice; prodNode; typedef struct sequenceprodNode dataProd_MAX_NUM; int len; seq; seq product;void inputGoods() int i,n; printf("请输入物品个数:n"); scanf("%d",&n); if (n<0) return; for (i=0;i<n;i+)printf("输入物品的编号:n"); scanf("%d",&product.datai.num); printf("输入物品的名字:n"); scanf("%s",product.datai.name); printf("输入物品的单价:n"); scanf("%lf",&product.datai.unitprice); printf("输入物品的数量:n"); scanf("%d",&product.datai.amount); product.datai.totalprice=product.datai.unitprice*product.datai.amount;product.len=n;void outputGoods() int i; if (product.len=0) printf("n无数据!n"); return; printf("n物品的记录为:n"); printf("编号t名字t单价 t数量t总价n");for (i=0;i<product.len;i+)printf("%dt%st%lft%dt%.2lf",product.datai.num,product.datai.name,product.datai.unitprice,product.datai.amount,product.datai.totalprice); printf("n"); void saveGoods() int i; FILE *fp; if (product.len=0) printf("n无数据!n");return;fp=fopen("D:goods.txt","w"); if (fp=NULL)printf("文件打开失败!n"); return;fprintf(fp,"%st","编号"); fprintf(fp,"%st","名称"); fprintf(fp,"%st ","单价"); fprintf(fp,"%st","数量");fprintf(fp,"%s","总价"); for (i=0;i<product.len;i+) fprintf(fp,"n"); fprintf(fp,"%dt",product.datai.num); fprintf(fp,"%st",product.datai.name); fprintf(fp,"%lft",product.datai.unitprice); fprintf(fp,"%dt",product.datai.amount); fprintf(fp,"%.2lf",product.datai.totalprice); fclose(fp); printf("已成功存盘!n");void insertOneGoods() prodNode G; int i,pos; if(product.len=Prod_MAX_NUM) printf("表已满!n"); return;printf("请输入插入位置:"); scanf("%d",&pos); if (pos<0|pos>product.len) printf("插入位置出错!n");return;printf("请输入要插入的物品记录:n"); printf("请输入编号:"); do scanf("%d",&G.num); if (G.num<=0) printf("输入的编号不合理,请重新输入。n"); while (G.num<=0);