iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现超市信息管理系统课程设计
  • 242
分享到

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

2024-04-02 19:04:59 242人浏览 薄情痞子
摘要

本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下 一、 需求分析 目前商品市场的商品信息玲琅满目,货物信息的储存以及更新就变的越来越重要。因此,我们

本文实例为大家分享了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);
}

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

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

建立库存信息,界面如下

显示库存列表,界面如下

进入购物车,界面如下

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

若商品不存在,界面如下

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

结算界面如下

五、结论与心得

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

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

--结束END--

本文标题: C语言实现超市信息管理系统课程设计

本文链接: https://www.lsjlt.com/news/143806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • c语言怎么计算字符串长度
    在C语言中,可以使用内置的strlen()函数来计算字符串的长度。该函数位于string.h头文件中。以下是一个示例代码: #inc...
    99+
    2024-05-14
    c语言
  • c语言怎么判断三个数的大小
    可以通过比较三个数之间的大小关系来判断它们的大小。以下是一个示例代码: #include <stdio.h> int ...
    99+
    2024-05-14
    c语言
  • c++排序函数sort怎么使用
    在C++中,使用sort函数对容器中的元素进行排序,可以按照默认的升序排列,也可以自定义排序规则。 下面是一个简单的例子,对一个ve...
    99+
    2024-05-14
    c++
  • c++中string的compare函数怎么使用
    在C++中,可以使用string的compare函数来比较两个string对象的大小。该函数的原型如下: int compare(c...
    99+
    2024-05-14
    c++
  • c++中string的compare函数有什么用
    c++中string的compare函数用于比较两个字符串的大小关系。该函数返回一个整数值,表示两个字符串的比较结果。 具体来说,如...
    99+
    2024-05-14
    c++
  • c++中print函数的功能有哪些
    在C++中,通常使用std::cout来进行输出操作,而不是使用print函数。std::cout是C++标准库中的一个输出流对象,...
    99+
    2024-05-14
    c++
  • c语言数据结构怎么使用
    在C语言中,数据结构可以通过定义结构体来实现。以下是一些常见的数据结构的使用方法示例: 链表: #include <std...
    99+
    2024-05-14
    c语言
  • c++中print函数的用法是什么
    在C++中没有内置的print函数,但可以使用cout来输出内容到控制台。cout是C++标准库中的一个输出流对象,可以使用<...
    99+
    2024-05-14
    c++
  • c++中concept的用法是什么
    在C++20中,Concept是一种新的语言特性,用于定义类型要求和约束。Concept可以被用来约束函数模板、类模板和普通函数的参...
    99+
    2024-05-14
    c++
  • c++中concept的作用是什么
    在C++中,concept的作用是定义一种通用的约束,用于限制模板参数的类型范围。通过使用concept,可以在编译时对模板参数进行...
    99+
    2024-05-14
    c++
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作