设计一个银行管理系统,实现开户,存钱,转账,取钱等功能。客户端选择业务,填写对应业务信息,把信息发送给服务器对应进程,等待服务器相应。服务器创建消息队列,打开服务器相关进程(开户存钱等),等待关闭,关闭服务器的同时关闭服务器相关进程,删除消息队列。本系统基于消息队列实现进程间的通信。
要求:


客户端的主函数初始化消息队列,用户选择进行开户,存钱等操作,然后通过switch语句跳转到相关函数。函数调用结束后回到while(1),等待下一条指令。

服务器端主要是Vfork创建子进程,然后子进程通过调用execl函数来打开开户转账进程等,打开后阻塞等待,知道服务器端退出,退出时会通过atexit函数调用kill函数通过进程pid来关闭之前打开的子进程,也就是开户转账等进程。

本程序主要需要两个消息队列,消息队列msgid_c和消息队列msgid_s,客户端发消息,通过msgid_s收消息通过msgid_s,服务器端收消息,通过msgid_s发消息,通过msgid_c,两个消息队列相互配合,循环收发。

用户进入开户(account)进程后,通过scanf()来获取开户的相关用户信息,然后通过消息队列发送给服务器端消息,消息类型为1。服务器端开户进程打开后循环阻塞,直到接收到消息类型为1的消息队列,然后进行处理。首先,改变当前目录,进入存放用户信息的文件夹下,然后创建一个文件用来保存用户信息,如果创建失败,则将开户失败,账户已存在的消息发送回客户端,如果创建成功,则将开户成功的消息发送给客户端,并把用户信息写入打开的文件中(要求:用文件保存用户信息,一个文件代表一个用户)。
服务器端:

客户端:

用户进入存钱(save)页面后,通过scanf获取用户信息及存钱数目,然后通过消息队列发送给服务器端,消息类型为2。服务器端存钱进程打开后,循环阻塞。直到接收到消息类型为2的消息队列,然后进行处理,首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断密码和用户名是否正确,错误将错误信息发回客户端,正确则存钱操作,并将存钱成功的消息发送给客户端,把存钱后的用户信息写入打开的文件中。
服务器端:

客户端:

用户进入取钱页面后,通过scanf获取用户信息及取钱数目,然后通过消息队列发送给服务器端,消息类型为3。服务器端取钱进程打开后,循环阻塞。直到接收到消息类型为3的消息队列,然后进行处理,首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断密码和用户名是否正确,错误将错误信息发回客户端,正确则取钱操作,并将取钱成功的消息发送给客户端,把取钱后的用户信息写入打开的文件中。
用户进入转账页面后,通过scanf获取用户信息,转账用户信息及转账数目,然后通过消息队列发送给服务器端,消息类型为4。服务器端转账进程打开后,循环阻塞。直到接收到消息类型为4的消息队列,然后进行处理,首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断密码和用户名是否正确,错误将错误信息发回客户端,正确打开保存转账用户信息的文件,文件名为转账用户账号,如果没有这个文件,打开失败,将转账账户不存在的消息发送回客户端,如果打开成功,则继续判断用户名是否正确,错误将错误信息发回客户端,正确则进行转账操作,并将转账成功的消息发送给客户端,把转账后的用户信息依次写入打开的文件中。
用户进入查询页面后,通过scanf获取用户信息,然后通过消息队列发送给服务器端,消息类型为5。服务器端查询进程打开后,循环阻塞。直到接收到消息类型为5的消息队列,然后进行处理,首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断密码和用户名是否正确,错误将错误信息发回客户端,正确则查询操作,并将查询成功的消息发送给客户端,把查询后到的用户信息输出到终端页面中。
用户进入修改密码页面后,通过scanf获取用户信息及新密码,然后通过消息队列发送给服务器端,消息类型为6。服务器端修改密码进程打开后,循环阻塞。直到接收到消息类型为6的消息队列,然后进行处理。首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断密码和用户名是否正确,错误将错误信息发回客户端,正确则进行修改密码操作,将验证正确的消息发送给客户端,然后客户端接收到验证正确的信息后,把新密码消息队列发送给服务器端修改密码进程,服务器端接收到新密码把后把包含新密码用户信息写入打开的文件中。
用户进入冻结页面后,通过scanf获取用户信息姓名账号,然后通过消息队列发送给服务器端,消息类型为7。服务器端冻结进程打开后,循环阻塞。直到接收到消息类型为7的消息队列,然后进行处理,首先,改变当前目录,进入存放用户信息的文件夹下,然后打开保存用户信息的文件,文件名为用户账号,如果没有这个文件,打开失败,将账户不存在的消息发送回客户端,如果打开成功,则继续判断用户名是否正确,错误将错误信息发回客户端,正确则冻结操作,修改文件权限仅可读。并将冻结成功的消息发送给客户端。
makefile还有待改进,需要每个进程生成一个可执行文件,还在思考。

基于消息队列的银行管理操作系统设计
该文章描述了一个银行管理系统的实现,使用消息队列进行进程间通信,支持开户、存取款、转账等功能。客户端通过选择业务发送请求,服务器通过Vfork和execl创建子进程处理请求,如开户时创建用户文件,存取款时更新账户信息。系统依赖文件系统存储用户数据,并通过特定消息类型协调客户端和服务器的交互。
1059

被折叠的 条评论
为什么被折叠?



