资源描述
光电工程学院软件设计指导书光电工程学院2014年2月软件设计教学大纲一、所涉及的课程及知识点高级语言程序设计:常量、变量、表达式的基本知识;函数的定义与调用;文件读写;数组、指针、结构体等自定义类型的使用;排序等知识。二、目的与任务目的:通过集中时间上机实验,对学生的程序设计能力进行一次综合训练,使学生充分发挥已有的编程能力,熟悉编译环境。选择若干课题,进行审题、分析、设计和调试,在程序准备、程序实现、完成文档、答辩验收过程中,将全面巩固已学过的编程知识,全面提高编程技能,在编程风格、调试器的使用、测试技术等方面得到全面训练。学生在程序设计过程中,学生需要查找各种资料获取有用信息解决实际问题,自学相关知识,提高文档书写能力,加强团队合作意识,提高口头表达能力。任务:软件设计课题共分A 、B两档。A档共5题,题目较简单,第一周完成;B档共2题,题目是综合性的,较复杂,第二周完成。三、考核及报告要求1. 考核根据学生平时的上机出勤情况、为上机所作的准备情况、上机时的表现、程序的完成情况、验收答辩时的表现、报告的完成情况等综合打分。等级为:优秀、良好、中等、及格、不及格。2. 报告要求报告以电子版形式递交,要求书写规范、文字简练、语句通顺、图表清晰,见本大纲最后的一个软件设计报告样例。四、主要仪器设备硬件:微型计算机软件:C、C+、Visual C+等五、参考书参考书【1】朱立华,王立柱C语言程序设计北京:人民邮电出版社,2009【2】朱立华,朱建,俞琼面向对象程序设计及C+北京:人民邮电出版社,2008【3】张引等C程序设计基础课程设计浙江:浙江大学出版社,2007课题:A档一、分数统计(10分)课题内容:设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。课题要求:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行降幂排列并输出;(3)具有输入输出界面。二、打字程序(10分)课题内容:设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。通过此课题,熟练掌握数组、格式输出、字符串处理等。课题要求:(1)随机产生一字符串,每次产生的字符串内容、长度都不同;(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;(3)具有输入输出界面。三、文本编辑器(10分)课题内容:设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。 课题要求:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面。四、加密(10分)课题内容:设计一个加密程序。包括明文与密钥的转换。通过此课题,熟练掌握数组、格式输出、字符串处理、类型转换等。课题要求:(1)输入任意一段明文M,以及密钥K;(2)根据以下公式将其转换为密文C。 Ci = mi + K ,其中i = 0,1,n-1 , K 为密钥;(3)具有输入输出界面。五、进制转换器(10分)课题内容:设计一个进制转换器程序。包括二进制、八进制、十进制、十六进制数互相转换。通过此课题,熟练掌握字符串、格式输出、进制换算的各种操作。课题要求:(1)可输入二进制、八进制、十进制、十六进制数;(2)将已输入的数转换成其余进制的数;(3)具有输入输出界面。课题:B档六、学生成绩核算系统的设计与实现(25分)课题内容:设计一个学生成绩核算系统。能实现从文件中读取学生成绩资料,并提供成绩查询统计服务。通过此课题,熟练掌握文件、数组、结构体的各种操作以及友好界面的设计。课题要求:(1)按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。(3)计算每位学生的总评成绩。(4)计算该班级本课程的总平均成绩。(5)计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。程序设计参考思路:1、建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为: 学号(9位) 平时成绩 期中考试成绩 期末考试成绩例如: 15B11040801 88 75.5 66 B11040802 91 79.5 76B11040803 85 75 77 B11040804 79 82 80.5B11040805 94 83.5 81.5 B11040806 80 69 68B11040807 82 77 71 B11040808 77 57 58B11040809 91 88 86 B11040810 96 89 90B11040811 70 45.5 50 B11040812 74 65 66B11040813 81 71 76 B11040814 83 75 77B11040815 85 78 79 2、从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,数据的读入方式可用C语言中的文件读入方式进行,也可用C+中的流实现。 3、 每次计算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件out.dat文件中,格式为: 学生学号(9位) 总评成绩 成绩等级 例如: B11040801 88 B 为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat中,分别用字母A、B、C、D、E表示。4、数据结构(可用C+实现)两个类:学生(student)和学生成绩(marks)(1)学生类数据成员:学号、姓名、专业等数据类型属性(私有、保护、公有)方法:构造函数和析构函数设置学号void SetId( long );读取学号long GetId( ); 等等(2)学生成绩类 从学生类派生数据成员:平时成绩、期中考试成绩、期末考试成绩、总评成绩、成绩等级数据类型属性(私有、保护、公有)方法:读入成绩void In( ifstream& ); 或 void In( FILE* );输出成绩void Out( ofstream& ); 或 void Out( FILE* );显示成绩void print( );求总评成绩void ComputeZP( );求等级void ComputeDJ( );读取总评成绩float GetZP( );读取等级char GetDJ( ); 等等5、设计总控模块计算总评成绩按等级查询基本思想:自顶向下、逐步细化主要功能:(1)总控模块功能:编制菜单,不断从菜单选择计算或查询功能执行,直到退出。程序流程图:(2)计算(3)查询6、实现 编程时要求每一个类建两个文件,即类的定义和实现文件。注意包含相关的文件。七、模拟电信计费系统的设计与实现(25分)课题内容:设计一个模拟电信计费系统。能实现从文件中读取通话以及费率资料,并提供计费、话费查询和话单查询等服务。通过此课题,熟练掌握文件读写、数组、结构体、格式输入输出的各种操作,以及友好界面的设计和一些算法思想的应用。课题要求:(1) 计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中:通话费的计算方法如下:通话费长途电话费本地电话费长途电话费费率(元/分钟)通话时长(分钟) (通话时长不满1分钟的按1分钟计算)本地电话费为:3分钟以内0.3元,以后每1分钟递增0.2元。(2) 话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:用户名 电话号码 本地话费 长途话费 话费总计(3) 话单查询。输入一个电话号码,查询并在屏幕显示该用户的所有通话记录,格式为:用户名 主叫电话号码 被叫电话号码 通话时长程序设计参考思路:1、本系统的输入输出文件本系统的输入文件有三个:(1) 源数据文件(hd.dat)存放:主叫区号 主叫电话号码 被叫区号 被叫电话号码 通话时长(秒)每次通话作为一条记录,占源数据文件的一行。每条记录中各数据之间以空格间隔,例如:025 83491234 010 62320983 90每个电话号码可以有多次通话记录。如果主、被叫区号相同,则通话记录为本地通话记录;否则为长途通话记录。(2) 长话费率文件(fl.dat)存放:区号 费率例如:010 1.20 表示从本地打往区号为010的地区每分钟收费1.20元。(3) 用户文件(yh.dat)存放: 电话号码 用户姓名例如: 83491234 张明 本系统的输出文件有一个:费用文件(fy.dat)存放:主叫电话号码 通话类型 话费金额其中,通话类型表示本次通话是长途还是本地。2、系统输入数据hd.dat有20条通话记录,分别是:fl.dat 有4条记录 025 83491234 025 85319971 70 010 1.20 025 84927038 010 62110045 236020 1.20 025 87216340 025 84521009 310 021 0.80025 83491234 0571 82199516 1000571 1.00025 58120321 021 81094532 50 025 83491234 025 85319971 80 025 84927038 025 83491234 115 yh.dat 有5条记录025 58120321 025 87216340 47 83491234 张明025 87216340 010 62110045 93 84927038 李小红025 83491234 010 62110045 792 87216340 王励025 84927038 0571 82199516 931 83492200 赵强025 83491234 025 85319971 580 58120321 杨冬025 84927038 025 83491234 358 025 58120321 021 81094532 197025 87216340 025 84521009 256 025 87216340 010 62110045 193025 83492200 025 84521009 320 025 83491234 025 85319971 270025 84927038 025 83491234 231 025 83492200 025 84927038 723、数据结构(可用C+实现)三个类:话单(callist)、费用(charge)和用户(user)两个常量:存放本地费率和递增量(1)话单类数据成员:主叫区号、主叫电话号码、被叫区号、被叫电话号码、通话时长数据类型属性(私有、保护、公有)方法:构造函数和析构函数从源数据文件读入通话数据显示一次通话数据取主叫区号取主叫电话号码等等(2)费用类 从话单类派生数据成员: 通话类型、通话费用数据类型属性(私有、保护、公有)方法: 构造函数和析构函数从费用文件读入费用数据向费用文件输出数据屏幕显示费用求通话费用求通话类型取(返回)通话类型取通话费用等等(3)用户类数据成员:姓名、电话号码数据类型属性(私有、保护、公有)方法: 设置用户的电话号码查询用户名设置用户名查询用户的电话号码显示用户名和电话号码 等等4、设计总控模块计算通话费用话费查询话单查询基本思想:自顶向下、逐步细化主要功能:(1)总控模块功能:程序流程图:(2)计算通话费用定义一个话单对象,循环处理。程序流程图:(3)费用查询定义一个用户对象,根据电话号码查询用户信息从“计算通话费用”模块生成的费用文件中,按通话类型分别统计某一电话号码的所有费用项。可定义一个费用对象,循环累加。在屏幕显示查询结果。(4)话单查询定义一个用户对象,根据电话号码查询用户信息从源数据(话单)文件中,查询某一电话号码的所有通话清单。在屏幕显示查询结果。可定义一个话单对象,查询并显示。5、实现(1)进行话费查询前,必须先进行费用计算。可以先判断费用文件是否存在,若不存在,则调用计算通话费用模块后再查询;否则直接查询。或者用一个全局变量实现全局变量初值为0,调用计算通话费用模块后该全局变量置为1。当要查询通话费时,首先检查该全局变量的值。(2)为了统计话费方便,在费用文件中设一“通话类型”,可以用两个不同的字符表示本地和长途,如0表示本地,1表示长途。(3)编程时要求每一个类建两个文件,即类的定义和实现文件。(4)编程时注意包含相关的文件。
展开阅读全文