软件设计报告
姓名: 琳 学号:B12060421
2015 年 年 5 月 月 16 日~2015 年 年 6 月 月 16 日
目
录
第一章
软件设计介绍 ......................................................... 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
最新课件 第二章
软件开发平台简介
软件开发平台是一种软件开发工具,是以通用技术架构(例如MVC )为基础,集成常用建模工具、二次开发包、基础解决方案等而成。可以大幅缩减编码率,使开发者有更多的时间关注客户的需求,在项目的需求、设计、开发、测试、部署、维护等各个阶段均可提供强大的支 持。软件开发平台有两种平台模式,一种是传统的 s c/s 架构模式,一种是现在比较流行的 s b/s 架构模式。
软甲件开发平台的分类,一般有三种:一种是 N SUN 公司的 SUN ONE框架平台,一种是 LAMP, 它是 Linux 、 Apache 、 Mysql 、P PHP 四项技术的缩写,还有一种是 .NET Framework( 一般简称为 T NET 框架平台) ) 。
P LAMP 是一组常用来搭建动态网站或者服务器的开源软件,本身都是各自独立的程序,但是因为常被放在一起使用,拥有了越来越高的兼容度,共同组成了一个 b Web 应用程序平台。随着开源潮流的蓬勃发展,开 放了源代码的 P LAMP 已经与 E J2EE 和T .NET 平台形成了三足鼎立之势,并且该软件开发的项目在软件方面的投资成本较低,因此手袋整个 T IT 界的关注。从网站的流量上来说, 70% 以上的访问流量都是P LAMP 来提供的,P LAMP 是最强大的网站解决方案。P LAMP 是基于 Linux 、Apache、 、L MySQL 和 和 P PHP 的开放资源网络开发平台,这个术语来自欧洲,在那里这些程序常用来作为一种标准开发环境。名字来源于每个程序的第一个字母。每个程序在所有权里都符合开发源代码标准:
Linux是开放系统,e Apache 是最通用的网络服务器, MySQL L 是带有基于网络管理附加工具的关系数据库,PHP是流行的对象脚本语言,他包含
最新课件 了多数其他语言的优秀特征来使得它的网络开发更加有效。虽然这些开放源代码程序本身并不是专门设计成同另外几个程序一起工作的,但由于他们都是影响较大的开源软件,拥有许多共同特征,这就导致了这些组件经常在一起使用。在过去的几年里,这些软件的兼容性不断完善,在一起的应用情形变得更加普遍。越来越多的供应商、用户和企业投资者日益认识到,经过LAMP单个组件的开源软件组成的平台用来构建以及运行各种商业应用和协作构建各种网络应用程序变为一种可能和实践 ,变得更加具有竞争力,更加吸引客户。LAMP无论是性能、质量还是价格都将成为企业、政府信息化所必须考虑的平台。
JAVA平台是一种新型的软件平台,可用来在网络计算机系统开发和运行高交互性、动态的、安全的Java小程序和应用程序。Java平台有三种三种版本,这使软件开发人员、服务提供商和设备生产商可以针对特定的市场进行开发。
.NET开发平台是一种用于建立Web服务器应用程序和Windows桌面应用程序的软件组件,用该平台创建的应用程序在Common
Language
Runtime(通用语言运行环境)的控制 下进行。CLR是一个软件引擎,用来加载应用程序,确认他们可以没有错误的执行,进行相应的安全许可验证,执行应用程序,然后在运行结束后将他们删除。类库集提供了使应用程序可以读写XML数据、在Internet上通信、访问数据库等的代码。所有的类库都建立在一个基础的类库之上,他提供管理使用最为频繁
最新课件 的数据类型(例如数值或文本字符串)的功能,以及诸如文件输入/输出等底层功能。
Visual Studio 是 微软公司 推出 的 开发环境 ,Visual Studio 可以用来创建
Windows 平台下的
s Windows 应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和
e Office 插件 。o Visual Studio 是目前最流行的 s Windows 平台 应用程序开发 环境。
Visual Studio 2008 包括各种增强功能,例如 可视化设计 器(使用
.NET Framework 3.5 加速开发)、对
Web 开发工具的大量改进,以及能够加速开发和处理所有类型数据的语言增强功能。
Visual Studio 2008 为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持
AJAX 的
b Web 应用程序 。
开发人员能够利用这些丰富的 客户端 和服务器端框架轻松构建以客户为中心的
b Web 应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前 浏览器 内运行并完全访问
T ASP NET 应用程序服务 和
Microsoft 平台。
.NET支持多种程序设计语言如:C++.NET、VB .NET、ASP.NET、C等,实现了语言互用性。而Java只能用Java语言。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.NET商业软件形成三足鼎立之势。
最新课件
第三章
软件设计的内容
3.1 分数统计软件( A1 )
1 3.1.1 设计题目及要求
课题内容:
设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。
课题要求:
(1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。
2 3.1.2 设计思想及程序流程框图
设计思想为:
建立学生结构体数组,结构体成员包括存储姓名的字符型数组以及存储分数的整型,使用 for 循环语句从输入处获取 n 个学生的姓名和成绩,成绩输入的信息存入结构体数组。再选择按成绩降幂排名,将结构体数组从头进行输出。
算法流程框图为:
开
始 输入学生人数 清屏 输入是否正确? 输入学生姓名 name和分数 grade N
最新课件
3 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 34 .1.4 结果及完善方向
实验结果:
A.初始界面:
B. 输入学生信息之后直接排序,界面如图所示:
最新课件
C. 若所输入的学生成绩在有效范围(0~100)之外系统将会提示输入错误,界面如下图:
程序分析:
此程序功能上满足基本的题目要求,能够做到输入学生的姓名和成绩,能够按成绩降幂
最新课件 排列并输出。
完善方向:
基本功能已实现,对于实际的系统,接下来完善的功能的是能够选择不同的科目进行输入,能够选择进行降幂或者升幂排序,同时能添加或删除学生信息,对于成绩相同的学生进行并列排名。
3.2 打字软 件 ( A2 )
1 3.2.1 设计题目及要求
课题内容:
设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。通过此课题,熟练掌握数组、格式输出、字符串处理等。
课题要求:
(1)随机产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。
2 3.2.2 设计思想及程序流程框图
设计思想为:
利用函数库里提供的产生随机函数 rand()产生随机的字符串长度,默认将长度定位在 1至 10 个字符。再产生一串由大小写字母以及数字组成的随机字符串,每产生一个字符串就按字保存至数组里。显示产生的字符串,开始打字后,将输入字符串保存至数组,打字完毕。再与产生字符进行逐个比较,若相同,则正确个数加 1,最终得出正确率,输出显示。
算法流程框图为:
最新课件
3 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)
//选择是否继续 开 始 随机产生字符串 输入字符串 依次比较,计算正确率 输出正确率 是否继续
结
束 Y N
最新课件
{
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;
}
最新课件 }
\ \
4 3.2.4 结果及完善方向
A. 初始界面:即随机产生的字符串为输出页面
B. 当输入的字符串与随机产生的字符串一致时,正确率为 100% ,如图:
最新课件
C. 当输入的字符串与随机产生的字符串不一致时,程序将计算正确率并给出输入正确的个数,如图:
程序结果分析:
此程序能保证每次产生的字符串不一样,且能正确地输出准确率,基本完成了打字训练
最新课件 的任务。考虑到程序的实用性,可以为程序添加计时功能、记录保存功能等,可以使使用者更加灵活地运用打字软件。
程序完善方向:
对于这个程序,不足的就是可以添加计时功能,在打字前,可以询问用户是否进行计时,还可以添加功能,由用户自己选择可从从其他文件导入一段字符串。
3.3 文本编辑器( (A3 )
1 3.3.1 设计题目及要求
课题内容:
设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。
课题要求:
(1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。
2 3.3.2 设计思想及程序流程框图
设计思想为:
在主菜单可选择建立文本、编辑文本、读取文本和退出程序。以只写方式编辑文本,若文本不存在则提示“不能打开文件”,打开的文件则输入的内容以“#”作为结束标识;读取文件时,提示需要读取的目标文本路径,将文本里的内容输出。
算法流程框图为:
开 始 输出功能菜单 输入选项 choose choose=1 choose=2 choose=4 choose=3 N N N
最新课件
3 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");
} 文件不存在 输入路径 结束 建立文本 编辑文本 输出文本 输入路径 输入路径 文件不存在 文件不存在 N N N N Y Y Y
最新课件 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("\n
此字符不存在,输入有误!\n");
getchar();
return 0;
}
printf("\n
请输入要插入的字符:\n");
scanf("%c",&t);
getchar();
int x=0,b=0;
while(x<i+b)
{
if(hou==*(p+x))
{
for(j=i+b-1;j>x;j--)
{
test[j+1]=test[j];
}
最新课件
test[x+1]=t;
test[i+b+1]="\0";
b++;
}
x++;
}
fp=fopen(filepath,"w");
for(j=0;j<i+1;j++)
{
ch=test[j];
fputc(ch,fp);
}
fclose(fp);
printf("\n 文件已保存!\n");
getchar();
printf("\n 是否还需要继续插入?(任意键继续/0 退出)\n");
scanf("%c",&m);
if(m=="0")
fch=1;
}while(!fch);
break;
case 4://替换功能
do
{
int a=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);
p=test;
printf("\n
请输入文章中要替换的字符:\n");
scanf("%c",&t);
getchar();
while(x<i)
{
if(t==*(p+x))
a=1;
x++;
}
if(a==0)
{
printf("\n
对不起,找不到您要替换的字符!\n");
getchar();
return 0;
}
printf("
请输入您想要替换的字符:
\n");
scanf("%c",&huan);
getchar();
int x=0;
while(x<i)
{
if(t==*(p+x))
test[x]=huan;
x++;
}
最新课件
fp=fopen(filepath,"w");
for(j=0;j<i+1;j++)
{
ch=test[j];
fputc(ch,fp);
}
fclose(fp);
printf("\n
文件已保存!\n");
getchar();
printf("\n
是否还需要继续替换?(任意键继续/0 退出)\n");
scanf("%c",&m);
if(m=="0")
ft=1;
}while(!ft);
break;
case 0: break;
default:printf("\n
输入错误!");
return 0;
} return 0; } void main() {
system("color f9");
int i=0,quitflag=0,a;//标志符
int n;
char ch;
char filepath[30];//路径
FILE *fp;
while(!quitflag)//若为选择退出则继续
{
system("cls");//清屏
menu1();
printf("请选择:");
scanf("%d",&a);//输入选择
getchar(); //接收 Enter 键字符
switch(a)
最新课件
{
case 1://写入文件
printf("
请输入文件路径(如 D:\\name.txt):
");
scanf("%s",filepath);//输入路径
getchar();//接收 Enter 字符
fp=fopen(filepath,"w+");
if(fp==NULL) printf("文件不存在!\n");
else
{
printf("请输入内容(以#结束)\n");
while((ch=getchar())!="#")//若不为"#"继续输入
{
fputc(ch,fp);
}
fclose(fp);
printf("\n
文件已保存!\n");
break;
}
case 2://查看文件
output();
getchar();
break;
case 3://编辑文件
menu2();
printf("请选择:");
scanf("%d",&n);
edit(n);
break;
case 0:
quitflag=1;break;//若输入 0,则退出标志符为 1
default:printf("输入错误!");
}
} } 4 3.3.4 结果及完善方向
A. 初始界面:
最新课件
B. 建立文本:
C. 读取文本:
最新课件
D. 编辑文本子界面:
E. 查找:
最新课件
F. 若输入多个字符则以第一个为准:
G. 若输入不存在的字符,系统将提示并重新输入
最新课件
H. 删除:
I. 插入:
最新课件
J. 替换:
程序结果分析:
本程序可以根据指定文件名进行建立文件、读取文件、编辑文件等操作。
最新课件 程序完善方向:
在编辑文本阶段,只是以覆盖的方式进行编辑,这样会导致文件以前的内容完全丢失。应该在编辑函数中增加“追加编辑”的功能,这样可以使使用者灵活的通过“覆盖方式”“追加方式”进行文件编辑。
3.4 加密软件( (A4 )
1 3.4.1 设计题目及要求
课题内容:
设计一个加密程序。包括明文与密钥的转换。通过此课题,熟练掌握数组、格式输出、字符串处理、类型转换等。
课题要求:
(1)输入任意一段明文 M,以及密钥 K; (2)根据以下公式将其转换为密文 C。
C i
=
m i
+
K
,其中 i = 0,1,„„n-1 , K 为密钥; (3)具有输入输出界面。
2 3.4.2 设计思想及程序流程框图
设计思想为:
输入明文,保存在字符串中,输入密钥,以字符数组形式获取,若为数字字符,则取其数值,若为其他,则取其 ASCII 码值,最后转换成十进制数,将每个字符+密钥后生成密文字符,然后按顺序输出显示密文。
算法流程框图为:
输入明文和密钥
密钥转换
加密
解密
输出明文 输出密文 N Y
开始
最新课件
3 3.4.3 逻辑功能程序
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<conio.h> #include<ctype.h> 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("color fd");
do{
system("cls");
menu();
printf("\n\n\n
*****************************************\n");
printf("
请输入一段明文:");
gets(m);
strcpy(m1,m);
printf("\n
请输入密钥(按#号键结束):");
for(i=0;;i++)
//密钥输入不显示字符,显示*
{
ch=getch();
if(ch=="#"){ y[i]="\0"; break;}
putchar("*");
y[i]=ch;
}
结束
最新课件
k=itn(y);
Jiami(m,k);
printf("
是否需要解密?(y/n): ");
ch=getchar();
getchar();
if(ch=="y"||ch=="Y") Jiemi(m1,y);
printf("\n
继续请按 1,退出请按 0:");
scanf("%d",&n);
getchar();
if(!n) printf("\n\n\t\t\t*********** 谢谢使用!***********\n\n");
}while(n);
return 0; } void menu(){
printf("\n\n\n\t****************~O( ∩ _ ∩ )O~ 欢 迎 进 入 此 软 件 ~O( ∩ _∩)O~******************\n"); printf("\t******************************************************************\n"); printf("\t>>>>>>>>>>
加 密 系 统
<<<<<<<<<<\n"); printf("\t******************************************************************\n\n"); } int itn(char s[]){
//输入字符串转换为数值
int i,k=0,l;
l=strlen(s);
for(i=0;i<l;i++)
{
if(isdigit(s[i]))
k=k*10+(int)(s[i])-48;
//输入字符为数字,就转换为数值
else
k=k*10+(int)(s[i]);
//输入为字母,则取其 ASCII 码
}
if(k>127)
k=k%128;
return k; } void Jiami(char m[],int k){
//加密
int i,l;
l=strlen(m);
printf("\t\t\t\n\n
*********** 密文如下:********** \n\n");
for(i=0;i<l;i++)
// 其间为可打印字符
{
m[i]=m[i]+k;
if(m[i]<0)
m[i]=m[i]+127;
最新课件
if(m[i]>126)
m[i]=m[i]-127;
if(m[i]<33)
m[i]=m[i]+33;
printf("%c",m[i]);
}
printf("\n\n
\n"); } void Jiemi(char m[],char y[]){
int count=0,i,f;
char s[1000],ch;
do{
f=0;
printf("\n 请输入密钥(按#号键结束):");
for(i=0;;i++)
//密钥输入不显示字符,显示*
{
ch=getch();
if(ch=="#"){ s[i]="\0"; break;}
putchar("*");
s[i]=ch;
}
if(strcmp(s,y)==0) {printf("\n\n 解密成功,明文为:");puts(m);}
else {printf(" 密钥错误!!\n");f=1;count++;}
if(count==3){printf("\n 您输入的 3 次密钥均错误,解密失败!!\n"); break;}
}while(f); }
4 3.4.4 结果及完善方向
A. 初始界面:
最新课件
B. 加密过程:
C. 解密过程:
最新课件
D. 密匙输入错误时:
E. 当密匙三次输入错误时,解密失败:
最新课件
F. 退出界面
程序结果分析:
此程序基本完成功能,能实现字符串的加密与解密,具有较友好的界面,能实现多次加密与解密。
程序完善方向:
最新课件
此程序没有将加密和解密模块分开,应在程序上加以完善。界面可以做得更友好。
3.5 进制转换器( (A5 )
1 3.5.1 设计题目及要求
课题内容:
设计一个进制转换器程序。包括二进制、八进制、十进制、十六进制数互相转换。通过此课题,熟练掌握字符串、格式输出、进制换算的各种操作。
课题要求:
(1)可输入二进制、八进制、十进制、十六进制数; (2)将已输入的数转换成其余进制的数; (3)具有输入输出界面。
2 3.5.2 设计思想及程序流程框图
设计思想:
(1)输入“输入进制”base1;
(2)输入一个 base1 进制的数 n,检验 n 数字的合法性;
(3)输入“输出进制”base2;
(4)将 n 转换成十进制数 temp,再将 temp 转换成 base2 进制数;
(5)为防止数据溢出,限制数据位数为 6 位。
算法流程框图为:
最新课件
1
2
3
4
N
N
N
Y
Y
Y
Y
Y
N
输入n
n 二进制 八进制 十六进制 十进制
结
束 二进制 十六进制 十进制 八进制 转换十进制 转换二进制、十进制 转换二进制 转换二进制、十进制 转成并输出其他进制 转成并输出其他进制 转成并输出其他进制 转成并输出其他进制
是否继续? 输出功能菜单 开始 0 N Y Y Y Y
最新课件
3 3.5.3 逻辑功能程序
#include "stdio.h" #include<iostream>
void bishow(int m); void main() {
char x,w;
char c[10];
int i=0,err=0,quitflag=0;
int num=0;
system("color fd"); do{
system("cls");
printf("\n\n\n");
printf("\t
****** ~O(∩_∩)O~ 欢迎使用此软件 ~O(∩_∩)O~ *****\n\n");
printf("\t
**********
**********************
*************
\n");
printf("\t
>>>>>>
数制转换系统
<<<<<<<
\n");
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("\n\t
请选择:
");
do{
err=0;
scanf("%c",&x);//输入选项
getchar();
if(x>"4"||x<"0")//若输入非法,则重新输入
{
err=1;
printf("\n 输入错误,请重新输入\n");
}
}while(err);
switch(x)
{
case "1":
//输入二进制
do{
最新课件
err=0;i=0;num=0;
printf("\n\t 请输入二进制数:");
scanf("%s",c);
getchar();
while(c[i]!="\0")
//"\0"字符结尾
{
if(c[i]!="1" && c[i]!="0") err=1;//若输入数字不为 1 或 0 则输入错误
i++;
}
if(err) printf("\n\t 输入数值错误,不是二进制数!\n");
} while(err);
// err 为 1 重复上面,否则继续
i=0;
while(c[i]!="\0")//二进制转换为十进制
{
num=num*2;
if(c[i]=="1") num=num+1;
i++;
}
printf("\n\t 二进制数 %s 转换为其他进制:\n\n",c);
printf("\t********************************************\n");
printf("\t 八进制:
%o\n",num);//输出八进制
printf("\t 十进制:
%d\n",num);//输出十进制
printf("\t 十六进制:
%x\n",num);//输出十六进制
printf("\t********************************************\n\n");
printf("\t 是否需要继续?(任意键继续 N 键退出)");
scanf("%c",&w);
getchar();
if(w=="N"||w=="n") quitflag=1;
break;
case...