




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软件设计报告姓名:琳学号:B120604212023年5月16日~2023年6月16日目录第一章软件设计介绍 1第二章软件开发平台简介 2第三章 软件设计的内容 33.1 分数记录软件(A1) 33.1.1设计题目及规定 33.1.2设计思想及程序流程框图 33.1.3逻辑功能程序 33.1.4结果及完善方向 33.2 打字软件(A2) 33.2.1设计题目及规定 33.2.2设计思想及程序流程框图 33.2.3逻辑功能程序 33.2.4结果及完善方向 33.3 文本编辑器(A3) 33.3.1设计题目及规定 33.3.2设计思想及程序流程框图 43.3.3逻辑功能程序 43.3.4结果及完善方向 43.4 加密软件(A4) 43.4.1设计题目及规定 43.4.2设计思想及程序流程框图 43.4.3逻辑功能程序 43.4.4结果及完善方向 43.5 进制转换器(A5) 43.5.1设计题目及规定 43.5.2设计思想及程序流程框图 43.5.3逻辑功能程序 43.5.4结果及完善方向 53.6 学生成绩核算系统的设计与实现(B1) 53.6.1设计题目及规定 53.6.2设计思想及程序流程框图 53.6.3逻辑功能程序 53.6.4结果及完善方向 53.7 模拟电信计费系统的设计与实现(B2) 53.7.1设计题目及规定 53.7.2设计思想及程序流程框图 53.7.3逻辑功能程序 53.7.4结果及完善方向 5第四章心得体会 6第一章软件设计介绍一、所涉及的课程及知识点《高级语言程序设计》:常量、变量、表达式的基本知识;函数的定义与调用;文献读写;数组、指针、结构体等自定义类型的使用;排序等知识。二、目的与任务目的:通过集中时间上机实验,对学生的程序设计能力进行一次综合训练,使学生充足发挥已有的编程能力,熟悉编译环境。选择若干课题,进行审题、分析、设计和调试,在程序准备、程序实现、完毕文档、答辩验收过程中,将全面巩固已学过的编程知识,全面提高编程技能,在编程风格、调试器的使用、测试技术等方面得到全面训练。学生在程序设计过程中,学生需要查找各种资料获取有用信息解决实际问题,自学相关知识,提高文档书写能力,加强团队合作意识,提高口头表达能力。任务:《软件设计》课题共分A、B两档。A档共5题,题目较简朴,第一周完毕;B档共2题,题目是综合性的,较复杂,第二周完毕。三、重要仪器设备硬件:微型计算机软件:C、C++、VisualC++等四、参考书【1】朱立华,王立柱.C语言程序设计.北京:人民邮电出版社,2023【2】朱立华,朱建,俞琼.面向对象程序设计及C++.北京:人民邮电出版社,2023【3】张引等.C程序设计基础课程设计.浙江:浙江大学出版社,2023
第二章软件开发平台简介软件开发平台是一种软件开发工具,是以通用技术架构(例如MVC)为基础,集成常用建模工具、二次开发包、基础解决方案等而成。可以大幅缩减编码率,使开发者有更多的时间关注客户的需求,在项目的需求、设计、开发、测试、部署、维护等各个阶段均可提供强大的支持。软件开发平台有两种平台模式,一种是传统的c/s架构模式,一种是现在比较流行的b/s架构模式。软甲件开发平台的分类,一般有三种:一种是SUN公司的SUNONE框架平台,一种是LAMP,它是Linux、Apache、Mysql、PHP四项技术的缩写,尚有一种是.NETFramework(一般简称为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桌面应用程序的软件组件,用该平台创建的应用程序在CommonLanguageRuntime(通用语言运营环境)的控制下进行。CLR是一个软件引擎,用来加载应用程序,确认他们可以没有错误的执行,进行相应的安全许可验证,执行应用程序,然后在运营结束后将他们删除。类库集提供了使应用程序可以读写XML数据、在Internet上通信、访问数据库等的代码。所有的类库都建立在一个基础的类库之上,他提供管理使用最为频繁的数据类型(例如数值或文本字符串)的功能,以及诸如文献输入/输出等底层功能。VisualStudio是微软公司推出的开发环境,VisualStudio可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。VisualStudio是目前最流行的Windows平台应用程序开发环境。VisualStudio2023涉及各种增强功能,例如可视化设计器(使用.NETFramework3.5加速开发)、对Web开发工具的大量改善,以及可以加速开发和解决所有类型数据的语言增强功能。VisualStudio2023为开发人员提供了所有相关的工具和框架支持,帮助创建引人注目的、令人印象深刻并支持AJAX的Web应用程序。开发人员可以运用这些丰富的客户端和服务器端框架轻松构建以客户为中心的Web应用程序,这些应用程序可以集成任何后端数据提供程序、在任何当前浏览器内运营并完全访问ASPNET应用程序服务和Microsoft平台。.NET支持多种程序设计语言如:C++.NET、VB.NET、ASP.NET、C等,实现了语言互用性。而Java只能用Java语言。随着开源潮流的蓬勃发展,开放源代码的LAMP已经与J2EE和.NET商业软件形成三足鼎立之势。
软件设计的内容分数记录软件(A1)3.1.1设计题目及规定课题内容:设计一个分数记录程序。涉及学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文献的使用,掌握程序设计的基本方法及和谐界面的设计。课题规定:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行降幂排列并输出;(3)具有输入输出界面。3.1.2设计思想及程序流程框图设计思想为:建立学生结构体数组,结构体成员涉及存储姓名的字符型数组以及存储分数的整型,使用for循环语句从输入处获取n个学生的姓名和成绩,成绩输入的信息存入结构体数组。再选择按成绩降幂排名,将结构体数组从头进行输出。算法流程框图为:开始开始输入学生人数输入学生人数清屏清屏N输入是否对的?N输入是否对的?输入学生姓名name和分数grade输入学生姓名name和分数grade自动降幂排序自动降幂排序输出排序后的成绩单输出排序后的成绩单结束结束3.1.3逻辑功能程序#include<stdio.h>#include<string.h>#include<stdlib.h>structstudent//存放学生信息的结构体{ charname[20];//字符型数组存放姓名 intgrade;//成绩类型}temp,std[100];intmain(){interr;charx[5]; intn; inti; intm; charch[20]; system("colorF9");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转换成整型nfor(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"); return0;}3.1.4结果及完善方向实验结果:初始界面:输入学生信息之后直接排序,界面如图所示:若所输入的学生成绩在有效范围(0~100)之外系统将会提醒输入错误,界面如下图:程序分析:此程序功能上满足基本的题目规定,可以做到输入学生的姓名和成绩,可以按成绩降幂排列并输出。完善方向:基本功能已实现,对于实际的系统,接下来完善的功能的是可以选择不同的科目进行输入,可以选择进行降幂或者升幂排序,同时能添加或删除学生信息,对于成绩相同的学生进行并列排名。打字软件(A2)3.2.1设计题目及规定课题内容:设计一个打字程序。涉及随机产生字符串,以及字符串比较和记录。通过此课题,纯熟掌握数组、格式输出、字符串解决等。课题规定:(1)随机产生一字符串,每次产生的字符串内容、长度都不同;(2)根据(1)的结果,输入字符串,判断输入是否对的,输出对的率;(3)具有输入输出界面。3.2.2设计思想及程序流程框图设计思想为:运用函数库里提供的产生随机函数rand()产生随机的字符串长度,默认将长度定位在1至10个字符。再产生一串由大小写字母以及数字组成的随机字符串,每产生一个字符串就按字保存至数组里。显示产生的字符串,开始打字后,将输入字符串保存至数组,打字完毕。再与产生字符进行逐个比较,若相同,则对的个数加1,最终得出对的率,输出显示。算法流程框图为:开始开始随机产生字符串随机产生字符串输入字符串输入字符串依次比较,计算对的率依次比较,计算对的率 输出对的率输出对的率YY是否继续是否继续NN结束结束3.2.3逻辑功能程序#include<stdio.h>#include<time.h>#include<stdlib.h>#include<iostream>voidmain(void){inti,num,flag,m=0,k,over=1; charstr[100];//产生随机数组 charstr1[100];//输入随机数组 charc; floatp; system("colorF9"); 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;//产生大写字母elseif(flag==1)str[k]='a'+rand()%26;//产生小写字母 elsestr[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结果及完善方向初始界面:即随机产生的字符串为输出页面当输入的字符串与随机产生的字符串一致时,对的率为100%,如图:当输入的字符串与随机产生的字符串不一致时,程序将计算对的率并给出输入对的的个数,如图:程序结果分析:此程序能保证每次产生的字符串不同样,且能对的地输出准确率,基本完毕了打字训练的任务。考虑到程序的实用性,可认为程序添加计时功能、记录保存功能等,可以使使用者更加灵活地运用打字软件。程序完善方向:对于这个程序,局限性的就是可以添加计时功能,在打字前,可以询问用户是否进行计时,还可以添加功能,由用户自己选择可从从其他文献导入一段字符串。文本编辑器(A3)3.3.1设计题目及规定课题内容:设计一个简朴的文本编辑器,该系统规定对一个文本文献中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。通过此课题,纯熟掌握文本文献的操作及用字符数组或字符指针实现字符串操作的功能。课题规定:(1)编辑文本;(2)保存、打开指定位置的文本文献;(3)具有输入输出界面。3.3.2设计思想及程序流程框图设计思想为:在主菜单可选择建立文本、编辑文本、读取文本和退出程序。以只写方式编辑文本,若文本不存在则提醒“不能打开文献”,打开的文献则输入的内容以“#”作为结束标记;读取文献时,提醒需要读取的目的文本途径,将文本里的内容输出。算法流程框图为:开始开始输出功能菜单输出功能菜单输入选项chooseN输入选项chooseNNNNchoose=4choose=3choose=2choose=1Nchoose=4choose=3choose=2choose=1NN输入途径输入途径输入途径输入途径输入途径输入途径文献不存在文献不存在文献不存在文献不存在文献不存在文献不存在YNNYNNYYN建立文本编辑文本YYN建立文本编辑文本输出文本输出文本结束结束3.3.3逻辑功能程序#include<stdio.h>#include<time.h>#include<stdlib.h>voidmenu1(){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"); }voidmenu2(){printf("\n\n"); printf("*******编辑文献功能*******\n"); printf("\n"); printf(">>>>>1.查找<<<<<\n");printf(">>>>>2.删除<<<<<\n");printf(">>>>>3.插入<<<<<\n");printf(">>>>>4.替换<<<<<\n");printf(">>>>>0.返回上级菜单<<<<<\n"); }intoutput(){charfilepath[30];//途径 FILE*fp; charch;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); return0;}intedit(intn){inti=0,x=0,fc=0,fch=0,fs=0,ft=0,a; char*p;intc=0,j;chartest[500]; charm; charch; charhou; charhuan;charfilepath[30];//途径chart; FILE*fp;switch(n){case1://查找功能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; case2://删除功能 do {inta=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;case3://插入功能 do { inta=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(); return0; }printf("\n请输入要插入的字符:\n"); scanf("%c",&t); getchar(); intx=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;case4://替换功能 do { inta=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(); return0; }printf("请输入您想要替换的字符:\n"); scanf("%c",&huan); getchar(); intx=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;case0:break;default:printf("\n输入错误!");return0; }return0;}voidmain(){system("colorf9");inti=0,quitflag=0,a;//标志符intn;charch; charfilepath[30];//途径 FILE*fp;while(!quitflag)//若为选择退出则继续{system("cls");//清屏 menu1();printf("请选择:"); scanf("%d",&a);//输入选择 getchar(); //接受Enter键字符 switch(a) { case1://写入文献 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; }case2://查看文献output(); getchar(); break; case3://编辑文献menu2();printf("请选择:");scanf("%d",&n); edit(n);break;case0:quitflag=1;break;//若输入0,则退出标志符为1default:printf("输入错误!"); }}}3.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解密Y解密输出明文输出明文NN结束结束3.4.3逻辑功能程序#include<stdio.h>#include<string.h>#include<stdlib.h>#include<conio.h>#include<ctype.h>voidmenu();intitn(chars[]);voidJiami(charm[],intk);voidJiemi(charm[],chary[]);intmain(){charm[1000];//输入的明文chary[1000];//输入的密钥chars[10];charm1[1000];charch;intk,choice;inti,n; system("colorfd");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);return0;}voidmenu(){printf("\n\n\n\t****************~O(∩_∩)O~欢迎进入此软件~O(∩_∩)O~******************\n");printf("\t******************************************************************\n");printf("\t>>>>>>>>>>加密系统<<<<<<<<<<\n");printf("\t******************************************************************\n\n");}intitn(chars[]){//输入字符串转换为数值inti,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; returnk;}voidJiami(charm[],intk){//加密inti,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");}voidJiemi(charm[],chary[]){intcount=0,i,f;chars[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);}3.4.4结果及完善方向初始界面:加密过程:解密过程:密匙输入错误时:当密匙三次输入错误时,解密失败:F.退出界面程序结果分析:此程序基本完毕功能,能实现字符串的加密与解密,具有较和谐的界面,能实现多次加密与解密。程序完善方向:此程序没有将加密和解密模块分开,应在程序上加以完善。界面可以做得更和谐。进制转换器(A5)3.5.1设计题目及规定课题内容:设计一个进制转换器程序。涉及二进制、八进制、十进制、十六进制数互相转换。通过此课题,纯熟掌握字符串、格式输出、进制换算的各种操作。课题规定:(1)可输入二进制、八进制、十进制、十六进制数;(2)将已输入的数转换成其余进制的数;(3)具有输入输出界面。3.5.2设计思想及程序流程框图设计思想:(1)输入“输入进制”base1;(2)输入一个base1进制的数n,检查n数字的合法性;(3)输入“输出进制”base2;(4)将n转换成十进制数temp,再将temp转换成base2进制数;(5)为防止数据溢出,限制数据位数为6位。算法流程框图为:开始开始输出功能菜单输出功能菜单输入n输入nnn12340十六进制八进制二进制十进制0十六进制八进制二进制十进制N十六进制转换二进制、十进制转换二进制、十进制转换二进制是否继续?转成并输出其他进制转成并输出其他进制转成并输出其他进制转成并输出其他进制转换十进制二进制十进制八进制NNNN十六进制转换二进制、十进制转换二进制、十进制转换二进制是否继续?转成并输出其他进制转成并输出其他进制转成并输出其他进制转成并输出其他进制转换十进制二进制十进制八进制结束YYYY结束YYYYYYYYYN3.5.3逻辑功能程序#include"stdio.h"#include<iostream>voidbishow(intm);voidmain(){ charx,w; charc[10]; inti=0,err=0,quitflag=0; intnum=0; system("colorfd");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'2'://输入八进制 do{ err=0;i=0;num=0; printf("\n\t请输入八进制数:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'7'||c[i]<'0')err=1;//若输入数据不在0~7间则输入错误 i++; } if(err)printf("\n输入数值错误,不是八进制数!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*8; num=num+c[i]-48; i++; } printf("\n\t八进制数%s转换为其他进制:\n\n",c); printf("\t********************************************\n"); bishow(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'3'://输入十进制 do{ err=0;i=0;num=0; printf("\n\t请输入十进制数:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]>'9'||c[i]<'0')err=1;//若输入数据为非数字符号,则错误 i++; } if(err)printf("\n输入数值错误,不是十进制数!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*10; num=num+c[i]-48; i++; } printf("\n\t十进制数%s转换为其他进制:\n\n",c); printf("\t********************************************\n");bishow(num); printf("\t八进制:%o\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'4'://输入十六进制 do{ err=0;i=0;num=0; printf("\n\t请输入十六进制数:"); scanf("%s",c); getchar(); while(c[i]!='\0') { if(c[i]<='9'&&c[i]>='0')err=0;//若输入数据为非数字符号,则错误 elseif(c[i]>='a'&&c[i]<='f')err=0; elseif(c[i]>='A'&&c[i]<='F')err=0; elseerr=1; i++; } if(err)printf("\n输入数值错误,不是十六进制数!\n"); }while(err); i=0; while(c[i]!='\0') { num=num*16; if('0'<=c[i]&&c[i]<='9')num=num+c[i]-48; if('a'<=c[i]&&c[i]<='f')num=num+c[i]-97+10; if('A'<=c[i]&&c[i]<='F')num=num+c[i]-65+10; i++; } printf("\n\t十六进制数%s转换为其他进制:\n\n",c); printf("\t********************************************\n");bishow(num); printf("\t八进制:%o\n",num); printf("\t十进制:%d\n",num); printf("\t********************************************\n\n"); printf("\t是否需要继续?(任意键继续N键退出)"); scanf("%c",&w);getchar(); if(w=='N'||w=='n')quitflag=1; break; case'0': quitflag=1; break; } }while(!quitflag); }voidbishow(intm)//转换成二进制数{ intb[20]; inti=0;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结果及完善方向初始界面:当输入为二进制时:当输入为八进制时:当输入为十进制时:当输入为十六进制时:输入错误时,程序将提醒输入错误并回到输入界面,如图所示:程序结果分析:本程序基本实现功能,且能实现16以下的任意进制间的互相转换,在输入非法进制数时能报错提醒,并可以多次转换。程序完善方向:本程序只能实现整数进制之间的转换,应对代码进行进一步优化,以实现小数进制间的互相转换;数字的大小受到一定的限制,可以尝试用数组解决大数间进制转换问题;题输出界面可以进一步美化。学生成绩核算系统的设计与实现(B1)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、显示学生成绩;2、显示学生的总评成绩及该班级本课程的总平均成绩;3、显示学生的成绩等级及占总人数的比例;4、显示成绩在各等级区间的学生学号、成绩;5、退出程序。程序先判断读取的文献是否存在,不存在则显示打开文本错误;存在则读取文献中的学生的信息,然后设计程序将每位学生的总评成绩以及该班级本课程的总平均成绩
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西贵港市港南中学三文科班2025年物理高二下期末预测试题含解析
- 浙江省公立寄宿学校2025年物理高一第二学期期末经典模拟试题含解析
- 2025年广西南宁市金伦中学、华侨、新桥、罗圩中学物理高二下期末复习检测模拟试题含解析
- 2025届山东省济宁市鱼台一中物理高二第二学期期末检测试题含解析
- 2025届江苏省江阴市暨阳中学高二物理第二学期期末综合测试试题含解析
- 二零二五年度高科技电子产品代理购销合同协议书
- 二零二五年度牛老师个性化技术服务合同下载平台
- 2025版XX个人住房装修贷款合同模板
- 2025版标准仓储物流合同范本
- 二零二五年OEM光伏产品委托制造及安装服务合同
- DB46-T 707-2025 榴莲栽培技术规程
- 五升六数学暑假作业每日一练打印练习
- 2025年入党考试题及答案
- 2025SYB创业考试题库及答案
- 新乡市县以下事业单位联考招聘笔试真题2024
- 中医推拿培训课件
- 电商客服考核试题及答案
- 铜排、铝排载流量安及铜排载流计算
- 2025贵州省水利投资(集团)有限责任公司招聘84人笔试备考题库含答案详解
- 2025贵州省水利投资(集团)有限责任公司招聘84人笔试备考题库附答案详解(研优卷)
- 秸秆粉碎还田合同范本
评论
0/150
提交评论