上机实习作业范文

2024-06-05

上机实习作业范文(精选8篇)

上机实习作业 第1篇

上机实习试题

1、利用馆藏数据库,检索出郑州大学区域经济学专业,刘荣增教授近三年所带研究生的学位论文,写出检索步骤及结果。(结果可截屏)(万方博硕论文库)

2、利用馆藏数据库,检索北京大学老师撰写的题名含有“管理”或“市场”的学术论文,写出检索步骤及结果。(结果可截屏)(中国期刊全文数据库)

3、利用馆藏数据库,检索出《随遇而安》这本书的序言部分(结果可截屏)。(超星电子图书)

4、检索与课题“基于信息交流视角的档案、图书、情报管理一体化研究”相关或相似文献,写出检索步骤,检索词及结果。(结果可截屏)(中国期刊全文数据库——提取关键词)

注意事项:

请各位同学将过程写出来,以Word文件保存。保存文件名为班级、姓名学号。如:工业工程131张三45(45为学号后两位)。

班长负责将本班作业收齐全,以班级命名文件夹。比如

工业工程131,将本班的作业放在这个文件夹里,压缩后发到我的邮箱:1474605362@qq.com

上机实习作业 第2篇

二、万方全文数据库的使用

系别:专业班级:学号:姓名:

一、实习目的及要求

目的:熟练掌握中国学位论文全文数据库、中国数字化期刊群、中国学术会议论文全文数据库三个数据库的使用方法。

要求:使用不同的数据库查询同一课题

二、实习题目

1.就自己所学专业的知名教师发表的文章进行检索,并利用二次检索使检索结果更符合自己的学习方向或兴趣

2.就自己所学专业的某本期刊进行检索,浏览该刊的某一期的文章;

3.使用三个不同的数据库查询同一课题,自己设计一个检索实例,对自己感兴趣的文章进行检索,并选择某篇文章阅读全文后保存到本地。

三、问答题

1.比较同方和万方学位论文数据库的收录范围与检索途径的异同

2.进入同方、万方,查找自己专业的硕士学位论文各一篇。并比较两个数据库的检索结果数,回答哪个数据库收录的论文多。并比较后回答是否可以一次下载全部硕士论文?

作业要求:

1、格式规范。按照WORD格式来做,作业名为班级姓名,例如机控07005班王建武23号;

2、按时完成。第15周周五(6月12日)之前交作业;

3、邮件发送(作业以附件形式发送)。

上机实习作业 第3篇

笔者在实验教学中采用的教材是清华大学出版社出版的《会计电算化系统应用操作》(第3版)。该书采用我国目前最优秀的用友财务及企业管理软件U8作为操作软件,对会计电算化系统中的总账和报表两个模块的功能进行了具体描述和应用性操作。难能可贵的是,该书设计了一家中型国有企业2007年12月份发生的全部经济业务的原始凭证作为业务内容,并将其贯穿于阐述总账系统和报表系统应用操作的每一个过程,并根据《企业会计准则2006》和《企业会计准则———应用指南2006》的规定对业务进行处理,数据结果完全正确,可以放心使用。

笔者在上机实验结束后要求学生交电子版作业,主要包括账套、报表两个文件夹,具体内容如下:(1)账套文件夹,即学生输出的总账账套;(2)报表文件夹,包括资产负债表、利润表、现金流量表。以下分别对这两个子系统的上机作业检查情况进行分析讨论。

1. 总账子系统

总账账套包括核算单位的所有会计信息,如凭证、账簿、汇总表等,内容丰富,因此给教师检查作业带来一定困难,不清楚检查哪些项目好。其实问题很简单,熟知会计软件的设计原理就会明白,账簿及科目汇总表都是以凭证文件为基础得到的,所以在检查上机作业时根本不用检查凭证,只要检查学生的全月科目汇总表是否正确、发生额及余额表(在实现计算机记账后,用户多用余额表来代替总账)是否正确即可。

但还有一个问题,有的学生平时上机缺勤,到交作业时就动起了歪脑筋,想拷贝别人的账套或者请别的同学帮助完成,因为他觉得凭证太多了,输入很费事。对于这样的学生,光说教是不行的,笔者的经验是对上交的实验作业提出一个要求,即制单人必须是学生本人的姓名,否则视为作业不合格。教师在检查作业时,除了看全月科目汇总表、发生额及余额表数据是否正确外,还要看其制单人是否为本人。具体检查步骤如下:“凭证”→“查询凭证”,出现“凭证查询”窗口,选择好条件后按“确认”,如果“制单人”部分出现该学生姓名则该项目作业正确(如图1所示)。

2. 报表子系统

报表子系统的检查内容包括资产负债表、利润表、现金流量表3项,都要看最终结果是否正确。具体来说:(1)资产负债表,要检查最后一行“资产合计”与“负债和所有者权益合计”的期初、期末数是否相等,并与正确数据一致。(2)利润表,要检查最后一行“净利润”的数据是否与正确数据一致。(3)现金流量表,分别检查“经营活动产生的现金流量净额”、“投资活动产生的现金流量净额”、“筹资活动产生的现金流量净额”的数据是否与正确数据一致。

但还有一个问题,有的学生交上来的报表,其数据是正确的,但实际上是拷贝别人的报表,所以教师检查作业时必须辛苦一下,重新引用学生本人的账套,看能否生成正确的报表数据。具体操作如下:在打开学生交上来的报表文件后,点击“数据”→“账套初始”,在“账套及时间初始窗口”中输入该学生的总账账套号及会计年度(如图2所示,该学生的总账账套号及会计年度在上述总账子系统检查时已知)。之后进行“数据”→“表页重算”操作,即可生成所需报表。

另外,以上作业检查应注意的问题并非仅针对教师,也可以在上机操作之前就明示给学生,使其不存一丝侥幸心理,老老实实做好上机作业,从而取得预期的实验教学效果。

参考文献

[1]何日胜.会计电算化系统应用操作[M].第3版.北京:清华大学出版社,2008.

[2]张瑞君,蒋砚章.会计信息系统[M].第4版.北京:中国人民大学出版社,2006:95-96.

高中信息技术课上机实习的思考 第4篇

学好程序语言,除掌握教材中的基本语句、基本算法、分析好程序结构之外,关键是上机实习。通过上机实习,可以根据出错信息提示反复修改程序并及时处理,直到整个程序运行正常,能出示所需的结果为止。如何进一步提高上机实习效率,笔者通过多年的教学实践,以QBASIC为例做一些探讨。

一、充分的准备工作

上机实习前,要透彻分析书中涉及上机的每一个程序,充分理解程序的功能,明确问题要求和执行步骤,并写出程序的运行结果。与此同时,还应写出当程序几处关键点改动后,会出现的预期结果。只有这样学生才能在实际操作中更深地理解程序的内涵,从而学以致用,起到事半功倍的效果。

例如,在求解的程序段S=1!+2!+3!+…10!,经过算法分析,变量设计,细化一下算法,画出相应的框图,编出对应的程序段(以下编程均以QBASIC为例)

FACT=1:N=10

S=0

FOR I=1 TO N

FACT=FACT*I

S=S+FACT

NEXT I

PRINT N;”!=”;S

在上面这个程序中,I是循环控制变量,S是累加器,FACT是变量。在编程写出结果时,还应考虑当N为100时,FACT=0,S=10,或者S=S+FACT*I,或者S=S+S*I时的结果,以及是否能将30行和40行合并成一行·将这些题目留给学生,让他们做完题目再上机,验证效果会更好。

二、扎实的操作训练

学生做完上机实习作业后,应尽早上机实习。在上机实习中,对于能力较差的学生,应对照源程序录入;对于能力较强的学生,可以提倡不看实习题目录入编写程序的做法。

在实习中,辅导教师除了指导学生完成实习题目外,还可以对学生提出问题,提高学生对程序的理解。例如,求N!的程序,教师当场可以提出为什么S=0,FACT=1,如果不这样取值,结果会是多少·能不能让N取1000·I取值从N到1结果会如何·这些问题有利于提高学生的程序调试能力,加深对算法的掌握。

另外,上机时还可以分成录入程序、校对录入的程序两步,检查无误后,方可运行程序。最后,根据运行结果填写实习报告。

三、关键细节的突破

1.破解屏幕显示的英语及内涵

在上机实习中,经常出现一些英语来提示错误,要求学生能在课余时间里学习常见的屏幕上显示的英语,特别是针对某一程序。例如:QBASIC程序设计在编译运行当中出现“DUPLICATE DEFINATION ”错误信息提示时,说明数组越界,学生能返回编辑状态,对所定义的数组进行删除或修改,可试着用ERASE数组名和DIM数组名(上界)修改,存盘后继续运行;在读数和置数语句READ/DATA为变量赋值时,当数据不足时,出现“OUT OF DATA”错误码提示,学生能返回到QBASIC编辑器中,修改DATA语句,为这条语句添加数据,使添加数据后数据的个数应大于等于变量的个数,运行后就不再出现这条错误提示了。实质上,专业教师在授课当中,也可以将本书相关的屏幕显示英语尽可能多地传授给学生,使它们尽早领会其中的含义,这样有助于提高学生的编程效率。

2.丰富而适量的变式训练

教师在留给学生上机实习题目时,一定要适量。太多会影响学生上机的积极性,发挥不了主观能动性,使学生对上机失去信心。这样不仅不能提高程序编写和调试能力,反而一定程度上影响教学计划的正常进行。太少又不利于加深对知识的掌握。完成上机实习题目后,学生在对程序有较透彻的理解,就可以随修改程序,判断下面可能会出现的结果,然后运行程序。这样,学生能充分领会并运用,读懂一个程序,相应的其他多个程序也就能够理解掌握了,收到融会贯通的最佳效果,同时也提高学生对程序的综合应用能力。例如上面提到的程序,学生可以将FACT开始时赋值为10,然后判断结果;或将30行改成FACT=FACT*10,或者将PRINT打印语句写成PRINT “N!=”,S是结果会是多少等,这些问题都可以提高学生的编程能力。

此外,特别需要强调的是,在上机实习以及例题分析当中,教师可以加入一些新题型,如全国计算机等级考试中的改错题,给出已编好的程序,其中有几处错误,让考生修改。像这种题目不能单一在课上分析、编写,如果不在机器上实习运行,结果是不能理解透彻的。二级考试上机的编程题,给出源程序的一部分,让学生编写剩余的程序,这些方法在教学中都可以采用。

上机实验作业-3-材料 第5篇

上万北京市民云集人民大会堂聆听新年音乐

上万北京市民选择在人民大会堂——这个象征着国家最高权力机关所在地度过了本世纪最后的时光。

在人民大会堂宴会厅——这个通常举行国宴的地方,当新世纪钟声敲响的时候,数千名参加“世纪之约”大型新年音乐舞会的来宾停住了他们的舞步,欢呼声响彻七千多平方米的富丽堂皇的宴会大厅。

一年一度的北京新年音乐会今晚早些时候在人民大会堂能容纳约万人的大会议厅举行。人们坐在拆除了表决器的坐椅上,欣赏威尔第、柴可夫斯基的名曲,而这些坐椅通常是为全国人大代表商讨国家大事时准备的。

新年音乐会汇集了强大的演出阵容,在著名指挥家汤沐海、陈燮阳、谭利华轮流执棒下,中央歌剧舞剧院交响乐团、北京交响乐团、上海交响乐团联手向观众奉上了他们的经典演出。WD02

历史悠久的古城——正定

位于河北省省会石家庄市北15公里的正定,是我国北方著名的古老城镇,自北齐建常山郡至今已经历了1500余年的沧桑。

源远流长的历史给正定留下了众多瑰伟灿烂的文物古迹,以“三山不见,九桥不流,九楼四塔八大寺,二十四座金牌楼”著称的正定还是诸多历史名人的故乡,南越王赵佗、三国名将赵云、明代吏部尚书梁梦龙、清代大学士梁清标都出生在这里。

第二次上机作业 第6篇

一、面向对象编程

【题目】小型公司技术人员信息管理程序

【要求】1.先定义日期类:

class Date

{

int year,month,day;

public:

Date(int y=2020,int m=1,int d=1);

void print();

friend bool isretire(Technician & x, Date & today);//判断技术人员是否该退休,60周岁退休

};

再按以下描述和要求建立一个类Technician;

在类外定义实现所有成员函数和友元函数。执行主函数对其测试。

Technician//技术人员类

私有成员

int num;//临时技术人员编号

char *name;//姓名

Date birthday;//生日

float hourrate;//每小时酬金

float workhours;//本月工作时数

float money;//月薪

公有成员

static int emploNo;//技术人员人数,基数200

Technician(int nu =0, char *b=“**”,int y=2020,int m=1,int d=1, float hr=160);

Technician(Technician &);//拷贝构造函数,技术人员人数加一(此同构造函数)

void alter(int nu , char *b,int y,int m,int d, float hr);//修改员工信息

~ Technician();//析构函数,释放分配的内存,技术人员人数减一

float pay();//计算月薪函数。月薪按小时计算,月薪为每小时数酬金乘以本月工作时数

friend bool isretire(Technician & x, Date & today);//判断技术人员是否该退休,60周岁退休

void display();//显示人员信息函数.显示信息包括编号、姓名、生日、月薪。

static void company_num();//显示公司技术人员人数

2.头文件包含语句为:

#include

#include

3.需在类定义外面对静态成员做定义性说明并赋初值:

int Technician:: emploNo =200;

要求:每增加一人,技术人员人数要加1,每减少一人,技术人员人数要减1。

二、商店商品管理模拟程序

【要求】按以下描述和要求建立两个类goods和store :

class goods{ //商品类

friend class store;

private:

int id;//商品代号

float price;//价格

int num;//库存数量

void AddNum(int x){num+=x;} //增加库存数量x个

};

class store{ //商店类

private:

goods s[10];//存放商品信息,最多可有10种商品

int n;//数组中已写入数据的元素个数(商品种类数)

public:

store(){n=0;} //商品表构造函数

void newgd(int a,float b,int c);//在数组s中添加一种新商品

//(为goods类对象的数据成员赋值)

void list();//屏幕打印库存商品清单和商品种类数

int MaxPrice();//找出价格最高的商品,输出其代号、价格和数量,//返回该商品在数组s中的位置

};

请完成以上未定义函数体的成员函数。

(1)在主程序中定义一个store对象G。

(2)调用成员函数newgd()输入不少于5种的商品数据,存入数组s中作为测试数据。

(3)调用成员函数list()打印商品清单.(4)调用成员函数MaxPrice()出价格最高的商品。

数据结构上机作业 第7篇

一、实验题

线性表的应用———多项式计算

二、程序设计思路

包括每个函数的功能说明,及一些重要函数的算法实现思路一链式存储:

1.void InitPoly(LNode *&p)初始化多项式 2.void TraversePoly(LNode *&p)遍历多项式 3.void ClearPoly(LNode *&p)清除多项式

4.void InsertPoly(LNode *&p, double a, int e)插入一项 5.void DeletetPoly(LNode *&p,int pos)

删除一项

6.double PolySum(LNode *&p, double x)

多项式求值 7.LNode * PolyAdd(LNode *&p1,LNode *& p2)

多项式相加 顺序存储:

1.void InitPoly1(SeqList &L)初始化多项式 2.void ClearPoly1(SeqList &L)清除多项式 3.void TraversePoly1(SeqList L)

遍历多项式

4.bool InsertPoly1(SeqList &L, ElemType item)插入一项 5.double PolySum1(SeqList L,double x)

多项式求值 6.bool DeleteList1(SeqList &L,int pos)

删除一项

7.SeqList PolyAdd1(SeqList &L1,SeqList& L2)

多项式相加

三、源程序代码

#include #include #include #include “Linkpoly.h” #include “Seqpoly.h” void main(){ cout<<“现在进行第一次测试。(链表表示)”<>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly(pa, a, e);//插入一项 pa=pa->next;} pa=pa->next;cout<<“该多项式为:”;TraversePoly(pa);//输出多项式 cout<>a;cin>>e;cin>>pos;if(DeletetPoly(pa, a, e, pos)){ cout<<“删除成功!现在多项式为:”;TraversePoly(pa);cout<>x;sum=PolySum(pa, x);cout<<“该多项式的值为:”<>n;cout<<“请输入该多项式的各项系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly(pb, a, e);//插入一项 pb=pb->next;} pb=pb->next;pp=PolyAdd(pa, pb);cout<<“两多项式相加后得到的多项式为:”;TraversePoly(pp);cout<>n;cout<<“请依次输入要测试的各项的系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly1(s, a, e);} cout<<“该多项式为:”;TraversePoly1(s);cout<>a;cin>>e;cin>>pos;if(DeletetPoly1(s, a, e, pos)){ cout<<“删除成功!现在多项式为:”;TraversePoly1(s);cout<>x;sum=PolySum1(s, x);cout<<“该多项式的值为:”<>n;cout<<“请输入该多项式的各项系数和指数:”;for(i=0;i>a;cin>>e;InsertPoly1(t, a, e);//插入一项 } q=PolyAdd1(s, t);cout<<“两多项式相加后得到的多项式为:”;TraversePoly1(q);cout<next=p;return true;} void TraversePoly(NodeType *p)//输出多项式 { NodeType *h=p->next;if(h!=p){ cout<coef<<“*”<<“X”<<“^”<exp;h=h->next;} while(h!=p){ if(h->coef>0)cout<<“+”;cout<coef<<“*”<<“X”<<“^”<exp;h=h->next;} } void ClearPoly(NodeType *&p)//清除多项式 { NodeType *cp,*np;cp=p->next;while(cp!=p){ np=cp->next;delete cp;cp=np;} p->next=p;} bool InsertPoly(NodeType *&p, float a, int e)//插入一项 { NodeType *h;if((h=new NodeType)==NULL)return false;h->coef=a;h->exp=e;h->next=p->next;p->next=h;return true;} bool DeletetPoly(NodeType *&p, float a, int e, int pos)//一项

{ if(pos>1||pos<-1)return false;NodeType *cp=p->next;NodeType *np=p;if(pos==0){ while(cp!=p){ if(cp->coef==a&&cp->exp==e)break;else{ np=cp;cp=cp->next;} } } else if(pos==-1)while(cp!=p){

删除np=cp;cp=cp->next;} np->next=cp->next;delete cp;return true;} double PolySum(NodeType *p, float x)//多项式求值 { int i;double sum=0,item;NodeType *cp=p->next;while(cp!=p){ item=1;for(i=1;i<=cp->exp;i++)item=item*x;sum=sum+item*cp->coef;cp=cp->next;} return sum;} NodeType *PolyAdd(NodeType *p1, NodeType *p2)//多项式相加 { float coef;NodeType *a=p1->next,*b=p2->next,*c,*pc;InitPoly(c);pc=c;while(a!=p1&&b!=p2){ if(a->exp==b->exp){ coef=a->coef+b->coef;if(coef!=0){ InsertPoly(pc, coef, a->exp);pc=pc->next;} a=a->next;b=b->next;} else if(a->expexp){ InsertPoly(pc,a->coef,a->exp);pc=pc->next;a=a->next;} else{ InsertPoly(pc,b->coef,b->exp);pc=pc->next;b=b->next;} } while(a!=p1){ InsertPoly(pc,a->coef,a->exp);pc=pc->next;a=a->next;} while(b!=p2){ InsertPoly(pc,b->coef,b->exp);pc=pc->next;b=b->next;} return c;} Seqploy.h: #define MaxSize 10000 struct ListType{ float *list;int size;};void InitPoly1(ListType &p)//初始化多项式 { p.list=(float*)malloc(MaxSize*sizeof(float));if(p.list==NULL){ cout<<“动态可分配的储存空间用完,退出运行!”<0){ cout<<“+”;cout<

输出多项式 } void ClearPoly1(ListType &p)//清除多项式 { if(p.list!=NULL){ delete []p.list;p.list=NULL;} p.size=0;} void InsertPoly1(ListType &p, float a, int e)//项

{ p.list[e]=a;if(p.size

{ int i,n;if(p.size==0){ cout<<“多项式为空,删除无效!”<

插入一if(p.list[e]==a)p.list[e]=0;else if(pos==-1)p.list[p.size]=0;return true;} double PolySum1(ListType p, float x)//值

{ double sum=0,item;int i,j;for(i=0;i<=p.size;i++){ item=1;for(j=1;j<=i;j++)item=item*x;sum=sum+item*p.list[i];} return sum;} ListType PolyAdd1(ListType p1, ListType p2)//项式相加

{ ListType p;InitPoly1(p);float coef;

多项式求多int i,j;for(i=0;i<=p1.size;i++){ coef=p1.list[i]+p2.list[i];InsertPoly1(p, coef, i);} if(i<=p1.size)for(j=i;j<=p1.size;j++)InsertPoly1(p, p1.list[j], j);if(i<=p2.size)for(j=i;j<=p2.size;j++)InsertPoly1(p, p2.list[j], j);return p;四实验结果分析

五.心得体会 对于结构体的认识增加了,对于动态存储也有了更多的认识,也是在不知不觉中提高了。

实验二 字符串的操作

一、实验题目——字符串的操作

二、程序设计思路

采用定长顺序存储表示,由用户创建串s和串t,实现在串s中下标为pos的字符之前插入串t。

三、源程序代码

#define MAXLEN 10 typedef struct {

/*串结构定义*/

char ch[MAXLEN];

int len;}SString;void createstring(SString *s)

/*创建串s*/ { int i,j;char c;printf(“input the length of the string:”);

scanf(“%d”,&j);

for(i=0;i

{

printf(“input the %d:”,i+1);

fflush(stdin);

scanf(“%c”,&c);

s->ch[i] = c;

} s->len = j;} void output(SString *s)

/*输出串s*/ {

int i;for(i=0;ilen;i++)

printf(“%c

”,s->ch[i]);

printf(“n”);} int StrInsert(SString *s, int pos, SString *t)/*在串s中下标为pos的字符之前插入串t */ {

int i;if(pos<0 || pos>s->len)

/*插入位置不合法*/

return(0);

if(s->len + t->len<=MAXLEN)

/*插入后串长≤MAXLEN*/ {

for(i=s->len + t->len-1;i>=t->len + pos;i--)

s->ch[i]=s->ch[i-t->len];/*将下标为pos的字符后的元素往后移动t->len个长度*/

for(i=0;ilen;i++)

s->ch[i+pos]=t->ch[i];

/*将串t从下标为pos位置开始插入到串s*/

s->len=s->len+t->len;} else { if(pos+t->len<=MAXLEN)/*插入后串长>MAXLEN,但串t的字符序列可以全部插入*/

{

for(i=MAXLEN-1;i>t->len+pos-1;i--)

s->ch[i]=s->ch[i-t->len];

for(i=0;ilen;i++)

s->ch[i+pos]=t->ch[i];

/*将串t从下标为pos位置开始插入到串s*/

s->len=MAXLEN;

}

else

/*插入后串长>MAXLEN,并且串t的部分字符也要舍弃*/

{

for(i=0;i

s->ch[i+pos]=t->ch[i];

/*直接从下标为pos的位置按顺序插入串t*/

s->len=MAXLEN;

}

return(1);} } void main(){

SString *str1;SString *str2;int i,j,k,pos;int flag=0;str1 =(SString *)malloc(sizeof(SString));str1->len = 0;printf(“creat the string 1:n”);createstring(str1);printf(“creat the string 2:n”);createstring(str2);printf(“input the insert local:”);scanf(“%d”,&pos);flag=StrInsert(str1,pos,str2);if(flag == 0)

printf(“insert error!”);else {

printf(“after insert:n”);

output(str1);} }

四、实验结果

五、实验体会

通过本次实验,我加深了对串数据结构的理解。在串的定长顺序存储结构中,按照预定义的大小,为每个定义的串变量分配一个固定长度的存储区。在存储方式中,结点大小的选择和顺序存储方式的格式选择一样都很重要,它直接影响着串处理的效率。

实验三

一、实验题目——非递归算法对二叉树进行中前序遍历

二、程序设计思路

创建一棵10个节点构造的完全二叉树,并对其进行前、中、后序遍历。

三、源程序代码

#define STUDENT EType #define SType SType

#define HeadEType int

#include #include

//定义数据结构类型

struct STUDENT { char name[8];int age;char number[15];char address[20];};

struct BinaryTreeNode { EType data;BinaryTreeNode *LChild;BinaryTreeNode *RChild;};typedef BinaryTreeNode BinaryTree;

typedef struct { BinaryTreeNode *ptr;bool status;}SType;

typedef struct { SType *element;int top;int MaxSize;}Stack;

void CreatStack(Stack &S, int MaxStackSize){// 构造一个最大容量为MaxStackSize 的堆栈

S.MaxSize = MaxStackSize;

S.element = new SType[S.MaxSize];

S.top =-1;}

bool IsEmpty(Stack &S){// 判断堆栈S是否为空

if(S.top ==-1)

return true;

return false;}

bool IsFull(Stack &S){// 判断堆栈S是否为空

if(S.top == MaxSize-1)

return true;

return false;}

bool Push(Stack &S , SType &x){// x进s栈,返回进栈后的状态值

if(IsFull(S))

return false;

S.top++;

S.element[S.top] = x;

return true;}

bool Pop(Stack &S , SType &x){// 将s栈顶的值取至x中,返回出栈后的状态值

if(IsEmpty(S))

return false;

x = S.element[S.top];

S.top--;

return true;}

BinaryTreeNode

*MakeNode(EType &x)

{//构造结点

BinaryTreeNode *ptr;

ptr = new BinaryTreeNode;

if(!ptr)return NULL;

ptr->data = x;

ptr-> LChild = NULL;

ptr-> RChild = NULL;

return

ptr;}

void MakeBinaryTree(BinaryTreeNode *root, BinaryTreeNode *left, BinaryTreeNode *right){// 联接root,left, right所指的结点指针为二叉树

root->LChild=left;

root->RChild=right;}

void PreOrderNoRecursive(BinaryTreeNode *BT){//二叉树前序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q||!IsEmpty(S)){

if(q)

{

cout<data.name<<“ ”;//访问“根”节点

ele.ptr=q;

Push(S,ele);//节点指针进栈,以后回溯时在退栈

q=q->LChild;//指针指向刚刚被访问的“根”节点的左子树

}

else

//当左子树为空时,利用堆栈回溯

if(!IsEmpty(S))

{

Pop(S,ele);//退栈回溯

q=ele.ptr;//指针重新指向刚刚被访问的“根”节点

q=q->RChild;//指针指向该回溯节点的右子树

} } }

void InOrderNoRecursive(BinaryTreeNode *BT){//二叉树的中序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q ||!IsEmpty(S)){

while(q)//找到最左边的子树

{

ele.ptr=q;

Push(S,ele);//指针非空时,将当前的“根”节点指针进栈,用于以后回溯

q=q->LChild;//指针继续指向该“根”节点的左子树

}

if(!IsEmpty(S))//当左子树为空时,进行退栈回溯

{

Pop(S,ele);//从堆栈中回溯节点指针(节点还未访问)

q=ele.ptr;

cout<data.name<<“ ”;//访问回溯的“根”节点

q=q->RChild;//指针向回溯的节点右子树推进

} } }

void PostOrderNoRecursive(BinaryTreeNode *BT){//二叉树的后序遍历非递归的算法

Stack S;SType ele;BinaryTreeNode *q=BT;int MaxStackSize=50;//假设堆的空间足够大,即MaxStackSize值足够大

CreatStack(S,MaxStackSize);//产生一个空栈

while(q ||!IsEmpty(S)){

if(q)//找最左边的子树

{

ele.ptr=q;

ele.status=false;//进栈前标记为第一次进栈

Push(S,ele);

q=q->LChild;//指针继续向左推进

}

else

if(!IsEmpty(S))//直到左子树为空时,退栈回溯

{

Pop(S,ele);//从堆栈中弹出回溯节点(还未访问)

q=ele.ptr;//q指向当前回溯节点

if(ele.status)//判断节点进栈标志,是否对其进行访问

{

cout<data.name<<“ ”;//访问回溯节点

q=NULL;//将q设为空,为了继续退栈

}

else

{

ele.status=true;//改变回溯节点的进栈标记,以便再次进栈

Push(S,ele);

q=q->RChild;//指针向该回溯节点的右孩子推进

}

} } }

//主函数 void main(){ BinaryTreeNode *ptr[11];

char Name[][8]={“ ”,“A”,“B”,“C”,“D”,“E”,“F”,“G”,“H”,“I”,“J”};EType x[11];for(int i=1;i<11;i++){

strcpy(x[11-i].name,Name[11-i]);

ptr[11-i]=MakeNode(x[11-i]);//构造10个二叉树节点

}

//将节点链接域填值,构造一个二叉树

//这里构造的是一棵有10个节点的完全二叉树

for(int j=1;j<5;j++){

MakeBinaryTree(ptr[j],ptr[2*j],ptr[2*j+1]);} MakeBinaryTree(ptr[5],ptr[10],NULL);//该完全二叉树构造完毕

//***********对已构造的完全二叉树进行前序非递归遍历************// cout<<“对该二叉树进行前序遍历结果:”<

//***********对已构造的完全二叉树进行中序非递归遍历************// cout<

//***********对已构造的完全二叉树进行中序非递归遍历************// cout<

四、实验结果分析

五、实验总结

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说要难一点。

实验四

一、实验题目——深度优先算法实现图的遍历

二、程序设计思路

以邻接矩阵或邻接表为存储结构,以用户指定的顶点为起始点,实现无向连通图的深度优先,并输出遍历的结点序列。首先,根据用户输入的顶点总数和边数,构造无向图,然后以用户输入的顶点为起始点,进行深度优先,并输出遍历的结果。

三、源程序代码

#include #define MaxVerNum 50 struct edgenode { int endver;int inform;edgenode* edgenext;

};struct vexnode

{ char vertex;edgenode* edgelink;};struct Graph

{ vexnode adjlists[MaxVerNum];int vexnum;int arcnum;};//队列的定义及相关函数的实现 struct QueueNode { int nData;QueueNode* next;};struct QueueList { QueueNode* front;QueueNode* rear;};void EnQueue(QueueList* Q,int e){ QueueNode *q=new QueueNode;q->nData=e;q->next=NULL;if(Q==NULL)

return;if(Q->rear==NULL)

Q->front=Q->rear=q;else {

Q->rear->next=q;

Q->rear=Q->rear->next;} } void DeQueue(QueueList* Q,int* e){ if(Q==NULL)

return;if(Q->front==Q->rear){

*e=Q->front->nData;

Q->front=Q->rear=NULL;} else {

*e=Q->front->nData;

Q->front=Q->front->next;} } //创建图

void CreatAdjList(Graph* G){ int i,j,k;edgenode* p1;edgenode* p2;cout<<“请输入顶点数和边数:”<>G->vexnum>>G->arcnum;cout<<“开始输入顶点表:”<vexnum;i++){

cin>>G->adjlists[i].vertex;

G->adjlists[i].edgelink=NULL;} cout<<“开始输入边表信息:”<arcnum;k++){

cout<<“请输入边对应的顶点:”;

cin>>i>>j;

p1=new edgenode;

p1->endver=j;

p1->edgenext=G->adjlists[i].edgelink;

G->adjlists[i].edgelink=p1;

p2=new edgenode;

p2->endver=i;

p2->edgenext=G->adjlists[j].edgelink;

G->adjlists[j].edgelink=p2;

//因为是无向图,所以有两次建立边表的过程

} }

//------------------------------深度优先遍历 void DFS(Graph *G,int i,int visit[]){ cout<adjlists[i].vertex<<“ ”;visit[i]=1;edgenode *p=new edgenode;p=G->adjlists[i].edgelink;if(G->adjlists[i].edgelink&&!visit[p->endver]){

DFS(G,p->endver,visit);} } void DFStraversal(Graph *G,char c)//深度优先遍历 { cout<<“该图的深度优先遍历结果为:”<vexnum;i++){

visit[i]=0;//全部初始化为0,即未访问状态

} int m;for(i=0;ivexnum;i++){

if(G->adjlists[i].vertex==c)//根据字符查找序号

{

m=i;

DFS(G,i,visit);

break;

} } //继续访问未被访问的结点

for(i=0;ivexnum;i++){

if(visit[i]==0)

DFS(G,i,visit);} cout<front=Q->rear=NULL;EnQueue(Q,v);while(Q->rear!=NULL){

int e=0;

DeQueue(Q,&e);

cout<adjlists[e].vertex<<“ ”;

visit[e]=1;

edgenode* p=new edgenode;

p=G->adjlists[e].edgelink;

if(p)

{

int m=p->endver;

if(m==0)

{

EnQueue(Q,m);

while(visit[m]==0)

{

p=p->edgenext;

if(p==NULL)

break;

m=p->endver;

EnQueue(Q,m);

}

}

}

} } void BFStraversal(Graph *G,char c){ cout<<“该图的广度优先遍历结果为:”<vexnum;i++){

visited[i]=0;} int m;for(i=0;ivexnum;i++){

if(G->adjlists[i].vertex==c)

{

m=i;

BFS(G,i,visited);

break;

} } //继续访问未被访问的结点

for(i=0;ivexnum;i++){

if(visited[i]==0)

BFS(G,i,visited);} cout<>ch;DFStraversal(G,ch);BFStraversal(G,ch);}

四、实验结果及分析

五、实验总结

上机实习作业 第8篇

用友U8管理系统是由多个模块共同组成的, 初始数据、原始单据在不同系统、不同模块之间依次顺序传递, 教师在检查上机作业时不可能查看所有的原始单据, 因此, 如何客观、公正地评判学生成绩是摆在教师面前的一个难题。笔者根据工作实际, 总结了自己的一些经验, 以期与同行共同探讨。

仔细分析用友供应链系统各模块之间的数据关联, 不难发现, 处于中心位置的是总账管理模块, 各模块都要向其传递数据 (凭证) , 并最终在总账管理模块生成凭证汇总表及各种账簿, 再向报表系统传递数据生成资产负债表、利润表等各种报表。因此, 教师在检查作业时完全可以化繁为简, 抓住凭证这个根本, 只检查总账和报表两个模块即可。总账主要检查某些重要凭证的有无及金额是否正确, 报表主要检查报表合计栏中的数据是否正确。

如何判断学生总账中的凭证是从各个模块传递过来的, 而不是在总账中直接输入的?其实, 供应链系统的各个模块在基础设置时已经对制单科目作了要求。比如:某账套要求应收系统的初始设置“基本科目设置:应收科目:应收账款;预收科目:预收账款;销售收入:主营业务收入;税金科目:销项税额;银行承兑科目:应收票据;商业承兑科目:应收票据。控制科目设置:按客户设置。产品科目设置:按商品设置。”再比如:某账套要求应付系统的初始设置“基本科目设置:应付科目:应付账款;预付科目:预付账款;采购科目:原材料;采购税金:进项税额;银行承兑科目:应付票据;商业承兑科目:应付票据。结算方式科目设置:现金支票、转账支票科目为银行存款。”还有:某账套要求固定资产系统的初始设置“与账务系统进行对账的对账科目:固定资产对账科目:固定资产 (1501) ;累计折旧对账科目:累计折旧 (1502) 。”正是因为供应链系统的各个模块在基础设置时已经对制单科目作了具体的要求, 所以总账中检查的这些凭证一定是从各个模块传递过来的, 不可能是在总账系统制的单。此外, 如果在总账模块将无法修改其他系统传递过来的凭证。

二、用友U8总账和报表系统的具体检查项目

(一) 总账

总账模块作业的检查应有凭证、期间损益结转、结账三个内容, 具体说明如下:

1.凭证。各模块传递给总账管理模块的凭证很多, 教师可按照工业企业的生产流程, 通过总账的凭证查询功能, 检查以下四种主要的凭证: (1) 采购原材料到货并支付货款:借记“原材料”科目, 贷记“库存现金”科目。 (2) 领用原材料进行生产:借记“生产成本———基本生产成本———材料费”科目, 贷记“原材料”科目。 (3) 产品完工入库时:借记“库存商品”科目, 贷记“生产成本”科目。 (4) 销售并结转产品成本时, 借记“应收账款”科目, 贷记“主营业务收入”科目。 (5) 借记“主营业务成本”科目, 贷记“库存商品”科目。

此外, 如果企业开设了固定资产管理模块, 可在总账模块中检查计提折旧的凭证;如果开设了薪资管理模块, 可在总账中检查计提本企业福利费的凭证。

2.期间损益结转。期间损益结转也是学生必须掌握的功能, 检查作业时应从以下两个方面着手:

(1) 期间损益结转的凭证模版设置是否正确 (如图1所示) 。

(2) 利用模版生成的结转凭证是否正确 (如下页图2、图3所示, 要求:收入和支出分别结转) 。

3.结账。供应链管理系统在进行月末结账时, 要按照业务的流程顺序依次对采购、销售、库存、存货、应收、应付、固定资产、薪酬、总账等模块进行月末业务处理。因此, 如果本月总账管理模块已经结账就意味着其他管理模块也已经顺利结账。所以, 检查学生总账是否结账是非常重要的一环。具体操作按照“业务工作———财务会计———总账———期末———结账”的步骤进行, 可以查看到本月结账的对勾是否打上。

(二) 报表

报表是账务处理的最终结果, 报表源于账簿, 账簿源于凭证, 只有会计期间所有凭证都正确才能得到正确的报表数据。利用用友提供的报表模块可以轻松编制资产负债表和利润表。教师可重点检查报表最后一行的合计数。此外, 用友总账中的项目核算和管理功能非常强大, 可以用来制作现金流量表。因此, 如果教师要求学生用项目核算和管理功能制作现金流量表, 也可以将现金流量表作为一个检查项目。

三、结束语

高校在开展会计电算化实验之初, 仅开设总账和报表两个模块, 因此, 实验作业的检查项目比较固定 (李江霞, 2008) 。但随着企业供应链管理模块的广泛使用, 高校会计电算化实验内容也必然增加供应链管理这一模块。本文初次尝试了如何用较为科学的方法进行供应链管理模块实验效果的评价。任课教师可以根据教学安排, 参照本文介绍的检查项目, 自行设计一个会计电算化实验评分表, 并确定表中各个项目的分值, 从而对学生的上机实验作业做出客观、公正的评价。

摘要:高校会计学专业多以会计软件为平台培养学生的实际动手能力, 但实验教学效果如何却少有人探究。本文从教师的角度, 通过对学生上机实验作业总账管理和报表管理两个模块有关项目的检查, 对学生使用用友软件的实验效果进行了科学评价。

关键词:会计电算化,用友软件,供应链,总账,报表

参考文献

[1] .李江霞.高校会计电算化课程实验教学效果量化评价[J].中国管理信息化, 2008, (04) .

上一篇:住在时光里的我们作文下一篇:人事局领导在大学生志愿服务西部计划电视会议上的讲话