1、目 录第一章 软件设计介绍1第二章 软件开发平台简介2第三章软件设计的内容33.1分数统计软件(A1)33.1.1设计题目及要求33.1.2设计思想及程序流程框图33.1.3逻辑功能程序43.1.4结果及完善方向73.2打字软件(A2)93.2.1设计题目及要求93.2.2设计思想及程序流程框图93.3.3逻辑功能程序93.2.4结果及完善方向123.3文本编辑器(A3)133.3.1设计题目及要求133.3.2设计思想及程序流程框图133.3.3逻辑功能程序133.3.4结果及完善方向163.4加密软件(A4)173.4.1设计题目及要求173.4.2设计思想及程序流程框图183.4.3逻辑
2、功能程序183.4.4结果及完善方向213.5进制转换器(A5)233.5.1设计题目及要求233.5.2设计思想及程序流程框图233.5.3逻辑功能程序243.5.4结果及完善方向273.6学生成绩核算系统的设计与实现(B1)293.6.1设计题目及要求293.6.2设计思想及程序流程框图293.6.3逻辑功能程序303.6.4结果及完善方向363.7模拟电信计费系统的设计与实现(B2)393.7.1设计题目及要求393.7.2设计思想及程序流程框图393.7.3逻辑功能程序403.7.4结果及完善方向47第四章 心得体会50第一章 软件设计介绍一、软件设计的性质、目的本课程是一门技能训练课
3、,为在校学生的必修课程。通过设计培养学生良好的编程习惯,使学生掌握编程的基本步骤,规范学生的编写程序的格式,锻炼学生编写程序的能力,为将来编写较大程序的打好基础。二、软件设计的任务通过集中时间上机实验,使学生充分发挥已有的编程能力,熟悉编译环境,选择若干课题,进行审题、分析、设计和调试,并根据要求写出实验报告。三、实验内容软件设计课题共分A 、B两档。A档共5题,第一周完成;B档共2题,第二周完成。四、考核办法考核采取程序验收和面试的方法进行。其中,程序验收及面试占50%,实验报告占50%。在考核过程中,若发现抄袭程序者,所抄袭的程序按零分记。注:如有以下情况,视为抄袭:1、 与已验收的程序明
4、显雷同;2、 面试时不能解释程序中的某些基本功能,或对所写程序一无所知。第二章 软件开发平台简介 Microsoft Visual C+是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。它不但具有程序框架自动生成、灵活方便的类管理、代码编写 和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界 面。 它以拥有“语法高亮”,IntelliSense(自 动编译功能)以及高级除错功能而著称。比如,它允许用户进行远程调试,单步执行等。还有允许用户在调试期间重新编译被修改的代码,
5、而不必重新启动正在调试 的程序。其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。第三章 软件设计的内容3.1 分数统计软件(A1)3.1.1设计题目及要求 题目:分数统计 要求:(1)输入某班级学生的姓名、分数; (2)对(1)的分数进行降幂排列并输出; (3)具有输入输出界面。3.1.2设计思想及程序流程框图 设计思想:先输出程序菜单,然后按照菜单选项进行操作,选择选项一:即先输入要排序的学生人数,然后利用循环语句按次输入学生姓名和成绩,直至将学生姓名和分数全输入,输入完后按enter后,在程序界面上显示刚
6、才输入的内容。选择选项二:则运行程序中的按照成绩的降序功能输出排序后的学生学号、学生姓名和学生成绩。选择选项三:则程序正常退出。 程序流程框图:开 始 输出菜单选项输入选项 n输入学生姓名name和分数score用程序将学生分数排序输出排序后的学生数据 结 束输入学生人数n3.1.3逻辑功能程序/*-要求:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行降幂排列并输出;(3)具有输入输出界面。-*/#include#include#include#includestruct student int ID; char name10; /学生姓名 float score; /学生成绩st
7、u100;int num;void dis_menu(); /菜单显示函数void set_menu(); /菜单设置程序void set_inf(); /学生信息输入函数void dis_inf(); /学生信息显示函数void dec_sort(); /学生成绩降序排列void XD_transfer();int main()while(1)dis_menu();set_menu();return 0;void dis_menu()printf(t*n);printf(t*分数统计程序*n);printf(t*n);printf(t* 1、输入学生数据 *n); printf(t* 2、成
8、绩降序排列 *n);printf(t* 3、退出程序 *n); printf(t*n);printf(t请选择你要进行的操作:);void set_menu()char n100;scanf(%s,n);if(strlen(n)1)printf(t输入错误!请重新输入:); set_menu(); elseswitch(*n) case 1: XD_transfer(); set_inf(); dis_inf(); break; case 2: dec_sort(); dis_inf(); break; case 3: printf(t); exit(1); break; default: p
9、rintf(t输入错误!请重新输入:); set_menu(); break; void set_inf()int i;for(i=0;inum;i+)stui.ID=i+1;printf(t学号:%dn,stui.ID);printf(t姓名:); scanf(%s,stui.name);printf(t成绩:);scanf(%f,&stui.score); printf(n);void dis_inf() int i; printf(t学生成绩统计如下:n); printf(t%-st%-10st%-8stn,学号,姓名,成绩); for(i=0;inum;i+) printf(t%-dt
10、%-10st%-8gtn,stui.ID,stui.name,stui.score); printf(n);void dec_sort()int i,j,max_index,n=num; struct student stu_temp; 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;void XD_transfer()char temp100,ch;int i=0
11、,flag=1,count=0;while(flag)i=0;flag=0;count=0;fflush(stdin); /清空输入缓冲区,确保读入无错printf(t请输入学生人数:);while(ch=getchar()!=n)if(ch9)printf(t输入数字有误!n);flag=1;break;tempi=ch;count+;i+;tempi=0;/ 输入正确八进制结束for(i=0;icount;i+)num=num+(tempi-0)*(int)pow(10,(count-i-1);/计算值printf(n);3.1.4结果及完善方向运行结果:输入学生成绩窗口学生成绩降序排列窗
12、口程序特点及完善方向:本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。同理,输入学生人数也一样,保证了程序的稳定可靠。如果程序可以中途停止,并自动保存刚输入的数据,待下次运行时正常调出,则程序将更加完整,更具有实用性。3.2 打字软件(A2)3.2.1设计题目及要求 题目:打字程序 要求:(1)随即产生一字符串,每次产生的字符串内容、长度都不同; (2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率; (3)具有输入输出界面。3.2.2设计思想及程序流程框图设计思想:先设计一个欢迎进入打字程序的菜单,然后就
13、由程序随机产生一个任意长度的字符串(大小写的英文字母),然后由用户输入字符串里显示的字母,输入完后按enter结束输入,最后程序输出用户打字的正确率。接着一个选项,询问用户是否继续进行打字练习。选择是则打字练习继续上述的操作;选择退出程序则退出程序。程序流程框图: 开 始输出欢迎菜单输出随机产生的字符串输入字符串输出打字正确率输入选项输出yes or no1 ch 结 束yesno3.3.3逻辑功能程序/*-程序名称:打字程序要求:(1)随机产生一字符串,每次产生的字符串内容、长度都不同;(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;(3)具有输入输出界面。-*/#incl
14、ude#include#include#include#define max_len 40 /定义产生的字符串最长为40个字符void rand_str(char *p,int length);double compare(char *p,char *s,int length);void display(); int main()char ch20;int length;double flag;srand(time(NULL);char p80=;char s80=; display();dochar p80=; char s80=; printf(nt-n);length=1+rand()%
15、max_len;rand_str(p,length);printf(nt-n);printf(t请输入上面的字母:n); printf(t);fflush(stdin);/减少不必要错误 scanf(%s,s);flag=compare(p,s,length);if(flag=1)printf(t输入完全正确!n);elseprintf(t输入有误,您本次输入正确率:%0.2g%n,flag*100); printf(tn); getchar();printf(t您还继续吗?请按任意键继续或者按N键结束:);scanf(%s,ch);while(ch0!=N&ch0!=n);printf(t)
16、;return 0;void rand_str(char *p,int length)int i;char ch;printf(t); for(i=0;i90&num97);ch=num;printf(%c,num);pi=ch;double compare(char *p,char *s,int length)int j;int number=0;double rate;for(j=0;jlength;j+)if(pj-sj)=0)number=number+1;rate=1.0*number/length;return rate;void display()printf(t*n);prin
17、tf(t*n);printf(t* 欢迎进入打字练习程序 *n);printf(t*n); printf(t*n);printf(tn);3.2.4结果及完善方向运行结果:打字程序运行界面打字程序运行界面完善方向:程序基本功能都能完成,争取率统计也完全正确。本程序如果做成用户图形界面(GUI),我相信这个程序将具有更好的实用性。 3.3 文本编辑器(A3)3.3.1设计题目及要求 题目:文本编辑器 要求:(1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。3.3.2设计思想及程序流程框图设计思想:先显示一个功能菜单。然后由用户选择是编辑文本还是读取文本或者退出程序。
18、如果选择编辑文本的话就在某位置建立一个文本文档,然后向文本文件里写入你要写的东西。读文本文件的话就在见文本的位置读该文本,先判断文本是否存在,如果不存在则显示打开文本失败;如果存在则读取文本中的信息。选择退出程序则退出程序。程序流程框图: 开 始 输出功能菜单 输入n n231输入文件名输入文件名 结 束输入文件名读取文本编辑文本建立文本3.3.3逻辑功能程序/*-程序名称:文本编辑器要求:(1)编辑文本;(2)保存、打开指定位置的文本文件;(3)具有输入输出界面。-*/#include#include /包含exit(1)的原型#includevoid menu1();void create
19、_file(FILE *fp,char *fname);void write_file(FILE *fp,char *fname);void read_file(FILE *fp,char *fname);int main()FILE *fp;int count=0;char num100;int flag1,flag2,flag3;char F_name20;while(1)menu1();printf(t请选择你要进行的文件操作:);scanf(%s,num);getchar(); while(strlen(num)1|num052)printf(t输入错误!请重新输入:);scanf(%
20、s,num);getchar();switch(num0)case 1: flag1=1; break;case 2: flag2=1; break;case 3: flag3=1; break;case 4: printf(t); exit(0); break;if(flag1=1)flag1=0; create_file(fp,F_name);else if(flag2=1)flag2=0;write_file(fp,F_name);else if(flag3=1)flag3=0;read_file(fp,F_name);return 0; void menu1()printf(t*n);
21、printf(t*文本编辑器*n);printf(t*n);printf(t* 1、建立文本 *n); printf(t* 2、编辑文本 *n);printf(t* 3、读取文本 *n);printf(t* 4、退出程序 *n); printf(t*n);void write_file(FILE *fp,char *fname) char ch;printf(t请键入编辑的文件名(如D:name.txt):nt); gets(fname); if(fp=fopen(fname,w)=NULL)printf(t不能打开文件!n);exit(0);printf(t请输入内容(以#号键结束):nt)
22、;ch=getchar();while(ch!=#)fputc(ch,fp);ch=getchar();printf(nn);getchar();fclose(fp);void create_file(FILE *fp,char *fname)printf(t请键入新建的文件名(如D:name.txt):nt);gets(fname);if(fp=fopen(fname,w+)=NULL)printf(t不能打开文件!n);exit(0);printf(t%s文件已经创建好!nn,fname);fclose(fp);void read_file(FILE *fp,char *fname)cha
23、r ch;printf(t请键入读取的文件名(如D:name.txt):nt);gets(fname);if(fp=fopen(fname,r)=NULL)printf(t不能打开文件!n);exit(0);printf(t);while(ch=fgetc(fp)!=EOF)putchar(ch);printf(tnn);fclose(fp);3.3.4结果及完善方向运行结果:向指定文件写入内容从指定文件中读取文件内容完善方向: 本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。本程序可以根据指定文件名进行建立文件、读取
24、文件、编辑文件等操作。 文本再次编辑时,将覆盖上次编辑的内容,可以设计将这一点完善。可以用循环函数设计编辑文本。 3.4 加密软件(A4)3.4.1设计题目及要求 题目:加密 要求:(1)输入任意一段明文M,以及密钥K; (2)根据以下公式将其转换为密文C。 Ci = mi + K ,其中i = 0,1,n-1 , K 为密钥; (3)具有输入输出界面。3.4.2设计思想及程序流程框图 设计思想:先设计一个功能菜单,然后由用户选择。如果选择加密功能这请用户输入一段明文然后输入密钥,最后显示明文和转换成的密文。若选择解密功能则请用户输入一段密文然后输入密钥,最后显示密文和解密后的明文。选择退出程
25、序则退出程序。程序流程框图: 开 始 输出功能菜单输入n num3 2结 束1输入密文C和密钥k输入明文m和密钥k mi=Ci-kCi=mi+k输出m和密文C输出密文C和明文m3.4.3逻辑功能程序/*-程序名称:加密要求:(1)输入任意一段明文M,以及密钥K;(2)根据以下公式将其转换为密文C。 Ci = mi + K ,其中i = 0,1,n-1 , K 为密钥;(3)具有输入输出界面。-*/#include#include #include void dis_menu();void set_menu();void encryption(char *m, char *c, char *ke
26、y); void decryption(char *m, char *c, char *key); int main()while(1)dis_menu(); set_menu();return 0;void dis_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 set_menu() char m100=; char c100=; char key100=; char n10
27、0; scanf(%s,n); if(strlen(n)1) printf(t输入错误!请重新输入:); set_menu(); else switch(*n) case 1: encryption(m, c, key); break; case 2: decryption(m, c, key); break; case 3: printf(t); exit(1); break; default: printf(t输入错误!请重新输入:); set_menu(); break; void encryption(char *m, char *c, char *key)printf(t-n);pr
28、intf(t-加密环节-n); printf(t-n); printf(t请输入需加密的明文:);scanf(%s,m);printf(t请输入密钥:);scanf(%s,key); while(strlen(key)1)printf(t输入密钥有误,请重输:); scanf(%s,key);int i,length;length=strlen(m);printf(t你输入的明文为:);printf(%sn,m); for(i=0;i1)printf(t输入密钥有误(应输入一个字符),请重输:); scanf(%s,key);int i,length;length=strlen(c);prin
29、tf(t你输入的密文为:);printf(%sn,c); for(i=0;ilength;i+)mi=ci-(key0-0);printf(t破解后的明文为:);printf(%snn,m);3.4.4结果及完善方向运行结果:加密环节解密环节完善方向: 基本功能都能实现。本程序界面美观,通过程序优化,在输入菜单选择项时即使输入的是很长的混乱字符,程序也会提示你输入错误,不会发生程序崩溃的现象。若能够做出用户图形界面。则本程序将更加具有实用性。3.5 进制转换器(A5)3.5.1设计题目及要求 题目:进制转换器(10)要求:(1)可输入二进制、八进制、十进制、十六进制数; (2)将已输入的数转换成其余进制的数; (3)具有输入输出界面。3.5.2设计思想及程序流程框图设计思想:先显示一个功能菜单供用户选择。程序设计两个函数,分别是十进制的数转化成其他进制数程序,及其他程序转换成十进制的程序。如果二进制、八进制、十进制、十六进制