第4章 初始化和清除
- 格式:doc
- 大小:125.50 KB
- 文档页数:36
第四章 用友U8财务软件的操作与使用 【授课题目】:用友U8财务软件的操作与使用【教学内容】:1 用友U8软件的安装2 用友U8财务软件系统管理设置2 用友U8财务软件初始化3 用友U8财务软件日常账务处理4 用友U8财务软件现金银行业务处理5 用友U8财务软件应收业务处理6 用友U8财务软件应付业务处理7 用友U8财务软件工资核算处理8 用友U8财务软件固定资产核算处理9、UFO电子表格【教学目的与要求】:1、了解用友U8软件的主要功能模块及其基本操作2、掌握用友U8软件的总账、现金银行、工资、固定资产管理等业务流程及相应系统模块的操作流程3、掌握用友U8软件的报表制作4、了解财务管理软件与一般账务软件的区别【教学难点与重点】:【重点】1、用友U8软件的财务处理2、用友U8软件的工资、进销存、固定资产管理3、用友U8软件的报表编制【难点】1、财务管理软件与一般账务软件的区别;2、进销存业务处理;3、用友U8电子表格【教学方式与时间分配】:本章教学以教师课堂讲授与学生实验操作相结合,预计讲授18学时,实验操作18学时。
【基本约定】::多媒体演示:强调〖教学内容〗〖教学内容〗授课内容备注2、增加操作员在建账之前,先设置系统的操作员,将进行相关操作的财务人员添加到系统中去,以便进行相关的财务分工。
:利用多媒体演示操作员增加。
操作说明:●也可以只设置账套主管,然后以账套主管的身份登录系统再设置其他操作员。
●操作员编号唯一,不能重复。
●所设置的操作员用户一旦被使用,便不能被修改和删除。
3、账套建立:利用多媒体演示账套建立。
操作说明:●【已存账套】是系统已经建立并使用的账套,在这里不能更改。
●【账套号】一般是000-999之前的三位数字,账套号唯一,不能重复。
●【账套名】称是能够标志该账套的信息,用户根据企业情况输入。
●【账套路径】是存放账套数据的位置,一般用系统默认的路径即可。
●【启用会计期】用来输入新建账套将被启用的时间,具体到“月”,用户必须输入〖教学内容〗授课内容备注4、财务分工账套建立后,要根据账套和企业现状对已经录入系统的财务人员职责权限进行分工,操作员权限设置分账套主管设置和一般操作员设置两种。
初始化与清除4.1 用构造函数确保初始化在s t a s h和s t a c k 类中都曾调用i n i t i a l i z e ( )函数,这暗示无论用什么方法使用这些类的对象,在使用之前都应当调用这一函数。
很不幸的是,这要求用户必须正确地初始化。
而用户在专注于用那令人惊奇的库来解决他们的问题的时候,往往忽视了这些细节。
在C + +中,初始化实在太重要了,所以不能留给用户来完成。
类的设计者可以通过提供一个叫做构造函数的特殊函数来保证每个对象都正确的初始化。
如果一个类有构造函数,编译器在创建对象时就自动调用这一函数,这一切在用户使用他们的对象之前就已经完成了。
对用户来说,是否调用构造函数并不是可选的,它是由编译器在对象定义时完成的。
接下来的问题是这个函数叫什么名字。
这必须考虑两点,首先这个名字不能与类的其他成员函数冲突,其次,因为该函数是由编译器调用的,所以编译器必须总能知道调用哪个函数。
S t r o u s t r u p的方法似乎是最容易也是最符合逻辑的:构造函数的名字与类的名字一样。
这使得这样的函数在初始化时自动被调用。
下面是一个带构造函数的类的简单例子:现在当一个对象被定义时:这时就好像a是一个整数一样:为这个对象分配内存。
但是当程序执行到a的定义点时,构造函数自动被调用,因为编译器已悄悄地在a的定义点处插入了一个X : : X ( )的调用。
就像其他成员函数被调用一样。
传递到构造函数的第一个参数(隐含)是调用这一函数对象的地址。
像其他函数一样,我们也可以通过构造函数传递参数,指定对象该如何创建,设定对象初始值等等。
构造函数的参数保证对象的所有部分都被初始化成合适的值。
举例来说:如果类t r e e有一个带整型参数的构造函数,用以指定树的高度,那么我们就必须这样来创建一个对象:tree t(12); // 12英尺高的树如果t r e e ( i n t )是唯一的构造函数,编译器将不会用其他方法来创建一个对象(在下一章我们将看到多个构造函数以及调用它们的不同方法)。
第四章总账【本章的学习目的与要求】1、了解总账系统的初始化、日常业务处理和期末业务处理的工作原理和操作方法。
2、掌握总账系统初始化中设置会计科目,录入期初余额及设置各种分类档案资料的方法。
3、掌握总账系统日常业务处理的凭证处理和记账的方法。
熟悉出纳管理的内容和处理方法。
4、掌握期末业务的内容和处理方法。
【本章任务分析】1、起点能力:学生已经理解并掌握了前三章的基本知识以及《会计学原理》相关理论,同时应该熟悉会计处理的基本流程。
2、本章知识包括:总账系统初始化、日常业务处理、出纳管理、期末处理,由此决定本次教学的顺序。
【本章教材分析】1、本章重点:(1)、总账系统初始化中设置会计科目(2)、录入期初余额及设置各种分类,档案资料的方法(3)、总账系统日常业务处理的凭证处理和记账的方法(4)、出纳管理的内容和处理方法(5)、期末业务的内容和处理方法2、教学难点:(1)、凭证的修改(2)、期末业务的内容和处理方法【本章的教学手段与方法】多媒体形式讲授法【课时分配】14学时【参考书目】指定的教材。
【教学过程与教学内容】内容:分成四节。
时间:4.1为4课时,4.2为4课时,4.3为2课时,4.4为2课时4.1 总账系统初始化4.1.1启动总账系统系统初始化:是指将通用会计软件转成专用会计软件、将手工会计业务数据移植到计算机中等一系列准备工作,是使用财务软件的基础。
总账初始设置的内容:包括设置基础参数、会计科目、外币及汇率、凭证类别、结算方式、分类定义、编码档案、录入期初余额及设置操作员明细权限。
4.1.2设置总系统参数系统在建立新的账套后由于具体情况需要,或业务变更,发生一些账套信息与核算内容不符,可以通过此功能进行账簿选项的调整和查看。
可对"凭证选项"、"账簿选项"、"会计日历"、"其它选项"四部分内容的操作控制选项进行修改。
赵盈盈2011210593 第四章作业上1.解释名词:程序的顺序执行;程序的并发执行。
答:程序的顺序执行:一个具有独立功能的程序独占 cpu 直到得到最终结果的进程。
程序的并发执行:两个或两个以上程序在计算机系统中同时处于一开始执行且尚未结束的状态。
2.什么是进程?进程与程序的主要区别是什么?答:进程:进程是具有独立功能的程序关于某个数据集合的一次运行活动,进程是系统进行资源分配和调度的独立单元。
进程和程序的区别:●程序是静态的,进程是动态的●进程有程序和数据两部分组成●进程具有生命周期,有诞生和消亡,是短暂的;而程序是相对长久的●进程能更真实的描述并发,而程序不行。
●一个进程可以对应多个程序。
一个程序可以对应多个进程●进程可以创建其他进程,程序不能3.图1 所示,设一誊抄程序,将 f 中记录序列正确誊抄到 g 中,这一程序由get、copy、put 三个程序段组成,它们分别负责获得记录、复制记录、输出记录。
请指出这三个程序段对 f 中的m 个记录进行处理时各种操作的先后次序,并画出誊抄此记录序列的先后次序图(假设f 中有1,2,…,m 个记录,s,t 为设置在主存中的软件缓冲区,每次只能装一个记录)。
图1 改进后的誊抄过程答:PPG4.进程有哪几种基本状态?试画出进程状态变迁图,并标明发生变迁的可能原因。
答:进程基本状态:运行、就绪、等待就绪到运行:调度程序选择一个新的进程运行运行到就绪:运行进程用完了时间片或运行进程被中断,因为一个高优先级的进程处于就绪状态运行到等待:OS 尚未完成服务或对一资源的访问尚不能进行或初始化 I/O 且必须等待结果或等待某一进程提供输入(IPC)等待到就绪:当所有的事件发生时5.什么是进程控制块?它有什么作用?答:PCB:为了便于系统控制和描述进程的活动过程,在操作系统核心中为进程定义的一个专门的数据结构。
作用:系统用 PCB 来控制和管理进程的调用,PCB 也是系统感知进程存在的唯一标志S36. n 个并发进程共用一个公共变量 Q ,写出用信号灯的 p 、v 操作实现 n 个进程互斥时的程序描述,并说明信号灯值的取值范围。
第4章初始化和清除“随着计算机的进步,‘不安全’的程序设计已成为造成编程代价高昂的罪魁祸首之一。
”“初始化”和“清除”是这些安全问题的其中两个。
许多C程序的错误都是由于程序员忘记初始化一个变量造成的。
对于现成的库,若用户不知道如何初始化库的一个组件,就往往会出现这一类的错误。
清除是另一个特殊的问题,因为用完一个元素后,由于不再关心,所以很容易把它忘记。
这样一来,那个元素占用的资源会一直保留下去,极易产生资源(主要是内存)用尽的后果。
C++为我们引入了“构建器”的概念。
这是一种特殊的方法,在一个对象创建之后自动调用。
Java也沿用了这个概念,但新增了自己的“垃圾收集器”,能在资源不再需要的时候自动释放它们。
本章将讨论初始化和清除的问题,以及Java如何提供它们的支持。
4.1 用构建器自动初始化对于方法的创建,可将其想象成为自己写的每个类都调用一次initialize()。
这个名字提醒我们在使用对象之前,应首先进行这样的调用。
但不幸的是,这也意味着用户必须记住调用方法。
在Java中,由于提供了名为“构建器”的一种特殊方法,所以类的设计者可担保每个对象都会得到正确的初始化。
若某个类有一个构建器,那么在创建对象时,Java会自动调用那个构建器——甚至在用户毫不知觉的情况下。
所以说这是可以担保的!接着的一个问题是如何命名这个方法。
存在两方面的问题。
第一个是我们使用的任何名字都可能与打算为某个类成员使用的名字冲突。
第二是由于编译器的责任是调用构建器,所以它必须知道要调用是哪个方法。
C++采取的方案看来是最简单的,且更有逻辑性,所以也在Java里得到了应用:构建器的名字与类名相同。
这样一来,可保证象这样的一个方法会在初始化期间自动调用。
下面是带有构建器的一个简单的类(若执行这个程序有问题,请参考第3章的“赋值”小节)。
148-149页程序//: c04:SimpleConstructor.java// Demonstration of a simple constructor.class Rock {Rock() { // This is the constructorSystem.out.println("Creating Rock");}}public class SimpleConstructor {public static void main(String[] args) {for(int i = 0; i < 10; i++)new Rock();}} ///:~现在,一旦创建一个对象:new Rock();就会分配相应的存储空间,并调用构建器。
这样可保证在我们经手之前,对象得到正确的初始化。
请注意所有方法首字母小写的编码规则并不适用于构建器。
这是由于构建器的名字必须与类名完全相同!和其他任何方法一样,构建器也能使用自变量,以便我们指定对象的具体创建方式。
可非常方便地改动上述例子,以便构建器使用自己的自变量。
如下所示:149页中程序//: c04:SimpleConstructor2.java// Constructors can have arguments.class Rock2 {Rock2(int i) {System.out.println("Creating Rock number " + i);}}public class SimpleConstructor2 {public static void main(String[] args) {for(int i = 0; i < 10; i++)new Rock2(i);}} ///:~利用构建器的自变量,我们可为一个对象的初始化设定相应的参数。
举个例子来说,假设类Tree有一个构建器,它用一个整数自变量标记树的高度,那么就可以象下面这样创建一个Tree对象:tree t = new Tree(12); // 12英尺高的树若Tree(int)是我们唯一的构建器,那么编译器不会允许我们以其他任何方式创建一个Tree对象。
构建器有助于消除大量涉及类的问题,并使代码更易阅读。
例如在前述的代码段中,我们并未看到对initialize()方法的明确调用——那些方法在概念上独立于定义内容。
在Java中,定义和初始化属于统一的概念——两者缺一不可。
构建器属于一种较特殊的方法类型,因为它没有返回值。
这与void返回值存在着明显的区别。
对于void返回值,尽管方法本身不会自动返回什么,但仍然可以让它返回另一些东西。
构建器则不同,它不仅什么也不会自动返回,而且根本不能有任何选择。
若存在一个返回值,而且假设我们可以自行选择返回内容,那么编译器多少要知道如何对那个返回值作什么样的处理。
4.2 方法过载在任何程序设计语言中,一项重要的特性就是名字的运用。
我们创建一个对象时,会分配到一个保存区域的名字。
方法名代表的是一种具体的行动。
通过用名字描述自己的系统,可使自己的程序更易人们理解和修改。
它非常象写散文——目的是与读者沟通。
我们用名字引用或描述所有对象与方法。
若名字选得好,可使自己及其他人更易理解自己的代码。
将人类语言中存在细致差别的概念“映射”到一种程序设计语言中时,会出现一些特殊的问题。
在日常生活中,我们用相同的词表达多种不同的含义——即词的“过载”。
我们说“洗衬衫”、“洗车”以及“洗狗”。
但若强制象下面这样说,就显得很愚蠢:“衬衫洗衬衫”、“车洗车”以及“狗洗狗”。
这是由于听众根本不需要对执行的行动作任何明确的区分。
人类的大多数语言都具有很强的“冗余”性,所以即使漏掉了几个词,仍然可以推断出含义。
我们不需要独一无二的标识符——可从具体的语境中推论出含义。
大多数程序设计语言(特别是C)要求我们为每个函数都设定一个独一无二的标识符。
所以绝对不能用一个名为print()的函数来显示整数,再用另一个print()显示浮点数——每个函数都要求具备唯一的名字。
在Java里,另一项因素强迫方法名出现过载情况:构建器。
由于构建器的名字由类名决定,所以只能有一个构建器名称。
但假若我们想用多种方式创建一个对象呢?例如,假设我们想创建一个类,令其用标准方式进行初始化,另外从文件里读取信息来初始化。
此时,我们需要两个构建器,一个没有自变量(默认构建器),另一个将字串作为自变量——用于初始化对象的那个文件的名字。
由于都是构建器,所以它们必须有相同的名字,亦即类名。
所以为了让相同的方法名伴随不同的自变量类型使用,“方法过载”是非常关键的一项措施。
同时,尽管方法过载是构建器必需的,但它亦可应用于其他任何方法,且用法非常方便。
在下面这个例子里,我们向大家同时展示了过载构建器和过载的原始方法:151-152页程序//: c04:Overloading.java// Demonstration of both constructor// and ordinary method overloading.import java.util.*;class Tree {int height;Tree() {prt("Planting a seedling");height = 0;}Tree(int i) {prt("Creating new Tree that is " + i + " feet tall");height = i;}void info() {prt("Tree is " + height + " feet tall");}void info(String s) {prt(s + ": Tree is " + height + " feet tall");}static void prt(String s) { System.out.println(s); }}public class Overloading {public static void main(String[] args) {for(int i = 0; i < 5; i++) { Tree t = new Tree(i);();("overloaded method");} // Overloaded constructor:new Tree();}} ///:~Tree既可创建成一颗种子,不含任何自变量;亦可创建成生长在苗圃中的植物。
为支持这种创建,共使用了两个构建器,一个没有自变量(我们把没有自变量的构建器称作“默认构建器”,注释①),另一个采用现成的高度。
①:在Sun公司出版的一些Java资料中,用简陋但很说明问题的词语称呼这类构建器——“无参数构建器”(no-arg constructors)。
但“默认构建器”这个称呼已使用了许多年,所以我选择了它。
我们也有可能希望通过多种途径调用info()方法。
例如,假设我们有一条额外的消息想显示出来,就使用String自变量;而假设没有其他话可说,就不使用。
由于为显然相同的概念赋予了两个独立的名字,所以看起来可能有些古怪。
幸运的是,方法过载允许我们为两者使用相同的名字。
4.2.1 区分过载方法若方法有同样的名字,Java怎样知道我们指的哪一个方法呢?这里有一个简单的规则:每个过载的方法都必须采取独一无二的自变量类型列表。
若稍微思考几秒钟,就会想到这样一个问题:除根据自变量的类型,程序员如何区分两个同名方法的差异呢?即使自变量的顺序也足够我们区分两个方法(尽管我们通常不愿意采用这种方法,因为它会产生难以维护的代码):152-153页程序//: c04:OverloadingOrder.java// Overloading based on the order of// the arguments.public class OverloadingOrder {static void print(String s, int i) {System.out.println("String: " + s +", int: " + i);}static void print(int i, String s) {System.out.println("int: " + i +", String: " + s);}public static void main(String[] args) {print("String first", 11);print(99, "Int first");}} ///:~两个print()方法有完全一致的自变量,但顺序不同,可据此区分它们。