资源描述
软件设计报告
姓名:琳
学号:B12060421
2023年5月16日~2023年6月16日
目 录
第一章 软件设计介绍 1
第二章 软件开发平台简介 2
第三章 软件设计的内容 3
3.1 分数记录软件(A1) 3
3.1.1设计题目及规定 3
3.1.2设计思想及程序流程框图 3
3.1.3逻辑功能程序 3
3.1.4结果及完善方向 3
3.2 打字软件(A2) 3
3.2.1设计题目及规定 3
3.2.2设计思想及程序流程框图 3
3.2.3逻辑功能程序 3
3.2.4结果及完善方向 3
3.3 文本编辑器(A3) 3
3.3.1设计题目及规定 3
3.3.2设计思想及程序流程框图 4
3.3.3逻辑功能程序 4
3.3.4结果及完善方向 4
3.4 加密软件(A4) 4
3.4.1设计题目及规定 4
3.4.2设计思想及程序流程框图 4
3.4.3逻辑功能程序 4
3.4.4结果及完善方向 4
3.5 进制转换器(A5) 4
3.5.1设计题目及规定 4
3.5.2设计思想及程序流程框图 4
3.5.3逻辑功能程序 4
3.5.4结果及完善方向 5
3.6 学生成绩核算系统的设计与实现(B1) 5
3.6.1设计题目及规定 5
3.6.2设计思想及程序流程框图 5
3.6.3逻辑功能程序 5
3.6.4结果及完善方向 5
3.7 模拟电信计费系统的设计与实现(B2) 5
3.7.1设计题目及规定 5
3.7.2设计思想及程序流程框图 5
3.7.3逻辑功能程序 5
3.7.4结果及完善方向 5
第四章 心得体会 6
第一章 软件设计介绍
一、所涉及的课程及知识点
《高级语言程序设计》:常量、变量、表达式的基本知识;函数的定义与调用;文献读写;数组、指针、结构体等自定义类型的使用;排序等知识。
二、目的与任务
目的:通过集中时间上机实验,对学生的程序设计能力进行一次综合训练,使学生充足发挥已有的编程能力,熟悉编译环境。选择若干课题,进行审题、分析、设计和调试,在程序准备、程序实现、完毕文档、答辩验收过程中,将全面巩固已学过的编程知识,全面提高编程技能,在编程风格、调试器的使用、测试技术等方面得到全面训练。学生在程序设计过程中,学生需要查找各种资料获取有用信息解决实际问题,自学相关知识,提高文档书写能力,加强团队合作意识,提高口头表达能力。
任务:《软件设计》课题共分A 、B两档。A档共5题,题目较简朴,第一周完毕;B档共2题,题目是综合性的,较复杂,第二周完毕。
三、重要仪器设备
硬件:微型计算机
软件:C、C++、Visual C++等
四、参考书
【1】朱立华,王立柱.C语言程序设计.北京:人民邮电出版社,2023
【2】朱立华,朱建,俞琼.面向对象程序设计及C++.北京:人民邮电出版社,2023
【3】张引等.C程序设计基础课程设计.浙江:浙江大学出版社,2023
第二章 软件开发平台简介
软件开发平台是一种软件开发工具,是以通用技术架构(例如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是流行的对象脚本语言,他包含了多数其他语言的优秀特性来使得它的网络开发更加有效。虽然这些开放源代码程序自身并不是专门设计成同此外几个程序一起工作的,但由于他们都是影响较大的开源软件,拥有许多共同特性,这就导致了这些组件经常在一起使用。在过去的几年里,这些软件的兼容性不断完善,在一起的应用情形变得更加普遍。越来越多的供应商、用户和公司投资者日益结识到,通过LAMP单个组件的开源软件组成的平台用来构建以及运营各种商业应用和协作构建各种网络应用程序变为一种也许和实践,变得更加具有竞争力,更加吸引客户。LAMP无论是性能、质量还是价格都将成为公司、政府信息化所必须考虑的平台。
JAVA平台是一种新型的软件平台,可用来在网络计算机系统开发和运营高交互性、动态的、安全的Java小程序和应用程序。Java平台有三种三种版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发。
.NET开发平台是一种用于建立Web服务器应用程序和Windows桌面应用程序的软件组件,用该平台创建的应用程序在Common Language Runtime(通用语言运营环境)的控制下进行。CLR是一个软件引擎,用来加载应用程序,确认他们可以没有错误的执行,进行相应的安全许可验证,执行应用程序,然后在运营结束后将他们删除。类库集提供了使应用程序可以读写XML数据、在Internet上通信、访问数据库等的代码。所有的类库都建立在一个基础的类库之上,他提供管理使用最为频繁的数据类型(例如数值或文本字符串)的功能,以及诸如文献输入/输出等底层功能。Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和 Office插件。Visual Studio是目前最流行的Windows平台应用程序开发环境。
Visual Studio 2023 涉及各种增强功能,例如可视化设计器(使用 .NET Framework 3.5 加速开发)、对 Web 开发工具的大量改善,以及可以加速开发和解决所有类型数据的语言增强功能。Visual Studio 2023 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持 AJAX 的 Web应用程序。
开发人员可以运用这些丰富的客户端和服务器端框架轻松构建以客户为中心的 Web应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运营并完全访问 ASP NET应用程序服务和 Microsoft 平台。
.NET支持多种程序设计语言如:C++.NET、VB.NET、ASP.NET、C等,实现了语言互用性。而Java只能用Java语言。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.NET商业软件形成三足鼎立之势。
第三章 软件设计的内容
3.1 分数记录软件(A1)
3.1.1设计题目及规定
课题内容:
设计一个分数记录程序。涉及学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文献的使用,掌握程序设计的基本方法及和谐界面的设计。
课题规定:
(1)输入某班级学生的姓名、分数;
(2)对(1)的分数进行降幂排列并输出;
(3)具有输入输出界面。
3.1.2设计思想及程序流程框图
设计思想为:
建立学生结构体数组,结构体成员涉及存储姓名的字符型数组以及存储分数的整型,使用for循环语句从输入处获取n 个学生的姓名和成绩,成绩输入的信息存入结构体数组。再选择按成绩降幂排名,将结构体数组从头进行输出。
算法流程框图为:
开 始
输入学生人数
清屏
N
输入是否对的?
输入学生姓名name和分数grade
自动降幂排序
输出排序后的成绩单
结 束
3.1.3逻辑功能程序
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
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("color F9");
do
{ system("cls");
printf(" \n\n");
printf(" **************************************** \n");
printf("\t \n");
printf(" ~ O(∩_∩)O~ 欢迎使用本系统 ~O(∩_∩)O~ \n");
printf("\t \n ");
printf(" **************************************** \n");
printf(" \n");
printf(" 请输入学生个数 \n\n");
do{ printf("\t\t学生个数: ");
err=0;i=0;
scanf("%s",x); //输入选项
getchar();
while(x[i]!='\0') //依次检查输入的字符串是否为数字
{
if(x[i]>'9'||x[i]<'0') err=1;
i++;
}
if(err) printf("\n\t\t请输入数字!\n");
}while(err);
n=atoi(x); //将字符型数组x转换成整型n
for(i=0;i<n;i++) //循环N次输入学生信息
{
printf("\n\t\t请输入第%d个人的信息\n\t\t姓名:",i+1);
scanf("%s",std[i].name);
getchar();
printf("\t\t分数:");
scanf("%d",&std[i].grade);
if (std[i].grade<0||std[i].grade>100)
{printf (" 您的输入错误,请重新输入:\n");
printf("\t\t分数:");
scanf("%d",&std[i].grade);
}
getchar();
}
printf(" 输入信息:\n");
printf(" ******************************** \n");
printf(" 姓名 成绩 \n\n");
for(i=0;i<n;i++)
{
printf(" %s %d\n",std[i].name,std[i].grade);
}
printf("\n\n *********************************** \n");
printf("\n 排序后信息:\n");
for(m=0;m<n;m++)
for(i=0;i<n-m-1;i++)
{
if(std[i].grade<std[i+1].grade)
{
temp=std[i];
std[i]=std[i+1];
std[i+1]=temp; //成绩按降幂排序
}
}
printf("\n 您所输入的学生名次如下:\n\n");
printf(" ******************************************** \n");
printf(" 名次 姓名 成绩 \n\n");
for(i=0;i<n;i++)
{
printf(" 第 %d 名 %s %d\n",i+1,std[i].name,std[i].grade);
}
printf("\n\n ******************************************** \n");
printf("\t \n");
printf("\t您是否还需要继续?(请按Y键继续/任意键退出)"); //选择是否继续
printf("\t \n");
scanf("%s",ch);
printf("\t 感谢使用此软件,欢迎下次光顾 ~O(∩_∩)O~ \n");
}
while(ch[0]=='Y'||ch[0]=='y'); //与开头组成do-while结构循环
printf("\t");
return 0;
}
3.1.4结果及完善方向
实验结果:
A. 初始界面:
B. 输入学生信息之后直接排序,界面如图所示:
C. 若所输入的学生成绩在有效范围(0~100)之外系统将会提醒输入错误,界面如下图:
程序分析:
此程序功能上满足基本的题目规定,可以做到输入学生的姓名和成绩,可以按成绩降幂排列并输出。
完善方向:
基本功能已实现,对于实际的系统,接下来完善的功能的是可以选择不同的科目进行输入,可以选择进行降幂或者升幂排序,同时能添加或删除学生信息,对于成绩相同的学生进行并列排名。
3.2 打字软件(A2)
3.2.1设计题目及规定
课题内容:
设计一个打字程序。涉及随机产生字符串,以及字符串比较和记录。通过此课题,纯熟掌握数组、格式输出、字符串解决等。
课题规定:
(1)随机产生一字符串,每次产生的字符串内容、长度都不同;
(2)根据(1)的结果,输入字符串,判断输入是否对的,输出对的率;
(3)具有输入输出界面。
3.2.2设计思想及程序流程框图
设计思想为:
运用函数库里提供的产生随机函数rand()产生随机的字符串长度,默认将长度定位在1至10个字符。再产生一串由大小写字母以及数字组成的随机字符串,每产生一个字符串就按字保存至数组里。显示产生的字符串,开始打字后,将输入字符串保存至数组,打字完毕。再与产生字符进行逐个比较,若相同,则对的个数加1,最终得出对的率,输出显示。
算法流程框图为:
开 始
随机产生字符串
输入字符串
依次比较,计算对的率
输出对的率
Y
是否继续
N
结 束
3.2.3逻辑功能程序
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#include<iostream>
void main(void)
{
int i,num,flag,m=0,k,over=1;
char str[100]; //产生随机数组
char str1[100]; //输入随机数组
char c;
float p;
system("color F9");
while(over) //选择是否继续
{
num=0; //产生字符长度num初始化为0
m=0; //记录对的个数变量m初始化为0
system("cls"); //清除屏幕
printf("\n\n\n");
printf(" *************************************** \n");
printf(" ~O(∩_∩)O~ 欢迎使用本系统 ~O(∩_∩)O~ \n");
printf(" *************************************** \n");
printf(" ********* 打字软件 ******* \n");
srand(time(NULL)); //提取系统时间,以时间为seed产生随机数
num=1+ rand()%10; //产生长度不大于10的字符串
for(k=0;k<num;k++)
{
flag=rand()%3; //随机产生小于3的数
if(flag==0) str[k]='A'+rand()%26; //产生大写字母
else if(flag==1) str[k]='a'+rand()%26; //产生小写字母
else str[k]='0'+rand()%9; //产生数字
}
str[k]='\0';
printf("\n\n\t\t *************************************\n");
printf("随机字符串个数:\t\t%d\n",num);
printf("随机产生的字符串:\t%s\n",str);
printf("\t\t *************************************\n\n");
printf("请输入上面的字符串:");
scanf("%s",str1);//输入字符串
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\n ************************************* \n\n");
printf(" 对的率为:%.1f%%\n",p*100);
printf(" 对的个数为:%d\n",m);
printf("\n ************************************* \n\n\n");
printf(" \n");
printf(" 是否还需继续练习?(任意键继续/N键退出)\n");
scanf("%c",&c);//输入选项
getchar();
if(c=='N'||c=='n') over=0;
}
}
\
3.2.4结果及完善方向
A. 初始界面:即随机产生的字符串为输出页面
B. 当输入的字符串与随机产生的字符串一致时,对的率为100%,如图:
C. 当输入的字符串与随机产生的字符串不一致时,程序将计算对的率并给出输入对的的个数,如图:
程序结果分析:
此程序能保证每次产生的字符串不同样,且能对的地输出准确率,基本完毕了打字训练的任务。考虑到程序的实用性,可认为程序添加计时功能、记录保存功能等,可以使使用者更加灵活地运用打字软件。
程序完善方向:
对于这个程序,局限性的就是可以添加计时功能,在打字前,可以询问用户是否进行计时,还可以添加功能,由用户自己选择可从从其他文献导入一段字符串。
3.3 文本编辑器(A3)
3.3.1设计题目及规定
课题内容:
设计一个简朴的文本编辑器,该系统规定对一个文本文献中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,纯熟掌握文本文献的操作及用字符数组或字符指针实现字符串操作的功能。
课题规定:
(1)编辑文本;
(2)保存、打开指定位置的文本文献;
(3)具有输入输出界面。
3.3.2设计思想及程序流程框图
设计思想为:
在主菜单可选择建立文本、编辑文本、读取文本和退出程序。以只写方式编辑文本,若文本不存在则提醒“不能打开文献”,打开的文献则输入的内容以“#”作为结束标记;读取文献时,提醒需要读取的目的文本途径,将文本里的内容输出。
算法流程框图为:
开 始
输出功能菜单
输入选项choose
N
N
N
choose=4
choose=3
choose=2
choose=1
N
输入途径
输入途径
输入途径
文献不存在
文献不存在
文献不存在
Y
N
N
Y
Y
N
建立文本
编辑文本
输出文本
结束
3.3.3逻辑功能程序
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu1()
{
printf(" \n\n");
printf(" ********* ~O(∩_∩)O~ 欢迎使用此软件 ~O(∩_∩)O~ ********\n\n");
printf(" **** 文本编辑器 **** \n\n");
printf(" >>>>>>> 1.建立文献 <<<<<<<\n");
printf(" >>>>>>> 2.查看文献 <<<<<<<\n");
printf(" >>>>>>> 3.编辑文献 <<<<<<<\n");
printf(" >>>>>>> 0.退出 <<<<<<<\n\n");
}
void menu2()
{
printf("\n\n");
printf(" ******* 编辑文献功能 ******* \n");
printf(" \n");
printf(" >>>>> 1.查找 <<<<<\n");
printf(" >>>>> 2.删除 <<<<<\n");
printf(" >>>>> 3.插入 <<<<<\n");
printf(" >>>>> 4.替换 <<<<<\n");
printf(" >>>>> 0.返回上级菜单 <<<<<\n");
}
int output()
{
char filepath[30];//途径
FILE *fp;
char ch;
printf("\n 请输入文献途径(如D:\\name.txt: ");
scanf("%s",filepath);//输入途径
getchar();//接受Enter字符
fp=fopen(filepath,"r");
printf("\n 文献内容如下:\n");
rewind(fp);//返回文献首,输出整个文献的内容
do
{
ch=fgetc(fp);
putchar(ch);
}while(ch!=EOF);
fclose(fp);
return 0;
}
int edit(int n)
{
int i=0,x=0,fc=0,fch=0,fs=0,ft=0,a;
char *p;
int c=0,j;
char test[500];
char m;
char ch;
char hou;
char huan;
char filepath[30];//途径
char t;
FILE *fp;
switch(n)
{
case 1://查找功能
printf("\n 请输入文献途径: ");
scanf("%s",filepath);//输入途径
getchar();//接受Enter字符
fp=fopen(filepath,"r");
printf("\n文献内容如下:\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("\n 请输入要查找字符:");
scanf("%c",&t);
getchar();
while(x<i)
{
if(t==*(p+x))
{
printf("\n 您要查找的字为:%c,它是第 %d个\n",t,x+1);
a=1;
}
x++;
}
if(a==0)
printf("\n 对不起,您要找的字不存在!\n");
printf("\n是否还需要继续查找?(任意键继续/0退出)\n");
scanf("%c",&m);
if(m=='0')
fc=1;
}while(!fc);
break;
case 2://删除功能
do
{
int a=0,x=0;
printf("\n 请输入文献途径(如D:\\name.txt: ");
scanf("%s",filepath);//输入途径
getchar();//接受Enter字符
fp=fopen(filepath,"r");
printf("\n 文献内容如下:\n");
rewind(fp);//返回文献首,输出整个文献的内容
do
{
ch=fgetc(fp);
putchar(ch);
test[i]=ch;
i++;
}while(ch!=EOF);
test[i]='\0';//串尾标记符
fclose(fp);
printf("\n 请输入要删除字符:");
scanf("%c",&t);
getchar();
while(x<(i-a))
{
if(test[x]==t)
{
a++;
for (c=x;c<(i-a);c++)
test[c]=test[c+1];
test[i-a-1]='\0';
x--;
}
x++;
fp=fopen(filepath,"w");
for(j=0;j<(i-a);j++)
{
ch=test[j];
fputc(ch,fp);
}
fclose(fp);
}
if(a==0)
printf("\n 对不起,此字符不存在,无法删除!\n");
printf("\n 文献已保存!\n");
getchar();
printf("\n是否还需要继续删除?(任意键继续/0退出)\n");
scanf("%c",&m);
if(m=='0')
fs=1;
}while(!fs);
break;
case 3://插入功能
do
{
int a=0;
i=0; //i的复位
printf("\n 请输入文献途径: ");
scanf("%s",filepath);//输入途径
getchar();//接受Enter字符
fp=fopen(filepath,"r");
printf("\n文献内容如下:\n");
rewind(fp);//返回文献首,输出整个文献的内容
do
{
ch=fgetc(fp);
putchar(ch);
test[i]=ch;
i++;
}while(ch!=EOF);
test[i]='\0';//串尾标记符
fclose(fp);
p=test;
printf("\n 请输入要插入到哪个字符后面:\n");
scanf("%c",&hou);
getchar();
while(x<i+a)
{
if(hou==*(p+x))
a=1;
x++;
}
if(a==0)
{
printf
展开阅读全文