车辆管理系统课程设计
******************* 实践教学 ******************* 理工大学 计算机与通信学院 2011年春季学期 C程序设计 课程设计 题 目: 专业班级: 姓 名: 学 号: 指导教师: 成 绩:__________________ 摘 要 在车辆销售管理当中,人工统计的速度慢,并且容易出现差错。本车辆销售管理系统的自动化加速了统计工作,提高管理效率。本程序主要采用对输入的相关信息进行自动分析,然后按组分类将数据保存到数组,这样的结构化非常便于程序后续的统计工作。统计具体过程涉及到车辆进价售价及利润排序等问题,将于正文中详细介绍。本程序实现了所有设计要求。 关键词:文件;排序;统计;C语言 目 录 一、需求分析 1 二、总体设计 2 三、详细设计 3 3.1 详细设计思路 3 3.2 算法流程图 3 四、编码 7 五、测试 8 六、设计总结 12 参考文献 13 致谢 14 附录 15 一、需求分析 本程序将用到文件系统,list.txt文件内容作为数据源,其中单行内容代表一张纸条。程序运行后首先将文件系统的原始数据读取并保存到程序的结构体数组当中,所以应提供文件输入的操作;由于纸条数据零散,所以要对原始数据进行分类操作并提供一个数组用于保存分类信息;在程序中要进行统计工作,所以要提供显示、排序等操作;另外应提供键盘式选择菜单实现功能选择。 二、总体设计 图1 车辆销售管理系统功能模块图 三、详细设计 3.1 详细设计思路 1.main()主函数 设置了程序的流程,结束程序。 2.select ( ) 选择函数 选择所想运行的各个函数. 3.functionscan ( ) 输入函数输入便条的数据. 4.function1 ( ) 文件的数据输入函数多次输入数据 5. function2 ( ) 统计函数每种汽车销售量以及销售额的统计 6. functionpaixu2 ( )总额排序函数按销售额对汽车进行排序 7. function4() 总额统计函数统计每种汽车的总额 8. function5() 统计报表函数统计商品总额 9. function6() 清空文件函数 清空文件数据 3.2 算法流程图 3.2.1保存函数Save()的算法流程图如图2所示。 图2 保存函数Save()的算法流程图 3.2.2输入函数input()的算法流程图如图3所示。 图3 输入函数的算法流程图 3.2.3 输出汽车信息 图4 输出汽车信息 四、编码 原始数据有汽车编码,车名,进价,售价,销售数量。年所以定义一个全局结构体数组scrip用于保存原始数据。然后定义全局变量n保存纸条数目,定义数组s用于保存分类后的信息。源代码见附录 五、测试 1输入新数据测试如图5所示 图5 输入新数据测试 2按车名查找数据测试如图6所示 图6按车名查找数据测试 3按编号查找数据测试如图7所示 图7 按编号查找数据测试 4按车辆名称删除数据测试如图8所示 图8车辆名称删除数据测试 5列出所有数据测试如图9所示 图9列出所有数据测试 6统计各产品的收益和总收益测试如图10所示 图10统计各产品的收益和总收益测试 7按车辆销售额的大小排序并输出排序后结果测试如图11所示 图11按车辆销售额的大小排序并输出排序后结果测试 六、设计总结 通过这次C程序设计,我掌握了模块化设计方法,能够深入的理解结构化程序设计思想,熟练运用结构化程序设计方法,提高了运用C语言进行程序设计的能力。 回顾起这次课程设计,至今我仍感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多的东西。同时不仅可以巩固了以前所学到的知识,而且学到了很多在书本上所没有学到过的知识,通过这次课程设计使我懂得了理论与实际相结合是很重要的。只有理论知识是远远不够的,只有把所学的理论知识与实际相结合起来,从理论中得出结论。才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,通过同学的帮助,逐渐克服各种问题,并且从中学习到了很多的东西。通过这次编程。我发现了很多的不足。让我了解到自身的问题。让我不断的进步。 参考文献 1 C/C++程序设计,王连相等,中国科学技术出版社,2004 2 C语言程序设计,谭浩强,清华大学出版社,1999 3 C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 4 C语言实用程序荟萃,西安电子科技大学出版社,1993 5 C语言函数手册,机械工业出版社,1999 6 C语言的实际应用,安徽科学技术出版社,2000 致谢 首先感谢我们的C程序老师让我学会了很多有关于C程序的知识。让我认识到C程序的重要性。再感谢我们周老师对我们做这次课设的支持与帮助。没有她的帮助,我们很难完美的完成这次课设。最后谢谢我的搭档康绿玉同学帮我攻克了许多难关,康绿玉同学给了我很大的鼓励。 附录 #include "stdio.h" #include "string.h" #include <conio.h> #define N 30 //struct car/*定义车辆信息结构体*/ #define N 30 struct car/*定义车辆信息结构体*/ { int number;/*车辆编号*/ char name[10];/*车辆名称*/ int inprice;/*进价*/ int outprice;/*售价*/ int quantity;/*车辆数量*/ }car[N];/*结构体数组*/ void welcome()/*欢迎界面*/ { printf(" ^^^^^^^ ^^^^^^^\n"); printf(" --------------------welcome--------------------\n"); printf(" #* *#\n"); printf(" #* 销售管理系统 *#\n");/*销售管理系统*/ printf(" #* *#\n"); printf(" ---------=====!what do you want to do!=====---------\n"); printf("\n"); printf(" **~~ 1 输入新数据 ~~**\n");/*输入一组新数据*/ printf(" **~~ 2 插入数据 ~~**\n");/*插入一组新数据*/ printf(" **~~ 3 按车辆名称查找数据 ~~**\n");/*按车辆名称查找数据*/ printf(" **~~ 4 按车辆编号查找数据 ~~**\n");/*按车辆编号查找数据*/ printf(" **~~ 5 按车辆名称查找并删除数据 ~~**\n");/*按车辆名称查找并删除数据*/ printf(" **~~ 6 列出所有数据 ~~**\n");/*列出所有数据*/ printf(" **~~ 7 统计各产品的收益及总收益 ~~**\n");/*统计各产品的收益及总收益*/ printf(" **~~ 8 按车辆销售额从小到大排序并输出排序前后的结果 ~~**\n");/*按车辆销售额从小到大排序并输出排序前后的结果*/ printf("\n"); printf(" --------<~><~><~><~><~><~><~><~><~><~><~><~>--------\n"); printf("\n"); printf("please input you choice(A number between 1 and 8):\n"); } void input1(int i)/*输入单组数据*/ { printf("请输入车辆数据:\n");/*输入数据*/ printf("请输入车辆编号:\n");/*输入车辆编号*/ scanf("%d",&car[i].number); printf("请输入车名:\n");/*输入车辆名称*/ scanf("%s",&car[i].name); printf("请输入车辆进价:\n");/*输入车辆进价*/ scanf("%d",&car[i].inprice); printf("请输入车辆售价:\n");/*输入车辆售价*/ scanf("%d",&car[i].outprice); printf("请输入车辆数量:\n");/*输入车辆数量*/ scanf("%d",&car[i].quantity); } void input()/*连续输入多组数据*/ { int i,m=0; char x; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; for(i=m;i<N-1;i++) { input1(i); x=getchar(); if(x=='y') continue;/*继续输入*/ else break;/*中断输入*/ } } int insert()/*添加一组新数据*/ { int i,m=0; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; input1(m);/*输入此数据*/ return 0; } void search_name()/*按车名查找*/ { char name[20]; int i,flag=0; printf("输入要查找的车辆的品名:");/*输入要查找的车辆的品名*/ scanf("%s",&name); for(i=0;i<N;i++) if(strcmp(car[i].name,name)==0)/*校验品名*/ { printf("the information of this name:\n"); printf("Number: %d\nName: %s\nInprice: %d\nOutprice: %d\nQuantity: %d\n",car[i].number,car[i].name,car[i].inprice,car[i].outprice,car[i].number);/*输出要查找的数据的编号、车名、进价、售价、数量*/ flag=1; } if(flag==0) printf("The name is not exist !\n");/*所输入的车名不存在*/ } Delete()/*通过车名查找并删除数据*/ { char n[10]; int i,j,b=0,m=0; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; printf("输入要删除的数据的名称");/*输入要删除的数据的名称*/ scanf("%s",&n); for(i=0;i<m;i++) if(strcmp(car[i].name,n)==0)/*校验名称*/ { for(j=i;j<=m;j++) car[j]=car[j+1]; b=1; } if(b==0) printf("没有要找的数据!\n");/*没有要找的数据*/ if(b==1) printf("成功删除数据!\n");/*成功删除数据*/ } void search_number()/*按车辆编号查找*/ { int number,i,flag=0; printf("请输入要查找的车辆编号:");/*输入要查找的车辆的编号*/ scanf("%d",&number); for(i=0;i<N;i++) if(car[i].number==number)/*校验车辆编号*/ { printf("the information of this number:\n"); printf("Number: %d\nName: %s\nInprice: %d\nOutprice: %d\nQuantity: %d\n",car[i].number,car[i].name,car[i].inprice,car[i].outprice,car[i].number);/*输出要查找的数据的编号、车名、进价、售价、数量*/ flag=1; } if(flag==0) printf("所暑促的编号不存在 !\n");/*所输入的编号不存在*/ } void profit()/*统计各车辆的收益及总收益的函数*/ { int p[N],pr=0,i,m=0; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; for(i=0;i<m;i++) { p[i]=(car[i].outprice-car[i].inprice)*car[i].quantity;/*计算车辆i的收益*/ pr=pr+p[i];/*计算总收益*/ printf("Name: %-7s\tNumber: %-7d\tprofit: %-10d\n",car[i].name,car[i].number,p[i]);/*输出车辆i的收益*/ } printf("Total Profit: %d\n",pr);/*输出总收益*/ } void sort()/*按销售额排序*/ { int i,j,t,s,m=0,b[N],a[N]; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; for(i=0;i<m;i++) { b[i]=car[i].outprice*car[i].quantity;/*将车辆销售额放入数组b[i]*/ a[i]=car[i].number;/*将车辆编号放入数组a[i]*/ } printf("Before sorted:\n"); for(i=0;i<m;i++) /*输出排序前的结果,编号和销售额*/ printf("Number: %-5d\tSale: %-10d\n",a[i],b[i]); for(i=1;i<m;i++) for(j=0;j<m-i;j++) if(b[j]>b[j+1]) { t=b[j]; b[j]=b[j+1]; b[j+1]=t; /*冒泡法排序*/ s=a[j]; a[j]=a[j+1]; a[j+1]=s; } printf("After sorted:\n"); /*输出排序后的结果,编号和销售额*/ for(i=0;i<m;i++) printf("Number: %-5d\tSale: %-10d\n",a[i],b[i]); } void output()/*输出全部数据*/ { int i,m=0; for(i=0;i<N;i++) if(strlen(car[i].name)!=0)/*计算已有的数据个数*/ m++; printf("Disply all the data below:\n"); for(i=0;i<m;i++) { printf("The number: %d\n",car[i].number);/*输出车辆编号*/ printf("The name: %s\n",car[i].name);/*输出车辆名称*/ printf("The inprice: %d\n",car[i].inprice);/*输出车辆进价*/ printf("The outprice: %d\n",car[i].outprice);/*输出车辆售价*/ printf("The quantity: %d\n",car[i].quantity);/*输出车辆数量*/ printf("\n"); } } main()/*主函数*/ { int c; welcome(); while(1) { scanf("%d",&c);/*输入选择项*/ switch(c) { case 0:welcome();break;/*清屏并显示欢迎界面*/ case 1:input();printf("输入数据并提示输入0以返回欢迎界面查看选项!\n");break;/*输入数据并提示输入0以返回欢迎界面查看选项*/ case 2:insert();printf("添加一组新数据并提示输入0以返回欢迎界面查看选项!\n");break;/*添加一组新数据并提示输入0以返回欢迎界面查看选项*/ case 3:search_name();printf("按车名查找并提示输入0以返回欢迎界面查看选项!\n");break;/*按车名查找并提示输入0以返回欢迎界面查看选项*/ case 4:search_number();printf("按车辆编号查找并提示输入0以返回欢迎界面查看选项!\n");break;/*按车辆编号查找并提示输入0以返回欢迎界面查看选项*/ case 5:Delete();printf("按车名查找并删除数据并提示输入0以返回欢迎界面查看选项\n");break;/*按车名查找并删除数据并提示输入0以返回欢迎界面查看选项*/ case 6:output();printf("输出全部数据并提示输入0以返回欢迎界面查看选项\n");break;/*输出全部数据并提示输入0以返回欢迎界面查看选项*/ case 7:profit();printf("统计各车辆的收益及总收益并提示输入0以返回欢迎界面查看选项\n");break;/*统计各车辆的收益及总收益并提示输入0以返回欢迎界面查看选项*/ case 8:sort();printf("按销售额从小到大排序并提示输入0以返回欢迎界面查看选项!\n");break;/*按销售额从小到大排序并提示输入0以返回欢迎界面查看选项*/ } } } ### 车辆管理系统课程设计相关知识点解析 #### 一、需求分析 - **文件系统交互**: 本程序需要能够从文件系统中读取原始数据,即从`list.txt`文件中读取每一行作为一条记录。这通常涉及到文件打开、读取、关闭等基本文件操作技能。 - **数据分类存储**: 为了便于后续处理,需要将从文件中读取的数据进行分类存储。这里使用了一个结构体数组来存储每一条记录的信息,包括车辆编号、名称、进价、售价和数量等。 - **功能菜单**: 为用户提供一个简单的键盘式菜单,以便用户能够根据需要选择不同的操作,例如输入新数据、查找数据等。 #### 二、总体设计 - **功能模块划分**: 根据程序的需求,可以将功能分为几个主要模块,如数据输入、数据处理、数据显示等。 - **数据结构设计**: 使用结构体数组来存储车辆信息,方便进行数据管理和操作。 - **用户交互界面**: 设计一个简单易用的用户界面,以文本形式呈现,通过键盘输入选择相应的操作。 #### 三、详细设计 - **1. 主函数**: 控制程序的执行流程,负责调用其他函数,并处理用户的输入。 - **2. 选择函数**: 根据用户的输入调用相应的功能函数。 - **3. 输入函数**: 用户可以通过此函数输入新的车辆信息。 - **4. 文件数据输入函数**: 用于从文件中读取数据,并将其存储到结构体数组中。 - **5. 统计函数**: 对存储的车辆信息进行统计,如计算每种车型的销售量和销售额。 - **6. 排序函数**: 按照销售额对车辆进行排序。 - **7. 总额统计函数**: 计算所有车型的销售额总额。 - **8. 统计报表函数**: 输出所有车型的销售统计数据。 - **9. 清空文件函数**: 清除文件中的所有数据。 #### 四、编码 - **结构体定义**: 定义了一个名为`car`的结构体,包含车辆的基本信息字段,如`number`、`name`、`inprice`、`outprice`和`quantity`。 - **全局变量**: 定义全局变量来跟踪已有的数据数量和存储分类后的信息。 - **核心函数实现**: 实现了多个函数来支持上述功能,如输入数据、统计信息、排序等。 - **菜单驱动**: 通过一个循环和`switch-case`语句来处理用户的输入,并调用相应的函数。 #### 五、测试 - **输入新数据测试**: 验证程序能否正确地接收用户输入的新数据,并将其存储在结构体数组中。 - **查找数据测试**: 测试是否能根据车辆名称或编号准确找到相应的记录。 - **删除数据测试**: 验证是否能根据车辆名称正确删除数据。 - **显示所有数据测试**: 检查程序是否能完整地显示所有存储的车辆信息。 - **统计收益测试**: 确认统计功能是否能正确计算每种车型的收益和总收益。 - **排序测试**: 验证排序功能是否能按照销售额正确地对车辆进行排序。 #### 六、设计总结 - **模块化设计**: 通过模块化的编程方式,使程序结构清晰,易于维护和扩展。 - **结构化编程**: 运用了结构化编程的思想,提高了代码的可读性和可维护性。 - **实践经验**: 在实践中加深了对C语言及其编程技巧的理解,增强了实际编程能力。 #### 参考文献 - [1] C/C++程序设计,王连相等,中国科学技术出版社,2004 - [2] C语言程序设计,谭浩强,清华大学出版社,1999 - [3] C程序设计题解与上机指导,谭浩强,清华大学出版社,1999 - [4] C语言实用程序荟萃,西安电子科技大学出版社,1993 - [5] C语言函数手册,机械工业出版社,1999 - [6] C语言的实际应用,安徽科学技术出版社,2000 #### 致谢 - 表达了对学生导师、合作伙伴等人的感激之情。
剩余25页未读,继续阅读
- u0107603132013-05-27文件解压缩之后,怎么没有代码呢,没有找到想要的东西
- anli5555512012-06-11好代码,体现了程序员的水平,很不错,就是中间有几个地方改进一下更好
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 使用群晖NAS搭建虚拟机
- 基于minifly的学习源码-本人耗时五年完善的稳定源码移植于minifly上,不带操作系统,直接操作寄存器,代码简洁明了,算法基于数学公式,便于学习数学知识
- 基于motorcad设计的外转子发电机,磁钢采用FB6B铁氧体 ,不等匝绕组,输出功率2.3KW 定子外径156 3200RPM,18极27槽永磁同步发电机(PMSG)设计案例.
- 电力电子、电机驱动、数字滤波器matlab simulink仿真模型实现及相关算法的C代码实现 配置C2000 DSP ADC DAC PWM定时器 中断等模块,提供simulink与DSP的联合仿
- 视觉系统程序,新能源电池检测 1、支持4个相机 2、实现Profinet网卡通信 3、实现日志功能 4、实现图像存储功能 5、实现电芯有无判断、电芯和端板涂胶检测
- 基于51单片机的电子时钟设计
- 西门子smart200与汇川变频器 Modbus RTU控制程序 步科触摸屏程序 振捣控制系统 汇川变频器手册
- C#上位机与西门子plc通信,实现伺服控制与数字量控制 提供C#源代码,plc测试程序
- 45.<资源>番茄钟3.0 无代码 C#例子 WPF例子
- stm32f103的Bootloader IAP串口升级stm32f103的Bootloader IAP串口升级st m32固件的学习资料,成熟产品方案已经用在批量产品上,资料包括上位机(电脑端)运行
- 基于Spark的电商用户行为分析系统-源码+课设论文(本科期末课程设计).zip
- Qt C++pdf阅读器源码 上下翻页 精美工具栏 支持ofd格式 1. 仿WPS界面 2. 预览PDF文件 3. 支持PDF预览放大,缩小 4. 支持目录预览查看 5. 支持目录点击跳转页查
- RDM(radis桌面工具)
- 西门子s7 200smart与3台台达VFD-M变频器通讯目标:用触摸屏和西门子smart 控制3台台达变频器通讯 器件:西门子s7 200 smart PLC,3台台达VFD-M变频器,昆仑通态触摸
- 基于51单片机的电子密码锁设计
- Qt5工业上位机源码 工业电子称 无线扫码器 串口的使用 Qt5.14可运行 Qt5工业上位机应用! 一套完整工程! 工业电子称使用, 无线扫码枪的使用, 串口的使用 使用Qt5.14 用QtCrea