201671010409 达选奇 实验二 软件工程个人项目

课程名称 2016级计算机科学与工程学院软件工程(西北师范大学)
作业要求 实验二 软件工程个人项目
课程目标 通过学习这门课程,深入了解软件开发的标准过程,从软件生命周期的8个阶段分析各个阶段的开发任务,摒弃以往开发软件的方法。
作业意义 此次作业能帮助我掌握软件项目个人开发流程和Github上发布软件项目的操作方法

需求分析

1.程序可读入任意英文文本文件,该文件中英文词数大于等于1个。

2.程序需要很壮健,能读取容纳英文原版《哈利波特》10万词以上的文章。

3.指定单词词频统计功能:用户可输入从该文本中想要查找词频的一个或任意多个英文单词,运行程序的统计功能可显示对应单词在文本中出现的次数和柱状图。

4.高频词统计功能:用户从键盘输入高频词输出的个数k,运行程序统计功能,可按文本中词频数降序显示前k个单词的词频及单词。

5.统计该文本所有单词数量及词频数,并能将单词及词频数按字典顺序输出到文件result.txt。

功能设计

1.可以读取指定的英文文本文件。
2.可以对指定文本进行单词词频统计。
3.对统计的单词及频数按字典字母顺序打印。
4.采用图形化界面方便操作。

设计实现

这个程序包含5个函数,包括1个主函数main函数和5个功能函数,分别是main函数、srwj函数、px函数、pv函数、dy函数、menu函数。其中main函数主要负责控制整个程序的运行,而剩下5个函数功能分别如下:

 1.srwj函数用来读取指定文件,并将相关信息输入结构体变量wd中;
 2.pv函数用来统计单词的频数;
 3.px函数用来对已统计的单词进行英文字母顺序的排序;
 4.dy函数用来输出单词的相关统计信息;
 5.menu函数用来进行图形化界面操作;

测试运行

  • 用户界面

  • 程序运行界面

比较关键代码片段

  • 主函数main代码
int main()
{
 srwj();
 px();
 pv();
 menu(); 
}
  • pv函数代码
void pv(){
 	int m,n,flag=1;
 	for(m=0;m<cc;m++){
 		for(n=0;n<m;n++){
 			if(strcmp(wd[n].dc,wd[m].dc)==0){
 				flag=0;
 				break;
			 }
			 else flag=1;
		 }
		 while(flag){
		 	for(n=m;n<cc;n++){
		 		if(strcmp(wd[n].dc,wd[m].dc)==0){
		 			wd[m].nn++;
				 }
				 flag=0;
			 }
		 }
	 }
 }
  • px函数代码
void px(){
 	int m,n,k;
 	char temp[20];
 	for(m=0;m<cc-1;m++){
 		k=m;
 		for(n=m+1;n<cc;n++){
 			if(strcmp(wd[k].dc,wd[n].dc)>0){
 				k=n;
			 }
			 if(k!=m){
//			 	temp=wd[m].dc;
//			 	wd[m].dc=wd[k].dc;
//			 	wd[k].dc=temp;
                strcpy(temp,wd[m].dc);
                strcpy(wd[m].dc,wd[k].dc);
                strcpy(wd[k].dc,temp);
			 }
		 }
	 }
 }
  • menu函数代码
int menu()
{
	int ii;
	printf("
");
	printf("              *********************************************************
");
	printf("              #                                                       #
");
	printf("              #                       词频统计                        #
");
	printf("              #                                                       #
");
	printf("              *********************************************************
");
	printf("              #           1.显示单词总数、全部单词及频数              #
");
//    printf("              #           2. 显示高频词及频数                         #
");
	printf("              #                                                       #
");
	printf("              #           3.退出系统                                  #
");
	printf("              *********************************************************
"); 
    printf("                     请选择您需要的操作序号(1-3)按回车确认:");
    scanf("%d",&ii);
    printf("
");
    switch(ii)
  {
   	  case 1:dy();break;
//   	  case 2:gpc();break; 
      case 3: break;
      default:printf("请在1-3之间选择
");break;
   }
}

总结

- 在这次项目中,我查阅了一些以前看过的c语言书籍,由于很长时间没用过c语言,所以编程颇为费力。
- 在编程过程中,用到了一些冒泡排序之类的算法,而且采用了文件相关的函数来做。
- 第一次编写这么大代码量的程序,有些手忙脚乱,不过总算把每个模块编写完毕。
- 程序编写过程中还有很多没有实现,比如说高频词的显示,由于对指针的运用还不熟练,所以相关的代码实现没有完成。

PSP

PSP2.1 任务内容 计划共完成需要
的时间(min)
实际完成需要
的时间(min)
Planning 计划 20 18
Estimate 估计这个任务需要多少
时间,并规划大致工作步骤
半天 半天
Development 开发 180 200
Analysis 需求分析 (包括学习新技术) 60 80
Design Spec 生成设计文档 10 20
Design Review 设计复审 (和同学审核设计文档) 7 8
Coding Standard 代码规范 (为目前的开发制定合适的规范) 5 7
Design 具体设计 30 60
Coding 具体编码 120 240
Code Review 代码复审 30 60
Test 测试(自我测试,修改代码,提交修改) 20 30
Reporting 报告 10 10
Test Report 测试报告 5 4
Size Measurement 计算工作量 5 3
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 5 5

github 项目查看

github源码

原文地址:https://www.cnblogs.com/nwnu-daxuanqi/p/10557353.html