c语言 商品管理系统

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 商品管理系统相关的知识,希望对你有一定的参考价值。

C语言课程设计

题目:商店销售管理系统。

功能:屏幕上出现一个界面,让售货员输入商品编号或者商品名称,可以进货,进货后商品库存同时增加。顾客买走商品后,售货员输入商品编号或者商品名称,可以生成销售清单,统计本次销售总的价钱,同时库存数量相应减少。完成前面的基本功能后,还可以完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。
分步实施:
1、 初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数;
2、建立一个文件,将相关的信息写入文件中并能显示于屏幕上;
3、能按商品编号进货和销售;
4、进一步要求:完成增加新的商品或删除不需要的商品的功能,以及每天销售统计功能等。
要求:1、用C语言实现程序设计;
2、利用结构体数组实现信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
对链表的读写修改操作都没问题,但是对文件的读写操作,以及把文件内的数据读入链表内实在不会!!!

如果没有时间写完全部程序也没关系,只用把对文件处理这一段注释清晰一点就可以了! 小弟在此谢过各位路过的大神!!!!

参考技术A #include"stdio.h"
#include <conio.h>
#include <stdlib.h>
//#include"FILE.h"
typedef struct shangpin

char name[20];
int biaohao;
int shuliang;
double jiage;
Node;
typedef struct list

Node data;
struct list *next;
List ,*Slist;
void charu(Slist &s,Node x);

int caidan()

int i;
while(1)

system("cls");
printf("\n\t\t\t 商店销售管理系统\n\n");
printf("\t\t **********************************************\n\n");
printf("\t\t 1--添加商品 2--出售商品\n\n");
printf("\t\t 3--删除商品 4--显示商品\n\n");
printf("\t\t 5--查找商品 0--退出系统\n\n");
printf("\t\t **********************************************\n\n");
printf("请选择(0-5): ");
scanf("%d",&i);
if(i<6&&i>=0)break;

return i;


void chushihua(Slist &s)

Slist head=new List;
head->next=NULL;
s=head;

void tianjia(Slist &s)

Node x;
Slist r,p,q;
int i=0;
r=new List;
r->next=NULL;
q=p=s->next;
while(q)

i++;
q=q->next;

printf("请输入商品名称、数量以及价格: ");
scanf("%s%d%lf",x.name,&x.shuliang,&x.jiage);
x.biaohao=i+1;
r->data=x;
s->next=r;
r->next=p;

void duchu(Slist &s)

FILE *cp;//定义文件指针
int i=0;
Node x;

if((cp=fopen("shangpin.txt","a+"))==NULL)//打开文件
printf("文件打开失败!");return ;
fseek(cp,0L,SEEK_SET);//将文件指针移动到文件开头
while(!feof(cp))

fscanf(cp,"%s%d%lf",x.name,&x.shuliang,&x.jiage);//读取文件的内容
x.biaohao=++i;
charu(s,x);//把读到的数据插入到链表上

fclose(cp);//关闭文件

void charu(Slist &s,Node x)

Slist r,p=s->next;
r=new List;
r->next=NULL;
r->data=x;
s->next=r;
r->next=p;

void xieru(Slist s)

FILE *cp;//同上
Slist p=s->next;
if((cp=fopen("shangpin.txt","w+"))==NULL)
printf("文件打开失败!");return ;//同上
while(p)

fprintf(cp,"%s %d %.2lf ",p->data.name,p->data.shuliang,p->data.jiage);//写入文件中,并且以空格隔开
p=p->next;

fclose(cp);//关闭文件

Slist chazhao(Slist s,int m)

Slist p=s->next;
if(p==0)return 0;
if(p->next==0)return p;
if(p->data.biaohao==m)return p;
while(p->next)

if(p->next->data.biaohao==m)return p;
p=p->next;

return 0;

void xianshi(Slist s)

Slist p;
p=s->next;
printf("%10s%20s%10s%10s\n","商品编号","商品名称","商品数量","商品价格");
while(p)

printf("%10d%20s%10d%10.2f\n",p->data.biaohao,p->data.name,p->data.shuliang,p->data.jiage);
p=p->next;



void shanchu(Slist &s)



void chushou(Slist &s)



void main()

int num;
Slist s;
chushihua(s);
duchu(s);
num=caidan();
while(1)


switch(num)

case 0:exit(0);break;
case 1:tianjia(s);break;
case 2:chushou(s);break;
case 3:shanchu(s);break;
case 4:xianshi(s);break;
case 5:chazhao(s,1);break;

printf("按任意键继续!");
getch();
num=caidan();

xieru(s);


//有些函数我在没写啊,你自己写写吧,文件的读取和写入,还有链表的创建我都给你写好了,也就是上面的1,4我都写好了,
//包括了文件,剩下的2,3,5,你自己试试,并且我也给你写了一个查找函数,你看看能用不!本回答被提问者和网友采纳
参考技术B 我也在做这个题目,你现在会了吗,帮帮我,谢谢了 参考技术C 我们最近在用C#编辑进出库管理系统,应该和你的系统差不多。如果需要,给我发邮件,zycrzqsd@163.com.我们一起互相交流。

C语言实验9_结构体

C语言实验9_结构体

实验09(01)结构体

题目描述
根据实验讲义实验九中的第 1 题的内容和数据完成程序设计。设计结构体,用于存储商品的
信息,包含商品编号、商品名称、商品价格以及商品折扣信息。设计函数 input,实现商品
数据的输入。设计函数 display,实现商品信息的输出。在主函数 main 中定义 keyboard 结构
体变量,用来处理商品键盘的数据。定义一个结构体数组,用于存储 3 种电器商品的信息。
输入描述
输入商品的编号、名称、价格以及折扣信息
输出描述
输出商品的编号、名称、价格、折扣以及实际价格信息
输入样例
1010 键盘 89.50 0.85
1021 冰箱 1024.00 0.95
1022 空调 2058.50 0.90
1023 电视 3001.88 0.95
输出样例
编号:1010 名称:键盘 价格:89.50 折扣:0.85 实际价格:76.08
编号:1021 名称:冰箱 价格:1024.00 折扣:0.95 实际价格:972.80
编号:1022 名称:空调 价格:2058.50 折扣:0.90 实际价格:1852.65
编号:1023 名称:电视 价格:3001.88 折扣:0.95 实际价格:2851.79
#include <stdio.h>
#include <conio.h>
typedef struct _PRODUCR

    int number;
    char name[20];
    double price;
    double discount;
 PRODUCT, *PPRODUCT;
void input(PRODUCT *p);
void input(PRODUCT *p)

    scanf("%d", &p->number);
    scanf("%s", p->name);
    scanf("%lf", &p->price);
    scanf("%lf", &p->discount);

void display(PRODUCT *p)

    printf("编号:%d ", p->number);
    printf("名称:%s ", p->name);
    printf("价格:%.2lf ", p->price);
    printf("折扣:%.2lf ", p->discount);
    printf("实际价格:%.2lf\\n", p->discount * p->price);

int main() //主函数

    int i;
    PRODUCT kyeboard; //请定义结构体类型 PRODUCT
    PRODUCT ElecDevice[3];
    input(&kyeboard); //请定义函数 input
    for (i = 0; i < 3; i++)
    
        input(&ElecDevice[i]);
    
    display(&kyeboard); //请定义函数 display
    for (i = 0; i < 3; i++)
    
        display(&ElecDevice[i]);
    
    return 0;

实验09(02)链表

题目描述
(1)利用链表结构(PLAY_LIST),为某媒体播放器建立一个播放列表(playList),该链表的每一
个节点包括:歌曲编号(number)、歌曲名称(name)、歌手姓名(artist)。
(2)建立 4 个函数,以实现对播放列表操作。函数的原型如下:
PLAY_LIST* createList(); /*创建播放列表*/
PLAY_LIST* insertItem(PLAY_LIST* pPlayList,
PLAY_LIST* pNewPlayList);
/*在播放列表中添加一首歌曲*/
PLAY_LIST* deleteItem(PLAY_LIST* pPlayList,
int iItemNumber);
/*在播放列表中删除编号为 iItemNumber 的歌曲*/
void displayList(PLAY_LIST* pPlayList); /*显示整个播放列表中的所有信息*/
(3)在主函数中定义一个链表 playList。A)利用函数 createList 创建播放列表 playList,并在
其节点上依次存储编号为 1100、1102、1103 的 3 首歌曲,并调用 displayList 函数显示此时
整个播放列表中的所有信息。B)调用insertItem函数将编号为1101的歌曲添加到playList中,
并显示整个播放列表中的所有信息。C) 调用 deleteItem 函数将编号为 1102 的歌曲从 playList
中删除,并显示整个播放列表中的所有信息。
输入描述
输入 4 首歌曲的信息
输出描述
输出链表中所有歌曲的信息
显示列表信息时,每一个成员占 10 列,并左对齐。
即:
歌曲编号(10 列)歌曲名称(10 列) 歌手姓名(10 列)
1100(10 列) 落叶归根(10 列) 王力宏(10 列)
输入样例
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
1102 往事随风 齐秦
输出样例
创建列表后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
插入一条信息后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1102 往事随风 齐秦
1103 天空 王菲
删除一条信息后:
歌曲编号 歌曲名称 歌手姓名
1100 落叶归根 王力宏
1101 风吹麦浪 李健
1103 天空 王菲
#include <stdio.h>
#include <stdlib.h>
struct PLAY_LIST

    int number;
    char name[25];
    char artist[25];
    struct PLAY_LIST *next;
;
int n;
struct PLAY_LIST *p;
void main()

    struct PLAY_LIST *head;
    struct PLAY_LIST *createList();
    struct PLAY_LIST *insertItem(PLAY_LIST * head, PLAY_LIST * pNewPlayList);
    struct PLAY_LIST *deleteItem(PLAY_LIST * pPlayList, int iItemNumber);
    void displayList(struct PLAY_LIST * head);
    head = createList();
    char a[3][20] = "歌曲编号", "歌曲名称", "歌手姓名";
    printf("创建列表后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
    displayList(head);
    insertItem(head, p);
    printf("插入一条信息后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
    displayList(head);
    deleteItem(head, p->number);
    printf("删除一条信息后:\\n%-10s%-10s%-10s\\n", a[0], a[1], a[2]);
    displayList(head);

struct PLAY_LIST *createList(void)

    struct PLAY_LIST *head;
    struct PLAY_LIST *p1, *p2;
    n = 0;
    p1 = p2 = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
    scanf("%d %s %s", &p1->number, &p1->name, &p1->artist);
    head = NULL;
    while (p1->number != 0)
    
        n++;
        if (n == 1)
            head = p1;
        else
            p2->next = p1;
        p2 = p1;
        p1 = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
        if (n == 3)
        
            break;
        
        scanf("%d %s %s", &p1->number, &p1->name, &p1->artist);
    
    p = (struct PLAY_LIST *)malloc(sizeof(struct PLAY_LIST));
    scanf("%d %s %s", &p->number, &p->name, &p->artist);
    p2->next = NULL;
    free(p1);
    return (head);

void displayList(struct PLAY_LIST *head)

    struct PLAY_LIST *p;
    p = head;
    if (head != NULL)
    
        do
        
            printf("%-10d%-10s%-10s\\n", p->number, p->name, p->artist);
            p = p->next;
         while (p != NULL);
    
    else
        printf("空链表!\\n");

struct PLAY_LIST *insertItem(PLAY_LIST *head, PLAY_LIST *pNewPlayList)

    struct PLAY_LIST *p0, *p1, *p2;
    p1 = head;
    p0 = pNewPlayList;
    if (head == NULL)
    
        head = p0;
        p0->next = NULL;
    
    else
    
        while ((p0->number > p1->number) && (p1->next != NULL))
        
            p2 = p1;
            p1 = p1->next;
        
        if (p0->number <= p1->number)
        
            if (head == p1)
                head = p0;
            else
                p2->next = p0;
            p0->next = p1;
        
        else
        
            p1->next = p0;
            p0->next = NULL;
        
    
    return head;

struct PLAY_LIST *deleteItem(PLAY_LIST *head, int iItemNumber)

    struct PLAY_LIST *p1, *p2;
    if (head == NULL)
    
        printf("\\n 链表为空!\\n");
        return (head);
    
    p1 = head;
    while (iItemNumber != p1->number && p1->next != NULL)
    
        p2 = p1;
        p1 = p1->next;
    
    if (iItemNumber == p1->number)
    
        if (p1 == head)
            head = p1->next;
        else
            p2->next = p1->next;
    
    return head;

实验09(03)任意位置显示一个中文

题目描述
参照实验九中第 4 题。
(1)在一个显示系统中,需要在任意位置显示一个中文或者英文字符,为此请根据表 9-4
设计一种数据结构。其中当 label=0 时,content 的 16 位数据中低 8 位为英文字符,高 8 位
的数据丢弃。当 label=1 时, content 的 16 位数据为中文数据。
(2)建立 2 个函数,函数的原型如下:
PACK_DATA packData(unsigned uRow,unsigned uCol, unsigned uLabel,char * pContent); /*封装数
据,即将中英文字符按照表 9-4 方式存储*/
void unpackData(PACK_DATA data); /*将封装的数据提取出来,并安装要求显示在屏幕上。*/
(3)考虑字符(content)可能是英文也可能是中文的情况。在主函数中,2 次调用函数 packData,
将信息 1(在第 2 行第 3 列显示英文字符 X)和信息 2(在第 3 行第 4 列显示中文字符”中”)
封装好;然后 2 次调用函数 unpackData 将上一步封装好的数据提取并显示出来。
输入描述
输入显示字符的信息。第一个数据为行号,第二个数据为列号,第三个数据为中英文标志,
第 4 部分数据为显示的字符。
输出描述
正确的地方显示字符
输入样例
1 2 1 中
输出样例
(一个空格,从第 2 列开始显示)中
#include <stdio.h>
typedef struct _PACK_DATA

    unsigned int uRow : 3;
    int uCol : 3;
    unsigned char uLabel : 2;
    unsigned short uContent : 16;
 PACK_DATA, *PPACK_DATA;
PACK_DATA packData(unsigned uRow, unsigned uCol, unsigned uLabel, char *pContent)

    PACK_DATA pack_data;
    pack_data.uRow = uRow;
    pack_data.uCol = uCol;
    pack_data.uLabel = uLabel;
    pack_data.uContent = *(unsigned short *)pContent;
    return (pack_data);

void unpackData(PACK_DATA data)

    int i;
    char temp[3];
    for (i = 0; i < data.uRow; i++)
        printf("\\n");
    for (i = 0; i < data.uCol; i++)
        printf(" ");
    if (data.uLabel == 1)
    
        temp[0] = data.uContent & 0xff;
        temp[1] = (data.uContent >> 8) & 0xff;
        temp[2] = '\\0';
        printf("%s\\n", temp);
    
    else
        printf("%c\\n", (char)data.uContent);

int main()

    unsigned a, b, c;
    char A[10];
    PACK_DATA data;
    scanf("%d %d %d %s", &a, &b, &c, A);
    data = packData(a, b, c, A);
    unpackData(data);
    return 0;

实验09(04)枚举类型

 题目描述
编写程序,根据用户输入的数字(1~12),输出相应的月份名。要求:用枚举类型实现。
输入描述
输入 1~12
输出描述
输出 January~December
输入样例
1
2
13
输出样例
January
February
Error!
#include <stdio.h>
int main()

    enum Mouths
    
        Jan,
        Feb,
        Mar,
        Apr,
        May,
        Jun,
        Jul,
        Aug,
        Sep,
        Oct,
        Nov,
        Dec
    ;
    enum Mouths i;
    scanf("%d", &i);
    if (i > 12)
    
        printf("Error!");
    
    else
    
        switch (i - 1)
        
        case Jan:
            printf("January\\n");
            break;
        case Feb:
            printf("February\\n");
            break;
        case Mar:
            printf("March\\n");
            break;
        case Apr:
            printf("April\\n");
            break;
        case May:
            printf("May\\n");
            break;
        case Jun:
            printf("June\\n");
            break;
        case Jul:
            printf("July\\n");
            break;
        case Aug:
            printf("August\\n");
            break;
        case Sep:
            printf("September\\n");
            break;
        case Oct:
            printf("October\\n");
            break;
        case Nov:
            printf("November\\n");
            break;
        case Dec:
            printf("December\\n");
            break;
        default:
            printf("error!\\n");
            break;
        
    
    return 0;

以上是关于c语言 商品管理系统的主要内容,如果未能解决你的问题,请参考以下文章

C语言实现学校超市管理系统

C语言课程设计

C++ 超市商品管理系统

C/C++超市商品管理系统[2023-05-24]

复盘一个商品期货的通用模型

商品信息管理系统(高级语言程序设计)基于双向链表的存储结构