qd

#import <Foundation/Foundation.h>

#import "sqlite3.h"

@interface UserModel : NSObject

{

    sqlite3 *link;

    NSString *path;

}

//插入数据

-(void)insertMessageWithAccount:(NSString *)account andPassword:(NSString *)password andNickName:(NSString *)nickName;

//注册时检查账号存在性

-(BOOL)jugdeExist:(NSString *)account;


//登录操作

-(NSString *)loginMethod:(NSString *)account andPassword:(NSString *)password;

@end







#import "UserModel.h"


@implementation UserModel

-(id)init{

    self=[super init];

    //定义数据库设置

    path=@"/Users/feifanchengxuyuan/Desktop/Forum.db";

    //打开数据库链接

    sqlite3_open([path UTF8String], &link);

    //创建用户表的SQL语句

    NSString *createUserTable=@"create table if not exists User(userId integer primary key autoincrement,account varchar(20),password varchar(20),nickName varchar(20))";

    //执行SQL语句

    sqlite3_exec(link, [createUserTable UTF8String],nil,nil,nil);

    

    return self;

}

//插入方法

-(void)insertMessageWithAccount:(NSString *)account andPassword:(NSString *)password andNickName:(NSString *)nickName{

    NSString *insertMessage=[NSString stringWithFormat:@"insert into User(account,password,nickName) values(\"%@\",\"%@\",\"%@\");",account,password,nickName];

    

    sqlite3_exec(link, [insertMessage UTF8String] , nil,nil,nil);

}

/*

 sqlite 操作二进制数据需要用一个辅助的数据类型:sqlite3_stmt *

 

 这个数据类型 记录了一个“sql语句。为什么我把 “sql语句用双引号引起来?因为你可以把 sqlite3_stmt * 所表示的内容看成是 sql语句,但是实际上它不是我们所熟知的sql语句。它是一个已经把sql语句解析了的、用sqlite自己标记记录的内部数据结构。

 sqlite3_stmt * stat;是把一个 sql 语句解析到 stat 结构里去:

 */



//注册时检查账号存在性

-(BOOL)jugdeExist:(NSString *)account{

    sqlite3_stmt *stam;

//    NSString *accountFromDataBase;

    NSString *judge=[NSString stringWithFormat:@"select account from User where account=\"%@\";",account];

    sqlite3_exec(link, [judge UTF8String],nil,nil,nil);


    //进行预编译

    sqlite3_prepare_v2(link, [judge UTF8String], -1, &stam, nil);

    //每条数据查找

    while (sqlite3_step(stam)==SQLITE_ROW) {

        return YES;

    }

      return NO;

 }

//登录操作

-(NSString *)loginMethod:(NSString *)account andPassword:(NSString *)password{

    sqlite3_stmt *stmt;

    NSString *userName=@"";

    NSString * selectAccount=[NSString stringWithFormat:@"select * from User where account=\"%@\";",account];

    sqlite3_prepare_v2(link, [selectAccount UTF8String], -1, &stmt, nil);

    while (sqlite3_step(stmt)==SQLITE_ROW) {

        NSString *passwordFromDataBase=[[NSString alloc]initWithCString:(char *)sqlite3_column_text(stmt, 2) encoding:NSUTF8StringEncoding];

        if ([passwordFromDataBase isEqualToString:password]) {

            userName=[[NSString alloc]initWithCString:(char *)sqlite3_column_text(stmt, 3) encoding:NSUTF8StringEncoding];

        }

    }

    

    return userName;

}






@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITableView *listTableView;

@property (weak, nonatomic) IBOutlet UILabel *messageLabel;

@property (weak, nonatomic) IBOutlet UIButton *writeButton;

@property (weak, nonatomic) IBOutlet UIButton *registerButton;

@property (weak, nonatomic) IBOutlet UIButton *loginButton;

@property (weak, nonatomic) IBOutlet UIButton *quitButton;


- (IBAction)quitMethod:(id)sender;


@end




#import "ViewController.h"


@interface ViewController ()

@property(nonatomic,strong)NSUserDefaults *userDefault;

@end


@implementation ViewController


-(void)viewDidAppear:(BOOL)animated{

     NSLog(@"-----viewDidAppear-----");

    _userDefault=[NSUserDefaults standardUserDefaults];

    NSString *userName=[_userDefault valueForKey:@"name"];

    NSLog(@"登录名:%@",userName);

    if (userName == nil) {

        _messageLabel.text=@"你好,游客。发帖请登录。";

        _loginButton.hidden=NO;

        _registerButton.hidden=NO;

        _writeButton.hidden=YES;

        _quitButton.hidden=YES;

    }else{

        _messageLabel.text=[NSString stringWithFormat:@"用户:%@,欢迎回来",userName];

        _loginButton.hidden=YES;

        _registerButton.hidden=YES;

        _writeButton.hidden=NO;

        _quitButton.hidden=NO;

        

    }

    

}


- (void)viewDidLoad {

    [super viewDidLoad];

     NSLog(@"-----viewDidLoad-----");

    

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


- (IBAction)quitMethod:(id)sender {

    NSLog(@"注销方法");

    

    [_userDefault removeObjectForKey:@"name"];

    _messageLabel.text=@"你好,游客。发帖请登录。";

    _loginButton.hidden=NO;

    _registerButton.hidden=NO;

    _writeButton.hidden=YES;

    _quitButton.hidden=YES;


}

@end






@interface RegisterViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *accountTextFeild;

@property (weak, nonatomic) IBOutlet UITextField *nickNameTextFeild;

@property (weak, nonatomic) IBOutlet UITextField *passWordTextFeild;

@property (weak, nonatomic) IBOutlet UITextField *writeAgainTextFeild;

- (IBAction)back:(id)sender;

- (IBAction)registMethod:(id)sender;



@end




#import "RegisterViewController.h"

#import "UserModel.h"

@interface RegisterViewController ()


@end


@implementation RegisterViewController



- (void)viewDidLoad {

    [super viewDidLoad];

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

   

}



- (IBAction)back:(id)sender {

    [self dismissViewControllerAnimated:YES completion:nil];

}


- (IBAction)registMethod:(id)sender {

    UserModel *user=[[UserModel alloc]init];

    NSString * userAccount=_accountTextFeild.text;

    NSString *userPassword=_passWordTextFeild.text;

    NSString *userAgain=_writeAgainTextFeild.text;

    NSString *userNickName=_nickNameTextFeild.text;

    if ([userAccount length]>=6&&[userAccount length]<=16&&[userPassword length]>=6&&[userPassword length]<=16&&[userAgain length]>=6&&[userAgain length]<=16&&[userNickName length]>=6&&[userNickName length]<=16) {

        if ([userPassword isEqualToString:userAgain]) {

                        

            if ([user jugdeExist:userAccount]) {

                NSLog(@"账号存在");

                

            }else{

                [user insertMessageWithAccount:_accountTextFeild.text andPassword:_passWordTextFeild.text andNickName:_nickNameTextFeild.text];

                

            }

           

        }

        else{

            NSLog(@"两次密码输入不一致");

        }

        

    }else {

        NSLog(@"信息填写不正确");

    }

    

    

    

    

    

}



@end




#import <UIKit/UIKit.h>


@interface LoginViewController : UIViewController

@property (weak, nonatomic) IBOutlet UITextField *accountTextFeild;

@property (weak, nonatomic) IBOutlet UITextField *passwordTextFeild;

@property (weak, nonatomic) IBOutlet UILabel *message;


- (IBAction)loginMethod:(UIButton *)sender;

- (IBAction)back:(id)sender;



@end




#import "LoginViewController.h"

#import "UserModel.h"

@interface LoginViewController ()


@end


@implementation LoginViewController


- (void)viewDidLoad {

    [super viewDidLoad];

   

}


- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

   

}


- (IBAction)back:(id)sender {

    [self dismissViewControllerAnimated:NO completion:nil];

}


- (IBAction)loginMethod:(UIButton *)sender {

    UserModel *userModel=[[UserModel alloc]init];

    NSUserDefaults *userDefault=[NSUserDefaults standardUserDefaults];

    NSString *name=[userModel loginMethod:_accountTextFeild.text andPassword:_passwordTextFeild.text];

    if (![name isEqualToString:@""]) {

        

        [userDefault setValue:name forKey:@"name"];

        [userDefault synchronize];

         [self performSegueWithIdentifier:@"longinSuccess" sender:nil];

    }else{

       _message.text=@"登录失败,请重试";

       

    }

    NSLog(@"%@",[userDefault valueForKey:@"name"]);

    


//        [self dismissViewControllerAnimated:NO completion:nil];

   

}

@end


你可能感兴趣的:(qd)