超市管理系统

超市管理系统

一、项目简介:

1.实现对后勤管理人员帐号的基本操作以及货物的增加,删除,查找,更新库存等操作。

2.通过代码实现对会员账号的创建,登录,修改,查找,以及消费记录的存储。

3.实现管理员对后勤人员及会员账户的管理。

4.实现基本的结账,会员积分功能

二、代码分块实现

一、以下是自己封装的一些工具函数

//工具函数
char get_cmd(char start,char end)
{
    assert(start <= end);
    puts("--------------------");
    printf("请输入指令:");
    for(;;)
    {
        char cmd = getch();
        if(start <= cmd && cmd <= end)
        {
            printf("%c\n",cmd);
            return cmd;
        }
    }
}
//清理字符串
char* get_str(char* str,size_t size)
{
    size_t len = strlen(fgets(str,size,stdin));

    if('\n' == str[len-1])
        str[len-1] = '\0';
    else
        while('\n' != getchar());
    return str;
}
//获取密码
char* get_passwd(char* passwd,size_t size)
{
    int i=0;
    while(i<size-1)
    {
        passwd[i]=getch();

        if(127==passwd[i])
        {
            if(i>0)
            {
                i--;
                printf("\b \b");
            }
            continue;
        }
        i++;
        printf("*");
    }
    passwd[size-1]='\0';
    printf("\n");
    return passwd;
}
//显示
void show_msg(const char* msg,float sec)
{
    printf("\033[01;32m%s\033[00m\n",msg);
    usleep(sec*1000000);
}
//任意键继续
void anykey_continue(void)
{
    stdin ->_IO_read_ptr = stdin->_IO_read_end;
    puts("按任意键继续...");
    getch();
}

二、创建数据结构

//VIP账户信息
typedef struct User
{
    char name[20];//vip用户名
    char phone[12];//手机号
    char passwd[7];//密码
    int pay_jifen;//积分
    char level;
size_t cnt;
User cons[CONS];
}User;
//后勤管理人员
typedef struct User1
{
    char name2[20];//后勤用户名
    char phone2[12];//手机号
    char passwd2[7];//密码
    char lock;
}User1;
size_t cnt2;
User1 cons2[CONS2];
//收款记录
typedef struct Record
{
    double record_money;   //金额
    char payment_phone[12];    //账号
}Record;
size_t cont;
Record con[CON];
//存数商品信息的结构体
typedef struct MarketGoods
{
    char goods_id[30];//商品编号
    char goods_name[30];//商品名称
    double goods_price; //商品价格
    int goods_amount;//商品总数目
    int goods_remain;//商品剩余数目
    char pay_id[30];//购买编号
} MarketGoods;
MarketGoods goods[COUNT];
int count=0;//全局变量,用于保存实际上有多少种商品
int pay_jifen = 0;//用于每次结帐计算积分

三、VIP模块

/*********vip管理模块*********/
//vip添加函数
void add(void)
{
    if(cnt >= 100)
    {
        show_msg("VIP已满,添加失败!",0.7);
        return;
    }
    printf("请输入账号:");
    get_str(cons[cnt].name,sizeof(cons[cnt].name)); 
    printf("请输入密码:");
    get_passwd(cons[cnt].passwd,sizeof(cons[cnt].passwd));
    //再次输入密码
    char repasswd[7];
    printf("请再次输入密码:");
    get_passwd(repasswd,sizeof(repasswd));
    //确认密码
    if(strcmp(cons[cnt].passwd,repasswd))
    {
        show_msg("两次输入的密码不一致,添加失败!",0.75);
        return;
    }   
    //输入电话号
    printf("请输入用于找回密码的手机号: ");
    get_str(cons[cnt].phone,sizeof(cons[cnt].phone));
    
    printf("剩余积分:0\n");

    cons[cnt].level=0;
    cnt++;
    show_msg("添加成功",0.7);
    anykey_continue();
}
//删除函数
void del(void)
{
    char arr[12];
    printf("请输入要删除的VIP账号:");
    get_str(arr,sizeof(arr));

    int index = phone_query(arr);
    if(-1 == index)
    {
        show_msg("查询不到该账号,删除失败!",0.7);
        return;
    }
    if(index < cnt-1)
    {
        cons[index] = cons[cnt-1];
    }
    cnt--;
    show_msg("删除账号成功!",0.7);
    return;
}
//修改函数
void modify(void)
{
    char arr[12];
    printf("请输入要修改的账号:");
    get_str(arr,sizeof(arr));

    int index = phone_query(arr);
    if(-1 == index)
    {
        show_msg("查询不到该账号,修改失败!",0.7);
        return;
    }
    char passwd[7];
    printf("请输入旧密码:");
    get_passwd(passwd,sizeof(passwd));

    if(strcmp(passwd,cons[index].passwd))
    {
        show_msg("旧密码错误,无法修改密码!",0.75);
        return ;
    }

    char repasswd[7];
    printf("请输入新密码: ");
    get_passwd(passwd,sizeof(repasswd));
    printf("请确认密码:");
    get_passwd(repasswd,sizeof(repasswd));

    if( 0== strcmp(passwd,repasswd))
    {
        strcpy(cons[index].passwd,passwd);
        show_msg("修改成功",0.75);
    }
        else
        {
            show_msg("修改失败",0.75);
        }
}
//查询函数
void query(void)
{
    char key[20];
    printf("请输入要查询的关键字:");
    get_str(key,sizeof(key));

    for(int i=0; i<cnt; i++)
    {
        if(strstr(cons[i].phone,key) || strstr(cons[i].name,key))
        {
            printf("%s %s %c\n",cons[i].name,cons[i].phone,cons[i].level);
        }
    }

    anykey_continue();
}
//遍历函数
void show(void)
{
    if(0 >= cnt)
    {
        show_msg("目前没有VIP账户!",0.7);
        return;
    }
    for(int i=0; i<cnt; i++)
    {
        printf("账号          手机号          密码       积分\n");
        printf("%s          %s            %s      %d\n",
        cons[i].name,
        cons[i].phone,
        cons[i].passwd,
        cons[i].pay_jifen);
    }
    anykey_continue();
}

三、后勤模块

/*********后勤函数*********/
//添加函数
void add_user(void)
{
    if(cnt2 >= 100)
    {
        show_msg("后勤已满,添加失败!",0.7);
        return;
    }

    printf("请输入账号:");
    get_str(cons2[cnt2].name2,sizeof(cons2[cnt2].name2));   
    printf("请输入密码:");
    get_passwd(cons2[cnt2].passwd2,sizeof(cons2[cnt2].passwd2));
    
    //再次输入密码
    char repasswd2[7];
    printf("请再次输入密码:");
    get_passwd(repasswd2,sizeof(repasswd2));
    
    //确认密码
    if(strcmp(cons2[cnt2].passwd2,repasswd2))
    {
        show_msg("两次输入的密码不一致,添加失败!",0.75);
        return;
    }

    //输入电话号
    printf("请输入用于找回密码的手机号: ");
    get_str(cons2[cnt2].phone2,sizeof(cons2[cnt2].phone2));

    cons2[cnt2].lock=0;
    cnt2++;
    show_msg("添加成功",0.7);
     return ;
}

//删除函数
void del_user(void)
{
    char arr2[12];
    printf("请输入要删除的后勤账号:");
    get_str(arr2,sizeof(arr2));

    int index = phone_query2(arr2);
    if(-1 == index)
    {
        show_msg("查询不到该账号,删除失败!",0.7);
        return;
    }

    if(index < cnt2-1)
    {
        cons2[index] = cons2[cnt2-1];
    }

    cnt2--;
    show_msg("删除账号成功!",0.7);
    return;
}

//修改函数
void modify_user(void)
{
    char arr2[12];
    printf("请输入要修改的后勤账号:");
    get_str(arr2,sizeof(arr2));

    int index = phone_query2(arr2);
    if(-1 == index)
    {
        show_msg("查询不到该账号,修改失败!",0.7);
        return;
    }

    printf("请输入旧密码:");
    char passwd2[7];
    get_passwd(passwd2,sizeof(passwd2));

    if(strcmp(passwd2,cons2[index].passwd2))
    {
        show_msg("旧密码错误,无法修改密码!",0.75);
        return ;
    }
    char repasswd2[7];
    printf("请输入新密码: ");
    get_passwd(passwd2,sizeof(repasswd2));
    printf("请确认密码:");
    get_passwd(repasswd2,sizeof(repasswd2));

    if( 0== strcmp(passwd2,repasswd2))
    {
            strcpy(cons2[index].passwd2,passwd2);
            show_msg("修改成功",0.75);
    }
    else
    {
            show_msg("修改失败",0.75);
    }
}

//查询函数
void query_user(void)
{
    char key[20];
    printf("请输入要查询的用户名:");
    get_str(key,sizeof(key));

    for(int i=0; i<cnt2; i++)
    {
        if(strstr(cons2[i].phone2,key) || strstr(cons2[i].name2,key))
        {
            printf("%s    %s     %c\n",cons2[i].name2,cons2[i].phone2,cons2[i].lock);
        }
    }

    anykey_continue();
}

//遍历函数
void show_user(void)
{
    if(0 >= cnt2)
    {
          show_msg("目前没有VIP账户!",0.7);
          return;
    }
    for(int i=0; i<cnt2; i++)
    {
          printf("账号         手机号         密码\n");
          printf("%s          %s          %s\n",
          cons2[i].name2,
          cons2[i].phone2,
          cons2[i].passwd2);
    }
    anykey_continue();
}

四、货物模块


/**********货物管理**********/
//添加商品
void add_com(void)
{
    char flag[10];
    do
    {   
        printf("请输入你的商品信息\n");//录入商品的信息
        printf("商品编号:");
        scanf("%s",goods[count].goods_id);

        printf("商品名字:");
        scanf("%s",goods[count].goods_name);
        
        printf("商品价格:");
        scanf("%lf",&goods[count].goods_price);
        
        printf("商品总数目:");
        scanf("%d",&goods[count].goods_amount);
        
        printf("商品剩余数目:");
        scanf("%d",&goods[count].goods_remain);
        
        printf("是否继续输入数据y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
        
        count++;//商品种类加1
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    
    anykey_continue();
}

//删除商品
void del_com(void)
{
    int i,j;
    char ch[20],com_name[20];
    printf("输入删除的商品名: ");//根据商品的名称来删除数据
    scanf("%s",com_name);
    
    for(i=0;i<count;i++)
    {
        if(strcmp(com_name,goods[i].goods_name)==0)
            break;//找到,即跳出循环
    }
    
    for(j=i;j<count-1;j++)
    {
        goods[j]=goods[j+1];
    }
    printf("\t 你已经删除 %s\n",com_name);
    count--;
    
    anykey_continue();
}

//修改商品信息
void change_com(void)
{
    int i;
    char ch[20],com_id[20];
    
    printf("\n你是否确定要修改商品信息 y/n: ");//根据商品的id来修改据
    scanf("%s",ch);
    
    if(strcmp(ch,"y")!=0 && strcmp(ch,"Y")!=0)
    {
        return;
    }

    printf("\n请输入你要修改的商品id:");
    scanf("%s",com_id);
    for(i=0;i<count;i++)
    {
        if(strcmp(goods[i].goods_id,com_id)==0)
        {
            printf("\n是否要修改商品名(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n商品名:");
                scanf("%s",goods[i].goods_name);
            }
            printf("\n是否要修改商品价格(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n价格:");
                scanf("%lf",&goods[i].goods_price);
            }
            printf("\n是否修改商品总数量(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n总数量:");
                scanf("%d",&goods[i].goods_amount);
            }
            printf("\n是否修改商品的剩余数量(y/n): ");
            scanf("%s",ch);
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n剩余数量:");      
                scanf("%d" ,&goods[i].goods_remain);                
            }                                                       
        }               
    }           
    anykey_continue();
}

//查找商品
void search_com(void)
{
    int i;
    char com_name[20];
    printf("\n请输入要查找的商品名:"); //根据商品的名称来查找数据
    scanf("%s",com_name);
    for(i=0;i<count;i++)
    {
        if(strcmp(goods[i].goods_name,com_name)==0)
        {
            printf("编号      名称      价格      总数目   剩余数目\n");
        printf("%s      %s      %lf  %8d %10d \n",
                    goods[i].goods_id,
                    goods[i].goods_name,
                    goods[i].goods_price,
                    goods[i].goods_amount,
                    goods[i].goods_remain);
        }
    }
    anykey_continue();
}
//遍历商品
void show_com(void)
{
    int i;
    printf("编号      名称      价格      总数目   剩余数目\n");
    for(i=0;i<count;i++)
    {
        printf("%s      %s      %lf  %8d %10d \n",
                goods[i].goods_id,
                goods[i].goods_name,
                goods[i].goods_price,
                goods[i].goods_amount,
                goods[i].goods_remain);
    }
    anykey_continue();
}

五、做交互菜单

//后勤三级菜单
void log_menu(void)
{
    for(;;)
    {
        // 清理屏幕
        system("clear");
        puts("1、添加后勤用户");
        puts("2、删除后勤用户");
        puts("3、修改后勤信息");
        puts("4、查看后勤用户");
        puts("5、遍历后勤用户");
        puts("6、返回上一级");
        // 获取指令并调用功能函数
        switch(get_cmd('1','6'))
        {
            case '1':add_user();break;
            case '2':del_user();break;
            case '3':modify_user();break;
            case '4':query_user();break;
            case '5':show_user();break;
            case '6':return;
        }
    }
}
//vip三级菜单
void vip_menu(void)
{
    for(;;)
    {
        // 清理屏幕
        system("clear");
        puts("1、添加VIP账号");
        puts("2、删除VIP账号");
        puts("3、修改VIP密码");
        puts("4、查找VIP账号");
        puts("5、遍历VIP账号");
        puts("6、返回上一级");
        // 获取指令并调用功能函数
            switch(get_cmd('1','6'))
            {
                case '1': add(); break;
                case '2': del(); break;
                case '3': modify(); break;
                case '4': query();break;
                case '5': show(); break;
                case '6': return;
            }
        }
}
/***********收款**********/
//修改收款账户
void change_coll(void)
{
    char cmd[12];
    printf("请输入旧收款帐号:");
    scanf("%s",cmd);
    if(0 == strcmp(shou_kuan_id,cmd))
    {
        printf("请输入新收款账户:");
        scanf("%s",shou_kuan_id);
        return;
    }
    printf("输入的帐号有误,请重新输入!");
    anykey_continue();

}
//管理员二级菜单
void man_menu(void)
{
    for(;;)
    {
        system("clear");
        puts("1、VIP 管理");
        puts("2、后勤管理");
        puts("3、收款账户管理");
        puts("4、返回上一级");
        switch(get_cmd('1','4'))
        {
            case '1': vip_menu();break;
            case '2': log_menu();break;
            case '3': change_coll();break;
            case '4': return;
        }
    }
}
//后勤登录后二级菜单
void logistics_menu(void)
{
    for(;;)
    {
    // 清理屏幕
    system("clear");
    puts("***欢迎使用后勤管理系统***");
    puts("1、录入商品信息");
    puts("2、下架商品");
    puts("3、修改商品信息");
    puts("4、查找商品");
    puts("5、遍历商品");
    puts("6、退出系统");
        switch(get_cmd('1','6'))
        {
            case '1': add_com() ;break;
            case '2': del_com() ;break;
            case '3': change_com() ;break;
            case '4': search_com() ;break;
            case '5': show_com() ;break;
            case '6': return;
        }
    }
}

六、结账模块


/*********结帐**********/
//会员结帐
void vipshop_car(void)
{
    char pay_id[30];
    double  pay_money;
    int pay_number;
    char flag[20];
    char payment_phone[12];
    do{
        printf("请输入商品id:");
        scanf("%s",pay_id);
        for(int i=0;i<count;i++)
            {   
                if(strcmp(goods[i].goods_id,pay_id)==0)
                {
                printf("请输入购买的商品数量:");
                scanf("%d",&pay_number);
                    if(goods[i].goods_remain<pay_number)
                    {   
                        printf("库存数量不足,无法购买\n");
                        printf("请重新输入:");
                        return;
                    }
                    else
                    {
                        pay_money+=pay_number*goods[i].goods_price;//累计金额
                        goods[i].goods_remain-=pay_number;
                    }
                }
            }
        printf("是否继续购买商品,y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    pay_jifen += pay_money;
    printf("花费:%lf,增加的积分为 :%d\n",pay_money,pay_jifen);
    printf("请输入扣款账户:");
    scanf("%s",con[cont].payment_phone);
    con[cont].record_money = pay_money;
    cont++;
    anykey_continue();
    return;
}
//非vip结帐
int novipshop_car()
{
    char pay_id[30],ch[20];
    double  pay_money;
    int pay_number;
    char flag[20];
    char payment_phone[12];
    do{
        printf("请输入商品id:");
        scanf("%s",pay_id);
        for(int i=0;i<count;i++)
        {
            if(strcmp(goods[i].goods_id,pay_id)==0)
            {
                printf("请输入购买的商品数量:");
                scanf("%d",&pay_number);
                if(pay_number<=0)
                {
                    return 0;
                }
                if(goods[i].goods_remain<pay_number)
                {
                    printf("库存数量不足,无法购买\n");
                    printf("请重新输入:");
                    anykey_continue();
                    return 0;
                }
                else
                {
                    pay_money+=pay_number*goods[i].goods_price;//累计金额
                    goods[i].goods_remain-=pay_number;
                }
            }
        }
        printf("是否继续购买商品,y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    printf("花费:%lf\n",pay_money);
    printf("请输入扣款账户:");
    scanf("%s",con[cont].payment_phone);
    con[cont].record_money = pay_money;
    cont++;
    anykey_continue();
}
//付款记录
void show_record(void)
{
    for(int i=0;i<cont;i++)
    {
        printf("%s 向 %s 付%f 元\n",
                con[i].payment_phone,
                shou_kuan_id,
                con[i].record_money);
    }
    anykey_continue();
}

完整代码

#include <stdio.h>
#include <getch.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stdbool.h>
#define COUNT 1000
#define CONS 100
#define CONS2 100
#define CON 1000
#define CNS 100

typedef struct User
{
    char name[20];//vip用户名
    char phone[12];//手机号
    char passwd[7];//密码
    int pay_jifen;//积分
    char level;

}User;

typedef struct User1
{
    char name2[20];//后勤用户名
    char phone2[12];//手机号
    char passwd2[7];//密码
    char lock;
}User1;
//vip
size_t cnt;
User cons[CONS];
//后勤
size_t cnt2;
User1 cons2[CONS2];

//收款记录
typedef struct Record
{
    double record_money;
    char payment_phone[12];
}Record;
//收款记录
size_t cont;
Record con[CON];

char shou_kuan_id[12] = "12345678910";//收款账户

typedef struct MarketGoods//存数商品信息的结构体
{
    char goods_id[30];//商品编号
    char goods_name[30];//商品名称
    double goods_price; //商品价格
    int goods_amount;//商品总数目
    int goods_remain;//商品剩余数目
    char pay_id[30];//购买编号
} MarketGoods;
MarketGoods goods[COUNT];

int count=0;//全局变量,用于保存实际上有多少种商品
int pay_jifen = 0;//用于每次结帐计算积分

//工具函数
char get_cmd(char start,char end)
{
    assert(start <= end);

    puts("--------------------");
    printf("请输入指令:");
    for(;;)
    {
        char cmd = getch();
        if(start <= cmd && cmd <= end)
        {
            printf("%c\n",cmd);
            return cmd;
        }
    }
}
char* get_str(char* str,size_t size)
{
    size_t len = strlen(fgets(str,size,stdin));

    if('\n' == str[len-1])
        str[len-1] = '\0';
    else
        while('\n' != getchar());
    return str;
}
//获取
char* get_passwd(char* passwd,size_t size)
{
    int i=0;
    while(i<size-1)
    {
        passwd[i]=getch();

        if(127==passwd[i])
        {
            if(i>0)
            {
                i--;
                printf("\b \b");
            }
            continue;
        }
        i++;
        printf("*");
    }
    passwd[size-1]='\0';
    printf("\n");
    return passwd;
}
//查询vip
int phone_query(char* str)
{
    for(int i=0; i<cnt; i++)
    {
        if(0 == strcmp(cons[i].name,str))
            return i;
    }
    return -1;
}
//查询后勤
int phone_query2(char* str)
{
    for(int i=0; i<cnt2; i++)
    {
        if(0 == strcmp(cons2[i].name2,str))
            return i;
    }
    return -1;
}
//显示
void show_msg(const char* msg,float sec)
{
    printf("\033[01;32m%s\033[00m\n",msg);
    usleep(sec*1000000);
}

void anykey_continue(void)
{
    stdin ->_IO_read_ptr = stdin->_IO_read_end;
    puts("按任意键继续...");
    getch();
}
//收款记录保存
int save_record(size_t size,const char* path)
{
    assert(0!=size && NULL!=path);

    FILE*wfp =fopen(path,"w");
    if(NULL == wfp)
    {
        printf("无法打开文件,无法保存数据!\n");
        return 0;
    }
    int count=0;
    while(count<size)
    {
        fprintf(wfp,"%s %lf\n",
                con[count].payment_phone,
                con[count].record_money);
        count++;        
    }
    fclose(wfp);
    return count;
}
//收款记录加载
int load_reccord(size_t len,const char* path)
{
    assert(0!=len && NULL!=path);

    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        printf("无法打开文件,加载数据失败!\n");
        return 0;
    }
    int count=0;
    while(count<len)
    {
        int ret =fscanf(rfp,"%s %lf\n",
                con[count].payment_phone,
                &con[count].record_money);
    if(ret != 2)
    {
        break;
    }
    count++;
    }
    fclose(rfp);
    return count;
}
//收款账户通用的文本保存数据
int save_coll(size_t size,const char* path)
{
    assert(0!=size && NULL!=path);

    FILE*wfp =fopen(path,"w");
    if(NULL == wfp)
    {
        printf("无法打开文件,无法保存数据!\n");
        return 0;
    }
        fprintf(wfp,"%s\n",shou_kuan_id);       
    fclose(wfp);
}
//收款账户通用的文本加载数据
int load_coll(size_t len,const char* path)
{
    assert(0!=len && NULL!=path);

    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        printf("无法打开文件,加载数据失败!\n");
        return 0;
    }
    fscanf(rfp,"%s\n",shou_kuan_id);
    fclose(rfp);    
}
//后勤通用的文本保存数据
int save_data2(size_t size,const char* path)
{
    assert(0!=size && NULL!=path);

    FILE*wfp =fopen(path,"w");
    if(NULL == wfp)
    {
        printf("无法打开文件,无法保存数据!\n");
        return 0;
    }
    int count=0;
    while(count<size)
    {
        fprintf(wfp,"%s %s %s\n",
        cons2[count].name2,
        cons2[count].phone2,
        cons2[count].passwd2);
        count++;        
    }
    fclose(wfp);
    return count;
}

//后勤通用的文本加载数据
int load_data2(size_t len,const char* path)
{
    assert(0!=len && NULL!=path);

    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        printf("无法打开文件,加载数据失败!\n");
        return 0;
    }

    int count=0;
    while(count<len)
    {
        int ret =fscanf(rfp,"%s %s %s\n",
        cons2[count].name2,
        cons2[count].phone2,
        cons2[count].passwd2);
    if(ret != 3)
    {
        break;
    }
    count++;
    }
    fclose(rfp);
    return count;
}

// 货物通用的文本格式保存数据
int save_data0(size_t size,const char* path)
{
    assert(0!=size && NULL!=path);

    FILE* wfp = fopen(path,"w");
    if(NULL == wfp)
    {
        printf("无法打开文件,无法保存数据!\n");
        return 0;
    }
                
    int cnt = 0;
    while( cnt < size)
    {
        fprintf(wfp,"%s %s %lf %8d %10d\n",
                    goods[cnt].goods_id,
                    goods[cnt].goods_name,
                    goods[cnt].goods_price,
                    goods[cnt].goods_amount,
                    goods[cnt].goods_remain);
        cnt++;
    }
    fclose(wfp);
    return cnt;
}

// 货物通用的文本格式加载数据
int load_data0(size_t len,const char* path)
{
    assert(0!=len && NULL!=path);

    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        printf("无法打开文件,加载数据失败!\n");
        return 0;
    }

    int cnt=0;
    while(cnt < len)
    {
        int ret = fscanf(rfp,"%s %s %lf %8d %10d\n",
                            goods[cnt].goods_id,
                            goods[cnt].goods_name,
                            &goods[cnt].goods_price,
                            &goods[cnt].goods_amount,
                            &goods[cnt].goods_remain);
        if(ret != 5)
        {
            break;
        }
        cnt++;
    }
    fclose(rfp);
    return cnt;
}

//vip通用的文本保存数据
int save_data(size_t size,const char* path)
{

    assert(0!=size && NULL!=path);

    FILE*wfp =fopen(path,"w");
    if(NULL == wfp)
    {
        printf("无法打开文件,无法保存数据!\n");
        return 0;
    }
    int count=0;
    while(count<size)
    {
        fprintf(wfp,"%s %s %s %d\n",
        cons[count].name,
        cons[count].phone,
        cons[count].passwd,
        cons[count].pay_jifen);
        count++;        
    }
    fclose(wfp);
    return count;
}
//vip通用的文本加载数据
int load_data(size_t len,const char* path)
{
    assert(0!=len && NULL!=path);

    FILE* rfp = fopen(path,"r");
    if(NULL == rfp)
    {
        printf("无法打开文件,加载数据失败!\n");
        return 0;
    }

    int count=0;
    while(count<len)
    {
        int ret =fscanf(rfp,"%s %s %s %d\n",
        cons[count].name,
        cons[count].phone,
        cons[count].passwd,
        &cons[count].pay_jifen);
    if(ret != 4)
    {
        break;
    }
    count++;
    }
    fclose(rfp);
    return count;
}

/*********vip管理模块*********/
//vip添加函数
void add(void)
{
    if(cnt >= 100)
    {
        show_msg("VIP已满,添加失败!",0.7);
        return;
    }
    printf("请输入账号:");
    get_str(cons[cnt].name,sizeof(cons[cnt].name)); 
    printf("请输入密码:");
    get_passwd(cons[cnt].passwd,sizeof(cons[cnt].passwd));
    //再次输入密码
    char repasswd[7];
    printf("请再次输入密码:");
    get_passwd(repasswd,sizeof(repasswd));
    //确认密码
    if(strcmp(cons[cnt].passwd,repasswd))
    {
        show_msg("两次输入的密码不一致,添加失败!",0.75);
        return;
    }   
    //输入电话号
    printf("请输入用于找回密码的手机号: ");
    get_str(cons[cnt].phone,sizeof(cons[cnt].phone));
    
    printf("剩余积分:0\n");

    cons[cnt].level=0;
    cnt++;
    show_msg("添加成功",0.7);
    anykey_continue();
}

//删除函数
void del(void)
{
    char arr[12];
    printf("请输入要删除的VIP账号:");
    get_str(arr,sizeof(arr));

    int index = phone_query(arr);
    if(-1 == index)
    {
        show_msg("查询不到该账号,删除失败!",0.7);
        return;
    }

    if(index < cnt-1)
    {
        cons[index] = cons[cnt-1];
    }

    cnt--;
    show_msg("删除账号成功!",0.7);
    return;
}

//修改函数
void modify(void)
{
    char arr[12];
    printf("请输入要修改的账号:");
    get_str(arr,sizeof(arr));

    int index = phone_query(arr);
    if(-1 == index)
    {
        show_msg("查询不到该账号,修改失败!",0.7);
        return;
    }

    char passwd[7];
    printf("请输入旧密码:");
    get_passwd(passwd,sizeof(passwd));

    if(strcmp(passwd,cons[index].passwd))
    {
        show_msg("旧密码错误,无法修改密码!",0.75);
        return ;
    }

    char repasswd[7];
    printf("请输入新密码: ");
    get_passwd(passwd,sizeof(repasswd));
    printf("请确认密码:");
    get_passwd(repasswd,sizeof(repasswd));

    if( 0== strcmp(passwd,repasswd))
    {
        strcpy(cons[index].passwd,passwd);
        show_msg("修改成功",0.75);
    }
        else
        {
            show_msg("修改失败",0.75);
        }
}

//查询函数
void query(void)
{
    char key[20];
    printf("请输入要查询的关键字:");
    get_str(key,sizeof(key));

    for(int i=0; i<cnt; i++)
    {
        if(strstr(cons[i].phone,key) || strstr(cons[i].name,key))
        {
            printf("%s %s %c\n",cons[i].name,cons[i].phone,cons[i].level);
        }
    }

    anykey_continue();
}

//遍历函数
void show(void)
{
    if(0 >= cnt)
    {
        show_msg("目前没有VIP账户!",0.7);
        return;
    }
    for(int i=0; i<cnt; i++)
    {
        printf("账号          手机号          密码       积分\n");
        printf("%s          %s            %s      %d\n",
        cons[i].name,
        cons[i].phone,
        cons[i].passwd,
        cons[i].pay_jifen);
    }
    anykey_continue();
}


/*********后勤函数*********/
//添加函数
void add_user(void)
{
    if(cnt2 >= 100)
    {
        show_msg("后勤已满,添加失败!",0.7);
        return;
    }

    printf("请输入账号:");
    get_str(cons2[cnt2].name2,sizeof(cons2[cnt2].name2));   
    printf("请输入密码:");
    get_passwd(cons2[cnt2].passwd2,sizeof(cons2[cnt2].passwd2));
    
    //再次输入密码
    char repasswd2[7];
    printf("请再次输入密码:");
    get_passwd(repasswd2,sizeof(repasswd2));
    
    //确认密码
    if(strcmp(cons2[cnt2].passwd2,repasswd2))
    {
        show_msg("两次输入的密码不一致,添加失败!",0.75);
        return;
    }

    //输入电话号
    printf("请输入用于找回密码的手机号: ");
    get_str(cons2[cnt2].phone2,sizeof(cons2[cnt2].phone2));

    cons2[cnt2].lock=0;
    cnt2++;
    show_msg("添加成功",0.7);
     return ;
}

//删除函数
void del_user(void)
{
    char arr2[12];
    printf("请输入要删除的后勤账号:");
    get_str(arr2,sizeof(arr2));

    int index = phone_query2(arr2);
    if(-1 == index)
    {
        show_msg("查询不到该账号,删除失败!",0.7);
        return;
    }

    if(index < cnt2-1)
    {
        cons2[index] = cons2[cnt2-1];
    }

    cnt2--;
    show_msg("删除账号成功!",0.7);
    return;
}

//修改函数
void modify_user(void)
{
    char arr2[12];
    printf("请输入要修改的后勤账号:");
    get_str(arr2,sizeof(arr2));

    int index = phone_query2(arr2);
    if(-1 == index)
    {
        show_msg("查询不到该账号,修改失败!",0.7);
        return;
    }

    printf("请输入旧密码:");
    char passwd2[7];
    get_passwd(passwd2,sizeof(passwd2));

    if(strcmp(passwd2,cons2[index].passwd2))
    {
        show_msg("旧密码错误,无法修改密码!",0.75);
        return ;
    }
    char repasswd2[7];
    printf("请输入新密码: ");
    get_passwd(passwd2,sizeof(repasswd2));
    printf("请确认密码:");
    get_passwd(repasswd2,sizeof(repasswd2));

    if( 0== strcmp(passwd2,repasswd2))
    {
            strcpy(cons2[index].passwd2,passwd2);
            show_msg("修改成功",0.75);
    }
    else
    {
            show_msg("修改失败",0.75);
    }
}

//查询函数
void query_user(void)
{
    char key[20];
    printf("请输入要查询的用户名:");
    get_str(key,sizeof(key));

    for(int i=0; i<cnt2; i++)
    {
        if(strstr(cons2[i].phone2,key) || strstr(cons2[i].name2,key))
        {
            printf("%s    %s     %c\n",cons2[i].name2,cons2[i].phone2,cons2[i].lock);
        }
    }

    anykey_continue();
}

//遍历函数
void show_user(void)
{
    if(0 >= cnt2)
    {
          show_msg("目前没有VIP账户!",0.7);
          return;
    }
    for(int i=0; i<cnt2; i++)
    {
          printf("账号         手机号         密码\n");
          printf("%s          %s          %s\n",
          cons2[i].name2,
          cons2[i].phone2,
          cons2[i].passwd2);
    }
    anykey_continue();
}

/**********货物管理**********/
//添加商品
void add_com(void)
{
    char flag[10];
    do
    {   
        printf("请输入你的商品信息\n");//录入商品的信息
        printf("商品编号:");
        scanf("%s",goods[count].goods_id);

        printf("商品名字:");
        scanf("%s",goods[count].goods_name);
        
        printf("商品价格:");
        scanf("%lf",&goods[count].goods_price);
        
        printf("商品总数目:");
        scanf("%d",&goods[count].goods_amount);
        
        printf("商品剩余数目:");
        scanf("%d",&goods[count].goods_remain);
        
        printf("是否继续输入数据y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
        
        count++;//商品种类加1
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    
    anykey_continue();
}

//删除商品
void del_com(void)
{
    int i,j;
    char ch[20],com_name[20];
    printf("输入删除的商品名: ");//根据商品的名称来删除数据
    scanf("%s",com_name);
    
    for(i=0;i<count;i++)
    {
        if(strcmp(com_name,goods[i].goods_name)==0)
            break;//找到,即跳出循环
    }
    
    for(j=i;j<count-1;j++)
    {
        goods[j]=goods[j+1];
    }
    printf("\t 你已经删除 %s\n",com_name);
    count--;
    
    anykey_continue();
}

//修改商品信息
void change_com(void)
{
    int i;
    char ch[20],com_id[20];
    
    printf("\n你是否确定要修改商品信息 y/n: ");//根据商品的id来修改据
    scanf("%s",ch);
    
    if(strcmp(ch,"y")!=0 && strcmp(ch,"Y")!=0)
    {
        return;
    }

    printf("\n请输入你要修改的商品id:");
    scanf("%s",com_id);
    for(i=0;i<count;i++)
    {
        if(strcmp(goods[i].goods_id,com_id)==0)
        {
            printf("\n是否要修改商品名(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n商品名:");
                scanf("%s",goods[i].goods_name);
            }
            printf("\n是否要修改商品价格(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n价格:");
                scanf("%lf",&goods[i].goods_price);
            }
            printf("\n是否修改商品总数量(y/n): ");
            scanf("%s",ch);
            
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n总数量:");
                scanf("%d",&goods[i].goods_amount);
            }
            printf("\n是否修改商品的剩余数量(y/n): ");
            scanf("%s",ch);
            if(strcmp(ch,"y")==0||strcmp(ch,"Y")==0)
            {
                printf("\n剩余数量:");      
                scanf("%d" ,&goods[i].goods_remain);                
            }                                                       
        }               
    }           
    anykey_continue();
}

//查找商品
void search_com(void)
{
    int i;
    char com_name[20];
    printf("\n请输入要查找的商品名:"); //根据商品的名称来查找数据
    scanf("%s",com_name);
    for(i=0;i<count;i++)
    {
        if(strcmp(goods[i].goods_name,com_name)==0)
        {
            printf("编号      名称      价格      总数目   剩余数目\n");
        printf("%s      %s      %lf  %8d %10d \n",
                    goods[i].goods_id,
                    goods[i].goods_name,
                    goods[i].goods_price,
                    goods[i].goods_amount,
                    goods[i].goods_remain);
        }
    }
    anykey_continue();
}

//遍历商品
void show_com(void)
{
    int i;
    printf("编号      名称      价格      总数目   剩余数目\n");
    for(i=0;i<count;i++)
    {
        printf("%s      %s      %lf  %8d %10d \n",
                goods[i].goods_id,
                goods[i].goods_name,
                goods[i].goods_price,
                goods[i].goods_amount,
                goods[i].goods_remain);
    }
    anykey_continue();
}


//后勤三级菜单
void log_menu(void)
{
    for(;;)
    {
        // 清理屏幕
        system("clear");
        puts("1、添加后勤用户");
        puts("2、删除后勤用户");
        puts("3、修改后勤信息");
        puts("4、查看后勤用户");
        puts("5、遍历后勤用户");
        puts("6、返回上一级");
        // 获取指令并调用功能函数
        switch(get_cmd('1','6'))
        {
            case '1':add_user();break;
            case '2':del_user();break;
            case '3':modify_user();break;
            case '4':query_user();break;
            case '5':show_user();break;
            case '6':return;
        }
    }
}

//vip三级菜单
void vip_menu(void)
{
    for(;;)
    {
        // 清理屏幕
        system("clear");
        puts("1、添加VIP账号");
        puts("2、删除VIP账号");
        puts("3、修改VIP密码");
        puts("4、查找VIP账号");
        puts("5、遍历VIP账号");
        puts("6、返回上一级");
        // 获取指令并调用功能函数
            switch(get_cmd('1','6'))
            {
                case '1': add(); break;
                case '2': del(); break;
                case '3': modify(); break;
                case '4': query();break;
                case '5': show(); break;
                case '6': return;
            }
        }
}

/***********收款**********/
//修改收款账户
void change_coll(void)
{
    char cmd[12];
    printf("请输入旧收款帐号:");
    scanf("%s",cmd);
    if(0 == strcmp(shou_kuan_id,cmd))
    {
        printf("请输入新收款账户:");
        scanf("%s",shou_kuan_id);
        return;
    }
    printf("输入的帐号有误,请重新输入!");
    anykey_continue();

}


//管理员二级菜单
void man_menu(void)
{
    for(;;)
    {
        system("clear");
        puts("1、VIP 管理");
        puts("2、后勤管理");
        puts("3、收款账户管理");
        puts("4、返回上一级");
        switch(get_cmd('1','4'))
        {
            case '1': vip_menu();break;
            case '2': log_menu();break;
            case '3': change_coll();break;
            case '4': return;
        }
    }
}
//后勤登录后二级菜单
void logistics_menu(void)
{
    for(;;)
    {
    // 清理屏幕
    system("clear");
    puts("***欢迎使用后勤管理系统***");
    puts("1、录入商品信息");
    puts("2、下架商品");
    puts("3、修改商品信息");
    puts("4、查找商品");
    puts("5、遍历商品");
    puts("6、退出系统");
        switch(get_cmd('1','6'))
        {
            case '1': add_com() ;break;
            case '2': del_com() ;break;
            case '3': change_com() ;break;
            case '4': search_com() ;break;
            case '5': show_com() ;break;
            case '6': return;
        }
    }
}
/*********结帐**********/
//会员结帐
void vipshop_car(void)
{
    char pay_id[30];
    double  pay_money;
    int pay_number;
    char flag[20];
    char payment_phone[12];
    do{
        printf("请输入商品id:");
        scanf("%s",pay_id);
        for(int i=0;i<count;i++)
            {   
                if(strcmp(goods[i].goods_id,pay_id)==0)
                {
                printf("请输入购买的商品数量:");
                scanf("%d",&pay_number);
                    if(goods[i].goods_remain<pay_number)
                    {   
                        printf("库存数量不足,无法购买\n");
                        printf("请重新输入:");
                        return;
                    }
                    else
                    {
                        pay_money+=pay_number*goods[i].goods_price;//累计金额
                        goods[i].goods_remain-=pay_number;
                    }
                }
            }
        printf("是否继续购买商品,y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    pay_jifen += pay_money;
    printf("花费:%lf,增加的积分为 :%d\n",pay_money,pay_jifen);
    printf("请输入扣款账户:");
    scanf("%s",con[cont].payment_phone);
    con[cont].record_money = pay_money;
    cont++;
    anykey_continue();
    return;
}
//非vip结帐
int novipshop_car()
{
    char pay_id[30],ch[20];
    double  pay_money;
    int pay_number;
    char flag[20];
    char payment_phone[12];
    do{
        printf("请输入商品id:");
        scanf("%s",pay_id);
        for(int i=0;i<count;i++)
        {
            if(strcmp(goods[i].goods_id,pay_id)==0)
            {
                printf("请输入购买的商品数量:");
                scanf("%d",&pay_number);
                if(pay_number<=0)
                {
                    return 0;
                }
                if(goods[i].goods_remain<pay_number)
                {
                    printf("库存数量不足,无法购买\n");
                    printf("请重新输入:");
                    anykey_continue();
                    return 0;
                }
                else
                {
                    pay_money+=pay_number*goods[i].goods_price;//累计金额
                    goods[i].goods_remain-=pay_number;
                }
            }
        }
        printf("是否继续购买商品,y是n否:");//是否还想继续输入数据
        scanf("%s",flag);
    }while(strcmp(flag,"y")==0||strcmp(flag,"Y")==0);
    printf("花费:%lf\n",pay_money);
    printf("请输入扣款账户:");
    scanf("%s",con[cont].payment_phone);
    con[cont].record_money = pay_money;
    cont++;
    anykey_continue();
}
//付款记录
void show_record(void)
{
    for(int i=0;i<cont;i++)
    {
        printf("%s 向 %s 付%f 元\n",
                con[i].payment_phone,
                shou_kuan_id,
                con[i].record_money);
    }
    anykey_continue();
}
int login_index = -1;
//vip登录函数
void login_vip(void)
{
    // 输入用户名
    char name[20];
    printf("请输入用户名:");
    get_str(name,sizeof(name));
    // 查询用户是否存在
    int index = phone_query(name);
    if(-1 == index)
    {
        show_msg("该用户不存在,登录失败!",0.75);
        return;
    }
    // 判断是否被锁
    if(cons[index].level >= 3)
    {
        show_msg("该用户已经被锁定,请联系管理员!",0.75);
        return;
    }
    // 输入密码
    char passwd[7];
    printf("请输入密码:");
    get_passwd(passwd,sizeof(passwd));
    // 比较密码
    if(0 == strcmp(cons[index].passwd,passwd))
    {
        // 初始化锁定标志
        cons[index].level = 0;
        // 记录登录成功的用户下标
        login_index = index;
        // 登录成功,进入子菜单
        vipshop_car();
        cons[index].pay_jifen+=pay_jifen;
        return;
    }
    // 锁定标志+1
    switch(++cons[index].level)
    {
        case 1: show_msg("密码错误,你还有2次机会!",0.75); break;
        case 2: show_msg("密码错误,你还有1次机会!",0.75); break;
        case 3: show_msg("三次密码错误,账号被锁定,请联系管理员!",0.75); break;
    }
}
//结帐菜单
void jiezhang_menu(void)
{
    for(;;)
    {
        system("clear");
        puts("1、会员结帐");
        puts("2、非会员结帐");
        puts("3、退出结帐");
        switch(get_cmd('1','3'))
        {
            case '1': login_vip();break;
            case '2': novipshop_car();break;
            case '3': return;
        }
    }
}
//一级菜单
void first_menu(void)
{
    system("clear");
    puts("1、管理员操作");
    puts("2、后勤管理");
    puts("3、结帐");
    puts("4、收款记录");
    puts("5、退出系统");

}
//后勤登录函数
void login_houqin(void)
{
    // 输入用户名
    char name[20];
    printf("请输入用户名:");
    get_str(name,sizeof(name));
    // 查询用户是否存在
    int index = phone_query2(name);
    if(-1 == index)
    {
        show_msg("该用户不存在,登录失败!",0.75);
        return;
    }
    // 判断是否被锁
    if(cons2[index].lock >= 3)
    {
        show_msg("该用户已经被锁定,请联系管理员!",0.75);
        return;
    }
    // 输入密码
    char passwd[7];
    printf("请输入密码:");
    get_passwd(passwd,sizeof(passwd));
    // 比较密码
    if(0 == strcmp(cons2[index].passwd2,passwd))
    {
        // 初始化锁定标志
        cons2[index].lock = 0;
        // 记录登录成功的用户下标
        login_index = index;
        // 登录成功,进入子菜单
        logistics_menu();
        return;
    }
    // 锁定标志+1
    switch(++cons2[index].lock)
    {
        case 1: show_msg("密码错误,你还有2次机会!",0.75); break;
        case 2: show_msg("密码错误,你还有1次机会!",0.75); break;
        case 3: show_msg("三次密码错误,账号被锁定,请联系管理员!",0.75); break;
    }
}
int main(int argc,const char* argv[])
{
    int cns = load_coll(1,"shoukuan.txt");
    cnt2 = load_data2(CONS2,"houqin.txt");
    cnt = load_data(CONS,"vip.txt");
    count = load_data0(COUNT,"kucun.txt");
    for(;;)
    {
        // 显示功能菜单
        first_menu();

        // 获取指令并调用功能函数
        switch(get_cmd('1','5'))
        {
            case '1': man_menu(); break;
            case '2': login_houqin();break;
            case '3': jiezhang_menu();break; 
            case '4': show_record();break;
            case '5': 
                      save_coll(1,"shoukuan.txt");
                      save_data2(cnt2,"houqin.txt");
                      save_data(cnt,"vip.txt");
                      save_data0(count,"kucun.txt");
                      return 0;
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 223,277评论 6 521
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,487评论 3 400
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 170,114评论 0 366
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,367评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,352评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,919评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,328评论 3 426
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,278评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,808评论 1 321
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,882评论 3 343
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,005评论 1 354
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,672评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,344评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,839评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,959评论 1 275
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,481评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,031评论 2 361

推荐阅读更多精彩内容