2011-06-28 00:18:00 cmsky 阅读数 1300

 

回顾一下以前写的一个会员竞拍的系统,主要需求如下:

 

1.分为周拍和日拍。(周拍即每周有一个昂贵的物品可以竞拍,日拍即每天可以有三个较便宜的物品可以竞拍。每天有一个日拍物品上线,同时也有一个物品下线。周拍则是一周有一个物品下线,同时也有一个物品上线。物品上线时间为早上10:00,预计结束时间为22:00)。

2.实时竞拍。(用户登陆竞拍系统,能实时看到当前处于竞拍状态的物品的竞拍情况,而用户自己的竞拍行为也能及时地传递到其他用户页面上,所以这个就存在一个实时性问题)。

 

3.倒计时。(显示每一个竞拍物品的倒计时,倒计时为0时,出价最高者为竞拍胜利者)。

 

基于以上的需求,经分析,①对于实时竞拍而言,就需要客户端browser能够获取到最新的竞拍信息,而有两种技术可以实现,其一是使用“服务器推”comet技术,其二是使用ajax轮询。②对于周拍和日拍,究其本身而言,就是竞拍周期为一周,而其他的日拍则为三天(每天有三个日拍可以拍,每天只有一个上线或下线)。而③倒计时问题,则可以采用前端js的window .setInterval定时器和window.setTimeout延迟器相结合使用。

 

其中还涉及到一个倒计时为0时,若有用户竞拍如何处理的问题,经研究后,若在最后20秒内有用户竞拍,则把竞拍的时间在竞拍动作发生点延后20秒。如此若有人在最后20秒内竞拍,时间会延迟20秒,若再有竞拍,则会一直延续,直到没有人竞拍且倒计时为0。

 

根据以上的需求,讨论具体的解决方案。周拍和日拍分别定义为两种类型的竞拍,以一个数据表记录两者数据,以aucationType字段区分两者,并定义物品的状态为:预告,准备竞拍,正在竞拍,竞拍成功,竞拍完成未拍出。第一个状态“预告”,则是物品还未到竞拍开始时间点的状态;到了时间点后,物品的状态需要更新为准备竞拍;若有人对准备竞拍的物品进行竞拍动作并成功,则物品状态变为正在竞拍;而在竞拍结束时间点后,若竞拍结束并有人成功竞拍得物品则物品状态更新为竞拍成功,若无人竞拍则物品状态更新为完成未拍出。

 

根据需求,物品的上线时间和结束时间是固定的,而这个也是不会更改的需求。而遇到的第一个问题:如何把某预告物品在其开始竞拍时更新其状态为准备竞拍(更改准备为正在,则容易了很多)。基于这个问题,就考虑是否采用定时器,而定时器是采用jdk自带的timer,还是使用spring schedule。经讨论后,觉得使用定时器更新并不稳妥。原因有二:①因为在线竞拍系统是采用分布式部署,而不可能每一个服务器上都跑一个定时器,若这么干肯定会造成问题,就算没问题,也浪费了资源。②就算把此定时器部署到单独的一台服务器上,但是几个服务器的时间可能存在细微的差距,但也可能会出现几秒的差距,便会造成本来已经到了竞拍时间而未显示出物品的bug情况。其二若此单独的服务器上定时器失效或挂掉了,那就会造成无法更新的情况。

 

那如何解决这个问题呢,最后想到一个办法,就是设计一个Date变量定义已更新到的日期:当用户来请求时,判断当前系统时间是否为每天的10:00点后,并且判断Date变量是否为次日,若是则不进行更新,若不是则进行更新并重置Date变量为次日。

 

第一个问题解决,之后又遇到第二个问题,竞拍完成后,物品状态如何更新。很明显和第一个问题有同样的问题,但是又不可能说让用户的请求来触发,后来经过取舍后,选择在公司用的单独跑定时任务的服务器上加一个竞拍定时更新竞拍结束信息的定时器,而时间节点则定位每天的凌晨1点。(ps,不可能竞拍延迟,会从22:00延迟到次日01:00吧,哈哈)

数据缓存如何做?实时情况下的数据缓存又怎么做?这是一个蛋疼的问题。

 

竞拍相关的数据分为两种:一种是物品的倒计时数据,一种是物品的竞拍信息数据。第一种显而易见,而第二种则是用户对物品竞拍的数据信息。这是两种不同的实时性数据,其一,倒计时数据可以在第一次取出剩余竞拍时间后,在前端web页面通过window.setInterval每隔1000毫秒减一秒地进行倒计时展现。其二用户竞拍的实时信息,肯定是需要实时的更新。若采用comet技术,那么当有用户竞拍成功后,可以把相关信息推送到展现层。然而,comet技术是以缓冲response,循环写入response为代价,其存在性能上的影响,而在分布式上的也需要对进行控制,较为麻烦。采用ajax轮询,也有一定的弊端,若有N个客户端在使用竞拍系统,则会存在N个类似长连接的ajax请求,对服务器的访问压力也较大。然而就此竞拍系统而言,采用分布式部署,此问题应该不算是什么大问题。另外,由于用户不会一个接一个地马上竞拍,所以结合window.setInterval来定时10秒或5秒不等轮询竞拍实时数据,如此依赖的话,又对此问题做了一个优化。

倒计时一直使用前端js来倒计时的话,可能由于客户端的不同,js执行效率等问题产生时间上的差异,所以在每次获取到竞拍实时数据时,对倒计时进行一次更新。可以减少客户端js执行效率带来的影响,而这样的更新也不会对服务端造成任何的负面影响。

对20秒倒计时的问题,采用了window.setInterval和window.setTimeout相集合的用法。在某物品A的剩余时间小于20秒后,获取物品实时竞拍数据的定时器从原来的10秒轮询,更新到5秒轮询。如此可以更快地得到竞拍实时数据,只是会暂时对服务器端造成压力(ps:物品结束竞拍时间基本都在22:00,此时web上访问量应该已比较少,所以性能上也不会有太大影响)。当客户端显示的某物品倒计时为1时,前端js做了一个2秒的延迟,2秒延迟后再访问服务器获取到实时竞拍数据,以得到最新的竞拍数据(此办法是为了避免有用户在最后5秒内成功竞拍了一次而前端又轮询不到数据的问题)。此物品A已竞拍完成后,前端js就会在轮询时判断出此剩余时间已小于0,则会重置轮询定时器为10秒。

 

如此,整个竞拍系统的前端和后台基本ok,实现的代码上并不存在多大的难度,难点在于精细的控制,定时器的重置,物品状态的刷新方式,20秒倒计时,最后竞拍完成时特殊情况的处理等。采用定时器+轮询的方式,减轻了服务器压力,相较使用comet的优势显而易见了。不过,这是在线竞拍系统,所以若是用户的网络太烂,那也就爱莫能助...╮(╯_╰)╭

关于后台:因为每天都有日拍物品上线,每周都有周拍物品上线,而每一个物品都有一个简单的介绍和一个图片,所以就采用后台配置物品信息的方式。由后台配置上线物品的基本信息,包括拍卖类型(日拍或周拍),开始竞拍时间,预计结束竞拍时间,物品名称,物品描述,物品图片等。

 

考虑到减轻数据压力,所以采用了缓存当日竞拍物品基本信息,当用户访问竞拍页面时,将会请求到缓存中的物品基本信息,而物品实时竞拍信息则是与物品基本信息相分离。在这个缓存当日竞拍物品基本信息时,是采用了内存缓存,因为只可能有四个对象,所以数据不大。

 

基本上整个系统的想法就是如此,其实还有待优化的地方,比如,前端js没有在早上10:00做定时器刷新以获取最新的可竞拍信息(ps:没有做的考虑是:客户端时间不一致,所以就算10:00刷新,也不一定能够得到当天的竞拍信息,可能是昨天的竞拍成功物品+可竞拍的物品信息)。

 

在缓存上,有待优化的地方,其一:竞拍基本信息可以缓存到memcache服务器,不用每台应用服务器内存缓存。其二:物品实时竞拍信息可以缓存到memcache(需同步控制),不用每次都访问数据。

 

此系统可以使用“notes(音符)”作为竞拍工具,而“notesu”由用户去门户上订购收费业务或免费业务,分享,注册等来获取。并且此系统可以作为一个的实现是一个单独的在线竞拍功能,与门户的耦合度较低(耦合在用户权限方面)。

 

在整体上,我对此项目的满意度不高,原因有许多方面,有进度方面的原因,有需求变动的原因,以及一些小问题的处理不够到位的问题如黑名单这些在一开始并没有想到,而是在上线后才补充上去的功能。

 

原文:http://cmsky.yingjiawujin.com/?p=113

 

2018-06-22 01:31:47 Process_ing 阅读数 719

      也许有人以后后看到这篇文章,同样为实现物品竞拍管理系统而头痛。但是,我要告诉你如果一开始不会做的话,那是正常的,毕竟我一开始也是如此。但是,更是这样,更是应该自己独立思考,毕竟一个程序员就是需要独立思考的能力和用算法解决生活实际问题的能力。

  

正文:

      在实验的过程中,自己独立思想的过程与别人不太一样,我发现我的同学大多是实现多个物体同时可以进行拍卖,而且拍卖结束后的物品时间是可以不同的,也就是可以这样理解:前天我上传物品上去拍卖,定义拍卖时间5天,今天上传物品上去,定义拍卖时间3天,然后我可以在网站上查询可以多个物品了。而我的代码实现是类似于正常的拍卖交易所一样,类似于队列,First in First out,每个用户拥有自己的背包,可以上传自己的物品,每件物品固定不变的拍卖时间是60s,在60s内,你可以进行拍卖,而且拍卖会自己提醒你还有多少时间可以拍卖。

      当然,在功能的实现上,你可以选择用 用户名,手机,或者邮箱登录,在上传物品拍卖的同时你可以选择拍卖的方式,当你拍卖完成后也可以选择支付/流拍等等。同时还有多种多样物品的查询方式(最后 你会发现我的查询很累赘)。

      最后,我打的代码可能出现BUG,并且有点累赘,有些地方是可以精简一下的。所以,以下代码只作为参考。毕竟,不同人有不同的思想,你也可以实现一个多个物体同时拍卖的系统,用户只需要点开查询即可。

 


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <cmath>
#include <conio.h>
#include <malloc.h>
#include <cmath>
#include <ctime>
#include <windows.h>
#include <process.h>
#include <vector>
#define Max_User 2000


using namespace std;
char T[20];//用户名
HANDLE hTimer;//无关变量
int Rott;//剩余时间;
char Buyer[20];
char Seller[20];
char Tpassword[21];//密码


typedef struct RANK
{
    char Name[20];
    int score;
} RANK;//排行榜


typedef struct Bag_Goods
{
    int G_ID;  //编号
    char G_Name[20];//商名
    int New_old;//新旧
    char Desc[120];//描述
    int Price;//估价
    int years;   //年份
    char size[40]; //大小
    int weight;//重量
    int State;// 1 拍卖 0 存放
    int flag;// 1 拍卖得到的
} Bag_Goods;


typedef struct T_G
{
    int G_ID;  //编号
    char G_Name[20];//商名
    int New_old;//新旧
    char Desc[120];//描述
    int Price;//估价
    int years;   //年份
    char size[40]; //大小
    int weight;//重量
    int State;//是否拍卖
    int flag;// 1 拍卖得到的
    struct T_G *next;
} T_G;//链表进行增加 删除背包物品


typedef struct USER
{
    char Name[20];     //名字
    char Sex[10];           //性别
    char Pho_num[20];       //手机电话
    char Mail[20];  //邮箱
    char Spec[30];  //个性签名
    int score;   //信誉评分
    char Acc_num[20];     //用户名
    char Password[20]; //密码
    int Sum;  //多少件物品
    char Address[40];//地址
    Bag_Goods MyGoods[20];//物品编号
} USER;


typedef struct TIME
{
    int Year;
    int Month;
    int Day;
    int Hour;
    int Min;
    int Sec;
} TIME;//拍卖物品开始时间


typedef struct Bid_Money
{
    char Next_Haver_Name[20];//下一个竞拍人的 名字
    int Money;


    int Ye;
    int Mo;
    int Da;
    int Ho;
    int Mi;
    int Se;
} Bid_Money;//出价人的信息




typedef struct BIDDER//拍卖物品的信息
{
    int NUM;
    char Haver[20];//以前拥有者
    int G_ID;//物品在原背包编号
    char Address[40];//地址
    char B_Name[20];//物品名字
    int B_years;//物品年份
    int B_New_old;//物品新旧
    char B_Desc[20];//物品描述
    int B_Price;///起拍价格
    int B_H_Price;///一口价
    int Final_Price;///最终价
    int B_weight;//重量
    char B_size[40];//类型
    int M_M;//明盲
    int Z_F;//正反
    TIME B_Time;//拍卖时间
    char Ber[20];//卖家
    int flag1;///    1 拍卖 2 过期  3待支付 4过期恢复完成背包添加 5 正在竞拍
    int flag2;///    1 已支付 2 已流拍
    int sum;//出价人
    Bid_Money Mark[30];//价格
    //ENDTIME e_time;
} BIDDER;






BIDDER Bidder[1000];//竞拍物品
USER User[500];//用户信息
RANK Rank[500];//排行榜


int mintues;//计分
int seconds;//计秒
int Re_min;//无关变量
int Re_sec;//无关变量
int F_H;//第一有钱的人
int S_H;//无关变量
int Bi,Bn;//正在拍卖的物品
int UI,UN;//登录人的下标
int Start=0,End=0;//无关变量


///函数
void delay(double second);//延迟
void In_System();//loading...
void str_to_ch(string A,char a[]);//将string变为char a[]存储
void Menu();//欢迎界面
void Jugel();//判断
void Register();//注册
void Login();//登录
void Cancel();//注销
void Login_Warning();//输入密码界面
void Login_welcome();//登陆完成界面
void Watch_Bag(); //查看背包
void Add_Goods(int i,int n);//增加物品
void Del_Goods(int i,int n);//删除物品
void GoodTraverse(int i,int n);//查看修改物品信息


///登录修改
void Revise_User_Info();//修改用户信息
void Revise_User_Info_Pho_Num(int i,int j);//修改手机号码
void Revise_User_Info_Spec(int i,int j);//修改个性签名
void Revise_User_Info_Password(int i,int j);//修改密码
void Revise_User_Info_Mail(int i,int j);//修改邮箱
void Revise_User_Info_Address(int i,int j);//修改地址


///登录查询
void Revise_G_ID(int i,int n);//按物品编号查询
void Revise_G_Name(int i,int n);//按物品名字查询
void Revise_G_New_Old(int i,int n);//按物品新旧查询
void Revise_G_State(int i,int n);//按物品拍卖查询
void Revise_G_size(int i,int n);//物品类型
void Revise_All_G(int i,int n);//查看所有物品
void Revise_Part_G(int Ui,int mid);//查看单一物品
void I_just_check(int i,int n);//随便查询背包物品
void Change_Good(int i,int n);//改变物品信息
void Flag_Good(int i,int n);//拍卖得到的物品


///快排二分
void Quick_Sort(USER User[],int Ui,int left,int right,int choice);//快排
void Bin_Search(USER User[],int Ui,int left,int right,int choice,int e);//二分查找
void Rank_Quick_Sort(RANK Rank[],int left,int right);//排行榜
void B_S(BIDDER Bidder[],int Ui,int left,int right,int e);//二分查找
void Del_Auction();//删除竞拍


///用户
int Read_U_All_File();//读取USER全部文件
int Read_U_Part_File(int n);//读取UERR关键文件
void WriteinFile(int i);//写入文件
///拍卖物品
int ReadALL_BFile();//读取拍卖物品文件
void Write_B_inFile(int i);//写入文件
int Read_B_PartFile(int B_n);//读取关键文件
void CLear_File();
///排行榜
void Rank_Read(int Un);//读取用户信誉度


void Pre_Bid(int Ui,int Un);//将物品放在平台上拍卖
void Password_Undisplay(char Pw[]);//密码显示


///直接查看信息
void Revise_Online();//查看信息 可以扩展
void Revise_Online_Good();//不登录查看物品
void Revise_Online_User();//不登录查看用户
void Revise_Online_Rank();//不登录查看排行榜


void Help();///帮助 可以扩展
void Mannel();///用户手册
void Receive_rewards();///领取奖励


void About_Author();///关于作者 可以扩展


void Join_Pm();//参与竞拍


void Auction_All_Revise(int B_i,int B_n);//查看拍卖信息
void Auction_Size_Revise(int B_i,int B_n);//查看单一拍卖信息


int Online_Money(int P,int flag1,int flag2);//网上价钱
void Payment(int p);//支付
void Racket(int p);//流拍
void Overdue();//过期没人要的东西
void Back_Bag();//回到背包;


void Decide_Time(int B_n);//决定时间拍卖;


void Count_Backwards_time();//时间倒数
void Waiting_Time();//等待时间
int Time_minus(int p);//时间差




int main()//主函数
{


    system("mode con cols=237 lines=100");
    memset(T,'\0',sizeof(char));
    int choice1,choice2,choice3;


    /*int B_n=ReadALL_BFile();
    printf("%d\n",B_n);
    for(int i=0; i<B_n; i++)
    {
        printf("  %s  \n",Bidder[i].B_Name);
        printf("  %d  \n",Bidder[i].flag1);
    }


    Overdue();
    Back_Bag();


    for(int i=0; i<B_n; i++)
    {
        printf("  %s  \n",Bidder[i].B_Name);
        printf("  %d  \n",Bidder[i].flag1);
        //printf("  %s  \n",Bidder[i].Mark[1].Next_Haver_Name);
    }*/
    //Overdue();
    //Back_Bag();
    //In_System();
    while(1)
    {
        Overdue();
        Back_Bag();
        system("cls");
        Menu();
        printf("\nPs:新注册用户应该先阅读 帮助 中 的使用须知\n");
        printf("\t\t\t\t\t\t\t\t请输入:");
        scanf("%d",&choice1);
        choice2=0;
        system("cls");
        switch(choice1)
        {


        case 1://登录
            while(1)
            {
                printf("\t\t\t\t\t\t\t\t*********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                       *\n");
                printf("\t\t\t\t\t\t\t\t*                 0、继续登陆                           *\n");
                printf("\t\t\t\t\t\t\t\t*                 3、返回上一级                         *\n");
                printf("\t\t\t\t\t\t\t\t*                 5、退出程序                           *\n");
                printf("\t\t\t\t\t\t\t\t*                                                       *\n");
                printf("\t\t\t\t\t\t\t\t*********************************************************\n");
                scanf("%d",&choice2);
                if(choice2==3)break;
                if(choice2==5)exit(0);
                if(!choice2)
                {
                    if(T[0]=='\0')
                    {
                        Login();
                        system("pause");
                    }
                    cout<<endl;
                    while(1)
                    {
                        if(T[0]=='\0')
                        {
                            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                            printf("\t\t\t\t\t\t\t\t*                   返回继续登录!                       *\n");
                            printf("\t\t\t\t\t\t\t\t*                   3、返回上一级                        *\n");
                            printf("\t\t\t\t\t\t\t\t*                   5、退出程序                          *\n");
                            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                            printf("\t\t\t\t\t\t\t\t请输入:");
                            scanf("%d",&choice2);
                        }
                        system("cls");
                        if(choice2==3)break;
                        if(choice2==5)exit(0);
                        while(1)
                        {
                            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                            printf("\t\t\t\t\t\t\t\t*                    9、支付或者流拍物品                 *\n");
                            printf("\t\t\t\t\t\t\t\t*                    8、注销 重新登录                    *\n");
                            printf("\t\t\t\t\t\t\t\t*                    7、查看或者修改用户信息             *\n");
                            printf("\t\t\t\t\t\t\t\t*                    6、查看背包物品                     *\n");
                            printf("\t\t\t\t\t\t\t\t*                    4、参加拍卖                         *\n");
                            printf("\t\t\t\t\t\t\t\t*                    3、返回上一级                       *\n");
                            printf("\t\t\t\t\t\t\t\t*                    5、退出程序                         *\n");
                            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                            printf("\t\t\t\t\t\t\t\t请输入:");
                            scanf("%d",&choice2);
                            if(choice2==3)break;
                            if(choice2==8)
                            {
                                Cancel();//注销
                                break;
                            }
                            switch(choice2)
                            {


                            case 1:
                            case 2:
                            case 4://参加竞拍
                                //printf("%s\n",T);
                                Join_Pm();
                                cout<<endl;
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                                printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t请输入:");
                                scanf("%d",&choice3);
                                system("cls");
                                if(choice3==3)break;
                                switch(choice3)
                                {
                                case 1:
                                case 2:
                                case 4:
                                    break;
                                case 5:
                                    exit(0);
                                }
                            case 5:
                                exit(0);
                            case 6:
                                //printf("%s\n",T);
                                Overdue();
                                Watch_Bag();
                                cout<<endl;
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                                printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t请输入:");
                                scanf("%d",&choice3);
                                system("cls");
                                if(choice3==3)break;
                                switch(choice3)
                                {
                                case 1:
                                case 2:
                                case 4:
                                    break;
                                case 5:
                                    exit(0);
                                }
                            case 7:
                                Revise_User_Info();
                                system("CLS");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                                printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t请输入:");
                                scanf("%d",&choice3);
                                system("cls");
                                if(choice3==3)break;
                                switch(choice3)
                                {
                                case 1:
                                case 2:
                                case 4:
                                    break;
                                case 5:
                                    exit(0);
                                }
                            case 9:
                                Jugel();
                                system("CLS");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                                printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                                printf("\t\t\t\t\t\t\t\t**********************************************************\n");;
                                printf("\t\t\t\t\t\t\t\t请输入:");
                                scanf("%d",&choice3);
                                system("cls");
                                if(choice3==3)break;
                                switch(choice3)
                                {
                                case 1:
                                case 2:
                                case 4:
                                    break;
                                case 5:
                                    exit(0);
                                }
                            }
                        }
                    }


                }
                break;
            case 2://注册
                while(1)
                {
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t*                    0、继续注册                         *\n");
                    printf("\t\t\t\t\t\t\t\t*                    3、返回上一级                       *\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t请输入:");
                    scanf("%d",&choice2);
                    if(!choice2)
                    {
                        Register();
                        cout<<endl;
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                        printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t请输入:");
                        scanf("%d",&choice2);
                    }
                    system("cls");
                    if(choice2==3)break;
                    switch(choice2)
                    {


                    case 1:
                    case 2:
                    case 4:
                        break;
                    case 5:
                        exit(0);


                    }
                }
                break;
            case 4://直接查询(可不登录)
                while(1)
                {
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t*                    0、继续查询                         *\n");
                    printf("\t\t\t\t\t\t\t\t*                    3、返回上一级                       *\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");;
                    printf("\t\t\t\t\t\t\t\t请输入: ");
                    scanf("%d",&choice2);
                    if(!choice2)
                    {
                        Revise_Online();
                        cout<<endl;
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                        printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");;
                        printf("\t\t\t\t\t\t\t\t请输入:");
                        scanf("%d",&choice2);
                    }
                    if(choice2==3)break;
                    if(choice3==5)exit(0);
                }
                system("cls");
                break;
            case 6:
                while(1)
                {
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t*                    0、继续寻求帮助                     *\n");
                    printf("\t\t\t\t\t\t\t\t*                    3、返回上一级                       *\n");
                    printf("\t\t\t\t\t\t\t\t*                    5、退出                             *\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t请输入:");
                    scanf("%d",&choice2);
                    if(!choice2)
                    {
                        Help();
                        cout<<endl;
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                        printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t请输入:");
                        scanf("%d",&choice2);
                    }
                    if(choice2==3)break;
                    if(choice2==5)exit(0);
                }
                system("cls");
                break;
            case 7://关于作者
                while(1)
                {
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t*                    0、继续                             *\n");
                    printf("\t\t\t\t\t\t\t\t*                    3、返回上一级                       *\n");
                    printf("\t\t\t\t\t\t\t\t*                    5、退出                             *\n");
                    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                    printf("\t\t\t\t\t\t\t\t请输入:");
                    scanf("%d",&choice2);
                    if(!choice2)
                    {
                        About_Author();
                        cout<<endl;
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t*                       3、返回上一级                    *\n");
                        printf("\t\t\t\t\t\t\t\t*                       5、退出程序                      *\n");
                        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                        printf("\t\t\t\t\t\t\t\t**********************************************************\n");;
                        printf("\t\t\t\t\t\t\t\t请输入:");
                        scanf("%d",&choice2);
                    }
                    if(choice2==3)break;
                    if(choice2==5)exit(0);
                }
                system("cls");
                break;
            case 5:
                exit(0);
            default:
                break;
            }
        }
        //return 0;
// Jugel();
    }
}


void Join_Pm()///参加竞拍
{
    int choice,choice2,B_i,B_n;


    Overdue();//过期没人要的东西
    Back_Bag();
    B_n=ReadALL_BFile();
    B_i=Read_B_PartFile(B_n);
    //printf("  %d %d\n",B_i,B_n);
    if(B_i==B_n||B_i==-1)
    {
        printf("\t\t\t\t\t\t\t\t***********************目前没有物品拍卖*********************\n");
        system("Pause");
        return;
    }
    else
    {
        printf("\t\t\t\t\t\t\t\t*********注意 :进入竞拍可以选择竞拍一次 或者 退出********\n");
        //system("pause");
        //printf("进入拍卖系统中...\n");
        while(1)
        {
            Overdue();//过期没人要的东西
            Back_Bag();
            B_n=ReadALL_BFile();
            B_i=Read_B_PartFile(B_n);
            if(B_i==B_n||B_i==-1)
            {
                printf("\t\t\t\t\t\t\t\t***********************目前没有物品拍卖*********************\n");
                system("Pause");
                return;
            }
            printf("\t\t\t\t\t\t\t\t*******************目前有 %d 件物品拍卖*******************\n",B_n-B_i);
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                     1、查看竞拍物品                    *\n");
            printf("\t\t\t\t\t\t\t\t*                     2、参与竞拍                        *\n");
            printf("\t\t\t\t\t\t\t\t*                     3、打扰了!逃                      *\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice);
            if(choice==3)break;
            switch(choice)
            {
            case 1:
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t*                   1、编号 查看 物品                    *\n");
                printf("\t\t\t\t\t\t\t\t*                   2、类型 查看 物品                    *\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                scanf("%d",&choice2);
                system("cls");
                if(choice2==1)Auction_All_Revise(B_i,B_n);
                if(choice2==2)Auction_Size_Revise(B_i,B_n);
                break;
            case 2:
                Overdue();//过期没人要的东西
                Back_Bag();
                B_n=ReadALL_BFile();
                B_i=Read_B_PartFile(B_n);
                Bi=B_i;
                Bn=B_n;
                Waiting_Time();
                system("pause");
                system("cls");
                break;
            default:
                break;
            }
        }
    }
}


void Auction_All_Revise(int B_i,int B_n)///查看物品 编号
{
    int i=Bidder[B_i].NUM+B_i,j=Bidder[B_n-1].NUM+B_i,mid,flag=0,e;
    //printf("%d %d %d %d\n",i,j,Bidder[B_i].NUM,B_i);
    //printf("     %d %d\n",B_i,B_n);
    printf("\t\t\t\t\t\t\t\t输入 竞拍 物品 编号:");
    scanf("%d",&e);
    e=e+B_i-1;
    //printf("%d %d %d\n",i,j,e);
    while(j>=i)
    {
        mid=(i+j)/2;
        if(e==Bidder[mid].NUM+B_i)
        {
            flag=1;
            if(Bidder[mid].B_New_old)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*       拍卖物品名字: %s\n",Bidder[mid].B_Name);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品描述: %s\n",Bidder[mid].B_Desc);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品类型: %s\n",Bidder[mid].B_size);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品起拍价: %d\n",Bidder[mid].B_Price);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品重量: %d\n",Bidder[mid].B_weight);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            if(Bidder[mid].B_H_Price)printf("\t\t\t\t\t\t\t\t拍卖物品支持最高价且最高价:%d\n",Bidder[mid].B_H_Price);
            else printf("\t\t\t\t\t\t\t\t拍卖物品不支持一口价\n");
            if(Bidder[mid].M_M==1)printf("\t\t\t\t\t\t\t\t物品拍卖方式为 明拍\n");
            else printf("\t\t\t\t\t\t\t\t物品拍卖方式为 盲拍\n");
            if(Bidder[mid].Z_F==1)printf("\t\t\t\t\t\t\t\t拍卖规则为 价高者得!\n");
            else printf("\t\t\t\t\t\t\t\t拍卖规则为 价低者得!\n");
            printf("\t\t\t\t\t\t\t\t拍卖物品开始拍卖时间 :%04d %02d %02d %02d %02d %02d\n",Bidder[mid].B_Time.Year,Bidder[mid].B_Time.Month,Bidder[mid].B_Time.Day,Bidder[mid].B_Time.Hour,Bidder[mid].B_Time.Min,Bidder[mid].B_Time.Sec);
            cout<<endl;
            break;
        }
        if(e>Bidder[mid].NUM+B_i)i=mid+1;
        else if(e<=Bidder[mid].NUM+B_i)j=mid-1;
    }
    if(!flag)printf("\t\t\t\t\t\t\t\t没有相关信息\n");
    system("pause");
    system("cls");
}


void Auction_Size_Revise(int B_i,int B_n)///查看单一物品
{
    int i,flag=0;
    char T_c[40];
    printf("\t\t\t\t\t\t\t\t请输入你想查看的物品类型:");
    scanf("%s",T_c);
    //BGP_Choose(i);


    for(i=B_i; i<B_n; i++)
    {
        flag=1;
        if(!strcmp(T_c,Bidder[i].B_size))
        {
            if(Bidder[i].B_H_Price==1)printf("\t\t\t\t\t\t\t\t拍卖物品支持最高价且最高价:%d\n",Bidder[i].B_H_Price);
            else printf("\t\t\t\t\t\t\t\t拍卖物品不支持一口价\n");
            if(Bidder[i].M_M==1)printf("\t\t\t\t\t\t\t\t物品拍卖方式为 明拍\n");
            else printf("\t\t\t\t\t\t\t\t物品拍卖方式为 盲拍\n");
            if(Bidder[i].Z_F==1)printf("\t\t\t\t\t\t\t\t拍卖规则为 价高者得!\n");
            else printf("\t\t\t\t\t\t\t\t拍卖规则为 价低者得!\n");
            if(Bidder[i].B_New_old)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
            cout<<endl;
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*       拍卖物品名字: %s\n",Bidder[i].B_Name);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品描述: %s\n",Bidder[i].B_Desc);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品类型: %s\n",Bidder[i].B_size);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品起拍价: %d\n",Bidder[i].B_Price);
            printf("\t\t\t\t\t\t\t\t*       拍卖物品重量: %d\n",Bidder[i].B_weight);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t拍卖物品开始拍卖时间 :%04d %02d %02d %02d %02d %02d\n",Bidder[i].B_Time.Year,Bidder[i].B_Time.Month,Bidder[i].B_Time.Day,Bidder[i].B_Time.Hour,Bidder[i].B_Time.Min,Bidder[i].B_Time.Sec);
            cout<<endl;
            cout<<endl;
            cout<<endl;


        }
    }
    if(!flag) printf("\t\t\t\t\t\t\t\t没有找到相关物品\n");
    system("pause");
    system("cls");


}
///需要修改 决定时间
void Pre_Bid(int Ui,int Un)///将物品放在平台上拍卖
{
    int T_ID,flag=0,Q=1,j;
    Overdue();
    int B_n=ReadALL_BFile();
    while(Q)
    {
        flag=0;
        printf("\t\t\t\t\t\t\t\t请输入希望放置在平台拍卖的物品 编号:");
        scanf("%d",&T_ID);
        for(j=0; j<User[Ui].Sum; j++)
        {
            if(T_ID==User[Ui].MyGoods[j].G_ID&&User[Ui].MyGoods[j].State!=1)
                //if(T_ID==User[Ui].MyGoods[j].G_ID)
            {
                printf("\t\t\t\t\t\t\t\t找到物品!\n");
                printf("\t\t\t\t\t\t\t\t请输入物品的相关信息:\n");
                User[Ui].MyGoods[j].State=1;
                flag=1;
                break;
            }
        }
        if(!flag)
        {
            printf("\t\t\t\t\t\t\t\t物品编号不存在!\n");
            printf("\t\t\t\t\t\t\t\t或者已经在平台上拍卖!\n");
        }
        else
        {
            Bidder[B_n].G_ID=User[Ui].MyGoods[j].G_ID;
            strcpy(Bidder[B_n].Address,User[Ui].Address);
            strcpy(Bidder[B_n].Haver,User[Ui].Acc_num);
            strcpy(Bidder[B_n].B_Desc,User[Ui].MyGoods[j].Desc);
            strcpy(Bidder[B_n].B_Name,User[Ui].MyGoods[j].G_Name);
            Bidder[B_n].B_New_old=User[Ui].MyGoods[j].New_old;
            strcpy(Bidder[B_n].B_size,User[Ui].MyGoods[j].size);
            Bidder[B_n].B_years=User[Ui].MyGoods[j].years;
            Bidder[B_n].B_weight=User[Ui].MyGoods[j].weight;
            Bidder[B_n].B_Price=User[Ui].MyGoods[j].Price;


            Bidder[B_n].flag1=1;//竞拍
            Bidder[B_n].flag2=0;//还没支付 流拍
            Bidder[B_n].sum=0;//


            Bidder[B_n].B_H_Price=0;


            printf("\t\t\t\t\t\t\t\t输入 【1】 明拍  【2】 盲拍: ");
            scanf("%d",&Bidder[B_n].M_M);


            Bidder[B_n].Z_F=1;




            Decide_Time(B_n);


            system("cls");
            B_n++;
        }
        cout<<endl;
        printf("\t\t\t\t\t\t\t\t1、继续输入希望放置在平台拍卖的物品\n");
        printf("\t\t\t\t\t\t\t\t0、退出输入\n");
        scanf("%d",&Q);
    }
    printf(" %d \n",B_n);


    Write_B_inFile(B_n);
    WriteinFile(Un);
    //for(int q=0; q<Bn; q++)printf("%s %s\n",Bidder[q].B_Name,Bidder[q].Haver);
}
///需要修改
void Payment(int p)///支付
{
    //二维码;
    printf("\n\n\t\t\t\t\t\t\t\t***********  ***** *** * * * **  ***********\n"
           "\t\t\t\t\t\t\t\t**   *   ** ***   * *   * ** *   **   *   **\n"
           "\t\t\t\t\t\t\t\t**  ***  ** * ***  **  ***** *** **  ***  **\n"
           "\t\t\t\t\t\t\t\t**   *   **  ****  *****  ***    **   *   **\n"
           "\t\t\t\t\t\t\t\t***********   ** **   ****  *    ***********\n"
           "\t\t\t\t\t\t\t\t * ** ** * *** *****      **** * * * ***** *\n"
           "\t\t\t\t\t\t\t\t * * ** ** *  *** * ***      ** *** * **  *\n"
           "\t\t\t\t\t\t\t\t  * ** **   ***  * **   ***  *  ** ** * * *\n"
           "\t\t\t\t\t\t\t\t**  *** * ***   **   *   ** ** * * ** *    *\n"
           "\t\t\t\t\t\t\t\t ***   * * * ***       * * ** **    ** * ** \n"
           "\t\t\t\t\t\t\t\t*   *  * * *** ** *  ***   ** * * *  * ** *\n"
           "\t\t\t\t\t\t\t\t* **   ** *   ** * *** ** **   *** * * ** ***\n"
           "\t\t\t\t\t\t\t\t ** **   * ** **    * **** *  **  * * *  * *\n"
           "\t\t\t\t\t\t\t\t* **  * * ** * * * * ** * * *  *  ** * * * *\n"
           "\t\t\t\t\t\t\t\t* *      * ****        **** * ** * * ** * **\n "
           "\t\t\t\t\t\t\t\t* * * * * ***  **   *  *** * ** ** * ** * * \n"
           "\t\t\t\t\t\t\t\t  * * * ** * ** *  ** * * * * * * ***********\n"
           "\t\t\t\t\t\t\t\t* ** * ** * * ** **  * ** * * *   **   *   **\n"
           "\t\t\t\t\t\t\t\t  *    *  ** * * ** *** * * * * * **  ***  **\n"
           "\t\t\t\t\t\t\t\t* * * ** * * ****  * * * ** * *   **   *   **\n"
           "\t\t\t\t\t\t\t\t*** * ** * * **  * * * * * * * *  ***********\n");
    printf("\n\t\t\t\t\t\t\t\t支付宝/微信 扫一扫完成支付");
    Sleep(2000);
    int Un,Index_B,Index_S,flag1=0,flag2=0,i,j;
    Un=UN;
    for(i=0; i<Un; i++)
    {
        if(!strcmp(User[i].Acc_num,Buyer)&&!flag1)
        {
            Index_B=i;
            flag1=1;
        }
        if(!strcmp(User[i].Acc_num,Seller)&&!flag2)
        {
            Index_S=i;
            flag2=1;
        }
        if(flag1&&flag2)break;
    }
    User[Index_B].score+=1;
    User[Index_S].score+=1;
    if(User[Index_B].Sum<20)
    {
        //printf(" %d %s \n",User[Index_B].Sum,User[Index_B].Acc_num);
        ///修改买家
        strcpy(User[Index_B].MyGoods[User[Index_B].Sum].Desc,Bidder[p].B_Desc);
        strcpy(User[Index_B].MyGoods[User[Index_B].Sum].G_Name,Bidder[p].B_Name);
        User[Index_B].MyGoods[User[Index_B].Sum].New_old=Bidder[p].B_New_old;
        strcpy(User[Index_B].MyGoods[User[Index_B].Sum].size,Bidder[p].B_size);
        User[Index_B].MyGoods[User[Index_B].Sum].Price=Bidder[p].Final_Price;
        User[Index_B].MyGoods[User[Index_B].Sum].State=0;
        User[Index_B].MyGoods[User[Index_B].Sum].flag=1;
        User[Index_B].MyGoods[User[Index_B].Sum].weight=Bidder[p].B_weight;
        User[Index_B].MyGoods[User[Index_B].Sum].years=Bidder[p].B_years;


        if(!strcmp(T,Buyer))
        {
            printf("\n\t\t\t\t\t\t\t\t请 新物品 输入编号:");
            while(1)
            {
                int flag3=0;
                scanf("%d",&User[Index_B].MyGoods[User[Index_B].Sum].G_ID);
                for(int k=0; k<User[Index_B].Sum; k++)
                {
                    if(User[Index_B].MyGoods[User[Index_B].Sum].G_ID==User[Index_B].MyGoods[k].G_ID)
                    {
                        flag3=1;
                        break;
                    }
                }
                if(flag3)printf("\n\t\t\t\t\t\t\t\t编号已经存在 请重新输入:");
                else break;
            }
        }
        User[Index_B].Sum++;
    }
    else printf("\n\t\t\t\t\t\t\t\t背包 已满 直接送往 用户 地址\n");
    ///修改卖家
    for(j=0; j<=User[Index_S].Sum; j++)if(User[Index_S].MyGoods[j].G_ID==Bidder[p].G_ID)break;
    for(; j<=User[Index_S].Sum; j++)User[Index_S].MyGoods[j]=User[Index_S].MyGoods[j+1];
    User[Index_S].Sum--;


    WriteinFile(Un);


    //printf(" %d %s \n",User[Index_B].Sum,User[Index_B].Acc_num);


    printf("\n\t\t\t\t\t\t\t\t支付成功!\n");
    printf("\n\t\t\t\t\t\t\t\t物品即将送往 : %s \n",User[Index_B].Address);
    //printf("\t\t\t\t\t\t\t\t退出程序后 就可送达\n");
    system("pause");


}


void Racket(int p)///流拍
{
    int Un,i,Index_B,Index_S,flag1=0,flag2=0,j;
    Un=UN;
    for(i=0; i<Un; i++)
    {
        if(!strcmp(User[i].Acc_num,Buyer)&&!flag1)
        {
            Index_B=i;
            flag1=1;
        }
        if(!strcmp(User[i].Acc_num,Seller)&&!flag2)
        {
            Index_S=i;
            flag2=1;
        }
        if(flag1&&flag2)break;
    }
    ///修改买家
    User[Index_B].score-=5;
    printf("\t\t\t\t\t\t\t\t你的信誉度减少5分\n");
    ///修改卖家
    for(j=0; j<=User[Index_S].Sum; j++)if(User[Index_S].MyGoods[j].G_ID==Bidder[p].G_ID)break;
    User[Index_S].MyGoods[j].State=0;//未拍出
    WriteinFile(Un);


    printf("\n\t\t\t\t\t\t\t\t物品已流拍\n");
    system("pause");


}


void Count_Backwards_time()
{
    int Money,choice;
    if(Bidder[Bi].flag1==6)
    {
        printf("\t\t\t\t\t\t\t\t一口价已经出现, 无法参加该物品竞拍\n");
        system("pause");
        return;
    }
    if(Time_minus(Bi)<=60)
    {
        SYSTEMTIME sys;
        GetLocalTime(&sys);
        printf("\t\t\t\t\t\t\t\t你拍卖剩余时间: %d  second\n",Rott);
        printf("\t\t\t\t\t\t\t\t注意!:\n");
        cout<<endl;
        if(Bidder[Bi].B_New_old)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
        else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t*                  拍卖物品名字: %s\n",Bidder[Bi].B_Name);
        // printf("\t\t\t\t\t\t\t\t*                  拍卖物品新旧: %d\n",Bidder[Bi].B_New_old);
        printf("\t\t\t\t\t\t\t\t*                  拍卖物品描述: %s\n",Bidder[Bi].B_Desc);
        printf("\t\t\t\t\t\t\t\t*                  拍卖物品类型: %s\n",Bidder[Bi].B_size);
        printf("\t\t\t\t\t\t\t\t*                  拍卖物品重量: %d\n",Bidder[Bi].B_weight);
        printf("\t\t\t\t\t\t\t\t*                  拍卖物品起价: %d\n",Bidder[Bi].B_Price);
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        if(Bidder[Bi].B_H_Price)printf("一口价为 :%d \n",Bidder[Bi].B_H_Price);
        cout<<endl;


        printf("\t\t\t\t\t\t\t\t1、拍卖  0、退出拍卖\n");
        printf("\t\t\t\t\t\t\t\t请输入:");
        scanf("%d",&choice);
        Online_Money(Bidder[Bi].B_H_Price,Bidder[Bi].M_M,Bidder[Bi].Z_F);
        if(choice)
        {
            printf("\t\t\t\t\t\t\t\t请输入你竞拍的价格: ");
            while(1)
            {
                scanf("%d",&Money);
                if(Money>Bidder[Bi].B_Price&&Money>=1&&Money<=99999)break;
                else printf("\t\t\t\t\t\t\t\t请重新输入 价格 :");
            }


            Bidder[Bi].sum++;
            Bidder[Bi].flag1=5;
            strcpy(Bidder[Bi].Mark[Bidder[Bi].sum].Next_Haver_Name,T);
            Bidder[Bi].Mark[Bidder[Bi].sum].Money=Money;


            Bidder[Bi].Mark[Bidder[Bi].sum].Ye=sys.wYear;
            Bidder[Bi].Mark[Bidder[Bi].sum].Mo=sys.wMonth;
            Bidder[Bi].Mark[Bidder[Bi].sum].Da=sys.wDay;
            Bidder[Bi].Mark[Bidder[Bi].sum].Ho=sys.wHour;
            Bidder[Bi].Mark[Bidder[Bi].sum].Mi=sys.wMinute;
            Bidder[Bi].Mark[Bidder[Bi].sum].Se=sys.wSecond;




            Online_Money(Bidder[Bi].B_H_Price,2,Bidder[Bi].Z_F);
            Bidder[Bi].Final_Price=Bidder[Bi].Mark[F_H].Money;///最终价
            strcpy(Bidder[Bi].Ber,Bidder[Bi].Mark[F_H].Next_Haver_Name);


            //printf("%d\n",Bidder[Bi].sum);
            //printf("%s\n",Bidder[Bi].Mark[Bidder[Bi].sum].Next_Haver_Name);
            //printf("%d\n",Bidder[Bi].Mark[Bidder[Bi].sum].Money);
            Write_B_inFile(Bn);
            printf("\t\t\t\t\t\t\t\tOK\n");
            return;
        }
        else if(!choice)return;
    }
}


void Waiting_Time()///等待时间
{
    //printf("注意 ;进入拍卖后不能退出\n");
    if(Time_minus(Bi)<60&&Time_minus(Bi)>0)
    {
        Count_Backwards_time();
        return;
    }
    else
    {
        while(Time_minus(Bi)<0)
        {
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                  等待拍卖开始                          *\n");
            printf("\t\t\t\t\t\t\t\t*                  还有 %d 秒                            *\n",abs(Time_minus(Bi)));
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");


            system("pause");
            system("cls");
        }
        printf("\t\t\t\t\t\t\t\t      拍卖开始\n");
        printf("\t\t\t\t\t\t\t\t还有 %d 秒 \n",Rott);
        Count_Backwards_time();
        return;
    }


}


///需要修改
void Overdue()///过期没人要的东西
{
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    int i,B_n,j,k,count=0;
    B_n=ReadALL_BFile();
    if(Bidder[0].B_Name[0]=='\0')return;
    for(j=0; j<B_n; j++)
    {
        if(Time_minus(j)<60)break;
    }
    for(i=0; i<j; i++)
    {
        //if(Time_minus(i)<60)break;
        Bidder[i].flag1=2;
        if(Bidder[i].sum>=1&&Bidder[i].flag1!=6)Bidder[i].flag1=3;
    }


    for(k=j; k<B_n; k++)
    {
        Bidder[k].NUM=count++;
        //printf("  Ok  %d %s \n",Bidder[k].NUM,Bidder[k].B_Name);
    }
    //printf("OK\n");
    Write_B_inFile(B_n);
}


void Back_Bag()///回到背包
{
    int Un,B_n,B_i;
    B_n=ReadALL_BFile();
    B_i=Read_B_PartFile(B_n);
    Un=Read_U_All_File();
    //printf("%d  \n",B_i);
    for(int i=0; i<B_i; i++)
    {
        if(Bidder[i].flag1==2)
        {
            for(int j=0; j<Un; j++)
            {
                if(!strcmp(Bidder[i].Haver,User[j].Acc_num))
                {
                    for(int k=0; k<User[j].Sum; k++)
                    {
                        if(Bidder[i].G_ID==User[j].MyGoods[k].G_ID)
                        {
                            User[j].MyGoods[k].State=0;
                            Bidder[i].flag1=4;
                        }
                    }
                }
            }
        }
    }
    WriteinFile(Un);
    Write_B_inFile(B_n);
}


///需要修改
int Online_Money(int P,int flag1,int flag2)///网上价钱
{
    int Highest=0,Lowest=100000,i;
    i=Bidder[Bi].sum;
    //printf("%d\n",i);
    if(!i)
    {
        printf("\t\t\t\t\t\t\t\t目前没有价格信息\n");
        return 0;
    }
    if(P)
    {
        if(flag1==1)//明拍
        {
            if(flag2==1)//正拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money>=P)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                        return 1;
                        break;
                    }
                    else if(Bidder[Bi].Mark[k].Money>Highest)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                    }
                }
                printf("\t\t\t\t\t\t\t\t目前最高价格是: %d \n",Highest);
            }
            else//反拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money<=P)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                        return 1;
                        break;
                    }
                    if(Bidder[Bi].Mark[k].Money<Lowest)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                    }
                }
                printf("目前最低价格是: %d \n",Lowest);
            }
        }
        else//盲拍
        {
            if(flag2==1)//正拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money>=P)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                        return 1;
                        break;
                    }
                    if(Bidder[Bi].Mark[k].Money>Highest)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                    }
                }
            }
            else//反拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money<=P)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                        return 1;
                        break;
                    }
                    if(Bidder[Bi].Mark[k].Money<Lowest)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                    }
                }
            }
        }
    }
    else//无最高价
    {
        if(flag1==1)//明拍
        {
            if(flag2==1)//正拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money>Highest)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                    }
                }
                printf("\t\t\t\t\t\t\t\t目前最高价格是: %d \n",Highest);
            }
            else//反拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money<Lowest)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                    }
                }
                printf("目前最低价格是: %d \n",Lowest);
            }
        }
        else
        {
            if(flag2==1)//正拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money>Highest)
                    {
                        F_H=k;
                        Highest=Bidder[Bi].Mark[k].Money;
                    }
                }
            }
            else//反拍
            {
                for(int k=0; k<=i; k++)
                {
                    if(Bidder[Bi].Mark[k].Money<Lowest)
                    {
                        F_H=k;
                        Lowest=Bidder[Bi].Mark[k].Money;
                    }
                }
            }
        }
    }
    return 0;
}


int Time_minus(int p)///时间差
{
    long long t1;
    SYSTEMTIME sys;
    GetLocalTime(&sys);
    int MONTH[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    int YEAR,day,day2,i;
    if((Bidder[p].B_Time.Year%4==0&&Bidder[p].B_Time.Year%100!=0)||Bidder[p].B_Time.Year%400==0)YEAR=366;
    else YEAR=365;


    day=0,day2=0;
    for(i=0; i<sys.wMonth; i++)day+=MONTH[i];
    if(sys.wMonth>2)day++;
    day+=sys.wDay;


    for(i=0; i<Bidder[p].B_Time.Month; i++)day2+=MONTH[i];
    if(Bidder[p].B_Time.Month>2)day2++;
    day2+=Bidder[p].B_Time.Day;


    t1=(sys.wYear-Bidder[p].B_Time.Year)*YEAR*24*60+(day-day2)*24*60*60+(sys.wHour-Bidder[p].B_Time.Hour)*60*60+(sys.wMinute-Bidder[p].B_Time.Min)*60+(sys.wSecond-Bidder[p].B_Time.Sec);


    if(t1==0)Rott=60;
    else if(t1>0&&t1<60)Rott=60-t1;
    return t1;
}


///修改
void Decide_Time(int B_n)///决定时间
{
    int MONTH[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
    SYSTEMTIME sys;
    GetLocalTime( &sys );
    if(!B_n)
    {
        Bidder[B_n].B_Time.Year=sys.wYear;
        Bidder[B_n].B_Time.Month=sys.wMonth;
        Bidder[B_n].B_Time.Day=sys.wDay;
        Bidder[B_n].B_Time.Hour=sys.wHour;
        Bidder[B_n].B_Time.Min=sys.wMinute;
        Bidder[B_n].B_Time.Sec=sys.wSecond;
    }
    else
    {
        if(Time_minus(B_n-1)>60)
        {
            Bidder[B_n].B_Time.Year=sys.wYear;
            Bidder[B_n].B_Time.Month=sys.wMonth;
            Bidder[B_n].B_Time.Day=sys.wDay;
            Bidder[B_n].B_Time.Hour=sys.wHour;
            Bidder[B_n].B_Time.Min=sys.wMinute;
            Bidder[B_n].B_Time.Sec=sys.wSecond;
        }
        else
        {
            Bidder[B_n].B_Time.Year=Bidder[B_n-1].B_Time.Year;
            Bidder[B_n].B_Time.Month=Bidder[B_n-1].B_Time.Month;
            Bidder[B_n].B_Time.Day=Bidder[B_n-1].B_Time.Day;
            Bidder[B_n].B_Time.Hour=Bidder[B_n-1].B_Time.Hour;
            Bidder[B_n].B_Time.Min=Bidder[B_n-1].B_Time.Min+1;
            Bidder[B_n].B_Time.Sec=Bidder[B_n-1].B_Time.Sec+20;


            if(Bidder[B_n].B_Time.Sec>=60)
            {
                Bidder[B_n].B_Time.Sec-=60;
                Bidder[B_n].B_Time.Min++;
            }


            if(Bidder[B_n].B_Time.Min>=60)
            {
                Bidder[B_n].B_Time.Min-=60;
                Bidder[B_n].B_Time.Hour++;
            }
            if(Bidder[B_n].B_Time.Hour>=24)
            {
                Bidder[B_n].B_Time.Hour-=24;
                Bidder[B_n].B_Time.Day++;
            }
            if(((Bidder[B_n].B_Time.Year%4==0||Bidder[B_n].B_Time.Year%100!=0)&&Bidder[B_n].B_Time.Year%400==0)&&Bidder[B_n].B_Time.Month==2)
            {
                if(Bidder[B_n].B_Time.Day>=MONTH[Bidder[B_n].B_Time.Month]+1)
                {
                    Bidder[B_n].B_Time.Day=1;
                    Bidder[B_n].B_Time.Month++;
                }
            }
            else if(Bidder[B_n].B_Time.Day>=MONTH[Bidder[B_n].B_Time.Month])
            {
                Bidder[B_n].B_Time.Day=1;
                Bidder[B_n].B_Time.Month++;
            }
            if(Bidder[B_n].B_Time.Month>=12)
            {
                Bidder[B_n].B_Time.Month=1;
                Bidder[B_n].B_Time.Year++;
            }
        }
    }
    //for(int k=0; k<=B_n; k++)
    //{
    //printf("%04d %02d %02d %02d %02d %02d \n",Bidder[k].B_Time.Year,Bidder[k].B_Time.Month,Bidder[k].B_Time.Day,Bidder[k].B_Time.Hour,Bidder[k].B_Time.Min,Bidder[k].B_Time.Sec);
    //}
    system("pause");


}


void Watch_Bag()///看看背包有什么物品
{
    int i,n,choice3;
    //n=Read_U_All_File();
    //i=Read_U_Part_File(n);
    n=UN;
    i=UI;
    while(1)
    {
        //n=Read_U_All_File();
        //i=Read_U_Part_File(n);
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t*                  6、将物品放置拍卖平台上拍卖           *\n");
        printf("\t\t\t\t\t\t\t\t*                  7、增加物品                           *\n");
        printf("\t\t\t\t\t\t\t\t*                  8、删除物品                           *\n");
        printf("\t\t\t\t\t\t\t\t*                  9、查看和修改物品信息                 *\n");
        printf("\t\t\t\t\t\t\t\t*                  10、删除竞拍物品操作                  *\n");
        printf("\t\t\t\t\t\t\t\t*                  3、返回上一级                         *\n");
        printf("\t\t\t\t\t\t\t\t*                  5、退出程序                           *\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t请输入:");
        scanf("%d",&choice3);
        system("CLS");
        if(choice3==3)break;
        switch(choice3)
        {
        case 6:
            Pre_Bid(i,n);
            break;
        case 7:
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                0、继续进行加入新物品操作               *\n");
            printf("\t\t\t\t\t\t\t\t*                3、返回上一级;                         *\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice3);
            if(choice3==3)break;
            while(1)
            {
                Add_Goods(i,n);
                system("CLS");
                //printf("\t\t\t\t\t\t\t\t亲,你已经完成增加物品操作 \n");
                system("pause");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t*                  3、返回上一级                         *\n");
                printf("\t\t\t\t\t\t\t\t*                  5、退出程序                           *\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t请输入:");
                scanf("%d",&choice3);
                system("CLS");
                if(choice3==3)break;
                switch(choice3)
                {
                case 5:
                    exit(0);
                }
            }
            break;
        case 8:


            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                  0、继续进行删除物品操作               *\n");
            printf("\t\t\t\t\t\t\t\t*                  3、返回上一级                         *\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice3);
            system("CLS");
            if(choice3==3)break;
            while(1)
            {
                Del_Goods(i,n);
                //printf("\t\t\t\t\t\t\t\t亲,你已经完成删除物品操作 \n");
                system("pause");
                system("CLS");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t*                  3、返回上一级                         *\n");
                printf("\t\t\t\t\t\t\t\t*                  5、退出程序                           *\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t请输入:");
                scanf("%d",&choice3);
                if(choice3==3)break;
                switch(choice3)
                {
                case 5:
                    exit(0);
                }
            }
        case 9:
            GoodTraverse(i,n);
            break;
        case 10:
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                  0、继续进行删除竞拍物品操作           *\n");
            printf("\t\t\t\t\t\t\t\t*                  3、返回上一级                         *\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice3);
            system("CLS");
            if(choice3==3)break;
            Del_Auction();
            break;
        case 5:
            exit(0);
        default:
            break;
        }
    }
}


void Del_Auction()
{
    int Ui,Un,B_i,B_n,i,j,ID;
    B_n=ReadALL_BFile();
    B_i=Read_B_PartFile(B_n);


    //Un=Read_U_All_File();
    //Ui=Read_U_Part_File(Un);
    Un=UN;
    Ui=UI;
    printf("\t\t\t\t\t\t\t\t请输入你想下架物品的 编号:");
    scanf("%d",&ID);
    for(i=B_i; i<B_n; i++)
    {
        if(Bidder[i].G_ID==ID&&!strcmp(Bidder[i].Haver,T))break;
    }
    if(Time_minus(i)<-120)
    {
        for(int k=0; k<User[Ui].Sum; k++)
        {
            if(User[Ui].MyGoods[k].G_ID==ID)
            {
                User[Ui].MyGoods[k].State=0;
                printf(" %s \n",User[Ui].MyGoods[k].G_Name);
                break;
            }
        }
        for(j=i; j<B_n; j++)Bidder[j]=Bidder[j+1];
        User[Ui].score=User[Ui].score-2;
        //CLear_File();
        B_n--;
        WriteinFile(Un);
        Write_B_inFile(B_n);
        printf("\t\t\t\t\t\t\t\t亲,你已经完成删除竞拍物品操作 \n");


    }
    else printf("\t\t\t\t\t\t\t\t该物品准备拍卖 无法删除\n");
    system("pause");
}


void CLear_File()
{
    FILE *fp;
    fp=fopen("Bidder.txt","wb");
    fclose(fp);
}




void I_just_check(int i,int n)///随便翻翻背包物品
{
    int choice,Ui,Un,e;
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t*             1、按 重量 查找物品                        *\n");
    printf("\t\t\t\t\t\t\t\t*             2、按 年份 查找物品                        *\n");
    printf("\t\t\t\t\t\t\t\t*             3、按 价格 查找物品                        *\n");
    printf("\t\t\t\t\t\t\t\t*             4、按 编号 查找物品                        *\n");
    printf("\t\t\t\t\t\t\t\t*             5、返回                                    *\n");
    printf("\t\t\t\t\t\t\t\t*             6、退出程序                                *\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");


    printf("\t\t\t\t\t\t\t\t请输入:");
    scanf("%d",&choice);
    system("cls");
    //Un=Read_U_All_File();
    //Ui=Read_U_Part_File(Un);
    Un=UN;
    Ui=UI;
    if(choice==5)return;
    else if(choice==6)exit(0);
    else
    {
        Quick_Sort(User,Ui,0,User[Ui].Sum-1,choice);//快排
        printf("\t\t\t\t\t\t\t\t请输入你查找的相关信息:");
        cin>>e;
        Bin_Search(User,Ui,0,User[Ui].Sum-1,choice,e);//二分查找
    }
    WriteinFile(Un);
    system("pause");
    system("cls");


}


void Quick_Sort(USER User[],int Ui,int left,int right,int choice)///快排
{
    int i=left,j=right,t;
    Bag_Goods T;
    if(choice==1)//重量
    {
        t=User[Ui].MyGoods[left].weight;
        T=User[Ui].MyGoods[left];
        if(left>=right)return;
        while(j!=i)
        {
            while(j>i&&User[Ui].MyGoods[j].weight>=User[Ui].MyGoods[i].weight)j--;
            if(j>i)User[Ui].MyGoods[i]=User[Ui].MyGoods[j];
            while(j>i&&t>=User[Ui].MyGoods[i].weight)i++;
            if(j>i)User[Ui].MyGoods[j]=User[Ui].MyGoods[i];
        }
        User[Ui].MyGoods[i]=T;
        Quick_Sort(User,Ui,left,i-1,choice);
        Quick_Sort(User,Ui,i+1,right,choice);
    }
    else if(choice==2)//年份
    {
        t=User[Ui].MyGoods[left].years;
        T=User[Ui].MyGoods[left];
        if(left>=right)return;
        while(j!=i)
        {
            while(j>i&&User[Ui].MyGoods[j].years>=User[Ui].MyGoods[i].years)j--;
            if(j>i)User[Ui].MyGoods[i]=User[Ui].MyGoods[j];
            while(j>i&&t>=User[Ui].MyGoods[i].years)i++;
            if(j>i)User[Ui].MyGoods[j]=User[Ui].MyGoods[i];
        }
        User[Ui].MyGoods[i]=T;
        Quick_Sort(User,Ui,left,i-1,choice);
        Quick_Sort(User,Ui,i+1,right,choice);
    }
    else if(choice==3)//价格
    {
        t=User[Ui].MyGoods[left].Price;
        T=User[Ui].MyGoods[left];
        if(left>=right)return;
        while(j!=i)
        {
            while(j>i&&User[Ui].MyGoods[j].Price>=User[Ui].MyGoods[i].Price)j--;
            if(j>i)User[Ui].MyGoods[i]=User[Ui].MyGoods[j];
            while(j>i&&t>=User[Ui].MyGoods[i].Price)i++;
            if(j>i)User[Ui].MyGoods[j]=User[Ui].MyGoods[i];
        }
        User[Ui].MyGoods[i]=T;
        Quick_Sort(User,Ui,left,i-1,choice);
        Quick_Sort(User,Ui,i+1,right,choice);
    }
    else if(choice==4)//编号
    {
        t=User[Ui].MyGoods[left].G_ID;
        T=User[Ui].MyGoods[left];
        if(left>=right)return;
        while(j!=i)
        {
            while(j>i&&User[Ui].MyGoods[j].G_ID>=User[Ui].MyGoods[i].G_ID)j--;
            if(j>i)User[Ui].MyGoods[i]=User[Ui].MyGoods[j];
            while(j>i&&t>=User[Ui].MyGoods[i].G_ID)i++;
            if(j>i)User[Ui].MyGoods[j]=User[Ui].MyGoods[i];
        }
        User[Ui].MyGoods[i]=T;
        Quick_Sort(User,Ui,left,i-1,choice);
        Quick_Sort(User,Ui,i+1,right,choice);


    }


}


void Bin_Search(USER User[],int Ui,int left,int right,int choice,int e)///二分查找
{
    int i=left,j=right,mid,flag=0;
    if(choice==1)//重量
    {
        while(j>=i)
        {
            mid=(i+j)/2;
            if(e==User[Ui].MyGoods[mid].weight)
            {
                flag=1;
                printf("\t\t\t\t\t\t\t\t查找成功\n");
                //printf("   %d\n",mid);
                Revise_Part_G(Ui,mid);


                if(mid-1>=left)
                {
                    if(e==User[Ui].MyGoods[mid-1].weight)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid-1);
                    }
                }


                if(mid+1<=right)
                {
                    if(e==User[Ui].MyGoods[mid+1].weight)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid+1);
                    }
                }
                break;
            }
            if(e>User[Ui].MyGoods[mid].weight)i=mid+1;
            else j=mid-1;
        }
        if(!flag)
        {
            printf("\t\t\t\t\t\t\t\t查找失败\n");
        }
    }
    else if(choice==2)//年份
    {
        while(j>=i)
        {
            mid=(i+j)/2;
            if(e==User[Ui].MyGoods[mid].years)
            {
                flag=1;
                printf("\t\t\t\t\t\t\t\t查找成功\n");
                //printf("   %d\n",mid);
                Revise_Part_G(Ui,mid);
                if(mid-1>=left)
                {
                    if(e==User[Ui].MyGoods[mid-1].years)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid-1);
                    }
                }


                if(mid+1<=right)
                {
                    if(e==User[Ui].MyGoods[mid+1].years)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid+1);
                    }
                }
                break;
            }
            if(e>User[Ui].MyGoods[mid].years)i=mid+1;
            else j=mid-1;
        }
        if(!flag)
        {
            printf("   %d\n",mid);
            printf("\t\t\t\t\t\t\t\t查找失败\n");
        }
    }
    else if(choice==3)//价格
    {
        while(j>=i)
        {
            mid=(i+j)/2;
            if(e==User[Ui].MyGoods[mid].Price)
            {
                flag=1;
                printf("\t\t\t\t\t\t\t\t查找成功\n");
                //printf("   %d\n",mid);
                Revise_Part_G(Ui,mid);
                if(mid-1>=left)
                {
                    if(e==User[Ui].MyGoods[mid-1].Price)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid-1);
                    }
                }


                if(mid+1<=right)
                {
                    if(e==User[Ui].MyGoods[mid+1].Price)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid+1);
                    }
                }
                break;
            }
            if(e>User[Ui].MyGoods[mid].Price)i=mid+1;
            else j=mid-1;
        }
        if(!flag)
        {
            printf("\t\t\t\t\t\t\t\t查找失败\n");
        }
    }
    else if(choice==4)//编号
    {
        while(j>=i)
        {
            mid=(i+j)/2;
            if(e==User[Ui].MyGoods[mid].G_ID)
            {
                flag=1;
                printf("\t\t\t\t\t\t\t\t查找成功\n");
                //printf("   %d\n",mid);
                Revise_Part_G(Ui,mid);
                if(mid-1>=left)
                {
                    if(e==User[Ui].MyGoods[mid-1].G_ID)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid-1);
                    }
                }


                if(mid+1<=right)
                {
                    if(e==User[Ui].MyGoods[mid+1].G_ID)
                    {
                        printf("\t\t\t\t\t\t\t\t相似物品部分信息:\n");
                        Revise_Part_G(Ui,mid+1);
                    }
                }
                break;
            }
            if(e>User[Ui].MyGoods[mid].G_ID)i=mid+1;
            else j=mid-1;
        }
        if(!flag)
        {
            printf("\t\t\t\t\t\t\t\t查找失败\n");


        }
    }
}


void Rank_Quick_Sort(RANK Rank[],int left,int right)///排行榜
{
    int i=left,j=right,t=Rank[i].score;
    RANK T=Rank[left];
    if(left>=right)return;
    while(i<j)
    {
        while(i<j&&Rank[i].score>=Rank[j].score)j--;
        if(i<j)Rank[i]=Rank[j];
        while(i<j&&t<=Rank[i].score)i++;
        if(i<j)Rank[j]=Rank[i];
    }
    Rank[i]=T;
    Rank_Quick_Sort(Rank,left,i-1);
    Rank_Quick_Sort(Rank,i+1,right);
}


void Revise_Part_G(int Ui,int mid)///查看单一物品
{
    cout<<endl;
    printf("\t\t\t\t\t\t\t\t物品 编号:%d \n",User[Ui].MyGoods[mid].G_ID);
    printf("\t\t\t\t\t\t\t\t物品名字:%s\n",User[Ui].MyGoods[mid].G_Name);
    if(User[Ui].MyGoods[mid].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
    else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");


    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t*           物品描述:%s\n",User[Ui].MyGoods[mid].Desc);
    printf("\t\t\t\t\t\t\t\t*           物品类型:%s\n",User[Ui].MyGoods[mid].size);
    printf("\t\t\t\t\t\t\t\t*           物品估价:%d\n",User[Ui].MyGoods[mid].Price);
    printf("\t\t\t\t\t\t\t\t*           物品重量:%d\n",User[Ui].MyGoods[mid].weight);
    printf("\t\t\t\t\t\t\t\t*           物品年份:%d\n",User[Ui].MyGoods[mid].years);
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    if(User[Ui].MyGoods[mid].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
    else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
    cout<<endl;
}


void Revise_G_ID(int i,int n)///按物品编号查询
{
    int T_ID;
    cout<<endl;
    printf("\t\t\t\t\t\t\t\t请输入你想查询背包里的 物品编号:\n");
    scanf("%d",&T_ID);
    for(int k=0; k<User[i].Sum; k++)
    {
        if(T_ID==User[i].MyGoods[k].G_ID)
        {
            printf("\t\t\t\t\t\t\t\t物品名字:%s\n",User[i].MyGoods[k].G_Name);
            if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*         物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*         物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*         物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*         物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*         物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");


            if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
            else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
            cout<<endl;
        }
    }
    cout<<endl;
}


void Revise_G_Name(int i,int n)///按物品名字查询
{
    char T_Name[20];
    cout<<endl;
    printf("\t\t\t\t\t\t\t\t请输入你想查询背包里的 物品名称:");
    scanf("%s",T_Name);
    for(int k=0; k<User[i].Sum; k++)
    {
        if(!strcmp(T_Name,User[i].MyGoods[k].G_Name))
        {
            printf("\t\t\t\t\t\t\t\t物品编号:%d\n",User[i].MyGoods[k].G_ID);
            if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("拍卖物品新旧: 旧\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*          物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*          物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*          物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*          物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*          物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");


            if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
            else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
            cout<<endl;
        }
    }
    cout<<endl;
}


void Revise_G_New_Old(int i,int n)///按物品新旧查询
{
    int choice;
    cout<<endl;
    printf("\t\t\t\t\t\t\t\t1、以 新物品 来查找\n");
    printf("\t\t\t\t\t\t\t\t2、以 旧物品 来查找\n");
    printf("\t\t\t\t\t\t\t\t请输入:");
    scanf("%d",&choice);
    for(int k=0; k<User[i].Sum; k++)
    {
        if(choice==User[i].MyGoods[k].New_old)
        {


            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*           物品编号:%d\n",User[i].MyGoods[k].G_ID);
            printf("\t\t\t\t\t\t\t\t*           物品名称:%s\n",User[i].MyGoods[k].G_Name);
            printf("\t\t\t\t\t\t\t\t*           物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*           物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*           物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*           物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*           物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
            else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
            cout<<endl;
        }
    }
    cout<<endl;
}


void Revise_G_State(int i,int n)///按物品拍卖查询
{
    int choice;


    printf("\t\t\t\t\t\t\t\t1、打印拍卖物品\n");
    printf("\t\t\t\t\t\t\t\t0、打印不拍卖物品\n\t\t\t\t\t\t\t\t请输入:\n");
    scanf("%d",&choice);
    cout<<endl;
    for(int k=0; k<User[i].Sum; k++)
    {
        if(User[i].MyGoods[k].State==choice)
        {
            printf("\t\t\t\t\t\t\t\t物品编号:%d\n",User[i].MyGoods[k].G_ID);
            printf("\t\t\t\t\t\t\t\t物品名称:%s\n",User[i].MyGoods[k].G_Name);
            if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");


            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*          物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*          物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*          物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*          物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*          物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            cout<<endl;
        }
    }
    cout<<endl;
}


void Revise_All_G(int i,int n)///查看所有物品
{


    for(int k=0; k<User[i].Sum; k++)
    {
        cout<<endl;
        printf("\t\t\t\t\t\t\t\t物品编号:%d\n",User[i].MyGoods[k].G_ID);
        printf("\t\t\t\t\t\t\t\t物品名称:%s\n",User[i].MyGoods[k].G_Name);
        if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
        else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t*         物品描述:%s\n",User[i].MyGoods[k].Desc);
        printf("\t\t\t\t\t\t\t\t*         物品类型:%s\n",User[i].MyGoods[k].size);
        printf("\t\t\t\t\t\t\t\t*         物品估价:%d\n",User[i].MyGoods[k].Price);
        printf("\t\t\t\t\t\t\t\t*         物品重量:%d\n",User[i].MyGoods[k].weight);
        printf("\t\t\t\t\t\t\t\t*         物品年份:%d\n",User[i].MyGoods[k].years);
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
        else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
        cout<<endl;
        cout<<endl;
    }
}


void Revise_G_size(int i,int n)///物品类型
{


    char T_size[40];
    printf("\t\t\t\t\t\t\t\t请输入物品的 类型: ");
    scanf("%s",T_size);
    for(int k=0; k<User[i].Sum; k++)
    {
        if(!strcmp(T_size,User[i].MyGoods[k].size))
        {
            cout<<endl;
            printf("\t\t\t\t\t\t\t\t物品编号:%d\n",User[i].MyGoods[k].G_ID);
            printf("\t\t\t\t\t\t\t\t物品名称:%s\n",User[i].MyGoods[k].G_Name);
            if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");


            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*             物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*             物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*             物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*             物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*             物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
            else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
            cout<<endl;
            cout<<endl;
        }
    }
}


void GoodTraverse(int i,int n)///查看物品
{
    system("cls");
    int choice,choice2;
    printf("\t\t\t\t\t\t\t\t目前你拥有 %d 物品\n",User[i].Sum);
    if(!User[i].Sum)printf("\t\t\t\t\t\t\t\t背包为空,可以返回进行添加物品操作\n");
    else
    {
        while(1)
        {
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*                0、继续查看修改物品                     *\n");
            printf("\t\t\t\t\t\t\t\t*                3、返回                                 *\n");
            printf("\t\t\t\t\t\t\t\t*                5、退出程序                             *\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");


            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice);
            if(choice==3)break;
            switch(choice)
            {
            case 5:
                exit(0);
            case 0:
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t*              1、按 物品编号 来查询                     *\n");
                printf("\t\t\t\t\t\t\t\t*              2、按 物品名字 来查询                     *\n");
                printf("\t\t\t\t\t\t\t\t*              3、按 物品新旧 来查询                     *\n");
                printf("\t\t\t\t\t\t\t\t*              4、按 物品参与 拍卖 来查询                *\n");
                printf("\t\t\t\t\t\t\t\t*              5、按物品 类型 来查询                     *\n");
                printf("\t\t\t\t\t\t\t\t*              6、查询 所有 物品                         *\n");
                printf("\t\t\t\t\t\t\t\t*              7、二分 查找 物品                         *\n");
                printf("\t\t\t\t\t\t\t\t*              8、修改物品信息                           *\n");
                printf("\t\t\t\t\t\t\t\t*              9、查询 拍卖得到的 物品                   *\n");
                printf("\t\t\t\t\t\t\t\t*              10、返回                                  *\n");
                printf("\t\t\t\t\t\t\t\t*              11、退出程序                              *\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");


                printf("\t\t\t\t\t\t\t\t请输入:");
                scanf("%d",&choice2);
                switch(choice2)
                {
                case 1:
                    Revise_G_ID(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 2:
                    Revise_G_Name(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 3:
                    Revise_G_New_Old(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 4:
                    Revise_G_State(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 6:
                    Revise_All_G(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 5:
                    Revise_G_size(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 7:
                    I_just_check(i,n);
                    system("PAUSE");
                    system("cls");
                    break;
                case 8:
                    Change_Good(i,n);//改变物品信息
                    system("PAUSE");
                    system("cls");
                    break;
                case 9:
                    Flag_Good(i,n);//拍卖得到的物品
                    system("PAUSE");
                    system("cls");
                    break;
                case 10:
                    break;
                case 11:
                    exit(0);
                default:
                    break;
                }
            }
        }
    }
}


void Flag_Good(int i,int n)
{
    for(int k=0; k<User[i].Sum; k++)
    {
        if(User[i].MyGoods[k].flag)
        {
            cout<<endl;
            printf("\t\t\t\t\t\t\t\t物品编号:%d\n",User[i].MyGoods[k].G_ID);
            printf("\t\t\t\t\t\t\t\t物品名称:%s\n",User[i].MyGoods[k].G_Name);
            if(User[i].MyGoods[k].New_old==1)printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 新\n");
            else printf("\t\t\t\t\t\t\t\t拍卖物品新旧: 旧\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t*         物品描述:%s\n",User[i].MyGoods[k].Desc);
            printf("\t\t\t\t\t\t\t\t*         物品类型:%s\n",User[i].MyGoods[k].size);
            printf("\t\t\t\t\t\t\t\t*         物品估价:%d\n",User[i].MyGoods[k].Price);
            printf("\t\t\t\t\t\t\t\t*         物品重量:%d\n",User[i].MyGoods[k].weight);
            printf("\t\t\t\t\t\t\t\t*         物品年份:%d\n",User[i].MyGoods[k].years);
            printf("\t\t\t\t\t\t\t\t*                                                        *\n");
            printf("\t\t\t\t\t\t\t\t**********************************************************\n");
            if(User[i].MyGoods[k].State)printf("\t\t\t\t\t\t\t\t物品拍卖\n");
            else printf("\t\t\t\t\t\t\t\t物品不拍卖\n");
            cout<<endl;
            cout<<endl;
        }


    }
}


void Change_Good(int i,int n)
{
    int Ui=i,Un=n,e,j,flag=0;
    printf("\t\t\t\t\t\t\t\t请输入你想改变信息的 物品 编号:");
    scanf("%d",&e);
    for(j=0; j<User[Ui].Sum; j++)
    {
        if(User[Ui].MyGoods[j].G_ID==e)
        {
            flag=1;
            break;
        }
    }
    if(!flag)printf("\t\t\t\t\t\t\t\t没有该物品\n");
    else
    {
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的名字:");
        scanf("%s",User[Ui].MyGoods[j].G_Name);
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的描述:");
        scanf("%s",User[Ui].MyGoods[j].Desc);
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的类别:");
        scanf("%s",User[Ui].MyGoods[j].size);
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的估价:");
        scanf("%d",&User[Ui].MyGoods[j].Price);
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的年份:");
        scanf("%d",&User[Ui].MyGoods[j].years);
        printf("\t\t\t\t\t\t\t\t请重新输入你物品的重量(单位 克):");
        scanf("%d",&User[Ui].MyGoods[j].weight);
        User[Ui].MyGoods[j].State=0;
        printf("\t\t\t\t\t\t\t\t修改成功\n");
    }
    WriteinFile(Un);


}


void Del_Goods(int i,int n)///删除物品
{
    //USER User[100];
    //printf(" 111  \n");
    int j,flag;
    int T_ID;
    T_G *p,*p1,*head,*tail,*p2;//T_G


    for(j=User[i].Sum; j>=0; j--)
    {
        p=(T_G*)malloc(sizeof(T_G));
        p->G_ID=User[i].MyGoods[User[i].Sum-j].G_ID;
        strcpy(p->G_Name,User[i].MyGoods[User[i].Sum-j].G_Name);
        p->New_old=User[i].MyGoods[User[i].Sum-j].New_old;
        strcpy(p->Desc,User[i].MyGoods[User[i].Sum-j].Desc);
        p->Price=User[i].MyGoods[User[i].Sum-j].Price;
        p->years=User[i].MyGoods[User[i].Sum-j].years;
        strcpy(p->size,User[i].MyGoods[User[i].Sum-j].size);
        p->weight=User[i].MyGoods[User[i].Sum-j].weight;
        p->State=User[i].MyGoods[User[i].Sum-j].State;
        p->next=NULL;
        if(j==User[i].Sum)head=p;
        else tail->next=p;
        tail=p;
    }
    printf("\t\t\t\t\t\t\t\t输入你想删除物品的 编号:");
    scanf("%d",&T_ID);
    p1=head;
    while(p1)
    {
        flag=0;
        if(p1->G_ID==T_ID)
        {
            if(p1->State==1)
            {
                flag=2;
                break;
            }
            if(p1==head)
            {
                head=head->next;
                free(p1);
                flag=1;
                break;
            }
            else
            {
                p2->next=p1->next;
                flag=1;
                free(p1);
                break;
            }
        }
        p2=p1;
        p1=p1->next;
    }
    if(!flag)printf("\t\t\t\t\t\t\t\t你想删除的物品不存在 \n\t\t\t\t\t\t\t\t请退出操作 重新确认物品信息\n");
    else if(flag==2)printf("\t\t\t\t\t\t\t\t你想删除的物品拍卖中 \n\t\t\t\t\t\t\t\t不可以删除物品信息\n");


    else
    {
        printf("\t\t\t\t\t\t\t\t删除  物品 成功!\n");
        User[i].Sum--;
    }
    p1=head;
    j=0;
    while(p1)
    {
        strcpy(User[i].MyGoods[j].Desc,p1->Desc);
        strcpy(User[i].MyGoods[j].G_Name,p1->G_Name);
        User[i].MyGoods[j].New_old=p1->New_old;
        strcpy(User[i].MyGoods[j].size,p1->size);
        User[i].MyGoods[j].G_ID=p1->G_ID;
        User[i].MyGoods[j].weight=p1->weight;
        User[i].MyGoods[j].Price=p1->Price;
        User[i].MyGoods[j].State=p1->State;
        User[i].MyGoods[j].years=p1->years;
        j++;
        p1=p1->next;
    }
    WriteinFile(n);
}


void Add_Goods(int i,int n)///增加物品
{
    T_G *p,*head,*tail,*p1,*p2;
    int j;
    n=Read_U_All_File();
    i=Read_U_Part_File(n);
    //printf("  %d  \n",User[i].Sum);
    if(User[i].Sum==20)
    {
        printf("\t\t\t\t\t\t\t\t背包已满!\n");
        printf("\t\t\t\t\t\t\t\t请先将不需拍卖的物品从背包下架\n");
        system("pause");
        return;
    }
    for(j=0; j<User[i].Sum; j++)
    {
        p=(T_G*)malloc(sizeof(T_G));
        p->G_ID=User[i].MyGoods[j].G_ID;
        //printf(" %d \n",p->G_ID);
        strcpy(p->G_Name,User[i].MyGoods[j].G_Name);
        p->New_old=User[i].MyGoods[j].New_old;
        strcpy(p->Desc,User[i].MyGoods[j].Desc);
        p->Price=User[i].MyGoods[j].Price;
        //printf(" %lf \n",p->Price);
        p->years=User[i].MyGoods[j].years;
        strcpy(p->size,User[i].MyGoods[j].size);
        p->weight=User[i].MyGoods[j].weight;
        p->State=User[i].MyGoods[j].State;
        p->next=NULL;
        if(!j)head=p;
        else tail->next=p;
        tail=p;
    }


    printf("\t\t\t\t\t\t\t\t你想增加几件物品:");
    int m;
    scanf("%d",&m);


    for(j=0; j<m; j++)
    {
        p=(T_G*)malloc(sizeof(T_G));
        p->next=NULL;
        if(!User[i].Sum&&!j)head=p;
        else tail->next=p;
        tail=p;
        printf("\t\t\t\t\t\t\t\t第%d间物品编号:  ",j+1);
        while(1)
        {
            p1=head;
            scanf("%d",&p->G_ID);
            while(p1!=p)
            {
                if(p->G_ID==p1->G_ID&&p1!=p)
                {
                    printf("\t\t\t\t\t\t\t\t  %d  ",p->G_ID);
                    printf("\t\t\t\t\t\t\t\t物品编号已经存在!\n");
                    printf("\t\t\t\t\t\t\t\t请重新输入物品编号:");
                    break;
                }
                p1=p1->next;
                if(p1==p)break;
            }
            if(p1==p)break;
        }


        printf("\t\t\t\t\t\t\t\t物品名称:");
        scanf("%s",p->G_Name);


        printf("\t\t\t\t\t\t\t\t(输入 1、 New or 2、 Old)\n\t\t\t\t\t\t\t\t物品新旧 :");
        scanf("%d",&p->New_old);


        printf("\t\t\t\t\t\t\t\t物品描述:");
        scanf("%s",p->Desc);


        printf("\t\t\t\t\t\t\t\t物品类型:");
        scanf("%s",p->size);




        printf("\t\t\t\t\t\t\t\t物品年份:");
        scanf("%d",&p->years);
        //printf("  %d ", p->years);


        printf("\t\t\t\t\t\t\t\t物品估价:");
        while(1)
        {
            scanf("%d",&p->Price);
            if(p->Price>0&&p->Price<99999)break;
            printf("\t\t\t\t\t\t\t\t输入价格有误!\n");
            printf("\t\t\t\t\t\t\t\t重新输入价格:");
        }


        //printf("  %lf ", p->Price);


        printf("\t\t\t\t\t\t\t\t物品重量(单位 克):");
        scanf("%d",&p->weight);
        //printf("  %lf ", p->weight);


        p->State=0; //状态
        p->flag=0;
        cout<<endl;
    }
    User[i].Sum+=m;
    p1=head;
    /*while(p1)
    {
        printf("%s \n",p1->G_Name);
        p1=p1->next;
    }*/
    j=User[i].Sum;
    while(p1)
    {
        strcpy(User[i].MyGoods[-j+User[i].Sum].Desc,p1->Desc);
        strcpy(User[i].MyGoods[-j+User[i].Sum].G_Name,p1->G_Name);
        User[i].MyGoods[-j+User[i].Sum].New_old=p1->New_old;
        strcpy(User[i].MyGoods[-j+User[i].Sum].size,p1->size);
        User[i].MyGoods[-j+User[i].Sum].G_ID=p1->G_ID;
        User[i].MyGoods[-j+User[i].Sum].weight=p1->weight;
        User[i].MyGoods[-j+User[i].Sum].Price=p1->Price;
        User[i].MyGoods[-j+User[i].Sum].State=p1->State;
        User[i].MyGoods[-j+User[i].Sum].years=p1->years;
        j--;
        p2=p1;
        p1=p1->next;
        free(p2);
    }
    WriteinFile(n);
    printf("\t\t\t\t\t\t\t\t物品增加完成!\n");
    system("Pause");
}


void Revise_User_Info()///修改用户信息
{
    //USER User[100];
    //FILE *fp;
    int i,j,choice3;
    //j=Read_U_All_File();
    //i=Read_U_Part_File(j);
    j=UN;
    i=UI;
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t*                你目前所有的信息:\n");
    printf("\t\t\t\t\t\t\t\t*                名字:%s\n",User[i].Name);
    printf("\t\t\t\t\t\t\t\t*                性别:%s\n",User[i].Sex);
    printf("\t\t\t\t\t\t\t\t*                手机号码:%s\n",User[i].Pho_num);
    printf("\t\t\t\t\t\t\t\t*                邮箱:%s\n",User[i].Mail);
    printf("\t\t\t\t\t\t\t\t*                个性签名:%s\n",User[i].Spec);
    printf("\t\t\t\t\t\t\t\t*                密码:%s\n",User[i].Password);
    printf("\t\t\t\t\t\t\t\t*                目前背包物品数量:%d\n",User[i].Sum);
    printf("\t\t\t\t\t\t\t\t*                信誉分:%d \n",User[i].score);
    printf("\t\t\t\t\t\t\t\t*                地址:%s\n",User[i].Address);
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");


    cout<<endl;
    printf("\t\t\t\t\t\t\t\t请输入你想进行的操作\n");
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t*               1、修改手机号码                          *\n");
    printf("\t\t\t\t\t\t\t\t*               2、修改邮箱                              *\n");
    printf("\t\t\t\t\t\t\t\t*               3、修改密码                              *\n");
    printf("\t\t\t\t\t\t\t\t*               4、个性签名                              *\n");
    printf("\t\t\t\t\t\t\t\t*               5、收货地址                              *\n");
    printf("\t\t\t\t\t\t\t\t*               6、返回上一步                            *\n");
    printf("\t\t\t\t\t\t\t\t*               0、退出程序                              *\n");
    printf("\t\t\t\t\t\t\t\t*                                                        *\n");
    printf("\t\t\t\t\t\t\t\t**********************************************************\n");
    printf("\t\t\t\t\t\t\t\t请输入:");
    scanf("%d",&choice3);
    if(choice3==6)return;
    switch(choice3)
    {
    case 1:
        system("CLS");
        Revise_User_Info_Pho_Num(i,j);
        break;
    case 2:
        system("CLS");
        Revise_User_Info_Mail(i,j);
        break;
    case 3:
        system("CLS");
        Revise_User_Info_Password(i,j);
        break;
    case 4:
        system("CLS");
        Revise_User_Info_Spec(i,j);
        break;
    case 5:
        system("CLS");
        Revise_User_Info_Address(i,j);
        break;
    case 0:
        exit(0);
    default:
        break;
    }
}


void Revise_User_Info_Address(int i,int j)///修改地址
{
    printf("\t\t\t\t\t\t\t\t请重新输入你的地址: ");
    scanf("%s",User[i].Address);
    WriteinFile(j);
}


void Revise_User_Info_Spec(int i,int j)///修改个性签名
{
    printf("\t\t\t\t\t\t\t\t请重新输入你的个性签名: ");
    scanf("%s",User[i].Spec);
    WriteinFile(j);
}


void Revise_User_Info_Password(int i,int j)///修改密码
{
    char T_Password[20];
    int count=4,flag;
    printf("\t\t\t\t\t\t\t\t请输入你以前的密码:");
    while(count--)
    {
        flag=1;


        scanf("%s",T_Password);
        if(!strcmp(T_Password,User[i].Password))
        {
            flag=0;
            printf("\t\t\t\t\t\t\t\t请输入你的新密码:");
            scanf("%s",T_Password);
            strcpy(User[i].Password,T_Password);
            break;
        }
        else
        {
            printf("\t\t\t\t\t\t\t\t密码输入错误 你还有%d次机会输入密码\n",count);
            printf("\t\t\t\t\t\t\t\t请重新输入密码:");
        }
    }
    if(!flag)
    {
        WriteinFile(j);
        printf("\t\t\t\t\t\t\t\t修改密码成功!\n");
    }
    else printf("\t\t\t\t\t\t\t\t修改密码失败\n");
    system("PAUSE");
}


void Revise_User_Info_Mail(int i,int j)///修改邮箱
{
    char T_Mail[20];
    int k,count=4,flag;
    printf("\t\t\t\t\t\t\t\t请输入你以前的邮箱:");
    while(count--)
    {
        flag=1;


        scanf("%s",T_Mail);
        if(!strcmp(T_Mail,User[i].Mail))
        {
            printf("\t\t\t\t\t\t\t\t请输入你新的邮箱:");
            while(1)
            {
                scanf("%s",T_Mail);
                for(k=0; k<=j; k++)
                {
                    if(!strcmp(T_Mail,User[k].Mail)&&k!=i)break;
                }
                if(k>j)
                {
                    printf("\t\t\t\t\t\t\t\t修改邮箱成功!\n");
                    flag=0;
                    break;
                }
                else
                {
                    printf("\t\t\t\t\t\t\t\t邮箱已经被注册!\n");
                    printf("\t\t\t\t\t\t\t\t重新请输入你新的邮箱:");
                }
            }
        }
        if(!flag)break;
        if(flag)printf("\t\t\t\t\t\t\t\t你还有%d次机会输入你以前的邮箱\n",count);
    }
    if(flag&&!count)printf("\t\t\t\t\t\t\t\t修改邮箱失败\n");
    if(!flag)//有可能bug
    {
        strcpy(User[i].Mail,T_Mail);
        WriteinFile(j);
        //printf("\t\t\t\t\t\t\t\t修改邮箱成功!\n");
    }
    system("Pause");
}


void Revise_User_Info_Pho_Num(int i,int j)///修改手机号码
{
    char T_Pho_Num[20];
    int k,count=4,flag;
    printf("\t\t\t\t\t\t\t\t请输入你以前的手机号码:");
    while(count--)
    {
        flag=1;


        scanf("%s",T_Pho_Num);
        if(!strcmp(T_Pho_Num,User[i].Pho_num))
        {
            printf("\t\t\t\t\t\t\t\t请输入你新的手机号码:");
            while(1)
            {
                scanf("%s",T_Pho_Num);
                for(k=0; k<=j; k++)
                {
                    if(!strcmp(T_Pho_Num,User[k].Pho_num)&&k!=i)break;
                }
                if(k>j)
                {
                    printf("\t\t\t\t\t\t\t\t修改手机号码成功!\n");
                    flag=0;
                    break;
                }
                else
                {
                    printf("\t\t\t\t\t\t\t\t手机号码已经存在!\n");
                    printf("\t\t\t\t\t\t\t\t重新请输入你新的手机号码:");
                }
            }
        }
        if(!flag)break;
        if(flag)printf("\t\t\t\t\t\t\t\t你还有%d次机会输入你以前的手机号码\n",count);
    }
    if(flag&&!count)printf("\t\t\t\t\t\t\t\t修改手机号码失败\n");
    if(!flag)//有可能bug
    {
        strcpy(User[i].Pho_num,T_Pho_Num);
        WriteinFile(j);
        //printf("\t\t\t\t\t\t\t\t修改手机号码成功!\n");
    }
    system("PAUSE");
}


void Register()///注册账户
{
    //USER User[100];
    FILE *fp;
    int i=0,j,k=1;
    if((fp=fopen("User.txt","rb"))==NULL)i=0;
    else
    {
        while(fread(&User[i],sizeof(USER),1,fp)>0)i++;
    }
    fclose(fp);
    //printf("   %d     \n",i);
    if(i>=100)
    {
        printf("\t\t\t\t\t\t\t\t服务器满载\n");
        printf("\t\t\t\t\t\t\t\t等待系统升级\n");
        system("pause");
        return;
    }
    printf("\t\t\t\t\t\t\t\t请输入你的姓名:");
    scanf("%s",User[i].Name);
    printf("\t\t\t\t\t\t\t\t请输入你的性别:");
    scanf("%s",User[i].Sex);


    printf("\t\t\t\t\t\t\t\t请输入你的手机号码:");
    while(k)
    {
        scanf("%s",User[i].Pho_num);
        for(j=0; j<i; j++)
        {
            if(!strcmp(User[j].Pho_num,User[i].Pho_num))
            {
                printf("\t\t\t\t\t\t\t\t手机号码已经被注册!\n");
                printf("\t\t\t\t\t\t\t\t请重新输入手机号码:");
                break;
            }
        }
        if(strlen(User[i].Pho_num)!=11)
        {
            k=1;
            printf("\t\t\t\t\t\t\t\t非法手机号码\n\t\t\t\t\t\t\t\t请重新输入手机号码:");
        }
        else if(j>=i)k=0;
    }


    printf("\t\t\t\t\t\t\t\t请输入你的邮箱:");
    k=1;
    while(k)
    {
        scanf("%s",User[i].Mail);
        for(j=0; j<i; j++)
        {
            if(!strcmp(User[j].Mail,User[i].Mail))
            {
                printf("\t\t\t\t\t\t\t\t邮箱已经被注册!\n");
                printf("\t\t\t\t\t\t\t\t请重新输入邮箱:");
                break;
            }
        }
        if(j>=i)k=0;
    }


    printf("\t\t\t\t\t\t\t\t请输入你的地址:");
    scanf("%s",User[i].Address);




    printf("\t\t\t\t\t\t\t\t请输入你的个性签名:");
    scanf("%s",User[i].Spec);


    printf("\t\t\t\t\t\t\t\t请输入你的账号:");
    k=1;
    while(k)
    {
        scanf("%s",User[i].Acc_num);
        for(j=0; j<i; j++)
        {
            if(!strcmp(User[j].Acc_num,User[i].Acc_num))
            {
                printf("\t\t\t\t\t\t\t\t账号已经被注册!\n");
                printf("\t\t\t\t\t\t\t\t请重新输入账号:");
                break;
            }
        }
        if(j>=i)k=0;
    }


    printf("\t\t\t\t\t\t\t\t请输入你的密码:");
    //scanf("%s",User[i].Password);
    Password_Undisplay(User[i].Password);


    User[i].Sum=0;
    User[i].score=5;//信誉积分
    printf("\t\t\t\t\t\t\t\t\n背包物品数量为 0\n");
    printf("\t\t\t\t\t\t\t\t初始用户信誉度积分为 5 分\n");
    //User[i].MyGoods[1].G_ID=1;


    printf("\t\t\t\t\t\t\t\t\n注册成功\n");


    if((fp=fopen("User.txt","wb"))==NULL)
    {
        printf("\t\t\t\t\t\t\t\t文件不存在\n");
        exit(0);
    }
    for(int j=0; j<=i; j++)
    {
        fwrite(&User[j],sizeof(USER),1,fp);
        //printf("%d\n",j);
    }


    fclose(fp);


    i=0;
    fp=fopen("User.txt","rb");


    while(fread(&User[i],sizeof(USER),1,fp)>0)i++;


    //printf("%s \n",User[i-1].Name);
    fclose(fp);
    printf("Fine\n");
    //system("CLS");


}


void Login()///登录账户
{
    FILE *fp;
    //USER User[100];
    fp=fopen("User.txt","rb");
    int i=0,flag1=0,count=4;
    printf("\t\t\t\t\t\t\t\t请输入你的 账号、邮箱或手机号码:");
    int Un=Read_U_All_File();
    while(count--)
    {
        flag1=0;
        scanf("%s",T);
        for(i=0; i<Un; i++)
        {
            //printf("%s\n",User[i].Name);
            if(!strcmp(T,User[i].Acc_num))
            {
                flag1=1;
                break;
            }
            else if(!strcmp(T,User[i].Pho_num))
            {
                flag1=1;
                break;
            }
            else if(!strcmp(T,User[i].Mail))
            {
                flag1=1;
                break;
            }
        }
        if(flag1)break;
        else printf("\t\t\t\t\t\t\t\t账号不存在 你还有%d机会输入账号\n \t\t\t\t\t\t\t\t请重新输入你的 账号、邮箱或手机号码:",count);
    }
    fclose(fp);
    if(count==-1)
    {
        printf("\n\t\t\t\t\t\t\t\t强制退出程序中...\n");
        system("\t\t\t\t\t\t\t\tpause");
        exit(0);
    }
    count=4;
    if(flag1)
    {
        while(count--)
        {
            printf("\t\t\t\t\t\t\t\t请输入你的密码:");
            //scanf("%s",Tpassword);
            Password_Undisplay(Tpassword);
            //printf("%s  %s\n",Tpassword,User[i].Password);
            //system("pause");
            if(!strcmp(Tpassword,User[i].Password))
            {
                system("CLS");
                Login_welcome();
                printf("\t\t\t\t\t\t\t\t欢迎登陆 %s\n",User[i].Acc_num);
                //for(int j=0;j<strlen(User[i].Acc_num);j++)T[j]=User[i].Acc_num[j];
                strcpy(T,User[i].Acc_num);
                UN=Un;
                UI=i;
                //printf("欢迎登陆 %s\n",T);
                break;
            }
            else
            {
                system("CLS");
                Login_Warning();
                memset(Tpassword,'\0',sizeof(char));
                printf("\t\t\t\t\t\t\t\t密码错误,请输入输入密码\n");
                printf("\t\t\t\t\t\t\t\t你还有 %d 次输入机会\n",count);
            }
        }
        //cout<<count<<endl;
        if(count==-1)exit(0);
    }
    else
    {
        printf("\t\t\t\t\t\t\t\t手机电话 、 用户名 或 邮箱不存在或输入错误函数\n");
        memset(T,'\0',sizeof(char));
        //system("pause");
        system("cls");
    }


}


void Cancel()///注销
{
    memset(T,'\0',sizeof(char));
    memset(Tpassword,'\0',sizeof(char));
    printf("\t\t\t\t\t\t\t\t你已经退出了账号了\n");
    system("pause");
    system("CLS");
}


void Revise_Online()///直接查询
{


    int choice;
    while(1)
    {
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t*                1、查询 竞拍物品                        *\n");
        printf("\t\t\t\t\t\t\t\t*                2、查询 用户信息                        *\n");
        printf("\t\t\t\t\t\t\t\t*                3、查看 排行榜                          *\n");
        printf("\t\t\t\t\t\t\t\t*                4、返回                                 *\n");
        printf("\t\t\t\t\t\t\t\t*                5、退出                                 *\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");


        printf("\t\t\t\t\t\t\t\t请输入:");
        cin>>choice;
        if(choice==4)return;
        if(choice==5)exit(0);
        switch(choice)
        {
        case 1:
            Revise_Online_Good();
            break;
        case 2:
            Revise_Online_User();
            break;
        case 3:
            Revise_Online_Rank();
            break;
        default:
            break;
        }
    }
}


void Revise_Online_Good()///直接查看竞拍物品
{
    int i,flag=0;
    int B_i,B_n;
    char Bid_Name[20];
    printf("\t\t\t\t\t\t\t\t请输入 你想 查询 物品的名称:");
    scanf("%s",Bid_Name);
    B_n=ReadALL_BFile();
    B_i=Read_B_PartFile(B_n);
    for(i=B_i; i<B_n; i++)
    {
        if(!strcmp(Bid_Name,Bidder[i].B_Name))
        {
            flag=1;
            printf("\t\t\t\t\t\t\t\t物品的 价格起价为:%d \n",Bidder[i].B_Price);
            if(Bidder[i].B_H_Price==1)
            {
                printf("\t\t\t\t\t\t\t\t物品支持一口价\n");
                printf("\t\t\t\t\t\t\t\t物品一口价 :%d \n",Bidder[i].B_H_Price);
            }
            else  printf("\t\t\t\t\t\t\t\t物品不支持一口价\n");
            if(Bidder[i].Z_F==1)printf("\t\t\t\t\t\t\t\t物品拍卖方式 为 正拍\n");
            else printf("\t\t\t\t\t\t\t\t物品拍卖方式 为 反拍\n");
            if(Bidder[i].M_M==1)printf("\t\t\t\t\t\t\t\t物品价格信息实时更新\n");
            else printf("\t\t\t\t\t\t\t\t物品价格信息最后公布\n");


            printf("\t\t\t\t\t\t\t\t物品重量 %d g",Bidder[i].B_weight);
            printf("\t\t\t\t\t\t\t\t物品年份 %d ",Bidder[i].B_years);
            if(Bidder[i].B_New_old==1)printf("\t\t\t\t\t\t\t\t物品新旧状况:新\n");
            else printf("\t\t\t\t\t\t\t\t物品新旧状况:旧\n");
            printf("\t\t\t\t\t\t\t\t物品描述 :%s \n",Bidder[i].B_Desc);


            printf("\t\t\t\t\t\t\t\t物品将在 %04d %02d %02d %02d %02d %02d 开始拍卖\n",Bidder[i].B_Time.Year,Bidder[i].B_Time.Month,Bidder[i].B_Time.Day,Bidder[i].B_Time.Hour,Bidder[i].B_Time.Min,Bidder[i].B_Time.Sec);
        }
    }
    if(!flag)printf("\t\t\t\t\t\t\t\t没有找到相关物品\n");
    else printf("\t\t\t\t\t\t\t\t马上登陆 进行拍卖?\n");
    system("pause");
    system("cls");


}


void Revise_Online_User()///直接查看用户信息
{
    int Un,flag=0;
    char User_Name[20];
    Un=Read_U_All_File();
    printf("\t\t\t\t\t\t\t\t请输入你想查找 用户 的账号: ");
    scanf("%s",User_Name);
    for(int i=0; i<Un; i++)
    {
        if(!strcmp(User_Name,User[i].Acc_num))
        {
            flag=1;
            printf("\t\t\t\t\t\t\t\t该用户信誉度:%d\n",User[i].score);
            printf("\t\t\t\t\t\t\t\t该用户个性签名:%s\n",User[i].Spec);
        }
    }
    if(!flag)printf("\t\t\t\t\t\t\t\t没有该用户信息\n");
    system("pause");
}


void Menu()///开头目录
{
    HANDLE consolehwnd;
    consolehwnd=GetStdHandle(STD_OUTPUT_HANDLE);
    for(int j=7,i=0; i<118; i++)
    {
        SetConsoleTextAttribute(consolehwnd,j++);
        if(j==15)j=7;
        cout<<" -- ";
        if(i==58)cout<<endl;
    }
    SetConsoleTextAttribute(consolehwnd,15);
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                       ////////////                                                                                                                                                                                   |||");
    printf(" |||                                   ///////////////                                                                                                                                                                                    |||");
    printf(" |||                               //////////////////                                                                                                                                                                                     |||");
    printf(" |||                            ////////////////////                                                                                                                                                                                      |||");
    printf(" |||                           ////////////////////                                                                                                                                           SSS                                         |||");
    printf(" |||                                      ////////                                                                              PPP                 pppppp                               SSSSSSSSSSSSS                                    |||");
    printf(" |||                                     ////////                     YYYYYYYYYYYYYYYYYYYYYYYYYYYYY                             PPP                pppppp                                SSSSSSSSSSSSS                                    |||");
    printf(" |||                                    ////////                      YYYYYYYYYYYYYYYYYYYYYYYYYYYYY                             PPP               ppppp                                       SSS                                         |||");
    printf(" |||                                   ////////                                                                            PPPPPPPPPPPP     PPPPPPPPPPPPPPPPP                SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS                        |||");
    printf(" |||                                  ////////                                                                             PPPPPPPPPPPP     PPPPPPPPPPPPPPPPP                SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSss                        |||");
    printf(" |||                                 ////////                                                                                   PPP         PP             PP                                                 SSs                         |||");
    printf(" |||                                ////////                                                                                    PPP         PP             PP                           SSS   SSS    sss     SSs                          |||");
    printf(" |||                               ////////                   YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY                    PPP         PP             PP                            SS   SSS   sss     SS                            |||");
    printf(" |||                              ////////                    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY                    PPP         PP             PP                      SSS        SSS  sss                                    |||");
    printf(" |||                             ////////                                YYYY            yyyyy                                  PPP         PP             PP                        SS       SSS ss                                      |||");
    printf(" |||                            ////////                                 YYYY             yyyy                                  PPPPPPPP    PPPPPPPPPPPPPPPPP                sssSSSSSSSSSSSSSSSSSSSSSSSSSSSsss                            |||");
    printf(" |||                           ////////                                  YYYY             yyyy                              PPPPPPPPPP      PPPPPPPPPPPPPPPPP                sssSSSSSSSSSSSSSSSSSSSSSSSSSSSsss                            |||");
    printf(" |||                          ////////                                  YYYY              yyyy                           PPPPPPPPPP         PP             PP                                 SS                                          |||");
    printf(" |||                         ////////                                  YYYY               yyyy                                  PPP         PP             PP                               ss  Ss                                        |||");
    printf(" |||                        ////////                                  YYYY                 yyyy                                 PPP         PP             PP                              ss    SS                                       |||");
    printf(" |||                       ////////                                 YYYY                    yyyy                                PPP         PP             PP                            ss       SS                                      |||");
    printf(" |||                      ////////                                YYYY                        yyyy  yyyy                        PPP         PP             PP                          ssS         SS                                     |||");
    printf(" |||                     ////////                               YYYY                            yyyyyyy                         PPP         PP             PP                        ssss           SSS                                   |||");
    printf(" |||                    ////////                             YYYY                                 yyy                      pp  PPPP         PPPPPPPPPPPPPPPPP                     sssss              SSS                                  |||");
    printf(" |||                   ////////                                                                                             ppppPPP         PPPPPPPPPPPPPPPPPP                 sssss                  SSSS                                |||");
    printf(" |||                                                                                                                         pppp                                           sssss                      sSSSss                             |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 1 】  用户登录                                                                                                                   |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 2 】  用户注册                                                                                                                   |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 4 】  查询                                                                                                                       |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 5 】  退出                                                                                                                       |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 6 】  帮助                                                                                                                       |||");
    printf(" |||                                                                                                                                                                                                                                      |||");
    printf(" |||                                                                                                  【 7 】  关于作者                                                                                                                   |||");
    printf(" |||                                                                                                                                                                                                                                      ||| ");
    for(int j=7,i=0; i<118; i++)
    {
        SetConsoleTextAttribute(consolehwnd,j++);
        if(j==15)j=7;
        cout<<" -- ";
        if(i==58)cout<<endl;
    }
    SetConsoleTextAttribute(consolehwnd,15);
}


void Help()///帮助
{
    int choice;
    while(1)
    {
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t*                 1、使用须知                            *\n");
        printf("\t\t\t\t\t\t\t\t*                 2、领取礼品                            *\n");
        printf("\t\t\t\t\t\t\t\t*                 3、返回                               *\n");
        printf("\t\t\t\t\t\t\t\t*                                                        *\n");
        printf("\t\t\t\t\t\t\t\t**********************************************************\n");


        printf("\t\t\t\t\t\t\t\t请输入:");
        scanf("%d",&choice);
        if(choice==3)break;
        if(choice==1)Mannel();//用户手册
        if(choice==2)Receive_rewards();//领取奖励
        system("cls");
    }
}


void Mannel()///用户手册
{
    printf("\t\t\t\t\t\t\t\t*****************************************************************\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*      此平台用于各个用户自由拍卖自己的物品                     *\n");
    printf("\t\t\t\t\t\t\t\t*      各个用户拥有自己的背包                                   *\n");
    printf("\t\t\t\t\t\t\t\t*      背包的容量为20件物品 所以记得将不需拍卖的物品清空哦      *\n");
    printf("\t\t\t\t\t\t\t\t*      各个用户通过竞拍获得 信誉度 的 提升                      *\n");
    printf("\t\t\t\t\t\t\t\t*      相反 用户 如果 流拍 删除竞拍物品 信誉度 会 下降          *\n");
    printf("\t\t\t\t\t\t\t\t*      删除自己背包物品 不会有任何影响                          *\n");
    printf("\t\t\t\t\t\t\t\t*      信誉度不仅可以考虑 买家/卖家的 诚信程度                  *\n");
    printf("\t\t\t\t\t\t\t\t*      信誉度还可以换取 一定的 奖品                             *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*      每件物品竞拍时可以多次输入价钱  价高者得                 *\n");
    printf("\t\t\t\t\t\t\t\t*      每件物品竞拍时  输入一次信息后就自动退出更新信息         *\n");
    printf("\t\t\t\t\t\t\t\t*      每件物品竞拍时  可以 卡秒 进行 报价                      *\n");
    printf("\t\t\t\t\t\t\t\t*      每件物品都拍卖时间为 60 秒                               *\n");
    printf("\t\t\t\t\t\t\t\t*      拍卖物品模式 为 Frist in Frist out                       *\n");
    printf("\t\t\t\t\t\t\t\t*      前面竞拍物品的开始时间 比 后面物品 快>= 60s              *\n");
    printf("\t\t\t\t\t\t\t\t*      下一件物品还没开始拍卖时 需要等待                        *\n");
    printf("\t\t\t\t\t\t\t\t*      每件竞拍物品可以进行删除 但有时间限制                    *\n");
    printf("\t\t\t\t\t\t\t\t*      删除后可以在自己背包中修改物品信息                       *\n");
    printf("\t\t\t\t\t\t\t\t*      输入价格 范围为 1 到 99999                               *\n");
    printf("\t\t\t\t\t\t\t\t*      你可以通过注册账号进行进一步的了解                       *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*      用户 账号 密码 性别  个性签名 最多可以存放 16 字符       *\n");
    printf("\t\t\t\t\t\t\t\t*      用户 手机 一定是 11 位 数字                              *\n");
    printf("\t\t\t\t\t\t\t\t*      用户 背包 物品信息 修改时 类似                           *\n");
    printf("\t\t\t\t\t\t\t\t*      输入数据时 应该按照相关指引                              *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*      如果出现bug 那肯定不关本程序员的问题   逃~               *\n");
    printf("\t\t\t\t\t\t\t\t*              肯定是 陈老偷偷加上去的                          *\n");
    printf("\t\t\t\t\t\t\t\t*                                                               *\n");
    printf("\t\t\t\t\t\t\t\t*****************************************************************\n");


    char Test[50];
    printf("\t\t\t\t\t\t\t\t请输入 “ 我已阅读完毕 ”\n");
    printf("\t\t\t\t\t\t\t\t请输入 :");
    scanf("%s",Test);


    system("Pause");
}


void Receive_rewards()///领取奖励
{
    if(T[0]=='\0')
    {
        printf("\t\t\t\t\t\t\t\t请先进行登录操作\n");
        system("Pause");
        system("cls");
    }
    else
    {
        int Ui,choice;
        //Un=Read_U_All_File();
        //Ui=Read_U_Part_File(Un);
        Ui=UI;
        printf("\t\t\t\t\t\t\t\t0、打扰了\n");
        printf("\t\t\t\t\t\t\t\t信誉度积分     奖品\n");
        printf("\t\t\t\t\t\t\t\t1、5           男票\n");
        printf("\t\t\t\t\t\t\t\t2、500         小米手环3\n");
        printf("\t\t\t\t\t\t\t\t3、1500        GTX1080Ti\n");
        printf("\t\t\t\t\t\t\t\t4、2500        俄罗斯世界杯总决赛门票\n");
        printf("\t\t\t\t\t\t\t\t请输入:");
        scanf("%d",&choice);
        if(!choice)return;
        if(choice==1&&User[Ui].score>=5)printf("\t\t\t\t\t\t\t\t正在送往 %s \n",User[Ui].Address);
        else if(choice==2&&User[Ui].score>=500)printf("\t\t\t\t\t\t\t\t正在送往 %s \n",User[Ui].Address);
        else if(choice==3&&User[Ui].score>=1500)printf("\t\t\t\t\t\t\t\t正在送往 %s \n",User[Ui].Address);
        else if(choice==4&&User[Ui].score>=2500)printf("\t\t\t\t\t\t\t\t正在送往 %s \n",User[Ui].Address);
        else printf("\t\t\t\t\t\t\t\t信誉度不够\n");
        system("Pause");
        system("cls");
    }
}


void About_Author()///关于作者 可以扩展
{
    int choice,choice2;
    char Admin[20];
    printf("\t\t\t\t\t\t\t\t1、管理者登录\n");
    printf("\t\t\t\t\t\t\t\t2、关于作者\n");
    printf("\t\t\t\t\t\t\t\t请输入:");
    scanf("%d",&choice);
    if(choice==1)
    {
        printf("\t\t\t\t\t\t\t\t请输入 管理验证码 :");
        scanf("%s",Admin);
        if(strlen(Admin)<6&&(Admin[0]=='A'||Admin[0]=='a')&&(Admin[1]=='D'||Admin[1]=='d')&&(Admin[2]=='M'||Admin[2]=='m')&&(Admin[3]=='I'||Admin[3]=='i')&&(Admin[4]=='N'||Admin[4]=='n'))
        {
            printf("\t\t\t\t\t\t\t\t1、查看 所有 曾经放在 拍卖平台上的 物品信息\n");
            printf("\t\t\t\t\t\t\t\t2、修改用户信息\n");
            printf("\t\t\t\t\t\t\t\t请输入:");
            scanf("%d",&choice2);
            if(choice2==1)
            {
                int B_n=ReadALL_BFile();
                int B_i=Read_B_PartFile(B_n);
                for(int i=0; i<B_n; i++)
                {
                    cout<<endl;
                    if(i<B_i)
                    {
                        printf("已经拍卖完成的物品:\n");
                        printf("物品名称:%s\n",Bidder[i].B_Name);
                        printf("物品起价:%d\n",Bidder[i].B_Price);
                        //printf("物品最高价:%d\n",Bidder[i].B_H_Price);
                        printf("物品年份:%d\n",Bidder[i].B_years);
                        printf("物品重量:%d\n",Bidder[i].B_weight);
                        printf("物品描述:%s\n",Bidder[i].B_Desc);


                        printf("物品原主人:%s\n",Bidder[i].Haver);
                        if(Bidder[i].Ber[0]!='\0')printf("物品得主:%s\n",Bidder[i].Ber);
                        if(Bidder[i].flag1==4)printf("物品 恢复 原来得主\n");
                        else if(Bidder[i].flag1==3&&Bidder[i].flag2==1)printf("物品被买走\n");
                        else if(Bidder[i].flag1==3&&Bidder[i].flag2==2)printf("物品流拍\n");
                        else if(Bidder[i].flag1==6)printf("物品以价格>=最高价被买走\n");
                        cout<<endl;
                        if(Bidder[i].sum>=1)
                        {
                            printf("竞拍人        竞拍价         竞拍时间 \n");
                            for(int j=1; j<=Bidder[i].sum; j++)printf("%s        %d         %04d %02d %02d %02d %02d %02d\n",Bidder[i].Mark[j].Next_Haver_Name,Bidder[i].Mark[j].Money,Bidder[i].Mark[j].Ye,Bidder[i].Mark[j].Mo,Bidder[i].Mark[j].Da,Bidder[i].Mark[j].Ho,Bidder[i].Mark[j].Mi,Bidder[i].Mark[j].Se);
                        }
                    }
                    else
                    {
                        printf("已经开始 或 未开始 拍卖物品:\n");
                        printf("物品名称:%s\n",Bidder[i].B_Name);
                        printf("物品起价:%d\n",Bidder[i].B_Price);
                        //printf("物品最高价:%d\n",Bidder[i].B_H_Price);
                        printf("物品年份:%d\n",Bidder[i].B_years);
                        printf("物品重量:%d\n",Bidder[i].B_weight);
                        printf("物品描述:%s\n",Bidder[i].B_Desc);


                        printf("物品原主人:%s\n",Bidder[i].Haver);
                    }


                    cout<<endl;
                    cout<<endl;
                }
                system("pause");
            }
            else
            {
                int Ui,Un,flag=0;
                char NNN[20];
                Un=Read_U_All_File();
                printf("\t\t\t\t\t\t\t\t请输入你想修改 用户 信息的 账号:");
                scanf("%s",NNN);
                for(int i=0; i<Un; i++)
                {
                    if(!strcmp(NNN,User[i].Acc_num))
                    {
                        flag=1;
                        Ui=i;
                        break;
                    }
                }
                if(flag)
                {
                    printf("\t\t\t\t\t\t\t\t请输入你想修改 用户 的 新密码:");
                    scanf("%s",User[Ui].Password);
                    WriteinFile(Un);
                    printf("\t\t\t\t\t\t\t\t修改成功\n");
                    system("pause");
                }
                else
                {
                    printf("\t\t\t\t\t\t\t\t没有相关用户\n");
                    system("pause");
                }
            }
        }
        else
        {
            printf("\t\t\t\t\t\t\t\t输入错误\n");
            system("pause");
        }
    }
    else if(choice==2)
    {
        char T[20];
        printf("\t\t\t\t\t\t\t\t回答问题,触发彩蛋\n");
        printf("\t\t\t\t\t\t\t\t请输入 作者名字:");
        scanf("%s",T);
        if(strlen(T)<4&&(T[0]=='L'||T[0]=='l')&&(T[1]=='T'||T[1]=='t')&&(T[2]=='S'||T[2]=='s'))
        {


            HANDLE t=GetStdHandle(STD_OUTPUT_HANDLE);
            SetConsoleTextAttribute(t,12);
            printf("\t\t\t\t\t\t\t\t                                     000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                                   0000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                                 00000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                                0000000000000000000000000\n");
            SetConsoleTextAttribute(t,14);
            printf("\t\t\t\t\t\t\t\t                              0000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                             000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                           000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                          00000000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,10);
            printf("\t\t\t\t\t\t\t\t                         0000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                        000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                       00000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                      0000000000000000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,11);
            printf("\t\t\t\t\t\t\t\t                     00000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                     000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                     000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                    000000000000000000000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,9);
            printf("\t\t\t\t\t\t\t\t                    000000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                   00000000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                   00000000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                   00000000000000000000000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,13);
            printf("\t\t\t\t\t\t\t\t                   000000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                     0000000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                      00000000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                       000000000000000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,7);
            printf("\t\t\t\t\t\t\t\t                        000000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                           000000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                            0000000000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                             000000000000000000000000000000\n");
            SetConsoleTextAttribute(t,15);
            printf("\t\t\t\t\t\t\t\t                              0000000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                                000000000000000000000000\n");
            printf("\t\t\t\t\t\t\t\t                                 0000000000000000000000\n");




            cout<<endl;
            cout<<endl;
            printf("\n\t\t\t\t\t\t\t\t正如  头号玩家 一样,彩蛋就是彩蛋\n\n\n");
            printf("\t\t\t\t\t\t\t\t花费大量的时间与精力寻找彩蛋就是 玩游戏 的过程,“just for fun” \n\n\n");




            printf("SCAU_17 0212 Luo.T4 \n");
            system("pause");
        }
        else printf("输入错误 !\n");
    }
}


void delay(double second)///登录延迟
{
    clock_t delay=second*CLOCKS_PER_SEC;
    clock_t start=clock();
    while(clock()-start<delay)
        ;
}


void In_System()///Loading...
{
    string load="Loading";
    string wait=".";
    int count_1=0,i;
    while(count_1<15)
    {
        if(!(count_1%5))system("CLS");
        if(!(count_1%5))
        {
            for(i=0; i<27; i++)cout<<endl;
            for(i=0; i<52; i++)cout<<"  ";
            cout<<load;
        }
        delay(0.3);
        if(count_1)cout<<wait;
        count_1++;
    }
    system("CLS");
}


void Password_Undisplay(char Pw[])///密码显示
{
    char c;
    //char Pw[128] = {'\0'};
    char incr[2] = {0,'\0'};
    int i=0;
    while('\r'!=(c = getch()))
    {


        if(c =='\b')
        {
            i--;
            printf("\b");
            printf(" ");
            printf("\b");
            continue;
        }
        else
        {
            printf("*");
        }
        incr[0] = c;
        strcat(Pw, incr);
        i++;
    }
    Pw[i] = '\0';
    //printf("\n%s", pw);
}


void Login_Warning()///密码错误
{
    HANDLE T=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(T,12);


    printf("\t\t\t\t\t\t      W               W         A             RRRRRRRRR       N         N        IIIIIIIIIII           N         N         GGGGGGGGGGG  \n"
           "\t\t\t\t\t\t      W       W       W        A A            R        R      N N       N             II               N N       N         G         G  \n"
           "\t\t\t\t\t\t      W     W W     W        A   A           R        R      N  N      N             II               N  N      N         G         G   \n"
           "\t\t\t\t\t\t      W     W W     W       A     A          R        R      N   N     N             II               N   N     N         G         G   \n"
           "\t\t\t\t\t\t      W   W   W   W       A       A         RRRRRRRRR       N    N    N             II               N    N    N         G              \n"
           "\t\t\t\t\t\t      W   W   W   W      AAAAAAAAAAA        RR              N     N   N             II               N     N   N         G      GGGG    \n"
           "\t\t\t\t\t\t      W W     W W      A           A       R RR            N      N  N             II               N      N  N         G         G     \n"
           "\t\t\t\t\t\t      WWW     WWW     A             A      R   RR          N       N N             II               N       N N         G         G     \n"
           "\t\t\t\t\t\t      W       W     A               A     R     RR        N         N        IIIIIIIIIIII          N         N         GGGGGGGGGGG      \n"
           "\t\t\t\t\t\t                                                   AA                                                                                   \n"
           "\t\t\t\t\t\t                                                 AA  AA                                                                                 \n"
           "\t\t\t\t\t\t                                               AA      AA                                                                               \n"
           "\t\t\t\t\t\t                                             AA    AA    AA                                                                             \n"
           "\t\t\t\t\t\t                                          AA       AA      AA                                                                           \n"
           "\t\t\t\t\t\t                                        AA         AA        AA                                                                         \n"
           "\t\t\t\t\t\t                                      AA           AA          AA                                                                       \n"
           "\t\t\t\t\t\t                                    AA                           AA                                                                     \n"
           "\t\t\t\t\t\t                                 AA                AA              AA                                                                   \n"
           "\t\t\t\t\t\t                               AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA                                                                 \n");


    SetConsoleTextAttribute(T,15);


}


void Login_welcome()///欢迎登录
{


    printf("\t\t\t\t\t\t                                                                                                                                                     \n"
           "\t\t\t\t\t\t     W               W      EEEEEEEEEEEE         L                 CCCCCCCCCCCC        OOOOOOOOOOOOO         M                 M      EEEEEEEEEEEE   \n"
           "\t\t\t\t\t\t     W       W       W      E                    L                 C                   O           O         M M             M M      E              \n"
           "\t\t\t\t\t\t     W     W W     W       E                    L                 C                   O           O         M  M           M  M      E               \n"
           "\t\t\t\t\t\t     W     W W     W       E                    L                 C                   O           O         M   M         M   M      E               \n"
           "\t\t\t\t\t\t     W   W   W   W        EEEEEEEEEEE          L                 C                   O           O         M    M       M    M      EEEEEEEEEEE      \n"
           "\t\t\t\t\t\t     W   W   W   W        E                    L                 C                   O           O         M     M     M     M      E                \n"
           "\t\t\t\t\t\t     W W     W W         E                    L                 C                   O           O         M      M   M      M      E                 \n"
           "\t\t\t\t\t\t     WWW     WWW         E                    L                 C                   O           O         M       M M       M      E                 \n"
           "\t\t\t\t\t\t     W       W          EEEEEEEEEEEE         LLLLLLLLLLLL      CCCCCCCCCCCC        OOOOOOOOOOOOO         M        M        M      EEEEEEEEEEEE       \n");
}


///用户信息
int Read_U_All_File()///读取全部文件
{
    FILE *fp;
    int j=0;
    fp=fopen("User.txt","rb");
    while(fread(&User[j],sizeof(USER),1,fp)>0)j++;
    fclose(fp);
    return j;
}


int Read_U_Part_File(int n)///读取关键文件
{
    int i=0;
    for(i=0; i<=n; i++)
    {
        if(!strcmp(T,User[i].Acc_num))
            break;
    }
    return i;
}


void WriteinFile(int i)///写入文件
{
    FILE *fp;
    fp=fopen("User.txt","wb");
    for(int k=0; k<i; k++)fwrite(&User[k],sizeof(USER),1,fp);
    fclose(fp);
}


///竞拍物品
int ReadALL_BFile()///读取拍卖物品文件
{
    FILE *fp;
    int j=0;
    fp=fopen("Bidder.txt","rb");
    while(fread(&Bidder[j],sizeof(BIDDER),1,fp)>0)j++;
    fclose(fp);
    return j;
}


void Write_B_inFile(int i)///写入文件
{
    FILE *fp;
    fp=fopen("Bidder.txt","wb");
    for(int k=0; k<i; k++)fwrite(&Bidder[k],sizeof(BIDDER),1,fp);
    fclose(fp);
}


int Read_B_PartFile(int B_n)///读取第一个flag1==1
{
    int i;
    for(i=0; i<B_n; i++)
    {
        if(Bidder[i].flag1==1||Bidder[i].flag1==5)return i;
    }
    if(B_n>=1&&Bidder[B_n-1].B_Name[0]!='\0')return B_n;
    else return -1;
}


void Rank_Read(int Un)///读取用户信誉度
{
    for(int j=0; j<Un; j++)
    {
        strcpy(Rank[j].Name,User[j].Acc_num);
        Rank[j].score=User[j].score;
    }
}


void Revise_Online_Rank()///查看排行榜
{
    int Un=Read_U_All_File(),n,j,k;
    Rank_Read(Un);
    Rank_Quick_Sort(Rank,0,Un-1);//排行榜
    if(Un>=20)n=20;
    else n=Un;
    printf("以下是 信誉度 最高的 前 %d 位 用户\n",n);
    printf("用户名                信誉分\n");
    for(int i=0; i<n; i++)
    {
        j=strlen(Rank[i].Name);
        for(k=0; k<j-2; k++)printf("*");
        for(; k<j; k++)printf("%c",Rank[i].Name[k]);
        for(; k<25; k++)printf(" ");
        printf("%d\n",Rank[i].score);
    }
    system("pause");
    system("cls");
}


void Jugel()///判断是否 支付 流拍
{
    Bn=ReadALL_BFile();
    Bi=Read_B_PartFile(Bn);
    int i,choice,flag=0;
    Overdue();//过期没人要的东西
    Back_Bag();//回到背包;
    for(i=0; i<Bi; i++)
    {
        if(Bidder[i].flag1==3)
        {
            //Online_Money(Bidder[i].B_H_Price,2,Bidder[i].Z_F);
            if(!strcmp(T,Bidder[i].Ber)&&Bidder[i].flag2!=1&&Bidder[i].flag2!=2)
            {
                strcpy(Buyer,T);
                strcpy(Seller,Bidder[i].Haver);
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t*       拍卖物品名字: %s\n",Bidder[i].B_Name);
                printf("\t\t\t\t\t\t\t\t*       拍卖物品描述: %s\n",Bidder[i].B_Desc);
                printf("\t\t\t\t\t\t\t\t*       拍卖物品类型: %s\n",Bidder[i].B_size);
                printf("\t\t\t\t\t\t\t\t*       拍卖物品起拍价: %d\n",Bidder[i].B_Price);
                printf("\t\t\t\t\t\t\t\t*       拍卖物品重量: %d\n",Bidder[i].B_weight);
                printf("\t\t\t\t\t\t\t\t*                                                        *\n");
                printf("\t\t\t\t\t\t\t\t**********************************************************\n");
                printf("\t\t\t\t\t\t\t\t*****************************************************************\n");
                printf("\t\t\t\t\t\t\t\t*                                                               *\n");
                printf("\t\t\t\t\t\t\t\t*                              1 、支付                         *\n");
                printf("\t\t\t\t\t\t\t\t*                              2 、流拍                         *\n");
                printf("\t\t\t\t\t\t\t\t*                                                               *\n");
                printf("\t\t\t\t\t\t\t\t*****************************************************************\n");
                printf("\t\t\t\t\t\t\t\t请输入:");
                scanf("%d",&choice);
                if(choice==1)
                {
                    flag=1;
                    Bidder[i].flag2=1;
                    Payment(i);
                }
                else
                {
                    flag=1;
                    Bidder[i].flag2=2;
                    Racket(i);
                }
            }
        }
        system("cls");
    }
    if(!flag)
    {
        printf("\t\t\t\t\t\t\t\t*****************************************************************\n");
        printf("\t\t\t\t\t\t\t\t*                                                               *\n");
        printf("\t\t\t\t\t\t\t\t*                        So Sad!                               *\n");
        printf("\t\t\t\t\t\t\t\t*                       你没有竞拍到物品                        *\n");
        printf("\t\t\t\t\t\t\t\t*                                                               *\n");
        printf("\t\t\t\t\t\t\t\t*****************************************************************\n");
    }
    Write_B_inFile(Bn);
    system("pause");
    system("cls");
}












 

 

2019-07-29 19:24:35 philip502 阅读数 287

竞拍关键技术点

  1. 最后一秒拉取活动是否延时
  2. 拍卖时当前最高价更新策略

1.最后一秒拉取活动是否延时

竞拍延时场景:如果在竞拍活动距离结束的最后x分钟内有人出价,活动的结束时间自动往后延长x分钟;

这里技术点是怎么实现最后1秒的时候去检查活动延时

具体的实现思路是页面在竞拍活动倒计时结束的最后一秒停止倒计时保持页面状态,同时去服务端拉取最新的活动结束时间

如果发现活动延时则继续开启倒计时,否则直接在活动页面上标记为已结束;

2.拍卖时当前最高价更新策略

看图说话

2012-11-30 09:42:45 feilong_12 阅读数 749
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<script>
function total(){
//获取竞拍价格

var num1=document.form1.num1.value;
//获得购买数量
var num2=document.form1.num2.value;


if (isNaN(num1)) {
  alert("请正确填写竞拍价格 ");}

else{


if (isNaN(num2)) {
  alert ("请正确填写购买数量");}

else{





if(num1>=0&&num2>=0){
//计总价值

if(num1!=""&&num2!=""){



 var youhui=document.form1.youhui.value;
     var zhekou;
     switch(parseInt(youhui)){
       
         case 6:
                 zhekou=0.6;break;
         case 7:
                 zhekou=0.7;break;
         case 8:
                 zhekou=0.8;break;
         case 9:
                 zhekou=0.9;break;
    
         default:
            alert("请选择折扣!");
    
     }

//计算总价并且重新设置总价的值
document.form1.zong.value=num1*num2*zhekou;
var ttotal=num1*num2*zhekou
 if(ttotal>500&&ttotal<=1000){
alert("奖励qq会员");
}
if(ttotal>1000&&ttotal<=2000){
alert("奖励鼠标一个");
}
if(ttotal>2000){
alert("免费办理vip");
}       
}
else{
alert("竞拍价格或者购买数量为空请填写!!")
}
}else{
alert("请正确填写!!!")
}}}
}
</script>
</head>

<body>
<form name="form1">
<table width="200" border="0" align="center">
 <tr>
    <td colspan="2"><img src="logo.JPG" /></td>
   </tr>
  <tr>
    <td width="66">竟拍价格</td>
    <td width="170"><input type="text" name="num1" /></td>
  </tr>
  <tr>
    <td>购买数量</td>
    <td><input type="text" name="num2"></td>
  </tr>
  <tr>
    <td>竞拍总价</td>
    <td><input type="text" name="zong"></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td><input type="button" name="button" value="计算看看" onclick="total()"></td>
  </tr>
  <tr>
      <td>享受优惠</td>
    <td><select name="youhui">
        <option value="6"> 6</option>
        <option value="7"> 7</option>
        <option value="8"> 8</option>
        <option value="9"> 9</option>
        
    </select>    </td>
  </tr>
</table>
</form>
</body>
</html>


2016-01-21 17:10:59 btt2013 阅读数 1392

管理物品种类:

查看物品种类 &添加物品种类

服务端代码:
BussinessServiceImpl.java
// --------------------种类-------------------------
	private KindDao kindDao = new KindDaoImpl();

	/**
	 * 查询全部种类
	 * 
	 * @return 系统中全部种类
	 */
	public List<KindBean> getAllKind() throws AuctionException {
		try {
			List<KindBean> result = new ArrayList<KindBean>();
			List<Kind> kindList = kindDao.findAll();
			for (Kind kind : kindList) {
				result.add(new KindBean(kind.getKind_id(), kind.getKind_name(),
						kind.getKind_desc()));
			}
			return result;
		} catch (Exception e) {
			throw new AuctionException("查询全部种类出现异常,请重试");
		}
	}
	/**
	 * 添加种类
	 * @param kind新增的种类
	 * @return 新增种类的主键
	 */
	public int addKind(Kind kind) throws AuctionException {
		try {
			kindDao.save(kind);
			return kind.getKind_id();
		} catch (Exception e) {
			throw new AuctionException("添加种类出现异常,请重试");
		}
	}
KindDao.java
package com.xbmu.dao;

import java.util.List;
import com.xbmu.bean.Kind;

public interface KindDao {
	/**
	 * 查询所有种类
	 * @return
	 */
	List<Kind> findAll();
	
	/**
	 * 添加种类
	 * @param kind 待添加的种类
	 */
	void save(Kind kind);
}
KindDaoImpl.java
package com.xbmu.dao.impl;

import java.sql.SQLException;
import java.util.List;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import org.apache.commons.dbutils.handlers.ScalarHandler;
import com.xbmu.bean.Kind;
import com.xbmu.dao.KindDao;
import com.xbmu.util.DBCPUtil;
public class KindDaoImpl implements KindDao {
	QueryRunner qr = new QueryRunner(DBCPUtil.getDataSource());
	public List<Kind> findAll() {		
		try {
			String sql = "select * from kind";
			List<Kind> kinds = qr.query(sql, new BeanListHandler<Kind>(Kind.class));
			return kinds;
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
	/**
	 * 添加种类:
	 * 遇到问题:需求,想将添加的新数据的id返回,
	 * 使用insert into kind (kind_name,kind_desc) values(?,?);select @@identity as kind_id;语句
	 * 
	 */
	public void save(Kind kind) {
		try {
			String sql = "insert into kind (kind_name,kind_desc) values(?,?)";
			qr.update(sql, kind.getKind_name(),kind.getKind_desc());
			String sql2 = "select @@identity as kind_id";
			//ScalarHandler 的参数为空或null时,返回第一行第一列的数据 
			//ScalarHandler 的参数可以是列的索引(从1开始)或列名 
			Object kind_id = qr.query(sql2, new ScalarHandler(1));
			//因为kind_id在数据库中定义为int型,上面语句返回后为BigInteger型,
			kind.setKind_id(Integer.valueOf(kind_id.toString()));//容易发生类型转换异常
		} catch (SQLException e) {
			throw new RuntimeException(e);
		}
	}
}
ViewKindServlet.java
package com.xbmu.web.controller;

import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONArray;
import com.xbmu.business.KindBean;
import com.xbmu.service.BussinessService;
import com.xbmu.service.impl.BussinessServiceImpl;
@WebServlet(urlPatterns="/android/viewKind.jsp")
public class ViewKindServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		BussinessService service = new BussinessServiceImpl();
		List<KindBean> kinds = service.getAllKind();
		String mode = request.getParameter("mode");
		if("android".equals(mode)){
			JSONArray jsonArray = new JSONArray(kinds);
			response.getWriter().println(jsonArray.toString());		
		}else if("web".equals(mode)){
			request.setAttribute("kinds", kinds);
			request.getRequestDispatcher("/manage/viewKind.jsp").forward(request, response);
		}
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
AddKindServlet.java
package com.xbmu.web.controller;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.xbmu.bean.Kind;
import com.xbmu.service.BussinessService;
import com.xbmu.service.impl.BussinessServiceImpl;

@WebServlet(urlPatterns = "/android/addKind.jsp")
public class AddKindServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String mode = request.getParameter("mode");
		// 获取请求参数
		String name = request.getParameter("kindName");
		String desc = request.getParameter("kindDesc");
		// 获取服务类对象
		BussinessService service = new BussinessServiceImpl();
		// 调用业务逻辑层的业务方法添加种类
		int kindId = service.addKind(new Kind(name, desc));
		
		if("android".equals(mode)){
			// 添加成功
			if (kindId > 0) {
				response.getWriter().println("恭喜您,种类添加成功");
			} else {
				response.getWriter().println("对不起,种类添加失败");
			}
		}else if("web".equals(mode)){
			response.getWriter().write("添加种类。2秒后自动转向添加页面");
			response.setHeader("Refresh", "2;URL=" + request.getContextPath()
					+ "/servlet/ViewKindServlet?mode=web");
		}
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}
viewKind.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/manage/header.jsp"%>
<br/>
<table width="80%" align="center" cellpadding="0" cellspacing="1" >
	<tr>
		<td colspan="4" >所有流拍的物品</td> 
	</tr>
	<tr  height="30">
		<th>种类名</th>
		<th>种类描述</th>
	</tr>
	<c:forEach items="${kinds}" var="k" varStatus="vs">
		<tr height="24" class="${vs.index%2==0?'odd':'even' }">
			<td nowrap="nowrap">${k.kindName}</td>
			<td nowrap="nowrap">${k.kindDesc}</td>
		</tr>
	</c:forEach>
</table>
  </body>
</html>
addKind.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ include file="/manage/header.jsp"%>
<br/>
    <form action="${pageContext.request.contextPath}/servlet/AddKindServlet?mode=web" method="post" >
    	<table border="1" width="438" align="center">
    		<tr>
    			<td>种类名称</td>
    			<td>
    				<input type="text" name="kindName"/>
    			</td>
    		</tr>
    		<tr>
    			<td>种类描述</td>
    			<td>
    				<textarea rows="5" cols="45" name="kindDesc"></textarea>
    			</td>
    		</tr>
    		<tr>
    			<td colspan="2">
    				<input type="submit" value="保存"/>
    			</td>
    		</tr>
    	</table>
  </body>
</html>
客户端代码:
查看物品种类:

ManageKind.java

package com.xbmu.auction.activity;

import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import com.xbmu.auction.Callbacks;
import com.xbmu.auction.FragmentActivity;
import com.xbmu.auction.fragment.ManageKindFragment;
public class ManageKind extends FragmentActivity implements Callbacks{

	@Override
	protected Fragment getFragment() {
		return new ManageKindFragment();
	}
	@Override
	public void onItemSelected(Integer id, Bundle bundle) {
		//当用户点击ManageKindFragment中的"添加"按钮时,系统启动AddKindActivity
		Intent intent = new Intent(this, AddKind.class);
		startActivity(intent);
	}
}
ManageKindFragment.java
package com.xbmu.auction.fragment;

import org.json.JSONArray;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ListView;
import com.xbmu.auction.Callbacks;
import com.xbmu.auction.R;
import com.xbmu.auction.adapter.KindArrayAdapter;
import com.xbmu.auction.listener.HomeListener;
import com.xbmu.auction.util.DialogUtil;
import com.xbmu.auction.util.HttpUtil;

public class ManageKindFragment extends Fragment {
	//添加种类的id,值随意,只要唯一
	protected static final Integer ADD_KIND = 0x1007;
	private Button bnHome;
	private Button bnAdd;
	private ListView kindList;
	private Callbacks mCallbacks;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.manage_kind, container, false);
		//获取界面布局上的两个按钮
		bnHome = (Button) rootView.findViewById(R.id.bn_home);
		bnAdd = (Button) rootView.findViewById(R.id.bnAdd);
		kindList = (ListView) rootView.findViewById(R.id.kindList);
		
		//设置监听时间
		bnHome.setOnClickListener(new HomeListener(getActivity()));
		bnAdd.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				//调用该Fragment所在的Activity的onItemSelected方法
				mCallbacks.onItemSelected(ADD_KIND, null);
			}
		});
		//定义发送请求的url
		String url = HttpUtil.BASE_URL+"viewKind.jsp"+"?mode=android";
		try {
			//向指定URL发送请求,并把响应包装成JSONArray对象
			JSONArray jsonArray = new JSONArray(HttpUtil.getRequest(url));
			//把JSONArray对象包装成Adapter
			kindList.setAdapter(new KindArrayAdapter(jsonArray,getActivity()));
		} catch (Exception e) {
			DialogUtil.showDialog(getActivity(), "服务器响应异常!", false);
			e.printStackTrace();
		}
		return rootView;
	}
	/**当该Fragment被添加、显示到Activity时,回调该方法*/
	@Override
	public void onAttach(Activity activity) {
		super.onAttach(activity);
		//如果Activity没有实现Callbacks接口,抛出异常
		if(!(activity instanceof Callbacks)){
			throw new IllegalStateException("ManageKindFragment所在的Activity必须实现Callbacks接口");
		}
		//把该Activity当初Callbacks对象
		mCallbacks = (Callbacks) activity;
	}
	/**当该Fragment从它所属的Activity中被删除时回调该方法*/
	@Override
	public void onDetach() {
		super.onDetach();
		mCallbacks = null;
	}
}
KindArrayAdapter.java
package com.xbmu.auction.adapter;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.xbmu.auction.R;
import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

public class KindArrayAdapter extends BaseAdapter {
	// 需要包装的JSONArray
	private JSONArray kindArray;
	private Context context;

	public KindArrayAdapter(JSONArray kindArray, Context context) {
		this.kindArray = kindArray;
		this.context = context;
	}

	@Override
	public int getCount() {
		// 返回ListView包含的列表项的数量
		return kindArray.length();
	}

	@Override
	public Object getItem(int position) {
		// 获取指定列表项所包装的JSONObject
		return kindArray.optJSONObject(position);
	}

	@Override
	public long getItemId(int position) {
		try {
			return ((JSONObject) getItem(position)).getInt("id");
		} catch (JSONException e) {
			e.printStackTrace();
		}
		return -1;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		//定义一个线性布局管理器
		LinearLayout container = new LinearLayout(context);
		//设置为垂直的线性布局管理器
		container.setOrientation(LinearLayout.VERTICAL);
		//定义一个线性布局管理器
		LinearLayout linear = new LinearLayout(context);
		//设置为水平的线性布局管理器
		linear.setOrientation(LinearLayout.HORIZONTAL);
		
		//创建一个ImageView
		ImageView iv = new ImageView(context);
		iv.setPadding(10, 0, 20, 0);
		iv.setImageResource(R.drawable.item);
		//将图片添加到LinearLayout中
		linear.addView(iv);
		//创建一个TextView
		TextView tv = new TextView(context);
		
		try {
			//获取JSONArray数组元素的kindName属性
			String kindName = ((JSONObject)getItem(position)).getString("kindName");
			//设置TextView所显示的内容
			tv.setText(kindName);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		tv.setTextSize(20);
		//将TextView添加到LinearLayout中
		linear.addView(tv);
		container.addView(linear);
		//定义一个文本框来显示种类描述
		TextView descView = new TextView(context);
		descView.setPadding(30, 0, 0, 0);
		
		//获取JSONArray数组元素的kindDesc属性
		try {
			String kindDesc = ((JSONObject)getItem(position)).getString("kindDesc");
			descView.setText(kindDesc);
		} catch (JSONException e) {
			e.printStackTrace();
		}
		descView.setTextSize(16);
		container.addView(descView);
		return container;
	}

}
manage_kind.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="@dimen/sub_title_margin"
        android:gravity="center"
        android:orientation="horizontal" >

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/manage_kind"
                android:textSize="@dimen/label_font_size" />
            <!-- 添加种类的按钮 -->

            <Button
                android:id="@+id/bnAdd"
                android:layout_width="85dp"
                android:layout_height="30dp"
                android:background="@drawable/add_kind" />
        </LinearLayout>

        <Button
            android:id="@+id/bn_home"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/label_font_size"
            android:background="@drawable/home" />
    </LinearLayout>
    <!-- 显示种类列表的ListView -->

    <ListView
        android:id="@+id/kindList"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

添加物品种类:
AddKind.java
package com.xbmu.auction.activity;

import android.app.Fragment;

import com.xbmu.auction.FragmentActivity;
import com.xbmu.auction.fragment.AddKindFragment;

public class AddKind extends FragmentActivity {

	@Override
	protected Fragment getFragment() {
		return new AddKindFragment();
	}
}
AddKindFragment.java
package com.xbmu.auction.fragment;

import java.util.HashMap;
import java.util.Map;
import android.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import com.xbmu.auction.R;
import com.xbmu.auction.listener.HomeListener;
import com.xbmu.auction.util.DialogUtil;
import com.xbmu.auction.util.HttpUtil;

public class AddKindFragment extends Fragment {
	private EditText kindName;
	private EditText kindDesc;
	private Button bnAdd;
	private Button bnCancel;

	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		View rootView = inflater.inflate(R.layout.add_kind, container, false);
		kindName = (EditText) rootView.findViewById(R.id.kindName);
		kindDesc = (EditText) rootView.findViewById(R.id.kindDesc);
		bnAdd = (Button) rootView.findViewById(R.id.bnAdd);
		bnCancel = (Button) rootView.findViewById(R.id.bnCancel);

		bnCancel.setOnClickListener(new HomeListener(getActivity()));
		bnAdd.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// 输入校验
				if (validate()) {
					// 获取用户输入的种类名称和描述
					String name = kindName.getText().toString().trim();
					String desc = kindDesc.getText().toString().trim();
					try {
						// 添加物品种类
						String result = addKind(name, desc);
						// 使用对话框来显示添加结果
						DialogUtil.showDialog(getActivity(), result, true);
					} catch (Exception e) {
						DialogUtil.showDialog(getActivity(), "服务器响应异常,请稍后重试!",
								false);
						e.printStackTrace();
					}
				}
			}
		});
		return rootView;
	}

	/**
	 * 添加种类
	 * @throws Exception
	 */
	protected String addKind(String name, String desc) throws Exception {
		// 使用Map封装请求参数
		Map<String, String> map = new HashMap<String, String>();
		map.put("kindName", name);
		map.put("kindDesc", desc);
		// 定义发送请求的url
		String url = HttpUtil.BASE_URL + "addKind.jsp"+"?mode=android";;
		// 发送请求
		return HttpUtil.postRequest(url, map);
	}

	/** 对用户输入的种类名称进行数据校验 */
	protected boolean validate() {
		String name = kindName.getText().toString().trim();
		if (TextUtils.isEmpty(name)) {
			DialogUtil.showDialog(getActivity(), "种类名称必须填", false);
			return false;
		}
		return true;
	}
}
add_kind.xml
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:stretchColumns="1" >

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="@dimen/title_padding"
        android:text="@string/add_kind_title"
        android:textSize="@dimen/label_font_size" />

    <TableRow>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/kind_name"
            android:textSize="@dimen/label_font_size" />

        <EditText
            android:id="@+id/kindName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text" />
    </TableRow>

    <TableRow>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/kind_desc"
            android:textSize="@dimen/label_font_size" />

        <EditText
            android:id="@+id/kindDesc"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="text" />
    </TableRow>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center" >

        <Button
            android:id="@+id/bnAdd"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/add" />

        <Button
            android:id="@+id/bnCancel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/cancel" />
    </LinearLayout>

</TableLayout>
运行效果:


查询数据库中是否有刚添加的数据:

这里严重存在一个问题,待解决:
数据库主键自增ID 删除后 出现断号 怎么让其重新顺号?


竞拍类型电商技术实践。

博文 来自: lxb_champagne
没有更多推荐了,返回首页