软件设计实习报告

精品范文 时间:2022-10-14 08:04:11 收藏本文下载本文

第1篇:软件设计实习报告

软件设计实习报告

实习之后我们需要写相关的实习报告,大家一起看看下面的软件设计实习报告,欢迎各位阅读哦!

软件设计实习报告

一、实习目的:

检验与巩固理论知识,提高实际操作能力与社会实践能力。

二、实习时间:

20xx-07-27 至 20xx-10-23

三、实习地点:

广东广州

四、实习单位与部门:

广州**网络科技有限公司·软件开发部

五、实习内容:

应学校要求,本人于七月二十七号来到广州**网络科技有限公司实习。初到该公司,听公司负责人讲解了公司状况以及工作要求,就马上开始我的工作。从该负责人得知,公司的软件开发业务并没有多长时间,所以公司的很多工作流程还不太规范。在3个月的实习时间里,我参与了一个类似于erp的项目。项目的大致内容是:为一家中型制造业企业量身订做一套综合管理系统,包括了仓库管理,销售管理,采购管理,生产管理,财务管理以及人事管理,共六个子系统,且这六个子系统是有机的组合,以方便该企业的管理生产资源,人力资源以及财务。在整个参与过程中,在不同时间里担任的工作任务也不同。

1、八月份

据了解,该项目早在3月份就开始了,而且该项目一直是处于不受控状态,控制不了的原因有诸多,例如客户的需求发生了巨大变动,该项目进行期间有很多其他的项目插入到开发过程中等等。于是,我参与了测试程序的工作,以熟悉整个项目的具体内容,功能实现,设计方法等。在做测试工作的过程中,发现实习单位目前对测试不太重视,在以前的项目中也很少有全面的软件测试阶段。主要表现在:一方面,在我实习期间,就陆续有以前做的系统拿回来,重新做测试工作并修改。据了解,目前国内的绝大多数软件企业也是重编码轻测试,导致软件的强壮性低下,而在售后的维护阶段中经常性需要大幅度修改。这样一来,经常有不同的新老系统并行,给新系统的项目进度带来了外部干扰;另方面,公司要求的测试方法也较为简单,且测试文档的书写格式极其简单,这种书写格式在一些功能上的错误和明显的数据错误上有很好的表意效果,但是在表达程序的逻辑错误和内部数据错误时有很大的欠缺。在整个测试工作中也大概了解了该系统的各方面特性。该系统采用b/s结构开发,随着internet的高速发展、电信部门对网络线路的投入、带宽的增加等各个对b/s结构有利的条件下,采用b/s结构可以节省很多的成本。在以前采用c/s结构开发的系统中,需要为系统开发客户端,而且在维护过程中,除了对服务器端的维护,还要对各个客户端进行维护,而目前盛行的b/s结构,则只需要开发和维护服务器端,相比之下,开发和维护的成本也就大大降低。另外,b/s结构在internet里的应用性比较高。但是,b/s结构也不是完美的选择,它存在诸如b/s结构的用户界面上比较难控制,浏览器的安全性能没有很好的保障等问题。整个系统采用asp .net+ms sql server 2000做开发,编程语言采用c#和vb。

测试工作和书写文档是比较枯燥的工作,测试更是要细心,有耐性的去做,在这个月里认真的完成了我的工作,还帮忙修改了用户界面。我的工作得到了负责人的肯定。

2、九月份

八月末就得知要将整个系统重构,因为原有未完成的系统跟变动后的用户需求有太大的出入,而且系统存在比较多的错误,难以修复。负责人要求我参与到系统的重构工作中去,参与设计,代码编写。这对我来说是一个考验也是一个机会,于是我选择了“仓库管理”子系统,用vb作为编码语言。在九月份的开发过程中,有两个方面的感触:

第一是技术方面。由于采用了vb编写代码,而自身只学了c/c++、还有java。对vb只是一点点了解,另外,对asp dotnet更是一点不通。所以,这个时候需要发挥下自学能力,和领悟能力。在开发过程中印象最深的是web form里datagrid的操作,以及对整个web form的运行过程。首先,由于仓库管理绝大部分工作是填写单据,单据是由单头和单体组成,单头记录基本信息,单体记录明细信息。设计决定在填写单体时,采用datagrid行内编辑,所以datagrid的行内编辑将是技术的难点。dotnet的datagrid控件有编辑命令与删除命令,而新增则可以通过一个button点击来生成一个新行等待编辑。三个操作的代码清单如下:

‘编辑命令代码清单

private sub datagrid1_editcommand(byval source as object, byval e as system.web.ui.webcontrols.datagridcommandeventargs) handles datagrid1.editcommand

if viewstate(“add”) <> 1 then

datagrid1.edititemindex = e.item.itemindex ‘将该行的编辑状态行

datagrid1.databind()

end if

end sub

‘删除命令代码清单

private sub datagrid1_command(byval source as object, byval e as system.web.ui.webcontrols.datagridcommandeventargs) handles datagrid1.command

if viewstate(“add”) <> 1 then

dim delindex as integer

delindex = cint(e.item.cells(1).text)

dim dr as datarow

dr = dataset1.tables(“tblbrand”).rows.find(delindex)‘找到该行在数据集中的编号

dr.()‘将该行在数据集中删除

sqldataadapter1.update(dataset1.tables(“tblbrand”))‘更新数据库表

datagrid1.edititemindex = -1

datagrid1.databind()

end if

end sub

‘新增按扭事件代码清单

private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click

dim dr as datarow

dr = dataset1.tables(“tblbrand”).newrow()‘新增一行,并将该行插入到数据集

dataset1.tables(“tblbrand”).rows.at(dr, ataset1.tables(“tblbrand”).rows.count)

viewstate(“add”) = 1

end sub

其实datagrid中有很多很好用的特性,具体请参考msdn。其次,为实现一次性提交整张单据到数据库保存,采用了sqlaadapter与dataset结合,应用sqlaadatper的uapdate方法特性:对dataset 的数据行做检索,并发操作,update,三个命令,对删除行做数据库删除,更改的数据行做更新,新增的行做插入。最后,在web form的初始到消除整个生命周期也有了较全面的了解。但是感觉dotnet中的web form的生命周期中,所发生的事件有些凌乱,例如datagrid每一行的创建和数据绑定都是比较复杂的,在开发中涉及的技术较多,在此不一一阐述。

第二是工作方面。在这个月中,同样发现了公司的开发工作有较多的问题。首先,人员工作地点变动大,不便于沟通。在开发工作中,由于人员没有固定工作地点,只是把任务分配了,接着就各自去完成,这样一来,在各个模块的协调中经常出现了问题,但又不能很及时的和相关模块的负责人商讨解决方法,工作效率也就随之下降。其次,对整个项目的规划,整个系统的'设计,编码,测试等工作分工不明确且不统一。在项目开始时,只是草草的分了下模块,接着这个模块的设计、编码、测试就由这个模块的负责人来做,没有先对整个项目进行明确的整体的规划。而且在设计过程中缺少讨论,导致设计出来的模块独立性过高,没有考虑到公共的接口等问题。最后,对解决问题的速度慢。当在开发的过程中出现了问题,对问题的解决途径多固然是好,但是,解决方案出现分歧的时候难以敲定具体实施哪个方案,导致进展缓慢,进度延期。

3、十月份

十月份是整个重构活动的收尾阶段,该阶段需要完成的工作是数据报表的设计与实现。数据报表设计方面,沿用原有的纸质报表的结构,所以整个设计过程相对轻松。但是在实现阶段,由于在决定采用何种实现方式的决策问题上出现了飘忽不定的状况,使得进度上又有了少许的延期,最后采用了crystalreports来实现。抛弃了打印分页控制难的html方法,以及技术不成熟,安全性差的ms sql server reportingservice报表工具。在这个阶段,我负责了仓库管理、销售管理、采购管理以及生产管理等四个子系统的报表实现,在此期间学会了crystalreports的使用和编程,收益颇多。这次重构活动涉及了数据结构的重构以及代码的重构,提高了系统的清晰性、扩展性以及重用性。整体性能有了明显的提升。

六、实习总结:

在这为期3个月的实习过程中,通过担任各种工作任务,充分的检验了自身所学的知识,了解了自身知识结构的不足;通过与接触其他同事以及自我体验,较深入地了解了软件开发从业人员生活状况,以及目前大部分中小型软件开发企业的经营模式和操作流程。总结如下三点:

1、知识“阅兵式”

大学3年来所学的知识,在这次实习中得到了真正的检阅,同样,也暴露了知识结构的不合理性。技术上,学校里所学的基础知识表面上看似用不上,但却是这些基础知识让我有很牢固的基础,学起其他的技术知识自然而然的变得容易,能应对开发过程中所遇到的技术层面的问题。但是在业务上,由于缺乏所涉及的业务的相关课程的开展与自身涉猎知识面不广,而造成了在业务流程转换为系统设计或程序实现的中间环节频频出现困惑。软件工程专业培养的目标是管理或系统规划与设计,这一类的高层次人才,而不是纯粹的编码人员,所以对相关的业务应当明确、清晰。建议学校开展一些行业纵向讨论课题来弥补这个不足。

2、从业人员的生存状况

大部分从业人员长期生活在一种“精神高压”的环境中。由于项目控制的难度大,有了进度表跟没进度表的项目都一样,员工基本都是天天在赶工。不管是在大型企业的软件开发从业人员,还是在中小型企业软件开发从业人员的工作时间一般都不固定。只要手头上有没做完的事情就要赶,也有的企业让这种不固定变成让员工灵活安排时间的方法:只要手头上没东西做,人可以不用摆在办公室。但是,这种灵活性不是单方面的灵活,而是员工与管理者双方面的灵活。只要有事做,管理人员随时都可以叫上程序员一起“奋斗”。项目验收交付后,员工才算有休息一下的机会。这样一来,人员的积极性、生产效率也随着项目时间的持续而下降。但是,作为一个黄金职业,大部分从业人员都愿意吃这个苦。

3、中小型软件企业的经营模式与操作流程

目前,国内大型软件开发企业数量较少,就规模而言,有关数据表明:90%以上的企业人数不超过100人,人员超过1000人的只有10家,同样的,企业的盈利水平也普遍低下。在这些中小型的软件企业中,他们的经营模式与操作的流程也都是大同小异:从经营的模式来讲,一般是接或拉定单,按客户要求制定灵活性强,适应性强的软件。做自主研发,零售产品的软件企业极为少数。从规模到盈利,就好比一家家的裁缝店,而非制衣厂;从操作的流程来讲,从项目的规划到启动,再到测试验收交付,其中规划与测试一般都不充分,从而导致项目风险提高,进度延时以及交付后的产品强壮性差也是中小软件企业存在的一大问题。

最后,在此感谢公司里共事的每一位同事,感谢他们在实习期间给我的帮助。

第2篇:软件设计报告

软件设计报告

姓名: 方轶琦

学号:10005808

2013年6月18日~2013年6月28日

目录

第一章 软件设计介绍.........................................................1 第三章 软件设计的内容.......................................................4 3.1 分数统计软件(A1)...................................................4 3.1.1设计题目及要求.....................................................4 3.1.2设计思想及程序流程框图.............................................4 3.1.3逻辑功能程序.......................................................5 3.1.4结果及完善方向.....................................................5 3.2 打字软件(A2).......................................................9 3.2.1设计题目及要求.....................................................9 3.2.2设计思想及程序流程框图.............................................9 3.2.3逻辑功能程序......................................................10 3.2.4结果及完善方向....................................................10 3.3 文本编辑器(A3)....................................................13 3.3.1设计题目及要求....................................................13 3.3.2设计思想及程序流程框图............................................14 3.3.3逻辑功能程序......................................................14 3.3.4结果及完善方向....................................................17 3.4 加密软件(A4)......................................................19 3.4.1设计题目及要求....................................................19 3.4.2设计思想及程序流程框图............................................19 3.4.3逻辑功能程序......................................................19 3.4.4结果及完善方向....................................................19 3.5 进制转换器(A5)....................................................23 3.5.1设计题目及要求....................................................23 3.5.2设计思想及程序流程框图............................................23 3.5.3逻辑功能程序......................................................24 3.5.4结果及完善方向....................................................29 3.6 学生成绩核算系统的设计与实现(B1)..................错误!未定义书签。3.6.1设计题目及要求....................................................30 3.6.2设计思想及程序流程框图............................................30 3.6.3逻辑功能程序......................................................32 3.6.4结果及完善方向....................................................32 3.7 模拟电信计费系统的设计与实现(B2)..................................39 3.7.1设计题目及要求....................................................39 3.7.2设计思想及程序流程框图............................................40 3.7.3逻辑功能程序......................................错误!未定义书签。3.7.4结果及完善方向....................................................41 第四章 心得体会............................................................49

软件设计报告 10005808 方轶琦

软件设计介绍

一. 软件的设计概念

软件设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。建议用数学语言来抽象事务和问题,因为数学是最好的抽象语言,并且它的本质就是抽象。将复杂的问题分解成可以管理的片断会更容易。将问题或事物分解并模块化这使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间耦合度的情况。

二.软件设计的性质、目的:

本课程是一门技能训练课,为在校学生的必修课程。通过设计培养学生良好的编程习惯,使学生掌握编程的基本步骤,规范学生的编写程序的格式,锻炼学生编写程序的能力,为将来编写较大程序的打好基础。

三.软件设计总时间:二周四.实验设备:南京邮电大学微机室微机。五.软件设计的任务

通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。

六.实验内容

软件设计课题共分A、B两档。A档共5题,第一周完成;B档共2题,第二周完成。

软件设计报告 10005808 方轶琦

第二章

软件开发平台简介

Visual Studio 2008 简介

Microsoft® Visual Studio® 2008 使开发人员能够快速创建高质量、用户体验丰富而又紧密联系的应用程序,充分展示了 Microsoft 开发智能客户端应用程序的构想。借助 Visual Studio 2008,采集和分析信息将变得更为简单便捷,业务决策也会因此变得更为有效。任何规模的组织都可以使用 Visual Studio 2008 快速创建能够利用 Windows Vista™ 和 2007 Visual Studio system 的更安全、更易于管理并且更可靠的应用程序。

Visual Studio 2008 提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序。

Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用.NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web 应用程序。开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP.NET 应用程序服务和 Microsoft平台。

Visual Studio 2008 具备如下优势:

快速开发新突破

从建模到编码,再到调试,Visual Studio 2008 提供了增强的编程语言、设计器、编辑器以及和数据相关的新功能,可以帮助您体验到生产力的突破。

创建杰出的用户体验

Visual Studio 2008为开发人员提供了新的工具,通过使用最新的平台,如Web, Windows Vista、2007 Microsoft Office System、Microsoft SQL Server 2008、Windows Mobile®以及Windows Server®2008,开发人员可以快速创建个性化很强的用户体验以及互联的应用程序。

跨越开发周期的协作

Visual Studio 2008 可以让开发人员、设计人员、测试人员、架构师以及项目经理通过共享工具以及过程整合的方式,实现协同工作,从而减少了解决方案所花费的时间。

采用统一整合的方式处理数据

Visual Studio 2008 可以显著的改进开发人员处理数据的方法。传统方式中,开发人员不得不根据数据的存储位置以及用户的连接方法,对数据进行不同的操作。通过语言集成查询(Language-Integrated Query, LINQ), 开发人员可以使用单独的模型来查询并转换XML, Microsoft SQL Server™和对象数据,而不需要学习或使用特定的编程语言,这样就降低了复杂度并提高了生产力。

体验全新的Web开发工具

Visual Studio 2008为公司或开发团队提供了一个健壮的、端到端的平台来构建应用程序并通过Web 方式提供应用程序。通过Visual Studio 2008, 开发人员可以很容易的将最新的Windows Presentation Foundation(WPF)功能整合到现

有的Windows Forms 应用程序以及新的应用程序中,并在Windows平台上创建高保真的用户体验。通过额外的ASP.NET AJAX 1.0和Microsoft

软件设计报告 10005808 方轶琦

IntelliSense®以及对调试JavaScript 8.0的支持,构建AJAX 应用程序将会更加快捷。增强的Web 设计器带有分离视图编辑功能,可以让开发人员同时看到HTML 页面以及结果页面,从而提升了Web 开发的体验。

将数据库功能整合到应用程序生命周期的管理中

Visual Studio 2008为不同的团队成员提供了一系列针对架构、设计、程序开发、数据库开发以及应用程序测试的相关工具。Microsoft Visual Studio Team System 2008 Database Edition 目前已经全部整合到了Microsoft Visual Studio Team System 2008 Team Suite 中。

构建运行在多个版本的.NET Framework 之上的应用程序

通过Visual Studio 2008, 开发人员可以使用一个工具来管理并构建针对多个版本的.NET Framework 的应用程序。Visual Studio 2008将会自动让项目以及设置适应开发人员所指定的.NET framework 版本。开发人员不再需要安装多个版本的Visual Studio 来维护运行于多个版本的.NET Framework 之上的应用程序。

为Microsoft Office 系列构建可靠的、可伸缩的应用程序

Visual Studio Tools for Office 目前已经完全整合到了Visual Studio 2008 专业版当中。Visual Studio 2008可以让开发人员自己定制Microsoft Office Word, Microsoft Office Excel ,Microsoft Office PowerPoint , Microsoft Office Outlook ,Microsoft Office Visio , Microsoft Office InfoPath , 以及Microsoft Office Project, 从而提升用户生产力并且更有效的利用了Office 2007 中的新增功能。对Microsoft Office 进行自定义,同时应用程序支持ClickOnce 部署,从而使开发人员可以采用正确的工具以及框架来实现对Microsoft Office 解决方案进行从容部署。

为Windows Vista 构建完美的应用程序

Visual Studio 2008可以让开发人员快捷的创建出同Windows Vista 外观风格一样炫的应用程序,并且可以利用Windows Vista 中所提供的8000多种新API.在开发人员和设计人员之间实现无缝协作

Microsoft已经针对设计人员发布了名为Microsoft Expreion的工具。在Visual Studio 2008中,来自于Microsoft Expreion Web 以及Microsoft Expreion Blend™中的设计元素可以在不更改后台代码的情况下,从Visual

Studio 中进行导入导出的操作。这就意味着开发人员和设计人员可以实时的进行无缝协作,并且不用担心用户界面设计更改所引起的开发问题。

软件设计报告 10005808 方轶琦

第三章 软件设计的内容

3.1 分数统计软件(A1)

3.1.1设计题目及要求 设计题目:分数统计 要求:(1)、输入某班级学生的姓名、分数;

(2)、对(1)的分数进行降幂排列并输出;(3)、具有输入输出界面。3.1.2设计思想及程序流程框图

这道题我是用C# 的可视化环境制作了一个分数统计系统。制作的界面如图3.1-1所示:

实现的功能和设计方法:

1.在“姓名”和“分数”后面的文本框内输入学生信息,输入完毕后,按“输入”按钮,学生信息就会显示到左下方的listbox中。

2.当用户输入若干名学生信息后,按“排序”按钮,右下方的listbox中就会显示按成绩降幂排序后的学生信息。排序方法是使用冒泡排序法。

3.当用户输入学生信息出错时,用鼠标选择出错项,按下“删除选中的输入项”,即可删除输错项,继续输入学生信息。方法是用listBox.SelectedIndex找到选中的索引值,然后删除数组中该学生信息和listbox中信息就可以了。

4.当用户想重新输入学生信息,按下“重新开始”清空数组和listbox中的信息。

5.当用户要结束操作,按下“结束”,调用close()函数就可以跳出界面。主程序的流程图如图3.1-2所示。冒泡排序的流程图如图3.1-3所示。

软件设计报告 10005808 方轶琦

开始N=学生数i=0ii?N开始输入学生信息score[j-1]

图3.1-1 主流程图

图3.1-2冒泡排序流程图 3.1.3逻辑功能程序 具体程序如下:

#include #include #include struct student //存放学生信息的结构体 { char name[20];//字符型数组存放姓名

int grade;//成绩类型 } temp,std[100];int main(){ int err;char x[5];int n;int i;int m;char ch[20];

软件设计报告 10005808 方轶琦

do { system(“cls”);printf(“ nn”);printf(“

--------n”);printf(“ | 欢迎使用本系统 | n”);printf(“

--------n”);printf(“ n”);printf(“

-------------请输入学生数--------------nn”);do{ printf(“tt学生数: ”);

err=0;i=0;

scanf(“%s”,x);//输入选项

getchar();

while(x[i]!='')//依次检查输入的字符串是否为数字

{

if(x[i]>'9'||x[i]

i++;

} if(err)printf(“ntt请输入数字!n”);}while(err);

n=atoi(x);//将字符型数组x转换成整型n for(i=0;i

{ printf(“ntt请输入第%d个人的信息ntt姓名:”,i+1);scanf(“%s”,std[i].name);getchar();printf(“tt分数:”);scanf(“%d”,&std[i].grade);getchar();

}

printf(“输入信息:n”);printf(“----n”);printf(“ 姓名 成绩 nn”);for(i=0;i

printf(“ %s %dn”,std[i].name,std[i].gra

软件设计报告 10005808 方轶琦

de);} printf(“nn----n”);

printf(“n排序后信息:n”);for(m=0;m

if(std[i].grade

{

temp=std[i];

std[i]=std[i+1];

std[i+1]=temp;//成绩按降幂排序

} } printf(“n您所输入的学生名次如下:nn”);printf(“

------------n”);printf(“ 名次 姓名 成绩 nn”);for(i=0;i

第 %d 名 %s %dn“,i+1,std[i].name,std[i].grade);} printf(”nn------------n“);printf(”t您还继续吗?请按Y键继续:“);//选择是否继续

scanf(”%s“,ch);} while(ch[0]=='Y'||ch[0]=='y');//与开头组成do-while结构循环

printf(”t“);return 0;}

软件设计报告 10005808 方轶琦

图3.1—4

图3.1-3 运行结果

系统的完善:

软件设计报告 10005808 方轶琦

1.当用户在分数框输入了非数字字符,则会提示用户输出正确格式的分数。2.当用户未完整输入姓名和分数,系统会提示用户完整输入。完善方向

该系统虽然考虑了并完善了很多用户操作可能出现的错误,但仍然有不足之处。比如,本系统中的删除按钮只能在用户排序前删除用户想删除的信息。若用户排序后删除左边栏目里的学生信息,再来排序,这时排序出的结果就可能会出错。这点是需要改进的。

另外这题和数据库SQL连接起来,程序会更加简单方便。这方面还需加以学习。

3.2 打字软件(A2)

3.2.1设计题目及要求 设计题目:打字程序 要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同;

(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;

(3)具有输入输出界面。3.2.2设计思想及程序流程框图 设计思想:采用C#界面编程。

(1).从题目的要求可知,本系统要求随机产生字符串,字符串的内容和长度都是随机的。要产生随机数,就可以使用rand()函数。设定字符串最长为20。用rand.Next(min, max)函数就可以产生min~max之间的随机数。

(2).为使系统随机产生字母字符,首先用rand.Next(0,25)产生0~25的随机数,将随机数加上97,然后再将数字转换为相应的ASCII码的字母就可以了。

(3).正确率的计算。将系统产生的随机字符和用户输入的字符进行逐个比较统计出相同的字符个数,在与系统产生的字符总数相除便可得到得正确率。

设计的用户界面如图3.2-1所示。主流程图如图3.2-2所示

开始 产生随机字符串用户输入字符串计算正确率N结束?Y结束

图3.2-1主流程图

界面按钮功能设计思想:“开始”:按下后,首先清空界面的三个输入文本框

软件设计报告 10005808 方轶琦

textbox。然后再随机生成字符串显示在第一个文本框textbox1中。

“确定”:用户在第二个文本框textbox2中输入字符串后,按下确定按钮,首先系统会读入用户的字符串,然后与系统字符串比较,计算出正确率最后输出到正确率的文本框里。

“结束”:使用close()函数,按下后退出系统。3.2.3逻辑功能程序 具体程序如下:

#include #include #include #include #define max_len 40

//定义产生的字符串最长为40个字符

void rand_str(char *p,int length);double compare(char *p,char *s,int length);void display();

int main(){

char ch[20];int length;double flag;srand(time(NULL));char p[80]=”“;char s[80]=”“;

display();

do {

char p[80]=”“;

char s[80]=”“;

printf(”nt----n“);

length=1+rand()%max_len;

rand_str(p,length);

printf(”nt----n“);

printf(”t请输入上面的字母:n“);

printf(”t“);

fflush(stdin);//减少不必要错误

scanf(”%s“,s);

flag=compare(p,s,length);

if(flag==1)

printf(”t输入完全正确!n“);

else

软件设计报告 10005808 方轶琦

printf(”t输入有误,您本次输入正确率:%0.2g%%n“,flag*100);

printf(”tn“);

getchar();

printf(”t您还继续吗?请按任意键继续或者按N键结束:“);

scanf(”%s“,ch);

}while(ch[0]!='N'&&ch[0]!='n');

printf(”t“);return 0;}

void rand_str(char *p,int length){ int i;char ch;printf(”t“);

for(i=0;i

{ int num;

do

{

num=65+rand()%(122-65+1);

}while(num>90&&num

ch=num;

printf(”%c“,num);

p[i]=ch;

} }

double compare(char *p,char *s,int length){ int j;int number=0;double rate;for(j=0;j

if((p[j]-s[j])==0)

number=number+1;} rate=1.0*number/length;return rate;

软件设计报告 10005808 方轶琦

}

void display(){ printf(”t****************************************************************n“);printf(”t****************************************************************n“);printf(”t**

欢迎进入打字练习程序

**n“);printf(”t****************************************************************n“);

printf(”t****************************************************************n“);printf(”tn“);}

程3.2.4结果及完善方向

序运

行结果:

软件设计报告 10005808 方轶琦

用户按下开始按钮后,输入字符串,最后按下确定按钮的程序运行情况如图3.2-3所示。

按下开始按钮

输入字符串后按下确定按钮

图3.2-2 程序运行结果

系统的完善

最初编写的程序中存在输出正确率的BUG。就是在用户输入字符串的前半段和系统的字符串一样,而后面又多输入了其他字符,这时算出的正确率是100%,这在常理上是不正确的,发现错误后,更正了正确率的计算方法。

当用户输入的字符串长度小于或等于系统产生的字符串长度时,正确率的计算方法为:

与系统字符串相同的字母数正确率=

系统产生的字符串长度当用户输入的字符长于系统字符串长度时,正确率的计算方法为:

与系统字符串相同的字母数正确率=

用户输入的字符串长度这样就避免了之前的错误情况。完善方向

本打字系统仍然有需要完善的地方,如可增加计时系统,这样就增加了打字程序的趣味性。系统中正确率的计算方法也有待改进。

3.3 文本编辑器(A3)

3.3.1设计题目及要求 设计题目:文本编辑器 要求:(1)、编辑文本;

软件设计报告 10005808 方轶琦

(2)、保存、打开指定位置的文本文件;(3)、具有输入输出界面。3.3.2设计思想及程序流程框图

文本编辑器的界面设计,我是参考了word中提供的部分功能,用C#界面环境设计编写一个小型的文字编辑工具。

在C#界面的工具箱中,RichTextBox控件拥有非常强大的文字格式化功能。很多对文字文本的各种操作只需要调用RichTextBox控件中的函数,就可以搞定,非常的方便。

界面设计时,具有工具栏和功能图标按钮,提高了操作的便利性。文本编辑器的界面如图3.3-1所示。

文本编辑器具有三个大模块,具有以下功能: 1:文件:(新建 打开 保存 退出)

2:编辑:(撤销 恢复 全选 复制 剪切 粘贴 清除)3:帮助:(关于版权信息)模块结构如图3.3-2所示。

开始用户选择操作文件编辑帮助关于新建打开保存退出撤销恢复全选复制剪切粘贴清除 图3.3-1模块结构图

3.3.3逻辑功能程序 具体程序和注释如下:

#include #include //包含exit(1)的原型 #include #include”windows.h“

void create_file(FILE *fp,char *fname);//建立文本函数 void write_file(FILE *fp,char *fname);//编辑函数 void read_file(FILE *fp,char *fname);//读取函数

int main(){ FILE *fp;

软件设计报告 10005808 方轶琦

int count=0;char choose[100];int flag1,flag2,flag3;char F_name[20];

while(1){

printf(”****************************************************************n“);printf(”****************************文本编辑器***************************n“);printf(”****************************************************************n“);printf(”**

1、建立文本 **n“);printf(”**

2、编辑文本 **n“);printf(”**

3、读取文本 **n“);printf(”**

4、退出程序 **n“);

printf(”****************************************************************n“);

printf(”t请选择你要进行的文件操作:“);

scanf(”%s“,choose);

getchar();

switch(choose[0])

{

case '1': flag1=1;break;

case '2': flag2=1;break;

case '3': flag3=1;break;

case '4': printf(”t“);printf(”nnt*** 谢谢使用!****n“);exit(0);break;

default : printf(”t输入错误!n“);Sleep(500);system(”cls“);

}

if(flag1==1)

{

flag1=0;printf(”n***********建立文件***********n“);

create_file(fp,F_name);

软件设计报告 10005808 方轶琦

}

else if(flag2==1)

{

flag2=0;

printf(”n***********编辑文件***********n“);

write_file(fp,F_name);

}

else if(flag3==1)

{

flag3=0;

printf(”n***********读取文件***********n“);

read_file(fp,F_name);

}

}

return 0;}

void write_file(FILE *fp,char *fname){ char ch;printf(”请键入编辑的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”w“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”请输入内容(以#号键结束):n“);ch=getchar();while(ch!='#'){

fputc(ch,fp);

ch=getchar();} printf(”nn“);getchar();fclose(fp);Sleep(500);system(”cls“);} void create_file(FILE *fp,char *fname){

软件设计报告 10005808 方轶琦

printf(”请键入新建的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”w+“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”%s文件已经创建好!nn“,fname);fclose(fp);Sleep(500);system(”cls“);} void read_file(FILE *fp,char *fname){ char ch;printf(”请键入读取的文件名(如D:ame.txt):nt“);gets(fname);if((fp=fopen(fname,”r“))==NULL){

printf(”不能打开文件!n“);

exit(0);} printf(”***********文件内容***********n“);printf(”--------n“);while((ch=fgetc(fp))!=EOF)//输出文件直到文件结束符

{

putchar(ch);} printf(”n--------nn“);fclose(fp);Sleep(1000);printf(”nn“);} 3.3.4结果及完善方向

软件设计报告 10005808 方轶琦

软件设计报告 10005808 方轶琦

系统完善方向

这次设计的文本编辑器基本上能够较好的模拟出word中对文本的部分操作功能。基于RichTextBox控件的功能很多,可以在此基础上添加更多的有用的方便的功能,如改变文本背景颜色,字体格式和颜色,文本左对齐右对齐等。这样文本编辑器的功能就会更加完善。

3.4 加密软件(A4)

3.4.1设计题目及要求 设计题目:加密 要求:(1)输入任意一段明文M,以及密钥K;(2)根据以下公式将其转换为密文C。

Ci = mi

+ K ,其中i = 0,1,„„n-1 , K 为密钥;

(3)具有输入输出界面。3.4.2设计思想及程序流程框图 设计思想:用C#界面编程。

由题目可以知道,要实现加密,就要对用户输入的字符串进行操作。首先要将用户输入的字符串存入数组。将字符类型转换为相应的ASCII码,再与输入的密钥相加,最后再转换为字符型就可以得到密文。

系统共有三个功能按钮,为“生成密文”,“重新输入”和“结束”。“生成密文”是按上述的思想对用户输入的字符串进行加密。“重新输入”是清空三个textbox。“结束是”调用close()函数退出系统。

系统界面和系统流程框图如图3.4-1所示。

开始用户输入明文,密钥加密重新开始结束

图3.4-1

程序流程框图

3.4.3逻辑功能程序

#include #include #include

void dis_menu();//显示函数

软件设计报告 10005808 方轶琦

void set_menu();//输入函数

void encryption(char *m, char *c, char *key);//加密函数 void decryption(char *m, char *c, char *key);//解密函数

int main(){ while(1){

dis_menu();set_menu();} return 0;} void dis_menu(){ printf(”t******************************************************n“);printf(”t***********************加密解密程序*******************n“);printf(”t**

1、加密 **n“);printf(”t**

2、解密 **n“);printf(”t**

3、退出 **n“);printf(”t******************************************************nn“);printf(”t请选择你要进行的操作:“);} void set_menu(){ char m[100]=”“;//明文 char c[100]=”“;//密文 char key[100]=”“;//密钥

char n[100];scanf(”%s“,n);if(strlen(n)>1){ printf(”t输入错误!请重新输入:“);

set_menu();} else {

switch(*n)

{

case '1': encryption(m, c, key);break;

case '2': decryption(m, c, key);break;

case '3': printf(”t“);exit(1);break;

default: printf(”t输入错误!请重新输入:“);set_menu();break;

软件设计报告 10005808 方轶琦

} } }

void encryption(char *m, char *c, char *key){

printf(”t-----------------------n“);printf(”t------------------------加密环节----------------------n“);printf(”t-----------------------n“);printf(”t请输入需加密的明文:“);scanf(”%s“,m);printf(”t请输入密钥:“);scanf(”%s“,key);while(strlen(key)>1)//密钥长度不能大于1 {

printf(”t输入密钥有误,请重输:“);scanf(”%s“,key);} { int i,length;length=strlen(m);printf(”t你输入的明文为:“);printf(”%sn“,m);for(i=0;i

{

c[i]=m[i]+key[0]-'0';} printf(”t转换后的码文为:“);printf(”%snn“,c);} }

void decryption(char *m, char *c, char *key){ printf(”t-----------------------n“);printf(”t------------------------解密环节----------------------n“);printf(”t-----------------------n“);printf(”t请输入需解密的密文:“);scanf(”%s“,c);printf(”t请输入密钥:“);scanf(”%s“,key);while(strlen(key)>1){

软件设计报告 10005808 方轶琦

printf(”t输入密钥有误(应输入一个字符),请重输:“);scanf(”%s“,key);}

{ int i,length;length=strlen(c);printf(”t你输入的密文为:“);printf(”%sn“,c);for(i=0;i

m[i]=c[i]-(key[0]-'0');//密文反译

} printf(”t破解后的明文为:“);printf(”%snn“,m);} } 3.4.4结果及完善方向 运行结果:

用户输入明文和密钥后,按下“生成密文”后的程序运行结果如图3.4-2所示。

软件设计报告 10005808 方轶琦

图3.4-2密钥运行结果

系统完善

1.当用户明文和密钥输入的不完整,系统会提示要求用户输入完整。2.当用户输入的密钥不在要求的0~9之间,系统会提示用户。如图3.4-3所示。

完善方向

当密钥过大时,生成的密文字符有些无法输出,因此可改进加密算法,更好完善这个加密系统。

3.5 进制转换器(A5)

3.5.1设计题目及要求 设计题目:进制转换器 要求:(1)可输入二进制、八进制、十进制、十六进制数;

(2)将已输入的数转换成其余进制的数;(3)具有输入输出界面。3.5.2设计思想及程序流程框图 设计思想:

由题目可以知道,本系统要求实现

二、八、十、十六进制数之间的相互转换功能。

(1)、对于数字的显示问题,可以用字符串的形式进行数字的输入输出。在23

软件设计报告 10005808 方轶琦

系统内部进行转换前,利用ASCII码将字符串再转换为相应的数字进行处理。

(2)、进制的转换。系统中,首先将用户输入的任意进制的数统一转换为十进制。然后再将得到的十进制数转换为其他进制最后输出。

(3).转化成十进制时可以先得到用户输入的字符串的长度,在知道输入是什么进制数的前提下就可以将不同位上的数乘以进制的相应幂次最后求和就可以十进制数;由十进制转换成任意进制时可以使用短除法,不断相除取余数直到商为零为止,得到的字符串在翻转后即使得到的任意进制数对应的字符串。

(4).转换输出时,是将该数据的所有进制转换结果进行输出。进制转换系统是采用C#界面环境编程制作的。系统界面如图3.5-1所示。

图3.5-1 进制转换系统界面

界面中用户可以打开下拉菜单选择要输入的进制,选定后,选择的进制输入文本框会变白,用户可以输入要转换的数,按下“转换”按钮后,其他进制后面的文本框就会显示转换后的数。按下“结束”按钮可以退出系统。

整个程序可分为四个模块,分别是:数据输入模块,数据转换为十进制模块,十进制转换为其他进制模块,数据输出模块。程序流程框图如图3.5-2所示。

开始用户选择要输入的进制数据读入转换为十进制十进制转换其他进制数据输出结束 图3.5-2程序流程框图

3.5.3逻辑功能程序 具体程序和注释如下:

#include ”stdio.h“ #include void bishow(int m);void main(){ char x,w;char c[10];int i=0,err=0,quitflag=0;int num=0;do{ system(”cls“);printf(”t--------n“);printf(”t 欢迎数制转换系统 n“);

软件设计报告 10005808 方轶琦

printf(”t--------n“);printf(”t n“);printf(”t--------n“);printf(”t| 1 二进制 |n“);printf(”t| 2 八进制 |n“);printf(”t| 3 十进制 |n“);printf(”t| 4 十六进制 |n“);printf(”t| 0 退出 |n“);printf(”t--------n“);printf(”nt请选择: “);do{ err=0;scanf(”%c“,&x);//输入选项

getchar();if(x>'4'||x

{ err=1;printf(”n输入错误,请重新输入n“);} }while(err);switch(x){ case '1': //输入二进制

do{

err=0;i=0;num=0;

printf(”nt请输入二进制数:“);scanf(”%s“,c);

getchar();

while(c[i]!='')//‘’字符结尾

{ if(c[i]!='1' && c[i]!='0')err=1;//若输入数字不为1或0则输入错误

i++;

}

if(err)printf(”n输入数值错误,不是二进制数!n“);} while(err);// err为1重复上面,否则继续

i=0;while(c[i]!='')//二进制转换为十进制

{

num=num*2;

if(c[i]=='1')num=num+1;

i++;}

软件设计报告 10005808 方轶琦

printf(”nt二进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);

printf(”t八进制: %on“,num);//输出八进制

printf(”t十进制: %dn“,num);//输出十进制

printf(”t十六进制: %xn“,num);//输出十六进制

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

case '2': //输入八进制

do{

err=0;i=0;num=0;

printf(”nt请输入八进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]>'7' || c[i]

i++;

}

if(err)printf(”n输入数值错误,不是八进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*8;

num=num+c[i]-48;

i++;

}

printf(”nt八进制数 %s 转换为其他进制: nn“,c);

printf(”t********************************************n“);

bishow(num);

printf(”t十进制: %dn“,num);

printf(”t十六进制: %xn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

软件设计报告 10005808 方轶琦

case '3': //输入十进制

do{

err=0;i=0;num=0;

printf(”nt请输入十进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]>'9' || c[i]

i++;

}

if(err)printf(”n输入数值错误,不是十进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*10;

num=num+c[i]-48;

i++;

}

printf(”nt十进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);bishow(num);

printf(”t八进制: %on“,num);

printf(”t十六进制: %xn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;

case '4': //输入十六进制

do{

err=0;i=0;num=0;

printf(”nt请输入十六进制数:“);

scanf(”%s“,c);

getchar();

while(c[i]!='')

{

if(c[i]='0')err=0;//若输入数据为非数字符号,则错误

软件设计报告 10005808 方轶琦

else if(c[i]>='a'&&c[i]

else if(c[i]>='A'&&c[i]

else err=1;

i++;

}

if(err)printf(”n输入数值错误,不是十六进制数!n“);

} while(err);

i=0;

while(c[i]!='')

{

num=num*16;

if('0'

if('a'

if('A'

i++;

}

printf(”nt十六进制数 %s 转换为其他进制:nn“,c);

printf(”t********************************************n“);bishow(num);

printf(”t八进制: %on“,num);

printf(”t十进制: %dn“,num);

printf(”t********************************************n“);

printf(”是否继续?(任意键继续N键退出)“);scanf(”%c“,&w);getchar();if(w=='N'||w=='n')quitflag=1;

break;case '0':

quitflag=1;

break;

}

}while(!quitflag);

}

void bishow(int m)//转换成二进制数 { int b[20];

int i=0;

软件设计报告 10005808 方轶琦

while(m){ b[i]=m%2;m=m/2;i++;} i--;printf(”t二进制: “);if(m==0)printf(”%d“,0);while(i>=0){ printf(”%d“,b[i--]);//输出二进制数 } printf(”n“);} 3.5.4结果及完善方向 程序运行结果:

图3.5-3 进制转换系统界面运行情况

系统的完善

本系统能够较好的完成二、八、十、十六进制数之间的相互转换,并且对可能出现的异常情况进行了处理。例如,当用户选择输入二进制,用户就无法在其

软件设计报告 10005808 方轶琦

他进制的文本框内输入数据。还有,如果用户要键入非该进制内的字符,用户的键入将无效,非法字符将无法输入到文本框内。这样的设计能方便用户操作。

系统还有一些地方有待完善,比如,用户输入的字符串的最大长度需要进行一定的限制等等。

3.6 分数统计

3.6.1设计题目及要求

设计题目:学生成绩核算系统的设计与实现 要求:(1)、按班级按课程从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩。

(2)、三个成绩对总评成绩的百分比被定义为常数,各占总成绩的30%、30%和40%。

(3)、计算每位学生的总评成绩。(4)、计算该班级本课程的总平均成绩。(5)、计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90为优,89-80为良,79-70为中,69-60为及格,60分以下为不及格。

(6)、按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。

3.6.2设计思想及程序流程框图 设计思想:

1.建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为:

学号(9位)平时成绩

期中考试成绩

期末考试成绩 例如: 15 B10040801

75.5

B10040802

79.5

B10040803

B10040804

80.5 B10040805

83.5

81.5

B10040806

B10040807

B10040808

B10040809

B10040810

B10040811

45.5

B10040812

B10040813

B10040814

B10040815

2.数据结构(用C++实现)

本题中共设计了两个类:学生(Student)和学生成绩(marks)(1)基类学生(Student),定义如下:

cla Student //基类学生

软件设计报告 10005808 方轶琦

{ private: //私有成员:

char stu_no[10];//学号(题目中用到的)char stu_name[10];//姓名(可拓展的)char stu_zhy[20];//专业(可拓展的)public: //公有成员:

Student()//构造函数

{

strcpy(stu_no,”NULL“);

strcpy(stu_name,”NULL“);

strcpy(stu_zhy,”NULL“);

}

~Student(){} //析构函数

void setno(char no[])//设置学号

{strcpy(stu_no,no);}

void setname(char name[])//设置姓名

{strcpy(stu_name,name);}

void setzhy(char zhy[])//设置专业

{strcpy(stu_zhy,zhy);}

char *getno()//取学号

{return stu_no;}

char *getname()//取姓名

{return stu_name;}

char *getzhy()//取专业

{return stu_zhy;} };

(2)基类学生(Student)的派生类学生成绩(marks),定义如下: cla marks:public Student //派生类学生成绩 { protected: //保护成员:

float sco1;//平时成绩

float sco2;//期中成绩

float sco3;//期末成绩

float avg;//总评成绩

char dengj;//等级 public: //公有成员:

void setsco1(float s1){sco1=s1;} //设置平时成绩

void setsco2(float s2){sco2=s2;} //设置期中成绩

void setsco3(float s3){sco3=s3;} //设置期末成绩

float getsco1(){return sco1;} //取平时成绩

float getsco2(){return sco2;} //取期中成绩

float getsco3(){return sco3;} //取期末成绩

float getavg(){return avg;} //取总评成绩

char getdengj(){return dengj;} //取等级

软件设计报告 10005808 方轶琦

void Computavg();//计算总评成绩 void GetDJ();//计算等级 }mark[100];3.从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,用C++中的流实现。

4.每次计算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件out.dat文件中,格式为:

学生学号(9位)

总评成绩

成绩等级 例如: B07040801

B

为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat中,分别用字母A、B、C、D、E表示。

5.设计方法:本系统采用自顶向下,逐步细化的方法,将整个系统细化为5个模块:读入文件,计算成绩模块,保存文件模块,计算并输出等级分布模块以及退出模块。根据这个思想,主程序的流程图如3.6-1图所示:

开始显示菜单键盘输入选项读入文件否计算成绩保存文件计算输出等级分布退出系统是否退出系统?是结束图3.7-1主程序流程图

3.6.3逻辑功能程序 具体程序及注释如下:

#include #include #define N 100 struct student { char number[10];

char psgra[5];

软件设计报告 10005808 方轶琦

char qzgra[5];char qmgra[5];

};

int information(){

FILE* fp;

int i;

struct student std[15]=

{{”B10040801“, ”88“, ”75.5“, ”66“ },{”B10040802“ ,”91“, ”79.5“,”76“},{”B10040803“,”85“,”75“,”77“ },{”B10040804“,”79“,”82“,”80.5“},{”B10040805“,”94“,”83.5“,”81.5“},{”B10040806“ ,”80“,”69“,”68“},{”B10040807“,”82“,”77“,”71“} ,{”B10040808“,”77“,”57“,”58“},{”B10040809“,”91“,”88“,”86“} ,{”B10040810“,”96“, ”89“,”90“},{”B10040811“,”70“,”45.5“,”50“} ,{”B10040812“,”74“,”65“,”66“},{”B10040813“,”81“,”71“,”76“},{”B10040814“,”83“,”75“,”77“},{”B10040815“,”85“,”78“,”79“ }};

if((fp=fopen(”note.dat“,”w“))==NULL){

printf(”文件打开错误!n“);

exit(0);}

fprintf(fp,” 学号

平时成绩

期中成绩

期末成绩n

15n“);

for(i=0;i

fclose(fp);

return 0;

软件设计报告 10005808 方轶琦

}

int read(struct student st[15])

//读取文件的函数;{ FILE*fp1;

struct student s;int size;int i=0;if((fp1=fopen(”note.dat“,”r“))==NULL)

//打开information文件;{

printf(” 文件打开错误!n“);

exit(0);}

size=sizeof(struct student);fseek(fp1,0L,SEEK_SET);fread(&s,size,1,fp1);

//读取一个字节的fp1指针

fread(&s,size,1,fp1);for(i=0;i

{

fscanf(fp1,”%s“, st[i].number);

fscanf(fp1,”%s“, st[i].psgra);

fscanf(fp1,”%s“, st[i].qzgra);

fscanf(fp1,”%s“, st[i].qmgra);

}

fclose(fp1);

return 0;

}

void output(double n[20],char a[20],struct student st[15],char ch){

int j=0;

int i;

printf(”得等级%c的学生及其分数:n“,ch);

for(i=0;i

软件设计报告 10005808 方轶琦

{

if(a[i]==ch)

{

printf(”%-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

//判断后循环输出满足相应条件的学生的学号、分数及其等级;

j++;

}

} printf(”得%c的人数为:%d人n“,ch,j);printf(”得%c的比例为:%.1lf%%n“,ch,100*j/15.0);

printf(”nn“);}

char level(double //判断得ABCDE的条件;{ if(n>=0&&n

return 'E';

else

if(n>=60&&n

return 'D';

else

if(n>=70&&n

return 'C';

else

if(n>=80&&n

return 'B';

else

return 'A';}

n)

软件设计报告 10005808 方轶琦

int main(){ FILE*fp1;struct student st[15];int i=0;double n[N];char a[N];double d=0.0;

information();

read(st);

if((fp1=fopen(”out.dat“,”w“))==NULL){

printf(” File open error!n“);

exit(0);}

fprintf(fp1,” 学号

总评成绩

等级n

15n“);

for(i=0;i

{

n[i]=0.3*atof(st[i].psgra)+0.3*atof(st[i].qzgra)+0.4*atof(st[i].qzgra);

//按照0.3 0.3 0.4计算成绩;

a[i]=level(n[i]);

//输出等级给a[i];

fprintf(fp1,” %-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

d=d+n[i];

//求总成绩;

} fclose(fp1);

while(1){

printf(”tttt

南京邮电大学nnn“);

printf(”------------------“);

printf(”tttt请选择服务类型:ntttt1:输出得A的学生。ntttt2:输出得B的学生。ntttt3:输出得C的学生。n“);

printf(”tttt4:输出得D的学生。ntttt5:输出得E的学生。ntttt6:输出总平均成绩。ntttt7:输出学生相应的等级。n“);

printf(”tttt8:输出原始成绩。ntttt0:退出n“);

printf(”------------------“);

scanf(”%d“,&i);

printf(”nnn“);

软件设计报告 10005808 方轶琦

if(i==0)

break;

else

switch(i)

{

case 1:

//进入得A学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'A');

system(”pause“);

暂停以清屏;

system(”cls“);

清屏;

}

break;

case 2:

进入得B学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'B');

system(”pause“);

system(”cls“);

}

break;

case 3 //进入得C学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'C');

system(”pause“);

system(”cls“);

}

break;

case //进入得D学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'D');

system(”pause“);

system(”cls“);

}

break;

case 37

//////

: 4: 5:

软件设计报告 10005808 方轶琦

//进入得A学生的判断;

{

printf(”A:优

B:良

C:中

D:及格

E:不及格n “);

output(n,a,st,'E');

system(”pause“);

system(”cls“);

}

break;

case 6:printf(”总平均成绩为:%.2lfnnn“,d/15);

//总成绩d/15求平均成绩;

system(”pause“);

system(”cls“);

break;

case 7:{

//输出学生的成绩及其等级;

printf(” 成绩及相应等级信息n“);

printf(”

学号

成绩

等级n“);

for(i=0;i

//15个学生的信息全部输出;

printf(” %-8s %8.1lf %8c n“,st[i].number,n[i],a[i]);

system(”pause“);

system(”cls“);

}

break;

case 8:{

//输出15个学生的所有信息;

printf(” 学号

平时成绩

期中成绩

期末成绩n“);

printf(” 15n“);

for(i=0;i

{

printf(” %-8s %8s %8s “,st[i].number,st[i].psgra,st[i].qzgra);

printf(”%10sn“,st[i].qmgra);

}

system(”pause“);

system(”cls“);

}

break;

default: printf(”输入错误,请重新输入。n“);

break;

}

软件设计报告 10005808 方轶琦

printf(”n“);

}

}3.6.4结果及完善方向

(一).程序运行结果如下:

1、菜单选择界面如图3.6-2所示。

(三).系统有待完善的方向

该系统还有一些细节有待改进完善。如输出5个等级区间学生学号和成绩时,分别都进行了一个循环,共进行了5个循环,这个算法的时间效率较低。可以改进算法,使其进行一次循环便可输出5个等级的情况。

3.7 模拟电信计费系统的设计与实现(B2)

3.7.1设计题目及要求

设计题目:模拟电信计费系统的设计与实现 要求:(1)、计费功能。根据存放在源数据文件中的通话记录和长途费率文件对每一条通话记录计算其通话费用,并将结果保存在费用文件中。其中:通话费的计算方法如下:

通话费=长途电话费+本地电话费

长途电话费=费率(元/分钟)×通话时长(分钟)(通话时长不满1分钟的按1分钟计算)

软件设计报告 10005808 方轶琦

本地电话费为:3分钟以内0.5元,以后每3分钟递增0.2元。(2)、话费查询。输入一个电话号码,从费用文件中统计该电话号码的所有本地话费、长途话费,并从用户文件中查找其用户名,最后在屏幕上显示:

用户名 电话号码 本地话费 长途话费 话费总计(3)、话单查询。输入一个电话号码,查询并在屏幕显示该用户的所话通话记录,格式为:

用户名 主叫电话号码 被叫电话号码 通话时长 3.7.2设计思想及程序流程框图

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

010

1.20

025 84927038 010 62110045 236

020

1.20

025 87216340 025 84521009

310

021

0.80 025 83491234 0571 82199516 100

0571 1.00 025 58120321 021 81094532 50

025 83491234 025 85319971

025 84927038 025 83491234

115

yh.dat

有5条记录 025 58120321 025 87216340

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 197 025 87216340 025 84521009

256

025 87216340 010 62110045 193

软件设计报告 10005808 方轶琦

025 83492200 025 84521009

320

025 83491234 025 85319971

270 025 84927038 025 83491234

231

025 83492200 025 84927038

3.数据结构(用C++实现)

本题共设计了三个类:话单(callist)、费用(charge)和用户(user),类的定义如下:

(1)、基类:话单类Callist #include #include #include #include #define N 100

struct callist

{

char zqnum[5];

char znum[20];

char bqnum[5];

char bnum[20];

char longti[10];}cali[N];struct charge

{

char bqnum[5];

char cha[5];}

ch[N];struct user {

char znum[20];char name[15];}

use[N];struct huaf {

char znum[20];

int flag;

double huafei;}

hf[N];

int readuse(){

FILE* fp;int i=0;

char a[10];

strcpy(a,”yh.dat“);

if((fp=fopen(a,”r“))==NULL){

printf(”文件打开错误!n“);

exit(0);}

while(!feof(fp)){

fscanf(fp,”%s %s n“,use[i].znum,use[i].name);

i++;

}

fclose(fp);return i--;}

int readcharge(){

FILE* fp;int i=0;

if((fp=fopen(”fl.dat“,”r“))==NULL)

费规则;{

printf(” File open error!n“);

exit(0);} while(!feof(fp))

软件设计报告 10005808 方轶琦

//将yh.dat写入数组a;//输出号码与名字;

//打开fl.dat通话计费

软件设计报告 10005808 方轶琦

{

fscanf(fp,”%s %s n“,ch[i].bqnum,ch[i].cha);

i++;

}

fclose(fp);return i--;}

int readcallist(){

FILE* fp;int i=0;

if((fp=fopen(”hd.dat“,”r“))==NULL)

//打开通话记录表;{

printf(” 文件打开错误!n“);

exit(0);} while(!feof(fp)){

fscanf(fp,”%s

%s

%s

%s

%sn“,cali[i].zqnum,cali[i].znum,cali[i].bqnum,cali[i].bnum,cali[i].longti);

i++;

}

fclose(fp);return i--;}

int Billing()

//计费函数;{

FILE* fp;

int i;int j;int m;int l;

软件设计报告 10005808 方轶琦

double bd=0.0;

//通话时间初始化0;

j=readcallist();

m=readcharge();

for(i=0;i

{

strcpy(hf[i].znum,cali[i].znum);

hf[i].huafei=0.0;

//初始化话费为0.0元;

bd=atof(cali[i].longti)/60.0;

//计算通话时间(n个一分钟);

if(!strcmp(cali[i].bqnum,cali[i].zqnum))

{

hf[i].flag=0;

if(bd

//本地话费:3分钟以内0.3元,以后每1分钟递增0.2元;

hf[i].huafei=0.3;

else

if(bd==floor(bd))

hf[i].huafei=0.3+0.2*(bd-3);

else

hf[i].huafei=0.3+0.2*(floor(bd)-2);

}

else

{

hf[i].flag=1;

//长途话费计算;

for(l=0;l

{

if(!strcmp(cali[i].bqnum,ch[l].bqnum))

if(bd==floor(bd))

hf[i].huafei=atof(ch[l].cha)*bd;

else

hf[i].huafei=atof(ch[l].cha)*(floor(bd)+1);

}

}

}

if((fp=fopen(”fy.dat“,”w“))==NULL)

//打开通话

软件设计报告 10005808 方轶琦

类型数据并向其写入数据;{

printf(” 文件打开错误!n“);

exit(0);}

for(i=0;i

{

fprintf(fp,”%s

%d

%.2lfn“,hf[i].znum,hf[i].flag,hf[i].huafei);//输出号码、长途以及本地话费;

} fclose(fp);

return i--;}

int query()

话费函数;{

char a[10];

char na[15];

int i;

int j;

int l;

double bd=0.0;

double ct=0.0;

j=Billing();

l=readuse();

getchar();

printf(”请输入要查询的号码n“);

gets(a);

for(i=0;i

{

if(!strcmp(hf[i].znum,a))

数据;

if(hf[i].flag==0)

bd=bd+hf[i].huafei;

else

//查询

//寻找与输入字符串(号码)相匹配的 软件设计报告 10005808 方轶琦

ct=ct+hf[i].huafei;

}

for(i=0;i

{

if(!strcmp(use[i].znum,a))

{

strcpy(na,use[i].name);

//条件成立则将use[i].name的内容复制到na中

break;

}

}

if(i==l)

printf(”输用户不存在,请重新输入!n“);

else

printf(”tttt用户:%sntttt号码:%sntttt本地话费: %.2lfntttt长途话费:%.2lfntttt总话费: %.2lfn“,na,a,bd,ct,bd+ct);

return 0;

system(”cls“);}

int billquery()

//话单查询函数;{

int i;

int j;

int l;

char na[15];

char a[10];

j=Billing();

l=readuse();

getchar();

printf(”请输入要查询的号码n“);

gets(a);

for(i=0;i

//比较输入号码与表单中号码是否有符合;

软件设计报告 10005808 方轶琦

{

if(!strcmp(use[i].znum,a))

{

strcpy(na,use[i].name);

break;

}

}

if(i==l)

printf(”输用户不存在,请重新输入!n“);

else

for(i=0;i

if(!strcmp(hf[i].znum,a))

printf(”tttt用户:%sntttt主叫号码:%sntttt被叫电话号码:%sntttt通话时长%s秒n“,na,cali[i].znum,cali[i].bnum,cali[i].longti);//输出话单;

return 0;

}

int main(){ int i;

while(1){

printf(”tttt

南京邮电大学nnn“);

printf(”------------------“);

printf(”tttt 请选择服务类型:ntttt 1:计费功能。ntttt 2:话费查询。ntttt 3:话单查询。ntttt 0:退出服务。n“);

printf(”------------------“);

scanf(”%d“,&i);

if(i==0)

//选择服务类型;

break;

else

{

软件设计报告 10005808 方轶琦

switch(i)

{

case 1:

Billing();system(”pause“);//计费选项;

break;

case 2:

query();system(”pause“);system(”cls“);

system(”cls“);

//话费查询选项;

break;

case 3:

billquery();system(”pause“);//话单查询选项;

break;

default: printf(”输入错误!n“);

}

}

printf(”n“);

}

} 3.7.4结果及完善方向(一).程序运行结果如下:

1、菜单选择

界面48

如图system(”cls“);

3.7-2所示。

第3篇:软件设计开题报告

软件设计开题报告

大学生活将要谢下帷幕,大家马上就要开始最难熬的毕业设计阶段,一般做毕业设计前都会要求先写开题报告,那么问题来了,开题报告应该怎么写?以下是小编整理的软件设计开题报告,欢迎阅读与收藏。

题目:基于无线的的设计—上位机

1、毕业设计 (论文)综述(题目背景、国内外相关研究情况及研究意义)

1、1题目背景

水资源监测是水资源管理与保护的重要手段,我国水资源紧缺、水污染严重,如何高效、实时地获取水环境参数、研究开发水环境监测新方法,已成为水环境管理与保护的一项重要任务。无线传感器网络WSN(Wireless Sensor Network)是将有感知能力、计算能力和通信能力的微小传感器节点采用规则或随机方式部署在监控区域,通过无线自组织和多跳的方式构成的分布式网络。它集传感器技术、嵌入式技术、现代

未完,继续阅读 >

第4篇:软件设计开题报告(精选20篇)

报告是一种系统性的、有目的性的、学术性的文字材料,用于向他人传达和说明某种情况、问题或研究成果。在报告中,要注意结构的合理性,每个部分的内容应该紧密联系,逻辑严谨。以下是小编为大家收集的报告范文,供大家参考和借鉴。

软件设计开题报告篇一

1、毕业设计(论文)综述(题目背景、国内外相关研究情况及研究意义)。

1、1题目背景。

水资源监测是水资源管理与保护的重要手段,我国水资源紧缺、水污染严重,如何高效、实时地获取水环境参数、研究开发水环境监测新方法,已成为水环境管理与保护的一项重要任务。无线传感器网络wsn(wirelesssensornetwork)是将有感知能力、计算能力和通信能力的微小传感器节点采用规则或随机方式部署在监控区域,通过无线自组织和多跳的方式构成的分布式网络。它集传感器技术、嵌入式技术

未完,继续阅读 >

第5篇:软件设计开题报告大全(15篇)

报告是一种对某个事件、问题或研究进行详细陈述和说明的书面材料。在报告的主体部分,要对数据和信息进行归纳和分类,提炼出核心内容。通过阅读这些报告范文,你可以了解到如何组织报告的结构和内容,以及如何使用图表和数据进行信息展示。

软件设计开题报告篇一

随着社会的进步、计算机技术的飞速发展,用计算机实现企业人事工资的管理势在必行。

对于大中型企业来说,利用计算机支持企业高效率完成劳动人事管理的日常事务,是适应现代企业制度要求、推动企业劳动人事管理走向科学化、规范化的必要条件;而工资管理是一项琐碎、复杂而又十分细致的工作,工资计算、发放、核算的工作量很大,一般不允许出错,如果实行手工操作,每月发放工资须手工填制大量的表格,这就会耗费工作人员大量的时间和精力,计算机进行工资发放工作,不仅能够保证工资核算准确无误

未完,继续阅读 >

第6篇:软件设计开题报告范文(17篇)

报告是一种对特定主题或问题进行详细研究和分析的书面材料。报告的结构应该紧密围绕主题展开,逐步将问题引入、分析和解决,最终得出结论。%20报告范文中的案例和实例可以为我们理解和应用相关理论和方法提供具体的实践框架。

软件设计开题报告篇一

本科学生在毕业之前必须做毕业论文,其目的是通过毕业论文,让学生独立开发一个具体的计算机应用项目,系统地进行分析总结和运用学过的书本知识,以巩固本科阶段所学的专业理论知识,并给予一个理论联系实际的机会。

管理信息系统开发的主要步骤及各步骤的基本内容如下:

1、系统分析。

主要工作内容有以下几项:确定系统目标,系统可行性分析。

2、系统调查。

系统的组织结构、职能结构和业务流程分析。其中系统的组织结构图应画成树状结构。

系统业务流程分析、业务流程图。

3、数据流程分析。

数据流程图(系

未完,继续阅读 >

第7篇:软件设计说明书

设计说明书引言

水利方向一直是国家十分重视且投入巨大的方向,它关乎方方面面。百姓生命安全、水资源的利用、农业的灌溉等等,都与其息息相关,但是,正因为它的无处不在,导致如果使用传统的手段,将需要消耗过多的人力,效率极其低下,甚至是不可完成的,所以,水利也需要更加现代化的手段去完成预期的目标,水利自动化就是为了这一目的而提出来的。水利自动化可以大大提高数据测量的准确度和控制的可靠性,提高效率,降低劳动强度,充分利用现有设备,从而对于当地水利单位和水利公司均能带来可观的经济和社会收益。

1.1 编写目的a.编写本说明书的目的在于阐明用户的要求的,描述出系统的需求模型、功能和性能要求以及其他约定,为后期的软件设计等工作提供依据。

b.本说明书的预期读者为用户、系统设计员及其他开发人员和相关审核检测人员。

1.

未完,继续阅读 >

第8篇:软件设计个人简历

个人概况

姓名:张XX 性别:男照片
出生年月:1988年3月 籍贯:厦门
毕业院校:中国管理软件学院
学 历:专科 专业:计算机科学与技术
手 机:1350000000 联系电话:0591-00000000
电子邮件:xxxx@tonezhi.com

教育经历

2002年9月~2005年7月 福建农林大学计算机科学与技术
2006年8月~2008年3月 北大青鸟 软件开发

证书情况
2005年 全国计算机等级考试三级
2008年 北大青鸟APTECH 程序员认证
[证书编号:420708190XXXX]
2008年OSTA全国计算机信息高新技术软件工程师中级程序员(国家职业资格四级)
[证书编号:200790140XXX]

实践经验

2008年3月至2008年11月 于福州XX网络技术服务

未完,继续阅读 >

下载软件设计实习报告word格式文档
下载软件设计实习报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

相关专题
热门文章
点击下载本文