/*
作者:时洪升
日期:2013-08-16
功能:电子商务系统业务模块实现
*/
#include "business.h"
#include <string.h>
#include "shs.h"
#include "goods.h"
#include <time.h>
/*
*功能:清除输入缓存函数
*参数:无
*返回值:无
*/
void fflush_in()
{
char c = '\0';
c = getchar();
while(c != '\n')
c = getchar();
}
/*
*功能:获取 0 ~ n(不包括 n) 之间的随机数
*参数:n_任意正整数 cause_随机数因子
*返回值:0 ~ n 之间的随机数
*/
int usr_rand(int n,int cause)
{
srand((unsigned)time(NULL) + cause);
return rand() % n;
}
/*
*功能:管理员登录
*参数:无
*返回值:0_登录成功 1_登录失败
*/
int admin_login()
{
char admin[10] = "admin";
char ad[10] = "\0";//保存临时输入的字符串
char *pass = "123456";
char *pa = NULL;//保存临时输入的密码
int count = 0;
do{
printf("请输入管理员帐号:\n");
scanf("%s",ad);
fflush_in();
pa = getpass("密码:");
if(0 == strcmp(ad,admin) && 0 == strcmp(pa,pass)){
return 0;
}
if(count != 2){
printf("用户名或密码错误`@_@`,请重新输入\n");
}
count++;
}while(count != 3);
printf("三次登录失败>_<\n");
exit(0);
}
/*
*功能:查看个别卖家商品信息
*参数:u_head_用户链表头,g_head_商品链表头
*返回值:无
*/
void a_sel_goods(USER *u_head,GOODS *g_head)
{
char name[20] = "\0";//保存临时用户名
USER *cur = NULL;
if(u_head == NULL || g_head == NULL){
return;
}
printf("请输入用户名:\n");
scanf("%s",name);
fflush_in();
cur = u_head->next;
while(cur != u_head){
if(0 == strcmp(cur->name,name)){
g_dis_own_all(cur,g_head);
return;
}
cur = cur->next;
}
printf("用户名不存在\n");
}
/*
*功能:查看个别买购买信息
*参数:u_head_用户链表头,t_head_交易商品链表头
*返回值:
*/
void a_buy_goods(USER *u_head,TRADE *t_head)
{
char name[20] = "\0";//临时保存用户名
USER *cur = NULL;
int flag = 0;
if(u_head == NULL || t_head == NULL){
return;
}
printf("请输入要查看的买家名 \n");
scanf("%s",name);
fflush_in();
cur = u_head->next;
while(cur != u_head){
if(0 == strcmp(name,cur->name)){
flag = 1;
b_see_history(t_head,cur);//买家查看自己购买历史
}
cur = cur->next;
}
if(flag == 0){
printf("对不起,该用户不存在\n");
}
}
/*
*功能:修改个别用户密码
*参数:head_用户链表头
*返回值:0_修改成功,1_修改失败
*/
int a_modify_code(USER *head)
{
char name[20] = "\0";//临时保存用户名
USER *cur = NULL;
if(head == NULL){
return 1;
}
printf("请输入要修改的用户名\n");
scanf("%s",name);
fflush_in();
cur = head ->next;
while(cur != head){
if(0 == strcmp(name,cur->name)){
if(cur->mark == 0){
if(0 == b_modify_code(cur)){
return 0;
}
else{
return 1;
}
}
else if(cur->mark == 1){
if(0 == s_modify_code(cur)){
return 0;
}
else{
return 1;
}
}
}
cur =cur->next;
}
}
/*
*功能:注册卖家用户信息
*参数:head_用户链表头
*返回值:无
*/
void seller_enroll(USER *head)
{
USER *new_node = NULL;//开辟新新节点
char pass1[20] = {'\0'};//暂时保存卖家用户的密码
char pass2[20] = {'\0'};//暂时保存卖家用户的密码
USER *cur = NULL;
if(head == NULL){
return;
}
new_node = u_create();
if(NULL == new_node){ // 创建新节点失败
printf("创建新节点失败\n");
}
else{
new_node->mark = 1;
new_node->like = 0;
new_node->money = 0;
printf("用户名:\n");
scanf("%s",new_node->name);
fflush_in();
cur = head->next;
while(cur != head){
if(strcmp(cur->name,new_node->name) == 0){
printf("用户已存在!\n");
return;
}
cur = cur->next;
}
while(1){
printf("请 输 入 密 码:\n");
scanf("%s",pass1);
fflush_in();
if(strlen(pass1) >= 3 && strlen(pass1) <= 8){
break;
}
printf("密码过长或过短,请重新输入:\n");
}
printf("请再次输入密码:\n");
scanf("%s",pass2);
fflush_in();
if(0 != strcmp(pass1,pass2)){
printf("两次输入密码不一致!\n");
return;
}
strcpy(new_node->pass,pass1);
if(u_insert_end(head,new_node) == 0){
printf("注册成功\n");
return;
}
else{
printf("注册失败\n");
free(new_node);
}
}
}
/*
*功能:卖家登录
*参数:head_用户链表头
*返回值:返回当前登录时的节点指针
*/
USER *seller_login(USER *head)
{
USER *cur = NULL;
char name[20] = "\0";//暂时保存卖家用户名
char *pass = NULL;//暂时保存密码
int count = 0; //计数
int count1 = 0;//计数
int flag = 1;//标记,判断用户名是否存在
if(head == NULL){
return NULL;
}
do{
printf("请输入用户名:\n");
scanf("%s",name);
fflush_in();
cur=head->next;
while(cur != head){
if(strcmp(name,cur->name) == 0 && cur->mark == 1){
flag = 0;
do{
pass = getPasswd("密码:");
if(strcmp(pass,cur->pass) == 0){
if(0 == verify()){
printf("用户登录成功!\n");
return cur;
}
else{
printf("验证码三次输入失败\n登录失败\n");
exit(0);
}
}
count++;
printf("密码错误,请重新输入:\n");
}while(count != 3);
printf("三次输入密码失败\n登录失败\n");
exit(0);
}
cur = cur->next;
}
if(flag == 1){
if(count1 != 2){
printf("用户不存在,请重新输入\n");
}
if(count1 == 2){
printf("用户名输入三次错误\n");
}
}
count1++;
}while(count1 != 3);
printf("用户登录失败\n");
exit(0);
}
/*
*功能:验证码生成和验证
*参数:无
*返回值:0_验证码输入成功,1_验证码输入三次失败
*/
int verify()
{
char ver[10] = "\0";
char usr_ver[10] = "\0";
int i = 0;
int count = 0;
do{
for(i=0;i<5;i++){
ver[i]=
"23456789abcdefghijkmnpqrstuvwxyz"[usr_rand(32,i)];
}
printf("输入验证码:");
puts(ver);
scanf("%s",usr_ver);
fflush_in();
if(0 == strcmp(usr_ver,ver)){
return 0;
}
printf("验证码输入有误!\n");
count++;
}while(count != 3);
return 1;
}
/*
*功能:查看销售历史
*参数:head_交易商品链表头,own_用户自己的节点
*返回值;无
*/
void s_see_history(TRADE *head,USER *own)
{
TRADE *cur = NULL;
cur = head->next;
if(head == NULL || own == NULL){
return;
}
printf("=====================》》已交易商品信息《《======================\n");
printf("订单号\t\t商品名\t\t单价\t数量\t购 买 人\t\t日 期\n");
while(cur != head){
if(cur->sign == 1 && 0 == strcmp(own->name,cur->t_selname)){
printf("%d\t\t%s\t\t%.2lf\t%d\t%s\t\t%s\n",cur->t_indent,
cur->t_name,cur->t_price,cur->t_amount,cur->t_buyname,cur->t_date);
}
cur = cur->next;
}
printf("\n");
}
/*
*功能:卖家查看个人信息
*参数:own_用户自身的节点
*返回值:无
*/
void display_seller(USER *own)
{
if(own == NULL){
return;
}
printf("==========个人信息==========\n");
printf("用户名:");
printf("%s\n",own->name);
printf("金 额:");
printf("%.2lf\n",own->money);
printf("赞 :%d\n",own->like);
printf("\n");
}
/*
*功能:添加商品
*参数:own_用户自身的节点,head_商品链表头
*返回值:0_商品添加成功,1_商品上架失败
*/
int add_goods(USER *own,GOODS *head)
{
GOODS *cur = NULL;
GOODS *new = NULL;
char gds_name[30] = "\0";//暂时保存要上架的商品名
double gds_price = 0.0;//暂时保存要上架的商品单间
int gds_amount = 0;//暂时保存要上架的商品数量
int gds_numb = 0;//暂时保存要上架的商品编号
if(head == NULL || own == NULL){
return 1;
}
printf("请输入 商品 名:\n");
scanf("%s",gds_name);
fflush_in();
cur = head->next;
while(cur != head){
if(0 == strcmp(gds_name,cur->g_name) &&
0 == strcmp(cur->g_