liu2002

导航

软件工程第一次作业-物品交换系统

项目需求

在疫情期间,各个小区居民发挥互助精神,进行物品交换,互通有无。请你编写一个物品交换软件,该程序允许添加物品的信息,删除物品的信息,显示物品列表,也可以查找物品的信息。你实现的程序可以采用命令行的方式使用,但是鼓励提供GUI。

项目设计

使用VS Studio2019,C++撰写。

物品交换系统
功能:1.添加物品 2.删除物品 3.显示物品 4.查找物品 0.退出

PSP数据分析

项目代码

/*
物品交换系统
功能:1.添加物品 2.删除物品 3.显示物品 4.查找物品 0.退出
*/
#include <iostream>
#include <string>
#include<iomanip>
using namespace std;

#define MAX 1000//物品清单最大容量

//物品结构体
struct item {
    string name;//物品名称
    string owner;//物品主人
    string phone_num;//联系电话
};

//物品清单结构体
struct item_book {
    struct item items[MAX];//保存的物品
    int size;//当前物品数量
};

//显示菜单
void showMenu() {
    cout << "欢迎使用物品交换系统!以下是本系统的功能:" << endl;
    cout << "***************1.添加物品***************" << endl;
    cout << "***************2.删除物品***************" << endl;
    cout << "***************3.显示物品***************" << endl;
    cout << "***************4.查找物品***************" << endl;
    cout << "***************0. 退  出 ***************" << endl;
    cout << "请输入您的选择:" << endl;
}

//添加物品
void add_item(item_book* abs) {
    if (abs->size == MAX) {
        cout << "物品清单已达最大容量,请删除部分物品后,再继续添加。" << endl;
        return;
    }
    else {
        //添加物品名称
        string name;
        cout << "请输入物品名称:" << endl;
        cin >> name;        
        //添加物品主人
        string owner;
        cout << "请输入主人名称:" << endl;
        cin >> owner;        
        //添加联系方式
        string phone_num;
        cout << "请输入联系方式:" << endl;
        cin >> phone_num;
        
        //判断物品是否已经存在
        int flag = 0;
        for (int i = 0; i < abs->size; i++) {
            if ((abs->items[i].name == name) && (abs->items[i].owner) == owner) {
                flag = 1;
                cout << "物品已经存在,无需重复录入。" << endl;
                return;
                }
            }
        if (flag == 0) {
            //更新物品信息
            abs->items[abs->size].name = name;
            abs->items[abs->size].owner = owner;
            abs->items[abs->size].phone_num = phone_num;
            //更新物品数量
            abs->size++;

            cout << "添加完毕。" << endl;    
            }    
    }
}

//删除物品
void delete_item(item_book* abs) {
    if (abs->size == 0) {
        cout << "物品清单为空!不可再进行删除。" << endl;
    }
    else {
        string name, onwer;
        cout << "请输入要删除的物品:" << endl;
        cin >> name;
        cout << "请输入物品主人的名字:" << endl;
        cin >> onwer;

        //判断物品是否存在
        int flag = 0;
        for (int i = 0; i < abs->size; i++) {
            if ((abs->items[i].name == name) && (abs->items[i].owner)==onwer) {
                //从要删除的物品开始,后一位覆盖前一位
                //注意:此时items中最后一位并未被覆盖,但由于size-1,同样从功能上实现了删除
                flag = 1;
                for (int j = i; j < abs->size-1; j++) {
                    abs->items[j] = abs->items[j + 1];
                }
                abs->size--;//更新物品数量
                cout << "删除完毕。" << endl;
                return;
            }
        
        }
        if (flag == 0) {
            cout << "抱歉!您想删除的物品不存在。" << endl;
        }
    }

}

//显示物品
void show_item(item_book *abs){
    //判断清单是否为空
    if (abs->size == 0) {
        cout << "物品清单为空!" << endl;
    }
    else {
        cout << setw(15)<<"物品名称" ;
        cout << setw(15)<< "主人名称";
        cout << setw(15)<<"联系方式" << endl;
        for (int i = 0; i < abs->size; i++) {
            cout<< setw(15)<< abs->items[i].name ;
            cout<< setw(15)<<abs->items[i].owner;
            cout<< setw(15)<<abs->items[i].phone_num << endl;
        }
    }
}

//查找物品
void find_item(item_book* abs) {
    string name;
    cout << "请输入您想要查找的物品名:" << endl;
    cin >> name;
    //判断物品是否存在
    int flag = 0;
    for (int i = 0; i < abs->size; i++) {
        if (abs->items[i].name == name) {
            if (flag == 0) {
                cout << setw(15) << "物品名称";
                cout << setw(15) << "主人名称";
                cout << setw(15) << "联系方式" << endl;
            }
            flag = 1;
            cout << setw(15) << abs->items[i].name;
            cout << setw(15) << abs->items[i].owner;
            cout << setw(15) << abs->items[i].phone_num << endl;
            }
        }
    if (flag == 0) {
        cout << "抱歉!您想查找的物品不存在。" << endl;
    }
}

//主程序
int main()
{
    item_book ib;//创建物品清单
    ib.size = 0;


    string select;
    while (true) {
        showMenu();//显示菜单
        cin >> select;
        if (select == "1") {//1.添加物品
            add_item(&ib);
            std::system("pause");
            std::system("cls");
        }
        else if (select == "2") {//2.删除物品
            delete_item(&ib);
            system("pause");
            system("cls");
        }
        else if (select == "3") {//3.显示物品
            show_item(&ib);
            system("pause");
            system("cls");
        }
        else if (select == "4") {//4.查找物品
            find_item(&ib);
            system("pause");
            system("cls");
        }
        else if (select == "0") {//0.退出
            cout << "欢迎下次使用!" << endl;
            system("pause");
            exit(0);
        }
        else {//输入错误
            cout << "抱歉,请输入0-4之间的阿拉伯数字。" << endl;
            system("pause");
            system("cls");
        }
    }
    
    system("pause");
    return 0;
}

 

心得体会

1.调整格式时,学会了setw()的用法,不必再单一使用“\t”缩进。

2.删除对象时,size--亦能从功能上实现对象的删除,相对更为方便。

3.思路需严谨,对对象进行操作前,先判断对象存不存在(size?=0)。

 

附录

项目文件已上传至Github

https://github.com/liu20020814/homework.git

 

posted on 2022-09-21 19:13  柳2002  阅读(65)  评论(0编辑  收藏  举报