版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.目录1 课程设计目的与要求12 问题描述23 总体设计33.1功能分析 .33.2系统使用的主要函数 .33.3系统使用的主要数据结构 .34详细设计 .44.1程序总体结构图,层次图 .44.2程序流程图 .55功能测试 .56程序设计调试情况分析 .147课程设计小结 .16参考文献 .18附录系统源程序 .19;.1 课程设计目的与要求高级语言程序设计是本科工科类各专业的重要基础课, 课程以影响深远的、 传统的、面向过程的优秀编程语言 c 语言为基础, 学习程序设计的基本概念和方法, 通过本门课程学习,应使同学掌握高级语言的基本原理, 熟练掌握程序设计的基础知识、 基本概念;掌握程序设
2、计的思想和编程技巧。课程设计是在学生已经具备了使用c 语言编写简单的应用程序的能力,为使学生对c语言有更全面的理解,进一步提高运用c 语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个解决方案。经过该实践环节,培养学生的探索精神和创新能力。通过答辩训练学生的综合表达能力。参加本课程设计的学生, 应当认真完成本课程设计的全部过程。 并以最终课程设计成果来证明其独立完成各种实际任务的能力。 从而反映出理解和运用本课程知识的水平和能力。具体如下:( 1)数据组织方面尽量使用到:数组、链表、结构体、文件;( 2)程序结构方面做到函数调用,尽量采用指针运算;( 3)代码编写规范,形成良好的
3、编程习惯;( 4)程序须有一定的健壮性和必要的提示信息, 考虑问题的多种可能和边界数据。( 5)课设完成须进行答辩,提交课设报告电子稿、装订的打印稿。课设报告内容包括以下几个方面:程序的总体设计和算法分析。程序流程图、函数说明源程序代码清单测试数据和测试过程记录遇到的问题及解决方法分析课程设计小结;.2 问题描述设计一个 c 语言程序(销售管理系统),具体要求:某公司有四个销售员(编号: 1-4 ),负责销售五种产品(编号 1-5 )。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:1) 销售员代号2) 产品代号3) 这种产品当天的销售额每位销售员每天的可能上交0-5 张
4、便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况, 进行如下处理: 主要功能:1、计算上个月每个人每种产品的销售额。2、按销售额对销售员进行排序,输出排序结果(销售员代号)3、统计每种产品的总销售额,对这些产品按从高到底的顺序输出排序结果(需输出产品的代号和销售额)4、输出统计报表;.3 总体设计3.1功能分析系统提供主界面, 各种功能操作以独立的函数为基础, 运用对链表操作的技术来实现通讯录的管理,同时对操作结果在计算机中做永久保存。)3.2 系统使用的主要函数(列出函数首部+注释)void f1(data *x)/*显示所有的信息 */void f2(data
5、*x)/* 按销售额对销售员进行排序,输出排序结void f3(data *x)/* 统计每种产品的总销售额,输出排序结果 */void f4(data *x)/* 输出统计报表 */3.3 系统使用的主要数据结构typedef struct/* 缩短结构体变量名*/int shangpinz;/* 定义结构体便于信息的存储和读写,辨别*/data;/*r 是表示商品的种类,最后一个为该销售员商品总和*/;.4 详细设计4.1 程序总体结构图,层次图销售管理系统1 计算上2 按销3 按产品4 输出统5 退出系统个月每个售额对销额从高计报表人每种产销售员到底的顺品的销售进行排序排序额序;.4.2
6、 程序流程图入口main()主函数for(i=0;i+)menu()scanf(%d,&choice);if(choice=5)switch(choice)case 1;case 2;case 3;case 4;f1();f2();f3();f4();break;结束break;f3()流程图;.入口.;. 入scanf(%s,fname);if(fp=fopen(fname,wb)=null)printf( 不能打开文件!exit(0);for(i=0;ir;i+)if(fread(x+i,sizeof(data),1,fp)!=1)printf( 入信息出 ! );.f4()流程 for(
7、i=0;iz;i+)for(j=0;jshangpini;for(i=0;iz;i+) for(i=0;iz;i+)printf(nnnttt按任意 返回主菜 ! );end;.5 功能测试1、功能函数主函数main()函数的功能 :用于联系各个功能函数模块,以及退出程序时的退出画面提示。函数的入口:整个程序是从主函数开始的。函数的出口:当从 main()的 switch()开关结构中进入,即choise 的值为 5 时通过 break;跳出 for 循环,然后退出 main()函数,即:退出整个程序。函数调用关系:该函数不被其它函数调用图 5.1- 软件进入提示页面2、功能函数主菜单menu
8、();.函数的功能 :主要作用是提示用户操作,体现模块化思想,主要是显示出菜单让用户选择要进行的任务。函数的入口: 从主函数 main()中的 system(cls); /* 清屏命令 */menu();/*菜单函数提示用户怎样选择*/进入函数,这是直接被主函数 main()调用的。函数调用关系:被主函数调用。并在文中无返回值的空值void 函数。函数的出口:执行完所有的printf() 函数后自动退出该函数。图 5.2- 主菜单界面3、功能函数 f1()函数的功能:计算上个月每个人每种产品的销售额;.函数的入口:从 main()的 switch()开关结构中进入, 即 choice 的值为
9、1时进入该函数, 打开 .dat 数据文件,然后提示用户通过键盘对该月的员工销售情况进行数据的读入。函数调用关系:被主函数调用。由switch()开关结构中进入,并在文中无返回值的空值void 函数。函数的出口:当程序执行提示语“ printf( 继续输入请按回车,结束输入请按 escn);”的时候,对用户的操作进行提示,如果用户选择了按“ esc”键,则用户选择了结束数据的录入,将结束该函数,而执行主函数main()中“ break;”跳出 switch()开关函数,继续执行for 循环结构。图 5.3- 写入销售数据界面4、功能函数 f2()函数的功能 :按销售额对销售员进行排序,输出排序
10、结果。函数的入口:程序从 main()的 switch()开关结构中进入,即choise 的值为 2 时,开始进入该函数,进入函数后,首先用“fopen()”打开文件,然;.后利用“ fread()”读取二进制数据,最终利用选择排序法 ,按销售员的所选产品的总销售额对销售员进行排序。函数调用关系:被主函数调用。由 switch()开关结构中进入,并在文中无返回值的空值 void 函数。函数的出口:当输出排序结果用printf() 标准输出到屏幕上,然后结束该函数,而执行主函数main()中“ break;”跳出 switch()开关函数,继续执行for 循环结构。图 5.4- 按销售额对销售员
11、进行排序5、功能函数 f3()函数的功能 :统计每种产品的总销售额,输出排序结果函数的入口:从 main()的 switch()开关结构中进入,即choise 的值为 3的时侯,进入该函数,开始读取数据对用户进行提示,然后统计每种产品的总销售额。将计算后的总销售额进行排序,最终把排序的结果用printf ()标准输出函数,将结果输出在屏幕上。;.函数调用关系:被主函数调用。由 switch()开关结构中进入,并在文中无返回值的空值 void 函数。函数的出口:当输出排序结果用printf() 标准输出到屏幕上,然后结束该函数,而执行主函数 main()中“break;”跳出 switch()开
12、关函数,继续执行 for 循环结构。图 5.5- 统计每种产品的总销售额, 输出排序结果6、功能函数 f4()函数的功能 :输出统计报表函数的入口:从 main()的 switch()开关结构中进入,即choise 的值为 3时,进入该函数,然后通过fopen()函数。即:“if(fp=fopen(fname,rb)=null) ” 打开文件。 进入数据的处理。函数调用关系:被主函数调用。由 switch()开关结构中进入,并在文中无返回值的空值 void 函数。;.函数的出口:开始时读取数据后,统计报表已经输出到屏幕上时,然后利用而执行主函数main()中“break;”跳出 switch(
13、)开关函数,继续执行 for 循环结构。图 5.5- 输出统计报表;.6 程序设计调试情况分析调试方法:打开 microsoft visual c+ 6.0,先将各个功能函数的的内容清空,只保留主函数 main(),然后编译检验 main()函数中是否有错,如果没有错误,再连接、运行。确认 main()函数一切无误后,然后加入功能函数 menu()函数与 f1()函数,由于 menu()函数比较简单, 所以与 f1()函数一起进行调试, f1()函数中主要注意读取文件,与写入文件,这都是二进制的形式。若 menu() 函数与 f1()函数编译、连接、运行没问题,继续加入 f2()函数,就这样的
14、方法依次检查调试 f3()函数、 f4()函数。当所有的功能函数都加上且正确无误时,就可以进入下一个环节程序的测试。测试方法:运行程序,然后进入销售管理系统的界面,在这里需要做的就是把自己当成一个公司的程序使用者, 来对该程序进行使用, 看该程序有哪些方面用着不够爽,把这些问题依次整理出来, 再对源程序进行修改, 在这个过程中也需要对程序进行调试, 不过不必将各个功能函数的的内容清空再进行如上述的调试方法,而是,改一部份运行一次,看是否有无。如 f1()函数有误,则先修改 f1()函数,一块一块的进行修改,就是遵循 c 语言的模块化设计原理, 若所有的都改过来了, 且运行无误,那就大功告成了。
15、在调试中遇到的问题:在调试过程中,我们遇到诸多小问题,但都在我们共同讨论后解决了。1、问题:标点符号在输入的时候,使用的是中文输入法,这种错误一般都难以发现,让修改的时候找不到目标。解决方法: 用“替换” 。如果程序中的 error 很多,不管 error 是什么,先将标点替换成英文的标点。;.2、问题:调试时,有的时候编译后没什么问题,就是在点击连接 link 时出现了错误。 而且,这种错误让我们不知道怎么修改。 但是我们的程序的确正确。解决方法:将源程序保存(save),然后关掉 microsoft visual c+ 6.0,重新启动 microsoft visual c+ 6.0.;.
16、7 课程设计小结小组成员分工组长:姜猛 负责统计每种产品的总销售额 ,输出排序结果、输出统计报表。组员:黄雪松负责按销售额对销售员进行排序,输出排序结果。组员:莫然龙负责计算上个月每个人每种产品的销售额。主菜单模块共同完成1、在设计中我们实现了设计目标的所有内容即: 1、计算上个月每个人每种产品的销售额。2、按销售额对销售员进行排序,输出排序结果(销售员代号)3、统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)4、输出统计报表2、其中遇到了以下问题:i 、数据输入文件的形式:原本用 fprintf()以 ascll码的形式输入 .txt文件中,这样对
17、实现“数据的输入是否正确的判断语句”的编写很困难,而且 ascll码的形式输入 .txt文件保密性差,不方便公司对文件的保密管理。解决方案:采用 fwrite() 函数的二进制形式输入 .dat 数据文件中解决了以上问题,使“数据的输入是否正确的判断语句”ii 、文件的创建方案及命名形式:;.文件应在用户计算数据时自动创建;文件创建时的扩展名.dat 的添加困难。解决方案:用 strcat(fname,.dat);将扩展名的 .dat 字符加到fname 后面,令实现了文件的命名,如1 月的数据文件,在使用者输入 1 时就实现了文件 .dat的创建。iii 、 输入出错的常见问题:输入时, s
18、cantf() 函数中出现非地址项,某变量未进行类型定义,以及语句末尾缺少分号等常见的低等错误。解决方案:根据 microsoft visual c+ 6.0的错误提示( error )与警告( warning )回到源程序中,逐一对错误或警告进行修改,每修改一条就编译一次。3、实践心得经过 c语言课程设计实践学习, 使我对 c 语言有了更进一步的认识和了解,通过实践,我也发现我的好多不足之处, 首先是在程序输入上还不够熟练,经常按错字母, 通过学习也有所改进; 再有对 c 语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉, 还有对 c 语言中经常出现的错误也不了解,通过实践,使
19、我在这几个方面的认识有所提高。熟练地掌握了 c语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用) 等。进一步掌握各种函数的应用,以及文件的读写操作等我认为要学好 c 语言程序这门课程,不仅要认真阅读课本知识,更重要的是要通过上机实践才能增强和巩固我的知识。 只有这样我们才能成为合格的计算机人材。;.参考文献1 吉顺如 . c 程序设计教程与实验 .m. 北京 :清华大学出版社, 2011.;.附录系统源程序/* 计算上个月每个人每种产品的
20、销售额。1)按销售额对销售员进行排序,输出排序结果(销售员代号)2)统计每种产品的总销售额,按从高到底的顺序,输出排序结果(需输出产品代号 ,销售额)3)输出统计报表 */#include #include #include #include #define z 5/*z 表示产品种类 */#define r 4/* 定义宏常量便于程序的一般化*/ /*r 表示销售员个数 */typedef struct/* 缩短结构体变量名 */int shangpinz;/* 定义结构体便于信息的存储和读写,辨别*/data;/*r 是表示商品的种类 ,最后一个为该销售员商品总和 */* 本函数由本组成员
21、共同设计*/void menu()system(cls);/* 清屏命令 */printf(nn);printf(t主菜单n);printf(t1.计算上个月每个人每种产品的销售额n);printf(t2.按销售额对销售员进行排序,输出排序结果n);printf(t3.统计每种产品的总销售额,输出排序结果n);.printf(t4.输出统计报表n);printf(t5.结束操作n);printf(t n);void f1(data *x)/* 计算上个月每个人每种产品的销售额*/file *fp;char fname10,hitkey;int j,t;/* 用于控制循环 */int i,k,s
22、;/* 用于定义职工序号,产品序号,产品数量 */system(cls);/* 清屏命令 */printf( 您想计算哪个月 ?n);printf( 请输入月份 :bbb);/* 输入文件名 ,这样可以进行各个月份信息写入 */scanf(%s,fname);strcat(fname,.dat);if(fp=fopen(fname,wb)=null)/* 打开文件 */ printf( 不能打开文件! n);exit(0);/* 正常 exit(0); 结束程序 */for(j=0;jr;j+)/* 对商品数量清零 */for(t=0;tshangpint=0;for(j=0;hitkey!=
23、27;j+)/*27esc 的 ascii 值*/printf( 请输入:职工编号 (1-4)n);scanf(%d,&i);printf( 请输入:产品编号 (1-5)n);.scanf(%d,&k);printf( 请输入:销售数量 n);scanf(%d,&s);/* 提示用户写入信息的格式 */if(ir|iz|kshangpink-1=(x+i-1)-shangpink-1+s;/* 统计各个人的各种产品的数量,-1 为了和数组中的序号相匹配*/printf( 继续输入请按回车,结束输入请按escn);printf( n);hitkey=getch();for (;hitkey!=1
24、3&hitkey!=27;)/*13 是回车键的 ascii 值*/hitkey=getch();for(j=0;jr;j+)if(fwrite(x+j),sizeof(data),1,fp)!=1)/* 把信息写入文件中便有以后调用 */printf(write error!n);fclose(fp); /* 关闭文件避免信息遗漏 */ printf(nnnnnnttt 保存成功,按任意键返回主菜单! );getch();void f2(data *x)/* 按销售额对销售员进行排序,输出排序结果 */ file *fp; char fname10;int i,k,j,t,bianhaor=
25、0,z;system(cls);/* 清屏命令 */printf( 你要哪个月的 ?n);.printf( 请输入月份 :bbb);/* 输入文件名 ,这样可以进行各个月份信息读入*/scanf(%s,fname);strcat(fname,.dat);if(fp=fopen(fname,rb)=null)/* 打开文件 */printf( 不能打开文件! n);exit(0);/* 正常退出 */for(i=0;ir;i+)/* 读出信息 */if(fread(x+i,sizeof(data),1,fp)!=1)printf( 读入信息出错! );/* 读入信息提示 */for(i=0;ir
26、;)/* 用于存储职工编号 */bianhaoi=i+;printf( 请输入按何种产品排序 n);scanf(%d,&k);k=k-1;/* 便于与结构体中的数组值对应 */for(i=0;ir;i+)/* 按 k 种产品对销售员排序 ,选择法排序 */ t=i;for(j=i+1;jshangpinkshangpink)/* 调用职工各自对应的结构体内的产品数量*/t=j;if(t!=i) z=bianhaoi;bianhaoi=bianhaot;bianhaot=z;printf(ttt 按 %d 产品对销售员排序为 :n,k+1);printf( n);for(i=0;ir;i+)pr
27、intf(ttt 第%d 名是:员工 %dn,i+1,bianhaoi+1);printf(nnnttt 按任意键返回上一主菜单!);.getch();fclose(fp);/* 关闭读入的文件 */void f3(data *x)/* 统计每种产品的总销售额,输出排序结果 */file *fp;char fname10;int i,j,sumz=0,bianhaoz=0,z,t,k;system(cls);/* 清屏命令 */printf( 您想计算哪个月的 ?n);printf( 请输入月份 :bbb);/* 输入文件名 ,这样可以进行各个月份信息读入 */scanf(%s,fname);
28、strcat(fname,.dat);if(fp=fopen(fname,rb)=null)/* 打开文件 */printf( 不能打开文件! n);exit(0);for(i=0;ir;i+)/* 读出信息 */if(fread(x+i,sizeof(data),1,fp)!=1)printf( 读入信息出错! );for(i=0;iz;i+)/* 对各种商品求和 */for(j=0;jshangpini;for(i=0;iz;i+)/* 用于存储商品编号 */bianhaoi=i;printf(%3d,bianhaoi);for(i=0;iz;i+)/* 对产品从高到低排序 ,选择法排序
29、*/ t=i;for(j=i+1;jz;j+)/* 产品变化时,产品编号也随之变化,便于输出 */;.if(sumtsumj)t=j;if(t!=i) k=sumi; sumi=sumt; sumt=k; z=bianhaoi;bianhaoi=bianhaot;bianhaot=z;printf( 输出产品排序 n);printf( 产品编号数量 n);printf( n);for(i=0;iz;i+)printf( 产品 %-7d%-1dn,bianhaoi+1,sumi);printf(nnnttt 按任意键返回主菜单! );getch();fclose(fp);/* 关闭读入的文件 *
30、/* 由 小组成员共同设计 */void f4(data *x)/* 输出统计报表 */file *fp;char fname10;int i,j,sumz+1=0;system(cls);/* 清屏命令 */printf( 您想计算哪个月 ?n);printf( 请输入月份 :bbb);/* 实为输入一个文件名 ,这样可以进行各个月份的信息读入*/scanf(%s,fname);strcat(fname,.dat);if(fp=fopen(fname,rb)=null)/* 打开文件 */;. printf( 不能打开文件! n); exit(0);for(i=0;ir;i+)/* 读出信息 */if(fread(x+i,sizeof(data),1,fp)!=1)printf( 读入信息出错! )
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 旧变压器买卖合同
- 《商业银行风险防范》课件
- 荣德基课件梅花魂
- 《层厂房基本构造》课件
- 2024年度版权侵权赔偿合同:某版权侵权纠纷的赔偿标的及规定2篇
- 财务分析报告范文芳
- 年药品采购合同范本
- 本科生创新报告范文
- 精茶叶购销合同
- 牙齿的秘密课件小班
- 项目负责人B证继续教育在线试题(共8套带答案)
- 圆的标准方程(公开课)(课堂PPT)
- 江苏省城镇燃气安全检查标准(试行)
- 半导体专业用语
- 武汉大学考博推荐信
- 结构化学期末复习-选择题
- MT_T 1172-2019 矿用移动式注浆泵技术条件_(高清版)
- 服装CAD教程适用于ET等软件打板推板的快捷键及功能
- 国内几种常见的离子膜电解槽槽型结构简介
- 公司erp项目激励制度
- 人教版小学六年级数学毕业升学试卷(附:试卷命题意图、参考答案及评分标准)
评论
0/150
提交评论