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);
}

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

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

建立库存信息,界面如下

显示库存列表,界面如下

进入购物车,界面如下

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

若商品不存在,界面如下

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

结算界面如下

五、结论与心得

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

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

(0)

相关推荐

  • C语言实现超市信息管理系统

    本文实例为大家分享了C语言实现超市信息管理系统的具体代码,供大家参考,具体内容如下 设计要求:设计一个超市信息管理系统,利用结构体存储货物信息和所购买商品的信息,并使用链表保存购物车信息,能够完成建立库存信息以及文件自动建立库存信息,对购物车添加商品.结算并修改库存等操作,可以将库存信息保存在文件中,并且可以对文件中的库存信息进行读取与显示. 程序代码如下: /*ifndef/define/endif"主要目的是防止头文件的重复包含和编译*/ #ifndef MARKET_H #define M

  • 学生信息管理系统C语言版

    C语言学生信息管理系统包括以下功能: 1.学生信息的整体注册 2.学生信息的修改 3.学生成绩信息的录入 4.学生信息的添加 5.恢复误删的学生信息 6.学生信息的删除 7.密码修改保存函数 8.学生信息的查询 9.密码修改函数 10.学生信息管理系统的菜单函数 #include "stdio.h" #include "malloc.h" #include "string.h" #include "stdlib.h" #inc

  • C语言实现歌曲信息管理系统

    本文实例为大家分享了C语言实现歌曲信息管理系统的具体代码,供大家参考,具体内容如下 系统功能:该系统以菜单方式工作,歌曲信息包括:歌名.演唱者.作词.作曲.所属专辑.出版时间.出版公司.试设计一歌厅歌曲管理系统,使之能提供以下功能:歌曲信息录入.修改.插入.删除功能:歌曲排序浏览功能:按歌名查询.按演唱者查询等功能. 完整的实现代码如下: #include "stdio.h" #include "stdlib.h" #include "string.h&q

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • c语言实现的货物管理系统实例代码(增加删除 查找货物信息等功能)

    复制代码 代码如下: #include <stdio.h>#include <stdlib.h>#include <string.h>#include <conio.h>        /*屏幕操作函数库*/ /*主管权限数据格式化*/#define HEADER1_zg "-----------------------------货物管理系统(主管)--------------------------------\n"#define H

  • C语言数据结构之学生信息管理系统课程设计

    本文实例为大家分享了学生信息管理系统设计的具体代码,供大家参考,具体内容如下 建立一个动态链表,链表中每一结点包括:学号.姓名.性别.年龄.成绩.程序能实现以下功能: 建立链表      显示链表      查找链表中是否存在某个元素,并显示这个元素的所有信息,若没有这个元素则显示"无此记录!"的信息.      删除链表中指定学号的结点.      在链表中指定的位置插入一个新结点(学号不能和其他结点重复). 要求:程序运行中,先显示实现以上功能所构成的菜单,然后根据选项调用相应程序

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • C语言职工信息管理系统源码

    本文实例为大家分享了C语言职工信息管理系统的具体代码,供大家参考,具体内容如下 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> struct worker { char ID[20];//工号 char name[20];//姓名 char sex[5];//性别 char born[20];//生日 char edu[20];//学历 char po

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

随机推荐