mysql C API 购物车

以前拿php写与数据库相关的东西,这次用c写,还是感觉很神奇的。

老实说,真不知道原来c还可以这么弄,只要把需要的头文件包括进来,瞬间天地就开阔了。

当然,语言的限制,用C写还是比用php麻烦很多啦,

需要先mysql_query(&mysql_conn,sql)一下

然后用mysql_store_result(&mysql_conn)获取res资源指针,相对php多了一步,可是就是这一步真是让我开了眼界。

这种思路真的很exciting。不过不得不承认,有点小麻烦。

不过最麻烦的还是sql的拼接。在php里sql考虑的更多的是注意单双引号的问题,而且我想像js,php这些语言之所以引入单双引号,或许就是为了方便sql、html等的嵌入编写。

c可是够麻烦的,不能用+或者.拼接。每次都要strcat,一个sql好多好多strcat - -。

还有一个比较麻烦的就是输入流中的回车问题。实在有点不太懂啊,经常就是上一个字符串的输入完成后按的回车被后一个待输入的str给接收了,然后就是各种问题啊。恰恰这次又不停的循环清屏,每次都不知道结果是啥就一闪而过。后来上网查了下,用setbuf(stdin,NULL)清空输入流,这个大招一用,效果太好了。不过,还是很困惑到底在什么情况下需要使用这个。时间比较紧,没有很详细的思考啊,于是就使劲的setbuf NULL;

还学到了字符串和数字之间的转换函数。当然,这些在php里是不会出现的,不过在严格的c里,的确是把我吓到了,好久没经历过需要手动转换的了。

两类函数

字符串到数字,int atoi(str), float atof(str),a就是ascii码吧,i,f就是int,float,还是挺好记得;

数字到字符串,itoa(int,str,10)之类的,最后一个10表示基数10 来转,上下两个函数不对称,嗯,容易搞混啊。

还有学到的就是按位取反~符号,这些平时基本不会遇到的。开始我问炯哥哥,他告诉我说是通过与二进制的’11111111‘来异或实现,我反应大半天稍微有点懂;然后他说’11111111‘不知道对应ascii多少,就用’00000001‘这个二进制对应的字符,通过8次循环移位,每次移位后与字符异或,由于与1以后为相反,与0异或为本身,所以就能实现按位取非了。啊,当时我就晕了 - -。差距啊,虽说这么是麻烦,可是从中透露的东西,可见一斑啊。计组得好好学啊。

大概就是这样,感觉还是学到好多东西。有好久没写代码了,手太残啊,一直打不好字。

下午的时候有点困,边写歌边写代码,那些熟悉的歌和着敲键盘的节奏,我快要疯了,恨不得把音量开到最大!!

好久没有这么痛快!

贴上代码。

main.c

#ifndef __LCC__
#define __LCC__
#endif

#include "shoppingcart.h"

int main(int argc, char **argv)
{
    MYSQL mysql_conn ;
    if(mysql_init(&mysql_conn) == NULL)
    {
        printf("Initialization fails. \n") ;
        return -1 ;
    }
    if(mysql_real_connect(&mysql_conn,"localhost","root","","shoppingCartApp",MYSQL_PORT,NULL,0) == NULL)
    {
        printf("Connect databases faild.\n") ;
        return -1 ;
    }
    //开始输出首页
    while(!system("CLS"))//该函数返回false
    {
        printInCenter("购物车") ;
        char mainMenu[100] = "\n1.管理员登陆\n2.用户登陆或注册\n3.退出\n" ;
        printLeftJustify(mainMenu) ;
        char id[100] ;
        char password[20] ;
        int choice ;
        scanf("%d",&choice) ;
        switch(choice)
        {
        case 1:
            adminMoudle(mysql_conn,id,password) ;
            break ;
        case 2:
            userMoudle(mysql_conn,id,password) ;
            break ;
        case 3:
            return 0 ;
        default:
            return 0 ;
        }
    }

    return 0;
}


 

 

 shoppingcart.h

#ifndef SHOPPINGCART_H_INCLUDED
#define SHOPPINGCART_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <mysql.h>
#include <windows.h>
#include <time.h>

#define ADMIN 20
#define USER 30
#define true 1
#define false 0

//用户模块
void userMoudle(MYSQL  mysql_conn,char * id,char * password) ;
void userManageMenu(MYSQL mysql_conn,char * id) ;
void addShoppingCart(MYSQL mysql_conn,char * id) ;
void manageShoppingCart(MYSQL mysql_conn,char * id) ;
void printForm(MYSQL mysql_conn,char * id) ;
void modifyEmail(MYSQL mysql_conn,char * id) ;
//管理员模块
void adminMoudle(MYSQL  mysql_conn,char *  id,char * password) ;
void Manage(MYSQL mysql_conn,char * id) ;
void itemManage(MYSQL mysql_conn) ;
void saleStatistics(MYSQL mysql_conn) ;
int itemList(MYSQL mysql_conn) ;
//打印函数
int printInCenter(char * str) ;
int printLeftJustify(char* str) ;
int printHR() ;
//其他
int login(MYSQL  mysql_conn,int loginType,char * id,char * password) ;
void getDate(char * xxDate) ;
void encrypt(char * password) ;

void adminMoudle(MYSQL  mysql_conn,char *  id,char * password)
{
    system("CLS") ;
    printInCenter("管理员登陆") ;
    int loginResult = login(mysql_conn,ADMIN,id,password) ;
    if(loginResult == false)
    {
        printf("用户名或密码输入错误\n") ;
        int choice ;
        char options[200] = "1.重新输入\n2.退出\n" ;
        printLeftJustify(options) ;
        scanf("%d",&choice) ;
        if(choice == 1)
        {
            int times = 2 ;
            while(times >0&&(login(mysql_conn,ADMIN,id,password) == false))
            {
                printf("输入错误,还有%d次机会\n",times-1) ;
                times-- ;
            }
            if(times == 0)
            {
                printf("达到错误次数\n") ;
                return  ;
            }

        }
        else
        {
            return  ;
        }

    }
    //登陆成功
    Manage(mysql_conn,id) ;

}
void userMoudle(MYSQL  mysql_conn,char *  id,char * password)
{
    int choice ;
    while(!system("CLS"))
    {
        printInCenter("用户登陆、注册") ;
        printLeftJustify("\n1.登陆\n2.注册\n3.退出\n") ;
        scanf("%d",&choice) ;
        if(choice == 1)
        {
            int loginResult = login(mysql_conn,USER,id,password) ;
            if(loginResult == false)
            {
                printf("用户名或密码输入错误\n") ;
                int choice ;
                char options[200] = "1.重新输入\n2.退出\n" ;
                printLeftJustify(options) ;
                scanf("%d",&choice) ;
                if(choice == 1)
                {
                    int times = 2 ;
                    while(times >0&&(login(mysql_conn,ADMIN,id,password) == false))
                    {
                        printf("输入错误,还有%d次机会\n",times-1) ;
                        times-- ;
                    }
                    if(times == 0)
                    {
                        printf("达到错误次数\n") ;
                        return  ;
                    }

                }
                else
                {
                    return  ;
                }

            }
            //登陆成功
            userManageMenu(mysql_conn,id) ;
        }
        else if(choice == 2)
        {
            char rePass[20] ;
            printf("请输入账户名(登陆邮箱):\n") ;
            scanf("%s",id) ;
            while(printf("请输入密码:\n"))
            {
                scanf("%s",password) ;
                printf("请再次输入密码:\n") ;
                scanf("%s",rePass) ;
                if(strcmp(rePass,password) == 0)
                {
                    break ;
                }
                else
                {
                    printf("两次密码不一致,请重新输入\n") ;
                }
            }
            encrypt(password) ; //加密
            char name[20] ;
            printf("请输入姓名:\n") ;
            scanf("%s",name) ;
            char sql_2[200] = "insert into user values('" ;
            strcat(sql_2,id) ;
            strcat(sql_2,"','") ;
            strcat(sql_2,password) ;
            strcat(sql_2,"','") ;
            strcat(sql_2,name) ;
            strcat(sql_2,"')") ;
            if(mysql_query(&mysql_conn,sql_2) == 0)
            {
                printf("注册成功\n") ;
            }
            else
            {
                printf("注册失败\n") ;
            }
        }
        else if(choice == 3)
        {
            return ;
        }
        else
        {
            printf("无效的选项\n") ;
        }
    }
}
int login(MYSQL mysql_conn,int loginType,char *  id,char * password)
{
    if(loginType == ADMIN)
    {
        printf("请输入账户名(登陆邮箱):\n") ;
        scanf("%s",id) ;
        printf("请输入密码:\n") ;
        scanf("%s",password) ;
        char sql_1[200] = "select * from admin where id = '" ;
        strcat(sql_1,id) ;
        strcat(sql_1,"' and password='") ;
        strcat(sql_1,password) ;
        strcat(sql_1,"'") ;
        MYSQL_RES * res ;
        if(mysql_query(&mysql_conn,sql_1) != 0)
        {
            printf(mysql_error(&mysql_conn)) ;
            return -1 ;
        }
        res = mysql_store_result(&mysql_conn) ;
        int row_num = mysql_num_rows(res) ;
        if(row_num == 0)
            return false ;
        else
            return true ;
    }
    else
    {
        printf("请输入账户名(登陆邮箱):\n") ;
        scanf("%s",id) ;
        printf("请输入密码:\n") ;
        scanf("%s",password) ;
        encrypt(password) ;
        char sql_1[200] = "select * from user where id = '" ;
        strcat(sql_1,id) ;
        strcat(sql_1,"' and password='") ;
        strcat(sql_1,password) ;
        strcat(sql_1,"'") ;
        MYSQL_RES * res ;
        if(mysql_query(&mysql_conn,sql_1) != 0)
        {
            printf(mysql_error(&mysql_conn)) ;
            return -1 ;
        }
        res = mysql_store_result(&mysql_conn) ;
        int row_num = mysql_num_rows(res) ;
        if(row_num == 0)
            return false ;
        else
            return true ;
    }
}
void Manage(MYSQL mysql_conn,char * id)
{
    char sql_1[200] = "select name from user where id='" ;
    strcat(sql_1,id) ;
    strcat(sql_1,"'") ;
    MYSQL_RES * res ;
    if(mysql_query(&mysql_conn,sql_1) != 0)
    {
        printf(mysql_error(&mysql_conn)) ;
        return ;
    }
    res = mysql_store_result(&mysql_conn) ;
    int row_num = mysql_num_rows(res) ;
    if(row_num == 0)
    {
        printf("无效的用户名\n") ;
        return ;
    }
    MYSQL_ROW name_row = mysql_fetch_row(res) ;
    char name[20] ;
    strcpy(name,name_row[0]) ;
    while(!system("CLS") )
    {
        printInCenter("管理选项");
        printf("欢迎您,%s\n",name) ;
        printLeftJustify("您可以\n1.管理商品\n2.销售统计\n3.退出管理\n") ;
        int choice ;
        scanf("%d",&choice) ;
        switch(choice)
        {
        case 1 :
            itemManage(mysql_conn) ;
            break ;
        case 2 :
            saleStatistics(mysql_conn) ;
            break ;
        case 3:
            return ;
        default :
            printf("无效的选项\n") ;
        }

    }
}
int itemList(MYSQL mysql_conn)
{
    char sql[200] = "SELECT * FROM item ORDER BY number asc" ;
    if(mysql_query(&mysql_conn,sql) != 0)
    {
        printf(mysql_error(&mysql_conn)) ;
        return false;
    }
    MYSQL_RES * res ;
    res = mysql_store_result(&mysql_conn) ;
    int row_num = mysql_num_rows(res) ;
    if(row_num == 0)
    {
        printf("暂无商品\n") ;
        return true;
    }
    MYSQL_ROW row ;
    printHR() ;
    printf("商品编号\t商品名称\t类别\t描述\t\t价格\t库存量 \n") ;
    printHR() ;
    int i ;
    for( i = 0 ; i < row_num ; i++)
    {
        row = mysql_fetch_row(res) ;
        printf("%-8s\t%-8s\t%-4s\t%-12.12s\t%-4s\t%-6s\n",row[0],row[1],row[2],row[3],row[4],row[5]) ;
    }
    printHR() ;
    return true ;
}
void itemManage(MYSQL mysql_conn)
{
    system("CLS") ;
    while(printInCenter("商品管理")&&itemList(mysql_conn) == true)
    {
        printLeftJustify("1.添加商品信息\n2.修改商品价格和库存\n3.删除商品\n4.退出商品管理\n") ;
        int choice ;
        scanf("%d",&choice) ;
        if(choice == 1)
        {
            printf("\n请依次输入商品的名称,类别,描述,价格,以及库存量(以回车分隔)\n") ;
            char name[20],category[20],description[400],price[10],stock[10];
            getchar() ;//捕捉来自choice输入后输入流中的回车
            gets(name) ;
            gets(category) ;
            gets(description) ;
            gets(price) ;
            gets(stock) ;
            char sql_1[500] = "insert into item(name,category,description,price,stock)values('" ;
            strcat(sql_1,name) ;
            strcat(sql_1,"','") ;
            strcat(sql_1,category) ;
            strcat(sql_1,"','") ;
            strcat(sql_1,description) ;
            strcat(sql_1,"',") ;
            strcat(sql_1,price) ;
            strcat(sql_1,",") ;
            strcat(sql_1,stock) ;
            strcat(sql_1,")") ;
            if(mysql_query(&mysql_conn,sql_1) != 0)
            {
                printf(sql_1) ;
                printf(mysql_error(&mysql_conn)) ;
                return ;
            }
            printf("\n商品添加成功\n") ;
        }
        else if(choice == 2)
        {
            getchar() ;
            printf("\n请输入要修改的商品编号\n") ;
            char itemId[10] ;
            gets(itemId) ;
            char price[10] ;
            char stock[10] ;
            char sql_3[100] = "update item set " ;
            printf("\n请输入该商品新的价格(回车表示不变):\n") ;
            gets(price) ;
            if(strcmp(price,"") != 0)
            {
                strcat(sql_3,"price=") ;
                strcat(sql_3,price) ;
                strcat(sql_3,",") ;
            }
            printf("\n请输入该商品目前库存量:\n") ;
            gets(stock) ;
            strcat(sql_3,"stock=") ;
            strcat(sql_3,stock) ;
            strcat(sql_3," where number=") ;
            strcat(sql_3,itemId) ;
            if(mysql_query(&mysql_conn,sql_3) != 0)
            {
                printf(sql_3) ;
                printf(mysql_error(&mysql_conn)) ;
                return ;
            }
            int affected_rows = mysql_affected_rows(&mysql_conn) ;
            if(affected_rows == 0)
            {
                printf("\n无效的商品编号,修改失败\n") ;
            }
            else
            {
                printf("\n修改信息成功\n") ;
            }


        }
        else if(choice == 3)
        {
            getchar() ;
            printf("\n请输入要删除的商品编号\n") ;
            char itemId[10] ;
            gets(itemId) ;
            char sql_2[100] = "delete from item where number = " ;
            strcat(sql_2,itemId) ;
            if(mysql_query(&mysql_conn,sql_2) != 0)
            {
                printf(mysql_error(&mysql_conn)) ;
                return ;
            }
            int affected_rows = mysql_affected_rows(&mysql_conn) ;
            if(affected_rows == 0)
            {
                printf("\n无效的商品编号,删除失败\n") ;
            }
            else
            {
                printf("\n删除成功\n") ;
            }

        }
        else if(choice == 4)
        {
            return ;
        }
        else
        {
            printf("无效的选项\n") ;
        }
    }

}
void saleStatistics(MYSQL mysql_conn)
{
    while(!system("CLS"))
    {
        printInCenter("销售统计") ;
        printLeftJustify("\n1.统计每种商品在一个时间段内的销售情况\n2.统计每类商品在一个时间段内的销售情况\n3.查看某件商品的详细销售情况\n4.退出销售统计\0" ) ;
        setbuf(stdin,NULL) ;
        char choice ;
        setbuf(stdin,NULL) ;
        scanf("%c",&choice) ;
        MYSQL_RES * res ;
        int row_num ;
        MYSQL_ROW row ;
        switch(choice)
        {
            case '1' :
            {
                char startDate[9] ,endDate[9] ;
                printf("请输入起始日期(格式示例如:20130808)\n") ;
                scanf("%s",startDate) ;
                printf("请输入结束日期(格式示例如:20130909)\n") ;
                scanf("%s",endDate) ;
                setbuf(stdin,NULL) ;
                system("CLS") ;
                char sql_name[300] = "select number,name,ordertime,sum(orderquantity),sum(orderquantity*orderprice) from item,orderform where number = itemnumber and ordertime between '" ;
                strcat(sql_name,startDate) ;
                strcat(sql_name,"' and '") ;
                strcat(sql_name,endDate) ;
                strcat(sql_name,"' group by number") ;
                if(mysql_query(&mysql_conn,sql_name) != 0)
                {
                    printf(sql_name) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar() ;
                    return ;
                }
                res = mysql_store_result(&mysql_conn) ;
                row_num = mysql_num_rows(res) ;
                char title[40] = "每种商品在" ;
                strcat(title,startDate) ;
                strcat(title,"到") ;
                strcat(title,endDate) ;
                strcat(title,"时间段内的销售情况") ;
                printInCenter(title) ;
                printHR() ;
                printf("商品编号\t商品名称\t订单日期\t总销量\t总金额\n") ;
                printHR() ;
                if(row_num == 0)
                {
                    printf("暂无订单\n") ;
                }
                else
                {
                    int i ;
                    for(i = 0 ; i < row_num ; i++)
                    {
                        row = mysql_fetch_row(res) ;
                        printf("%-8s\t%-8s\t%-8s\t%6s\t%10.2f\n",row[0],row[1],row[2],row[3],atof(row[4])) ;
                    }
                }
                printHR() ;
                printf("按任意键返回\n") ;
                setbuf(stdin,NULL) ;
                getchar() ;
            }
            break ;
            case '2' :
            {
                char startDate[9] ,endDate[9] ;
                printf("请输入起始日期(格式示例如:20130808)\n") ;
                scanf("%s",startDate) ;
                printf("请输入结束日期(格式示例如:20130909)\n") ;
                scanf("%s",endDate) ;
                setbuf(stdin,NULL) ;
                system("CLS") ;
                char sql_name[300] = "select category,sum(orderquantity),sum(orderquantity*orderprice) from item,orderform where number = itemnumber and ordertime between '" ;
                strcat(sql_name,startDate) ;
                strcat(sql_name,"' and '") ;
                strcat(sql_name,endDate) ;
                strcat(sql_name,"' group by category") ;
                if(mysql_query(&mysql_conn,sql_name) != 0)
                {
                    printf(sql_name) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar() ;
                    return ;
                }
                res = mysql_store_result(&mysql_conn) ;
                row_num = mysql_num_rows(res) ;
                char title[40] = "每类商品在" ;
                strcat(title,startDate) ;
                strcat(title,"到") ;
                strcat(title,endDate) ;
                strcat(title,"时间段内的销售情况") ;
                printInCenter(title) ;
                printHR() ;
                printf("商品类型\t\t总销量\t\t总金额\n") ;
                printHR() ;
                if(row_num == 0)
                {
                    printf("暂无订单\n") ;
                }
                else
                {
                    int i ;
                    for(i = 0 ; i < row_num ; i++)
                    {
                        row = mysql_fetch_row(res) ;
                        printf("%-8s\t\t%6s\t\t%10.2f\n",row[0],row[1],atof(row[2])) ;
                    }
                }
                printHR() ;
                printf("按任意键返回\n") ;
                setbuf(stdin,NULL) ;
                getchar() ;
            }
            break ;
            case '3' :
            {
                    itemList(mysql_conn) ;
                    printf("请输入商品编号\n") ;
                    setbuf(stdin,NULL) ;
                    char number[10] ;
                    scanf("%s",number) ;
                    system("CLS") ;
                    printInCenter("商品详细销售情况") ;
                    printHR() ;
                    printf("订单编号\t订单人\t\t\t订单日期\t订单数量\t总额\n") ;
                    char sql[200] = "select ordernumber,userid,ordertime,orderquantity,orderquantity*orderprice from item,orderform where itemnumber = number and number = " ;
                    strcat(sql,number) ;
                    if(mysql_query(&mysql_conn,sql) != 0)
                    {
                        printf(sql) ;
                        printf(mysql_error(&mysql_conn)) ;
                        getchar() ;
                        return ;
                    }
                    res = mysql_store_result(&mysql_conn) ;
                    row_num = mysql_num_rows(res) ;
                    if(row_num == 0)
                    {
                        printf("没有相关订单\n") ;
                    }
                    else
                    {
                        int i ;
                        for(i = 0 ; i < row_num ; i++)
                        {
                            row = mysql_fetch_row(res) ;
                            printf("%-8s\t%-18.18s\t%-8s\t%8s%10.2f\n",row[0],row[1],row[2],row[3],atof(row[4])) ;
                        }
                    }
                    printHR() ;
                    printf("按任意键返回\n") ;
                    getchar() ;
            }
            break ;
            case '4' :
            return ;
            default:
            printf("没有这个选项\n") ;
        }
        getchar() ;
    }
}
void userManageMenu(MYSQL mysql_conn,char * id)
{
    char sql_1[200] = "select name from user where id='" ;
    strcat(sql_1,id) ;
    strcat(sql_1,"'") ;
    MYSQL_RES * res ;
    if(mysql_query(&mysql_conn,sql_1) != 0)
    {
        printf(mysql_error(&mysql_conn)) ;
        return ;
    }
    res = mysql_store_result(&mysql_conn) ;
    int row_num = mysql_num_rows(res) ;
    if(row_num == 0)
    {
        printf("无效的用户名\n") ;
        return ;
    }
    MYSQL_ROW name_row = mysql_fetch_row(res) ;
    char name[20] ;
    strcpy(name,name_row[0]) ;
    char title[40] ;
    strcpy(title,name) ;
    strcat(title," 的用户管理中心") ;
    while( !system("CLS"))
    {
        printInCenter(title) ;
        printf("\n欢迎您,%s",name) ;
        printLeftJustify("您可以:\n1.查询商品、加入到购物车\n2.管理购物车(查看,修改,删除,下单)\n3.查看已完成订单\n4.添加或删除辅助邮箱\n5.修改密码\n6.退出管理中心\n") ;
        int choice ;
        scanf("%d",&choice) ;
        if(choice == 1)
        {
            addShoppingCart(mysql_conn,id) ;
        }
        else if(choice == 2)
        {
            manageShoppingCart(mysql_conn,id) ;
        }
        else if(choice == 3)
        {
            printForm(mysql_conn,id) ;
        }
        else if(choice == 4)
        {
            modifyEmail(mysql_conn,id) ;
        }
        else if(choice == 5)
        {
            setbuf(stdin,NULL) ;
            printf("请输入原密码\n") ;
            char password[20] ;
            scanf("%s",password) ;
            char sql_ensure[200] = "select count(*) from user where id = '" ;
            strcat(sql_ensure,id) ;
            strcat(sql_ensure,"' and password = '") ;
            encrypt(password) ;
            strcat(sql_ensure,password) ;
            strcat(sql_ensure,"'") ;
            if(mysql_query(&mysql_conn,sql_ensure) != 0)
            {
                printf(sql_ensure) ;
                printf(mysql_error(&mysql_conn)) ;
                getchar() ;
                return ;
            }
            MYSQL_RES *res ;
            MYSQL_ROW row ;
            res = mysql_store_result(&mysql_conn) ;
            row = mysql_fetch_row(res) ;
            if(row[0] == 0)
            {
                printf("密码输入错误\n按任意键返回") ;
                setbuf(stdin,NULL) ;
                getchar() ;
            }
            else
            {
                while(printf("请输入新密码\n"))
                {
                    scanf("%s",password) ;
                    printf("请再次输入\n") ;
                    char rePass[20] ;
                    scanf("%s",rePass) ;
                    if(strcmp(password,rePass) == 0)
                    {
                        break ;
                    }
                    else
                    {
                        printf("两次密码不一致,请重新输入\n") ;
                    }
                }
                encrypt(password) ;
                char sql_modify[200] = "update user set password = '" ;
                strcat(sql_modify,password) ;
                strcat(sql_modify,"' where id = '") ;
                strcat(sql_modify,id) ;
                strcat(sql_modify,"'") ;
                if(mysql_query(&mysql_conn,sql_modify) != 0)
                {
                    printf(sql_modify) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar() ;
                    return ;
                }
                printf("修改成功\n按任意键返回") ;
                setbuf(stdin,NULL) ;
                getchar() ;
            }
        }
        else if(choice == 6)
        {
            return ;
        }
        else
        {
            printf("没有这个选项啊\n") ;
            Sleep(2000) ;
        }
    }
}
void addShoppingCart(MYSQL mysql_conn,char * id)
{
    char keyWord[20] ;
    printf("请输入一个关键词:") ;
    scanf("%s",keyWord) ;
    printf("\n搜索结果:\n") ;
    printf("商品编号\t商品名称\t类别\t描述\t\t价格\t库存量\n") ;
    //根据名称
    char sql_2[200] = "select * from item where name like '%" ;
    strcat(sql_2,keyWord) ;
    strcat(sql_2,"%'") ;
    if(mysql_query(&mysql_conn,sql_2) != 0)
    {
        printf(mysql_error(&mysql_conn)) ;
        return ;
    }
    MYSQL_RES * res = mysql_store_result(&mysql_conn) ;
    printInCenter("按名称搜索") ;
    printHR() ;
    int row_num = mysql_num_rows(res) ;
    MYSQL_ROW row ;
    if(row_num == 0)
    {
        printInCenter("暂无结果") ;
    }
    else
    {
        int i ;
        for(i = 0 ; i < row_num ; i++)
        {
            row = mysql_fetch_row(res) ;
            printf("%-8s\t%-8s\t%-4s\t%-12.12s\t%-4s\t%-6s\n",row[0],row[1],row[2],row[3],row[4],row[5]) ;

        }
    }
    printHR() ;
    printInCenter("按描述搜索") ;
    printHR() ;
    char sql_3[200] = "select * from item where description like '%" ;
    strcat(sql_3,keyWord) ;
    strcat(sql_3,"%'") ;
    if(mysql_query(&mysql_conn,sql_3) != 0)
    {
        printf(mysql_error(&mysql_conn)) ;
        return ;
    }
    res = mysql_store_result(&mysql_conn) ;
    int row_num_des = mysql_num_rows(res) ;
    if(row_num_des == 0)
    {
        printInCenter("暂无结果") ;
    }
    else
    {
        int i ;
        for( i = 0 ; i < row_num_des ; i++)
        {
            row = mysql_fetch_row(res) ;
            printf("%-8s\t%-8s\t%-4s\t%-12.12s\t%-4s\t%-6s\n",row[0],row[1],row[2],row[3],row[4],row[5]) ;
        }
    }
    printHR() ;
    if(row_num == 0 && row_num_des == 0)
    {
        printf("没有相关商品,按按任意键返回\n");
        setbuf(stdin,NULL) ;
        getchar() ;
    }
    else
    {
        char itemId[20] ;
        printf("\n有想要的东西,就把商品编号输入进来吧(都不满意请输入回车)\n") ;
        setbuf(stdin,NULL) ;//屏蔽回车
        gets(itemId) ;
        if(strcmp(itemId,"") != 0)
        {
            char sql_4[200] = "select * from item where number = " ;
            strcat(sql_4,itemId) ;
            if(mysql_query(&mysql_conn,sql_4) != 0)
            {
                printf(sql_4) ;
                printf(mysql_error(&mysql_conn)) ;
                return ;
            }
            res = mysql_store_result(&mysql_conn) ;
            int row_num_cart = mysql_num_rows(res) ;
            if(row_num_cart == 0)
            {
                printf("找不到商品啊\n按任意键返回") ;
                getchar() ;
            }
            else
            {
                printInCenter("\n您想加入购物车的商品信息\n") ;
                printHR() ;
                MYSQL_ROW itemRow ;
                itemRow = mysql_fetch_row(res) ;
                printf("商品名称:%s\n",itemRow[1]) ;
                printf("商品类别:%s\n",itemRow[2]) ;
                printf("商品描述: %s\n",itemRow[3]) ;
                printf("商品价格:%s\n",itemRow[4]) ;
                printf("商品库存:%s\n",itemRow[5]) ;
                printHR() ;
                printf("请输入想要购买的数量(不超过库存量):") ;
                int quantity ;
                int stock = atoi(itemRow[5]) ; //把字符串转换为整数
                while(scanf("%d",&quantity))
                {
                    if(quantity<= 0 || quantity > stock)
                    {
                        printf("输入的数量不对哦,请重新输入\n") ;
                    }
                    else
                    {
                        break ;
                    }
                }
                setbuf(stdin,NULL) ;
                char quantity_str[20] ;
                itoa(quantity,quantity_str,10) ; //将整形转换为字符串
                char sql_5[200] = "insert into shoppingcart(userid,itemnumber,purchasequantity)values('" ;
                strcat(sql_5,id) ;
                strcat(sql_5,"','") ;
                strcat(sql_5,itemId) ;
                strcat(sql_5,"',") ;
                strcat(sql_5,quantity_str) ;
                strcat(sql_5,")") ;
                if(mysql_query(&mysql_conn,sql_5) != 0)
                {
                    printf(sql_5) ;
                    printf(mysql_error(&mysql_conn)) ;
                    return ;
                }

                printf("\n加入购物车成功,可以在订单管理中下单\n按任意键返回") ;
                getchar() ;

            }
        }
    }
}
void manageShoppingCart(MYSQL mysql_conn,char * id)
{
    setbuf(stdin,NULL) ;
    while(!system("CLS"))
    {
        printInCenter("购物车管理") ;
        printHR() ;
        char sql[200] = "select id,name,price,purchasequantity from shoppingcart ,item where shoppingcart.itemnumber = item.number and userid = '" ;
        strcat(sql,id) ;
        strcat(sql,"' order by id asc") ;
        if(mysql_query(&mysql_conn,sql) != 0)
        {
            printf(sql) ;
            printf(mysql_error(&mysql_conn)) ;
            getchar() ;
            return ;
        }
        MYSQL_RES * res ;
        res = mysql_store_result(&mysql_conn) ;
        int row_num = mysql_num_rows(res) ;
        if(row_num == 0)
        {
            printInCenter("购物车内还没有东西\n") ;
        }
        else
        {
            printf("编号\t商品名称\t商品价格\t购买数量\n") ;
            int i ;
            MYSQL_ROW row ;
            for(i = 0 ; i < row_num ; i++)
            {
                row = mysql_fetch_row(res) ;
                printf("%-4s\t%-8s\t%-8s\t%-8s\n",row[0],row[1],row[2],row[3]) ;
            }

        }
        printHR() ;
        if(row_num == 0)
        {
            printf("暂无商品,添加了商品再来哦\n按任意键返回\n") ;
            getchar() ;
            return ;
        }
        printLeftJustify("\n1.下单购买\n2.修改商品数量\n3.从购物车中删除商品\n4.退出购物车管理\n") ;
        char choice ;
        choice = getchar() ;
        setbuf(stdin,NULL) ;
        switch(choice)
        {
        case '1':
        {
            printf("请输入要购买的商品编号:\n") ;
            char formId[10] ;
            gets(formId) ;
            setbuf(stdin,NULL) ;
            char sql_1[200] = "select * from shoppingcart,item where itemnumber = number and id = " ;
            strcat(sql_1,formId) ;
            if(mysql_query(&mysql_conn,sql_1) != 0)
            {
                printf(sql_1) ;
                printf(mysql_error(&mysql_conn)) ;
                return ;
            }
            res = mysql_store_result(&mysql_conn) ;
            row_num = mysql_num_rows(res) ;
            MYSQL_ROW itemRow ;
            itemRow = mysql_fetch_row(res) ;
            if(row_num == 0)
            {
                printf("没有这个编号哦\n按任意键返回") ;
                getchar() ;
                break ;
            }
            if((atoi(itemRow[9]) - atoi(itemRow[3])) < 0 )
            {
                printf("商品的库存不够了,不能下单\n按任意键返回\n") ;
                getchar() ;
                break ;
            }
            printInCenter("\n要下单的商品信息\n") ;
            printHR() ;
            printf("商品名称:%s\n",itemRow[5]) ;
            printf("商品类别:%s\n",itemRow[6]) ;
            printf("商品描述: %s\n",itemRow[7]) ;
            printf("商品价格:%s\n",itemRow[8]) ;
            printf("购买数量:%s\n",itemRow[3]) ;
            float singlePrice = atof(itemRow[8]) ;
            int quantity = atoi(itemRow[3]) ;
            float price = singlePrice * quantity ;
            printHR() ;
            printf("需要的总金额为:%.2f\n",price) ;
            printHR() ;
            printf("确认下单?(y/n)") ;
            char option ;
            option = getchar() ;
            if(option == 'y' || option == 'Y')
            {
                setbuf(stdin,NULL) ;
                char xxDate[9] ;
                getDate(xxDate) ;
                //向订单表中插入数据
                char sql_form[200] = "insert into orderform(userid,itemnumber,ordertime,orderquantity,orderprice)values('" ;
                strcat(sql_form,id) ;
                strcat(sql_form,"',") ;
                char itemNumber[20] ;
                strcpy(itemNumber,itemRow[2]) ;
                strcat(sql_form,itemNumber) ;
                strcat(sql_form,",'") ;
                strcat(sql_form,xxDate) ;
                strcat(sql_form,"',") ;
                strcat(sql_form,itemRow[3]) ;
                strcat(sql_form,",") ;
                strcat(sql_form,itemRow[8]) ;
                strcat(sql_form,")") ;
                if(mysql_query(&mysql_conn,sql_form) != 0)
                {
                    printf(sql_form) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar() ;
                    return ;
                }
                //更新item表中库存
                char sql_stock[200] = "update item set stock = stock - " ;
                strcat(sql_stock,itemRow[3]) ;
                strcat(sql_stock," where number = ") ;
                strcat(sql_stock,itemNumber) ;
                if(mysql_query(&mysql_conn,sql_stock) != 0)
                {
                    printf(sql_stock) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar() ;
                    return ;
                }
                //删除购物车数据
                char sql_cart[200] = "delete from shoppingcart where id = " ;
                strcat(sql_cart,formId) ;
                if(mysql_query(&mysql_conn,sql_cart) != 0)
                {
                    printf(sql_cart) ;
                    printf(mysql_error(&mysql_conn)) ;
                    getchar()  ;
                    return ;
                }

                printf("购买成功\n按任意键返回") ;
                getchar() ;
            }
            else
            {
                printf("没有下单购买\n按任意键返回\n") ;
                getchar() ;
                break ;
            }
        }
        break ;
        case '2':
        {

            printf("请输入要修改商品的编号:\n") ;
            char formId[10] ;
            gets(formId) ;
            setbuf(stdin,NULL) ;
            //获取库存量
            char sql_getS[100] = "SELECT stock,purchasequantity FROM item,shoppingcart where itemnumber = number and id = " ;
            strcat(sql_getS,formId) ;
            if(mysql_query(&mysql_conn,sql_getS) != 0)
            {
                printf(sql_getS) ;
                printf(mysql_error(&mysql_conn)) ;
                getchar() ;
                return ;
            }
            MYSQL_RES * res ;
            res = mysql_store_result(&mysql_conn) ;
            //判断编号是否正确
            if(mysql_num_rows(res) == 0)
            {
                printf("没有这个编号\n按任意键返回\n") ;
                getchar() ;
            }
            else
            {
                MYSQL_ROW row = mysql_fetch_row(res) ;
                int curentStock = atoi(row[0]) ;
                printf("该商品现有库存为:%5d件,购买数量为%5s件\n",curentStock,row[1]) ;
                printf("请输入新的购买数量\n") ;
                char purchaseQuantity[10] ;
                while(gets(purchaseQuantity))
                {
                    setbuf(stdin,NULL) ;
                    //验证数量否有效
                    int purchaseQuantity_int = atoi(purchaseQuantity) ;
                    if(purchaseQuantity_int < 0 || purchaseQuantity_int > curentStock)
                    {
                        printf("数量不对哦,请重新输入:\n") ;
                    }
                    else if(purchaseQuantity_int == 0)
                    {
                        char sql_delete[200] = "delete from shoppingcart where id = " ;
                        strcat(sql_delete,formId) ;
                        if(mysql_query(&mysql_conn,sql_delete) != 0)
                        {
                            printf(sql_delete) ;
                            printf(mysql_error(&mysql_conn)) ;
                            getchar() ;
                            return ;
                        }
                        printf("已将该商品从购物车中删除\n按任意键返回") ;
                        getchar() ;
                        break ;
                    }
                    else
                    {
                        char sql_modify[200] = "update shoppingcart set purchasequantity = " ;
                        strcat(sql_modify,purchaseQuantity) ;
                        strcat(sql_modify," where id = ") ;
                        strcat(sql_modify,formId) ;
                        if(mysql_query(&mysql_conn,sql_modify) != 0)
                        {
                            printf(sql_modify) ;
                            printf(mysql_error(&mysql_conn)) ;
                            getchar() ;
                            return ;
                        }
                        printf("修改成功\n按任意键返回") ;
                        getchar() ;
                        break ;
                    }
                }
            }
        }
        break ;
        case '3':
        {
            printf("请输入要删除商品的编号:\n") ;
            char formId[10] ;
            gets(formId) ;
            setbuf(stdin,NULL) ;
            char sql_delete[200] = "delete from shoppingcart where id = " ;
            strcat(sql_delete,formId) ;
            if(mysql_query(&mysql_conn,sql_delete) != 0)
            {
                printf(sql_delete) ;
                printf(mysql_error(&mysql_conn)) ;
                getchar() ;
                return ;
            }
            if(mysql_affected_rows(&mysql_conn) != 0)
            {
                printf("已将该商品从购物车中删除\n按任意键返回") ;
                getchar() ;
            }
            else
            {
                printf("编号不对啊,按任意键返回\n") ;
                getchar() ;
            }

        }
        break ;
        case '4':
            return ;
        default:
            printf("没有这个选项\n") ;
        }


    }
}
void printForm(MYSQL mysql_conn,char * id)
{
    system("CLS") ;
    setbuf(stdin,NULL) ;
    printInCenter("已完成的订单") ;
    printHR() ;
    printf("订单号\t购买商品\t下单时间\t购买数量\t商品单价\t合计\n") ;
    char sql[200] = "select ordernumber,name,ordertime,orderquantity,orderprice,orderprice*orderquantity from orderform ,item where number = itemnumber and userid = '" ;
    strcat(sql,id) ;
    strcat(sql,"'") ;
    if(mysql_query(&mysql_conn,sql) != 0)
    {
        printf(sql) ;
        printf(mysql_error(&mysql_conn)) ;
        getchar() ;
        return ;
    }
    MYSQL_RES * res ;
    res = mysql_store_result(&mysql_conn) ;
    if(mysql_num_rows(res) == 0)
    {
        printInCenter("没有订单") ;
    }
    else
    {
        int row_num = mysql_num_rows(res) ;
        MYSQL_ROW row ;
        int i ;
        for( i = 0 ; i < row_num ; i++)
        {
            row = mysql_fetch_row(res) ;
            printf("%-6s\t%-8.8s\t%-8s\t%8s\t%8s\t%8.2f\n",row[0],row[1],row[2],row[3],row[4],atof(row[5])) ;
        }
    }
    printHR() ;
    printf("按任意键返回\n") ;
    getchar() ;
}
void modifyEmail(MYSQL mysql_conn,char * id)
{
    while(!system("CLS"))
    {
        setbuf(stdin,NULL) ;
        char sql_x[200] = "select email from email where userid = '" ;
        strcat(sql_x,id) ;
        strcat(sql_x,"'") ;
        printInCenter("邮箱管理") ;
        printHR() ;
        if(mysql_query(&mysql_conn,sql_x) != 0)
        {
            printf(sql_x) ;
            printf(mysql_error(&mysql_conn)) ;
            getchar() ;
            return ;
        }
        MYSQL_RES * res = mysql_store_result(&mysql_conn) ;
        int row_num = mysql_num_rows(res) ;
        MYSQL_ROW row ;
        char ** emails ;
        if(row_num == 0)
        {
            printInCenter("没有辅助邮箱\n") ;
        }
        else
        {
            int i ;
            emails = (char*)malloc(sizeof(char*)) ;//存储数据,删除时只需要输入编号即可
            for(i = 0 ; i < row_num ; i++)
            {
                emails[i] = (char*)malloc(200*sizeof(char)) ;
            }
            for(i = 0 ; i < row_num ; i++)
            {
                row = mysql_fetch_row(res) ;
                printf("\t%d.\t",i+1) ;
                printf("\t%s\n",row[0]) ;
                strcpy(emails[i],row[0]) ;
            }
        }
        printHR() ;
        printLeftJustify("1.添加辅助邮箱\n2.删除辅助邮箱\n3.退出邮箱管理\n") ;
        char choice ;
        setbuf(stdin,NULL) ;
        choice = getchar() ;
        switch(choice)
        {
        case '1' :
        {
            printf("请输入新邮箱\n") ;
            char newEmail[200] ;
            setbuf(stdin,NULL) ;
            gets(newEmail) ;
            char sql_add[200] = "insert into email values('" ;
            strcat(sql_add,id) ;
            strcat(sql_add,"','") ;
            strcat(sql_add,newEmail) ;
            strcat(sql_add,"')") ;
            if(mysql_query(&mysql_conn,sql_add) != 0)
            {
                printf("添加失败.该邮箱已经存在\n") ;
            }
            else
            {
                printf("添加成功\n") ;
            }
            printf("按任意键返回") ;
            setbuf(stdin,NULL) ;
            getchar() ;
        }
        break ;
        case '2' :
        {
            if(row_num != 0)
            {
                printf("请输入要删除邮箱的编号\n") ;
                int num ;
                scanf("%d",&num) ;
                if(num<1 || num > row_num+1)
                {
                    printf("编号不存在啊\n按任意键返回") ;
                    setbuf(stdin,NULL) ;
                    getchar() ;
                }
                else
                {
                    printf("确定要删除%s吗?(y/n)",emails[num-1]) ;
                    char options ;
                    setbuf(stdin,NULL) ;
                    options = getchar() ;
                    if(options == 'y' || options == 'Y')
                    {
                        char sql_delete[200] =" delete from email where email = '" ;
                        strcat(sql_delete,emails[num-1]) ;
                        strcat(sql_delete,"'") ;
                        if(mysql_query(&mysql_conn,sql_delete) != 0)
                        {
                            printf(sql_delete) ;
                            printf(mysql_error(&mysql_conn)) ;
                            getchar() ;
                            return ;
                        }
                        printf("删除成功\n按任意键返回") ;
                    }
                    else
                    {
                        printf("邮箱未删除\n按任意键返回\n") ;
                    }
                    setbuf(stdin,NULL) ;
                    getchar() ;
                }
            }
            else
            {
                printf("没有辅助邮箱\n按任意键返回") ;
                setbuf(stdin,NULL) ;
                getchar() ;
            }

        }
        break ;
        case '3' :
        {
            //释放内存
            int i ;
            for(i = 0 ; i < row_num ; i++)
            {
                free(emails[i]) ;
            }
            free(emails) ;
        }
            return ;
        default :
            printf("无效的选项,按任意键返回\n") ;
            getchar() ;
        }

    }

}
int printInCenter(char * str)
{
    int len = strlen(str) ;
    int whiteNum = (80-len)/16 ;
    int i ;
    for(i = 0 ; i < whiteNum ; i++)
    {
        printf("\t") ;
    }
    printf("%s\n",str) ;
    return true ;
}
int printLeftJustify(char* str)
{
    int i = 0 ;
    while(str[i] != '\0')
    {
        printf("\t\t\t") ;
        while(str[i] != '\n' && str[i] != '\0')
        {
            putchar(str[i]) ;
            i++ ;
        }
        putchar('\n') ;
        putchar('\n') ;
        i++ ;
    }
    return true ;
}
int printHR()
{
    int i ;
    for(i = 0 ; i < 40 ; i++)
    {
        putchar('-') ;
        putchar(' ') ;
    }
    return true ;
}
void getDate(char * xxDate)
{
    time_t t ;
    struct tm * p ;
    time(&t) ;//初始化
    p = gmtime(&t) ;
    int year = p->tm_year+1900 ;
    int mon = p->tm_mon+1 ;
    int day = p->tm_mday ;
    int i = 0 ;
    for(i = 0 ; i < 9 ; i++)
    {
        xxDate[i] = '\0' ;
    }
    char tmp[10] ;
    itoa(year,tmp,10) ;
    strcpy(xxDate,tmp) ;
    if(mon <= 9)
    {
        strcat(xxDate,"0") ;
    }
    itoa(mon,tmp,10) ;
    strcat(xxDate,tmp) ;
    if(day<= 9)
    {
        strcat(xxDate,"0") ;
    }
    itoa(day,tmp,10) ;
    strcat(xxDate,tmp) ;
}
void encrypt(char * password)
{
    int len = strlen(password) ;
    int i ;
    for(i = 0 ; i < len ; i++)
    {
        password[i] = ~password[i] ;//按位取非 ~
    }
}

#endif // SHOPPINGCART_H_INCLUDED


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值