数据结构课程设计——文字编辑实验报告

数据结构课程设计——文字编辑实验报告
数据结构课程设计——文字编辑实验报告

课程设计报告课程设计题目:文章编辑

姓名杨博

学号201520220205

班级1522202

指导教师邹国华

2016年6月30日

东华理工大学

课程设计评分表

学生姓名:杨博班级:1522202

学号:201520220205

课程设计题目:文章编辑

项目内容满分实评

选题能结合所学课程知识、有一定的能力训练。符合选题要求

(5人一题)

10 工作量适中,难易度合理10

能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10

能应用计算机软件进行编程、资料搜集录入、加工、排版、

制图等

10 能体现创造性思维,或有独特见解10

成果质量总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、

结论严谨合理;分析处理科学、条理分明、语言流畅、结构

严谨、版面清晰

10

设计说明书栏目齐全、合理,符号统一、编号齐全。格式、

绘图、表格、插图等规范准确,符合国家标准

10 有一定篇幅,字符数不少于5000 10

总分100

指导教师评语:

指导教师签名:

2016年6月30 日

实验题目:简单的文本编辑器

1、题目及要求

名称:简单的文本编辑器

内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,

每行最多不超过80个字符,共N行。

要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数;

(2)统计某一字符串在文章中出现的次数,并输出该次数;

(3)删除某一字符或者子串,并将后面的字符前移。

(4)插入某一字符或者子串。

(5)查找某一字符或者子串。

存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。

输出形式:

(1)分行输出用户输入的各行字符;

(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"

(3)输出删除某一字符串后的文章。

2、对题目的大概理解:

本程序应实现以下功能:

(1)文章内容的输入:包括字母、标点符号、数字、空格等;

(2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以

及文章所有字数的个数的统计;

(3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作,其中在查找的过程中统计出该字符或字符串在文章中出现的次数;

1、问题分析

本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输

入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字

符串进行查找,然后对其进行删除。插入部分为通过输入的插入位置(行、列)将字符或者

字符串插入到文章制定位置。

一、数据结构选择和概要设计

数据结构选择:

本程序是对输入的文字进行操作,并要求静态存储一页文本。

由于是一页文本,包括多行,而且相邻两行的字符内容是依次读入该页的。因此,两行之间的内容要建立相应的联系。通过一个单链表,来控制该文本的行数,并额外设置一个前驱指针Linklist *pre来与上一行进行有效连接,通过Linklist *next来指向下取得与下一行的连接。为了控制每行的字符个数,在该链表的数据结构中设置一字符数组 data[80],

来存储每行的字符。设置row和length分别记录行数与列数;

使用的数据结构为单链表操作。根据第一部分的问题分析有该链表操作有3部分:

Pre Temp Next

另有全局变量*head,作为文章的头指针。

故创建了以下结构体:

typedef struct _node

{ char data[80]; //记录一行字符

int length; //记录一行字符长度

struct _node *next; // 后继指针

struct _node *pre; //前趋指针

int row; //记录整篇文章的行数

}LinkList;

在文章内容创建部分中使用线性表的链式存储来实现对行的操作,实用行指针所指向的

字符数组对每行应输入的字符进行存储,并使用全局变量对文本的各种信息进行存储;

文章的内容统计、删除、查找、插入都通过对行指针所指向的一维字符数组的操作来完成。

概要设计:

程序框架:

********** 简单文本编辑器运行界面***********

*******************************************************

****** 主菜单*******

***** 1、文本内容输入*****

***** 2、显示当前文本内容*****

***** 3、文本内容统计菜单*****

***** 4、文本内容处理菜单*****

***** 5、退出本系统*****

如果选择功能1,则有:

1 2 3 4 5

图文本内容的输入,Build(),将文本内容输入到已申请的存储空间中

显示函数,Display text(),将当前文本中内容显示出来

文章内容统计菜单,Counttext(),以菜单形式显示给用户,对文章的内容进行各种方式的统计

文章内容处理菜单,Bmenu(),为一子菜单,使用了括Searchtext()、Deletetext()、Inserttext()三个函数,对文章内容进行处理

直接退出该系统

******************************************** ******** 文本内容输入菜单********** ********************************************

******** 1、从磁盘文件中读入********* ******** 2、从键盘上直接输入********* ********

3、返回主菜单

*********

********************************************

图 2 简单文本编辑器——文本内容输入菜单

如选择功能4,则有:

1 2 3

调用子函数Textinput ();实现从文件读入文本内容的操作

调用子函数Buildtext ();实现从键盘上直接输入文本

返回主菜单

图4 简单的文本编辑器-----文本内容处理菜单

根据以上各图,本程序共设计了12个函数。

**********************************************

****

文章内容处理菜单

****

********************************************* **** 1、查找文章中的字符或者字符串**** **** 2、删除文章中的字符或者字符串**** **** 3、向文章中插入字符或者字符串**** **** 4、显示处理后的文本内容**** **** 5、返回主菜单**** ****

6、直接退出系统

****

*********************************************

判断

1

2 3 4 5 6

使用子函数SearchWord(),对存储在链表中的文本进行字符或者字符串查找

使用子函数DeleteWord(),对存储在链表中文本进行字符或者字符串的删除

使用子函数InsertWord(),对存储在链表中的文本进行字符或者字符串的插入

使用函数PrintWord() 将当前文本信息显示出来

返回到主菜单继续其他菜单

结束整个程序

1、Welcome() 标题函数,即一个输出标题,永远出现在程序的最顶端。

2、Textinput() 从指定的磁盘文件读入文本;

3、Buildtext() 从键盘直接输入文本内容;

4、Build()文本输入菜单;实现主菜单中的功能1,调用Textinput()和

Buildtext()分两种方式输入文本

5、Displaytext() 当前文本内容输出函数,实现上图1菜单功能2以及图4中功能4,将

当前存储在链表中的文本内容输出;

6、Counttext() 文章内容统计函数,实现上图1菜单功能3,对存储在链表中文本内容进

行统计,包括对文本内容中的大写字母、小写字母、数字、标点符号、空

格以及文章所有字数的个数的统计;图2是对其完整描述;

7、Searchtext() 文章内容查找函数,实现上图4菜单功能1中查找部分;

8、Deletetext() 文章内容删除函数,实现上图4菜单功能2中删除部分;

9、Inserttext() 文章内容插入函数,实现上图4菜单功能3中插入部分;

10、Bmenu() 第二子菜单函数,实现上图1菜单功能4,图4是此函数实现的结果,它将7、

8、9各子函数集合在此函数中;

11、menu() 主菜单函数,其结果为图1所显示部分,将1、2、3、4、8、9等函数集合。

12、main()主函数

各函数关系用流程图形式绘制如下:

一、详细设计及编码

1、定义单链表结点类型

typedef struct _list //行表结构

{

char data[80]; //记录一行字符

int length; //记录一行字符长度

struct _list *next; // 后继指针

struct _list *pre; //前趋指针

int row; //记录整篇文章的行数

}LinkList;

2、全局变量的定义

int NUM,C,N; //定义全局变量,Num用来记录行号,C用来记录子串在主串中出现的总次数LinkList *head; //定义全局变量*head,文章首行头指针

3、各子函数的伪码

A)Textinput()读文件文本内容输入函数

具体创建过程如下:

a、定义LinkList指针变量*temp: LinkList *temp;

b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;

c、申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList));

d、首行头指针的前驱指针为空:head->pre=NULL;

首行指针:temp=head->next;

首行指针的前驱指针也为空:temp->pre=NULL;

定义没输入字符时文章长度为0:temp->length=0;

初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++)

temp->data[i]='\0';

e、从文本“abc.txt”文本文件中读取字符:

if((fp=fopen("abc.txt","r"))==NULL) /* 打开一个”abc.txt”文件*/

{

printf("not open");

exit(0);

}

利用循环进行文本输入

for(j=0;j

{ for(i=0;i<80;i++) //控制一行

{ ch=fgetc(fp);

putchar(ch);//输出到屏幕

temp->data[i]=ch; temp->data[i]=ch; //给temp指向的行赋值

····

temp->length++;//行中字符长度加 1

if(ch==EOF)//文本结束符

{NUM=j; break; //文章结束时,Num来记录整个文章的行数

}}}

在字符输入的过程中,如果在单行输入的字符超过了80个字符,则需要以下操

作:

输入字符数大于80,重新分配空间建立下一行

temp->next=(LinkList *)malloc(sizeof(LinkList)) ;

给temp的前驱指针赋值:temp->next->pre=temp;

temp指向当前行:temp=temp->next;

将下一行初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++)

temp->data[i]='\0';

记录整个文章的行数:temp->row=NUM+1;

返回指向最后一行指针:return temp;

文本输入部分到此结束。

B)Buildtext()键盘输入文本内容输入函数

具体创建过程如下:

a、定义LinkList指针变量*temp: LinkList *temp;

b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i;

c、申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList));

d、首行头指针的前驱指针为空:head->pre=NULL;

首行指针:temp=head->next;

首行指针的前驱指针也为空:temp->pre=NULL;

定义没输入字符时文章长度为0:temp->length=0;

初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++)

temp->data[i]='\0';

e、利用循环进行文本输入

for(j=0;j

{ for(i=0;i<80;i++) //控制一行

{ ch=getchar(); //接收输入字符

temp->data[i]=ch; //给temp指向的行赋值

····

temp->length++;//行中字符长度加 1

if(ch=='#')

{NUM=j; break; //文章结束时,Num来记录整个文章的行数

}}}

在字符输入的过程中,如果在单行输入的字符超过了80个字符,则需要以下操

作:

输入字符数大于80,重新分配空间建立下一行

temp->next=(LinkList *)malloc(sizeof(LinkList)) ;

给temp的前驱指针赋值:temp->next->pre=temp;

temp指向当前行:temp=temp->next;

将下一行初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++)

temp->data[i]='\0';

记录整个文章的行数:temp->row=NUM+1;

返回指向最后一行指针:return temp;

文本输入部分到此结束。

C)、Build()文本输入菜单函数

a、建立一个文本输入菜单;

b、通过调用文本输入函数实现文本输入的功能

D)、Displaytext()当前文本输出并写入到相应磁盘文件函数

本子函数功能为将当前存储在链表中的文本信息输出在屏幕上,具体伪码算法如下:

a、定义文本行数变量j,每行字符数i:int i,j;

b、定义指针变量:LinkList *p;

c、将指针p指向链表表头: p=head->next;

d、输出链表中的信息,并写入到“bcd.txt”文本文件中

if((fp=fopen("bcd.txt","w"))==NULL){

printf("No open!\n");

exit(0);}

利用循环输出链表中信息:

for(j=0;j<=NUM&&p!=NULL;j++)

{=for(i=0;(i<80)&&(p->data[i])!='#';i++)

{=printf("%c",p->data[i]);

fprintf(fp,"%c",p->data[i]);//写入到文件

}

p=p->next; }

文本输出函数到此结束。

E)、Counttext() 文本内容统计函数

本子函数是对文本中内容进行统计。具体伪码算法如下:

a、定义指针变量temp:LinkList *temp;

b、定义记录文本行数变量j,每行字符数i;

c、定义记录文本大写字母数、小写字母数、空格数、数字数、标点数和总字数的变量:

int WORD=0,word=0,space=0,num=0,punct=0,sum=0;

d、将指针temp指向链表表头:temp=head->next;

e、利用循环对链表中信息进行匹配判断,将大写字母数、小写字母数、空格数、数字

数、标点数和总字数统计出来:

for(j=0;j<=NUM;j++)

{ for(i=0;(i<80)&&(temp->data[i])!='#';i++)

{ ch=temp->data[i];

if((ch>='A')&&(ch<='Z')) WORD++;

else if((ch>='a')&&(ch<='z')) word++;

else if((ch>='0')&&(ch<='9')) num++;

else if(ch==' ') space++;

else if(ch==33||ch==34||ch==39||ch==44||ch==46||ch==58||ch==59||ch==63)

{punct++;}

}

sum=WORD+word+num;

}

f、本程序对统计项目设计了菜单提供给用户选择。

菜单的编写使用do while语句进行循环操作,此部分不再多谈。

F)Searchtext( ) 文本内容查找函数

本子函数是对文本内容进行查找并且对查找的内容进行统计其出现的次数。

具体伪码算法如下:

a、定义一个数组,用来记录需要查找的字符内容:char Data[20];

b、定义定义文本行数变量j,每行字符数i,记录字符出现的次数变量:

int i,j,m=0.,sum=0;

c、对形参中定义的指针变量进行操作,使其指向链表表头:temp=head->next;

d、使用VC++中的拷贝函数,将形参中str1的值赋给Data:strcpy(Data,str1);

e、利用循环进行查找操作,核心算法为:

if((temp->data[j])==Data[k])

k++;//将输入的查找字符与链表中信息比较,找到第一个相同的字符

else if(Data[k]!='\0')

{j=j-k; k=0; } // //从主串第j-k个位置重新查找

if(Data[k]=='\0')

{sum++;//此字符出现的次数加 1

j=j-k+1; //j记录下该字符串出现的位置

printf("\t\t第%d次出现在第%d行第%d列\n",l,i+1,j+1);

l++;

k=0;

continue;}

temp=temp->next; //指向下一行

对文本内容查找的部分完成。

G)、Deletetext( ) 文本内容删除函数

此子函数是对文本内容进行删除。具体伪码算法如下:

f、定义一个数组用来存储需要删除的字符或者字符串:char Data[20];

g、定义指针变量:LinkList *temp,*term;

h、定义整形变量用来控制行数、字符数:int i,j,k,m,y,num;

i、使用VC++中拷贝函数讲形参中需要删除的字符或字符串赋值给已定义的数组:

strcpy(Data,str2);

j、使用循环进行删除操作:

其核心算法为:

for(i=0;i<=NUM;i++)

{ for(j=0;j<80;j++)

{ if((temp->data[j])==Data[k]) k++;

else if(Data[k]!='\0') {j=j-k;k=0;}

if(Data[k]=='\0')

{num=j; break; } }

if(num<80) break;

}

首先是使用循环查找到需要删除字符或者字符串的字符数以及字符或者字符串的位

置,以便于删除;

for(;i<=NUM;i++)

{ for(;j<80;j++)

{ if(j+1

{ term->data[80-k+num]=temp->data[j+1]; } //删除的字符串不在最后一行,将下一行的字符(由temp指向)前移到前行

else temp->data[j-k+1]=temp->data[j+1]; } //当要删除的字符串在最后一行只要将最后一行的字符前移

term=temp;

temp=temp->next;

j=0; }//在使用循环,从查找到的字符或者字符串开始进行删除,在一行删除完毕之后,转至下一行进行删除。

删除部分到次完成。

H)、Inserttext() 文本内容插入函数

此函数为向文本中插入字符或者字符串。具体伪码如下:

a、定义需要插入的字符或者字符串的输入数组:char Data[20];

b、定义需要插入的字符或者字符串的插入的行和列:int h,l;

c、进行输入操作,将上述两个部分进行输入

d、定义一个整形变量,确定插入的具体位置:int i=(h-1)*80+l;

e、定义一指针变量:LinkList *a;

f、对输入的字符进行插入操作,具体核心算法如下:

g、int n=strlen(Data);

h、 int m ;

i、 int insertRow=i/80+1;//确定插入位置的行数

j、 int row=temp->row;//将全局变量记录的行数赋值给row

k、 int j;

l、 if(insertRow==row)//判断插入位置是否在最后一行

m、{for(m=temp->length-1;m>=(i%80)&&n>0;m--)

n、temp->data[m+n]=temp->data[m];//将最后一行插入位置后面的所有字符向后移n位o、for(m=(i%80),j=0;m

p、{temp->data[m]=Data[j]; }//将要插入的字符或者字符串赋值到要插入的位置

q、 }

r、 else//如果插入的位置不再最后一行

s、 { int r=0;

t、for(int p=insertRow; p

u、{if(p == insertRow) r=0;

v、else r=n;

w、for(m=temp->length-1-r;m>=0&&n>0;m--)

x、temp->data[m+n]=temp->data[m];//将最后一行整体后移n位

y、a= temp; //p指向前一行

z、temp = temp->pre;//temp指向前一位

aa、temp->length = 80;

bb、for(m = temp->length-n,j=0;mlength;m++,j++)

cc、a->data[j]=temp->data[m]; }//将前一行后n个字符移到下一行的前n个字符位置

dd、for(m=temp->length-n-1;m>=(i%80);m--)

ee、temp->data[m+n]=temp->data[m];//插入行位置后的字符后移n位

ff、for(m=(i%80),j=0;m<(i%80)+n;m++,j++)

gg、temp->data[m] =Data[j];}//将要插入的字符赋值到插入的位置

hh、return temp;}

ii、I)、Bmenu()文本内容处理菜单

jj、本函数为文本内容处理菜单,即使用循环语句对文本内容处理部分的子函数集中在此函数中。

kk、J)、Welcome()是将一标题输出在DOS节面的最上端;

ll、K)、menu()main()

mm、主菜单函数以及主函数;

nn、本人将主菜单单独创建为一个子函数,方便观看。仍然是很简单的循环语句实现。

oo、主函数为:

pp、void main()

qq、{head=(LinkList *)malloc(sizeof(LinkList));

rr、L inkList *temp;

ss、menu(temp);

tt、}

uu、先为head申请存储空间,然后创建指针变量temp,然后直接在主菜单函数中进行其他操作。

四、上机调试

1、上机调试过程中遇到的问题及解决方法:

a)由于本程序的操作大部分都为经常使用的查找、删除、插入,基本的算法及代码都可以通过查找资料得到,故没有出现多大的问题。错误主要是在于删除及插入等子

函数中复杂操作过程中出现的小问题。

b)删除及插入过程中需要在子函数中定义一个数组变量,用来存储输入的信息,然后用来与链表中的信息进行比较以达到删除或者插入。另为达到将输入的信息赋值给

子函数中定义的数组,特使用了c++中的strcpy()函数。

c)为了将程序界面更加的完美,做了3个菜单,还写了一个子函数专门将标题显示在程序最上端。清屏函数使用system(“cls”)。

2、时间,空间性能分析:

本算法的空间复杂度很低,只需要文本的行数(N—1)*80+L(最后一行字符数)的数组存放结果,因此空间复杂度为O(N)。但是本算法的时间复杂度比较高,由于输出函数、

查找函数算法时间复杂度均为O(N),但是删除函数、插入函数算法的时间复杂度较高。但是,我暂时还问想到时间复杂度更小的算法,因此在这里我无法对该算法进行优化。

3、经验和体会:

得到文本编辑器这一课程设计题目时,自己还比较害怕是制作向windows系统中记事本一样的程序。看了任务书之后自己有了些欣慰,任务书上要求是对输入的信息进行操作,

这是我们经常练习的内容,虽然是比平时练习的更为难,更有深度,但自己毕竟知道该向什么方向去努力,自己应该如何去编写这个程序。所以自己在整个课程设计过程中还是比较轻

松的,编写过程中遇到的困难及问题都通过查阅资料、向老师提问得以解决。这都是基于对课题有一个明确的了解,清楚向什么方向去写。所以本次课程设计自己最大的体会就是不管

写什么程序,自己首先得对这个问题要分析透彻,要知道自己要干什么,然后才能让自己干什么。

五、测试结果及分析

在”abc.txt”中存有以下一段文本:

How To Chat Someone Up On The Train, Bus Or TubeRemember that person you saw on

the tube that you thought was devastatingly attractive but didn't have the nerve to talk to?

With our help, you may never have to wonder if the one that got away was actually 'The

One'. Follow these easy steps and you will have the confidence to chat someone up on

public transport!

开始在VC++6.0中运行此程序:

根据提示,首先选择输入1,有如下结果:

在这里我们选择功能1,从“abc.txt”中读取文本,并输出到屏幕:

经与“abc.txt”文本中的内容对照,读取磁盘文件操作时成功的,并把文本中的信息存储到申请的由行指针指向的一维数组中!

选择3,返回主菜单后,选择操作2,显示当前文本内容:

再次证明文本中的内容存到所申请的空间中!

返回到主菜单后,选择功能3,进入文本内容统计菜单:

分别选择1、2、3、4、5、6,得如下结果:

选择7,退出统计界面,进入主菜单,选择操作4,有:

选择1操作,则有:

选择2操作,则有:

进行删除操作后:

可以看到,已经将字符串ve删除!选择操作3有:

插入操作:

插入后的文本内容:

可见,插入操作的结果是正确的。

选择操作4,得:

六、总结:通过本次课程设计,对图的概念有了一个新的认识,在学习离散数

学的时候,总觉得图是很抽象的东西,但是在学习了《数据结构与算法》这门课程

之后,我慢慢地体会到了其中的奥妙,图能够在计算机中存在,首先要捕捉他有哪

些具体化、数字化的信息,比如说权值、顶点个数等,这也就说明了想要把生活中

的信息转化到计算机中必须用数字来完整的构成一个信息库,而图的存在,又涉及

到了顶点之间的联系。图分为有向图和无向图,而无向图又是有向图在权值双向相

等下的一种特例,如何能在计算机中表示一个双向权值不同的图,这就是一件很巧

妙的事情,经过了思考和老师同学的帮助。对整个程序而言,Dijkstra 算法始终都是核心内容,其实这个算法在实际思考中并不难,也许我们谁都知道找一个路径最

短的方法,及从顶点一步一步找最近的路线并与其直接距离相比较,但是,在计算

机中实现这么一个很简单的想法就需要涉及到很多专业知识,为了完成设计,在前

期工作中,基本都是以学习 C 语言为主,所以浪费了很多时间,比如说在程序中,

删除顶点和增加顶点的模块中都有和建图模块相互重复的函数,但是由于技术的原

因,只能做一些很累赘的函数,可见在调用知识点,我没有掌握好。不过,有了这

次课程设计的经验和教训,我能够很清楚的对自己定一个合适的水平,而且在这次

课程设计中我学会了运用两个新的函数sprintf()和包涵在#include 头文件中的输入函数。因为课程设计的题目是求最短路径,本来是想通过算法的实现把这个程序

与交通情况相连,但是因为来不及查找各地的信息,所以,这个计划就没有实现,我相信在以后有更长时间的情况下,我会做出来的。

数据结构课程设计参考题目

数据结构课程设计题目 数据结构课程设计题目(大题目).doc 一、公司销售管理系统 项目开发基本要求 1.客户信息管理:对客户的基本信息进行添加、修改和删除。 2.产品信息管理:对产品的基本信息进行添加、修改和删除。 3.供应商信息管理:对供应商的基本信息进行添加、修改和删除。 4.订单信息管理:对订单的基本信息进行添加、修改和删除。 二、高校科研管理系统 系统主要用于帮助高校或科研单位管理和维护各项科研相关资料 项目开发基本要求 1.系统用户管理模块:为系统新用户设置用户名及口令;操作员更改自己的系统口令。2.数据字典管理模块:管理项目性质包括:分为国家自然科学基金、863、部省科委及企业集团四种情况;范围包括:分为全国、国际、地方三种情况;检索源包括:分为EI、SCI、核心和一般四种情况。 3.项目参加人员管理模块包括:显示添加修改删除查询。 4.项目基本情况模块包括:显示添加修改删除查询。 5.项目获奖情况模块包括:显示添加修改删除查询。 6.期刊论文管理模块包括:显示添加修改删除查询。 7.著作管理模块包括:显示添加修改删除查询。 8.科研工作量统计模块:按照学校科研工作量计算办法,为每位科研人员进行科研工作量的计算和统计。 9.科研积分统计模块:按照学校科研积分计算办法,为每位科研人员进行科研计分的计算和统计。 三、网络五子棋对战 四、不同排序算法模拟 五、科学计算器 数据结构课程设计题目 1.运动会分数统计 任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n< =20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分,

数据结构课程设计报告模板

《数据结构I》三级项目报告 大连东软信息学院 电子工程系 ××××年××月

三级项目报告注意事项 1. 按照项目要求书写项目报告,条理清晰,数据准确; 2. 项目报告严禁抄袭,如发现抄袭的情况,则抄袭者与被抄袭者均 以0分计; 3. 课程结束后报告上交教师,并进行考核与存档。 三级项目报告格式规范 1. 正文:宋体,小四号,首行缩进2字符,1.5倍行距,段前段后 各0行; 2. 图表:居中,图名用五号字,中文用宋体,英文用“Times New Roman”,位于图表下方,须全文统一。

目录 一项目设计方案 (3) 二项目设计分析 (4) 三项目设计成果 (4) 四项目创新创业 (5) 五项目展望 (6) 附录一:项目成员 (6) 附录二:相关代码、电路图等 (6)

一项目设计方案 1、项目名称: 垃圾回收 2、项目要求及系统基本功能: 1)利用数据结构的知识独立完成一个应用系统设计 2)程序正常运行,能够实现基本的数据增加、删除、修改、查询等功能3)体现程序实现算法复杂度优化 4)体现程序的健壮性 二项目设计分析 1、系统预期实现基本功能: (结合本系统预期具体实现,描述出对应基本要求(增、删、改、查等)的具体功能) 1. 2. 3. 4. 5. 6. 7. 2、项目模块功能描述 (基本分为组织实施组织、程序功能模块编写、系统说明撰写等。其中程序功能子模块实现) 模块一: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块二: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 模块n: 主要任务:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

2020-Linux文版-实验3-Vi编辑器的使用及C编程-学生实验报告模板-P

实验报告 课程名称: Linux操作系统 实验名称:实验3 Vi编辑器的使用及C编程 学生姓名:孙文浩班级计算机 141 学号 学院(系):信息数理学院指导教师:庄丽华 实验时间: 2016 年 9 月 30 日实验成绩: 实验3 Vi编辑器的使用及C编程 一、实验要求 (1)掌握Vi的三种运行模式及切换方法; (2)掌握使用Vi的各种操作命令进行文本文件的编辑; (3)用Vi编写Linux下C程序,掌握gcc编译。 二、实验内容和实验步骤 1、vi编辑器的使用 【操作要求1】首先用合法用户名登陆系统,不保存直接退出。 【操作步骤】 (1)在系统提示符下,输入vi,按回车键,进入vi的界面。 (2)输入:q!不保存直接退出。 【操作要求2】新建文件f1并编辑一段文字进行保存。 【操作步骤】 (1)在系统提示符下输入vi f1,按回车键。 (2)看到vi的界面,输入i,左下角会出现“插入”。 (3)输入一段文字。 10 Basic Linux Networking and Monitoring Commands You Should Know I have listed down 10 basic Linux networking and monitoring commands which each Linux user should know. These Linux basic networking and monitoring commands like hostname, ping, ifconfig, iwconfig, netstat, nslookup, traceroute, finger, telnet, ethtool are used for viewing the IP address of the Linux server, managing Linux server network adapter configuration, making network connections among Linux servers over telnet and

数据结构课程设计报告

《数据结构与算法》课程设计报告 学号: 班级序号: 姓名: 指导教师: 成绩: 中国地质大学信息工程学院地理信息系统系 2011年12 月

1.需求规格说明 【问题描述】 利用哈夫曼编码进行对已有文件进行重新编码可以大大提高减小文件大小,减少存储空间。但是,这要求在首先对一个现有文件进行编码行成新的文件,也就是压缩。在文件使用时,再对压缩文件进行解压缩,也就是译码,复原原有文件。试为完成此功能,写一个压缩/解压缩软件。 【基本要求】 一个完整的系统应具有以下功能: (1)压缩准备。读取指定被压缩文件,对文件进行分析,建立哈夫曼树,并给出分析结果(包括数据集大小,每个数据的权值,压缩前后文件的大小),在屏幕上输出。 (2)压缩。利用已建好的哈夫曼树,对文件进行编码,并将哈夫曼编码及文件编码后的数据一起写入文件中,形成压缩文件(*.Haf)。 (3)解压缩。打开已有压缩文件(*.Haf),读取其中的哈夫曼编码,构建哈夫曼树,读取其中的数据,进行译码后,写入文件,完成解压缩。 (4)程序使用命令行方式运行 压缩命令:SZip A Test.Haf 1.doc 解压缩命令:SZip X Test.Haf 2.doc或SZip X Test.Haf 用户输入的命令不正确时,给出提示。 (5)使用面向对象的思想编程,压缩/解压缩、哈夫曼构建功能分别构建类实现。 2.总体分析与设计 (1)设计思想: 1、压缩准备:1> 读文件,逐个读取字符,统计频率 2> 建立哈夫曼树 3> 获得哈弗曼编码 2、压缩过程: 1> 建立一个新文件,将储存权值和字符的对象数组取存储在文件头

数据结构实验总结报告

数据结构实验总结报告 一、调试过程中遇到哪些问题? (1)在二叉树的调试中,从广义表生成二叉树的模块花了较多时间调试。 由于一开始设计的广义表的字符串表示没有思考清晰,处理只有一个孩子的节点时发生了混乱。调试之初不以为是设计的问题,从而在代码上花了不少时间调试。 目前的设计是: Tree = Identifier(Node,Node) Node = Identifier | () | Tree Identifier = ASCII Character 例子:a(b((),f),c(d,e)) 这样便消除了歧义,保证只有一个孩子的节点和叶节点的处理中不存在问题。 (2)Huffman树的调试花了较长时间。Huffman编码本身并不难处理,麻烦的是输入输出。①Huffman编码后的文件是按位存储的,因此需要位运算。 ②文件结尾要刷新缓冲区,这里容易引发边界错误。 在实际编程时,首先编写了屏幕输入输出(用0、1表示二进制位)的版本,然后再加入二进制文件的读写模块。主要调试时间在后者。 二、要让演示版压缩程序具有实用性,哪些地方有待改进? (1)压缩文件的最后一字节问题。 压缩文件的最后一字节不一定对齐到字节边界,因此可能有几个多余的0,而这些多余的0可能恰好构成一个Huffman编码。解码程序无法获知这个编码是否属于源文件的一部分。因此有的文件解压后末尾可能出现一个多余的字节。 解决方案: ①在压缩文件头部写入源文件的总长度(字节数)。需要四个字节来存储这个信息(假定文件长度不超过4GB)。 ②增加第257个字符(在一个字节的0~255之外)用于EOF。对于较长的文件,

会造成较大的损耗。 ③在压缩文件头写入源文件的总长度%256的值,需要一个字节。由于最后一个字节存在或不存在会影响文件总长%256的值,因此可以根据这个值判断整个压缩文件的最后一字节末尾的0是否在源文件中存在。 (2)压缩程序的效率问题。 在编写压缩解压程序时 ①编写了屏幕输入输出的版本 ②将输入输出语句用位运算封装成一次一个字节的文件输入输出版本 ③为提高输入输出效率,减少系统调用次数,增加了8KB的输入输出缓存窗口 这样一来,每写一位二进制位,就要在内部进行两次函数调用。如果将这些代码合并起来,再针对位运算进行一些优化,显然不利于代码的可读性,但对程序的执行速度将有一定提高。 (3)程序界面更加人性化。 Huffman Tree Demo (C) 2011-12-16 boj Usage: huffman [-c file] [-u file] output_file -c Compress file. e.g. huffman -c test.txt test.huff -u Uncompress file. e.g. huffman -u test.huff test.txt 目前的程序提示如上所示。如果要求实用性,可以考虑加入其他人性化的功能。 三、调研常用的压缩算法,对这些算法进行比较分析 (一)无损压缩算法 ①RLE RLE又叫Run Length Encoding,是一个针对无损压缩的非常简单的算法。它用重复字节和重复的次数来简单描述来代替重复的字节。尽管简单并且对于通常的压缩非常低效,但它有的时候却非常有用(例如,JPEG就使用它)。 变体1:重复次数+字符 文本字符串:A A A B B B C C C C D D D D,编码后得到:3 A 3 B 4 C 4 D。

浙江大学Linux程序设计实验报告

Linux程序设计实验报告1 ——操作系统基本命令使用 一、实验目的 1.通过对Emacs、vi、vim、gedit文本编辑器的使用,掌握在Linux环境下文本文件的编辑方法; 2.通过对常用命令mkdir、cp、cd、ls、mv、chmod、rm等文件命令的操作,掌握Linux操作系统中文件命令的用法。 二、实验任务与要求 1.emacs的使用,要求能新建、编辑、保存一个文本文件 2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 3.gedit的使用,要求能新建、编辑、保存一个文本文件 4.掌握mkdir、cd命令的操作,要求能建立目录、进入与退出目录 5.掌握cp、ls、mv、chmod、rm命令的操作,要求能拷贝文件、新建文件、查看文件、文件重命名、删除文件等操作。 三、实验工具与准备 计算机PC机,Linux Redhat Fedora Core6操作系统 四、实验步骤与操作指导 任务1.学习emacs的使用,要求能新建、编辑、保存一个文本文件 (1)启动emacs (2)输入以下C程序 (3)保存文件为kk.c (4)用emacs打开文件kk.c (5)修改程序 (6)另存为文件aa.txt并退出。 任务2.vi或vim的使用,要求能新建、编辑、保存一个文本文件 (1)点击”应用程序”→ “附件”→“终端”,打开终端,在终端输入命令: [root@localhost root]#vi kk.c 按i键,进入插入状态。 (2)输入以下C程序 #include int main( ) {

printf(“Hello world!\n”); return 0; } 此时可以用Backspace、→、←、↑、↓键编辑文本。 (3)保存文件为kk.c 按Esc键,进入最后行状态,在最后行状态输入:wq保存文件,退出vi。 (4)用vi打开文件kk.c,输入命令: [root@localhost root]#vi kk.c (5)修改程序为: #include int main( ) { printf(" Hello world!\n"); printf("*****************\n"); return 0; } (6)按Esc键,进入最后行状态,在最后行状态输入:wq aa.txt保存文件,如图1所示,另存为文件aa.txt并退出vi。。 图1 程序编辑环境 任务3.gedit的使用,要求能新建、编辑、保存一个文本文件 (1)启动gedit,点击”应用程序”→ “附件”→“文本编辑器”,打开文本编辑器,如图所示。

数据结构课程设计独立题目

题目2:运动会分数统计 1.问题描述 参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为:5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 2.功能要求 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分; 3)可以按学校编号、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。 。 题目6:哈夫曼编/译码器 1.问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼编/译码系统。 2.功能要求 I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。 E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree 中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile 中。 D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 P:印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。 T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint 中。 题目9:构造可以使n个城市连接的最小生成树 1.问题描述 给定一个地区的n个城市间的距离网,用Prim算法或Kruskal算法建立最小生成树,并计算得到的最小生成树的代价。 2.功能要求 城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最小生成树的代价。

数据结构课程设计报告模板

课程设计说明书 课程名称:数据结构 专业:班级: 姓名:学号: 指导教师:成绩: 完成日期:年月日

任务书 题目:黑白棋系统 设计内容及要求: 1.课程设计任务内容 通过玩家与电脑双方的交替下棋,在一个8行8列的方格中,进行棋子的相互交替翻转。反复循环下棋,最后让双方的棋子填满整个方格。再根据循环遍历方格程序,判断玩家与电脑双方的棋子数。进行大小判断,最红给出胜负的一方。并根据y/n选项,判断是否要进行下一局的游戏。 2.课程设计要求 实现黑白两色棋子的对峙 开发环境:vc++6.0 实现目标: (1)熟悉的运用c语言程序编写代码。 (2)能够理清整个程序的运行过程并绘画流程图 (3)了解如何定义局部变量和整体变量; (4)学会上机调试程序,发现问题,并解决 (5)学习使用C++程序来了解游戏原理。 (6)学习用文档书写程序说明

摘要 本文的研究工作在于利用计算机模拟人脑进行下黑白棋,计算机下棋是人工智能领域中的一个研究热点,多年以来,随着计算机技术和人工智能技术的不断发展,计算机下棋的水平得到了长足的进步 该程序的最终胜负是由棋盘上岗双方的棋子的个数来判断的,多的一方为胜,少的一方为负。所以该程序主要运用的战术有削弱对手行动战术、四角优先战术、在游戏开局和中局时,程序采用削弱对手行动力战术,即尽量减少对手能够落子的位置;在游戏终局时则采用最大贪吃战术,即尽可能多的吃掉对手的棋子;而四角优先战术则是贯穿游戏的始终,棋盘的四角围稳定角,不会被对手吃掉,所以这里是兵家的必争之地,在阻止对手进角的同时,自己却又要努力的进角。 关键词:黑白棋;编程;设计

java文本编辑器实验报告

Java考核 课程名称Java程序设计 题目名称文本编辑器的设计与实现学生学院计算机学院 专业班级计算机17(2)班 学号3117004479 学生姓名李泽豪 指导教师赵锐 2018 年12 月11 日

一、课程题目 编程实现一个文本编辑器 使其具有新建、打开、保存,编辑(查找、替换、大小写转换等)、统计(字数、行数、字符数等)、格式(字体设置、字体大小、字体颜色、背景颜色等)等功能。 要求:基于JFrame窗体设计、使用菜单进行功能选择。 提示:字体颜色,背景颜色的设置,可使用javax.swing包中的JColorChooser类的静态方法showDialog()调用标准颜色对话框来完成;文件操作可通过javax.swing包中JColorChooser类中的showSaveDialog()、showOpenDialog()方法调用标准的的文件对话框来完成。 二、题目分析与设计 2.1开发环境 使用Eclipse开发软件 2.2需求分析 简单的文本编辑器提供给用户基本纯文本的文字编辑功能,能够读取计算机本地磁盘中的文本内容,将用户文本导入到磁盘中之中,以及实现基本的字体设置(字体,字号,字体颜色)简单的编辑字体的功能,以及统计(字数,行数,字符数),增强视觉体验的背景颜色功能等,简单而实用。而网络上的各种编辑器,有的功能不足(如自带的记事本),而有些编辑器功能太繁杂,仅以日常应用方面来说,一个文本编辑器只需要简单的功能就够了。 2.3功能构架 本程序要构建的文本编辑器按照题目要求,分为四个方面: (1)“文件”菜单:包括“新建”并提示是否保存已编辑内容,“打开”计算机本地磁盘的文本文件,主动“保存”自己已经编辑好的内容到电脑的磁盘或“另存为”新的文件之中,以及“退出”并提示是否保存已编辑的内容。 (2)“编辑”菜单:包括对已编辑文本的一个“查找与替换”功能,对已编辑英文文本的一个“大小写转换”功能。 (3)“格式”菜单:实现对文本的“字体”设置,“字体大小”以及“字体颜色”,还有

数据结构课程设计题目

《数据结构》课程设计题目 1. 排序算法的性能分析 问题描述 设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求 (1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。 (2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容 (1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。 2. 排序算法思想的可视化演示—1 基本要求 排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。 3. 排序算法思想的可视化演示—2 基本要求 排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。 4. 线性表的实现与分析 基本要求 ①设计并实现线性表。 ②线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方 式 ③针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图 形演示)。 5. 等价类实现及其应用 问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为r i(是一个整数),最后期限为d i(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调

度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求: 使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。 6. 一元稀疏多项式计算器 问题描述 设计一个一元稀疏多项式简单计算器。 基本要求 一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,…,c n,e n,其中n是多项式的项数,c i,e i,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做) 7. 长整数的代数计算 问题描述 应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ①长整数长度在一百位以上。 ②实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, a?b mod n, a÷b mod n。 ③输入输出均在文件中。 ④分析算法的时空复杂性。 8. 敢死队问题。 有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。 要求:至少采用两种不同的数据结构的方法实现。 9. 简单计算器

数据结构课程设计报告

编号 课程设计 题目 1、一元稀疏多项式计算器 2、模拟浏览器操作程序 3、背包问题的求解 4、八皇后问题 二级学院计算机科学与工程学院 专业计算机科学与技术 班级 2011级 37-3班 学生姓名 XX 学号 XXXXXXXXXX 指导教师 XXXXX 评阅教师 时间 1、一元稀疏多项式计算器 【实验内容】 一元稀疏多项式计算器。

【问题描述】 设计一个一元稀疏多项式简单计算器。 【需求分析】 其基本功能包括: (1)输入并建立多项式; (2)输出多项式,输出形式为整数序列为:n,c1,e1,c2,e2,……,cn,en,其中n 是多项式的项数,ci,ei分别是第i项的系数和指数,序列按指数降序排序;(3)多项式a和b相减,建立多项a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做); 【概要设计】 -=ADT=- { void input(Jd *ha,Jd *hb); void sort(dnode *h)

dnode *operate(dnode *a,dnode *b) float qiuzhi(int x,dnode *h) f",sum); printf("\n"); } 【运行结果及分析】 (1)输入多项式:

(2)输出多项式(多项式格式为:c1x^e1+c2x^e2+…+cnx^en): (3)实现多项式a和b相加: (4)实现多项式a和b相减: (5)计算多项式在x处的值:

2、模拟浏览器操作程序 【实验内容】 模拟浏览器操作程序 【问题描述】 标准Web浏览器具有在最近访问的网页间后退和前进的功能。实现这些功能的一个方法是:使用两个栈,追踪可以后退和前进而能够到达的网页。在本题中,要求模拟实现这一功能。 【需求分析】 需要支持以下指令: BACK:将当前页推到“前进栈”的顶部。取出“后退栈”中顶端的页面,使它成为当前页。若“后退栈”是空的,忽略该命令。 FORWARD:将当前页推到“后退栈”的顶部。取出“前进栈”中顶部的页面,使它成为当前页。如果“前进栈”是空的,忽略该命令。 VISIT:将当前页推到“后退栈”的顶部。使URL特指当前页。清空“前进栈”。 QUIT:退出浏览器。 假设浏览器首先加载的网页URL是:http:

最新数据结构实训总结

精品文档 这次课程设计的心得体会通过实习我的收获如下1、巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。2、培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。3、通过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。4、通过课程设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。 编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。 通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解,也形成了一定的个人做事风格。 通过这次课程设计,让我对一个程序的数据结构有更全面更进一步的认识,根据不同的需求,采用不同的数据存储方式,不一定要用栈,二叉树等高级类型,有时用基本的一维数组,只要运用得当,也能达到相同的效果,甚至更佳,就如这次的课程设计,通过用for的多重循环,舍弃多余的循环,提高了程序的运行效率。在编写这个程序的过程中,我复习了之前学的基本语法,哈弗曼树最小路径的求取,哈弗曼编码及译码的应用范围,程序结构算法等一系列的问题它使我对数据结构改变了看法。在这次设计过程中,体现出自己单独设计模具的能力以及综合运用知识的能力,体会了学以致用、突出自己劳动成果的喜悦心情,也从中发现自己平时学习的不足和薄弱环节,从而加以弥补。 精品文档

文本编辑器c++实验报告附源代码

四川大学软件学院 实验报告 课程名称数据结构实验课时8 实验项目文本编辑器实验时间12到14周实验目的了解c++类的封装和KMP算法。 实验环境 Windows平台 VC6.0++ 实验内容(算法、程序、步骤和方法) 部分函数创建思想: 创建过程如下: a、定义LinkList指针变量*temp: LinkList *temp; b、定义文本输入变量ch,记录文本行数变量j,记录每行字符数变量i; c、申请动态存储空间:head->next=(LinkList *)malloc(sizeof(LinkList)); d、首行头指针的前驱指针为空:head->pre=NULL; 首行指针:temp=head->next; 首行指针的前驱指针也为空:temp->pre=NULL; 定义没输入字符时文章长度为0:temp->length=0; 初始化为字符串结束标志,防止出现乱码:for(i=0;i<80;i++) temp->data[i]='\0'; e、利用循环进行文本输入 for(j=0;jdata[i]=ch; //给temp指向的行赋值 ···· temp->length++;//行中字符长度加1 if(ch=='#') {NUM=j; break; //文章结束时,Num来记录整个文章的行数 }}} 在字符输入的过程中,如果在单行输入的字符超过了80个字符, 则需要以下操作: 输入字符数大于80,重新分配空间建立下一行 temp->next=(LinkList *)malloc(sizeof(LinkList)) ;

数据结构课程设计题目表

《数据结构》课程设计课题表 课题1:设计出链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题2:设计出顺序表结构的相关函数库,以便在程序设计中调用。要求: (1)包括线性表的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题3:设计程序以实现任意两个高次多项式的加法和乘法运算。 要求: (1)所设计的数据结构应尽可能节省存储空间。 (2)程序的运行时间应尽可能少。 课题4:设计一个模拟计算器的程序,要求能对包含加、减、乘、除、括号运算符及SQR和ABS函数的任意整型表达式进行求解。 要求:要检查有关运算的条件,并对错误的条件产生报警。 课题5:设计出二叉链表结构的相关函数库,以便在程序设计中调用。要求: (1)包括二叉树的各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题6:设计出树结构的相关函数库,以便在程序设计中调用。要求: (1)包括树结构的存储结构及各种基本函数以及常用函数(自己确定函数、函数形式及理由)。 (2)最好能借助语言环境实现图形显示功能,以便能将抽象的数据结构以图形方式显示出来,将复杂的运行过程以动态方式显示出来。 (3)给出若干例程,演示通过调用自己的库函数来实现相关问题的求解。 课题7:选择合适的存储结构表示广义表,并能实现下列运算要求: (1)用大写字母表示广义表,用小写字母表示原子,并提供设置广义表的值的功能。 (2)取广义表L的表头和表尾的函数head(L)和tail(L)。

数据结构课程设计报告

数据结构课程设计 设计说明书 TSP 问题 起止日期:2016 年 6 月27 日至2016 年7 月 1 日 学生姓名 班级 学号 成绩 指导教师( 签字) 2016 年7 月 1 日

目录 第1 章需求分析.................................................................................1... 1.1 简介 (1) 1.2 系统的开发背景 (1) 1.3 研究现状 (1) 第2 章概要设计.................................................................................2... 2.1 系统开发环境和技术介绍 (2) 2.2 系统需求分析 (2) 2.2.1 总体功能分析 (2) 2.2.2 核心功能分析 (3) 第3 章详细设计...................................................................................4... 3.1 系统开发流程 (4) 3.2 系统模块设计 (4) 3.3 系统结构 (6) 3.2 系统流程图 (6) 第4 章调试分析...................................................................................7... 4.1 程序逻辑调试 (7) 4.2 系统界面调试 (8) 第5 章测试结果...................................................................................9... 5.1 测试环境 (9) 5.2 输入输出测试项目 (9) 5.3 测试结果 (10) 结论.....................................................................................................1..1.. 参考文献................................................................................................1..1. 附录.......................................................................................................1..2..

数据结构课程设计——文字编辑实验报告

课程设计报告课程设计题目:文章编辑 姓名杨博 学号201520220205 班级1522202 指导教师邹国华 2016年6月30日

东华理工大学 课程设计评分表 学生姓名:杨博班级:1522202 学号:201520220205 课程设计题目:文章编辑 项目内容满分实评 选题能结合所学课程知识、有一定的能力训练。符合选题要求 (5人一题) 10 工作量适中,难易度合理10 能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10 能应用计算机软件进行编程、资料搜集录入、加工、排版、 制图等 10 能体现创造性思维,或有独特见解10 成果质量总体设计正确、合理,各项技术指标符合要求。10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、 结论严谨合理;分析处理科学、条理分明、语言流畅、结构 严谨、版面清晰 10 设计说明书栏目齐全、合理,符号统一、编号齐全。格式、 绘图、表格、插图等规范准确,符合国家标准 10 有一定篇幅,字符数不少于5000 10 总分100 指导教师评语: 指导教师签名: 2016年6月30 日

实验题目:简单的文本编辑器 1、题目及要求 名称:简单的文本编辑器 内容:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章, 每行最多不超过80个字符,共N行。 要求:(1)分别统计出其中英文字母数和空格数及整篇文章总字数; (2)统计某一字符串在文章中出现的次数,并输出该次数; (3)删除某一字符或者子串,并将后面的字符前移。 (4)插入某一字符或者子串。 (5)查找某一字符或者子串。 存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。 输出形式: (1)分行输出用户输入的各行字符; (2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数" (3)输出删除某一字符串后的文章。 2、对题目的大概理解: 本程序应实现以下功能: (1)文章内容的输入:包括字母、标点符号、数字、空格等; (2)文章内容的统计:包括文章中大写字母、小写字母、数字、标点符号、空格以 及文章所有字数的个数的统计; (3)文章内容的处理:包括对文章内容的查找、删除以及对指定位置进行插入操作,其中在查找的过程中统计出该字符或字符串在文章中出现的次数; 1、问题分析 本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输 入的字符数大于80时如何换行;对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASCⅡ比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字 符串进行查找,然后对其进行删除。插入部分为通过输入的插入位置(行、列)将字符或者 字符串插入到文章制定位置。 一、数据结构选择和概要设计

数据结构课程设计题目

数据结构课程设计 一、考核方法和容 根据课程设计过程中学生的学生态度、题目完成情况、课程设计报告书的质量和回答问题的情况等按照10%、40%、30%、20%加权综合打分。成绩评定实行优秀、良好、中等、及格和不及格五个等级。 评分标准: 优秀:答辩所有问题都能答出+报告良好 或报告良好+实现“提高部分”的功能; 良好:答辩所有问题都能答出+报告一般; 或报告一般+实现“提高部分”的功能; 中等:答辩大部分问题能答出+报告良好; 及格:答辩大部分问题能答出+报告一般; 以下四种,都不及格: 1)答辩几乎答不出问题; 2)报告几乎都是代码; 3)雷同部分达到60%; 4)课设报告与数据结构和c/c++关联不大。 课设报告的装订顺序如下: 任务书(签名,把题目要求贴在相应位置,注意下划线)-----目录(注意目录的格式,页码)-----1、设计任务(题目要求)-----2、需求分析(准备选用什么数据逻辑结构?数据元素包含哪些属性?需要哪些函数?为什么要这样设计?最后列出抽象数据类型定义)-----3、系统设计(设计实现抽象数据类型,包含选择什么物理存储方式?数据元素的结构体或类定义,以及各函数的设计思路,算法,程序流程图等)----4、编码实现(重要函数的实现代码)-----5、调试分析(选择多组测试数据、运行截图、结果分析)-----6、课设总结(心得体会)-----7、谢辞-----8、参考文献; 课设报告打印要求: B5纸打印,报告总页数控制在10—15页,报告中不能全是代码,报告中代码总量控制在3页。版式:无页眉,有页码,页码居中 字号:小四,单倍行距 字体:宋体+Times new Romar 截图:截图要配图的编号和图的题目,如:“图1 Insert函数流程图” 二、课程设计的题目 1.长整数的加法运算 2.通讯录管理系统的设计与实现——顺序表 3.广义表的应用 4.学生成绩管理系统的设计与实现 5.家谱管理系统的设计与实现

数据结构课程设计报告-学生成绩管理系统[]

武汉理工大学华夏学院课程设计报告书 课程名称:数据结构课程设计 题目:用C语言实现成绩统计程序的设计系名:信息工程系 专业班级:计算机1121 姓名:吴涛 学号:10210412104 指导教师:司晓梅 2016年3 月20日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:数据结构课程设计指导教师:司晓梅班级名称:计算机1121 开课系、教研室:信息系计算机 一、课程设计目的与任务 《数据结构》课程设计是为训练学生的数据组织能力和提高程序设计能力而设置的增强实践能力的课程。目的:学习数据结构课程,旨在使学生学会分析研究数据对象的特性,学会数据的组织方法,以便选择合适的数据的逻辑结构和存储结构以及相应操作,把现实世界中的问题转换为计算机内部的表示和处理,这就是一个良好的程序设计技能训练的过程。提高学生的程序设计能力、掌握基本知识、基本技能,提高算法设计质量与程序设计素质的培养就是本门课程的课程设计的目的。 任务:根据题目要求,完成算法设计与程序实现,并按规定写出课程设计报告。 二、课程设计的内容与基本要求 设计题目:用C语言实现成绩统计程序的设计 〔问题描述〕给出n个学生的m门课程的考试成绩信息,每条信息由姓名、课程代号与分数组成,要求设计算法: (1)输入每个人的各门课程的成绩,计算每人的平均成绩; (2)按平均成绩的高低次序,打印出个人的名次,平均成绩相同的为同一名次; (3)按名次列出每个学生的姓名和各科成绩; 〔基本要求〕学生的考试成绩必须通过键盘输入,且需对输出进行格式控制; 〔算法提示〕可以用选择排序、冒泡排序等多种排序算法求解; 具体要完成的任务是: A. 编制完成上述问题的C语言程序、进行程序调试并能得出正确的运行结果。 B. 写出规范的课程设计报告书; 三、课程设计步骤及时间进度和场地安排 时间:1周地点:现代教育中心 具体时间安排如下: 第一天:布置题目,确定任务、查找相关资料 第二天~第四天:功能分析,编写程序,调试程序、运行系统; 第五天上午:撰写设计报告; 第五天下午:程序验收、答辩。 四、课程设计考核及评分标准

相关文档
最新文档