超市管理系统C语言

登录系统

# include  //头文件
# include  //字符串头文件
# include 

typedef struct in
{
    char id[20];//会员账号
    char key[20];//会员密码
    int sum;//会员积分
    struct in *next;
}member;

struct im//商品信息 以下是私有成员
{
    int id;//商品编号
    char name[50];//商品名称
    int stoct;//商品库存
}goods[1000];

member *registe(member *t);//注册;
void buy();

int main(void)
{
    member *head = (member *)malloc(sizeof(member));
    strcpy(head->id, "0"), strcpy(head->key, "0");//超市管理员
    head->next = NULL;
    int i, a, n, boo=0;

    while(1)
    {
        printf("注册会员请按1: \n");
        printf("会员直接登入请按2:\n");
        printf("推出请按0: \n");
        scanf("%d", &a);
        if (a == 0)
            break;
        if (a == 1)
            head = registe(head);
        else if (a == 2)
            boo = login(head);
        if (boo)
            break;
    }
    if (a && boo==1)
    {
        printf ("尊贵的会员,您登入成功!\n");
        buy();
    }
    printf ("已经安全推出\n");
    return 0;
}
member *registe(member *t)//注册
{
    printf ("现在开始会员注册\n\n");
    char id[20], key[20];
    member *p, *q, *r;
    p = t;
    while(p->next) p = p->next;//寻找链表中最后一个节点
    while(1)
    {
        printf ("请输入您注册的账号, 密码:\n");
        scanf ("%s %s", id, key);
        q = t;
        while(q)//判断该账号是否已经被注册
        {
            if (strcmp (q->id, id)==0)
                break;
            else q = q->next;
        }
        if (q == NULL)//账号没有注册
        {
            r = (member *)malloc(sizeof(member));
            r->next = NULL;
            p->next = r;
            strcpy (r->id, id);
            strcpy (r->key, key);
            r->sum = 1000;//会员默认的积分为1000;
            break;
        }
        else
            printf ("该账号已被注册,请重新输入账号,密码\n");
    }
    printf ("恭喜您,已经注册成功,现在可以登入了\n\n");

    return t;
}

int login (member *t)//登入
{
    printf ("现在开始登入");
    member *p;
    char id[20],key[20];
    int a, boo = 0;
    while (1)
    {
        printf ("请输入您的账号,密码: \n");
        scanf ("%s", id);
        if (strcmp(id, "#")==0)
            break;
        scanf ("%s", key);
        p = t;
        while (p)
        {
            if (strcmp(p->id, id)==0 &&strcmp(p->key, key)==0)
                break;
            else
                p = p->next;
        }
        if (p == NULL)
        {
            printf ("对不起,该账号和密码错误,请重新登入\n");
            printf ("推出登入请按#\n");
        }
        else if
            (strcmp(id, "0")!=0)
        {
            boo = 1;
            break;
        }
    }
    return boo;
}
void buy()
{
    char s[20];
    int n;
    int i;
    while(1)
    {
        printf ("请输入商品的编号或者名称:\n");
        scanf ("%s", s);
        if (strcmp(s, "0")==0)
            break;
        if (s[0]>='1' && s[0]<='9')
        {
            n = atoi(s);
            for (i=0; i<1000; i++)
            {
                if (goods[i].id == n)
                    break;
            }
            if (i > 1000)
            {
                printf ("商品不存在请重新输入,推出请按0\n");
            }
            else
            {
                printf ("您已购买成功。\n");
            }
        }
        else
        {
            for (i=0; i<1000; i++)
            {
                if (strcmp(goods[i].name, s)==0) //编译器的提示信息看了没,看了的话应该会发现是函数参数类型不匹配
                    break;
            }
            if (i > 1000)
            {
                printf ("商品不存在,请重新输入,推出请安0\n");
            }
            else
            {
                printf ("您购买成功.\n");
            }
        }

    }
}
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170

主菜单系统

#ifndef MARKET_H
#define MARKET_H

#include
#include
#include
#include
#include
#include
#define N 20

struct mar//该结构体为存储货物信息
{
    char ID[10];//货号
    char brand[20];//品名
    double inprice;//进价
    double outprice;//售价
    int storage;//存储量
};

struct node//该结构体为存储购物车中的信息
{
    struct mar buy;//货物信息
    int number;//购物的数量
    struct node *next; //指向下一个购物节点
};

struct mar goods[N];//结构体数组
struct node *cart;//购物车头结点

int menu();//打印主菜单函数
void WenJianKucun();//文件建立库存信息
void ShouJianKucun();//手动建立库存信息
void DisKucun();//显示库存信息函数
void ShopCart();//对购物车进行操作
int ShopCartMenu();//打印购物车菜单
void XianShi();//显示购物列表
void add();//在购物车里添加商品
void UpdateKu();//更新购物车信息函数
void  calculate();//计算所购商品价格并修改保存

#endif

/
int main()
{//主函数
    printf("\n\n");
printf("\t*******************************************************************\n");
printf("\t|                          欢迎使用                                 |\n");

printf("\t|                     惺惺惜惺惺小超市系统                             |\n");

printf("\t|                         祝您使用愉快                                |\n");

printf("\t*******************************************************************\n");

    int find=0;

    while(1)
    {
        switch(menu())
        {//menu()函数为输入选项
            case 1: WenJianKucun();
                    find=1;
                    break;//选项1 文件建立库存信息

            case 2: //if(find==0)
                    ShouJianKucun();
                    /*else
                    printf("库存信息已存在\n");*/
                    break;//选项2 手动建立库存信息

            case 3: DisKucun();
                    break;//选项3 显示库存信息函数

            case 4: ShopCart();
                    break;
                    //选项4 对购物车进行操作

            case 5: calculate();
                    break;//选项5 计算所购商品价格并修改保存

            case 6: system("cls");
                    printf("感谢您的使用,再见!\n");
                    Sleep(2000);
                    exit(0);
        }
    }
    return 0;
}

/
int menu()
{//打印主菜单函数
    char s[5];//输入的选项
    int n;//选项为整数
    printf("\n\n-----------------请选择下面的数字进行操作:-----------------\n");
    printf("----------------------------------------------------------------\n");
    printf("                      1\. 文件建立库存信息                       \n");
    printf("                      2\. 手动建立库存信息                       \n");
    printf("                      3\. 显示所有商品信息                       \n");
    printf("                      4\. 购物车                                 \n");
    printf("                      5\. 结算                                   \n");
    printf("                      6\. 退出程序                               \n");
    printf("----------------------------------------------------------------\n");
    printf("-------------------请选择对应数字1~6(1,2选其一)---------------\n");

    while(1)
    {
        fflush(stdin);//清空输入流
        gets(s);//输入一串字符串
        n=atoi(s);//字符串转化为整数

        if(n<1||n>6)//判断输入的选项是否正确
        printf("输入错误,请重新输入:\n");
        else//输入正确,结束循环
        break;
    }
    return n;//返回输入选项
}

/
void WenJianKucun()
{//文件建立库存信息
    FILE *fp;//定义文件指针
    if((fp=fopen("库存.txt","at"))==NULL)
    {//创建文件
        printf("创建文件失败\n");
        return ;
    }
    //向文件中写入信息
    fprintf(fp,"69011111 飘柔日常护理 12.00 15.00 30\n");
    fprintf(fp,"69021111 优酸乳 1.50 2.00 200\n");
    fprintf(fp,"69031111 红富士苹果 2.50 3.50 300\n");
    fprintf(fp,"69041111 晨光笔芯 0.70 1.00 150\n");
    fprintf(fp,"69051111 胡医生面膜 12.00 16.50 100\n");
    fclose(fp);//关闭文件
    printf("成功导入信息\n");
    return ;
}

/
void ShouJianKucun()
{//手动建立库存信息
    FILE *fp;//定义文件指针
    int i;
    int number;
    printf("请输入数量!");
      scanf("%d",&number);
    printf("请依次输入货物信息:\n");
    printf("--------------------------------------------\n");
    for(i=0;i3)//判断输入的选项是否正确
        printf("输入错误,请重新输入: \n");
        else//输入正确,结束循环
        break;
    }
    return n;//返回输入选项
}

/
void XianShi()
{//显示购物列表
    struct node *p; //定义节点指针
    p=cart;//把购物车链表赋给p
    FILE *fp1;//定义文件指针
    if((fp1=fopen("cart.txt","r"))==NULL)
    {//判断是否打开了文件
        printf("打开文件失败\n");
        //return ;
    }

    if(p==NULL)
    {//购物车为空
        printf("目前购物车为空:");
        return ;
    }
    else
    {//购物车不为空
        while(p!=NULL)
        {//把购物车物品不断减一,直到为空
            printf("--------------------------------------------\n");
            printf("货号       品名           单价    数量\n");
            printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);  //输出物品信息
            p=p->next;
        }
    }
    fclose(fp1);//关闭文件
    return ;
}

/
void add()
{//在购物车里添加商品
    FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件
    struct node *p1,*p,*p2;//定义节点指针
    int i,n;//n表示商品数量
    char s[20];//表示货号或者品名
    char choice1[20],choice2[20];//选择项(y继续,n继续)

    do{
        printf("输入所需物品的名称或货号:\n");
        fflush(stdin);//清空输入流
        gets(s);//输入货号或者品名
        if((fp=fopen("库存.txt","r"))==NULL)
        {//打开文件kucun
            printf("打开文件失败\n");
            continue;
        }
        for(i=0;i0)//找输入对应的商品
            {
                printf("已找到所需商品:\n");
                printf("--------------------------------------------\n");
                printf("货号       品名           单价    数量\n");
                printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//输出所需物品信息

                printf("请输入所需商品数量: ");
                scanf("%d",&n);//商品数量
                if(n>goods[i].storage)
                {//判断是否还可以购买不
                    printf("该商品库存不足\n");
                    break;
                }
                printf("\n是否购买此商品?(Y/N)\n");
                fflush(stdin);//清空输入流
                scanf("%s",choice1);//输入一个选项
                if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0)
                {//输入y/Y表示购买此商品

                    if(p==NULL)
                    {//分配内存失败
                        printf("内存申请失败!\n");
                        exit(1);//退出
                    }
                    p->number=n;//商品数量
                    p->buy=goods[i];//货物信息
                    p->next=NULL;
                    p1=cart;//把头结点赋给p1
                    if(cart==NULL)//头结点为空
                    cart=p;//把节点赋值给头结点
                    else
                    {
                        while(p1->next!=NULL)
                        p1=p1->next;//把链表循环到尾部
                        p->next=p1->next;
                        p1->next=p;//把新节点p挂在链表尾部
                    }
                }
                else
                printf("输入错误\n");
                break;//找到商品结束循环
            }
        }
        if(i==N)//循环完毕还没找到对应商品
        printf("未找到所需物品\n");
        fclose(fp);//关闭文件

        UpdateKu();//更新库存信息函数
        printf("是否继续购物?(Y/N)\n");
        fflush(stdin);//清空输入流
        scanf("%s",choice2);//输入选项
        if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0)
        {printf("放弃购买,返回菜单!\n");

        }
    }while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y继续循环
        menu();
        calculate();
        return ;

}

/
//更新购物车信息函数
void UpdateKu()
{
    FILE *fp;
    struct node *p;
    if((fp=fopen("cart.txt","w"))==NULL)
    {//判断文件是否创建失败
        printf("创建文件失败。\n");
        return ;
    }

    p=cart;//把购物车链表赋给p2
    while(p!=NULL)
    {
    //  fprintf(fp1,"货号       品名      单价    库存量\n");
        //把货物信息写进文件
        fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);
        p=p->next;//指向下一个节点
    }
    fclose(fp);//关闭文件

    return ;
}

void calculate()
{//计算所购商品价格并修改保存
    struct node *p;
    p=cart;//把购物车(cart)链表赋给p
    double sum=0;//购买商品应付钱数
    double pay;//购买商品实付钱数
    FILE *fp;//定义文件指针
    int i;
    printf("以下是购物清单:\n");
    XianShi();//调用函数显示购物列表信息

    if((fp=fopen("库存.txt","r"))==NULL)
    {//打开文件
        printf("打开文件失败\n");
        return ;
    }

    for(i=0;ibuy.outprice*p->number;//计算应付钱数
        for(i=0;ibuy.ID)==0)
            {//找到对应商品
                goods[i].storage=goods[i].storage-p->number;//库存量变化
                break;
            }
        }
        p=p->next;//指向下一个节点
    }

    printf("总计:%-8.3f\n",sum);//输出购买物品共需多少钱
    printf("输入实付金额:");
    scanf("%lf",&pay);
    printf("实付:  %-8.3f    找零:    %8.3f\n",pay,pay-sum);

    if((fp=fopen("库存.txt","w"))==NULL)
    {//打开文件
        printf("写入文件失败\n");
        return ;
    }
    for(i=0;i
image
#ifndef MARKET_H
#define MARKET_H

#include
#include
#include
#include
#include
#include
#define N 20

struct mar//该结构体为存储货物信息
{
    char ID[10];//货号
    char brand[20];//品名
    double inprice;//进价
    double outprice;//售价
    int storage;//存储量
};

struct node//该结构体为存储购物车中的信息
{
    struct mar buy;//货物信息
    int number;//购物的数量
    struct node *next; //指向下一个购物节点
};

struct mar goods[N];//结构体数组
struct node *cart;//购物车头结点

int menu();//打印主菜单函数
void WenJianKucun();//文件建立库存信息
void ShouJianKucun();//手动建立库存信息
void DisKucun();//显示库存信息函数
void ShopCart();//对购物车进行操作
int ShopCartMenu();//打印购物车菜单
void XianShi();//显示购物列表
void add();//在购物车里添加商品
void UpdateKu();//更新购物车信息函数
void  calculate();//计算所购商品价格并修改保存

#endif

/
int main()
{//主函数
    printf("\n\n");
printf("\t*******************************************************************\n");
printf("\t|                          欢迎使用                                 |\n");

printf("\t|                     惺惺惜惺惺小超市系统                             |\n");

printf("\t|                         祝您使用愉快                                |\n");

printf("\t*******************************************************************\n");

    int find=0;

    while(1)
    {
        switch(menu())
        {//menu()函数为输入选项
            case 1: WenJianKucun();
                    find=1;
                    break;//选项1 文件建立库存信息

            case 2: //if(find==0)
                    ShouJianKucun();
                    /*else
                    printf("库存信息已存在\n");*/
                    break;//选项2 手动建立库存信息

            case 3: DisKucun();
                    break;//选项3 显示库存信息函数

            case 4: ShopCart();
                    break;
                    //选项4 对购物车进行操作

            case 5: calculate();
                    break;//选项5 计算所购商品价格并修改保存

            case 6: system("cls");
                    printf("感谢您的使用,再见!\n");
                    Sleep(2000);
                    exit(0);
        }
    }
    return 0;
}

/
int menu()
{//打印主菜单函数
    char s[5];//输入的选项
    int n;//选项为整数
    printf("\n\n-----------------请选择下面的数字进行操作:-----------------\n");
    printf("----------------------------------------------------------------\n");
    printf("                      1\. 文件建立库存信息                       \n");
    printf("                      2\. 手动建立库存信息                       \n");
    printf("                      3\. 显示所有商品信息                       \n");
    printf("                      4\. 购物车                                 \n");
    printf("                      5\. 结算                                   \n");
    printf("                      6\. 退出程序                               \n");
    printf("----------------------------------------------------------------\n");
    printf("-------------------请选择对应数字1~6(1,2选其一)---------------\n");

    while(1)
    {
        fflush(stdin);//清空输入流
        gets(s);//输入一串字符串
        n=atoi(s);//字符串转化为整数

        if(n<1||n>6)//判断输入的选项是否正确
        printf("输入错误,请重新输入:\n");
        else//输入正确,结束循环
        break;
    }
    return n;//返回输入选项
}

/
void WenJianKucun()
{//文件建立库存信息
    FILE *fp;//定义文件指针
    if((fp=fopen("库存.txt","at"))==NULL)
    {//创建文件
        printf("创建文件失败\n");
        return ;
    }
    //向文件中写入信息
    fprintf(fp,"69011111 飘柔日常护理 12.00 15.00 30\n");
    fprintf(fp,"69021111 优酸乳 1.50 2.00 200\n");
    fprintf(fp,"69031111 红富士苹果 2.50 3.50 300\n");
    fprintf(fp,"69041111 晨光笔芯 0.70 1.00 150\n");
    fprintf(fp,"69051111 胡医生面膜 12.00 16.50 100\n");
    fclose(fp);//关闭文件
    printf("成功导入信息\n");
    return ;
}

/
void ShouJianKucun()
{//手动建立库存信息
    FILE *fp;//定义文件指针
    int i;
    int number;
    printf("请输入数量!");
      scanf("%d",&number);
    printf("请依次输入货物信息:\n");
    printf("--------------------------------------------\n");
    for(i=0;i3)//判断输入的选项是否正确
        printf("输入错误,请重新输入: \n");
        else//输入正确,结束循环
        break;
    }
    return n;//返回输入选项
}

/
void XianShi()
{//显示购物列表
    struct node *p; //定义节点指针
    p=cart;//把购物车链表赋给p
    FILE *fp1;//定义文件指针
    if((fp1=fopen("cart.txt","r"))==NULL)
    {//判断是否打开了文件
        printf("打开文件失败\n");
        //return ;
    }

    if(p==NULL)
    {//购物车为空
        printf("目前购物车为空:");
        return ;
    }
    else
    {//购物车不为空
        while(p!=NULL)
        {//把购物车物品不断减一,直到为空
            printf("--------------------------------------------\n");
            printf("货号       品名           单价    数量\n");
            printf("%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);  //输出物品信息
            p=p->next;
        }
    }
    fclose(fp1);//关闭文件
    return ;
}

/
void add()
{//在购物车里添加商品
    FILE *fp,*fp1;//fp表示kucun文件,fp1表示cart文件
    struct node *p1,*p,*p2;//定义节点指针
    int i,n;//n表示商品数量
    char s[20];//表示货号或者品名
    char choice1[20],choice2[20];//选择项(y继续,n继续)

    do{
        printf("输入所需物品的名称或货号:\n");
        fflush(stdin);//清空输入流
        gets(s);//输入货号或者品名
        if((fp=fopen("库存.txt","r"))==NULL)
        {//打开文件kucun
            printf("打开文件失败\n");
            continue;
        }
        for(i=0;i0)//找输入对应的商品
            {
                printf("已找到所需商品:\n");
                printf("--------------------------------------------\n");
                printf("货号       品名           单价    数量\n");
                printf("%-11s%-15s%-8.3f%-7d\n",goods[i].ID,goods[i].brand,goods[i].outprice,goods[i].storage);//输出所需物品信息

                printf("请输入所需商品数量: ");
                scanf("%d",&n);//商品数量
                if(n>goods[i].storage)
                {//判断是否还可以购买不
                    printf("该商品库存不足\n");
                    break;
                }
                printf("\n是否购买此商品?(Y/N)\n");
                fflush(stdin);//清空输入流
                scanf("%s",choice1);//输入一个选项
                if(strcmp(choice1,"Y")==0||strcmp(choice1,"y")==0)
                {//输入y/Y表示购买此商品

                    if(p==NULL)
                    {//分配内存失败
                        printf("内存申请失败!\n");
                        exit(1);//退出
                    }
                    p->number=n;//商品数量
                    p->buy=goods[i];//货物信息
                    p->next=NULL;
                    p1=cart;//把头结点赋给p1
                    if(cart==NULL)//头结点为空
                    cart=p;//把节点赋值给头结点
                    else
                    {
                        while(p1->next!=NULL)
                        p1=p1->next;//把链表循环到尾部
                        p->next=p1->next;
                        p1->next=p;//把新节点p挂在链表尾部
                    }
                }
                else
                printf("输入错误\n");
                break;//找到商品结束循环
            }
        }
        if(i==N)//循环完毕还没找到对应商品
        printf("未找到所需物品\n");
        fclose(fp);//关闭文件

        UpdateKu();//更新库存信息函数
        printf("是否继续购物?(Y/N)\n");
        fflush(stdin);//清空输入流
        scanf("%s",choice2);//输入选项
        if(strcmp(choice2,"y")!=0&&strcmp(choice2,"Y")!=0)
        {printf("放弃购买,返回菜单!\n");

        }
    }while(strcmp(choice2,"y")==0||strcmp(choice2,"Y")==0);//y/Y继续循环
        menu();
        calculate();
        return ;

}

/
//更新购物车信息函数
void UpdateKu()
{
    FILE *fp;
    struct node *p;
    if((fp=fopen("cart.txt","w"))==NULL)
    {//判断文件是否创建失败
        printf("创建文件失败。\n");
        return ;
    }

    p=cart;//把购物车链表赋给p2
    while(p!=NULL)
    {
    //  fprintf(fp1,"货号       品名      单价    库存量\n");
        //把货物信息写进文件
        fprintf(fp,"%-11s%-15s%-8.3f%-7d\n",p->buy.ID,p->buy.brand,p->buy.outprice,p->number);
        p=p->next;//指向下一个节点
    }
    fclose(fp);//关闭文件

    return ;
}

void calculate()
{//计算所购商品价格并修改保存
    struct node *p;
    p=cart;//把购物车(cart)链表赋给p
    double sum=0;//购买商品应付钱数
    double pay;//购买商品实付钱数
    FILE *fp;//定义文件指针
    int i;
    printf("以下是购物清单:\n");
    XianShi();//调用函数显示购物列表信息

    if((fp=fopen("库存.txt","r"))==NULL)
    {//打开文件
        printf("打开文件失败\n");
        return ;
    }

    for(i=0;ibuy.outprice*p->number;//计算应付钱数
        for(i=0;ibuy.ID)==0)
            {//找到对应商品
                goods[i].storage=goods[i].storage-p->number;//库存量变化
                break;
            }
        }
        p=p->next;//指向下一个节点
    }

    printf("总计:%-8.3f\n",sum);//输出购买物品共需多少钱
    printf("输入实付金额:");
    scanf("%lf",&pay);
    printf("实付:  %-8.3f    找零:    %8.3f\n",pay,pay-sum);

    if((fp=fopen("库存.txt","w"))==NULL)
    {//打开文件
        printf("写入文件失败\n");
        return ;
    }
    for(i=0;i

你可能感兴趣的:(超市管理系统C语言)