C語言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)
本文實(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í)有所幫助,也希望大家多多支持腳本之家。
- C語言實(shí)現(xiàn)超市信息管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)C語言版
- C語言職工信息管理系統(tǒng)源碼
- C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
- C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計(jì)
- C語言實(shí)現(xiàn)歌曲信息管理系統(tǒng)
- C語言單鏈表版學(xué)生信息管理系統(tǒng)
- C語言學(xué)生信息管理系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
- c語言實(shí)現(xiàn)的貨物管理系統(tǒng)實(shí)例代碼(增加刪除 查找貨物信息等功能)
- C語言學(xué)生信息管理系統(tǒng)小項(xiàng)目
相關(guān)文章
Linux網(wǎng)絡(luò)編程之socket文件傳輸示例
這篇文章主要介紹了Linux網(wǎng)絡(luò)編程之socket文件傳輸示例,對于基于Linux平臺的C程序員來說有一定的借鑒價(jià)值,需要的朋友可以參考下2014-08-08C語言高效實(shí)現(xiàn)向量循環(huán)移位
這篇文章主要為大家詳細(xì)介紹了C語言高效實(shí)現(xiàn)向量循環(huán)移位,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-03-03一篇文章帶你了解C++(STL基礎(chǔ)、Vector)
這篇文章主要為大家詳細(xì)介紹了C++ STL基礎(chǔ),vector向量容器使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能給你帶來幫助2021-08-08Qt利用ImageWatch實(shí)現(xiàn)圖片查看功能
Visual Studio有專門針對OpenCV開發(fā)的插件,名叫ImageWatch,圖片放大之后可以查看RGB的像素值。本文將利用這一查件實(shí)現(xiàn)圖片查看功能,需要的可以參考一下2022-04-04VSCODE調(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