系统工作原理文档格式.docx
- 文档编号:15951624
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:30
- 大小:23.26KB
系统工作原理文档格式.docx
《系统工作原理文档格式.docx》由会员分享,可在线阅读,更多相关《系统工作原理文档格式.docx(30页珍藏版)》请在冰豆网上搜索。
从课程设计要求来看,要求建立一个月工资帐目表,看起来好象很简单似的,我们再仔细看看就可以知道,一个工资查询客服端软件,要求用户可以存储他自己的有效资料,其中当然要包括任务书说要求的姓名、月上班时间、小时工资率以及自动算出的月工资。
当然存了还要求可以通过提示用户输入他的名字可以找到以上用户所存储的信息;
另外我们的客服有的时候只想计算一下一个月他可以赚多少,于是我们也设计了一个可以输入时间和工资率而自动计算出月工资的乘法程序;
当然他查询完了或者是不想查了,那么也没关系,他只要按几个键就可以结束这他认为不爽的事。
我们来看看基本原理是怎么回事,首先调用DOS从键盘输入字符串的功能,DOS系统调用INT21H提供了字符及字符串的输入/输出功能。
其中从键盘读入一个字符串的功能号为0AH,功能是从键盘读工资账目表由一个我们对磁盘操作而产生的TXT格式的文件所存放,其中包括人名、工作时间、月工资率、入一个字符串,DS:
DX存入所指的缓冲区。
月工资数。
从键盘依次输入人名、工作时间、月工资率,并依次存放到数据段,另外为月工资数留出存储单元,然后进入选择菜单:
根据人名查找信息、根据输入的时间和工资率计算月工资、退出系统;
从键盘输入要查询人的姓名,通过搜索姓名模块对每个列表的人名存储单元进行访问,依次比较人名的每个字符,当出现有不同的字符就转向下一个列表进行比较,依次类推直到找到要查询的人为止,如果没有此人则显示是否新建一个信息列表,根据提示输入项目输入数据,系统自动调用计算模块得出月工资并写入文件列表;
询问是否继续查询,需要继续就跳转输入人名,不需要就跳转选择菜单。
若你选择的是计算工资,那么调用显示模块,根据提示输入时间和工资率后,调用乘法程序自动计算得出月工资并显示在屏幕上,还询问是否继续计算,是呢,就再接着计算,否则跳转选择菜单。
由于从键盘输入的工资率和工作时间都是其对应的ASCII码,要进行计算必须将其转换为二进制数,计算完工资后将结果存放到缓冲区待处理。
由于计算出的总工资不是其对应的ASCII码,故在显示器上显示之前要将其转换为对应的ASCII码。
最后调用DOS功能显示要查询人的姓名、工作时间、工资率及工资数。
DOS系统调用INT21H提供了字符及字符串的输入/输出功能。
其中在显示器上显示一个字符串的功能号为09H,功能是在当前光标位置,显示由DS:
DX所指的以’$’结尾字符串,并且光标右移。
其中’$’不算在显示的字符串之内。
二、总体设计:
从上面的说法来看,我们更容易了解到我们所需要的模块,为了程序的结构化,我们把除了主程序以外的所有可以单独实现功能的模块设计成子程序,这也更方便程序之间的调用。
从逻辑上来看我们需要显示模块、输入模块、二进制转ASCII码模块、ASCII码转二进制模我们块、查找模块、退出模块、清屏模块、回车换行模块、计算模块等等,我们还要将这近10个模块统一协调才可以发挥整个系统的功能。
三、程序设计:
1.主程序流程图设计
运行程序,进入选择菜单;
它有三项可供选择:
1。
输入名字并查询;
2。
输入时间和工资率计算得到月工资;
3。
退出系统。
1,当你输入人名后系统自动查找并给出结果,有就显示出来,没有就提示新建一个。
新建的可以保存在列表中。
否则回到选择菜单或继续输入查询;
2,计算也和查找一样,自动计算给出结果,继续查询就再输入时间和工资率,否则回到选择菜单;
3,当完成上面的两项或不想再做事了,那么就可通过选择退出功能合理退出系统。
系统流程图如下:
2.各子程序以及其流程图设计:
1)建立工资账目表:
本课题要求建立一个单位的工资账目表,工资账目表由一个用文件操作命令建的TXT格式文件存放,其中包括人名、工作时间、工资率、月工资数。
我们首先定义了一个1000字节的空间,然后用类型定义为指令label划分为4段:
姓名存储区、时间存储区、工资率存储区、月工资存储区,它们有相同的段属性和偏移量。
只要输入label下面的变量名称就可以找到相应的数据。
可以从下面的程序看到,一个完整的信息一共长42个字节,其中包括一个回车符号。
定义存储区的程序段如下:
data_segsegment
countdw?
tel_listdb'
1.Iwanttosearchname:
'
'
2.Iwanttogetthewage:
3.Iwanttoexit:
$'
filedb'
e:
\masm\l.txt'
0;
创建文件的文件名
handledw?
;
保存文件号
tel_tabdb1000dup(?
)
nameitemlabelbyte;
姓名参数菜单
nmaxdb20;
缓冲区长度
ncurlendb?
保留单元,存放输入的实际字符个数
innamedb20dup(?
);
定义20个字节存储空间
;
___________________________________________________
hrsparlabelbyte;
时间参数菜单
maxhlendb7
acthlendb?
hrsflddb7dup(?
rateparlabelbyte;
工资率参数菜单
maxrlendb7
actrlendb?
rateflddb7dup(?
;
____________________________________________________
wageeitemlabelbyte;
月工资参数菜单
wmaxdb8
wcurlendb?
inwagedb8dup(?
我们已经定义了数据存放区,现在就可以对他进行访问,写入数据程序如下:
movah,3dh;
打开目标文件,用于写文件
moval,1
leadx,file
int21h
jncnt3
nt3:
movhandle,ax;
保存目标文件的文件代号
movah,42h;
移动目标文件指针为尾指针
movbx,handle
moval,2
movdx,0
movcx,0
movah,40h;
将inname缓冲区的内容写入文件
movcx,20
leadx,inname
callcrlf
leadx,messge6
movah,09h
callinput_time
将hrsfld缓冲区的内容写入文件
movcx,7
leadx,hrsfld
CALLCRLF
leadx,messge7
callinput_rate
将ratefld缓冲区的内容写入文件
leadx,ratefld
calld10hour;
时间转换成二进制
calle10rate;
工作率转换成二进制
callf10mult;
计算出二进制工作数
callg10wage;
将二进制工作数转换成ASSC11码
callk10disp;
显示工作数
将inwage缓冲区的内容写入文件
movcx,8
movdl,[si]
movdh,[si]+1
movinwage,dx
movdx,[si]+2
movinwage+2,dx
movdx,[si]+3
movinwage+3,dx
leadx,inwage
其流程图如下:
2)输入模块:
将缓冲区的地址送给DX,然后调用INT21的0AH功能号,等待从键盘上输入字符串。
具体实例请看程序清单,流程图如下:
3)二进制与ASCII码的相互转换模块:
我调用计算模块时,需要把ASCII码转化成二进制数计算,当计算完了,还要把二进制码转换成ASCII码从显示器上输出,程序如下:
二进制转换成ASC11码
g10wageprocnear
movnodec,0
leasi,ascwage+13
movbyteptr[si],'
'
addsi,nodec
g30:
cmpbyteptr[si],'
jneg35
decsi
g35:
cmpdx,0
jnzg40
cm
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 系统 工作 原理