中国矿业大学-信息安全E

#include<iostream>
#include<vector>
#include <sstream>
#include <string>
#include <algorithm>
#include <iomanip> 
using namespace std;
/*vector<float> fuction1(vector<vector<float>> v1)
{
    vector<float> sum;
    float sum1 = 0;
    //列向量归一化
    for (int i = 0; i < v1[0].size(); i++)//列数
    {
        sum1 = 0;
        for (int j = 0; j < v1.size(); j++)//行数
        {
            sum1 += v1[j][i];
        }
        sum.push_back(sum1);
    }

*/
int main()

{
    int  n;

    std::cin >> n;

    cin.ignore(); // 忽略换行符  

    // 创建一个n x n x 3的数组来存储三角模糊数的值  
    vector<vector<vector<double>>> array(n, vector<vector<double>>(n, vector<double>(3)));

    // 读取并解析矩阵的每一行数据  
    for (int i = 0; i < n; ++i) {
        string line;
        if (!getline(cin, line)) { // 读取一行,并检查是否读取成功  
            cerr << "Error: Unexpected end of input." << endl;
            return 1; // 输入结束或出现错误时退出程序  
        }

        istringstream iss(line); // 使用istringstream来解析字符串  
        string token;
        int j = 0; // 用于追踪当前列  

        // 读取并解析每个三角模糊数  
        while (getline(iss, token, ' ')) { // 使用空格作为分隔符  
            istringstream itss(token); // 再次使用istringstream来解析数字  
            double value;
            char delimiter; // 用于读取逗号或其他分隔符  

            // 读取并存储三角模糊数的每个值  
            for (int k = 0; k < 3; ++k) {
                if (!(itss >> value)) { // 读取数字,并检查是否读取成功  
                    cerr << "Error: Invalid input format." << endl;
                    return 1; // 输入格式不正确时退出程序  
                }
                array[i][j][k] = value; // 存储值到数组中  

                // 清除逗号或其他分隔符  
                if (k < 2 && !(itss >> delimiter)) {
                    cerr << "Error: Missing delimiter." << endl;
                    return 1; // 缺少分隔符时退出程序  
                }
            }
            ++j; // 移到下一列  
        }
    }

    // 按照指定的格式打印矩阵  
    /*for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
            for (int k = 0; k < 3; ++k) {
                cout << array[i][j][k] << " "; // 打印当前值并加上空格  
            }
        }
        cout << endl; // 行末输出换行符  
    }*/
    //一,计算权重向量
        //1.求行和
    std::vector<std::vector<std::vector<double>>> array1(n, std::vector<std::vector<double>>(1, std::vector<double>(3)));
    std::vector <double>array2(3);
    std::vector<std::vector<std::vector<double>>> array3(n, std::vector<std::vector<double>>(1, std::vector<double>(3)));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < 3; k++)
            {
                array1[i][0][k] += array[i][j][k];
                array2[k] += array[i][j][k];
            }
        }
    }
    /*for (int i = 0; i < n; i++)
    {
        for (int k = 0; k < 3; k++)
        {
           // cout << "array1" << array1[i][0][k]<<" ";
            //cout << " array2[k]" << array2[k]<<" ";
        }
        cout << endl;
            array10.8 array11 array11.2
            array11.4 array11.6 array11.8
            array11.7 array11.9 array12.1

             array2[k]3.9  array2[k]4.5  array2[k]5.1
             array2[k]3.9  array2[k]4.5  array2[k]5.1
             array2[k]3.9  array2[k]4.5  array2[k]5.1

    }*/
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < 3; k++)
            {
                if (k == 0)
                {
                    array3[i][0][0] = array1[i][0][0] / array2[2];
                }
                if (k == 1)
                {
                    array3[i][0][1] = array1[i][0][1] / array2[1];
                }
                if (k == 2)
                {
                    array3[i][0][2] = array1[i][0][2] / array2[0];
                }

            }
        }
    }
    /*for (int i = 0; i < n; i++)
    {
        for (int k = 0; k < 3; k++)
        {
            cout << "array3[i][0][k]" << array3[i][0][k] << " ";
                array3[i][0][k]0.156863 array3[i][0][k]0.222222 array3[i][0][k]0.307692
                array3[i][0][k]0.27451 array3[i][0][k]0.355556 array3[i][0][k]0.461538
                array3[i][0][k]0.333333 array3[i][0][k]0.422222 array3[i][0][k]0.538462
        }
        cout << endl;
    }*/
    //std::vector<std::vector<std::vector<double>>> array4(n, std::vector<std::vector<double>>(1, std::vector<double>(3)));//可能度矩阵
    std::vector<std::vector<double>> array4(n, std::vector<double>(n, 0.0));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
           
           
                double denominator1 = array3[i][0][1] - array3[i][0][0] + array3[j][0][1] - array3[j][0][0];
                double denominator2 = array3[i][0][2] - array3[i][0][1] + array3[j][0][2] - array3[j][0][1];

                // 避免除零错误  
                double n1 = (denominator1 != 0.0) ? (array3[j][0][1] - array3[i][0][0]) / denominator1 : 0.0;
                if (n1 < 0) n1 = 0;
                double n2 = (denominator2 != 0.0) ? (array3[j][0][2] - array3[i][0][1]) / denominator2 : 0.0;
                if (n2 < 0) n2 = 0;
                // 计算 array4 的值  
                //double value = 0.5 * (1 - std::max(n1, 0.0)) + 0.5 * (1 - std::max(n2, 0.0));
                array4[i][j]= 0.5 * std::max(1.0 - std::max(n1, 0.0), 0.0) +
                    0.5 * std::max(1.0 - std::max(n2, 0.0), 0.0);
                //array4[i][j] = (value < 0) ? 0.0 : value;
                
            
        }
    }
    /*for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << " array4[i][j]" << array4[i][j]<<" ";
            
        }
        cout << endl;
        
        
    }*/
            
            //三。转为模糊一致性矩阵
            //1.求行和
            std::vector <double>array5(n);//可能度矩阵行和
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    array5[i] += array4[i][j];
                }
            }
            /*for (int i = 0; i < n; i++)
            {
                cout << array5[i] << " ";
                //0.5 1.65385 2.34615
            }*/
            //2.建立模糊一致性矩阵
            std::vector<std::vector<double>> array6(n, std::vector<double>(n, 0.0));
            
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    array6[i][j] = ((array5[i] - array5[j]) / (2 * (n - 1))) + 0.5;
                    //cout << "array6[i][j]" << array6[i][j] << " ";
                }
                //cout << endl;
            }
            //四.计算排序向量
            //1.行求和
            std::vector <double>array7(n);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    array7[i]+= array6[i][j];
                }
            }
            for (int i = 0; i < n; i++)
            {
                cout << std::fixed << std::setprecision(5)<< (array7[i] + (0.5 * n) - 1) / (n * (n - 1)) << " ";
            }


            

    }




数据流图画法--- **中国矿业大学徐海学院计算机系** **《数据库原理及应用实践》课程报告** --- **学号**:__________ **姓名**:__________ **成绩**:__________ --- # **教务辅助管理系统数据库设计** ## **宠物商店数据库设计报告** --- ### **一、系统概述** 宠物商店系统是一个在线商城平台,主要功能包括: 1. **用户管理**:注册、登录、个人信息维护。 2. **商品管理**:管理员动态维护商品分类及商品信息。 3. **购物流程**:用户浏览商品、加入购物车、生成订单。 4. **订单管理**:订单状态跟踪(待支付、已发货等)。 --- ### **二、需求分析** #### **1. 功能需求** - **用户注册**:输入用户号、用户名、密码、性别、住址、邮箱及电话。 - **商品管理**:管理员可添加分类(如“猫粮”“狗玩具”)及商品信息。 - **订单生成**:用户选择商品后下单,系统记录订单明细及总价。 #### **2. 数据字典(部分)** | **数据项** | **说明** | **数据类型** | **约束** | |----------------------|------------------------|-------------------|------------------| | 用户号(UID) | 用户唯一标识 | INT | 主键,自增 | | 商品号(PID) | 商品唯一标识 | INT | 主键,自增 | | 订单号(OID) | 订单唯一标识 | VARCHAR(20) | 主键 | | 分类号(CID) | 分类唯一标识 | INT | 主键,自增 | | 订单状态(Status) | 订单当前状态 | VARCHAR(20) | 默认“待支付” | #### **3. 数据流图(DFD)** - **Level 0 数据流图** ![图1 系统顶层数据流图](imaginary-link) **说明**:用户与管理员通过系统交互,完成注册、商品管理、下单流程。 --- ### **三、概念设计** #### **1. 实体属性图(部分)** - **用户实体(Account)** - 属性:用户号、用户名、密码、性别、住址、邮箱、电话。 - **商品实体(Product)** - 属性:商品号、商品名、分类号、市场价格、当前价格、库存量、商品介绍、状态(上架/下架)。 #### **2. 实体联系图(ER图)** ![图2 宠物商店ER图](imaginary-link) **说明**: - 用户与订单为 **1:N** 关系。 - 订单与订单明细为 **1:N** 关系。 - 商品与分类为 **N:1** 关系。 --- ### **四、逻辑结构设计** 根据概念模型转换规则,定义关系模式如下: #### **表1 用户表(Account)** | 字段名 | 数据类型 | 主键 | 外键 | 是否为空 | 约束 | |-------------|------------------|------|------|----------|--------------------| | UID | INT | 是 | 否 | 否 | 自增 | | UserName | VARCHAR(50) | 否 | 否 | 否 | 唯一 | | Password | VARCHAR(50) | 否 | 否 | 否 | SHA2加密 | | Gender | CHAR(2) | 否 | 否 | 是 | 可选值:男/女 | | Address | VARCHAR(100) | 否 | 否 | 是 | - | | Email | VARCHAR(50) | 否 | 否 | 否 | 唯一 | | Phone | VARCHAR(20) | 否 | 否 | 是 | - | #### **表2 商品分类表(Category)** | 字段名 | 数据类型 | 主键 | 外键 | 是否为空 | 约束 | |-------------|------------------|------|------|----------|--------------------| | CID | INT | 是 | 否 | 否 | 自增 | | CName | VARCHAR(50) | 否 | 否 | 否 | - | (其余表结构详见附录) --- ### **五、数据库中的具体实现** #### **1. 建表SQL语句(MySQL)** ```sql -- 用户表 CREATE TABLE Account ( UID INT PRIMARY KEY AUTO_INCREMENT, UserName VARCHAR(50) NOT NULL UNIQUE, Password VARCHAR(50) NOT NULL, Gender CHAR(2), Address VARCHAR(100), Email VARCHAR(50) NOT NULL UNIQUE, Phone VARCHAR(20) ); -- 商品表(含状态字段) CREATE TABLE Product ( PID INT PRIMARY KEY AUTO_INCREMENT, PName VARCHAR(50) NOT NULL, CID INT, MarketPrice DECIMAL(10,2), CurrentPrice DECIMAL(10,2), Stock INT, Description TEXT, Status ENUM('上架', '下架') DEFAULT '上架', FOREIGN KEY (CID) REFERENCES Category(CID) ); ``` #### **2. 功能模块SQL示例** - **用户管理模块** ```sql -- 新增用户 INSERT INTO Account (UserName, Password, Email) VALUES ('用户B', SHA2('password123', 256), 'userB@example.com'); -- 查询用户信息 SELECT * FROM Account WHERE UID = 1; ``` - **商品管理模块** ```sql -- 下架商品 UPDATE Product SET Status = '下架' WHERE PID = 1001; -- 添加新分类 INSERT INTO Category (CName) VALUES ('爬宠用品'); ``` - **订单管理模块** ```sql -- 生成订单 INSERT INTO Orders (OID, UID, TotalPrice) VALUES ('ORDER202310002', 1, 599.99); -- 查询待支付订单 SELECT * FROM Orders WHERE Status = '待支付'; ``` --- ### **六、总结** #### **1. 设计亮点** - **规范化设计**:通过分类表减少冗余,外键约束保障数据一致性。 - **功能完备性**:覆盖用户注册、商品管理、订单生成等核心流程。 #### **2. 扩展建议** - **支付集成**:对接支付宝/微信支付接口,关联订单状态更新。 - **物流跟踪**:新增物流表记录配送信息(如物流单号、配送状态)。 --- **附录:完整表结构** | 表名 | 说明 | |---------------|--------------------| | Cart | 购物车临时数据 | | Shipping | 物流信息(扩展建议)| **文件命名**:`学号+姓名+宠物商店数据库设计.docx` --- **注**:实际提交时需删除注释,调整图表编号及格式至模板要求。帮我画一下这个的数据流图和实体属性图,总的实体联系图,并且完善一下这个数据库设计报告
05-14
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值