370 likes | 521 Views
《 C语言程序设计教程》 (第二版). 李志球、刘昊编著. Lizq98@xzcat.edu.cn. 第10章 应用程序设计实例. 本章要点: ◆ 了解程序设计方法和过程 ◆ 理解课程设计任务 ◆ 掌握应用程序的基本框架结构 ◆ 学会应用程序设计. 第10章 应用程序设计实例. 目 录 10.1 程序设计方法简介 10.2 课程设计任务 10.3 歌唱比赛评分程序 10.4 学生成绩管理系统 10.5 课程设计参考题目. 10.1 程序设计方法简介.
E N D
《C语言程序设计教程》(第二版) 李志球、刘昊编著 Lizq98@xzcat.edu.cn
第10章 应用程序设计实例 本章要点: ◆ 了解程序设计方法和过程 ◆ 理解课程设计任务 ◆ 掌握应用程序的基本框架结构 ◆ 学会应用程序设计
第10章 应用程序设计实例 目 录 10.1 程序设计方法简介 10.2 课程设计任务 10.3 歌唱比赛评分程序 10.4 学生成绩管理系统 10.5 课程设计参考题目
10.1 程序设计方法简介 程序设计方法很多,程序员可以充分发挥自己的聪明才智,设计出形式多样、运行效率高的程序。但是对于一个复杂的应用程序,不能在象前面章节中的例题一样直接设计。设计一个应用程序,是一个系统性的工作任务,有一定的方法和过程。对于一个应用程序的开发设计主要有如下过程: 1. 可行性研究与项目开发计划 2. 软件需求分析 3. 软件概要设计 4. 软件详细设计 5. 程序编码 6. 软件测试
10.1 程序设计方法简介 1. 可行性研究与项目开发计划 可行性研究的目的是用最小的代价在尽可能短的时间内确定问题是否能够解决。也就是说可行性研究的目的不是解决问题,而是确定问题是否可解和是否值得去做。一般应从经济可行性、技术可行性、运行可行性、法律可行性和开发方案等方面研究可行性,并写出可行性研究报告。在可行性研究的基础上编制项目开发计划书。
10.1 程序设计方法简介 2. 软件需求分析 软件需求分析的目的是深入描述软件的功能和性能,确定软件设计的约束条件同其他系统元素的接口细节,定义软件的其他有效性需求。需求分析阶段研究的是用户对软件的要求。一方面,必须全面理解用户的各项要求,但又不能全盘接受所有的要求,另一方面,要准确地表达被接受的用户要求。
10.1 程序设计方法简介 2. 软件需求 分析 软件需求分析的目的是深入描述软件的功能和性能,确定软件设计的约束条件同其他系统元素的接口细节,定义软件的其他有效性需求。需求分析阶段研究的是用户对软件的要求。一方面,必须全面理解用户的各项要求,但又不能全盘接受所有的要求,另一方面,要准确地表达被接受的用户要求。
10.1 程序设计方法简介 3. 软件概要设计 把一个软件需求转换为软件表示时,首先设计出软件总体系结构,称为概要设计或结构设计。概要设计阶段的基本任务是: (1)设计软件系统结构,具体包括采用某种设计方法,将一个复杂的系统按功能划分为模块、确定每个模块的功能、确定模块之间的调用关系、确定模块之间的接口、评价模块的结构质量。 (2)进行数据结构及数据库的设计。 (3)编写概要设计的文档。 (4)评审,包括是否完整地实现了规定的功能、性能要求;设计方案是否可行;关键的处理及内部接口定义的正确性、有效性、各部分的一致性。
10.1 程序设计方法简介 4. 软件详细设计 (1)为每个模块进行详细的算法设计 (2)为模块内的数据结构进行设计 (3)对数据库进行物理设计 (4)其他设计 (5)编写详细设计说明书
10.1 程序设计方法简介 5. 程序编码 在程序编码阶段,要注意程序的结构化和数据结构的合理化。应当采取自顶向下、逐步求精的方法,把一个模块的功能逐步分解,细化为一系列具体的步骤,进而转化为一系列用某种程序设计语言写成的程序。 6. 软件测试 软件测试是根据软件开发各阶段的规格说明和程序内部结构而精心设计一批测试用例(即输入数据及其预期的输出结果),并利用这些测试用例去运行程序,以发现程序隐藏的错误并进行纠正的过程。
10.2 课程设计任务 1. 课程设计的目的 《C语言程序设计》是一门实践性很强的课程,为了提高学生综合运用C语言程序设计能力,在学完了《C语言程序设计》课程之后,结合实际问题设计应用程序,旨在加深对C语言程序设计知识的理解,加深对使用C语言进行程序设计与开发的认识,掌握使用C语言开发应用程序来解决实际问题的基本方法和过程,提高进行应用程序设计和分析的基本能力,为今后的学习与实践打下良好的设计基础。
10.2 课程设计任务 2. 课程设计题目 由指导教师拟定设计题目及设计要求供学生选择。 3. 设计准备工作 根据设计任务书给定的题目确定设计的具体题目,进一步学习C语言程序设计,重点是函数、结构体、文件等内容,以及进一步熟悉开发环境的使用,掌握利用C语言进行程序设计方法,根据选定的题目了解实际工作的任务和内容,收集有关原始信息和资料,结合设计要求,理清设计思路,明确设计内容。
10.2 课程设计任务 4. 设计过程内容及方法、步骤 1)需求分析:根据选定的题目,了解实际工作中的任务和内容,收集有关原始信息和资料。 2)系统分析:结合设计要求,对系统进行分析,确定系统功能和系统结构及模块划分。 3)数据结构设计:分析工作中需要处理的数据,进行分类整理,确定对数据的描述方法,确定对应的结构体和文件存储结构。
10.2 课程设计任务 4. 设计过程内容及方法、步骤 4)界面设计:根据各模块的功能需要,设计出相应功能所需的显示界面。 5)代码设计:根据各模块的功能,在相应函数中设计程序代码,实现所需功能,并进行模块调试,纠正错误。 6)系统测试:利用模拟数据,对整个程序进行运行测试,找出系统存在的问题和不足,并适当给与改正。 7)撰写设计说明书。
10.2 课程设计任务 5. 设计成果 1)设计成果:包括课程设计说明书、源程序代码。 2)毕业设计说明书的内容一般包括:系统概述;系统分析;系统功能;开发环境;数据结构设计;系统结构图、各模块流程图;操作界面及程序代码;使用手册;设计过程中疑难问题的解决办法,系统需要改进的地方和注意的问题;总结等几个部分。 (1)设计说明书文字要通顺、层次清楚、对攻功能实现方法、关键技术、主要代码应注有文字说明,必要时用表格列出。 (2)设计说明书文字一般不少于20000字。
10.2 课程设计任务 6. 设计期间的基本要求 1)学生在教师的指导下,应积极、主动地独立完成课程设计所规定的全部任务。 2)应严格按照进度进行设计,不得无故拖延。 3)设计方案有原则性错误、未按规定时间完成设计、抄袭他人设计、不按设计要求或未完成全部设计内容成绩定为不及格。
10.3 歌唱比赛评分程序 10.3.1 评分过程及功能介绍 1. 系统介绍 在电视中经常可以看到,一些竞赛中,当每位选手表演完后,由几位评委对选手的表现打分给出成绩,然后根据每位评委的打分综合计算出选手的得分。此过程现在一般都是由计算机对评委的打分进行处理,当选手表演完后,评委给出各自的评分,然后把评委的打分输入计算机,由计算机程序按照一定规则计算出选手的得分,当所有选手都表演完后,最后计算机根据选手得分进行排名,计算出每位选手的比赛名次。
10.3 歌唱比赛评分程序 10.3.1 评分过程及功能介绍 2. 功能分析 根据任务要求,了解了程序应完成的任务,除了上面所提到的必须功能外,为了便于用户使用程序,在此基础上还需要增加一些辅助功能,如功能菜单的显示和选择、数据的浏览、数据的查找等功能,确定程序应实现的功能如下: 1)评委分数的输入,并计算出选手最终得分,去掉一个最高分和一个最低分后的平均分数作为选手得最终得分; 2)根据选手得分按照分数由高到低进行排名,计算机出选手的名次; 3)选手得分的查询,在比赛中随时查询任意选手的得分情况; 4)选手分数的浏览,把所有选手的分数都显示出来,以便整体了解选手得分情况; 5)程序功能菜单,通过菜单提供用户选择不同的功能,完成所需任务。
10.3 歌唱比赛评分程序 10.3.2 程序代码 1. 程序结构介绍 通过前面的功能分析,可以把整个任务按功能划分成各模块,用函数编写各功能模块程序,最后由主函数实现对各功能模块的调用,把各功能模块组织成一个整体。 由于一个选手的得分需要包含多个信息,为了合理存储选手数据,把选手信息定义为一个结构体,并用此结构体定义结构体数组变量来存储选手数据。
10.3 歌唱比赛评分程序 10.3.2 程序代码 1. 程序结构介绍 系统各模块函数的功能如下: (1)主函数main()实现软件功能菜单的显示,供用户选择,然后根据用户的选择来调用相应的函数,实现程序的流向控制。 (2)Input()函数完成评委分数的输入,同时计算出选手的得分。 (3)Find函数完成按姓名查询选手得分情况。 (4)Display函数完成选手分数及名次的浏览。 (5)Sort函数完成按分数由高到低进行排名,计算出选手的名次。
10.3 歌唱比赛评分程序 10.3.2 程序代码 2. 关键程序代码 1)结构体的定义 struct score_type { char xm[11]; float score[8]; float max,min; int mc; }xs[100];
10.3 歌唱比赛评分程序 10.3.2 程序代码 for(i=0;i<n;i++) { if(xs[i].score[7]!=tmp) { mc=mc+1; xs[i].mc=mc; tmp=xs[i].score[7]; } } Display(); } 2. 关键程序代码 2)排序程序 Sort() { int i,j,mc=0; float tmp=0; struct score_type score1; for(i=0;i<n-1;i++) for(j=0;j<n-1-i;j++) if(xs[j].score[8]<xs[j+1].score[8]) { score1=xs[j]; xs[j]=xs[j+1]; xs[j+1]=score1;}
10.4 学生成绩管理系统 10.4.1 任务介绍及功能分析 1. 任务介绍 学生的成绩管理是日常管理工作之一,如统计学生的总分、平均分数,统计每门课程的平均分、最高分、最低分以及成绩分布等数据,以及归档以备以后查询或处理等需要。根据需要还可以打印各种成绩单、查询不及格情况、查询某人或某门课的成绩等。 如此繁重的工作需要工作人员的大量精力和时间,计算机具有存储、计算和处理速度快的特点。因此,可以利用计算机程序来完成这些工作,实现学生成绩的数字信息化管理,提高工作效率。
10.4 学生成绩管理系统 10.4.1 任务介绍及功能分析 2. 功能分析 通过上面的介绍,初步了解了学生成绩管理应完成的任务。实际工作中,学生成绩管理系统较为复杂,限于篇幅和降低程序设计难度,对系统功能适当的简化处理,只保留了最基本的功能需要,因此确定在此程序应实现的功能如下: 1)学生成绩信息录入功能。 2)学生成绩信息修改,对发现的数据输入错误后进行数据修改。 3)学生成绩信息删除,对数据中无用的记录进行删除,保持数据文件的清洁。
10.4 学生成绩管理系统 10.4.1 任务介绍及功能分析 2. 功能分析 程序应实现的功能: 4)学生成绩信息浏览。 5)学生成绩信息查询。 6)学生成绩信息统计,统计出每门课程成绩分数的分布数据,使教师了解成绩分布情况,以便进一步分析学生对知识的掌握情况。 7)学生成绩单打印,提供不同方式打印学生成绩单。
10.4 学生成绩管理系统 10.4.2 程序代码 1. 程序结构介绍 由于一个学生有多门课程,为了比较准确描述学生的成绩信息,用结构体类型来存储学生的成绩信息,为了不使问题过于复杂,课程门数固定为8门。 由于学生成绩数据在程序需要多次使用,因此学生成绩信息以文件形式保存在计算机磁盘上,数据文件名为student.dat,并与程序可执行文件放在同一个文件夹下。 程序的主函数提供功能菜单的显示,供用户选择,根据用户的选择来调用相应的功能函数,实现控制程序的流向。
学生成绩管理系统 主函数功能菜单 成绩输入 成绩修改 成绩删除 成绩查找 成绩浏览 成绩统计 成绩打印 10.4 学生成绩管理系统 1. 程序结构介绍 程序总体框架结构图
10.4 学生成绩管理系统 各功能模块 (1)Add()函数完成学生成绩数据的输入,并把数据存储到数据文件中,可以随时追加学生纪录。 (2)Display()函数完成对已有学生成绩数据的显示,函数从数据文件中读取数据,然后显示出来。 (3)LookFor()函数完成按照学生姓名进行查找操作。函数要求先输入要查找的学生姓名,然后再调用函数Search函数用顺序查找法来实现,并返回查找的信息,如找到则返回该学生数据在数据文件中的位置,否则返回-1。
10.4 学生成绩管理系统 各功能模块 (4)Revise()函数实现对学生数据的修改。函数要求先输入要修改学生的姓名,然后再调用函数Search函数来查找此学生的数据,如找到先把原数据显示出来,然后提供新数据的输入,最后把输入的新数据写回原数据文件。 (5)Delete()函数实现对学生数据的删除操作。函数要求先输入要修改学生的姓名,然后再调用函数Search函数来查找此学生的数据,如找到在数据文件中删除此纪录。 (6)Print()函数实现成绩单的打印。按照预定的格式打印出学生个人成绩单,可以选择打印指定学生成绩单、按班级打印成绩单、打印全部学生成绩单。
10.4 学生成绩管理系统 2. 关键程序代码 1)学生成绩结构体: struct student_type { char num[11]; char name[11]; char class[11]; float score[7]; float total; }student1; 2)成绩单打印 由于没有打印机,只是用输出语句按格式要求显示在屏幕上,如要通过打印机打印,只需把Print_score函数中的printf语句为fprintf语句即可。如下: fprintf(stdprn ,"%5.1f\n",student.total);
10.5 课程设计参考题目 1. 通讯录管理系统 编写一个“通讯录管理系统”程序,通讯录信息包括:姓名、工作单位、电话号码、QQ号等信息。通讯录信息用磁盘文件保存,要求程序包括如下功能: 1)可以输入追加联系人纪录 2)可以浏览通讯录信息 3)可以查找某人信息 4)可以删除某人的信息 5)可以修改某人信息 6)显示主功能菜单,供用户自由选择所需操作
10.5 课程设计参考题目 2. 家庭财务管理系统 1)系统主要功能 主要任务是完成家庭日常生活收支信息的管理,记录家庭成员每笔输入情况和消费支出情况,同时提供必要的查询统计功能。基本功能要求如下: (1)日常收入和支出信息的录入,以及修改、删除等操作; (2)按日、月或某一时间段查询收入和支出的详细信息信息; (3)按月或某一时间段统计收支情况,统计出收入总数、支出总数和两数之差。
10.5 课程设计参考题目 2. 家庭财务管理系统 日期结构体: struct date { int month; int day; int year; }; 2)关键代码 收支数据结构体: struct home { int lx; /* 收支类型,0-收入,1-支出 */ char name[11]; /* 收支人的姓名 */ float je; /* 收支金额 */ date rq; /* 收支日期 */ char bzh[51]; /* 备注*/ }
10.5 课程设计参考题目 2. 家庭财务管理系统 2)关键代码 日期比较函数。如果两日期相等返回0,前面日期大于后面日期返回整数,小于返回负数。 int Datecmp(struct date date1,struct dat date2) { int i; i=date2.year-date1.year; if(i==0){ i=date2.month-date1.month; if(i==0) i=date2.day-date1.day; return i; }
10.5 课程设计参考题目 3. 存款管理系统 主要任务是实现家庭存折、信用卡等存款信息的管理,记录存折、信息卡基本信息,以及每次存入和支取信息,同时提供必要的查询统计功能。基本功能要求如下: 1)存折、信息卡等基本信息的维护,包括输入、修改、删除等操作,信息主要包括:卡号、开户银行、姓名、开户日期、类型、存期、帐户金额、备注等。 2)存入和支取信息的维护,主要针对活期和信用卡的存入和支取信息管理,记录存入或支取的金额、卡号、日期、备注等数据。
10.5 课程设计参考题目 3. 存款管理系统 基本功能要求: 3)定期存款到期和信用卡透支情况查询(或提醒,在软件启动时给出提示信息) 4)存折、信息卡基本信息查询 5)按日、月或某一时间段查询存入和支取的详细信息信息
Thank You ! Lizq98@xzcat.edu.cn