日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软考 | 2017年上半年 软件设计师 下午试卷

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软考 | 2017年上半年 软件设计师 下午试卷 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

試題一

閱讀下列說明,回答問題 1 至問題 4, 將解答填入答題紙的對應欄內。
【說明】
某醫療器械公司作為復雜醫療產品的集成商,必須保持高質量部件的及時供應。為了實現這一目標,該公司欲開發一采購系統。系統的主要功能如下:

  • 檢查庫存水平。采購部門每天檢查部件庫存量,當特定部件的庫存量降至其訂貨點時,返回低存量部件及庫存量。
  • 下達采購訂單。采購部門針對低存量部件及庫存量提交采購請求,向其供應商(通過供應商文件訪問供應商數據)下達采購訂單,并存儲于采購訂單文件中。
  • 交運部件。當供應商提交提單并交運部件時,運輸和接收(S/R)部門通過執行以下三步過程接收貨物:
    (1)驗證裝運部件。通過訪問采購訂單并將其與提單進行比較來驗證裝運的部件,并將提單信息發給 S/R 職員。 如果收貨部件項目出現在采購訂單和提單上,則已驗證的提單和收貨部件項目將被送去檢驗。否則,將 S/R 職員提交的裝運錯誤信息生成裝運錯誤通知發送給供應商。
    (2) 檢驗部件質量。通過訪問質量標準來檢查裝運部件的質量,并將己驗證的提單發給檢驗員。如果部件滿足所有質量標準,則將其添加到接受的部件列表用于更新部件庫存。如果部件未通過檢查,則將檢驗員創建的缺陷裝運信息生成缺陷裝運通知發送給供應商。
    (3)更新部件庫存。庫管員根據收到的接受的部件列表添加本次采購數量,與原有庫存量累加來更新庫存部件中的庫存量。標記訂單采購完成。
    現采用結構化方法對該采購系統進行分析與設計,獲得如圖 1-1 所示的上下文數據流圖和圖 1-2 所示的 0 層數據流圖。

  • 圖 1-2 0 層數據流圖
    【問題 1】(5 分)
    使用說明中的詞語,給出圖 1-1 中的實體 E1 ~E5

    【問題 2】(4 分)
    使用說明中的詞語,給出圖 1-2 中的數據存儲 D1~D4 的名稱。

    【問題 3】(4 分)
    根據說明和圖中術語,補充圖 1-2 中缺失的數據流及其起點和終點。

    【問題 4】(2 分)
    用 200 字以內文字,說明建模圖 1-1 和圖 1-2 時如何保持數據流圖平衡。


    試題二

    閱讀下列說明,回答問題 1 至問題 3,將解答填入答題紙的對應欄內。
    【說明】
    某房屋租賃公司擬開發一個管理系統用于管理其持有的房屋、租客及員工信息。請根據下述需求描述完成系統的數據庫設計。
    【需求描述】

  • 公司擁有多幢公寓樓,每幢公寓樓有唯一的樓編號和地址。每幢公寓樓中有多套公寓,每套公寓在樓內有唯一的編號(不同公寓樓內的公寓號可相同〉。系統需記錄每套公寓的臥室數和衛生間數。
  • 員工和租客在系統中有唯一的編號(員工編號和租客編號)。
  • 對于每個租客,系統需記錄姓名、多個聯系電話、一個銀行賬號(方便自動扣房租)、一個緊急聯系人的姓名及聯系電話。
  • 系統需記錄每個員工的姓名、一個聯系電話和月工資。員工類別可以是經理或維修工,也可兼任。每個經理可以管理多幢公寓樓。每幢公寓樓必須由一個經理管理。系統需記錄每個維修工的業務技能,如:水暖維修、電工、木工等。
  • 租客租賃公寓必須和公司簽訂租賃合同。一份租賃合同通常由一個或多個租客(合租)與該公寓樓的經理簽訂,一個租客也可租賃多套公寓。合同內容應包含簽訂日期、開始時間、租期、押金和月租金。
  • 【概念模型設計】
    根據需求階段收集的信息,設計的實體聯系圖(不完整)如圖 2-1所示。

    【邏輯結構設計】
    根據概念摸型設計階段完成的實體聯系圖,得出如下關系模式(不完整):
    聯系電話(電話號碼,租客編號)
    租客(租客編號,姓名,銀行賬號,聯系人姓名,聯系人電話)
    員工(員工編號,姓名,聯系電話,類別,月工資, (a) )
    公寓樓( (b) ,地址,經理編號)
    公寓(樓編號,公寓號,臥室數,衛生間數〉
    合同(合同編號,租客編號,樓編號,公寓號,經理編號,簽訂日期,
    起始日期,租期, (c) ,押金)
    【問題 1】(4.5 分)
    補充圖 2-1 中的“簽約”聯系所關聯的實體及聯系類型。

    【問題 2】(4.5 分)
    補充邏輯結構設計中的(a)、(b)、(c)三處空缺。

    【問題 3】(6 分)
    在租期內,公寓內設施如出現問題,租客可在系統中進行故障登記,填寫故障描述,每項故障由系統自動生成唯一的故障編號,由公司派維修工進行故障維修,系統需記錄每次維修的維修日期和維修內容。請根據此需求,對圖 2-1 進行補充,并將所補充的 ER 圖內容轉換為一個關系模式,請給出該關系模式。


    試題三

    閱讀下列系統設計說明,回答問題 1 至問題 3,將解答填入答題紙的對應欄內。
    【說明】
    某玩具公司正在開發一套電動玩具在線銷售系統,用于向注冊會員提供端對端的玩具 定制和銷售服務。在系統設計階段,“創建新訂單 (New Order)” 的設計用例詳細描述如 表 3-1 所示,候選設計類分類如表 3-2 所示,并根據該用例設計出部分類圖如圈子 3-1 所示。
    表 3-1 創建新訂單 (NewOrder) 設計用例

    表 3-2 候選設計類分類


    在訂單處理的過程中,會員可以點擊“取消訂單"取消該訂單。如果支付失敗,該訂單將被標記為掛起狀態,可后續重新支付,如果掛起超時 30 分鐘未支付,系統將自動取消該訂單。訂單支付成功后,系統判斷訂單類型: (1)對于常規訂單,標記為備貨狀態,訂單信息發送到貨運部,完成打包后交付快遞發貨; (2)對于定制訂單,會自動進入定制狀態,定制完成后交付快遞發貨。會員在系統中點擊”收貨"按鈕變為收貨狀態,結束整個訂單的處理流程。根據訂單處理過程所設計的狀態圖如圖 3-2 所示。

    【問題 1】(6 分)
    根據表 3-1 中所標記的候選設計類,請按照其類別將編號C1~C12 分別填入表 3-2 中的(a)、(b)和(c)處。

    【問題 2】 (4 分〉
    根據創建新訂單的用例描述,請給出圖 3-1 中 X1~X4 處對應類的名稱。

    【問題 3】 (5 分)
    根據訂單處理過程的描述,在圖 3-2 中 S1~S5 處分別填入對應的狀態名稱。


    試題四

    閱讀下列說明和 C 代碼,回答問題 1 至問題 3,將解答寫在答題紙的對應欄內。
    【說明】
    假幣問題:有 n 枚硬幣,其中有一枚是假幣,己知假幣的重量較輕。現只有一個天平,要求用盡量少的比較次數找出這枚假幣。
    【分析問題】
    將 n 枚硬幣分成相等的兩部分:
    (1)當 n 為偶數時,將前后兩部分,即 1…n/2 和 n/2+1…0,放在天平的兩端,較輕的一端里有假幣,繼續在較輕的這部分硬幣中用同樣的方法找出假幣:
    (2)當 n 為奇數時,將前后兩部分,即 1…(n -1)/2 和(n+1)/2+1…0,放在天平的兩端,較輕的一端里有假幣,繼續在較輕的這部分硬幣中用同樣的方法找出假幣:若兩端重量相等,則中間的硬幣,即第 (n+1)/2 枚硬幣是假幣。
    【C 代碼】
    下面是算法的 C 語言實現,其中:

    coins[]: 硬幣數組 first,last:當前考慮的硬幣數組中的第一個和最后一個下標 #include < stdio.h > int getCounterfeitCoin(int coins[]int first,int last) {int firstSum = 0,lastSum = 0;int i;if(first == last - 1) {/*只剩兩枚硬幣*/if (coins[first] < coins[last]) return first;return last;}if ((last - first + 1) % 2 = 0) {/*偶數枚硬幣*/for (i = first; i < (1); i++) {firstSum += coins[i];}for (i = first + (last - first) / 2 + 1; i < last + 1; i++) {lastSum += coins[i];}if (2) {Return getCounterfeitCoin(coins, first, first + (last - first) / 2;)} else {Return getCounterfeitCoin(coins, first + (last - first) / 2 + 1, last;)}} else {/*奇數枚硬幣*/for(i = first; i < first + (last - first) / 2; i++) {firstSum += coins[i];}for(i = first + (last - first) / 2 + 1; i < last + 1; i++) {lastSum += coins[i];}if(firstSum < lastSum) {Return getCounterfeitCoin(coins, first, first + (last - first) / 2 - 1);} else if (firstSum > lastSum) {Return getCounterfeitCoin(coins, first + (last - first) / 2 - 1, last);} else {Return(3)}} }

    【問題一】
    根據題干說明,填充 C 代碼中的空(1)-(3)

    【問題二】
    根據題干說明和 C 代碼,算法采用了(4)設計策略。函數getCounterfeitCoin 的時間復雜度為(5)(用 O 表示)。

    【問題三】
    若輸入的硬幣數為 30,則最少的比較次數為(6),最多的比較次數為(7)。


    從下列的 2 道試題(試題五至試題六)中任選 1 道解答。
    如果解答的試題數超過 1 道,則題號小的 1 道解答有效。


    試題五

    閱讀下列說明和 C++代碼,將應填入(n)處的字句寫在答題紙的對應欄內。
    【說明】
    某快餐廳主要制作井出售兒童套餐,一般包括主餐(各類比薩)、飲料和玩具,其餐品種類可能不同,但其制作過程相同。前臺服務員(Waiter)調度廚師制作套餐。現采用生成器(Builder) 模式實現制作過程,得到如圖 5-1 所示的類圖。

    【C++代碼】

    #include<iostream> #include <string> using namespace std;class Pizza {private: string parts;public:void setParts(string parts) { this->parts=parts; }string getParts() { return parts; } };class PizzaBuilder {protected:Pizza* pizza;public:Pizza* getPizza() { retum pizza; }void createNewPizza() { pizza = new Pizza(); }( 1 ); }class HawaiianPizzaBuilder :public PizzaBuilder {public:void buildParts() { pizza->setParts("cross +mild +ham&pineapple"); } }class SpicyPizzaBuider: public PizzaBuilder {public:void buildParts() { pizza->setParts("pan baked +hot +ham&pineapple"); } }Class Waiter{private:PizzaBuilder* pizzaBuilder;public:void setPizzaBuilder(PizzaBuilder* pizzaBuilder) { /*設置構建器*/( 2 )}Pizza* getPizza() { return pizzaBuilder->getPizza(); }void construct() { /*構建*/pizzaBuilder->createNewPizza();( 3 )} };int main(){Waiter*waiter=new Waiter();PizzaBuilder*hawaiian pizzabuilder=newHawaiianPizzaBuilder()( 4 );( 5 );cout<< "pizza: "<< waiter->getPizza()->getParts()<< endl; }

    程序的輸出結果為:

    pizza: cross + mild + ham&pineapple

    試題六

    閱讀下列說明和 Java 代碼,將應填入 (n) 處的字句寫在答題紙的對應欄內。
    【說明】
    某快餐廳主要制作并出售兒童套餐,一般包括主餐(各類比薩)、飲料和玩具,其餐品種類可能不同,但其制作過程相同。前臺服務員(Waiter) 調度廚師制作套餐。現采用生成器 (Builder) 模式實現制作過程,得到如圖 6-1 所示的類圖。

    【Java 代碼】

    class Pizza {private String parts;public void setParts(String parts) { this.parts = parts;}public String toString() { return this.parts; } }abstract class PizzaBuilder {protected Pizza;public Pizza getPizza() { return pizza; }public void createNewPizza() { pizza = new Pizza(); }public (1) ; }class HawaiianPizzaBuilder extends PizzaBuilder {public void buildParts() { pizza.setParts("cross + mild +ham&pineapp1e”}; }class SpicyPizzaBuilder extends PizzaBuilder {public void buildParts() { pizza.setParts("pan baked + hot +pepperoni&salami"); } }class Waiter {private PizzaBuilder;public void setPizzaBuilder(PizzaBuilder pizzaBuilder) { /*設置構建器*/(2) ;}public Pizza getPizza(){ return pizzaBuilder.getPizza(); }public void construct() { /*構建*/pizzaBuilder.createNewPizza();(3) ;} }Class FastFoodOrdering {public static viod mainSting[]args) {Waiter = new Waiter();PizzaBuilder hawaiian_pizzabuilder = new HawaiianPizzaBuilder();(4) ;(5) ;System.out.println("pizza: " + waiter.getPizza());} }

    程序的輸出結果為:

    pizza:cross + mild + ham&pineapple

    總結

    以上是生活随笔為你收集整理的软考 | 2017年上半年 软件设计师 下午试卷的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。