欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)

 更新時(shí)間:2022年03月24日 15:57:53   作者:aqqwvfbukn  
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(shí)現(xiàn)超市信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

一、 需求分析

目前商品市場的商品信息玲瑯滿目,貨物信息的儲存以及更新就變的越來越重要。因此,我們小組設(shè)計(jì)的“超市信息管理程序”旨在解決貨物的信息和購買商品信息的儲存問題以及實(shí)現(xiàn)建立庫存信息,對購物車添加商品、結(jié)算并修改庫存等操作,同時(shí)也能實(shí)現(xiàn)對庫存信息的讀取和顯示。

我們設(shè)計(jì)的程序要實(shí)現(xiàn)以下要求:

1、 使用兩個(gè)不同的結(jié)構(gòu)體分別保存貨物信息和購物車中的商品信息,可在商品信息結(jié)構(gòu)體中嵌套貨物信息結(jié)構(gòu)體。
2、 將貨物信息寫入文件保存,在每次運(yùn)行時(shí),貨物信息可以從二進(jìn)制文件導(dǎo)入,并在結(jié)算后更新。
3、 建立一個(gè)鏈表保存購物車信息,可以實(shí)現(xiàn)商品的添加和當(dāng)前購物列表的顯示。
4、 系統(tǒng)制作完成后,能夠正常運(yùn)行。
具體目標(biāo)是在有限的商品信息中,程序能正常運(yùn)行。并能夠?qū)崿F(xiàn)查詢,增添,刪除和結(jié)算目的。

二、 總體設(shè)計(jì)

基本思路如下:

(1) 創(chuàng)建庫存信息:設(shè)計(jì)函數(shù)void establish();諸葛輸入貨物信息至結(jié)構(gòu)數(shù)組goods[NUM],在將數(shù)組寫入文件。
(2) 對購物車進(jìn)行相關(guān)操作:定義指針struct item-node*cart來保存鏈表,若用戶選擇向購物車添加商品,則新建一個(gè)節(jié)點(diǎn),將該商品信息存入節(jié)點(diǎn)中,再追加到鏈表的末尾。顯示購物信息時(shí),若指針不為空,逐一顯示節(jié)點(diǎn)內(nèi)容。
(3) 結(jié)算:先調(diào)用display()顯示購物清單,逐一讀取鏈表cart中每一個(gè)節(jié)點(diǎn)的數(shù)據(jù),計(jì)算價(jià)格,并修改結(jié)構(gòu)體數(shù)組goods。打印顯示總數(shù),并輸入實(shí)付金額,計(jì)算找零。再寫入文件。

遇到的問題以及解決方法如下:

(1) 由于是初次接觸未知的函數(shù)體,因此對于它們的使用方式還不能靈活運(yùn)用。(解決方法:查閱相應(yīng)的函數(shù)結(jié)構(gòu)體書籍。)
(2) 要做到“增刪查改”這一點(diǎn),需要有明確的思維圖示。(解決方法:查閱書籍,多次例題實(shí)踐,達(dá)到熟能生巧。)
(3) 每個(gè)程序之間的銜接問題。(解決方法:必須仔細(xì)編譯。)

程序框圖如下

三、詳細(xì)設(shè)計(jì)

程序由頭文件market.h和源文件market.c、establish.c、shoppingcart.c、calculate.c,四個(gè)源文件中具體包含的函數(shù)如下表所示。

代碼如下:

//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(" ? ?歡迎進(jìn)入超市管理系統(tǒng)\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請選擇數(shù)字進(jìn)行操作\n");
?? ?printf("----------------------\n");
?? ?printf("1.建立庫存信息\n");
?? ?printf("2.顯示所有商品\n");
?? ?printf("3.購物車\n");
?? ?printf("4.結(jié)算\n");
?? ?printf("5.退出\n");
?? ?printf("----------------------\n\n");
?? ?printf("請選擇對應(yīng)數(shù)字 1-5:");
?? ?while (1) {
?? ??? ?fflush(stdin);
?? ??? ?//gets(str);
?? ??? ?gets_s(str);
?? ??? ?select = atoi(str);
?? ??? ?if (select < 1 || select>5)
?? ??? ??? ?printf("輸入錯(cuò)誤,請重新輸入:");
?? ??? ?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("貨號 ? ? ? ? ?品名 ?單價(jià) ?庫存量\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("進(jìn)價(jià):");
?? ??? ?fflush(stdin);
?? ??? ?scanf("%f", &goods[i].in_price);
?? ??? ?printf("售價(jià):");
?? ??? ?fflush(stdin);
?? ??? ?scanf("%f", &goods[i].out_price);
?? ??? ?printf("數(shù)量:");
?? ??? ?fflush(stdin);
?? ??? ?scanf("%d", &goods[i].storage);
?? ??? ?printf("\n");
?? ?}
?? ?if ((fp = fopen("goods", "w")) == NULL) {
?? ??? ?printf("創(chuàng)建文件失敗。\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.顯示當(dāng)前購物列表\n");
?? ?printf("2.添加商品\n");
?? ?printf("3.退出\n");
?? ?printf("-----------------\n\n");
?? ?printf("請選擇對應(yīng)數(shù)字1-4\n");
?? ?while (1) {
?? ??? ?fflush(stdin);
?? ??? ?//gets(str);
?? ??? ?gets_s(str);
?? ??? ?select = atoi(str);
?? ??? ?if (select < 1 || select>3)
?? ??? ??? ?printf("輸入錯(cuò)誤,請重新輸入:\n");
?? ??? ?else
?? ??? ??? ?break;
?? ?}
?? ?return select;
}

void display() {
?? ?struct item_node * p , ?* cart;
?? ?if (p = NULL) {
?? ??? ?printf("購物車為空\n");
?? ??? ?return;
?? ?}
?? ?while (p != NULL) {
?? ??? ?printf("--------------------------\n");
?? ??? ?printf("貨號 ? ? ? ? ? 品名 ?單價(jià) ?數(shù)量\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("貨號 ? ? ? ? ? 品名 ?單價(jià) ?庫存量\n");
?? ??? ??? ??? ?printf("%10s%20s%7.2f%8d\n", goods[i].id, goods[i].brand, goods[i].out_price, goods[i].storage);
?? ??? ??? ??? ?printf("請輸入所需數(shù)量:");
?? ??? ??? ??? ?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èi)存申請失敗!\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("是否繼續(xù)購物?(Y/N)");
?? ??? ?fflush(stdin);
?? ??? ?choice2 = getchar();
?? ?} while (choice2 == 'Y' || choice2 == 'y');
}
//calculate.c
//結(jié)算
//#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++)//有個(gè)分號
?? ??? ?;
?? ?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("總計(jì)%7.2f", total);
?? ?printf("\n輸入實(shí)付金額:");
?? ?scanf("%f", &pay);
?? ?printf("實(shí)付: ? ? %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);
}

四、程序運(yùn)行結(jié)果測試與分析

系統(tǒng)制作完成后,顯示如下圖界面

建立庫存信息,界面如下

顯示庫存列表,界面如下

進(jìn)入購物車,界面如下

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

若商品不存在,界面如下

顯示當(dāng)前購物列表,界面如下

結(jié)算界面如下

五、結(jié)論與心得

超市的目標(biāo)是以優(yōu)質(zhì)的服務(wù)和品種齊全的商品,面向地區(qū)的所有消費(fèi)者,以使經(jīng)營者能夠?qū)崿F(xiàn)最大利潤,具體的目標(biāo)為:最方便的提供消費(fèi)者所需購買物品,詳細(xì)如實(shí)的記錄物品的品種分類,了解市場發(fā)展方向,及時(shí)修正進(jìn)貨信息,修改庫存管理方法,提高工作效率節(jié)余才力物力資源。
經(jīng)過努力,報(bào)告基本完成。從最初的茫然,到慢慢的進(jìn)入狀態(tài),再到對思路逐漸的清晰,從代碼的錄入到程序的調(diào)試,整個(gè)過程難以用語言來表達(dá)。
目前的缺點(diǎn)是無法進(jìn)行準(zhǔn)確及時(shí)的成本,毛利核算:成本管理永遠(yuǎn)是主管的主題,特別是現(xiàn)在面對多變的市場環(huán)境,如何及時(shí)的滿足客戶的需求,進(jìn)行科學(xué)合理的成本預(yù)測,成本分析及成本控制,及時(shí)準(zhǔn)確的為超市管理者提供決策依據(jù)信息。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++?Primer學(xué)習(xí)記錄之變量

    C++?Primer學(xué)習(xí)記錄之變量

    這篇文章主要為大家介紹了C++Primer之變量,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • Linux網(wǎng)絡(luò)編程之socket文件傳輸示例

    Linux網(wǎng)絡(luò)編程之socket文件傳輸示例

    這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之socket文件傳輸示例,對于基于Linux平臺的C程序員來說有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-08-08
  • C語言字符串快速壓縮算法代碼

    C語言字符串快速壓縮算法代碼

    這篇文章主要介紹了C語言字符串快速壓縮算法代碼,將字符串中連續(xù)出席的重復(fù)字母進(jìn)行壓縮,其主要的壓縮字段的格式為”字符重復(fù)的次數(shù)+字符”。有需要的小伙伴參考下吧。
    2015-03-03
  • C++之內(nèi)存泄漏排查詳解

    C++之內(nèi)存泄漏排查詳解

    這篇文章主要介紹了c++ 如何排查內(nèi)存泄漏,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-10-10
  • C語言高效實(shí)現(xiàn)向量循環(huán)移位

    C語言高效實(shí)現(xiàn)向量循環(huán)移位

    這篇文章主要為大家詳細(xì)介紹了C語言高效實(shí)現(xiàn)向量循環(huán)移位,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-03-03
  • 一篇文章帶你了解C++(STL基礎(chǔ)、Vector)

    一篇文章帶你了解C++(STL基礎(chǔ)、Vector)

    這篇文章主要為大家詳細(xì)介紹了C++ STL基礎(chǔ),vector向量容器使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助
    2021-08-08
  • Qt利用ImageWatch實(shí)現(xiàn)圖片查看功能

    Qt利用ImageWatch實(shí)現(xiàn)圖片查看功能

    Visual Studio有專門針對OpenCV開發(fā)的插件,名叫ImageWatch,圖片放大之后可以查看RGB的像素值。本文將利用這一查件實(shí)現(xiàn)圖片查看功能,需要的可以參考一下
    2022-04-04
  • C++哈希表之線性探測法實(shí)現(xiàn)詳解

    C++哈希表之線性探測法實(shí)現(xiàn)詳解

    線性探測法的優(yōu)點(diǎn):只要散列表未滿,總能找到一個(gè)不沖突的散列地址;缺點(diǎn):每個(gè)產(chǎn)生沖突的記錄被散列到離沖突最近的空地址上,從而又增加了更多的沖突機(jī)會
    2022-05-05
  • C++如何保存bmp圖片

    C++如何保存bmp圖片

    這篇文章主要介紹了C++如何保存bmp圖片問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)

    VSCODE調(diào)試RDKit內(nèi)核的方法步驟(C++)

    本文主要介紹了VSCODE調(diào)試RDKit內(nèi)核的方法步驟,這個(gè)過程可以分為三個(gè)部分:安裝 RDKit 所需環(huán)境,安裝 VSCode 相應(yīng)插件, 寫調(diào)試代碼編譯,感興趣的可以了解一下
    2021-08-08

最新評論