南京邮电大学软件设计报告(共90页).doc
精选优质文档-倾情为你奉上院系:光电工程学院学号:B姓名:李志明2012年4月16日2012年4月26日软件设计报告专心-专注-专业 0 1 1 1 3 7 7 7 7 9 8 0 0 0 1 5 5 6 7 8 8 0 0 2 4 9 3 8 1 35一、 软件设计课程简介1. 涉及课程及知识点高级语言程序设计,常量、变量、表达式的基本知识;函数的定义与调用;文件读写;数组、指针、结构体等自定义类型的使用;排序等知识。2. 目的与任务目的:通过集中时间上机实验,对学生的程序设计能力进行一次综合训练,使学生充分发挥已有的编程能力,熟悉编译环境。选择若干课题,进行审题、分析、设计和调试,在程序准备、程序实现、完成文档、答辩验收过程中,将全面巩固已学过的编程知识,全面提高编程技能,在编程风格、调试器的使用、测试技术等方面得到全面训练。3. 主要仪器设备硬件:微型计算机软件:C、C+、Visual C+等一、 软件设计内容1. 分数统计a. 课题内容:设计一个分数统计程序。包括学生信息的输入输出以及排序。通过该课题全面熟悉数组、字符串、文件的使用,掌握程序设计的基本方法及友好界面的设计。 课题要求:(1)输入某班级学生的姓名、分数;(2)对(1)的分数进行降幂排列并输出;(3)具有输入输出界面。b. 算法流程图:开始 1. 输入学生信息2. 退出 选择操作N选择正确否徐 YChoice=2Choice=1输入学生信息姓名分数 Choice=31. 显示学生信息2. 按分数降幂排序3. 增加学生信息4. 退出 Choice=2选择正确否徐 Ychoice=4Choice=1显示学生信息退出c. 源程序:#include<stdio.h>#include<string.h>#include<math.h> #include<stdlib.h>struct stuchar name100;float score;typedef struct stu stu;void addimfor();int num=0;int NUM=100;stu data100;void paixu();void show();void menu0();void menu1();void choose();void main()char cho100;int len;char choice;int a=1;printf("tttt-n"); printf("tttt welcome!n");printf("tttt-n");menu0();doprintf("请选择操作:");scanf("%s",cho);len=strlen(cho);choice=cho0;if(len=1&&choice>='0'&&choice<='2')a=0;elsesystem("cls");printf("ttt -n");printf("tttt 选择有误!n");printf("ttt -n");menu0();a=1;while(a);switch(choice)case '1':if(num=0)system("cls");printf("ttt -n");printf("tttt 查无学生信息!n");printf("ttt -n"); menu1();choose();elseshow();choose();break;case '2':system("cls");addimfor();menu1();choose();break;case '0':exit(1);break;return;void addimfor()float fen;int b=1;if(num>=NUM)printf("tttt无法再增加学生信息!n");elsedo printf("姓名:"); scanf("%s",(datanum.name); printf("分数:");scanf("%f",&fen);if(fen>100|fen<0)system("cls");printf("ttt -n");printf("tttt分数有误,本次操作无效!n");printf("ttt -n");b=1;elsedatanum.score=fen;b=0; while (b);num+;system("cls");void paixu()char temp100;float fen;for(int i=0;i<num;i+) for(int j=i+1;j<=num;j+)if(dataj.score>datai.score)fen=dataj.score;dataj.score=datai.score;datai.score=fen;strcpy(temp,dataj.name);strcpy(dataj.name,datai.name);strcpy(datai.name,temp);void show()system("cls");for(int i=0;i<num;i+)printf("-");printf("姓名:");printf("%s",datai.name);printf(" 分数:");printf("%3.1f",datai.score);printf("n");printf("-");menu1();void menu0()printf("-");printf("tttt=1.显示学生信息=n");printf("tttt=2.添加学生信息=n");printf("tttt=0.退出 =n");void menu1()printf("tttt=1.显示学生信息 =n");printf("tttt=2.按分数由高到低排序=n");printf("tttt=3.添加学生信息 =n");printf("tttt=0.退出 =n");void choose()char cho1100;char choice1;int len1;int b=1;do printf("请选择操作:");scanf("%s",cho1);len1=strlen(cho1);choice1=cho10;if(len1=1&&choice1>='0'&&choice1<='3')b=0;elseprintf("ttt -n");printf("tttt 选择有误!");printf("n");printf("ttt -n");menu1();b=1; while (b);switch(choice1)case '1':if(num=0)system("cls");printf("ttt -n");printf("tttt 查无学生信息!n");printf("ttt -n");menu1();choose();elseshow();choose();break;case '2':paixu();system("cls");menu1();choose();break;case '3':system("cls");addimfor();menu1();choose();break;case '0':system("cls");exit(1);break;D.程序运行截图略。2. 打字程序a. 课题内容:设计一个打字程序。包括随机产生字符串,以及字符串比较和统计。 课题要求:(1)随机产生一字符串,每次产生的字符串内容、长度都不同;(2)根据(1)的结果,输入字符串,判断输入是否正确,输出正确率;(3)具有输入输出界面。b. 流程图:开始1. 进入打字程序2.退出选择正确否?NChoice=1Choice=2 Y产生一串随机长度随机组合的字符串输入字符显示正确率1. 继续操作2. 退出选择正确否? N YChoice=2Choice=1结束c. 源程序#include <stdio.h>#include <string.h>#include <stdlib.h>#include <time.h>void menu();void menu1();void print();char choice;void main()char cho100;int len;printf("ttt*n");printf("ttt* 欢迎使用打字程序 *n");printf("ttt*nnn");domenu();printf("输入操作选择:");scanf("%s",&cho);choice=cho0;len=strlen(cho);if(len=1&&(choice>='1'&&choice<='2')switch(choice)case '1':print();break;case '2':system("cls");printf("ttt*n");printf("ttt* 感谢使用本程序 *n");printf("ttt* 谢谢! *n");printf("ttt*nnn");exit(1);break;elsesystem("cls");printf("ttt-n");printf("ttt-t选择无效,请重输t-n");printf("ttt-nnn");while(choice);return;void print()char s2100;int i;int num=0;int ma=1;double NUM;char j;int len1,len2;srand(time(NULL);doi=rand();if(i>=1&&i<=10)ma=0;while(ma);system("cls");char* s1=(char*)malloc(i*sizeof(char);/申请动态空间if(!s1)printf("空间申请失败!");exit(1);/申请字符串空间printf("tttt-n");printf("tttt ");for(int n=0;n<i;n+)j=rand();if(j<48|(j>57&&j<65)|(j>90&&j<97)|j>122)j=rand();n=n-1;elses1n=j;printf("%c",j); s1n='0'printf("n");printf("tttt-n");len1=strlen(s1);printf("输入字符串:");scanf("%s",s2);len2=strlen(s2); if(len2=len1)for(int k=0;k<len1;k+)if(s1k=s2k)num+;system("cls");printf("正确率:");NUM=num/(double)len1;printf("%d%n",int(NUM*100);elseif(len2<len1)for(int k=0;k<len2;k+)if(s1k=s2k)num+;system("cls");printf("正确率:");NUM=num/(double)len1;printf("%d%n",int(NUM*100);elsefor(int k=0;k<len1;k+)if(s1k=s2k)num+;system("cls");printf("正确率:");NUM=num/(double)len2;printf("%d%n",(int)(NUM*100);char cho1100;int len3;domenu1(); printf("输入操作选择:"); scanf("%s",cho1);len3=strlen(cho1);choice=cho10;if(len3=1&&choice>='0'&&choice<='2')switch(choice)case '1': print();break;case '0':system("cls");printf("ttt*n");printf("ttt* 感谢使用本程序 *n");printf("ttt* 谢谢! *n");printf("ttt*nnn");exit(1);break;elsesystem("cls");printf("ttt-n");printf("ttt-t选择无效,请重输t-n");printf("ttt-nnn");while(choice);void menu()printf("ttt-1.进入打字程序-n");printf("ttt-2.退出 -n");void menu1()printf("ttt -1.继续操作 -n");printf("ttt -0.退出 -n");d. 结果及改善:略。3. 文本编辑器a. 课题内容:设计一个简单的文本编辑器,该系统要求对一个文本文件中的内容进行各种常规操作,如:插入、删除、查找、替换等功能。 课题要求: (1)编辑文本; (2)保存、打开指定位置的文本文件; (3)具有输入输出界面。b. 流程图开始1. 打开文件2. 退出Choice=6输入正确否?N选择操作YChoice=2Choice=1输入文件名及路径文件能否打开?N Y1.插入2.删除3.查找4.替换5.显示6.返回0.退出显示文件内容Choice=1 choice=3输入查找的字符串输入插入的字符串输入删除的字符串输入替换的字符串及源字符串Choice=2Choice=4Choice=5结束Choice=0c. 源程序#include<stdio.h>#include<stdlib.h>#include<math.h>#include<string.h>FILE* fp=NULL;FILE* fp1;char name50;void menu0();void Open();void choose0();void menu1();void choose1();void insert();void check();void replace();void deletef();void show();void welcome();void welcome()printf("ttt -n");printf("tttt欢迎使用本程序!n");printf("ttt -n");/-主程序-void main()welcome();choose0();choose1();return;/-一级菜单-void menu0()printf("-");printf("tttt1.打开文件n");printf("tttt0.退出n");/-打开文件-void Open()char ch;system("cls");printf("请输入要打开的文件名及路径:");scanf("%s",name);fp=fopen(name,"r+");if(!fp)system("cls");printf("ttt =文件无法打开!=n");choose0();system("cls");printf("-"); while(ch=fgetc(fp)!=EOF)putchar(ch);rewind(fp);printf("n");printf("-");/void show()char ch;fp=fopen(name,"r");if(!fp)printf("tttt =文件无法打开!=n");choose0();printf("-"); while(ch=fgetc(fp)!=EOF)putchar(ch);rewind(fp);printf("-");menu1();/-一级选择-void choose0()char choice;char fen100;int a=1,len;menu0();do printf("请选择操作:");scanf("%s",fen);len=strlen(fen);choice=fen0;if(choice>='0'&&choice<='1'&&len=1)a=0;elsesystem("cls");printf("ttt-n");printf("ttt 无效操作,请重新选择n");printf("ttt-n");menu0();a=1;while(a);switch(choice)case '1':Open();menu1();choose1();break;case '0':system("cls");exit(1);break;/-二级菜单-void menu1()printf("tttt=1.插入=n");printf("tttt=2.删除=n");printf("tttt=3.查找=n");printf("tttt=4.替换=n");printf("tttt=5.显示=n");printf("tttt=6.返回=n");printf("tttt=0.退出=n");/-二级选择-void choose1()char choice;int a=1;printf("请选择操作:");char fen100;int len;doscanf("%s",fen);choice=fen0;len=strlen(fen);if(choice>='0'&&choice<='6'&&len=1)a=0;elsesystem("cls"); printf("ttt-n"); printf("ttt 无效操作,请重新选择n");printf("ttt-n");menu1();printf("请选择操作:"); a=1;while(a);switch(choice)case '1':insert();menu1();choose1();break;case '2':deletef();system("cls");menu1();choose1();break;case '3':system("cls");show();check();menu1();choose1();break;case '4':system("cls");replace();system("cls");menu1();choose1();break;case '5':system("cls");show();choose1();break;case '6':system("cls");choose0();break;case '0':system("cls");exit(1);/-插入-void insert()long set;char ch1;char s110000;char s2100;int i=0;while(ch1=fgetc(fp)!=EOF)s1i=ch1;i+;rewind(fp);s1i='0'system("cls");show();printf("请定位你想要插入字符串的地方:");scanf("%d",&set);system("cls");show();printf("输入你插入的字符串:");scanf("%s",s2);int len=strlen(s2);fclose(fp);fp=fopen(name,"w");for(int j=0;j<set;j+)ch1=s1j;fputc(ch1,fp);for(j=0;j<len;j+)ch1=s2j;fputc(ch1,fp);for(j=set;j<i;j+)ch1=s1j;fputc(ch1,fp);fclose(fp);system("cls");/-查找-void check()printf("请输入需要查找的字符串:");char str50;char str1500;char ch;char *p;int count=0;scanf("%s",str);int len=strlen(str);fp=fopen(name,"r");if(!fp)printf("tttt =文件无法打开!=n");rewind(fp);while(ch=fgetc(fp)!=EOF)str1count=ch;count+;