【UML】用例图、活动图、类图、顺序图练习题

时间:2022-10-07 17:59:14

一、问题一

“远程网络教学系统”的功能需求如下:学生登录网站后,可以浏览课件、查找课件、下载课件、观看教学视频。教师登录网站后,可以上传课件、上传教学视频、发布教学心得、查看教学心得、修改教学心得。系统管理员负责对网站页面的维护、审核不合法课件和不合法教学信息、批准用户注册。

1、学生需要登录“远程网络教学系统”后才能正常使用该系统的所有功能。如果忘记密码,可与通过“找回密码”功能恢复密码。请画出学生参与者的用例图。 【UML】用例图、活动图、类图、顺序图练习题 2、教师如果忘记密码,可以通过“找回密码”功能找回密码。请画出教师参与者的用例图。 【UML】用例图、活动图、类图、顺序图练习题

二、问题二

设计开发一个新闻发布系统。

假设管理员可以在后台对新闻、评论、注册会员进行管理,并发布新闻;任何游客可以浏览新闻,浏览者注册后可以成为系统会员;注册会员可以发表新闻评论。新闻信息实体的主要属性主要包含标题(title)、内容(content)、发布日期(DateTime),主要操作有添加新闻(Addnews)、删除新闻(Delnews)、修改新闻(Modinews); 评论实体的主要属性包含新闻标识(ArticleID)、评论者名(UserName)和评论内容(body),主要操作有添加评论(AddRemark)、删除评论(DelRemark); 会员实体的主要属性有会员编号(MemberNo)、会员密码(Memberpsw)、会员名字(MemberName)、会员描述等,主要操作有登陆(Login);管理员实体的主要属性有管理员编号(AdmNo)、会员密码(Admpsw)、会员名字(AdmName)等, 主要操作有添加用户(Adduser)、删除新闻(Deluser)。

请完成下列工作:

(1)画出系统用例图 【UML】用例图、活动图、类图、顺序图练习题 (2)画出“新闻管理”的活动图 【UML】用例图、活动图、类图、顺序图练习题 (3)画出分析类图和初步的设计类图 【UML】用例图、活动图、类图、顺序图练习题

三、问题三

设计一款基于贷款支付额度的GUI简单应用程序。然后根据你的GUI程序画出类图。建议用最简单的tkinter来编写。 程序效果展示: 【UML】用例图、活动图、类图、顺序图练习题

【UML】用例图、活动图、类图、顺序图练习题

import tkinter
class App():
    def __init__(self):
        action = Action()
        windows = tkinter.Tk()
        windows.geometry('800x700')
        Label_title = tkinter.Label(windows,text="个人贷款计算器",font=('黑体',16), )
        Label_title.place(relx=0.4,rely=0.015)
        #输入数据区摆放
        self.frame_input = tkinter.LabelFrame(windows,text="输入数据", font=('黑体',14 )  ,labelanchor="n")
        self.frame_input.place( relx=0.05,rely=0.1,relwidth=0.9,relheight=0.4)
        self.Label_money = tkinter.Label(self.frame_input,text="贷款金额(元):",font=('黑体',10), )
        self.Label_money.place(relx=0.28,rely=0.12)
        self.Label_term = tkinter.Label( self.frame_input,text="贷款期限(年): ",font=('黑体',10))
        self.Label_term.place( relx=0.28,rely=0.32)
        self.Label_rate = tkinter.Label(self.frame_input,text="年利率(%):" ,font=('黑体',10))
        self.Label_rate.place( relx=0.28,rely=0.52)
        self.Entry_money = tkinter.Entry(self.frame_input , width=30)
        self.Entry_money.place( relx=0.42,rely=0.12)
        self.Entry_term = tkinter.Entry(self.frame_input,  width=30)
        self.Entry_term.place( relx=0.42,rely=0.32)
        self.Entry_rate = tkinter.Entry( self.frame_input,  width=30)
        self.Entry_rate.place( relx=0.42,rely=0.52)
        self.Button_count = tkinter.Button(self.frame_input , text='计算',command=action.show)
        self.Button_count.place( relx=0.45,rely=0.75)
        self.Button_count = tkinter.Button( self.frame_input , text='重置',command=action.cle)
        self.Button_count.place(relx=0.62,rely=0.75)
        #等额本息还款法结果区摆放
        self.frame_output = tkinter.LabelFrame(windows,text="等额本息还款法" ,font=('黑体',14),labelanchor="n")
        self.frame_output.place(relx=0.05,rely=0.55,relwidth=0.4,relheight=0.4 )
        self.Label_months_money = tkinter.Label(self. frame_output,text="每月还款(元):" ,font=('黑体',10))
        self.Label_months_money.place(relx=0.06,rely=0.16)
        self.Label_total_rates = tkinter.Label(self.frame_output,text="总支付利息(元): ",font=( '黑体',10))
        self.Label_total_rates.place(relx=0.06,rely=0.44)
        self.Label_total_money = tkinter.Label(self.frame_output,text="本息合计(元):" ,font=("黑体" ,10))
        self.Label_total_money.place( relx=0.06,rely=0.72)
        self.Text_months_money = tkinter.Text( self. frame_output ,   width=20,height=1)
        self.Text_months_money.place( relx=0.45,rely=0.16)
        self.Text_total_rates = tkinter.Text(self.frame_output ,  width=20,height=1)
        self.Text_total_rates.place( relx=0.45,rely=0.44)
        self.Text_total_money = tkinter. Text( self. frame_output,   width=20,height=1)
        self.Text_total_money.place( relx=0.45,rely=0.72)
        #等额本金还款法结果区摆放
        self.frame_output_Equalloan = tkinter.LabelFrame(windows,text="等额本金还款法" ,  font=("黑体",14),labelanchor="n")
        self.frame_output_Equalloan.place(relx=0.55,rely=0.55,relwidth=0.4,relheight=0.4)
        self.Label_months_money_Equalloan = tkinter.Label(self. frame_output_Equalloan,text="每月还款(元): ",font=('黑体',10), )
        self.Label_months_money_Equalloan.place(relx=0.06,rely=0.16)
        self.Label_total_rates_Equalloan = tkinter.Label(self.frame_output_Equalloan,text="总支付利息(元): ",font=('黑体',10), )
        self.Label_total_rates_Equalloan.place(relx=0.06,rely=0.44)
        self.Label_total_money_Equalloan = tkinter.Label( self. frame_output_Equalloan,text="本息合计(元): ",font=('黑体',10), )
        self.Label_total_money_Equalloan.place( relx=0.06,rely=0.72)
        self.Button_months_money_Equalloan = tkinter.Button( self.frame_output_Equalloan,text="点击查看" , command=action.revise)
        self.Button_months_money_Equalloan.place( relx=0.45,rely=0.15)
        self. Text_total_rates_Equalloan = tkinter.Text(self. frame_output_Equalloan,  width=20, height=1)
        self.Text_total_rates_Equalloan.place( relx=0.45,rely=0.44)
        self.Text_total_money_Equalloan = tkinter.Text(self. frame_output_Equalloan,  width=20,height=1)
        self.Text_total_money_Equalloan.place( relx=0.45,rely=0.72)
        windows.mainloop()
        
        
class Action():
    def __init__(self):
        return
    
    
    def count(self):
        self.Loan_money = int(self.Entry_money.get())   # 获取输入的贷款本金
        self.Loan_term = int(self.Entry_term.get())     # 获取输入的贷款年限
        self.Loan_rate = float(self.Entry_rate.get())   # 获取输入的贷款年利率
     
        self.Loan_term_month = self.Loan_term*12       # 把贷款年限的单位由年转换成月
        self.Loan_rate_month = self.Loan_rate/100/12   # 把年利率转换成月利率
     
    
        # 计算等额本息法每月还款金额
        self.repayment_months_money = self.Loan_money*self.Loan_rate_month*pow((1+self.Loan_rate_month),self.Loan_term_month)/(pow((1+self.Loan_rate_month),self.Loan_term_month)-1)
        self.repayment_months_money_2 = round(self.repayment_months_money,2)
        
        # 计算等额本息法总共要还的本息之和
        self.repayment_all_money = self.repayment_months_money_2 * self.Loan_term_month
        self.repayment_all_money_2 = round(self.repayment_all_money,2)
        
        # 计算等额本息法要还的利息
        self.repayment_rate_money = self.repayment_all_money - self.Loan_money
        self.repayment_rate_money_2 = round(self.repayment_rate_money,2)
        
        # 等额本金法每月需要还款本金:贷款本金÷还款月数
        self.money_month = self.Loan_money/self.Loan_term_month
        
    
    def show(self):
        self.count()
     
        # 把等额本息还款法的结果插入对应的Text组件
        self.Text_months_money.delete(1.0, "end") 
        self.Text_months_money.insert('end',self.repayment_months_money_2)
        self.Text_total_rates.delete(1.0, "end") 
        self.Text_total_rates.insert('end',self.repayment_rate_money_2)
        self.Text_total_money.delete(1.0, "end") 
        self.Text_total_money.insert('end',self.repayment_all_money_2)
     
        # 计算等额本金法还款本息之和和还款利息
        self.all_money_Equalloan = 0
        for i in range(self.Loan_term_month):
            self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
            self.repayment_months_money_2 = round(self.repayment_months_money,2)
            self.all_money_Equalloan += self.repayment_months_money_2
            self.all_money_Equalloan_2 = round(self.all_money_Equalloan,2)
        self.Loan_money_Equalloan = self.all_money_Equalloan_2 - self.Loan_money
        self.Loan_money_Equalloan_2 = round(self.Loan_money_Equalloan,2)
     
        # 把等额本金还款法的结果插入对应的Text组件
        self.Text_total_rates_Equalloan.delete(1.0, "end") 
        self.Text_total_rates_Equalloan.insert('end',self.Loan_money_Equalloan_2)
        self.Text_total_money_Equalloan.delete(1.0, "end") 
        self.Text_total_money_Equalloan.insert('end',self.all_money_Equalloan_2)
        
        
    def cle(self):
        self.Entry_money.delete(0,"end")
        self.Entry_term.delete(0,"end")
        self.Entry_rate.delete(0,"end") 
     
        self.Text_months_money.delete(1.0, "end") 
        self.Text_total_rates.delete(1.0, "end") 
        self.Text_total_money.delete(1.0, "end") 
        self.Text_total_rates_Equalloan.delete(1.0, "end") 
        self.Text_total_money_Equalloan.delete(1.0, "end")
        
    
    def revise(self):
        # 构建个*窗口
        self.top_repayment = tkinter.Toplevel()
        self.top_repayment.title('每月还款')
        self.top_repayment.geometry('300x500')
        self.top_repayment.configure()
        # 设置带滚动条的Text组件
        scr = tkinter.Scrollbar(self.top_repayment)
        scr.pack(side='right', fill='y')
        Text_repayment_month = tkinter.Text(self.top_repayment, width=60, height=40, font=('黑体',12),yscrollcommand=scr.set)
        Text_repayment_month.pack(expand='yes',fill='both')
     
        # 计算等额本金还款法每月还款金额,并插入到Text组件里
        for i in range(self.Loan_term_month):
            self.repayment_months_money = self.money_month + (self.Loan_money-(self.money_month*i))*self.Loan_rate_month
            self.repayment_months_money_2 = round(self.repayment_months_money,2)
            Text_repayment_month.insert("end", " 第 %s 月: %s元" % (i+1,self.repayment_months_money_2))
            Text_repayment_month.insert(tkinter.INSERT, '\n')  # 换行
            
            
if __name__ == "__main__":
    App()

类图如下: 【UML】用例图、活动图、类图、顺序图练习题

四、问题四

游戏公司现欲开发一款面向儿童的模拟游戏,该游戏主要模拟现实世界中各种鸭子的发声特征、飞行特征和外观特征。游戏需要模拟的鸭子种类及其特征。当前设计为有四类鸭子RubberDuck、MallardDuck、CottonDuck和RedHeadDuck。每类鸭子都为支持将来能够模拟更多种类鸭子的特征,采用某设计模式设计来实现模拟。请选择一个设计模式,并做写出程序框架,解释选择该设计模式的理由

【UML】用例图、活动图、类图、顺序图练习题

【UML】用例图、活动图、类图、顺序图练习题

五、问题五

用户登录火车票网上订票系统后,在用户界面上选择出发站、到站、日期和车次,提交订单给处理中心,并在45分钟之内在支付中心完成网上支付,视为订票成功。画出顾客成功订票的序列图。 【UML】用例图、活动图、类图、顺序图练习题