B10030707_欧阳雪娇_软件设计报告.doc

更新时间:2024-04-28 02:27:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

软件设计报告

姓名:欧阳雪娇 学号:B10030707

2013年7月1日~2013年7月12日

目 录

第一章 软件设计介绍 ......................................................... 1 第二章 软件开发平台简介 ..................................................... 2 第三章 软件设计的内容 ....................................................... 5 3.1 分数统计软件(A1) ................................................... 5

3.1.1设计题目及要求 ..................................................... 5 3.1.2设计思想及程序流程框图 ............................................. 5 3.1.3逻辑功能程序 ....................................................... 6 3.1.4结果及完善方向 ..................................................... 6 3.2 打字软件(A2) ...................................................... 10 3.2.1设计题目及要求 .................................................... 10 3.2.2设计思想及程序流程框图 ............................................ 10 3.2.3逻辑功能程序 ...................................................... 11 3.2.4结果及完善方向 .................................................... 11 3.3 文本编辑器(A3) .................................................... 14 3.3.1设计题目及要求 .................................................... 15 3.3.2设计思想及程序流程框图 ............................................ 15 3.3.3逻辑功能程序 ...................................................... 16 3.3.4结果及完善方向 .................................................... 16 3.4 加密软件(A4) ...................................................... 31 3.4.1设计题目及要求 .................................................... 31 3.4.2设计思想及程序流程框图 ............................................ 31 3.4.3逻辑功能程序 ...................................................... 32 3.4.4结果及完善方向 .................................................... 34 3.5 进制转换器(A5) .................................................... 38 3.5.1设计题目及要求 .................................................... 38 3.5.2设计思想及程序流程框图 ............................................ 38 3.5.3逻辑功能程序 ...................................................... 40 3.5.4结果及完善方向 .................................................... 44 3.6 学生成绩核算系统的设计与实现(B1) .................................. 48 3.6.1设计题目及要求 .................................................... 48 3.6.2设计思想及程序流程框图 ............................................ 48 3.6.3逻辑功能程序 ...................................................... 49 3.6.4结果及完善方向 .................................................... 56 3.7 模拟电信计费系统的设计与实现(B2) .................................. 62 3.7.1设计题目及要求 .................................................... 62 3.7.2设计思想及程序流程框图 ............................ 错误!未定义书签。 3.7.3逻辑功能程序 ...................................................... 65 3.7.4结果及完善方向 .................................................... 74 第四章 心得体会 ............................................................ 85

第一章 软件设计介绍

一、所涉及的课程及知识点

《高级语言程序设计》:常量、变量、表达式的基本知识;函数的定义与调用;文件读写;数组、指针、结构体等自定义类型的使用;排序等知识。

二、目的与任务

目的:通过集中时间上机实验,对学生的程序设计能力进行一次综合训练,使学生充分发挥已有的编程能力,熟悉编译环境。选择若干课题,进行审题、分析、设计和调试,在程序准备、程序实现、完成文档、答辩验收过程中,将全面巩固已学过的编程知识,全面提高编程技能,在编程风格、调试器的使用、测试技术等方面得到全面训练。学生在程序设计过程中,学生需要查找各种资料获取有用信息解决实际问题,自学相关知识,提高文档书写能力,加强团队合作意识,提高口头表达能力。

任务:《软件设计》课题共分A 、B两档。A档共5题,题目较简单,第一周完成;B档共2题,题目是综合性的,较复杂,第二周完成。

三、主要仪器设备

硬件:微型计算机

软件:C、C++、Visual C++等

四、参考书

【1】朱立华,王立柱.C语言程序设计.北京:人民邮电出版社,2009 【2】朱立华,朱建,俞琼.面向对象程序设计及C++.北京:人民邮电出版社,2008

【3】张引等.C程序设计基础课程设计.浙江:浙江大学出版社,2007

1

第二章 软件开发平台简介

软件开发平台是一种软件开发工具,是以通用技术架构(例如MVC)为基础,集成常用建模工具、二次开发包、基础解决方案等而成。可以大幅缩减编码率,使开发者有更多的时间关注客户的需求,在项目的需求、设计、开发、测试、部署、维护等各个阶段均可提供强大的支持。软件开发平台有两种平台模式,一种是传统的c/s架构模式,一种是现在比较流行的b/s架构模式。

软甲件开发平台的分类,一般有三种:一种是SUN公司的SUN ONE框架平台,一种是LAMP,它是Linux、Apache、Mysql、PHP四项技术的缩写,还有一种是.NET Framework(一般简称为NET框架平台)。

LAMP是一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个Web应用程序平台。随着开源潮流的蓬勃发展,开放了源代码的LAMP已经与J2EE和.NET平台形成了三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此手袋整个IT界的关注。从网站的流量上来说,70%以上的访问流量都是LAMP来提供的,LAMP是最强大的网站解决方案。LAMP是基于Linux、Apache、MySQL和PHP的开放资源网络开发平台,这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境。名字来源于每个程序的第一个字母。每个程序在所有权里都符合开发源代码标准:Linux是开放系统,Apache是最通用的网络服务器,MySQL是带有基于网络管理附加工具的关系数据库,PHP是流行的对象脚本语言,他包含

2

了多数其他语言的优秀特征来使得它的网络开发更加有效。虽然这些开放源代码程序本身并不是专门设计成同另外几个程序一起工作的,但由于他们都是影响较大的开源软件,拥有许多共同特征,这就导致了这些组件经常在一起使用。在过去的几年里,这些软件的兼容性不断完善,在一起的应用情形变得更加普遍。越来越多的供应商、用户和企业投资者日益认识到,经过LAMP单个组件的开源软件组成的平台用来构建以及运行各种商业应用和协作构建各种网络应用程序变为一种可能和实践,变得更加具有竞争力,更加吸引客户。LAMP无论是性能、质量还是价格都将成为企业、政府信息化所必须考虑的平台。

JAVA平台是一种新型的软件平台,可用来在网络计算机系统开发和运行高交互性、动态的、安全的Java小程序和应用程序。Java平台有三种三种版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发。

.NET开发平台是一种用于建立Web服务器应用程序和Windows桌面应用程序的软件组件,用该平台创建的应用程序在Common Language Runtime(通用语言运行环境)的控制下进行。CLR是一个软件引擎,用来加载应用程序,确认他们可以没有错误的执行,进行相应的安全许可验证,执行应用程序,然后在运行结束后将他们删除。类库集提供了使应用程序可以读写XML数据、在Internet上通信、访问数据库等的代码。所有的类库都建立在一个基础的类库之上,他提供管理使用最为频繁

3

的数据类型(例如数值或文本字符串)的功能,以及诸如文件输入/输出等底层功能。Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office插件。Visual Studio是目前最流行的Windows平台应用程序开发环境。

Visual Studio 2008 包括各种增强功能,例如可视化设计器(使用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web应用程序。

开发人员能够利用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运行并完全访问 ASP NET应用程序服务和 Microsoft 平台。

.NET支持多种程序设计语言如:C++.NET、VB.NET、ASP.NET、C等,实现了语言互用性。而Java只能用Java语言。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.NET商业软件形成三足鼎立之势。

4

第三章 软件设计的内容

3.1 分数统计软件(A1)

3.1.1设计题目及要求

课题内容:

设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求:

(1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。

3.1.2设计思想及程序流程框图

设计思想为:

建立学生结构体数组,结构体成员包括存储姓名的字符型数组以及存储分数的整型,使用for循环语句从输入处获取n 个学生的姓名和成绩,成绩输入的信息存入结构体数组。再选择按成绩降幂排名,将结构体数组从头进行输出。 算法流程框图为:

开 始

输入学生人数 清屏 N 输入是否正确? 输入学生姓名name和分数grade 5

自动降幂排序 输出排序后的成绩 结 束

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]; system(\ do

{ system(\ printf(\ printf(\ **************************************** \\n\ printf(\ \\n\

printf(\ ~ O(∩_∩)O~ 欢迎使用本系统 ~O(∩_∩)O~ \\n\ printf(\ \\n \ printf(\ **************************************** \\n\ printf(\ \\n\ printf(\ 请输入学生个数 \\n\\n\ do{ printf(\学生个数: \ err=0;i=0;

6

scanf(\ //输入选项 getchar(); while(x[i]!='\\0') //依次检查输入的字符串是否为数字 { if(x[i]>'9'||x[i]<'0') err=1; i++; } if(err) printf(\请输入数字!\\n\ }while(err);

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

printf(\分数:\

scanf(\ if (std[i].grade<0||std[i].grade>100) {printf (\ 您的输入错误,请重新输入:\\n\ printf(\分数:\ scanf(\ } getchar(); } printf(\ 输入信息:\\n\ printf(\ ******************************** \\n\ printf(\ 姓名 成绩 \\n\\n\ for(i=0;i

printf(\ *********************************** \\n\ printf(\ 排序后信息:\\n\ for(m=0;m

7

printf(\ ******************************************** \\n\ printf(\ 名次 姓名 成绩 \\n\\n\ for(i=0;i

printf(\ 第 %d 名 %s %d\\n\ }

printf(\ ******************************************** \\n\ printf(\ \\n\ printf(\您是否还需要继续?(请按Y键继续/任意键退出)\ //选择是否继续 printf(\ \\n\ scanf(\

printf(\ 感谢使用此软件,欢迎下次光临 ~O(∩_∩)O~ \\n\ }

while(ch[0]=='Y'||ch[0]=='y'); //与开头组成do-while结构循环 printf(\ return 0; }

3.1.4结果及完善方向 实验结果:

A.初始界面:

B.输入学生信息之后直接排序,界面如图所示:

8

C.若所输入的学生成绩在有效范围(0~100)之外系统将会提示输入错误,界面如下图:

程序分析:

此程序功能上满足基本的题目要求,能够做到输入学生的姓名和成绩,能够按成绩降幂

9

排列并输出。 完善方向:

基本功能已实现,对于实际的系统,接下来完善的功能的是能够选择不同的科目进行输入,能够选择进行降幂或者升幂排序,同时能添加或删除学生信息,对于成绩相同的学生进行并列排名。

3.2 打字软件(A2)

3.2.1设计题目及要求

课题内容:

设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。通过此课题,熟练掌握数组、格式输出、字符串处理等。 课题要求:

(1)随机产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。

3.2.2设计思想及程序流程框图

设计思想为:

利用函数库里提供的产生随机函数rand()产生随机的字符串长度,默认将长度定位在1至10个字符。再产生一串由大小写字母以及数字组成的随机字符串,每产生一个字符串就按字保存至数组里。显示产生的字符串,开始打字后,将输入字符串保存至数组,打字完毕。再与产生字符进行逐个比较,若相同,则正确个数加1,最终得出正确率,输出显示。 算法流程框图为:

10

开 始 随机产生字符串 输入字符串 依次比较,计算正确率

输出正确率 Y 是否继续 N 结 束

3.2.3逻辑功能程序

#include #include #include #include

void main(void) {

int i,num,flag,m=0,k,over=1; char str[100]; //产生随机数组 char str1[100]; //输入随机数组 char c; float p; system(\ while(over) //选择是否继续

11

{ num=0; //产生字符长度num初始化为0 m=0; //统计正确个数变量m初始化为0 system(\ //清除屏幕 printf(\ printf(\ *************************************** \\n\ printf(\ ~O(∩_∩)O~ 欢迎使用本系统 ~O(∩_∩)O~ \\n\ printf(\ *************************************** \\n\ printf(\ ********* 打字软件 ******* \\n\ srand(time(NULL)); //提取系统时间,以时间为seed产生随机数 num=1+ rand(); //产生长度不大于10的字符串 for(k=0;k

flag=rand()%3; //随机产生小于3的数 if(flag==0) str[k]='A'+rand()&; //产生大写字母 else if(flag==1) str[k]='a'+rand()&; //产生小写字母 else str[k]='0'+rand()%9; //产生数字 } str[k]='\\0'; printf(\ *************************************\\n\ printf(\随机字符串个数:\\t\\t%d\\n\ printf(\随机产生的字符串:\\t%s\\n\ printf(\ *************************************\\n\\n\ printf(\请输入上面的字符串:\ scanf(\输入字符串 getchar(); for(i=0;str1[i]!='\\0'&&str[i]!='\\0';i++) //进行比较 {

if(str[i]==str1[i]) m++; //m为正确字符个数 }

p=(float) m/num;

printf(\ ************************************* \\n\\n\ printf(\ 正确率为:%.1f%%\\n\ printf(\ 正确个数为:%d\\n\

printf(\ ************************************* \\n\\n\\n\ printf(\ \\n\ printf(\ 是否还需继续练习?(任意键继续/N键退出)\\n\ scanf(\输入选项 getchar(); if(c=='N'||c=='n') over=0; }

12

char hou; char huan;

char filepath[30];//路径 char t; FILE *fp; switch(n) {

case 1://查找功能

printf(\ 请输入文件路径: \ scanf(\输入路径 getchar();//接收Enter字符 fp=fopen(filepath,\ printf(\文件内容如下:\\n\ rewind(fp);//返回文件首,输出整个文件的内容 do {

ch=fgetc(fp); putchar(ch); test[i]=ch; i++; }while(ch!=EOF); test[i]='\\0';//串尾标识符 fclose(fp); p=test; do { a=0,x=0; printf(\ 请输入要查找字符:\ scanf(\ getchar(); while(x

18

if(a==0)

printf(\ 对不起,您要找的字不存在!\\n\ printf(\是否还需要继续查找?(任意键继续/0退出)\\n\ scanf(\ if(m=='0') fc=1; }while(!fc); break; case 2://删除功能 do {

int a=0,x=0;

printf(\ 请输入文件路径(如D:\\\\name.txt: scanf(\输入路径 getchar();//接收Enter字符 fp=fopen(filepath,\ printf(\ 文件内容如下:\\n\ rewind(fp);//返回文件首,输出整个文件的内容 do {

ch=fgetc(fp); putchar(ch); test[i]=ch; i++; }while(ch!=EOF); test[i]='\\0';//串尾标识符 fclose(fp); printf(\ 请输入要删除字符:\ scanf(\ getchar(); while(x<(i-a)) { if(test[x]==t) { a++; for (c=x;c<(i-a);c++)

19

\

test[c]=test[c+1]; test[i-a-1]='\\0'; x--; } x++;

fp=fopen(filepath,\ for(j=0;j<(i-a);j++) {

ch=test[j]; fputc(ch,fp); } fclose(fp); }

if(a==0) printf(\ 对不起,此字符不存在,无法删除!\\n\ printf(\ 文件已保存!\\n\ getchar();

printf(\是否还需要继续删除?(任意键继续/0退出)\\n\ scanf(\ if(m=='0') fs=1; }while(!fs); break;

case 3://插入功能 do { int a=0; i=0; //i的复位 printf(\ 请输入文件路径: \ scanf(\输入路径 getchar();//接收Enter字符 fp=fopen(filepath,\ printf(\文件内容如下:\\n\ rewind(fp);//返回文件首,输出整个文件的内容 do {

ch=fgetc(fp); putchar(ch);

20

test[i]=ch; i++; }while(ch!=EOF); test[i]='\\0';//串尾标识符 fclose(fp); p=test; printf(\ 请输入要插入到哪个字符后面:\\n\ scanf(\ getchar(); while(x

printf(\ scanf(\ getchar(); int x=0,b=0; while(x

for(j=i+b-1;j>x;j--) { test[j+1]=test[j]; }

此字符不存在,输入有误!\\n\请输入要插入的字符:\\n\21

test[x+1]=t;

test[i+b+1]='\\0'; b++; } x++; } fp=fopen(filepath,\ for(j=0;j

ch=test[j]; fputc(ch,fp); }

fclose(fp);

printf(\文件已保存!\\n\ getchar(); printf(\是否还需要继续插入?(任意键继续/0退出)\\n\ scanf(\ if(m=='0') fch=1; }while(!fch); break; case 4://替换功能 do { int a=0;

printf(\ 请输入文件路径(如D:\\\\name.txt: \ scanf(\输入路径 getchar();//接收Enter字符 fp=fopen(filepath,\ printf(\ 文件内容如下:\\n\ rewind(fp);//返回文件首,输出整个文件的内容 do {

ch=fgetc(fp); putchar(ch); test[i]=ch; i++; }while(ch!=EOF);

22

test[i]='\\0';//串尾标识符 fclose(fp); p=test;

printf(\ 请输入文章中要替换的字符:\\n\ scanf(\ getchar();

while(x

if(a==0) { printf(\ 对不起,找不到您要替换的字符!\\n\ getchar(); return 0; }

printf(\ 请输入您想要替换的字符: \\n\ scanf(\ getchar(); int x=0; while(x

23

fp=fopen(filepath,\ for(j=0;j

ch=test[j]; fputc(ch,fp); }

fclose(fp);

printf(\ 文件已保存!\\n\ getchar(); printf(\ 是否还需要继续替换?(任意键继续/0退出)\\n\ scanf(\ if(m=='0') ft=1; }while(!ft); break; case 0: break;

default:printf(\ 输入错误!\ return 0; } return 0; }

void main() {

system(\

int i=0,quitflag=0,a;//标志符 int n; char ch; char filepath[30];//路径 FILE *fp;

while(!quitflag)//若为选择退出则继续 {

system(\清屏 menu1();

printf(\请选择:\ scanf(\输入选择 getchar(); //接收Enter键字符 switch(a)

24

{ case 1://写入文件 printf(\ 请输入文件路径(如D:\\\\name.txt): \ scanf(\输入路径 getchar();//接收Enter字符 fp=fopen(filepath,\ if(fp==NULL) printf(\文件不存在!\\n\ else { printf(\请输入内容(以#结束)\\n\ while((ch=getchar())!='#')//若不为\继续输入 {

fputc(ch,fp); } fclose(fp);

printf(\ 文件已保存!\\n\ break; }

case 2://查看文件 output(); getchar(); break; case 3://编辑文件 menu2();

printf(\请选择:\ scanf(\ edit(n); break;

case 0: quitflag=1;break;//若输入0,则退出标志符为1 default:printf(\输入错误!\ } } }

3.3.4结果及完善方向

A.初始界面:

25

B.建立文本:

C.读取文本:

26

D.编辑文本子界面:

E.查找:

27

F.若输入多个字符则以第一个为准:

G.若输入不存在的字符,系统将提示并重新输入

28

H.删除:

I.插入:

29

J.替换:

程序结果分析:

本程序可以根据指定文件名进行建立文件、读取文件、编辑文件等操作。

30

程序完善方向:

在编辑文本阶段,只是以覆盖的方式进行编辑,这样会导致文件以前的内容完全丢失。应该在编辑函数中增加“追加编辑”的功能,这样可以使使用者灵活的通过“覆盖方式”“追加方式”进行文件编辑。

3.4 加密软件(A4)

3.4.1设计题目及要求

课题内容:

设计一个加密程序。包括明文与密钥的转换。通过此课题,熟练掌握数组、格式输出、字符串处理、类型转换等。 课题要求:

(1)输入任意一段明文M,以及密钥K; (2)根据以下公式将其转换为密文C。

Ci = mi + K ,其中i = 0,1,??n-1 , K 为密钥; (3)具有输入输出界面。

3.4.2设计思想及程序流程框图

设计思想为:

输入明文,保存在字符串中,输入密钥,以字符数组形式获取,若为数字字符,则取其数值,若为其他,则取其ASCII码值,最后转换成十进制数,将每个字符+密钥后生成密文字符,然后按顺序输出显示密文。 算法流程框图为: 开始

输入明文和密钥

密钥转换

加密

输出密文

Y

解密 输出明文

N 31

结束

3.4.3逻辑功能程序

#include #include #include #include #include void menu(); int itn(char s[]);

void Jiami(char m[],int k); void Jiemi(char m[],char y[]); int main(){

char m[1000]; //输入的明文 char y[1000]; //输入的密钥 char s[10]; char m1[1000]; char ch; int k,choice; int i,n; system(\ do{

system(\ menu(); printf(\

*****************************************\\n\ printf(\ 请输入一段明文:\ gets(m);

strcpy(m1,m);

printf(\ 请输入密钥(按#号键结束):\ for(i=0;;i++) //密钥输入不显示字符,显示* {

ch=getch();

if(ch=='#'){ y[i]='\\0'; break;} putchar('*'); y[i]=ch; }

32

k=itn(y); Jiami(m,k);

printf(\ 是否需要解密?(y/n): \ ch=getchar(); getchar();

if(ch=='y'||ch=='Y') Jiemi(m1,y);

printf(\ 继续请按1,退出请按0:\ scanf(\ getchar();

if(!n) printf(\谢谢使用!***********\\n\\n\ }while(n); return 0; }

void menu(){

printf(\∩_∩)O~欢迎进入此软件~O(∩_∩)O~******************\\n\

printf(\

printf(\ 加密系统 <<<<<<<<<<\\n\

printf(\}

int itn(char s[]){ //输入字符串转换为数值 int i,k=0,l; l=strlen(s); for(i=0;i

if(k>127) k=k8; return k; }

void Jiami(char m[],int k){ //加密 int i,l;

l=strlen(m); printf(\ *********** 密文如下:********** \\n\\n\ for(i=0;i

33

if(m[i]>126) m[i]=m[i]-127; if(m[i]<33) m[i]=m[i]+33; printf(\ }

printf(\ \\n\}

void Jiemi(char m[],char y[]){ int count=0,i,f; char s[1000],ch; do{

f=0;

printf(\请输入密钥(按#号键结束):\ for(i=0;;i++) //密钥输入不显示字符,显示* {

ch=getch();

if(ch=='#'){ s[i]='\\0'; break;} putchar('*'); s[i]=ch; }

if(strcmp(s,y)==0) {printf(\解密成功,明文为:\ else {printf(\密钥错误!!\\n\

if(count==3){printf(\您输入的3次密钥均错误,解密失败!!\\n\ }while(f); }

3.4.4结果及完善方向

A.初始界面:

34

B.加密过程:

C.解密过程:

35

D.密匙输入错误时:

E.当密匙三次输入错误时,解密失败:

36

F.退出界面

程序结果分析:

此程序基本完成功能,能实现字符串的加密与解密,具有较友好的界面,能实现多次加密与解密。

程序完善方向:

37

本文来源:https://www.bwwdw.com/article/dq9g.html

Top