语言程序设计实验指导书(2009年8月版)(5篇)

时间:2019-05-12 05:41:37下载本文作者:会员上传
简介:写写帮文库小编为你整理了多篇相关的《语言程序设计实验指导书(2009年8月版)》,但愿对你工作学习有帮助,当然你在写写帮文库还可以找到更多《语言程序设计实验指导书(2009年8月版)》。

第一篇:语言程序设计实验指导书(2009年8月版)

汇编语言程序设计实验指导书

何立新 编著

合肥学院 计算机科学与技术系 体系结构教研室

2009年8月

目 录

实验一 熟悉汇编语言程序上机过程和调试汇编程序的方法..............1 实验二 简单程序设计..............................................................................3 实验三 循环程序设计..............................................................................4 实验四 分支程序设计..............................................................................5 实验五 子程序设计..................................................................................6 实验六 宏汇编程序设计..........................................................................7 实验七 综合程序设计..............................................................................8 附件1 常用的DOS系统功能调用.......................................................9 附件2 DEBUG的常用命令与使用.....................................................10 附件3 汇编程序出错信息...................................................................17

合肥学院计算机科学与技术系

实验一 熟悉汇编语言程序上机过程和调试汇编程序的方法

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握汇编语言源程序由编辑、汇编、链接到调试的全过程。2.掌握常用的debug命令,通过汇编调试工具加深对机器指令执行过程的了解。二.实验内容: 1.输入给定的程序,完成由编辑、编译、链接到调试的全过程。2.用汇编调试工具软件DEBUG对.EXE文件进行调试,在调试过程中应使用单步、断点等方法调试,注意观察寄存器、标志位和有关存储器内容的变化。

3.利用DEBUG加深对机器指令的了解。三.实验仪器: PC 机 四.实验步骤:(1)建立汇编语言的工作环境

为了运行汇编语言程序至少要在磁盘上建立以下文件 • 编辑程序,如EDIT.EXE,记事本,写字板等 • 汇编程序,如MASM.EXE • 连接程序,如LINK.EXE • 调试程序,如DEBUG.COM

(2)建立汇编语言源程序

源程序文件要以ASM为扩展名,源程序文件的形成(编辑)可以通过任何一个文本编辑器实现。

(3)源程序的汇编

汇编是将源程序翻译成由机器代码组成的目标模块文件的过程。使用提供的汇编程序是MASM.EXE:如果源程序中没有语法错误,MASM将自动生成一个目标模块文件(test01.obj),否则MASM将给出相应的错误信息。这时应根据错误信息,重新编辑修改源程序后,再进行汇编。

(4)目标模块的连接

连接程序link.exe能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件)。如果没有严重错误,LINK将生成一个可执行文件(.exe);否则将提示相应的错误信息。这时需要根据错误信息重新修改源程序后再汇编、链接,直到生成可执行文件。

汇编语言程序设计实验指导书

(5)程序的运行

经汇编、连接生成的可执行程序在DOS操作系统下只要输入文件名就可以运行。

如果出现运行错误,可以从源程序开始排错,也可以利用DEBUG调试程序帮助发现错误。

五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验二 简单程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握汇编语言源程序的格式和顺序程序设计方法。

2.用所学的汇编指令和伪指令进行简单的编程,达到加深对所学指令和伪指令的理解。

3.学会使用dos 系统功能调用。4.对DEBUG的使用达到熟练的程度。二.实验内容: 1. 编程实现:在屏幕上显示字符串“Beijing,China,2008!”。2. 编程实现:两个字节数(如12h和34h)相加,并将结果显示出来。三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验三 循环程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握单重循环程序和多重循环程序的结构、设计方法和调试方法。2.熟练掌握loop、loope、loopne等指令的使用,并掌握用重复前缀指令、控制转移指令实现循环。二.实验内容: 1.编程实现:从一个字节字符串中查找字符‘#’,如果查到则将其偏移地址送到存储单元addr中,否则将0送到addr中。

2.编程实现:统计存储下列给定字符串的数据块中所有的“0”位的个数,并

将统计的结果送入COUNT存储单元。

“十七大的主要议程是:听取和审议党的十六届中央委员会的报告,审议中央纪律检查委员会的工作报告,审议并通过《中国共产党章程(修正案)》,选举党的十七届中央委员会,选举中央纪律检查委员会。” 三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验四 分支程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握分支程序的结构,分支程序的设计和调试方法。

2.掌握利用条件转移指令、跳跃表、逻辑尺等方法实现程序的分支。二.实验内容: 1.设有16个学生的成绩分别如下:56,78,83,67,39,48,95,76,86,62,100,57,85,82,71,92。试编程分别统计低于60分,60-69、70-79、80-89、90-99及100分的人数,并存放到S5,S6,S7,S8,S9及S10单元中。2.编程实现:在X、Y和Z单元中分别存放一个无符号的字节数,编程求出其它们中的最大值,并将最大值存入MAX单元中。(设X = 68, Y = 196, Z = 98)三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验五 子程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握子程序的定义和调用方法。

2.掌握子程序设计方法,学会子程序的功能划分和正确进行子程序的参数传递。

3.掌握子程序的多种参数传递方法。二.实验内容: 编程实现:十进制到十六进制的转换。要求如下:

1.从键盘输入一个十进制数,然后以十六进制在屏幕上显示; 2.能连续多次转换输入的十进制数,以回车键作为输入十进制数的结束;

3.若键盘输入的不是数字,则在屏幕上提示:“the input is not a number, again , please!” 4.键入‘q’键则可退出程序。

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

实验六 宏汇编程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 1.掌握宏汇编程序设计方法。2. 利用建立的宏库文件进行文件访问。

3. 通过和子程序技术的比较,加深对宏汇编技术的理解,提高编程技巧。

二.实验内容(任选一题): 1.实现字符串的传递,(mess1 mess3;mess2mess4),传递完毕显示字符串,每显示一个字符串后要回车换行。要求:建立一个宏库mylib.mac,该宏库至少包括如下三个宏:1 传递过程宏 move;2 显示字符串宏 disp;3 回车换行宏 crlf。

如: mess1: “how beautiful world!”

Mess2: “we should protect it!”

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

汇编语言程序设计实验指导书

实验七 综合程序设计

班级: 姓名: 学号: 得分: 一.实验目的: 训练综合使用本课程中介绍的顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,进一步提高编程能力。

二.实验内容(任选一题): 1.编写一个完整的程序:

主程序MAINPRO允许用户在键盘上输入零件数量和总价格; 子程序SUBCONV 把从键盘输入的ASCII 码转化为二进制; 子程序 SUBCALC 计算出零件的单价;

子程序 SUBDISP 把二进制表示的单价转化为十进制数并显示出结果。

要求:在程序设计时要求使用顺序、分支、循环、子程序和宏汇编等多种方法解决程序设计问题,对于较大的子程序最好使用子程序嵌套,程序中如有多次重复的代码最好使用重复汇编。

三.实验仪器: PC 机 四.实验步骤: 五.实验结果与讨论 六.心得体会

合肥学院计算机科学与技术系

附件1 常用的DOS系统功能调用

1.单字符输入(1号调用)格式:MOV AH,1

INT 21H 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。

2.单字符显示(2号调用)

格式:MOV DL,待显示字符的ASCII码

MOV AH,2

INT

21H 功能:将DL寄存器中的字符送显示器显示.3.打印输出(5号调用)

格式:MOV DL,待打印字符的ASCII码

MOV AH,5

INT 21H 功能:将DL寄存器中的字符送打印机打印。

4.结束调用(4CH号调用)格式:MOV AH,4CH

INT 21H 功能:终止当前程序并返回调用程序。

5.显示字符串(9号调用)

格式:LEA DX,待显示字符串首偏移地址

MOV AH,9

INT 21H 功能:将当前数据区中以‘$’结尾的字符串送显示器显示。

6.字符串输入(10号调用)

格式:LEA DX,缓冲区首偏移地址

MOV AH,10

INT 21H 功能:从键盘上输入一字符串到用户定义的输入缓冲区中,并送显示器显示。

汇编语言程序设计实验指导书

附件2 DEBUG的常用命令与使用

在编写和运行汇编程序的过程中,会遇到一些错误和问题,需要对程序进行分析和调试,调试程序 DEBUG 就是专为汇编语言设计的一种调试工具。它在调试汇编语言程序时有很强的功能,能使程序设计者接触到机器内部,能观察和修改寄存器和存储单元内容,并能监视目标程序的执行情况,使用户真正接触到 CPU 内部,与计算机产生最紧密的工作联系。动态和程序 DEBUG 的主要特点 DEBUG 的执行 DEBUG 命令格式 主要 DEBUG 命令 DEBUG 的主要特点)能够在最小环境下运行汇编程序

在 DOS 状态下运行汇编程序,必须将程序经过 MASM 汇编程序,而后还要经过 LINK 连接程序产生可执行程序,才能最终运行,比较麻烦。在 DEBUG 状态下,为用户提供了调试、控制测试的环境,可以在此环境下进行编程、调试、监督、执行用户编写的汇编程序。因此调试周期短,为用户提供了极大的方便。2)提供极简单的修改手段

DEBUG 提供了修改命令,可以修改内存单元内容,修改寄存器的内容,为调试程序、修改程序带来了方便。)提供用户与计算机内部联系的窗口

DEBUG 具有显示命令,它既可以使用户看到某内存单元或某一块单元内容,也可以看到 CPU 内部各寄存器的内容。用单步执行命令实现跟踪执行,每执行一步都使用户看到各寄存器的内容的变化,以便分析和调整程序。4)可装入、修改或显示任何文件

当然在 DEBUG 状态下运行汇编程序也具有一定局限性。在 DEBUG 状态下运行的程序不能使用宏汇编程序中的宏指令,大部分伪指令也不能使用,因此只能把程序分段调试。此外,不能调试太长的程序,只能分块进行中程序设计。在 DEBUG 状态下调试好的程序不能形成可执行文件(.EXE),因此调试好的程序只能记下,到编辑环境下重新键入调试好的程序,通过汇编程序(如 MASM),再通过连接程序(LINK)形成可执行文件(.EXE)。

合肥学院计算机科学与技术系

DEBUG 的执行

在操作系统(DOS 或 WIndows)命令行方式下,直接调入 DEBUG 程序,键入命令的格式如下: D>DEBUG [d:][Path][filename[.ext]][Parm1][Parm2] 其中 [] 的内容为可选项,可以有也可以缺省。

[d:] 为驱动器号,指要调入 DEBUG 状态的可执行文件在哪个驱动器中,如 A:、B:、C: 等。[Path] 为路径,指要调入 DEBUG 状态的可执行文件是在哪个目录下或子目录下。

[filename[.ext]],指要调入 DEBUG 状态下的可执行文件的文件名,该文件可以是通过编辑、汇编、连接后产生的可执行文件,也可以是在 DEBUG 状态下汇编的程序 段,通过写盘命令 W 写入磁盘的文件。

[Parm1][Parm2] 为任选参数,是给定文件的说明参数。

在启动 DEBUG 时,如果输入 filename(文件名),则 DEBUG 程序把指定文件装入内存,用户可以通过 DEBUG 的命令对指定文件进行修改、显示或执行。如果没有文件名,则是以当前内存的内容工作,或者用命名命令或装入命令把需要的文件装入内存,然后再通过 DEBUG 命令进行修改、显示或执行。

当启动 DEBUG 程序后,屏幕上出现“—”,说明系统已进入 DEBUG 状态。DEBUG 命令格式

(1)DEBUG 命令都是一个英文字母,后面跟着一个或多个有关参数。多个操作参数之间用“ , ”或空格隔开。

(2)DEBUG 命令必须接着按 ENTER 键,命令才有效。

(3)参数中不论是地址还是数据,均用十六进制数表示,但十六进制数据后面不要用“ H ”。(4)可以用 Ctrl 和 Break 键来停止一个命令的执行,返回到 DEBUG 的提示符“—”下。(5)用 Ctrl - Num Lock 键中止正在上卷的输出行,再通过按任意键继续输出信息。主要 DEBUG 命令

(1)汇编命令 A

格式: a.A [ 段寄存器名 ]:[ 偏移地址 ] b.A [ 段地址 ]:[ 偏移地址 ] 11

汇编语言程序设计实验指导书

c.A [ 偏移地址 ] d.A 功能:用该命令可以将汇编语言程序直接汇编进入内存。

当键入 A 命令后,显示段地址和偏移地址等待用户键入汇编指令,每键入一条汇编指令回车后,自动显示下一条指令的段地址和偏移地址,再键入下一条汇编指令,直到汇编语言程序全部键入,又显示下一地址时可直接键入回车返回到提示符“-”为止。

其中 a 的段地址在段地址寄存器中,因此在使用该命令时必须将段地址寄存器送入段地址,c 的地址在 CS 中,d 的段地址在 CS 中,偏移地址为 100H。(2)显示内存命令 D 格式: a.D [ 地址 ] b.D [ 地址范围 ] c.D 功能:显示指定内存范围的内容。

显示的内容为两种形式:一种为十六进制内容,一种为与十六进制相对应的 ASCII 码字符,对不可见字符以“·”代替。

对于 a、c 每次显示 128 个字节内容,b 显示的字节数由地址范围来决定。

若命令中有地址,则显示的内容从指定地址开始,若中中无地址(如 c)则从上一个 D 命令所显示的最后一个单元的下一个单元开始。若以前没有使用过 D 命令,则以 DEBUG 初始化的段寄存器的内容为起始段地址,起始偏移地址为 100H,即 CS:100。

对于 a 中的地址为偏移地址,段地址为 CS 的内容,对 b 中的地址范围,可以指定段地址和起始偏移地址和终止偏移地址。(3)修改存储单元内容命令 E 格式: a · E [ 地址 ] [ 内容表 ] b · E [ 地址 ] 功能: a ·用命令所给定的内容表去代替指定地址范围的内存单元内容。b ·一个单元一个单元地连续修改单元内容。

其中:内容表为一个十六进制数,也可以是用单引号括起的一串字符。

合肥学院计算机科学与技术系

(4)填充内存命令 F

格式: F [ 范围 ][ 单元内容表 ] 功能:将单元内容表中的内容重复装入内存的指定范围内。(5)内存搬家命令 M

格式: M [ 源地址范围 ][ 目标起始地址 ] 其中源地址范围和目的起始地址为偏移地址,段地址为 DS 的内容。功能:把源地址范围的内容搬至以目标起始地址开始的存储单元中。(6)比较命令 C

格式: C [ 源地址范围 ],[ 目标地址 ] 其中源地址范围是由起始地址和终止地址指出的一片连续的存储单元,目标地址为与源地址所指单元对比的目标地址起始地址。

功能:从源地址范围是由起始的地址单元开始逐个与目标起始地址往后的单元顺序比较每个单元内容,比较到源终止地址为止。比较结果如果一致则不显示任何信息,如果不一致,则以 [ 源地址 ][ 源内容 ][ 目的内容 ][ 目的地址 ] 的形式显示失败单元地址及内容。(7)搜索指定内容命令 S 格式: S [ 地址范围 ][ 表 ] 功能:在指定地址范围内搜索表中内容,搜索到就显示表中元素所在地址。(8)检查和修改寄存器内容命令 R 格式: a · R b · R [ 寄存器名 ] 功能: a ·显示 CPU 内部所有寄存器的内容和全部标志位的状态。b ·显示和修改一个指定寄定器的内容和标志位的状态。

其中对状态标志寄存器 FLAG 以位的形式显示,显示时,8 个状态标志的显示次序和符号如表 B - 1 所示。

表 B - 1 状态标志显示形式

汇编语言程序设计实验指导书

标 志 位 溢出标志 OF 方向标志 DF 中断标志 IF 符号标志 SF 零标志 ZF 辅助进位 AF 奇偶标志 PF 进位标志 CF

(9)跟踪与显示命令 T

格式: a · T[ =地址 ] 或 T [ 地址 ]

状 态 有 / 无 增 / 减 开 / 关 负 / 正 零 / 非 有 / 无 偶 / 奇 有 / 无

显示形式(置位 / 复位)

OV/NV DN/UP EI/DI NG/PL ZR/NZ AC/NA PE/PO CY/NC b · T[ =地址 ][ 条数 ] 或 T [ 地址 ][ 条数 ] 功能: a ·执行一条指定地址处的指令,停下来,显示 CPU 所有寄存器内容和全部标志位的状态,以及下一条指令的地址和内容。

b ·为多条跟踪命令,从指定地址开始;若命令中用 [ 地址 ] 给定了起始地址,则从起始地址开始,若未给定,则从当前地址(CS:IP)开始,执行命令中的 [ 条数 ] 决定一共跟踪几条指令后返回 DEBUG 状态。(10)反汇编命令 U 格式: a · U [ 地址 ] b · U [ 地址范围 ] 功能:将指定范围内的代码以汇编 语言形式显示,同时显示该代码位于内存的地址和机器。若在命令中没有指定地址则以上一个 U 命令的最后一条指令地址的下一个单元作为起始地址;若没有输入过 U 命令,则以 DEBUG 初始化段寄存器的值作为段地址,以 0100H 作为偏移地址。(11)命名命令 N 格式: N 文件名

功能:在调用 DEBUG 时,没有文件名,则需要用 N 命令将要调用的文件名格式化到 CS:5CH 的文件控制块中,才能用 L 命令把它调入内存进行调试(其它形式参考 DOS 手册)。(12)读盘命令 L

格式: a · L [ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所读扇区个数 ]

合肥学院计算机科学与技术系

b · L [ 地址 ] c · L

功能: a ·把指定驱动器和指定扇区范围的内容读到内存的指定区域中。其中地址是读入内存的起始地址,当输入时没有给定地址,则隐含地址为 CS:100H。起始扇区号指逻辑扇区号的起始位置。所读扇区个数是指从起始扇区号开始读到内存几个扇区的内容。驱动器号为 0 或 1,0 表示 A 盘,1 表示 B 盘。

b ·读入已在 CS:5CH 中格式化的文件控制块所指定的文件。在使用该命令前用 N 命令命名即可将要读入的文件名格式化到 CS:5CH 的文件控制块中,其中地址为内存地址。c ·同 b ·地址隐含在 CS : 100H 中。

当读入的文件有扩展名.COM 或.EXE,则始终装入 CS:100H 中,命令中指定了地址也没用。其中 BX 和 CX 中存放所读文件的字节数。(13)写盘命令 W

格式: a · W[ 地址 ][ 驱动器号 ][ 起始扇区号 ][ 所写扇区个数 ] b · W[ 地址 ] c · W

功能: a · 把在 DEBUGU 状态下调试的程序或数据写入指定的驱动器中 , 起始扇区号 , 所写扇区个数为要占盘中几个扇区。

写盘指定扇区的操作应十分小心,如有差错将会破坏盘上的原有内容。如果在命令行中的地址只包含偏移地址,W 命令认为段地址在 CS 中。

b ·当键入不带参数的写盘命令时,(或只键入地址参数的写盘命令),写盘命令把文件写到软盘上。该文件在用 W 命令之前用命名命令 N 将文件格式化在 CS:5CH 的文件控制块中。c ·只有 W 命令以前而没有任何参数时,与 N 配合使用进行写盘操作。在用 W 命令以前在 BX 和 CX 中应写入文件的字节数。(15)输出命令 O

格式: O[ 端口地址 ] [ 字节值 ] 功能:向指定端口地址输出一个字节。

汇编语言程序设计实验指导书

(16)运行命令 G

格式: G [ =地址 ][ 地址 [ 地址„ ]] 功能:执行用户正在调试的程序。

其中地址为执行的起始地址,以 CS 中内容作为段地址,以等号后面的地址为偏移地址。再后面的地址为断点地址。在命令行中只有起始地址,没有断点地址,则程序在执行时不中断。DEBUG 规定最多设置 10 个断点地址。设置多个断点用于调试较大的程序,即程序中有多个模块、多个通路时用,比较方便,在执行时不论走哪条通路,程序都可以在断点处停下来,以便调整程序。断点地址为程序中断处的偏移地址,段地址在 CS 中。

当执行在 DEBUG 状态下汇编的小段程序时,只用 G 命令即可。(17)十六进制运算命令 H 格式: H 数据 1 数据 2 其中数据 1 和数据 2 为十六进制数据。

功能:将两个十六进制数进行相加、减,结果显示在屏幕上。(18)结束 DEBUG 返回到 DOS 命令 Q 格式: Q 功能:程序调试完退出 DEBUG 状态,返回到 DOS 状态下。

Q 命令不能把内存的文件存盘,要想存盘必须在退出 DEBUG 之前用 W 命令写盘。

合肥学院计算机科学与技术系

附件3 汇编程序出错信息

汇编程序对源程序进行汇编遇到或可疑的语法时,计算机将会给出提示信息,以帮助调试程序。与特定代码相关的错误是编号的,与整个源程序相关,而不是某一特定代码相关的错误是不编号的。

1.有编号的错误信息的显示格式:源文件(行)代码 信息

(1)源文件,是出现错误的源程序文件名。若错误出现在内含文件的宏指令中,则源文件是引用该宠指令的文件,而不是定义该宏指令的文件。

(2)行,是出错位置在源程序中的行号。

(3)代码,是所有微软语言使用的标识代码,它由“error或“warning”开头,后跟一个五个字符代码。首字符指出程序是哪种语言编写的,汇编源程序用A开头;后四个是数字字符,第一个数字说明警告级别,致使错误是2,严重警告是4,劝告性警告是5;接着三个数字是错误号。

(4)信息,是错误的解释与说明。MASM5.0中有编号的错误信息提示如下: 0,Block nesting error,块嵌套错误。

1,Extra characters on line,在一行中除存在所定义语句的全部信息外,还有多余的字符,即用户提供了较多的操作数。

2,Internal error-Register already defined symbol,寄存器被定义为符号的内部错误。

3,Unkown type Specifier,未知的类型说明符。可能是拼错了类型说明符。4,Redefinition of symbol,符号在两处按不同类型定义。5,Symbol is multidefind,符号被多次定义。

6,Phase error between passes,二义性的语句引起偏移地址在遍1和遍2之间改变。7,Already had ELSE clause,条件汇编块中用了多个ELSE子句。8,Must be in condition block,无与ENDIF或ELSE匹配的IF。9,Symbol not defined,符号无定义。10,Syntax error,句法错。相应语法不正确。11,Type illegal in context,类型说明符非法。

12,Group name must be unique,组名已被定义为其他类型符号。

13,Must be declared during pass 1:xymbol,符号应预先定义,然后再引用。14,Illegal public declaration,在PUBLIC语句中,使用了非法操作数。如使用寄存器名。

15,Symbol already different kind :symbol,符号已经被定义为另一种符号。16,Reserved word used as symbol: name,保留字作符号,这是警告错误。

汇编语言程序设计实验指导书

17,Forward reference illegal,符号提前引用错误。

如顺序的两语句DB COUNT DUP(?)与COUNT EQU 10将产生错误。两语句调换先后顺序,将不会产生这种错误。

18,Operand must be register operand,操作数是寄存器,但却是一个符号或常量。20, Operand must be segment or group,操作数应当是段名或组名。提供的是却是其他名字或常数。

22, Operand must be type specifies,操作数应当是类型说明符。如NERA或WORD,但给出的是其他操作数。

23,Symbol already defined locally,在当前模块中已定义的符号又说明为EXTERN的操作数。

24,Segment parameters are changed,同名段操作数说明有矛盾。语句要求应相同。25,Improper align/combine type, AEGMENT语句操作数错,检查定位和组合类型。26,Reference to multidefined symbol,引用多重定义的符号。27,Operand expected,需要一个操作数,但接收到的是操作符。28,Operator expected,需要一个操作符,但给的却是操作数。29,Division by o or overflow,表达式结果被零除或结果溢出。

30,Negative shift count,作为SHL/SHR的操作数的表达式计算成一个负的移位次数。

31,Operand types must match,操作数类型应当匹配。

如DATA是字节变量,则语句“MOV AX,DATA”会产生这个错误。为消除该错误上述语句应改为“MOV AX,WORDPTR DATA”。

32,Illegal use of external,外部变量使用不正确。

34,Operand must be record or field name,要求操作数是记录或域名。

35,Operand must have size,要求操作数有指定的尺寸。如语句INC[BX]将产生这个错误。

38,Left operand must have segment,段取代前缀必须是段寄存器、组或段名。39,One operand must be constant,应当有一个常数操作数。

40,Operands must be in the same segment,or one must be constant,操作数应在同一段或应有一个常数。

42,Constant expected,希望一个常数。

43,Operand must have segment,操作数应当有段。

44,Must be associated with data,要求数据相关项的地方用了与代码相关的项。45,Must be associated with code,要求代码相关项的地方用了数据相关的项。46,Multiple base registers,操作数中使用了多个基址寄存器。如语句“MOV AX,[BX+BP]”非法。

47,Multiple index registers,操作数中使用了多个变址寄存器。如语句“MOV AX,[SI+DI]”非法。

合肥学院计算机科学与技术系

48,must be index or base registers,存储器操作数要求是基址或变址寄存器,但给的是其他寄存器。

49,Illegal use of register,寄存器的使用非法。

50,Value out ofran9,值超出范围。如语句“MOV AL,5000”是非法的,因字节寄存器应使用字节值。

51,Operand not in current CS ASSLLME segment,操作数超出ASSUME语句分配的代码范围。通常是对标号的调用或转移超出当前代码段。

52,Improper operand type:symbol,非法的操作数类型。如语句“MOV meml,mem2”非法,原因是两个均为存储器操作数。

53,Jump out of range by number bytes,条件转移指令不在要求的范围之内。55,Illegal register value,非法使用寄存器。如语句“MOV AX,BP+4”非法,正确语句为“MOV AX,[BP+4]”。

56,Immediate mode illegal,立即操作数非法。如语句“MOV DS,1000H”,立即操作数非法。

57,Illegal size for operand,特定语句的操作数非法。如INC MEM32,MEM32为双字变量。

58,Byte register illegal,8位寄存器用在要求l6位寄存器的语句中。如PUSH AL非法。

59,Illegal use of CS register,非法使用CS。如语句“POP CS”非法。

60,Must be accumulator register,应当使用AL、Ax的语句中使用了其他寄存器。61,Improper use of segment register,段寄存器使用非法。如语句INC CS。62,Missing or unreachable code segment,企图转移到MASM不能识别为代码段的标号。通常因为无ASSUME语句使CS与代码段相连造成的。

63,Operand combination illegal,操作数组合非法。

64,Near JAMP/CALL to different code segment,近程调用和跳转语句企图转移到非当前代码段。

65,Label cannot have segment override,标号不允许有段前缀,即段取代前缀使用有误。

66,Must have instruction after prefix,前缀后应当有指令。

67,Cannot override ES for destination,段取代前缀ES不能用在串操作指令的目的操作数上。

68,Cannot address with segment register,企图访问存储操作数,但没有用ASSUME说明该操作数所在的段。请使用段取代或ASSUME标示出该操作数的属性。

69,Must be in segment block,应在段内使用的伪指令用在了段外。

70,Cannot use EVEN or ALIGN with type,EVEN和ALIGN伪指令用在字节对准的段内。

71,Forward reference needs override or FAR,调用或转移语句提前引用其他段的

汇编语言程序设计实验指导书

标号需使用PTR操作符予以说明。如CALL FAR PTR TASK,引用标号TASK时还未定义TASK标号。

72,Illegal value for DUP count,重复子句的数值表达式不为正整数值。73,Symbol is already external,已定义为外部名字的符号又被定义为内部名字。74,DUP nesting too deep,重复子句嵌套超过17层。

75,Illegal use of undefined operand(?),“?”使用不正确。如“MOVAH,?”和“5 DUP(?+5)”均非法。

76,Too many values for structure or record initialization,初始化结构或记录变量时给出过多初始值。

77,Angle brackets required around initialized list,初始化结构变量时,没有使用尖括号括起初始值。

78,Directive illegal in structure,结构定义中的语句非法。

79,Override with DUP illegal,初始化结构变量时,使用了重复子句DUP。80,Field cannot be overridden,初始化结构变量时,企图预置不能被预置的域。83。Circular chain of EQU alliases,用EQU伪指令定义的符号名指向自身。如语句“AEQUB”和“B EQUA”非法,将产生该错误。

84,Cannot emulate coprocessor opcode,协处理器指令或操作数与产生协处理器仿真程序不支持的操作码一起使用。

85,End of file,no END directive,源程序无END语句。该错误也可能在段嵌套出错时产生。

86,Data emitted with no segment,应在段内使用的语句在段外使用。产生目标代码的语句必须在段内,不产生目标代码的语句可在段内,也可在段外。

87,Forced error-passl,用.ERRl伪指令强制形成的错误。88,Forced error-pass2,用.ERR2伪指令强制形成的错误。89,Forced error,用.ERR伪指令强制形成的错误。

90,Forced error-expression true(0),用.ERRZ伪指令强制形成的错误。91,Forced error-pression false(not 0),用.ERP,Z伪指令强制形成的错误。92,Forced error-symbol not defined,用.ERRNDEF伪指令强制形成的错误。93,Forced error-symbol defined,用.ERRDEF伪指令强制形成的错误。94,Forced error-string blank,用.ERRB伪指令强制形成的错误。95,Forced error-string not blank,用.ERRNB伪指令强制形成的错误。

96,Forced error-strings identical,用.ERRIDN伪指令强制形成的错误。97,Forced error-strings different,用.ERRDIF伪指令强制形成的错误。98,Wrong length for override value,结构域的重设值太大以至不适宜于这个域。99,Line too long expanding symbol:symbol,使用EQU伪指令定义的等式太长。101,Missing data;zero assumed,缺少操作数,假定是零。

103,Align must be power of2,ALIGN伪指令用了不是2的幂的参数。

合肥学院计算机科学与技术系

104,Jump within short distance,JMP指令的转移范围在短标号内,故可在标号前加SHORT操作符,从而使指令代码减少一个字节。

105,Expected element,少了一个元素,如标点符号或操作符。

106,Line too lon9,源行超过MASM允许的最大长度。MASM 5.0规定行长为128个字符。

107,Illegal digit in number,常数内包含当前的基不允许的数字,如l08Q。108,Empty string not allowed,空串不允许出现。如“NULL DB„Ⅲ语句非法。109,Missing Operand,语句缺少一个必需的操作数。

110,Open parenthesis or bracket,语句中缺少一个圆括号或方括号。111,Directivemustbeinmacr0,只在宏定义里面使用的伪指令用在宏定义之外。112,Unexpected end of line,语句行不完整。

2.无编号的错误信息

无编号错误信息提示命令行、存储分配或文件访问出现错误。(1)命令行错误

MASM时,若胃户给出无效命令行,将产生如下提示信息之一: Buffer size expected after B option Error defining symbol “name” from command line Extra file name ignored Line invalid.start again Path expected after I option Unkn0Ⅵ-a case option:option Unknown option:option(2)文件访问错误

当MASM处理文件时,若出现磁盘空间不够、错误文件名或其他文件错误,则将产生如下提示信息之一:

End of file encountered on input file Include file filename not found Read error on standard input Unable to access input file:filename Unable to open cref file:filename Unable to open input file:filename Unable to open listing file:filename Unable to open object file:filename Write error on cross.reference file Write error on listing file Write error on object file 21

汇编语言程序设计实验指导书

(3)其他错误

表示存储分配出错或其他一些与特定源行不相关的汇编出错等提示信息。Internal error,内部出错,注意错误发生时的情况。

Internal error.problem with expression analyzer,分析表达式出现内部错误,说明表达式构成有误。

Internal unknown error,MASM不能识别的内部表有错。

Number of Open conditionals:(number),有IF而没有ENDIF语句。Open procedures,无与PROC匹配的ENDP语句。Open segments,无与SEGMENT匹配的ENDS语句。

Out of memory,存储器有效空间用完,可能是源文件太长或符号表中定义了太多符号。

第二篇:语言程序设计课程设计指导书

汇编语言程序设计课程设计指导书

一、课程设计的目的

本课程设计是《汇编语言程序设计》课程的后继教学环节,其宗旨是使学生通过对一个较大型的、综合性的应用程序进行阅读、修改、添加功能等工作,对汇编语言程序设计有更进一步的认识,提高编程技巧和阅读理解复杂程序的能力。

二、课程设计的任务要求

根据所给的“Reader.asm”应用程序框架,在此基础上修改和添加功能。1.基本任务: 

   认真阅读“Reader.asm”源程序,理解程序每一条指令在程序中的作用; 用→、←键在窗口内左右移动文本;

用PgDn,PgUp键上下快速移动文本(每次移半帧); 设计专用键放大、缩小窗口,改变窗口位置。

2.扩展任务:   对文本内的Tab字符(ASCII码09H)进行处理:遇到Tab键,下一个字符显示在下一个表站开始处(每个6个字符一个表站);

设置状态行,显示当前文件名、文本位置(仿垂直滚动条)。

3.自行设计的其它任务:

三、课程设计报告的内容

1.课程设计题目名称、班级号、学号、学生姓名和课程设计起止日期(封面);

2.上海应用技术学院课程设计任务书(下发)3.课程设计目的和要求;

4.课程设计任务内容; 5.详细设计说明; 6.软件使用说明; 7.课程设计总结;

8.附录:1 参考文献 2 程序清单(电子版)。

四、课程设计详细设计说明及其它要求

1.2.3.4.5.6.分析原“Reader.asm”程序结构:每个模块说明,较大模块程序流程图; 对你已经实现的功能做详细的说明,并附上流程图及部分程序清单; 自己对该“文件阅读器”的进一步设想;

对于有设想但最终未实现的功能的大致编程思路的阐述; 论述在设计过程中遇到的并且对你具有启发性的问题; 交课程设计报告手写版,源程序交电子版。

五、评分标准

1.根据平时出勤情况和设计时的工作情况;

2.根据课程设计程序的完成情况,必须有可运行的软件。3.根据课程设计报告的质量。课程设计报告不能抄袭,抄袭判为不及格。4.在题目要求之外附加具有实用性的功能。

六、课程设计工作进度计划

星期一:课程设计介绍,源程序阅读理解,功能设计,程序编写。星期二:功能设计,程序编写。

星期三:程序编写与调试,课程设计报告撰写。星期四:程序编写与调试,课程设计报告撰写。

星期五:程序最终修改,课程设计报告撰写,提交报告并答辩。

七、主要参考资料

[1]杨文显.汇编语言程序设计简明教程.北京:电子工业出版社,2005

八、附录

《文本阅读器》汇编语言源程序清单

;Title: Assemble Program “Reader.asm”

;Read a file from disk, display it‟s contents on screen;Move the content on screen by up/down arrow keys;========================== MYDAT SEGMENT MAXLEN DW 1000;最大行数 INDEX DW 1000 DUP(?);行索引 LENCT DW 0;实际行数 CURLINE DW 0;当前页第一行行数 CCOUNT DW ?;文件总字符数

TOP DB 5;窗口左上角行数 LEFT DB 5;窗口左上角列数 WS DW 60;窗口宽度 HS DW 15;窗口高度 FG DB 17H;文字属性 FGB DB 1FH;窗口边框属性

MSG1 DB 'File:$';输入文件名提示 MSG2 DB 'File open error!$';打开文件出错时提示 MSG3 DB 'File read error!$';读文件出错时提示 FILENA DB 80,?,80 DUP(?);输入文件名缓冲区

;定义功能键和相应的处理程序

;每个功能定义两个数据:扫描码,处理程序入口地址;该数据由DOSUB子程序使用

KEYSUB DW 48H, SUB1 , 50H, SUB2, 0

MYDAT ENDS

;==========================

BUFFER SEGMENT PARA DB 65535 DUP(?);文件缓冲区,文件最大为64K BUFFER ENDS

;==========================

SSEG SEGMENT STACK „STACK‟;堆栈段

DW 100 DUP(?)SSEG ENDS

;==========================

;宏定义 DISPINIT: 设置显示器显示方式 DISPINIT MACRO MOV AX,0003H;文本方式 25x80 INT 10H ENDM;----------;宏定义 PROMPT: 显示字符串 PROMPT MACRO OUTMSG LEA DX, OUTMSG MOV AH, 09H;INT 21H;ENDM;--------;宏定义KRYIN: 从键盘读入一个字符 KEYIN MACRO MOV AH,0;读键

INT 16H;AH中为扫描码

ENDM;==========================;代码段开始 CODE SEGMENT

ASSUME CS: CODE, DS: MYDAT, ES: BUFFER, SS: SSEG

START: MOV AX, MYDAT;装载DS,ES MOV DS, AX MOV AX, BUFFER MOV ES, AX

DISPINIT;显示方式初始化

CALL READFILE;读入文件

JC DONE

CALL CLIST;初始化索引行

CALL CLSCREEN;清屏

CALL CREWIN;创建窗口

CALL SHOWCUR;显示当前页

NEXT: KEYIN;进入主程序: 读键盘

CALL COMMAND;命令分析与处理

JNC NEXT;非x键继续循环

DONE: CALL CLSCREEN;清屏

MOV AX, 4C00H INT 21H;退出

;-------;子程序READFILE: 提示并读入文件名,将文件读入缓冲区 READFILE PROC PROMPT MSG1;CALL SIN;读入文件名

MOV AX, 3D00H MOV DX, OFFSET FILENA+2 INT 21H;打开文件(读)JC GETERR1;打开文件出错转GETERR1 PUSH DS PUSH ES POP DS;将DS指向文件缓冲区段

MOV BX, AX;BX=文件号

MOV AH, 3FH;读文件 MOV CX, 0FFFFH;读入最多64K-1 MOV DX, 0;DS: DX指向文件缓冲区

INT 21H POP DS JC GETERR2;读入文件出错转GETERR2 MOV CCOUNT, AX;实际读入字符数存入CCOUNT中

CLC JMP GETFILEXIT

GETERR1: PROMPT MSG2;读入文件出错处理

KEYIN STC JMP GETFILEXIT;

GETERR2: PROMPT MSG3;打开文件出错处理

KEYIN STC

GETFILEXIT: RET

READFILE ENDP;-------;输入文件名子程序 SIN PROC MOV AH, 0AH MOV DX, OFFSET FILENA INT 21H;输入文件名

XOR CH, CH MOV CL, FILENA+1;取文件名长度

LEA BX, FILENA+2 ADD BX, CX;计算字符串结尾地址

MOV BYTE PTR [BX], 0;在字符串尾部加0 RET SIN ENDP;-------;索引行初始化子程序 CLIST PROC MOV CX, CCOUNT JCXZ CSTX;文件为空结束

MOV SI,0;文件缓冲区字符指针

MOV DI,0;索引行指针

MOV DX,0;行数计数

MOV INDEX[DI], 0 INC DX;假设文件至少有一行 CST1: CMP WORD PTR ES:[SI], 0A0DH;判断是否为回车换行符

JNZ CST2;不是行结束,转CST2 INC DX;行数加一

ADD SI, 2;跳过回车换行符

ADD DI, 2;索引行指针加一

MOV INDEX[DI], SI;指向本行开始地址

CMP DX, MAXLEN JNC CST4;是否超过最大行,超过转CST4,结束

JMP CST3;CST2: INC SI;文件缓冲区字符指针指向下一字符 CST3: LOOP CST1;CST4: MOV LENCT, DX;保存行数到LENCT中 CSTX: RET CLIST ENDP;-------;清屏子程序

CLSCREEN PROC MOV AX, 0600H;清屏

MOV CX, 0 MOV DH, 50 MOV DL, 79 MOV BH, 07H INT 10H RET CLSCREEN ENDP;------;显示当前页子程序 SHOWCUR PROC MOV DH, 0;窗口最顶行

MOV SI, CURLINE;取当前页第一行行数

MOV CX, HS;窗口的第一行和最后一行为边框,SUB CX, 2;所以能够显示内容的高度为窗口高度减二 SC1:

CALL SHOWLINE;显示一行

INC DH;窗口下一行

INC SI;文件下一行

MOV AX, LENCT;CMP SI, AX;文件是否显示完

JNC SC2;显示完则转SC2 LOOP SC1 JMP SC1X SC2: JCXZ SC1X;该页显示满则结束

;该页没有显示满,则用空行填满该页 SC3: PUSH CX PUSH DX CALL SHOWSPLINE;显示空行

POP DX POP CX INC DH LOOP SC3 SC1X: RET SHOWCUR ENDP;------;显示一行子程序

;输入:SI=显示行行号;DH=窗口中的行号 SHOWLINE PROC PUSH CX PUSH SI PUSH DX PUSH AX

ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;

MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二

SHL SI, 1;行索引为字类型,所以乘二

MOV SI, INDEX[SI];取该行第一个字符在文件缓冲区的地址

PUSH DS MOV AX, 0B800H MOV DS, AX;DS指向显示缓冲区段地址 SL1: MOV AX, ES:[SI] CMP AX, 0A0DH JZ SL2;如果是回车换行,则该行结束

MOV DS: [DI], AL;显示一个字符 ADD DI, 2;INC SI;取下一个字符

LOOP SL1;JCXZ SLX;该行正好显示完,则结束,否则用空格填满

SL2: MOV BYTE PTR DS:[DI], ' ';该行没有显示满,则用空格填满

ADD DI, 2 LOOP SL2

SLX: POP DS

POP AX POP DX POP SI POP CX

RET SHOWLINE ENDP;--------;显示空行子程序

;输入:DI=窗口中的行号 SHOWSPLINE PROC;

MOV AX, HS;SUB AX, 2;CMP DH, AL;显示的空行是否超出最低行

JNC SSLX;如果是,则转SSLX ADD DH, TOP;INC DH;实际行数=窗口左上角行数+DI+1 MOV DL, LEFT;INC DL;实际列数=窗口左上角列数+1 CALL VADD;

MOV CX, WS;窗口的第一列和最后一列是边框,SUB CX, 2;所以能够显示内容的宽度为窗口宽度减二

PUSH DS MOV AX, 0B800H MOV DS, AX SSL1: MOV BYTE PTR DS:[DI], ' ' ADD DI, 2 LOOP SSL1 POP DS SSLX: RET SHOWSPLINE ENDP;-------;创建窗口子程序 CREWIN PROC PUSH ES MOV AX, 0B800H;显示缓冲区地址为B800:0 MOV ES, AX;

MOV DH, TOP MOV DL, LEFT;窗口左上角行列数

MOV CX, HS;窗口高度(行数)CW1: PUSH DX;CALL VADD;计算地址

PUSH CX;MOV CX, WS;窗口宽度(列数)

MOV AL, FG;取属性 CW2: MOV BYTE PTR ES:[DI], ' ';送空白字符

INC DI;MOV BYTE PTR ES:[DI], AL;送属性

INC DI;LOOP CW2;

POP CX POP DX INC DH;行数加一

LOOP CW1

CALL DRAWB;画边框

POP ES RET CREWIN ENDP;-;画边框子程序 DRAWB PROC PUSH DX PUSH CX PUSH BX PUSH AX MOV BL, FGB MOV DH, TOP MOV DL, LEFT CALL VADD

;画左上角角框

MOV BYTE PTR ES:[DI], 0C9H INC DI MOV BYTE PTR ES:[DI], BL INC DI

;画第一行边框

MOV CX, WS SUB CX,2 DB1: MOV BYTE PTR ES:[DI], 0CDH INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB1

;画右上角角框

MOV BYTE PTR ES:[DI], 0BBH INC DI MOV BYTE PTR ES:[DI], BL

;画第二行到倒数二行左右边框

MOV DH, TOP MOV DL, LEFT INC DH MOV CX, HS SUB CX, 2 DB2: PUSH DX CALL VADD MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL DEC DI MOV AX, WS DEC AX SHL AX, 1 ADD DI, AX MOV BYTE PTR ES:[DI], 0BAH INC DI MOV BYTE PTR ES:[DI], BL POP DX INC DH LOOP DB2;取边框属性;窗口左上角行列数;计算地址;角框╔;因为去掉了左右角框,所以宽度减二;上下边框═;角框╗;从第二行开始;第一行和最后一行没有左右边框,;所以高度减二;;计算左边框地址;左右边框║;;;;计算右边框地址;;下一行;

;画左下角角框

MOV DH, TOP;MOV DL, LEFT;MOV AX, HS;DEC AX;ADD DH, AL;左下角行数=右上角行数+窗口高度-1 CALL VADD MOV BYTE PTR ES:[DI], 0C8H;角框╚

INC DI MOV BYTE PTR ES:[DI], BL INC DI

;画最低行边框

MOV CX, WS;SUB CX, 2;因为去掉了左右角框,所以宽度减二 DB3: MOV BYTE PTR ES:[DI], 0CDH;上下边框═

INC DI MOV BYTE PTR ES:[DI], BL INC DI LOOP DB3

;画右下角角框

MOV BYTE PTR ES:[DI], 0BCH;角框╝

INC DI MOV BYTE PTR ES:[DI], BL

POP AX POP BX POP CX POP DX

RET DRAWB ENDP;------;计算窗口内某行列位置对应显存地址;输入:DH=行 DL=列;输出:DI为显存地址 VADD PROC MOV AL, 80;MUL DH;XOR DH, DH;ADD AX, DX;行数×80+列数

SHL AX, 1;乘2,因为每个字符占两个字节

MOV DI, AX RET VADD ENDP;--------;命令分析子程序 COMMAND PROC CMP AH, 2DH;2DH为x键的扫描码

JNZ COM1;不是x键,转COM1 STC;值x键标志

RET COM1: CALL DOSUB;转命令散转子程序

CLC RET COMMAND ENDP;--;命令散转子程序 DOSUB PROC MOV AL, AH MOV AH, 0;将键扫描码放入AX中

MOV BX, OFFSET KEYSUB;BX指向KEYSUB DOSUB1: CMP WORD PTR [BX], 0 JZ DOSUBX;KEYSUB表查完,即没有找到转DOSUBX CMP AX, [BX] JZ DOSUB2;找到扫描码转DOSUB2 ADD BX, 4 JMP DOSUB1;DOSUB2: ADD BX, 2 MOV BX, [BX];取处理程序入口地址

JMP BX;转处理程序 DOSUBX: RET

;SUB1和SUB2均为功能键处理程序;处理完后应使用JMP DOSSUBX结束

;上箭头键处理程序 SUB1: CMP CURLINE, 0 JZ SUB1X;已到第一行,结束

DEC CURLINE;向上一行

CALL SHOWCUR;显示当前页 SUB1X: JMP DOSUBX

;下箭头键处理程序 SUB2: MOV AX, LENCT DEC AX DEC AX;至少显示一行

CMP AX, CURLINE;已到最后一行

JZ SUB2X INC CURLINE;向下一行

CALL SHOWCUR;显示当前页 SUB2X: JMP DOSUBX

DOSUB ENDP;--------

CODE ENDS

;========================= END START

第三篇:UML程序设计实验指导书

《UML程序设计》

实验指导教程

适合专业:计算机类专业

浙江树人大学信息科技学院 2016.02

课程与实验综述

第一部分实验综述

一.课程简介及实践要求:

《UML程序设计》是以介绍面向对象的统一建模语言UML为主,使学生了解面向对象技术的基本概念,掌握UML的分析和设计方法,同时掌握在Enterprise Architect环境下用UML进行分析和设计的技术。本课程在教学内容方面着重基本理论、基本知识和基本方法,在培养实践能力方面着重设计构思和设计技能的基本训练,熟练的上机操作能力和分析能力。

实验实践训练是UML程序设计教学的重要技能环节。通过实验,使学生加深理解、验证、巩固课堂教学内容,特别是通过设计和综合实验,发挥学生的想象力和创新能力。二.课程实验目的要求:

通过UML的实验,学生应该: 1.学会用UML进行面向对象的思想去分析和设计相关系统;2.学会用Rose建模工具进行软件建模。三.课程实验参考资料

1.(美)Joseph Schmuller著.UML基础、案例与应用.人民邮电出版社,2004 2.(美)Hans-Erik Eriksson.UML 2工具箱.电子工业出版社,2004 3.吴际,金茂忠.UML面向对象分析.北京航空航天大学出版社,2002 4.赵从军.UML设计及应用.机械工业出版社,2004 5.Grady Booch,James Rumbaugh,Ivar Jacobson.UML用户指南.机械工业出版社,2001 6.吴建,郑潮,汪杰.UML基础与Rose建模案例.人民邮电出版社,2004 第二部分 实验实践指导

实验一

构建用例图

一、实验目的

1.学会分析系统中的参与者和用例 2.掌握用例图的绘制方法

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

1、分析ATM系统需求,按要求画出用例图;

2、建立一个学生管理信息系统的需求

3、建立设计一个学生管理信息系统的完整的用例图

四、实验步骤

(一)ATM系统的用例图

1.分析

ATM自动取款机:客户可以取钱,存钱,查询余额,转帐,修改密码。通过分析可找出如下几个参与者:(1)ATM(2)客户

通过分析得到如下用例:

(1)存款

(2)取款(3)查询余额

(4)转帐(5)修改密码

(6)打印收据

2.绘图步骤:

下面介绍在Enterprise Architect中创建用例图的过程:

Enterprise Architect主界面如下图所示:

1、建立项目:

如下图在文件菜单选择新建项目:

如下图

选择文件夹,输入项目名:

如图,选择所需要的选项:

2、建立用例图

在合适的文件平夹下,右键

在UML Behavioral 下选择Use Case,图名处输入用例名如ATM 如下图,比双击ATM

在编辑界面下右键,如下图

3、添加用例

选择Use Case 依次添加存款、取款、查询余额、转帐、修改密码、打印收据,如图1.4所示。

4、添加Actor 在编辑界面下右键,选择Actor,5、添加边界(ATM取款系统)

如下图

6、添加参与者和用例间的关联关系,右键客户,如上图,选择小箭头,添加关联,同理添加ATM的关联

添加Common中的Note,内容为***制,如上图

7、保存图

完成用例图后,保存该图。

8、选择所有的内容,拷贝,粘贴到实验报告中,如下图

uc ATMATM取款系统存款金智勇制取款查询余额客户ATM修改密码打印收据转帐

(二)建立设计一个学生管理信息系统的需求分析与完整的用例图

(1)学生管理信息系统简介

学生管理信息系统主要为学校的学生处设计:方便学校学生处与学院学生口管理员方便管理学生,学生成绩由教务系统提供,教务系统提供相关的WEB service供学生管理信息系统调用。

 通过分析可找出如下几个参与者:

学生处管理员、学校领导(学校各种报表统计信息)、学院管理员、班主任(提供学生操行、查询等)、学院领导(学院各种报表统计信息)、学生、后勤管理人员(卫生管理、保卫处异常情况处理)、财务人员、考勤管理员(由副班长提供考勤信息)等

 通过分析得到如下一些大的用例:

学生基本信息管理、考勤管理、成绩导入、学校各种报表信息(要求细化)、学院各种报表信息(要求细化)、个人成才规划、新学期注册,操行评定、学生任职信息系统、学生奖惩管理系统(要求细化,包括评优评奖等)、学生变动信息管理(培训内容、助学贷款情况、学校还款情况、勤工助学情况,党员管理),后勤卫生管理、保卫处的学生的异常情况处理、其它的具体由学生自己定。

2.建立设计一个学生管理信息系统的需求分析

分析学生管理信息系统,建立系统需求分析,并要求画出系统功能框图,如学生管理信息系统的功能模块图如下

系统模块图如后勤卫生查询功能子系统模块图如下。

要求分析其它的子系统模块

3.建立一个学生管理信息系统的完整的用例图

完整的要求,就为每一类用户分配一个用例模型,如一般学生查询功能用例

要求分析其它参与者的用例模型

(4)建立用例的文字描述(要求学生写出两个)

1.“基本信息查询”用例 用例编号:04010101(共有4层用例图结构,每层用2位数字表示,采用8位编号。)用例名:

基本信息查询

执行者: 学生自己、学生的班主任、辅导员及其它的特权用户。目的: 查询学生的基本信息,包括姓名、学号、家庭地址等信息。类

型: 端点、基本的 级

别: 二级  过程描述:

(三)上传ATM系统的用例图与学生管理信息系统的完整的用例图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验二

构建类图

一、实验目的

1.理解类的基本概念 2.理解类间的关系

3.掌握类图的绘制方法

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析学生管理系统中的选课子系统中类及关系,然后画出它们的类图。(2)分析学生管理系统的其它子系统,并画出详细的系统类图

四、实验步骤

(一).选课子系统

1、选课子系统分析

 分析学生管理系统中的选课子系统,通过分析可抽象出如下几个类:

(1)学生类(student)(2)选课类(SelectCource)(3)课程类(Cource)

 学生类、选课类和课程类属性和方法

课程类的属性和方法:

属性包括

(1)课程名称(CourceName)(2)开课教室(Room)(3)课程号(CourceID)(4)授课教师(Teacher)(5)学年(academic year)(6)学期(Term)(7)允许选课的学生人数(SelectNoUp)方法包括

(1)设置课程号(SetCourceID)(2)设置课程名称(SetCourceName)(3)查询课程号(SeekCourceID)(4)查询允许选课的学生人数(SeekSelectNoUp)

选课类的属性和方法:

属性包括

(1)ID号(ID)(2)课程号(CourceID)(3)学号(SNo)(4)成绩(score)方法包括

1)选课(SelectCoure)2)退选(CancelSelected)3)查询选课情况(SeekSelected)

2.绘图步骤:

下面介绍在Enterprise Architect中创建类和它们之间关系的过程:

(1)在上图的合适文件夹下选择添加类图,类图名为选课系统类,如下图。

(2)在选课系统类图中,从工具栏中新建元素,选择Class并取名Student表明新增一个类,,同理添加选课类(SelectCource),课程类(Cource),如下图

(2)右键Studen,选择功能与属性---属性,如下图

(7)同样的方法添加Course类与SelectCource类,(8)创建两个类之间的关系,通过分析得出:Course类与SelectCource类之间为单向关联。选择图标栏的“关联”,由Course类指向electCource类。如图所示。

(10)分别在Course类与SelectCource类选项卡中键入名称和多重性,图2.10(11)重复(2)-(10)中的步骤完成选课系统整个类图的创建。(12)如图2.11转换生成代码,查看所生成的三个的代码。

选择对应的类的文件名,生成代码

查看代码

(二)分析学生管理系统的其它子系统,并画出详细的系统类图

一般情况一个子系统至少有一个类,要求建立系统的详细类图,并建立类间的关联

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验三

构建活动图

一、实验目的

1. 熟悉活动图的基本功能和使用方法。

2. 掌握如何使用建模工具绘制活动图方法。

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析图书管理系统中管理员的活动状态,画出管理员的活动图。(2)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图

四、实验步骤

(一)图书管理系统活动图

1.分析

 在图书管理系统中管理员的活动如下:

(1)处理还书(2)处理借书(3)处理罚款  读者的活动如下:

(1)登录(2)找书(3)预约(4)浏览

2.绘图步骤:

下面介绍在Enterprise Architect中活动图的过程:(1)在的合适文件夹下选择添加活动图(Activity),如下图,在图名中输入在图书管理系统管理员活动图如下图所示

(2)添加活动及其它元素,如下图

图 3.1

(2)绘制图书管理员的活动图,如图3.2所示:

图3.2

(3)创建读者的活动图如图3.3所示:

图3.3

(二)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图

(1)学生基本信息保存的活动图

录入基本信息、点击保存、链接数据库、判定学号是否已存在、判定录入信息是否符合规范(日期信息、身份证号、邮编等信息)-保存。(2)学生基本信息查询的活动图

链接数据库、查询基本信息表、倒出数据内容、填入各字段信息到信息输出框、根据学院代号查询学院名称、写入学院信息到列表框、定位学院信列表框、根据班级代号查询班级名称、写入班级信息、写入班级信息到列表框、定位班级信列表框、。(3)至少分析建立其它3个活动图

(4)根据活动图重新分析用例图并细化用例图,审核类图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验四

构建顺序图

一、实验目的

学会用顺序图实现用例

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析系统需求,画出ATM取款的顺序图(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤(一)ATM取款的场景

1、ATM取款的场景分析:

(1)通过读卡机,用户插入ATM卡;

(2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号;

(3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量;

(5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息;

(6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。

2、绘图步骤:

下面介绍在Enterprise Architect中创建顺序图的过程:

(1)在的合适文件夹下选择添加活动图(Activity),如下图,21

在工具菜单中选择选项如下图

选择图—顺序,如下图,选择“显示顺序编号”

(2)在顺序图前,为保证对象的可行性,可先在类图中创建Customer、ATM、和Account类。也可新建元素LifeLine。如下图,分别创建Customer、ATM、和Account.(4)根据ATM取款的场景,获得第一条消息为“客户向ATM机提交取款需求”,向图中添加消息。

在图中,点击Customer,选择小箭头,指向ATM,在消息特征编辑窗口中,输入Request。

图4.4

(5)同样的方法添加其它消息,如图4.5所示。

图4.5

(二)分析学生管理系统,并画出详细的顺序图

(1)如学生奖学金评定的顺序图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)用户登入的顺序图:

(3)新学期注册顺序图:学生交费--向学院报到--判断是否交费--(是否申请助学金、是否申请缓交)--注册(4)建立党员管理顺序图

(5)建立其它的一个以上顺序图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验五

构建协作图

一、实验目的

1.学会协作图的绘制方法

2.掌握顺序图和协作图的相互转换。

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析系统需求,画出ATM取款的协作图。

(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤

(一).ATM取款的场景

1、ATM取款的场景分析:

(1)通过读卡机,用户插入ATM卡;

(2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号;(3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量;

(5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息;(6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。

2、绘图步骤:

下面介绍在Enterprise Architect中创建协作图的过程:

(1)在“Logical View”中新建“Collaboration Diagram“,双击图标,出现图5.1,为编辑顺序图做好准备。

图5.1

(2)创建类节点

创建四个类节点分别为ATM,Branch,Consortium,User。

分别选择其中的三个类节点ATM,Branch,Consortium 把它们拖动到CollaborationDiagram图中,如图5.2所示。

4.2

选择标记为 User 的类节点。将选定的类拖放到CollaborationDiagram图编辑器中,使其位于 ATM 生命线元素的上方,如图5.3所示。

图5.3

(3)添加连接器链接(Object Link)

协作图中的每个元素均可通过连接器链接与其他元素建立连接。您可以标识这些链

接,并在其中添加消息流。

从建模组件面板的“基本”类别中,选择 “ Object Link ” 图标。单击标记为 User 的生命线元素,然后单击 ATM。将在两个元素之间绘制一条连接器链接。使用相同的步骤绘制以下链接:

从 ATM 至 Consortium 的链接

从 Consortium 至 Branch 的链接

从 ATM 至 Branch 的链接

注意:在创建从 ATM 至 Branch 的链接时,请从 ATM 生命线的右侧水平绘制一条链接,并在到达 Branch 生命线的正上方时单击鼠标左键。这样便会在链接线上出现一个顶点,然后在顶点到 Branch 生命线之间垂直绘制一条链接。

此时,该图应当图5.4类似。

图5.4

在图编辑器中的任意位置单击鼠标右键,选择 “Edit” 的“delete from mode”菜单,可删除模型,如图5.5所示。

图5.5

(4)显示操作流

操作流将在图中显示为与链接平行的带标记箭头。此链接用于向目标元素传输消息或实现这种传输。在图编辑器中,选择 User 和 ATM 之间的连接器链接。右键单击距 ATM 生命线最近的连接器链接部分。如图4.6所示,从弹出式菜单中选择“Open Specification”,弹出”Link Specification For Untile”对话框,在对话框中按右键,从弹出式菜单中选择“Insert To: ATM”,在Message Name中输入public void GetCashOnHand(), 如图5.6所示。

图5.6

在 ATM 和Consortium 之间的连接器链接上,右键单击靠近Consortium生命线的链接部分。

添加消息 “ public void validateAccountInfo()”。Rose显示 2: public void validateAccountInfo()。

在 ATM 和 Branch 之间的连接器链接上,右键单击靠近Branch 生命线的链接部分。

添加消息 “public char getConnected”。Rose显示3: public char getConnected()。

右键单击 Consortium 和 Branch 之间靠近Branch 生命线元素的连接器链接。添加消息 “public void verifyCardWithBank(int stringCardSTrip)”。Rose显示 4: public void verifyCardWithBank(int stringCardSTrip)。

完成的协作图应当与图5.7类似。

图5.7

(5)模型检查并保存

使用Tools工具的”Check Model”,进行模型检查,查看是否有错。

如无误则在完成协作图后,您可以保存该图。在图编辑器中,从菜单中选择“保存”。

(二)分析学生管理系统,并画出详细的协作图

(1)如学生奖学金评定的协作图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)助学贷款申请协作图:学生申请—班主任批准—学院批准-学校领导批准(3)助学勤工俭学申请协作图:(4)建立其它的一个以上协作图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验六

构建状态图

一、实验目的

1. 熟悉状态图的基本功能和使用方法。2. 掌握如何使用建模工具绘制状态图方法。

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析图书管理系统中的书和借书证的状态,画出它们的状态图;

(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤

(一)图书管理系统

1、分析

 在图书管理系统中,分析书的状态如下:

(1)可借(2)被借(3)被预约(4)删除

 借书证的状态如下:

(1)可用(2)不可用(3)删除

2、绘图步骤:

下面介绍在Rose2003中创建类和它们之间关系的过程:

(1)在“Logical View“中的“StateChart Diagram”菜单,双击图标,出现图6.1,为编辑状态图做好准备。

图6.1(2)在工具栏中选择“Start State”图标添加到编辑窗口中,如图6.2所示。

图6.2(3)在工具栏中选择“State”图标,添加一个元素,命名为“New book”,如图6.3所示。

图6.3(4)同样的方法添加其它状态,如图6.4所示。

图6.4 5)书的各个状态之间添加转移及相应的事件,如图6.5所示。

32(图6.5(6)同样的方法得借书证的状态图,如图6.6所示。

图6.6

(二)分析学生管理系统,并画出详细的状态图

(1)建立学生交款状态图:已交、未交、缓交、部分申请助学贷款(2)建立学生惩罚(记过以上)状态图:

(3)建立学生党员申请状态图:(4)建立其它的一个以上状态图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验七

构建组件图和配置图

一、实验目的

1.掌握UML中组件图和配置图的建立方法;

2.掌握使用Enterprise Architect绘制组件图和配置图;

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析学校网上选课系统的组件图,画出系统组件图。(2)分析学校网上选课系统的配置图,画出系统配置图。(3)分析学生管理系统,并画出详细的组件图与配置图

四、实验步骤

(一)网上选课系统

1.分析

设计学校网上选课系统的组件图和配置图,需求如下: 某学校的网上选课系统主要包括如下功能:

管理员通过系统管理界面进入,建立本学期要开的课程、将课程信息保存在数据库中并可以对课程进行改动和删除。

学生通过客户机浏览器根据学号和密码进入选课界面,在这里学生可以进行三种操作:查询已选课程、选课以及付费。

对于以上操作,可通过业务层,并将这些操作结果存入数据库中。

2.绘图步骤:

(1)绘制组件图的步骤如下:

 确定组件;(系统管理系统, 课程管理系统,选课系统,查询系统,人员信息管理,注册系统,业务操作,备份系统,付费系统) 给组件加上必要的构造型;  确定组件的联系;  绘制组件图。

下面介绍在Rose2003中创建组件图的过程:

(a)在“Component View“中的 “New”的 “Component Diagram”中,出现图7.1,为编辑组件图做好准备,35

图7.1(b)创建组件图(根据要求创建)。

(2)绘制配置图的步骤如下:  确定节点;(数据库服务器,应用服务器,打印机,客户端(n个,连接为局域网))

 加上构造型;

 确定节点的联系;  绘制配置图。

下面介绍在Rose2003中创建配置图的过程:

(a)在“Deployment View“中,出现图7.2,为编辑配置图做好准备,图7.2

图7.3 系统配置图

(二)分析学生管理系统,并画出详细的组件图与配置图

(1)系统组件图  分析系统接口

如建立查询一个学生基本信息的接口,返回一个学生基本信息的类(类中有姓名、学号等属性)

 搜索系统用户界面

搜索系统用户界面,作为系统一种特殊的接口,用户与系统的接口,建立单独的包Web InterFace保存用户界面,如学生基本信息操作的用户界面定义如下(从View继承过来的一个类,这里只考虑界面,类只考虑程序,可有部分重复):

为用户界面考虑接口,并关联不同的类

(2)系统配置图

假设有以下的子系统:学生管理系统用到财务子系统、成绩管理子系统,并各自有数据库。

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验八

Enterprise Architect逆向工程

一、实验目的

1.掌握Enterprise Architect中逆向工程的建立方法; 2.掌握根据逆向工程画出类图;

二、实验器材

1.计算机一台;

2.Enterprise Architect 工具软件;

三、实验内容

(1)分析Java程序,实现EA逆向工程。(2)根据逆向工程所得类,画出对应类图。

四、实验步骤

1.分析

Enterprise Architect功能十分强大,从项目需求分析、开发、测试,整个项目过程都可使用Enterprise Architect,特别是在做需求分析与项目系统架构时建模的能力巨强。但是每个人不是在项目一开始就能参与到初期当中来的,有时候整个项目一期完工了,进行二期开发时,这个时候参与进项目,为了能够快速了解整个项目的框架,使用Enterprise Architect的逆向工程的功能极为有用。

2.绘图步骤:

(1)分析J2EE源代码,了解其结构

(2)新建一个Enterprise Architect工程,选择合适的文件夹,如下图选择包---代码工程—导入---源程序目录

选择根包,原类型为Java

点击确定即在对应的包下生成三个类Env,EnvList和ListS,新建视图,添加Env,EnvList和ListS到视图中,具体如图所示:

图8.3

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

第四篇:UML程序设计实验指导书

《UML程序设计》

实验指导教程

适合专业:计算机科学技术09

浙江树人大学信息科技学院 2012.02

课程与实验综述

第一部分实验综述

一.课程简介及实践要求:

《UML程序设计》是以介绍面向对象的统一建模语言UML为主,使学生了解面向对象技术的基本概念,掌握UML的分析和设计方法,同时掌握在Rational Rose环境下用UML进行分析和设计的技术。本课程在教学内容方面着重基本理论、基本知识和基本方法,在培养实践能力方面着重设计构思和设计技能的基本训练,熟练的上机操作能力和分析能力。

实验实践训练是UML程序设计教学的重要技能环节。通过实验,使学生加深理解、验证、巩固课堂教学内容,特别是通过设计和综合实验,发挥学生的想象力和创新能力。二.课程实验目的要求:

通过UML的实验,学生应该: 1.学会用UML进行面向对象的思想去分析和设计相关系统;2.学会用Rose建模工具进行软件建模。三.课程实验参考资料

1.(美)Joseph Schmuller著.UML基础、案例与应用.人民邮电出版社,2004 2.(美)Hans-Erik Eriksson.UML 2工具箱.电子工业出版社,2004 3.吴际,金茂忠.UML面向对象分析.北京航空航天大学出版社,2002 4.赵从军.UML设计及应用.机械工业出版社,2004 5.Grady Booch,James Rumbaugh,Ivar Jacobson.UML用户指南.机械工业出版社,2001 6.吴建,郑潮,汪杰.UML基础与Rose建模案例.人民邮电出版社,2004 第二部分 实验实践指导

实验一

构建用例图

一、实验目的

1.学会分析系统中的参与者和用例 2.掌握用例图的绘制方法

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

1、分析ATM系统需求,按要求画出用例图;

2、建立一个学生管理信息系统的需求

3、建立设计一个学生管理信息系统的完整的用例图

四、实验步骤

(一)ATM系统的用例图

1.分析

ATM自动取款机:客户可以取钱,存钱,查询余额,转帐,修改密码。通过分析可找出如下几个参与者:(1)ATM(2)客户

通过分析得到如下用例:

(1)存款

(2)取款(3)查询余额

(4)转帐(5)修改密码

(6)打印收据

2.绘图步骤:

下面介绍在Rose2003中创建用例图的过程:

(1)在“Use Case View“中双击Main图,或者右击“Use Case View“,弹出在快捷菜单中选择“New”->“UseCase Diagram”,双击图标,出现图1.1,为编辑用例图做好准备。

图1.1 空用例图

(2)在用例视图中,从工具栏中选择Actor图标,在右边的绘图区中添加一个新元素,并取名客户表明新增一个参与者,如图1.2所示。

图1.2(3)同样的方法添加参与者“ATM”

(4)在工具栏上选择用例的图标,依次添加存款、取款、查询余额、转帐、修改密码、打印收据,如图1.4所示。

图1.4(5)添加参与者和用例间的关联关系,如图1.5所示。

图1.5(6)保存图

完成用例图后,保存该图。

(二)建立设计一个学生管理信息系统的需求分析与完整的用例图

(1)学生管理信息系统简介

学生管理信息系统主要为学校的学生处设计:方便学校学生处与学院学生口管理员方便管理学生,学生成绩由教务系统提供,教务系统提供相关的WEB service供学生管理信息系统调用。

 通过分析可找出如下几个参与者:

学生处管理员、学校领导(学校各种报表统计信息)、学院管理员、班主任(提供学生操行、查询等)、学院领导(学院各种报表统计信息)、学生、后勤管理人员(卫生管理、保卫处异常情况处理)、财务人员、考勤管理员(由副班长提供考勤信息)等

 通过分析得到如下一些大的用例:

学生基本信息管理、考勤管理、成绩导入、学校各种报表信息(要求细化)、学院各种报表信息(要求细化)、个人成才规划、新学期注册,操行评定、学生任职信息系统、学生奖惩管理系统(要求细化,包括评优评奖等)、学生变动信息管理(培训内容、助学贷款情况、学校还款情况、勤工助学情况,党员管理),后勤卫生管理、保卫处的学生的异常情况处理、其它的具体由学生自己定。

2.建立设计一个学生管理信息系统的需求分析

分析学生管理信息系统,建立系统需求分析,并要求画出系统功能框图,如学生管理信息系统的功能模块图如下

系统模块图如后勤卫生查询功能子系统模块图如下。

要求分析其它的子系统模块

3.建立一个学生管理信息系统的完整的用例图

完整的要求,就为每一类用户分配一个用例模型,如一般学生查询功能用例

要求分析其它参与者的用例模型

(4)建立用例的文字描述(要求学生写出两个)

1.“基本信息查询”用例 用例编号:04010101(共有4层用例图结构,每层用2位数字表示,采用8位编号。)用例名:

基本信息查询

执行者: 学生自己、学生的班主任、辅导员及其它的特权用户。目的: 查询学生的基本信息,包括姓名、学号、家庭地址等信息。类

型: 端点、基本的 级

别: 二级  过程描述:

(三)上传ATM系统的用例图与学生管理信息系统的完整的用例图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验二

构建类图

一、实验目的

1.理解类的基本概念 2.理解类间的关系 3.掌握类图的绘制方法

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析学生管理系统中的选课子系统中类及关系,然后画出它们的类图。(2)分析学生管理系统的其它子系统,并画出详细的系统类图

四、实验步骤

(一).选课子系统

1、选课子系统分析

 分析学生管理系统中的选课子系统,通过分析可抽象出如下几个类:

(1)学生类(2)管理员类(3)课程类

 学生类和管理员类的属性较容易分析,这里只列出课程类的属性和方法:

(1)课程名称(2)开课教室(3)课程号(4)授课教师(5)选课的学生(6)开课起始时间

(7)允许选课的学生人数(8)设置课程号(9)设置课程名称(10)查询课程号

(11)查询允许选课的学生人数

2.绘图步骤:

下面介绍在Rose2003中创建类和它们之间关系的过程:

(1)在“Logical View“中双击Main图,或者右击“Logical View“,弹出在快捷菜单中选择“New”->“Class Diagram”,双击图标,出现图2.1,为编辑类图做好准备。

图2.1(2)在逻辑视图中,从工具栏中选择class图标,在右边的绘图区中添加一个新元素,并取名Student表明新增一个类,如图2.2所示。

图2.2(3)选择新创建的元素,点击鼠标右键,在弹出的菜单中选择“Open Sepcification”,弹出图2.3对话框。

(4)在对话框中,可以修改元素的名称,这里新元素的名称定为“Student”,如图2.4所示。

图2.3 9

图2.4 5)点击“Attributes”选项卡,添加属性,如图2.5所示。

图2.5 6)点击“operations”选项卡,添加方法如图2.6所示。

图2.6(((7)同样的方法添加Course类,如图2.7所示。

图2.7(8)创建两个类之间的关系,通过分析得出:学生类和课程类之间为单向关联。选择图标栏的“关联”,由学生类指向课程类。如图2.8所示。

图2.8(9)创建关联名。右击关联,选择“open specification“,键入关联名(select),如图2.9所示。

图2.9 11

(10)分别在“Role A Detail“和“Role B Detail“选项卡中键入名称和多重性,如图2.10所示。

图2.10(11)重复(2)-(10)中的步骤完成选课系统整个类图的创建。(12)如图2.11转换生成代码,查看所生成的三个的代码。

图2.11

(二)分析学生管理系统的其它子系统,并画出详细的系统类图

一般情况一个子系统至少有一个类,要求建立系统的详细类图,并建立类间的关联

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验三

构建活动图

一、实验目的

1. 熟悉活动图的基本功能和使用方法。2. 掌握如何使用建模工具绘制活动图方法。

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析图书管理系统中管理员的活动状态,画出管理员的活动图。(2)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图

四、实验步骤

(一)图书管理系统活动图

1.分析

 在图书管理系统中管理员的活动如下:

(1)处理还书(2)处理借书(3)处理罚款  读者的活动如下:

(1)登录(2)找书(3)预约(4)浏览

2.绘图步骤:

下面介绍在Rose2003中创建类和它们之间关系的过程:

(1)在“Logical View“中选择“Activity Diagram ”菜单,双击图标,出现图3.1,为编辑活动图做好准备。

图 3.1

(2)在Rose2003中,绘制图书管理员的活动图,新建“Activity Diagram”,如图3.2所示:

图3.2

(3)创建读者的活动图如图3.3所示:

图3.3

(二)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图

(1)学生基本信息保存的活动图

录入基本信息、点击保存、链接数据库、判定学号是否已存在、判定录入信息是否符合规范(日期信息、身份证号、邮编等信息)-保存。(2)学生基本信息查询的活动图

链接数据库、查询基本信息表、倒出数据内容、填入各字段信息到信息输出框、根据学院代号查询学院名称、写入学院信息到列表框、定位学院信列表框、根据班级代号查询班级名称、写入班级信息、写入班级信息到列表框、定位班级信列表框、。(3)至少分析建立其它3个活动图

(4)根据活动图重新分析用例图并细化用例图,审核类图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验四

构建顺序图

一、实验目的

学会用顺序图实现用例

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析系统需求,画出ATM取款的顺序图(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤(一)ATM取款的场景

1、ATM取款的场景分析:

(1)通过读卡机,用户插入ATM卡;

(2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号;

(3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量;

(5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息;

(6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。

2、绘图步骤:

下面介绍在Rose2003中创建顺序图的过程:

(1)在“Logical View”中新建“Sequence Diagram“,双击图标,出现图4.1,为编辑顺序图做好准备。

图4.1(2)在顺序图编辑窗口中,从工具栏中选择Object图标,在右边的绘图区中添加一个新元素,并取名Customer表明新增一个对象,如图4.2所示。

图4.2

(3)同样的方法,添加ATM对象和Account对象,如图4.3所示。

图4.3(4)根据ATM取款的场景,获得第一条消息为“客户向ATM机提交取款需求”,向图中添加消息,如图4.4所示。

图4.4

(5)同样的方法添加其它消息,如图4.5所示。

图4.5

(二)分析学生管理系统,并画出详细的顺序图

(1)如学生奖学金评定的顺序图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)用户登入的顺序图:

(3)新学期注册顺序图:学生交费--向学院报到--判断是否交费--(是否申请助学金、是否申请缓交)--注册(4)建立党员管理顺序图

(5)建立其它的一个以上顺序图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验五

构建协作图

一、实验目的

1.学会协作图的绘制方法

2.掌握顺序图和协作图的相互转换。

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析系统需求,画出ATM取款的协作图。

(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤

(一).ATM取款的场景

1、ATM取款的场景分析:

(1)通过读卡机,用户插入ATM卡;

(2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号;(3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量;

(5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息;(6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。

2、绘图步骤:

下面介绍在Rose2003中创建顺序图的过程:

(1)在“Logical View”中新建“Collaboration Diagram“,双击图标,出现图5.1,为编辑顺序图做好准备。

图5.1

(2)创建类节点

创建四个类节点分别为ATM,Branch,Consortium,User。

分别选择其中的三个类节点ATM,Branch,Consortium 把它们拖动到CollaborationDiagram图中,如图5.2所示。

4.2

选择标记为 User 的类节点。将选定的类拖放到CollaborationDiagram图编辑器中,使其位于 ATM 生命线元素的上方,如图5.3所示。

图5.3

(3)添加连接器链接(Object Link)

协作图中的每个元素均可通过连接器链接与其他元素建立连接。您可以标识这些链

接,并在其中添加消息流。

从建模组件面板的“基本”类别中,选择 “ Object Link ” 图标。单击标记为 User 的生命线元素,然后单击 ATM。将在两个元素之间绘制一条连接器链接。使用相同的步骤绘制以下链接:

从 ATM 至 Consortium 的链接

从 Consortium 至 Branch 的链接

从 ATM 至 Branch 的链接

注意:在创建从 ATM 至 Branch 的链接时,请从 ATM 生命线的右侧水平绘制一条链接,并在到达 Branch 生命线的正上方时单击鼠标左键。这样便会在链接线上出现一个顶点,然后在顶点到 Branch 生命线之间垂直绘制一条链接。

此时,该图应当图5.4类似。

图5.4

在图编辑器中的任意位置单击鼠标右键,选择 “Edit” 的“delete from mode”菜单,可删除模型,如图5.5所示。

图5.5

(4)显示操作流

操作流将在图中显示为与链接平行的带标记箭头。此链接用于向目标元素传输消息或实现这种传输。在图编辑器中,选择 User 和 ATM 之间的连接器链接。右键单击距 ATM 生命线最近的连接器链接部分。如图4.6所示,从弹出式菜单中选择“Open Specification”,弹出”Link Specification For Untile”对话框,在对话框中按右键,从弹出式菜单中选择“Insert To: ATM”,在Message Name中输入public void GetCashOnHand(), 如图5.6所示。

图5.6

在 ATM 和Consortium 之间的连接器链接上,右键单击靠近Consortium生命线的链接部分。

添加消息 “ public void validateAccountInfo()”。Rose显示 2: public void validateAccountInfo()。

在 ATM 和 Branch 之间的连接器链接上,右键单击靠近Branch 生命线的链接部分。

添加消息 “public char getConnected”。Rose显示3: public char getConnected()。

右键单击 Consortium 和 Branch 之间靠近Branch 生命线元素的连接器链接。添加消息 “public void verifyCardWithBank(int stringCardSTrip)”。Rose显示 4: public void verifyCardWithBank(int stringCardSTrip)。

完成的协作图应当与图5.7类似。

图5.7

(5)模型检查并保存

使用Tools工具的”Check Model”,进行模型检查,查看是否有错。

如无误则在完成协作图后,您可以保存该图。在图编辑器中,从菜单中选择“保存”。

(二)分析学生管理系统,并画出详细的协作图

(1)如学生奖学金评定的协作图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)助学贷款申请协作图:学生申请—班主任批准—学院批准-学校领导批准(3)助学勤工俭学申请协作图:(4)建立其它的一个以上协作图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验六

构建状态图

一、实验目的

1. 熟悉状态图的基本功能和使用方法。2. 掌握如何使用建模工具绘制状态图方法。

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析图书管理系统中的书和借书证的状态,画出它们的状态图;

(2)分析学生管理系统,并画出详细的顺序图

四、实验步骤

(一)图书管理系统

1、分析

 在图书管理系统中,分析书的状态如下:

(1)可借(2)被借(3)被预约(4)删除

 借书证的状态如下:

(1)可用(2)不可用(3)删除

2、绘图步骤:

下面介绍在Rose2003中创建类和它们之间关系的过程:

(1)在“Logical View“中的“StateChart Diagram”菜单,双击图标,出现图6.1,为编辑状态图做好准备。

图6.1(2)在工具栏中选择“Start State”图标添加到编辑窗口中,如图6.2所示。

图6.2(3)在工具栏中选择“State”图标,添加一个元素,命名为“New book”,如图6.3所示。

图6.3(4)同样的方法添加其它状态,如图6.4所示。

图6.4 5)书的各个状态之间添加转移及相应的事件,如图6.5所示。(图6.5(6)同样的方法得借书证的状态图,如图6.6所示。

图6.6

(二)分析学生管理系统,并画出详细的状态图

(1)建立学生交款状态图:已交、未交、缓交、部分申请助学贷款(2)建立学生惩罚(记过以上)状态图:

(3)建立学生党员申请状态图:(4)建立其它的一个以上状态图

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验七

构建组件图和配置图

一、实验目的

1.掌握UML中组件图和配置图的建立方法; 2.掌握使用Rose绘制组件图和配置图;

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析学校网上选课系统的组件图,画出系统组件图。(2)分析学校网上选课系统的配置图,画出系统配置图。(3)分析学生管理系统,并画出详细的组件图与配置图

四、实验步骤

(一)网上选课系统

1.分析

设计学校网上选课系统的组件图和配置图,需求如下: 某学校的网上选课系统主要包括如下功能:

管理员通过系统管理界面进入,建立本学期要开的课程、将课程信息保存在数据库中并可以对课程进行改动和删除。

学生通过客户机浏览器根据学号和密码进入选课界面,在这里学生可以进行三种操作:查询已选课程、选课以及付费。

对于以上操作,可通过业务层,并将这些操作结果存入数据库中。

2.绘图步骤:

(1)绘制组件图的步骤如下:

 确定组件;(系统管理系统, 课程管理系统,选课系统,查询系统,人员信息管理,注册系统,业务操作,备份系统,付费系统) 给组件加上必要的构造型;  确定组件的联系;  绘制组件图。

下面介绍在Rose2003中创建组件图的过程:

(a)在“Component View“中的 “New”的 “Component Diagram”中,出现图7.1,为编辑组件图做好准备,31

图7.1(b)创建组件图(根据要求创建)。

(2)绘制配置图的步骤如下:  确定节点;(数据库服务器,应用服务器,打印机,客户端(n个,连接为局域网))

 加上构造型;  确定节点的联系;  绘制配置图。

下面介绍在Rose2003中创建配置图的过程:

(a)在“Deployment View“中,出现图7.2,为编辑配置图做好准备,图7.2

图7.3 系统配置图

(二)分析学生管理系统,并画出详细的组件图与配置图

(1)系统组件图  分析系统接口

如建立查询一个学生基本信息的接口,返回一个学生基本信息的类(类中有姓名、学号等属性)

 搜索系统用户界面

搜索系统用户界面,作为系统一种特殊的接口,用户与系统的接口,建立单独的包Web InterFace保存用户界面,如学生基本信息操作的用户界面定义如下(从View继承过来的一个类,这里只考虑界面,类只考虑程序,可有部分重复):

为用户界面考虑接口,并关联不同的类

(2)系统配置图

假设有以下的子系统:学生管理系统用到财务子系统、成绩管理子系统,并各自有数据库。

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

实验八

Rose逆向工程

一、实验目的

1.掌握Rose中逆向工程的建立方法; 2.掌握根据逆向工程画出类图;

二、实验器材

1.计算机一台;

2.Rational Rose 工具软件;

三、实验内容

(1)分析Java程序,实现ROSE逆向工程。(2)根据逆向工程所得类,画出对应类图。

四、实验步骤

1.分析

Rose功能十分强大,从项目需求分析、开发、测试,整个项目过程都可使用rose,特别是在做需求分析与项目系统架构时建模的能力巨强。但是每个人不是在项目一开始就能参与到初期当中来的,有时候整个项目一期完工了,进行二期开发时,这个时候参与进项目,为了能够快速了解整个项目的框架,使用Rose的逆向工程的功能极为有用。

2.绘图步骤:

(1)分析J2EE源代码,了解其结构

(2)新建一个ROSE工程,选择J2EE模板,.如图8.1

图8.1 3.在出现的界面中,CLASSPATH中加入源代码的目录,加入支持的包,点击'ADD RECURSIVE'点 ‘SELECT ALL‘

点击REVERSE,完成后没任何提示,点'DONE'结束。选择ListS.java作为源代码,如下图8.2所示。

图8.2 点击Reverse,逆向工程完成。逆向工程以后不会自动生成类图,但在logical

view

和component view 里面按照你的java包结构会自动生成相应的包和类,要按照自己的要求建立类图。下面我们将所选包下的所有类显示在新建类图中:

ROSE里新建CLASS DIAGRAM,然后把类Env,EnvList和ListS包一个个拖到右侧图中,(或点菜单上的'QUERY'下的'ADD CLASS',确定)。如图8.3所示:

图8.3

五、实验报告要求

1. 整理实验结果。

2. 小结实验心得体会。

第五篇:C语言程序设计课程设计指导书

课程设计指导书

课程名称: C语言程序设计

班次: 自动化2016-01,02,03班

设计任务:

整个课程设计一共提供了10个题目,编号为1~10。按学号尾数进行选题设计。

课程设计目的

1、进一步掌握利用C语言进行程序设计的能力;

2、进一步理解和运用结构化程序设计的思想和方法;

3、初步掌握开发一个小型实用系统的基本方法;

4、学会调试一个较长程序的基本方法;

5、学会利用流程图表示算法;

5、学习撰写课程设计报告;

第一部分:课题描述(一共10个课题)

课题1:图书管理系统

在磁盘上创建3个txt文件,命名book.txt,borrow.txt和reader.txt,分别存储图书、借阅和读者的信息,每本图书的基本信息有编号、书名、作者、出版日期、金额、类别、在馆数量等。借阅基本信息有:编号、书名、金额、借书证号、借书日期、到期日期、罚款金额等。读者信息包括借书证号、姓名、班级、学号、类别等。创建图书管理系统,该系统运行时在控制台中显示菜单界面进行键盘输入操作,模拟借阅图书的管理过程。

系统功能包括以下方面: A、图书信息管理

图书按类别进行管理,常见类别有书籍、期刊、报刊等,在该模块中又包含添加、删除、修改、查询等操作,操作结果打印在控制台中。

字段包含:书名,编号,类别,存放地点,入库时间

B、借阅信息管理

图书借阅模拟操作,包括以下功能:借出,归还和续借等操作,对超期图书进行罚款金额显示。另外可以设置罚金数额和最大借阅数量和时间等参数。

字段包含:书名,编号,借阅者,借出时间,归还时间,借阅状态,超期时间,最大借阅数

C、读者信息管理

读者分为教师和学生两大类等级:教师和学生的最大图书借阅数量和时间有所不同,并可对添加、挂失和查询读者信息。

字段包含:读者姓名,读者类别,可借阅时间,可借阅数量,系统操作过程中能够正确读取和更新文件,并进行正常的图书、借阅和读者管理操作。

课题2:个人通讯录管理系统

在磁盘上建立1个communication.txt文件,作为读取和存储的通讯录,该系统运行时在控制台中显示菜单界面进行键盘输入操作,模拟通讯录的操作过程。

系统功能包括以下方面:

A、通讯录的每位联系人信息有姓名、单位、固定电话、移动手机、分类(如同事、朋友、同学、家人等)、EMAIL、QQ等。

B、输入、查找、删除、修改联系人信息功能。

C、显示功能:能够显示所有联系人信息(大于10条的分屏显示),或按分类进行显示。D、分类操作:可以按分类信息进行同一类的联系人操作,比如显示、删除和查找操作。E、(选作)可以加载联系人头像并进行显示,可用字符拼图或读取已有的黑白图片文件。系统操作过程中能够正确读取和更新文件,并进行正常的通讯录联系人操作。

课题3:职工工资管理系统

在计算机中建立相应的数据结构,利用程序实现工资的输入、查询、增、删、改、统计、输出等操作。

1、设计一个能够记录公司员工工资的数据结构(比如包括:员工号,姓名,基本工资,补贴金额,奖励金额,扣除金额、实发工资等)、文件(文件作为工资数据的保存介质)。注:,其中实发工资=基本工资+补贴金额+奖励金额-扣除金额

2、应用文件保存工资管理数据。

3、新增:能将所有输入的员工工资数据保存到文件中,并可选择继续输入或退出。

4、查找:输入员工的员工号,并在文件中查找

 若找到,则显示该员工的工资详情  否则提示未找到。 无论查找成功否,应还可选择继续查找或退出。

5、删除:输入员工的员工号,并在文件中查找

 若找到,提示是否确定删除

 若选择是,则删除文件中该员工信息  若选择否,则取消, 否则提示无此员工信息

 无论查找成功否,应还可选择继续查找或退出。

6、修改:输入员工的员工号,并在文件中查找

 若找到,显示该员工的所有信息,并可进行输入。完成后将现输入的内容覆盖原内容保存到文件中。

 否则提示无此员工信息

 无论查找成功否,应还可选择继续查找或退出。

7、统计:分类汇总并输出所有员工的基本工资、补贴金额、奖励金额、扣除金额、实发工资的总金额和平均金额。如:

基本工资、补贴金额、奖励金额、扣除金额、实发工资

总和 12000 1300 1400 1500 13200 平均 1200 130 140 150 1320 人数: 10

8、退出:退出程序

课题4:自动售货机系统

某公司请你为其生产的自动售货机编写软件。这种无人值守自动售货机贩卖价值为A、B、C的三种商品,价格分别为2元,3元和6元。顾客投入10元的纸币,然后选择购买3种商品之一,自动售货机吐出商品,并且找给用户零钱。如果商品已经卖完,或者无法找零,则给出用户一个提示,商品已售完,并且退还纸币。

自然,你的售货机用户希望尽可能地给用户找零,以免流失顾客。为了调查用户的喜好,希望得到三种商品的每日消费数据,由此来调整货柜中三种货物的存贮量。你的程序将实现以下功能:

库存查询:检索当前三种商品的储存量 商品上架:为三种商品增加或者减少储量

销售查询:分别统计今天每种商品的销售量和销售额 会计查询:打印当天的往来帐目以及剩余零钞数目

结算功能:取出今天所有的10元纸币,并且分别设置零钞的数目

销售界面:顾客投入纸币,选择商品,获得商品和零钱;或者直接显示错误并退还纸币 【题目要求】

(1)为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后操作员通过菜单项选择希望进行的操作项目;

(2)你的售货机用户不希望每一位顾客都有权限执行以上功能,因此一旦进入销售界面,就不应当退回到系统界面,但是应允许顾客反复购买,前一个顾客购买完毕后应停留在销售界面里允许下一个顾客操作。直到某位特殊的顾客(超级顾客)输入特殊的商品代号(密码)方可回到主控界面。

(3)计算机安排的找零算法应该合理,不要出现某一种零钱找光的情况。同时顾客也不喜欢 明明有5元零钞,却被找给5个一元的零钞。尽量满足这两个要求。

(3)、要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上所有结果保存在文件goods.txt。

【输入/输出要求】

(1)应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。进入每个操作后,根据程序的提示输入相应的信息;

(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。

根据题目要求,运用所学知识,完成设计和实现工作,并按照书写规范,撰写课程设计报告。

课题5:销售管理系统

某公司有四个销售员(编号:1-4),负责销售五种产品(编号:1-5)。每个销售员都将当天出售的每种产品各写一张便条交上来。每张便条包含内容:

1)销售员的代号

2)产品的代号

3)这种产品的当天的销售额

每位销售员每天可能上缴0-5张便条。假设,收集到了上个月的所有便条,编写一个处理系统,读取上个月的销售情况(在磁盘上创建一个txt文件记录上个月的销售信息),进行如下处理。

1)计算上个月每个人每种产品的销售额。

2)按销售额对销售员进行排序,输出排序结果(销售员代号)

3)统计每种产品的总销售额,对这些产品按从高到底的顺序,输出排序结果(需输出产品的代号和销售额)

4)输出统计报表

销售统计报表

产品代号

销售之和 销售员号 1 2 3 4 5 每种产品之和 总和

5)可以按产品代号查询,也可以按销售员号查询。

课题6: 车票管理系统一车站每天有n个发车班次,每个班次都有一班次号(1、2、3„n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。如

班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数 1 8:00 郫县 广汉 2 45 30 2 6:30 郫县 成都 0.5 40 40 3 7:00 郫县 成都 0.5 40 20 4 10:00 郫县 成都 0.5 40 2 „

(一)功能要求:用c语言设计一系统,能提供下列服务:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。

(3)查询路线:可按班次号查询 ,可按终点站查询(4)售票和退票功能

A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数

B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数

课题

7、单项选择题标准化考试系统

在磁盘上创建一个test.txt文件,使用记事本打开后先写入40道单选题和相应的选项和正确答案。再编写一个单项选择题标准化考试系统,该系统功能要求: 字段:题干,备选答案,标准答案

A、用文件保存试题库。(每个试题包括题干、4个备选答案、标准答案)。B、试题录入、修改和删除。

C、试题抽取:每次从试题库中可以随机抽出N道题(N由键盘输入)。D、考生答题:用户抽取N道试题进行答题,键盘输入每道题的答案。

E、自动判卷:系统可根据用户答案与标准答案的对比实现判卷并给出成绩。

系统操作过程中能够正确读取和更新试题文件,并进行正常的试题管理、抽取、答题和判卷操作,该过程在控制台中显示,人机交互方便。

课题8:医院门诊候诊的队列管理程序

要求采用先来先就诊的排队方式(就诊顺序与挂号单编号无关),假设挂号时编码是连续的,但由于同一个门诊科目有3个诊室,其中35(含35)岁以上的在第一诊室,35岁以下男患者进第二诊室,其它的进第三诊室,程序启动后显示下列菜单:

字段:挂号单号,患者姓名,年龄,性别,分诊室号,【实现提示】 1--挂号 2--叫号 3--分诊室

4--显示各诊室队列信息

5--统计当天就诊的患者情况(要求按性别进行统计和按任意年龄区段进行统计)6--结束程序

选1时,提示用户在一行内输入姓名及挂号单编号;

选2时,显示排在队列中第一位患者姓名、挂号单编号,并将其从挂号序列中删除 选3时,进行诊室分配

选4时,按队列顺序显示个诊室排队人的姓名、挂号单编号及所在诊室 选5时,进行两种统计方法的选择,并进行必要的统计计算 选6时,退出程序的运行

要求1~5中每一个步骤完成后都能重新显示此选择菜单

课题9:成绩管理系统

现有学生成绩信息,内容如下

姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 „.......„

请用C语言编写一系统,实现学生信息管理,软件的功能要求如下:(1)信息维护:

要求:学生信息数据要以文件的形式保存,能实现学生信息数据的维护。此模块包括子模块有:增加学生信息、删除学生信息、修改学生信息(2)信息查询:

要求:查询时可实现按姓名查询、按学号查询(3)成绩统计:

要求:A输入任意的一个课程名(如数学)和一个分数段(如60--70),统计出在此分数段的学生情况。

(4)排序:能对用户指定的任意课程名,按成绩升序或降序排列学生数据并显示排序结果

课题10:停车场管理系统设计

1.有一个两层的停车场, 每层有6个车位, 当第一层车停满后才允许使用第二层.(停车场可用一个二维数组实现, 每个数组元素存放一个车牌号)每辆车的信息包括车牌号, 层号, 车位号, 停车时间共4项.其中停车时间按分钟计算

2.假设停车场初始状态为第一层已经停有4辆车, 其车位号依次为1—4 , 停车时间依次为20, 15, 10 , 5.即先将这四辆车的信息存入文件”car.dat”中(数组的对应元素也要进行赋值)3.停车操作: 当一辆车进入停车场时, 先输入其车牌号, 再为它分配一个层号和一个车位号(分配前先查询车位的使用情况, 如果第一层有空则必须停在第一层), 停车时间设为5 , 最后将新停入的汽车的信息添加文件”car.dat”中, 并将在此之前的所有车的停车时间加5.4.收费管理(取车): 当有车离开时, 输入其车牌号, 先按其停车时间计算费用, 每5分钟0.2元.(停车费用可设置一个变量进行保存), 同时从文件”car.dat”中删除该车的信息, 并将该车对应的车位设置为可使用状态(即二维数组对应元素清零).按用户的选择来判断是否要输出停车收费的总计.5.输出停车场中全部车辆的信息.6.退出系统.字段:车牌号,楼层号,车位号,入库时间,出库时间,停车时间,停车费用

第二部分:基础训练

若感觉直接完成所选课题很困难,可以尝试先完成基础训练。完成基础训练,有一定的编程基础后,在完成所选课题。

第一步: 定义一个结构体类型,用来表示学生的各种属性。定义一个学生结构体变量,从键盘输入各个分量的值,然后从屏幕输出该结构体变量的各个分量。学生结构体类型定义如下:

typedef struct _CStudent { char szName[20];/* 学生姓名 */ char nNumber[10] /* 学号 */ int nAge;/* 年龄 */ char cSex;/* 性别,约定 „m‟ 代表女,„f‟代表男 */ char szAddress[20];/* 家庭地址 */ double dDataStruct;/* 数据结构成绩 */ double dMath;/* 数学成绩 */ double dEnglish;/* 英语成绩 */ }CStudent;

第二步:

定义一个结构体类型,用来表示学生的各种属性。定义一个含3个元素的学生结构体变量数组,从键盘输入3个同学的信息,然后从屏幕输出该结构体变量数组各成员的值。

建议:定义两个函数,一个用于从键盘输入一个学生结构体变量的各个分量的值,另一个把一个学生结构体变量的值输出到屏幕。函数原型可以如下:

void input(CStudent* p)/* 从键盘输入 */ void output(CStudent* p)/* 向屏幕输出 */

第三步:

从键盘输入一个学生的信息,然后以文本方式写入文件。定义另一个学生结构体变量,用于从文件读出数据,然后把数据显示到屏幕。

第四步:

定义一个含3个元素的学生结构体数组,从键盘输入3个同学的信息,以文本方式把这些数据写入文件。

第五步:

将课题4写入文件的数据全部读出,输出到屏幕。

附录一:

本设计中需要清屏。说明如下:

格式:

system(“cls”)包含头文件: stdlib.h

附录二:控制台程序选择菜单的完成

#include #include

int main(){ int choice1 = 1, choice2;

do {

printf(“欢迎使用学生成绩管理系统n”);

printf(“请选择程序功能n”);

printf(“

1、数据录入n”);

printf(“

2、数据查询n”);

printf(“

3、输出所有同学信息n”);

printf(“

4、退出程序n”);

scanf(“%d”, &choice1);

switch(choice1)

{

case 1:

printf(“数据录入n”);

/*编写数据录入程序*/

printf(“返回上级菜单请按n退出程序请按n”);

scanf(“%d”, &choice1);

break;

case 2:

printf(“

1、按学号查询n”);

printf(“

2、按姓名查询n”);

scanf(“%d”, &choice2);

switch(choice2)

{

case 1:

printf(“按学号查询n”);

/*编写按学号查询程序*/

break;

case 2:

printf(“按姓名查询n”);

/*编写按姓名查询程序*/

break;

}

printf(“返回上级菜单请按n退出程序请按n”);

scanf(“%d”, &choice1);

break;

case 3:

printf(“输出所有同学信息n”);

/*编写输出所有同学信息程序*/

printf(“返回上级菜单请按n退出程序请按n”);

scanf(“%d”, &choice1);

break;

case 4:

break;

}

system(“cls”);}while(choice1!= 4);

printf(“程序结束n”);return 0;}

附录三:关于菜单的处理技术举例 #include #include

int menu_select();/*主菜单函数*/ /******主函数开始*******/ main(){ int i;Salary sal[M];/*定义结构体数组*/ int length;/*保存记录长度*/ clrscr();/*清屏*/ for(;;)/*无限循环*/ { switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/ { case 1:length=enter(sal);break;/*输入记录*/ case 2:list(sal);break;/*显示全部记录*/ case 3:search(sal,name);break;/*按姓名查找显示记录*/ case 4:length=delete(sal);break;/*删除记录*/ case 5:length=add(sal);break;/*插入记录*/ case 6:save(sal);break;/*保存文件*/ case 7:length=load(sal);break;/*读文件*/ case 8:display(sal);break;/*按序号查找显示记录*/ case 9:sort(sal);break;/*排序成新文件*/ case 10:copy(sal);break;/*数据备份*/ case 0:exit(0);/*如返回值为0则程序结束*/ } } } /*菜单函数,函数返回值为整数,代表所选的菜单项*/ menu_select(){ char s[80];int c;gotoxy(1,25);/*将光标定为在第25行,第1列*/ printf(“press any key enter menu......n”);/*提示按任意键进入菜单选择*/ getch();/*读入任意字符*/ clrscr();/*清屏*/ gotoxy(1,1);printf(“********************MENU*********************nn”);printf(“ 1.Enter a recordn”);printf(“ 2.List the filen”);printf(“ 3.Search record on namen”);printf(“ 4.Delete a recordn”);printf(“ 5.Add record n”);printf(“ 6.Save the filen”);printf(“ 7.Load the filen”);printf(“ 8.Display record on ordern”);printf(“ 9.Sort to a new filen”);printf(“ 10.Copy to a new file n”);printf(“ 0.Quitn”);printf(“***********************************************n”);do{ printf(“n Enter you choice(0~10):”);/*提示输入选项*/ scanf(“%d”,&c);/*输入选择项*/ }while((c>10)||(c<0));/*选择项不在0~11之间重输*/ return c;/*返回选择项,主程序根据该数调用相应的函数*/ }

附录四:关于头文件的使用

/******头文件(.h)***********/ #include “stdio.h” /*I/O函数*/ #include “stdlib.h” /*标准库函数*/ #include “string.h”/*字符串函数*/ #include “ctype.h” /*字符操作函数*/ #define M 50 /*定义常数表示记录数*/ typedef struct /*定义数据结构*/ { char name[20];/*姓名*/ char no[10];/*员工编号*/ char units[30];/*部门*/ char post[10];/*职称*/ „„ }Salary;/******以下是函数原型*******/ int enter(SALARY t[]);/*输入记录*/ void list(SALARY t[]);/*显示全部记录*/ void search(SALARY t[],char name[]);/*按姓名查找显示记录*/ int delete(SALARY t[]);/*删除记录*/ int add(SALARY t[],int n);/*插入记录*/ void save(SALARY t[]);/*记录保存为文件*/ int load(SALARY t[]);/*从文件中读记录*/ void display(SALARY t[]);/*按序号查找显示记录*/ void sort(SALARY t[]);/*排序成新文件*/ void copy(SALARY t[]);/*数据备份*/ int menu_select();/*主菜单函数*/

附录五:关于文件的使用

要将信息永久保存,可采用磁盘文件的形式来存储数据。C语言提供了丰富的文件操作函数。从文件编码的方式来看,文件可分为ASCII码文件和二进制码文件两种。ASCII文件也称为文本文件,这种文件在磁盘中存放时每个字符对应一个字节,用于存放对应的ASCII码。例如,数5678的存储形式为:

ASC码:00110101 00110110 00110111 00111000

十进制码: 5 共占用4个字节。ASCII码文件可在屏幕上按字符显示,例如源程序文件就是ASCII文件,用DOS命令TYPE可显示文件的内容。由于是按字符显示,因此能读懂文件内容。

二进制文件是按二进制的编码方式来存放文件的。例如,数5678的存储形式为: 00010110 00101110只占二个字节。二进制文件虽然也可在屏幕上显示,但其内容无法读懂。C系统在处理这些文件时,并不区分类型,都看成是字符流,按字节进行处理。输入输出字符流的开始和结束只由程序控制而不受物理符号(如回车符)的控制。因此也把这种文件称作“流式文件”。在C语言中,文件操作都是由库函数来完成的。

文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式)其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如: FILE *fp;fp=(“file a”,“r”);其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。

又如:FILE *fphzk;fphzk=(“c:hzk16',”rb“)其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“ ”中的第一个表示转义字符,第二个表示根目录。使用文件的方式共有12种,下面给出了它们的符号和意义。

文件使用方式

意 义

“rt”

只读打开一个文本文件,只允许读数据 “wt”

只写打开或建立一个文本文件,只允许写数据 “at”

追加打开一个文本文件,并在文件末尾写数据 “rb”

只读打开一个二进制文件,只允许读数据 “wb”

只写打开或建立一个二进制文件,只允许写数据 “ab”

追加打开一个二进制文件,并在文件末尾写数据 “rt+”

读写打开一个文本文件,允许读和写 “wt+”

读写打开或建立一个文本文件,允许读写

“at+”

读写打开一个文本文件,允许读,或在文件末追加数据 “rb+”

读写打开一个二进制文件,允许读和写 “wb+”

读写打开或建立一个二进制文件,允许读和写

“ab+”

读写打开一个二进制文件,允许读,或在文件末追加数据

fclose函数

调用的一般形式是: fclose(文件指针); 例如:fclose(fp);正常完成关闭文件操作时,fclose函数返回值为0。如返回非零值则表示有错误发生。文件的读写对文件的读和写是最常用的文件操作。

读字符串函数fgets函数

fgets函数的功能是从指定的文件中读一个字符串到字符数组中,函数调用的形式为: fgets(字符数组名,n,文件指针); 其中的n是一个正整数。表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志''。例如:fgets(str,n,fp);的意义是从fp所指的文件中读出n-1个字符送入字符数组str中。

对fgets函数有两点说明:一是,在读出n-1个字符之前,如遇到了换行符或EOF,则读出结束。二是,fgets函数也有返回值,其返回值是字符数组的首地址。

写字符串函数fputs fputs函数的功能是向指定的文件写入一个字符串,其调用形式为: fputs(字符串,文件指针)其中字符串可以是字符串常量,也可以是字符数组名,或指针 变量,例如:fputs(“abcd“,fp);其意义是把字符串“abcd”写入fp所指的文件之中。

数据块读写函数fread和fwrite C语言还提供了用于整块数据的读写函数。可用来读写一组数据,如一个数组元素,一个结构变量的值等。读数据块函数调用的一般形式为: fread(buffer,size,count,fp);写数据块函数调用的一般形式为: fwrite(buffer,size,count,fp);其中buffer是一个指针,在fread函数中,它表示存放输入数据的首地址。在fwrite函数中,它表示存放输出数据的首地址。size 表示数据块的字节数。count 表示要读写的数据块块数。fp 表示文件指针。

例如:fread(fa,4,5,fp);其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实数组fa中,连续读5次,即读5个实数到fa中。

从键盘输入两个学生数据,写入一个文件中,再读出这两个学生的数据显示在屏幕上。#include struct stu{ char name[10];int num;int age;char addr[15];}boya[2],boyb[2],*pp,*qq;main(){ FILE *fp;char ch;int i;pp=boya;qq=boyb;if((fp=fopen(”stu_list“,”wb+“))== NULL){ printf(”Cannot open file strike any key exit!“);

本例程序定义了一个结构stu,说明了两个结构数组boya和 boyb以及两个结构指针变量pp和qq。pp指向boya,qq指向boyb。程序第16行以读写方式打开二进制文件“stu_list”,输入二个学生数据之后,写入该文件中,然后把文件内部位置指针移到文件首,读出两块学生数据后,在屏幕上显示。

getch();exit(1);}

printf(”ninput datan“);for(i=0;i<2;i++,pp++)scanf(”%s%d%d%s“,pp->name,&pp->num,&pp->age,pp->addr);pp=boya;

fwrite(pp,sizeof(struct stu),2,fp);rewind(fp);

fread(qq,sizeof(struct stu),2,fp);printf(”nnnametnumber age addrn“);for(i=0;i<2;i++,qq++)

printf(”%st%5d%7d%sn“,qq->name,qq->num,qq->age,qq->addr);

fclose(fp);}

格式化读写函数fscanf和fprintf fscanf函数,fprintf函数与前面使用的scanf和printf 函数的功能相似,都是格式化读写函数。两者的区别在于 fscanf 函数和fprintf函数的读写对象不是键盘和显示器,而是磁盘文件。这两个函数的调用格式为: fscanf(文件指针,格式字符串,输入表列); fprintf(文件指针,格式字符串,输出表列); 例如:fscanf(fp,”%d%s“,&i,s);fprintf(fp,”%d%c",j,ch);

文件的随机读写

前面介绍的对文件的读写方式都是顺序读写,即读写文件只能从头开始,顺序读写各个数据。但在实际问题中常要求只读写文件中某一指定的部分。为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个,即 rewind 函数和fseek函数。

rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。

fseek函数。

fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。“位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。

起始点

表示符号

数字表示

────────────────────────── 文件首

SEEK—SET

0 当前位置

SEEK—CUR

文件末尾

SEEK—END

例如:fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后,即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。

文件检测函数

文件结束检测函数feof函数调用格式: feof(文件指针);功能:判断文件是否处于文件结束位置,如文件结束,则返回值为1,否则为0。

读写文件出错检测函数ferror函数调用格式: ferror(文件指针); 功能:检查文件在用各种输入输出函数进行读写时是否出错。如ferror返回值为0表示未出错,否则表示有错。

文件出错标志和文件结束标志置0函数clearerr函数调用格式: clearerr(文件指针);功能:本函数用于清除出错标志和文件结束标志,使它们为0值。

下载语言程序设计实验指导书(2009年8月版)(5篇)word格式文档
下载语言程序设计实验指导书(2009年8月版)(5篇).doc
将本文档下载到自己电脑,方便修改和收藏,请勿使用迅雷等下载。
点此处下载文档

文档为doc格式


声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:645879355@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。

相关范文推荐

    《Java语言程序设计》课程设计指导书

    《Java语言程序设计》课程设计指导书 一、教学目标 《Java语言程序设计》是计算机类专业和信息安全专业的专业课。Java语言是目前广为流行的面向对象程序设计语言,适用于网络......

    《Java程序设计》课程实验指导书[五篇模版]

    ... 《Java程序设计》课程实验指导书 合肥学院计算机系 1 实验一 Java开发环境的安装与配置,熟悉Java程序结构 一、实验目的: 1. 掌握JDK的安装步骤。 2. 理解环境变量PA......

    《Web应用程序设计实验》实验指导书-实验八

    实验八Servlet技术的应用 一、实验目的 (1)、掌握怎样编写和使用Servlet。 (2)、掌握编写和配置和Servlet有关的web.xml文件。 (3)、掌握在Servlet中使用session的方法;熟悉把用户......

    C语言程序设计实验四(本站推荐)

    C语言程序设计实验(四)[实验1] scanf、printf函数的使用。 1.实验题目 输入1个学生学号和4门课程成绩,输出这个学生的学号、4门课程成绩和平均成绩。 2.实验要求 (1)按表格的形......

    C语言程序设计实验安排

    C语言实验指导 实验一 顺序结构程序设计(2学时) 一、实验目的熟悉在VC运行环境下,编辑调试C语言程序的一般步骤。掌握顺序结构程序设计的基本思想和基本方法。二、实验要求1. 仔......

    《C语言程序设计》实验四

    电子科技大学 计算机 学院 标 准 实 验 报 告 (实验)课程名称C语言程序设计 电子科技大学教务处制表电 子 科 技 大 学 实 验 报 告四 学生姓名:学 号:指导教师:刘 勇 实验地点:......

    《C语言程序设计》实验四

    电子科技大学 计算机 学院 标 准 实 验 报 告 (实验)课程名称C语言程序设计 电子科技大学教务处制表电 子 科 技 大 学 实 验 报 告四 学生姓名:学 号:指导教师:王瑞锦 实验地点......

    C语言程序设计实验二

    C语言程序设计实验(二)[实验1] 1.实验题目 下列各题的算法用传统流程图及N-S流程图两种方式表示: (1)输出图形(顺序结构) ★★★★★★★★ ★★★★★★★★ ★★★★★★★★ ★★......