文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C语言实现超市信息管理系统课程设计

2024-04-02 19:55

关注

本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下

一、 需求分析

目前商品市场的商品信息玲琅满目,货物信息的储存以及更新就变的越来越重要。因此,我们小组设计的“超市信息管理程序”旨在解决货物的信息和购买商品信息的储存问题以及实现建立库存信息,对购物车添加商品、结算并修改库存等操作,同时也能实现对库存信息的读取和显示。

我们设计的程序要实现以下要求:

1、 使用两个不同的结构体分别保存货物信息和购物车中的商品信息,可在商品信息结构体中嵌套货物信息结构体。
2、 将货物信息写入文件保存,在每次运行时,货物信息可以从二进制文件导入,并在结算后更新。
3、 建立一个链表保存购物车信息,可以实现商品的添加和当前购物列表的显示。
4、 系统制作完成后,能够正常运行。
具体目标是在有限的商品信息中,程序能正常运行。并能够实现查询,增添,删除和结算目的。

二、 总体设计

基本思路如下:

(1) 创建库存信息:设计函数void establish();诸葛输入货物信息至结构数组goods[NUM],在将数组写入文件。
(2) 对购物车进行相关操作:定义指针struct item-node*cart来保存链表,若用户选择向购物车添加商品,则新建一个节点,将该商品信息存入节点中,再追加到链表的末尾。显示购物信息时,若指针不为空,逐一显示节点内容。
(3) 结算:先调用display()显示购物清单,逐一读取链表cart中每一个节点的数据,计算价格,并修改结构体数组goods。打印显示总数,并输入实付金额,计算找零。再写入文件。

遇到的问题以及解决方法如下:

(1) 由于是初次接触未知的函数体,因此对于它们的使用方式还不能灵活运用。(解决方法:查阅相应的函数结构体书籍。)
(2) 要做到“增删查改”这一点,需要有明确的思维图示。(解决方法:查阅书籍,多次例题实践,达到熟能生巧。)
(3) 每个程序之间的衔接问题。(解决方法:必须仔细编译。)

程序框图如下

三、详细设计

程序由头文件market.h和源文件market.c、establish.c、shoppingcart.c、calculate.c,四个源文件中具体包含的函数如下表所示。

代码如下:

//Market.h
#ifndef    MARKET_H
#define MARKET_H
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NUM 2
struct item {
    char brand[20];
    char id[10];
    float in_price;
    float out_price;
    int storage;
};


struct item_node {
    struct item wanted;
    int amount;
    struct item_node* next;
};

int menu();
void establish();
void dis_all();
void shop_cart();
int cart_menu();
void add();
void calculate();
void display();
struct item goods[NUM];
struct item_node * cart;
#endif


//Market.c
//#include"Market.h"
int main()
{
    printf("******************************\n");
    printf("    欢迎进入超市管理系统\n");
    printf("******************************\n");
    while (1) {
        switch (menu()) {
        case 1:
            establish(); break;
        case 2:
            dis_all(); break;
        case 3:
            shop_cart(); break;
        case 4:
            calculate(); break;
        case 5:
            printf("感谢使用,再见!\n");
            exit(0);
        }
    }
}

int menu() {
    char str[5];
    int select;
    printf("\n\n请选择数字进行操作\n");
    printf("----------------------\n");
    printf("1.建立库存信息\n");
    printf("2.显示所有商品\n");
    printf("3.购物车\n");
    printf("4.结算\n");
    printf("5.退出\n");
    printf("----------------------\n\n");
    printf("请选择对应数字 1-5:");
    while (1) {
        fflush(stdin);
        //gets(str);
        gets_s(str);
        select = atoi(str);
        if (select < 1 || select>5)
            printf("输入错误,请重新输入:");
        else
            break;
    }
    return select;
}

void  dis_all() {
    int i;
    FILE* fp;
    fp = fopen("goods", "r");
    for (i = 0; (fread(goods + i, sizeof(struct item), 1, fp)) != 0l; i++) {
        printf("---------------------\n");
        printf("货号          品名  单价  库存量\n");
        printf("%7s%10s%7.2f%8d\n", goods[i].id, goods[i].brand, goods[i].out_price, goods[i].storage);
    }
    fclose(fp);
}


//establish.c
//建立库存信息文件
//#include"Market.h"
void establish() {
    FILE* fp;
    int i;
    printf("请依次输入货物信息\n");
    printf("-------------------\n");
    for (i = 0; i < NUM; i++) {
        printf("品名:");
        fflush(stdin);
        //gets(goods[i].brand);
        gets_s(goods[i].brand);
        printf("货号:");
        fflush(stdin);
        //gets(goods[i].id);
        gets_s(goods[i].id);
        printf("进价:");
        fflush(stdin);
        scanf("%f", &goods[i].in_price);
        printf("售价:");
        fflush(stdin);
        scanf("%f", &goods[i].out_price);
        printf("数量:");
        fflush(stdin);
        scanf("%d", &goods[i].storage);
        printf("\n");
    }
    if ((fp = fopen("goods", "w")) == NULL) {
        printf("创建文件失败。\n");
        return;
    }
    fwrite(goods, sizeof(struct item), NUM, fp);
    fclose(fp);
}
//shoppingcart.c
//购物车
//#include"Market.h"
void shop_cart() {
    while (1) {
        switch (cart_menu()) {
        case 1:display(); break;
        case 2:add(); break;
        case 3:return;
        }
    }
}


int cart_menu() {
    char str[5];
    int select;
    printf("\n请选择操作\n");
    printf("-----------------\n");
    printf("1.显示当前购物列表\n");
    printf("2.添加商品\n");
    printf("3.退出\n");
    printf("-----------------\n\n");
    printf("请选择对应数字1-4\n");
    while (1) {
        fflush(stdin);
        //gets(str);
        gets_s(str);
        select = atoi(str);
        if (select < 1 || select>3)
            printf("输入错误,请重新输入:\n");
        else
            break;
    }
    return select;
}

void display() {
    struct item_node * p ,  * cart;
    if (p = NULL) {
        printf("购物车为空\n");
        return;
    }
    while (p != NULL) {
        printf("--------------------------\n");
        printf("货号           品名  单价  数量\n");
        printf("%10s%20s%7.2f%8d\n", p->wanted.id, p->wanted.brand, p->wanted.out_price, p->amount);
        p = p->next;
    }
}
void add() {
    FILE* fp;
    int i, n;
    char str[20];
    char choice1, choice2;
    struct item_node* p, * p1;
    do {
        printf("输入所需物品的名称或货号:\n");
        fflush(stdin);
        //gets(str);
        gets_s(str);
        if ((fp = fopen("goods", "r")) == NULL) {
            printf("打开文件失败\n");
            continue;
        }
        for (i = 0; fread(goods + i, sizeof(struct item), 1, fp) != 0; i++) {
            if ((strcmp(goods[i].brand, str) == 0 || strcmp(goods[i].id, str) == 0) && goods[i].storage != 0) {
                printf("已找到所需物品:\n");
                printf("--------------------------------\n");
                printf("货号           品名  单价  库存量\n");
                printf("%10s%20s%7.2f%8d\n", goods[i].id, goods[i].brand, goods[i].out_price, goods[i].storage);
                printf("请输入所需数量:");
                scanf("%d", &n);
                if (n > goods[i].storage) {
                    printf("库存不足\n");
                    break;
                }
                printf("\n 是否购买?(Y/N)");
                fflush(stdin);
                choice1 = getchar();
                if (choice1 == 'Y' || choice1 == 'y') {
                    p1 = (struct item_node* )malloc(sizeof(struct item_node));
                    if (p1 == NULL) {
                        printf("内存申请失败!\n");
                        exit(1);
                    }
                    p1->amount = n;
                    p1->wanted = goods[i];
                    p1->next = NULL;
                    p = cart;
                    if (cart == NULL)
                        cart = p1;
                    else {
                        while (p->next != NULL)
                            p = p->next;
                        p1->next = p->next;
                        p->next = p1;
                    }
                }
                break;
            }

        }
        if (i = NULL)
            printf("未找到所需物品\n");
        fclose(fp);
        printf("是否继续购物?(Y/N)");
        fflush(stdin);
        choice2 = getchar();
    } while (choice2 == 'Y' || choice2 == 'y');
}
//calculate.c
//结算
//#include "Market.h"
void calculate() {
    float total = 0, pay;
    struct item_node* p;
    int i;
    FILE* fp;
    printf("以下是购物清单:\n");
    display();
    if ((fp = fopen("goods", "r")) == NULL) {
        printf("打开文件失败。\n");
        return;
    }
    for (i = 0; (fread(goods + i, sizeof(struct item), 1, fp)) != 0; i++)//有个分号
        ;
    fclose(fp);


    p = cart;
    while (p != NULL) {
        total += p->wanted.out_price * p->amount;
        for (i = 0; strcmp(goods[i].id, p->wanted.id) != 0; i++)
            ;
        goods[i].storage -= p->amount;
        p = p->next;
    }
    printf("总计%7.2f", total);
    printf("\n输入实付金额:");
    scanf("%f", &pay);
    printf("实付:     %7.2f    找零:     %7.2f", pay, pay-total);
    if ((fp = fopen("goods", "w")) == NULL) {
        printf("打开文件失败。\n");
        return;
    }
    fwrite(goods, sizeof(struct item), NUM, fp);
    fclose(fp);
}

四、程序运行结果测试与分析

系统制作完成后,显示如下图界面

建立库存信息,界面如下

显示库存列表,界面如下

进入购物车,界面如下

向链表中添加商品,界面如下

若商品不存在,界面如下

显示当前购物列表,界面如下

结算界面如下

五、结论与心得

超市的目标是以优质的服务和品种齐全的商品,面向地区的所有消费者,以使经营者能够实现最大利润,具体的目标为:最方便的提供消费者所需购买物品,详细如实的记录物品的品种分类,了解市场发展方向,及时修正进货信息,修改库存管理方法,提高工作效率节余才力物力资源。
经过努力,报告基本完成。从最初的茫然,到慢慢的进入状态,再到对思路逐渐的清晰,从代码的录入到程序的调试,整个过程难以用语言来表达。
目前的缺点是无法进行准确及时的成本,毛利核算:成本管理永远是主管的主题,特别是现在面对多变的市场环境,如何及时的满足客户的需求,进行科学合理的成本预测,成本分析及成本控制,及时准确的为超市管理者提供决策依据信息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯