南邮软件设计报告_第1页
南邮软件设计报告_第2页
南邮软件设计报告_第3页
南邮软件设计报告_第4页
南邮软件设计报告_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上专心-专注-专业软件设计报告姓名:姓名: 李杨李杨 学号:学号:B2013 年年 7 月月 1 日日2013 年年 7 月月 12 日日精选优质文档-倾情为你奉上专心-专注-专业目目 录录0133345599003444523346712252精选优质文档-倾情为你奉上专心-专注-专业5精选优质文档-倾情为你奉上专心-专注-专业第一章第一章 软件设计介绍软件设计介绍 设计是把许多事物和问题抽象起来,并且抽象它们不同的层次和角度。建议用语言来抽象事务和问题,因为数学是最好的抽象语言,并且它的本质就是抽象。将复杂的问题分解成可以管理的片断会更容易。将问题或事物分解并模块化

2、这使得解决问题变得容易,分解的越细模块数量也就越多,它的副作用就是使得设计者考虑更多的模块之间的情况。 1.任务任务 软件设计的任务是从软件需求规格说明书出发,根据需求分析阶段确定的功能设计软件系统的整体结构、划分功能模块、确定每个模块的实现算法以及编写具体的代码,形成软件的具体设计方案。 2.特征特征一,抽象二,模块化三,信息隐蔽四,模块独立性:模块独立性可以从两个方面度量:1,内聚性:偶然内聚、逻辑内聚、时间内聚、过程内聚、通信内聚、顺序内聚、功能内聚。2,耦合性:内容耦合、公共耦合、外部耦合、控制耦合、标记耦合、数据耦合、非直接耦合13.设计原则设计原则一、设计对于分析应该是可跟踪的:的

3、模块可能被映射到多个上。二、设计结构应该尽可能的模拟实际问题。三、设计应该表现出一致性。四、不要把设计当成编写。五、在创建设计时就应该能够评估质量。六、评审设计以减少语义性的错误。七、设计应该模块化,将逻辑地划分为元素或子系统,并包含、 、接口和的清晰表示。4.设计过程设计过程的设计是一个将转变为软件陈述(表达)的过程。这种陈述给一个对的全局。系统通过使得设计陈述逐渐接近。这里有两个基本;第一步是初步设计 Preliminary design ,关注于如何将转换成和框架。第二步是 Detail design ,关注于将框架逐步求精细化为具体的和的算法表达。发生中的设计行为、 、算法和都需要由现

4、代程序所需的这一清晰的行为来结合起来。 Interface design 建立布局和人机交互机制。贯穿设计过程的质量由一系列的 正式评定 formal technical reviews 或 设计排演 design walkthroughs 来评价。 第二章第二章 软件开发平台简介软件开发平台简介精选优质文档-倾情为你奉上专心-专注-专业Visual C+是一个功能强大的可视化软件开发工具。自 1993年 Microsoft 公司推出Visual C+1.0后,随着其新版本的不断问世, Visual C+已成为专业程序员进行软件开发的首选工具。 虽然微软公司推出了 Visual C+.NET(

5、Visual C+7.0),但它的应用的很大的局限性,只适用于 Windows 2000,Windows XP 和 Windows NT4.0。所以实际中,更多的是以 Visual C+6.0为平台。 Visual C+6.0不仅是一个 C+编译器,而且是一个基于 Windows 操作系统的可视化集成开发环境( integrated development environment,IDE) 。Visual C+6.0由许多组件组成,包括编辑器、调试器以及程序向导 AppWizard、类向导 Class Wizard 等开发工具。 这些组件通过一个名为Developer Studio 的组件集成

6、为和谐的开发环境。 Visual C+分分类类Visual C+它大概可以分成三个主要的部分: 1 Developer Studio这是一个集成开发环境,我们日常工作的 99%都是在它上面完成的,再加上它的标题赫然写着 “Microsoft Visual C+”,所以很多人理所当然的认为,那就是Visual C+了。其实不然,虽然 Developer Studio 提供了一个很好的编辑器和很多Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道, Developer Studio 并不是专门用于 VC 的,它也同样用于VB,VJ,VID 等家族

7、的其他同胞兄弟。所以不要把Developer Studio 当成 Visual C+, 它充其量只是 Visual C+的一个壳子而已。这一点请切记! 2 MFC从理论上来讲, MFC 也不是专用于 Visual C+,Borland C+,C+Builder 和Symantec C+同样可以处理 MFC。同时,用 Visual C+编写代码也并不意味着一定要用 MFC,只要愿意,用 Visual C+来编写 SDK 程序,或者使用 STL,ATL,一样没有限制。不过, Visual C+本来就是为 MFC 打造的,Visual C+中的许多特征和语言扩展也是为 MFC 而设计的,所以用 Vi

8、sual C+而不用 MFC 就等于抛弃了Visual C+中很大的一部分功能。但是, Visual C+也不等于 MFC。 3 Platform SDK精选优质文档-倾情为你奉上专心-专注-专业这才是 Visual C+和整个 Visual Studio 的精华和灵魂,虽然我们很少能直接接触到它。大致说来, Platform SDK 是以 Microsoft C/C+编译器为核心(不是Visual C+,看清楚了) ,配合 MASM,辅以其他一些工具和文档资料。上面说到Developer Studio 没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是 NMAKE,和其他许许多多命

9、令行程序,这些我们看不到的程序才是构成Visual Studio 的基石。精选优质文档-倾情为你奉上专心-专注-专业第三章第三章 软件设计的内容软件设计的内容3.1 分数统计软件(分数统计软件(A1)3.1.1 设计题目及要求设计题目及要求课题内容:课题内容:设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。课题要求:课题要求:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行降幂排列并输出;(3)具有输入输出界面。3.1.2 设计思想及程序流程框图设计思想及程序流程框图 将任务分拆成多个函数实现

10、,以提高程序的易读性、可移植性和灵活性。因为学生的信息包括姓名和分数,为了方便,所以先定义一个student 的结构体stu数组来存放学生信息。函数主要分为菜单类和具体功能实现类。菜单类:dis_menu()用来显示菜单,用printf 语句设计你想要的界面即可; choice_menu()根据键入的字符来选择一个分支执行,起判断选择作用,为了看起来简洁明了点,选择用switchcase 语句而不是ifelse 实现。功能类:主要有两个功能,分别是录入学生信息和成绩降幂排序。input_inf()就是用来输入学生信息的,利用一个循环,将姓名和成绩分别读入到 和 stu.scor

11、e 里。为了防止输入分数时出错,在输入学生信息前手动输入本次考试总分,每次输入一个学生成绩时和总分与0 分比较,如在 0100 分范围外就报警,提示重新输入;dis_inf()用来显示输入的学生信息; dec_score()利用双层循环,定义了一个最大值下标,每一趟循环都将剩下的值同stumax_index.score 比较,若比它大,则将下标赋给 max_index,这样,一趟能够找到一个最大值,下一趟就从剩下的里面再逐一同stumax_index.score 比较。 当然,还得添加一个退出选项。程序流程框图: 精选优质文档-倾情为你奉上专心-专注-专业 3.1.3 逻辑功能程序逻辑功能程序

12、 #include#include#include#includestruct student char name10; /学生姓名 float score; /学生成绩stu100;int num,full;void dis_menu(); /菜单显示函数开 始输入学生人数输入学生姓名 name和分数 fen用程序将学生分数排序输出排序后的学生数据 结 束精选优质文档-倾情为你奉上专心-专注-专业void choice_menu(); /菜单选择程序void input_inf(); /学生信息输入函数void dis_inf(); /学生信息显示函数void dec_score(); /学

13、生成绩降幂排列int main()while(1)dis_menu();choice_menu();return 0;void dis_menu()printf(t*分数统计程序*n);printf(t* 1、输入学生成绩 *n); printf(t* 2、分数降幂排列 *n);printf(t* 3、退出程序 *n); printf(t*n);printf(t 请选择你要进行的操作:);void choice_menu()char i100;scanf(%s,i);if(strlen(i)1)printf(t 输入错误!请重新输入:); choice_menu(); elseswitch(*

14、i) case 1: printf(t 请输入学生人数:);scanf(%d,&num); printf(t 请输入本次考试总分:);scanf(%d,&full); 精选优质文档-倾情为你奉上专心-专注-专业 input_inf(); dis_inf(); break; case 2: dec_score(); dis_inf(); break; case 3: printf(t); exit(1); break; default: printf(t 输入错误!请重新输入:); choice_menu(); break; void input_inf()int i;for(i

15、=0;ifull|stui.score0)printf(t 输入错误!请重新输入:); printf(t 成绩:);scanf(%f,&stui.score); printf(n);void dis_inf() int i; printf(t 学生成绩统计如下:n); printf(t%-10st%-8stn,姓名,成绩); for(i=0;inum;i+) printf(t%-10st%-8gtn,,stui.score); printf(n);void dec_score()int i,j,max_index,n=num; struct student stu_t

16、emp; for(i=0;in-1;i+)精选优质文档-倾情为你奉上专心-专注-专业max_index=i;for(j=i+1;jstumax_index.score)max_index=j;if(max_index!=i)stu_temp=stui;stui=stumax_index;stumax_index=stu_temp;3.1.4 结果及完善方向结果及完善方向 精选优质文档-倾情为你奉上专心-专注-专业完善方向:完善方向:1.分数降幂排列显示时最好显示出具体的排名,这样人数多的时候比较容易查到排名。2.界面可以做得更漂亮些,例如输出表格式样的。3.2 打字软件(打字软件(A2)3.2

17、.1 设计题目及要求设计题目及要求课题内容:课题内容:精选优质文档-倾情为你奉上专心-专注-专业设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。通过此课题,熟练掌握数组、格式输出、字符串处理等。课题要求:课题要求:(1)随机产生一字符串,每次产生的字符串内容、长度都不同;(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;(3)具有输入输出界面。3.2.2 设计思想及程序流程框图设计思想及程序流程框图 除了界面菜单的打印和利用 switchcase 语句的菜单选择部分,主要有两部分,分别是随机字符串产生函数和字符串比较函数。rand_str(char *p,int l

18、en)主要是用了 rand(),为了限制字符串长度,防止产生过多字符,可以用 1+rand()&max 来限制字符个数在 1max 间。数字和字母的 ascii 码范围为 4857,6590,97122,为了产生这些字符可以在 48122 的随机数范围内挖掉 5864 和 9196 两端。compare()则是用来比较用户键盘输入的字符串和随机产生的字符串有多少一样的,记下正确字符数和总字符数,就能得出正确率。 为了让用户掌握更多信息,每输入一组,不仅知道正确率,还要显示打对多少个字符;用户做了多组后,能显示打了几组,正确几组。程序流程框图: 开 始输出欢迎菜单 结 束输出随机产生的字

19、符串输入用户的输入计算正确率并显示输入选项 继续?精选优质文档-倾情为你奉上专心-专注-专业3.2.3 逻辑功能程序逻辑功能程序 #include#include#include#include#define max 20 /定义产生的字符串最长为 20 个字符void rand_str(char *p,int len); /随机字符串产生函数double compare(char *p,char *q,int len,int *pnum); /输入输出比较函数int main()char p20=;char q20=;char ch20;int len,num=0,i=0,j=0;doubl

20、e F;srand(time(NULL); /清空上次的随机数 printf(t*n);printf(t* 欢迎使用打字程序 *n);printf(t*n); printf(tn);dochar p20=; char q20=; printf(nt*n);len=1+rand()%max; /字符串串长在 120 间rand_str(p,len);printf(nt*n);printf(t 请输入以上字符串:n); printf(t);fflush(stdin);/减少不必要错误 scanf(%s,q);F=compare(p,q,len,&num);if(F=1)printf(t 输

21、入正确!n);精选优质文档-倾情为你奉上专心-专注-专业i+;elseprintf(t 输入错误,您本次输入正确率:%0.2g%n,F*100); printf(t 您本次共输入正确%d 个字符,num); printf(tn); getchar();j+;printf(t 您已练习打字%d 组,共正确%d 组,j,i);printf(t 您还继续吗?请按任意键继续或者按 N 键结束:);scanf(%s,ch);while(ch0!=N&ch0!=n);printf(t);return 0;void rand_str(char *p,int len)int i;char ch;pri

22、ntf(t); for(i=0;i57&num90&num97); /只产生数字和大小写字母字符ch=num;printf(%c,num);pi=ch;double compare(char *p,char *q,int len,int *pnum)int i;int num;精选优质文档-倾情为你奉上专心-专注-专业*pnum=0;double rate;for(i=0;ilen;i+)if(pi-qi)=0)*pnum=*pnum+1;num=*pnum;rate=1.0*num/len;return rate; 3.2.4 结果及完善方向结果及完善方向 完善方向完善方向:

23、1.可以调用系统时间函数,记录用户打一组字符串的时间,算出打字速率。 2.字符串居中显示会美观一些。3.3 文本编辑器(文本编辑器(A3)3.3.1 设计题目及要求设计题目及要求课题内容:课题内容:设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,精选优质文档-倾情为你奉上专心-专注-专业如:插入、删除、查找、替换等功能。通过此课题,熟练掌握文本文件的操作及用字符数组或字符指针实现字符串操作的功能。 课题要求:课题要求:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面3.3.2 设计思想及程序流程框图设计思想及程序流程框图 由于文本编辑器需要

24、打开文件和编辑文件,设计了一个二级菜单,就是两个菜单的嵌套,实质上是 switchcase 的嵌套。一级菜单设有打开文件和退出两个选项,打开文件下还有一个二级菜单。为了增强程序容错能力,在输入错误文件路径后,会提示错误,重新输入,用一个循环来解决,直到输入正确,才退出循环。编辑功能较为繁杂。主要分为插入,删除,查找,替换四个函数部分实现。插入部分,将文本内容读入存储到 s1中,要插入的字符串放到 s2中,输入要插入的位置第 set 个字符后,先输出 s10s1set-1,再输出 s2,再把 s1剩下的字符输出。删除部分,将原字符串存储到 s1中,要删除的字符串放到 s2中。双层循环,当 s1中

25、有一个字符和 s20一样时,再分别将之后的 len2 长度的字符一一比较,如不一致,则跳出内层循环,开始第二趟外层循环。若都一致,求得一致部分的第一个字符的数组下标,这部分的 s1就不输出。查找部分,利用 strstr()函数求得查找的字符串在原字符串出现的地址 p,再减去 s10地址就可求得出现在第几个字符后。替换部分,和删除部分差不多,求得 s1和 s2开始相同的下标 a,输出 s10s1a-1到 s4,然后输出就输出替换的字符串 s3 到最后输出的 s4 中,最后把 s1a+len3及之后的字符输出到 s4 中。开始结束Choice=1Choice=2输入文件名及路径1.插入 2.删除

26、3.查找 4.替换 5.显示 6.返回 0.退出输入插入的字符串输入删除的字符串输入查找的字符串输入替换的字符串及源字符串显示文件内容1.打开文件2.退出文件能否打开?输入正确否?选择操作精选优质文档-倾情为你奉上专心-专注-专业 n y 1 3 2 4 5 03.3.3 逻辑功能程序逻辑功能程序#include#include精选优质文档-倾情为你奉上专心-专注-专业#include#includeFILE* fp=NULL;FILE* fp1;char name50;void menu0();void Open();void choose0();void menu1();void choo

27、se1();void insert();void check();void replace();void deletef();void show();void welcome();/-主程序-void main()welcome();choose0();choose1();return;void welcome()printf(ttt*n);printf(ttt* 欢迎使用文本编辑器! *n);printf(ttt*nnn);void menu0() /一级菜单printf(ttt*n);printf(ttt* 1.打开文件 *n);printf(ttt* 0.退出 *n); printf(t

28、tt*n);void choose0() /一级选择char choice;精选优质文档-倾情为你奉上专心-专注-专业char input100;int a=1,len;menu0();do printf(请选择操作:);scanf(%s,input);len=strlen(input);choice=input0;if(choice=0&choice=0&choice=5&strlen(input)=1)a=0;elsesystem(cls); printf(ttt*n); printf(ttt 无效操作,请重新选择n);printf(ttt*n);menu1();a

29、=1;switch(choice)case 1:insert();show();choose1();break;case 2:deletef();system(cls);show();choose1();break;case 3:system(cls);show();check();choose1();break;case 4:system(cls);replace();system(cls);show();精选优质文档-倾情为你奉上专心-专注-专业choose1();break;case 5:system(cls);choose0();break;case 0:system(cls);pri

30、ntf(ttt*n); printf(ttt* 欢迎下次使用 *n); printf(ttt*n);exit(1);void insert() /插入功能函数long set;char ch1;char s110000;char s2100;int i=0;int j=0;while(ch1=fgetc(fp)!=EOF)s1i=ch1;i+;rewind(fp);s1i=0;system(cls);show();printf(请输入在第几个字符后插入字符串:);scanf(%d,&set);getchar();printf(输入你插入的字符串,以#号结束:); while(ch1=g

31、etchar()!=#)/若不出现“#”继续读入 s2j+=ch1; getchar();/接收 Enter 字符int len=j;精选优质文档-倾情为你奉上专心-专注-专业fclose(fp);fp=fopen(name,w+);for(j=0;jset;j+)ch1=s1j;fputc(ch1,fp);for(j=0;jlen;j+)ch1=s2j;fputc(ch1,fp);for(j=set;ji;j+)ch1=s1j;fputc(ch1,fp);fclose(fp);system(cls);void check() /查找功能函数char str250;char str1500;c

32、har ch;char *p;char *p1;int count=0;int i=0; printf(请输入需要查找的字符串,以#号结束:);getchar(); while(ch=getchar()!=#)/若不为“#”继续输入 str2i+=ch;str2i=0;getchar();/消除 Enter 字符影响fp=fopen(name,r);if(!fp)printf(ttt *无法打开文件!*n);精选优质文档-倾情为你奉上专心-专注-专业rewind(fp);while(ch=fgetc(fp)!=EOF)str1count=ch;count+;str1count=0;fclose

33、(fp);p=strstr(str1,str2); /str2 在 str1 中第一次出现的位置p1=&str10;system(cls);if(p!=NULL)printf(ttt 文本中存在该字符串,在第%d 个字符后 nn,p-p1);elseprintf(ttt 文本中不存在这样的字符串 nn);void replace() /替换功能函数char s1100,s2100,s3100,s4100,ch;int i=0; int j,len1,len2,len3,len4,count=0;int num=0;show();printf(请输入被替换字符串,以#号结束:);prin

34、tf(n);getchar(); while(ch=getchar()!=#)/若不为“#”继续输入 s2i+=ch; getchar();/消除 Enter 字符的影响len2=i;printf(请输入替换的字符串,以#号结束:);printf(n);i=0; while(ch=getchar()!=#)/若不为“#”继续输入 s3i+=ch;len3=i; getchar();/消除 Enter 字符的影响fp=fopen(name,r);if(!fp)精选优质文档-倾情为你奉上专心-专注-专业printf(ttt*无法打开文件!*n);rewind(fp);while(ch=fgetc(

35、fp)!=EOF)s1count=ch;count+;s1count=0;len1=strlen(s1);fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s2j)s4num=s1i;num+;break;if(j=len2-1)for(int k=0;klen3;k+)s4num=s3k;num+;i+=len2-1;s4num=0;len4=strlen(s4); fp=fopen(name,w);for(j=0;jlen4;j+)ch=s4j;fputc(ch,fp);fclose(fp);return;精选优质文档-倾情为你奉

36、上专心-专注-专业void deletef() /删除功能函数char s1100,s2100,s3100,ch;int i=0,j,len1,len2,len3,count=0;system(cls);show();printf(请输入被删除字符串,以#号结束:);getchar(); while(ch=getchar()!=#)/若不为“#”继续读入 s2i+=ch; getchar();/接收 Enter 字符printf(n);len1=strlen(s1);len2=i;int num=0;fp=fopen(name,r);if(!fp)printf(ttt* 文件无法打开!*n);

37、rewind(fp);while(ch=fgetc(fp)!=EOF)s1count=ch;count+;s1count=0;fclose(fp);for(i=0;ilen1;i+)for(j=0;jlen2;j+)if(s1i+j!=s2j)s3num=s1i;num+;break;if(j=len2-1)精选优质文档-倾情为你奉上专心-专注-专业s3num=s1i+len2;num+;i+=len2;s3num=0;len3=strlen(s3);fp=fopen(name,w);for(j=0;jlen3;j+)ch=s3j;fputc(ch,fp);fclose(fp);return;

38、3.3.4 结果及完善方向结果及完善方向精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业精选优质文档-倾情为你奉上专心-专注-专业 完善方向:完善方向:1.查找只能查找文中第一次出现该字符串的地方,可以加一个循环,查出所有出现该字符串的地方。 2.要是查找出的字符能有其他颜色高亮显示就不错了,只是从没接触过这种代码,不知能不能实现。3.4 加密软件(加密软件(A4)3.4.1 设计题目及要求设计题目及要求精选优质文档-倾情为你奉上专心-专注-专业课题内容:课题内容:设计一个加密程序。包括明文与密钥的转换。通过此课题,

39、熟练掌握数组、格式输出、字符串处理、类型转换等。课题要求:课题要求:(1)输入任意一段明文 M,以及密钥 K;(2)根据以下公式将其转换为密文 C。 Ci = mi + K ,其中 i = 0,1,n-1 , K 为密钥; (3)具有输入输出界面。3.4.2 设计思想及程序流程框图设计思想及程序流程框图 加密解密较为简单,只要 m中每个字符的 ascii 码值加上密钥 K 即可。由于 ascii 值表中出现字符的范围在 33126,故只把这些码值存入数组 a中,记录码文下标 c=(mi+key-33)%94,则码文为 codei=ac,这样密钥无论多大都可以。解密过程类比于加密。程序流程框图:

40、3.4.3 逻辑功能程序逻辑功能程序#include#include 开 始输出功能菜单输入 n num结 束输入明文 m和密钥 kCi=mi+k输出 m 和密文C输入密文C 和密钥 k mi=Ci-k输出密文 C 和明文 m精选优质文档-倾情为你奉上专心-专注-专业#include void dis_menu();void choice();void encryption(char *m, char *c); void decryption(char *m, char *c); int main()while(1)dis_menu(); choice();return 0;void dis_

41、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 choice() char m100=; char code100=; char n100; scanf(%s,n); if(strlen(n)1) printf(t 输入错误!请重新输入:); choice(); else switch(*n) case 1: encryption(m, code); break;精选优质文档-

42、倾情为你奉上专心-专注-专业 case 2: decryption(m, code); break; case 3: printf(t); exit(1); break; default: printf(t 输入错误!请重新输入:); choice(); break; void encryption(char *m, char *code) /加密函数int i,len,c;int key; char a94;for(i=0;i94;i+)ai=i+33;printf(t 请输入需加密的明文:);scanf(%s,m);printf(t 请输入密钥:);scanf(%d,&key);l

43、en=strlen(m);printf(t 你输入的明文为:);printf(%sn,m); for(i=0;ilen;i+)c=(mi+key-33)%94;codei=ac;printf(t 加密后的密文为:);printf(%snn,code);void decryption(char *m, char *code) /解密函数int i,len,key,c; char a94;for(i=0;i94;i+)ai=i+33;printf(t 请输入需解密的密文:);scanf(%s,code);printf(t 请输入密钥:);精选优质文档-倾情为你奉上专心-专注-专业scanf(%d,

44、&key); len=strlen(code);printf(t 你输入的密文为:);printf(%sn,code); for(i=0;ilen;i+)c=codei-key-33; while(c0)c=c+94; mi=ac;printf(t 破解后的明文为:);printf(%snn,m);3.4.4 结果及完善方向结果及完善方向精选优质文档-倾情为你奉上专心-专注-专业完善方向:完善方向:加密的明文和解密的码文都要手动输入,实际运用中,可能会有很长的明文和码文,最好设计成从外部文件中读入明文或码文。 设计题目及要求设计题目及要求课题内容:课题内容:设计一个进制

45、转换器程序。包括二进制、八进制、十进制、十六进制数互相转换。通过此课题,熟练掌握字符串、格式输出、进制换算的各种操作。课题要求:课题要求:(1)可输入二进制、八进制、十进制、十六进制数;(2)将已输入的数转换成其余进制的数;(3)具有输入输出界面。3.5.2 设计思想及程序流程框图设计思想及程序流程框图 首先菜单要设计成两级形式,第一级菜单选择输入的进制,第二级菜单选择输出的进制。 所有数的进制转化通过两个函数来实现,一个是将其他进制的数转换为十进制,另一个是将十进制的数转换为其他进制的。若输入的数为十进制,只要调用后一个子函数即可;若输入的数为其他进制的,则先调用前一个子函数,然后调用后一个

46、子函数即可。 为了提高容错性,在输入某一 n 进制的数时应判断每一位的数是否不大于 n,若大于等于 n,则提示输入错误,重新输入。精选优质文档-倾情为你奉上专心-专注-专业3.5.3 逻辑功能程序逻辑功能程序#include#include#include#includevoid dis_menu(); /菜单显示void cho_menu(); /菜单选项void dis_menu1();void cho_menu1(); 开 始输出功能菜单 输入进制 进制选择判断输入 str输入 str输入 str输入 str二进制八进制十进制十六进制 结 束转成十进制十进制转换成其他进制错误精选优质文档

47、-倾情为你奉上专心-专注-专业void DX_transfer(int num,int n); /十进制转换为其他进制int XD_transfer(int n);/其他进制转换成十进制int flag=1; char p500;int main()while(flag)dis_menu();cho_menu();return 0; void dis_menu()printf(t=n);printf(t-欢迎使用进制转换器-n);printf(t=nnn);printf(t-1、输入二进制数字-n); printf(t-2、输入八进制数字-n);printf(t-3、输入十进制数字-n); p

48、rintf(t-4、输入十六进制数字-n);printf(t-5、退出程序-n);printf(t 请选择你要进行的操作:); void cho_menu()char c;scanf(%s,p);if(p05|strlen(p)1)printf(t 输入错误!请重新输入:);cho_menu();elseswitch(*p) 精选优质文档-倾情为你奉上专心-专注-专业 case 1: dis_menu1(); cho_menu1();printf(tn); break; case 2: dis_menu1(); cho_menu1(); printf(tn); break; case 3: d

49、is_menu1(); cho_menu1(); printf(tn); break; case 4: dis_menu1(); cho_menu1(); printf(tn); break; case 5: printf(t); printf(-再见!-n); exit(1); break; default: printf(t 输入错误!请重新输入:); cho_menu(); break; printf(t 是否继续使用该系统?任意键继续或 N 键结束: ); scanf(%c,&c); printf(n); if(c=110|c=78) flag=0; printf(t-再见!-

50、n); void dis_menu1() 精选优质文档-倾情为你奉上专心-专注-专业printf(t=nnn);printf(t-1、转换为二进制数字-n); printf(t-2、转换为八进制数字-n);printf(t-3、转换为十进制数字-n); printf(t-4、转换为十六进制数字-n);printf(t-5、返回-n);void cho_menu1() int num,n; char m500; printf(t 请选择你要进行的操作:); scanf(%s,m); if(m05|strlen(m)!=1)printf(t 输入错误!请重新输入:);cho_menu1(); el

51、seswitch(*m) case 1:switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); DX_transfer(num,2); printf(tn); break; case 2: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;精选优质文档-倾情为你奉上专心-专注-专业case4:n=16;break; num=XD_transfer(n); DX_transfer(num,8)

52、; printf(tn); break; case 3: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); printf(t 转换 10 进制输出为:%dn,num); printf(tn); break; case 4: switch(*p)case1:n=2;break;case2:n=8;break;case3:n=10;break;case4:n=16;break; num=XD_transfer(n); DX_transfer(num,16)

53、; printf(tn); break; case 5: printf(t); cho_menu() ; break; default: printf(t 输入错误!请重新输入:); cho_menu1(); break; 精选优质文档-倾情为你奉上专心-专注-专业void DX_transfer(int num,int n)char tra100;int i=0;printf(t 转换%d 进制输出为:,n);if(n9&num%1616)trai=A+(num%16-10);elsetrai=0+num%16;num=num/16;i+;trai=0;while(i!=0)putc

54、har(tra-i);printf(n);int XD_transfer(int n)char temp100,ch,m;int num=0,i=0,flag=1,count=0;while(flag)i=0;flag=0;精选优质文档-倾情为你奉上专心-专注-专业count=0;fflush(stdin); /清空输入缓冲区,确保读入无错printf(t 请输入%d 进制数:,n); m=48+n-1;if(n16)while(ch=getchar()!=n)if(chm)printf(t 输入数字有误!n);flag=1;break;tempi=ch;count+;i+;tempi=0;f

55、or(i=0;icount;i+)num=num+(tempi-0)*(int)pow(n,(count-i-1);/计算值 else while(ch=getchar()!=n)if(ch9)&(chF)&(chf)printf(t 输入数字有误!n);flag=1;break;tempi=ch;count+;i+; tempi=0;/ 输入正确十六进制结束 for(i=0;i=0&tempi=A&tempi=a&tempi=f) num=num+(tempi-a)+10)*(int)pow(16,(count-i-1); return num;3.5

56、.4 结果及完善方向结果及完善方向精选优质文档-倾情为你奉上专心-专注-专业完善方向:完善方向:1.界面比较难看,要是用图形化语言编写,将会直观明了不少。 2.为了添加二级菜单,导致程序比较冗长,可以再精简。3.6 学生成绩核算系统的设计与实现(学生成绩核算系统的设计与实现(B1)3.6.1 设计题目及要求设计题目及要求课题内容:课题内容:精选优质文档-倾情为你奉上专心-专注-专业设计一个学生成绩核算系统。能实现从文件中读取学生成绩资料,并提供成绩查询统计服务。通过此课题,熟练掌握文件、数组、结构体的各种操作以及友好界面的设计。课题要求:课题要求:(1)按班级按课程从文件中读入相应的平时成绩、

57、期中考试成绩和期末考试成绩。(2)三个成绩对总评成绩的百分比被定义为常数,各占总成绩的 30%、30%和 40%。(3)计算每位学生的总评成绩。(4)计算该班级本课程的总平均成绩。(5)计算处于优、良、中、及格、不及格的学生人数以及占总人数的百分比。其中100-90 为优,89-80 为良,79-70 为中,69-60 为及格,60 分以下为不及格。(6)按要求输出成绩在优、良、中、及格、不及格各区间的学生学号、成绩。3.6.2 设计思想及程序流程框图设计思想及程序流程框图1、建立文本文件、建立文本文件 note.dat,第一行为学生的总人数,其后为每个学生的成绩,每个学生的信息占一行,格式为

58、: 学号(9 位) 平时成绩 期中考试成绩 期末考试成绩例如: 15B 88 75.5 66 B 91 79.5 76B 85 75 77 B 79 82 80.5B 94 83.5 81.5 B 80 69 68B 82 77 71 B 77 57 58B 91 88 86 B 96 89 90B 70 45.5 50 B 74 65 66B 81 71 76 B 83 75 77B 85 78 79 2、从文件中读入、从文件中读入相应的平时成绩、期中考试成绩和期末考试成绩时,数据的读入方式可用 C 语言中的文件读入方式进行,也可用 C+中的流实现。 3、 每次计算出的结果可在屏幕输出每次计

59、算出的结果可在屏幕输出,并把每个学生的总评成绩输入到新文件 out.dat 文件中,格式为: 学生学号(9 位) 总评成绩 成绩等级 例如: B 88 B 为查询方便,可把总评成绩所处等级(优、良、中、及格、不及格)同时保存在文件out.dat 中,分别用字母 A、B、C、D、E 表示。4、数据结构(可用、数据结构(可用 C+实现)实现)精选优质文档-倾情为你奉上专心-专注-专业两个类:学生(student)和学生成绩(marks)(1)学生类数据成员:学号、姓名、专业等数据类型属性(私有、保护、公有)方法:构造函数和析构函数设置学号void SetId( long );读取学号long Ge

60、tId( ); 等等(2)学生成绩类 从学生类派生数据成员:平时成绩、期中考试成绩、期末考试成绩、总评成绩、成绩等级数据类型属性(私有、保护、公有)方法:读入成绩void In( ifstream& ); 或 void In( FILE* );输出成绩void Out( ofstream& ); 或 void Out( FILE* );显示成绩void print( );求总评成绩void ComputeZP( );求等级void ComputeDJ( );读取总评成绩float GetZP( );读取等级char GetDJ( ); 等等5、设计、设计基本思想:自顶向下、逐步细化主要功能:(1)总控模块功能:编制菜单,不断从菜单选择计算或查询功能执行,直到退出。程序流程图:(2)计算(3)查询6、实现、实现 编程时要求每一个类建两个文件,即类的定义和实现文件。注意包含相关的文件。总控模块

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论