zoukankan      html  css  js  c++  java
  • IOS登陆+注册+抽奖+排行榜

    要求:三个页面(登录页面,pickerView页面,排行榜页面),pickerView页面是三个组件,每个组件显示0-9,点击按钮进行随机,获得的值存入排行榜,排行榜显示大于500的最高的10个分数和对应的用户名,切换页面可以用任何方法(0-9循环显示,登录注销[可以有不同的用户],判断用户名是否为邮箱[正则表达式])


    说明:
    1.要修改xml文件到当前系统桌面,dic.xml保存的是用户名和密码,array.xml是保存的积分榜
    2.正则表达式用在注册页面,在注册用户的时候用户名需要经过正则表达式的验证,判断是否是邮箱
    3.有一个默认的admin,admin账户
    4.排行榜显示是用的tableView显示的


    疑惑:
    1.如何创建文件在当前项目下
    2.为什么view之间传数组传不了,我知道数组要先初始化
    3.数组排序,用内置的排序方法,compare:,从大到小用什么参数
    4.如何让tableView中的table随array的改变而刷新


    项目源码:http://download.csdn.net/detail/s10141303/5970243

    步骤:

    注册view



    RegistViewController.h:

    #import <UIKit/UIKit.h>
    @class LoginViewController;
    @interface RegistViewController : UIViewController
    - (IBAction)click:(id)sender;
    @property (retain, nonatomic) IBOutlet UITextField *txtName;
    @property (retain, nonatomic) IBOutlet UITextField *txtpassword;
    @property (retain, nonatomic) IBOutlet UITextField *txtConfirmPassword;
    @property(retain,nonatomic) NSMutableDictionary *dic;
    @property(retain,nonatomic) LoginViewController *loginView;
    @end


    RegistViewController.m:

    #import "RegistViewController.h"
    #import "info.h"
    #import "LoginViewController.h"
    #define OK_BUTTON 0  //登陆按钮
    #define CANCEL_BUTTON 1 //取消按钮
    #define BOARD 2  //键盘点击
    #define RETURN_BUTTON 3 //返回登陆界面
    @interface RegistViewController ()
    
    @end
    
    @implementation RegistViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.dic = [[[NSMutableDictionary alloc] init] autorelease];
        [self.dic setObject:@"admin" forKey:@"admin"];
    }
    
    - (IBAction)click:(id)sender {
        UIButton *button = (UIButton*)sender;
        //登陆按钮
        if (button.tag == OK_BUTTON)
        {
            //[[info getInfo] initDic];//初始化dic,包含了admin账号
            NSString *path = @"Users/zl201/Desktop/dic.xml";
            NSMutableDictionary *dicc = [NSMutableDictionary dictionaryWithContentsOfFile:path];
            NSLog(@"文件读取成功");
            NSLog(@"%@",dicc);
            //如果为空
            if([self.txtName.text isEqualToString:@""]||[self.txtpassword.text isEqualToString:@""]||[self.txtConfirmPassword.text isEqualToString:@""])
            {
                UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"输入不能为空" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil];
                [a show];
            }
            else
            {
                //检测注册是是否是邮箱
                if ([[info getInfo] isValidateEmail:self.txtName.text]) {
                    
                [self.txtName resignFirstResponder];
                [self.txtpassword resignFirstResponder];
                [self.txtConfirmPassword resignFirstResponder];
                //看是否包含某个键
                if ([[dicc allKeys] containsObject:self.txtName.text]) {
                    UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"该用户已经存在,请重新注册新用户名!" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil];
                    [a show];
                    self.txtName.text = @"";
                    self.txtpassword.text = @"";
                    self.txtConfirmPassword.text = @"";
                }
                else
                {
                    //查看是否两次密码不一样
                    if (![self.txtConfirmPassword.text isEqualToString:self.txtpassword.text]) {
                    UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"两次输入密码不一样" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil];
                        [a show];
                        self.txtConfirmPassword.text = @"";
                    }
                    //注册成功
                    else{
                        UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"" message:@"恭喜注册成功,请点击返回登陆界面按钮!" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles:nil];
                        [a show];
                        
                        [info getInfo].name = self.txtName.text;
                        [info getInfo].password = self.txtpassword.text;
                        NSLog(@"%@,%@",[info getInfo].name,[info getInfo].password);
    
                        //写入文件
                        [self.dic setObject:self.txtpassword.text forKey:self.txtName.text];
                        NSLog(@"%@",self.dic);
                        NSString *path = @"Users/zl201/Desktop/dic.xml";
                        [self.dic writeToFile:path atomically:YES];
                        NSLog(@"文件写入成功");
                        
                        self.txtConfirmPassword.text = @"";
                        self.txtpassword.text = @"";
                        self.txtName.text = @"";
                    }
                }
                }
                else  //不是邮箱
                {
                    UIAlertView *aa = [[UIAlertView alloc] initWithTitle:@"友情提醒" message:@"用户名必须是邮箱" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil];
                    [aa show];
                }
            }
        }
        //取消按钮
        else if (button.tag == CANCEL_BUTTON)
        {
            self.txtName.text = @"";
            self.txtpassword.text = @"";
            self.txtConfirmPassword.text = @"";
            [self.txtName resignFirstResponder];
            [self.txtpassword resignFirstResponder];
            [self.txtConfirmPassword resignFirstResponder];
        }
        //面板触发退出键盘
        else if(button.tag == BOARD)
        {
            [self.txtName resignFirstResponder];
            [self.txtpassword resignFirstResponder];
            [self.txtConfirmPassword resignFirstResponder];
        }
        //返回登陆界面
        else if(button.tag == RETURN_BUTTON)
        {
            [self.loginView.view removeFromSuperview];
            
            self.loginView = [[[LoginViewController alloc]initWithNibName:@"LoginViewController"bundle:nil]autorelease];
            [self.view insertSubview:self.loginView.view atIndex:10];
        }
    }
    - (void)dealloc {
        [_txtName release];
        [_txtpassword release];
        [_txtConfirmPassword release];
        [_dic release];
        [super dealloc];
    }
    @end
    


    登陆View


    LoginViewController.h:

    #import <UIKit/UIKit.h>
    @class RegistViewController;
    @class SecondViewController;
    @interface LoginViewController : UIViewController
    @property (retain, nonatomic) IBOutlet UITextField *txtName;
    @property (retain, nonatomic) IBOutlet UITextField *txtPassword;
    @property (retain,nonatomic)RegistViewController *registView;
    @property(retain,nonatomic)SecondViewController *secondView;
    - (IBAction)click:(id)sender;
    //接受保存当前登陆的账户和密码
    @property(retain,nonatomic) NSString *name;
    @property(retain,nonatomic) NSString *password;
    @end


    LoginViewController.m:

    #import "LoginViewController.h"
    #import "info.h"
    #import "RegistViewController.h"
    #import "SecondViewController.h"
    #define OK_BUTTON 0  //登陆按钮
    #define CANCEL_BUTTON 1 //退出系统
    #define BOARD 2  //键盘点击
    #define RESIGN_BUTTON 3 //注销按钮
    #define REGISTER_BUTTON 4 //注册按钮
    @interface LoginViewController ()
    
    @end
    
    @implementation LoginViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
    }
    
    -(void)viewDidAppear:(BOOL)animated
    {
        NSLog(@"%@",[info getInfo].name);
        NSLog(@"%@",[info getInfo].password);
            if ([info getInfo].name != NULL&&[info getInfo].password != NULL) {
                self.txtName.text = [info getInfo].name;
                self.txtPassword.text = [info getInfo].password;
            }
    }
    
    - (void)dealloc {
        [_txtName release];
        [_txtPassword release];
        [_registView release];
        [_secondView release];
        [_name release];
        [_password release];
        [super dealloc];
    }
    - (IBAction)click:(id)sender {
        UIButton *button = (UIButton*)sender;
        //登陆按钮
        if (button.tag == OK_BUTTON)
        {
            [self.txtName resignFirstResponder];
            [self.txtPassword resignFirstResponder];
            //读取xml文件
            NSString *path = @"Users/zl201/Desktop/dic.xml";
            NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithContentsOfFile:path];
            NSLog(@"文件读取成功");
            NSLog(@"%@",dic);
            NSString *s =[dic objectForKey:self.txtName.text];
    
            if ([s isEqualToString:self.txtPassword.text]) {
                [info getInfo].name = self.txtName.text;
                [info getInfo].password=self.txtPassword.text;
                UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"登陆状态" message:@"恭喜登陆成功" delegate:nil cancelButtonTitle:@"确认" otherButtonTitles:nil];
                [a show];
                
            }
            else
            {
                UIAlertView * a = [[UIAlertView alloc] initWithTitle:@"登陆状态" message:@"登陆失败" delegate:nil cancelButtonTitle:@"重试" otherButtonTitles:nil];
                [a show];
                self.txtName.text = @"";
                self.txtPassword.text = @"";
            }
        }
        //系统退出
        else if (button.tag == CANCEL_BUTTON)
        {
            exit(0);
        }
        //面板触发退出键盘
        else if(button.tag == BOARD)
        {
            [self.txtName resignFirstResponder];
            [self.txtPassword resignFirstResponder];
        }
        //注销按钮
        else if(button.tag == RESIGN_BUTTON)
        {
            [info getInfo].name=@"";
            [info getInfo].password=@"";
            self.txtName.text = @"";
            self.txtPassword.text = @"";
            [self.txtName resignFirstResponder];
            [self.txtPassword resignFirstResponder];
        }
        //注册按钮
        else if(button.tag == REGISTER_BUTTON)
        {
            
            [self.registView.view removeFromSuperview];
            
            self.registView = [[[RegistViewController alloc]initWithNibName:@"RegistViewController" bundle:nil]autorelease];
            [self.view insertSubview:self.registView.view atIndex:10];
            
        }
    }
    @end
    


    抽奖view


    ViewController.h:

    #import <UIKit/UIKit.h>
    @class ShowViewController;
    @interface SecondViewController : UIViewController<UIPickerViewDataSource,UIPickerViewDelegate>
    @property (retain, nonatomic) IBOutlet UIPickerView *picker;
    - (IBAction)click:(id)sender;
    - (IBAction)OK:(id)sender;
    @property(nonatomic,retain)NSArray *images;
    @property(nonatomic,retain)NSArray *column1;
    @property(nonatomic,retain)NSArray *column2;
    @property(nonatomic,retain)NSArray *column3;
    @property(nonatomic,retain)NSArray *column4;
    @property(nonatomic,retain)NSArray *column5;
    @property(nonatomic,assign)long num;
    @property (retain, nonatomic) IBOutlet UILabel *lblShow;
    @property(nonatomic,retain)ShowViewController *showView;
    @property(nonatomic,retain)NSMutableArray *array;//记录分数
    @end
    


    ViewController.m:

    #import "SecondViewController.h"
    #import <AudioToolbox/AudioToolbox.h>
    #import "info.h"
    @interface SecondViewController ()
    
    @end
    
    @implementation SecondViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        self.array = [[NSMutableArray alloc] init];
    	UIImage *image1 = [UIImage imageNamed:@"apple.png"];
        UIImage *image2 = [UIImage imageNamed:@"bar.png"];
        UIImage *image3 = [UIImage imageNamed:@"cherry.png"];
        UIImage *image4 = [UIImage imageNamed:@"crown.png"];
        UIImage *image5 = [UIImage imageNamed:@"lemon.png"];
        UIImage *image6 = [UIImage imageNamed:@"seven.png"];
        self.images = @[image1,image2,image3,image4,image5,image6];
        
        //创建30个ImageView
        for (int i=0; i<5; i++) {
            UIImageView *imageView1 = [[UIImageView alloc] initWithImage:image1];
            UIImageView *imageView2 = [[UIImageView alloc] initWithImage:image2];
            UIImageView *imageView3 = [[UIImageView alloc] initWithImage:image3];
            UIImageView *imageView4 = [[UIImageView alloc] initWithImage:image4];
            UIImageView *imageView5 = [[UIImageView alloc] initWithImage:image5];
            UIImageView *imageView6 = [[UIImageView alloc] initWithImage:image6];
            NSArray *arr = @[imageView1,imageView2,imageView3,imageView4,imageView5,imageView6];
            NSString *str = [NSString stringWithFormat:@"column%d",i+1];
            //OC特有方法,对一个可能存在可能不存在的变量赋值,本来是一个变量,可以转化成字符串,这样就可以改变字符串了
            [self setValue:arr forKey:str]; //KVC
            [imageView1 release];
            [imageView2 release];
            [imageView3 release];
            [imageView4 release];
            [imageView5 release];
            [imageView6 release];
        }
        srandom(time(NULL));
        //默认选择在第5000行
        for (int i=0; i<5; i++) {
            [self.picker selectRow:5000 inComponent:i animated:NO];
        }
        
    }
    
    -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    {
        return 5;
    }
    
    -(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
    {
        return [self.images count]*10000;
    }
    
    -(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
    {
        //这种写法非常消耗内存
        //    UIImageView *imageView = [[UIImage alloc] initWithImage:[self.images objectAtIndex:row]];
        //    return imageView;
        NSString * str = [NSString stringWithFormat:@"column%d",component+1];
        NSArray *arr = [self valueForKey:str];
        return [arr objectAtIndex:row%6];
        
    }
    
    - (void)dealloc {
        [_picker release];
        [_images release];
        [_column1 release];
        [_column2 release];
        [_column3 release];
        [_column4 release];
        [_column5 release];
        [_showView release];
        [_lblShow release];
        [super dealloc];
    }
    //退出
    - (IBAction)click:(id)sender {
        //    NSLog(@"%@",srandom(time(nil)));
        exit(0);
    }
    //确定
    - (IBAction)OK:(id)sender {
        int a[5];
        bool f=false;
        for (int i=0; i<5; i++) {
            int row = random() % [self.column1 count];
            int n = random() % 35;
            int j = row *n;
            [self.picker selectRow:j inComponent:i animated:YES];
            a[i]=j%6;
        }
        int sum=0;
        for (int i=0; i<5; i++)
        {
            sum = 1;
            if (f==false)
            {
                for (int j=i+1; j<5; j++)
                {
                    if (a[i] == a[j])
                    {
                        sum++;
                    }
                    if (sum>=3)
                    {
                        f=true;
                        break;
                    }
                }
            }
            else
            {
                break;
            }
        }
        if (f) {
    //        UIAlertView *a = [[UIAlertView alloc] initWithTitle:@"我中了" message:@"中了500万" delegate:self cancelButtonTitle:@"取消" otherButtonTitles:nil];
    //        [a show];
            //[self playMusic:@"win"];//调用播放音乐
        }
        [self playMusic:@"crunch"];
        self.num = a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
        [info getInfo].number = self.num;
        NSLog(@"%d",self.num);
        NSLog(@"%@",[info getInfo].name);
        
        
        //self.lblScore.text = [NSString stringWithFormat:"当前得分:%d",self.num];
        self.lblShow.text = @"";
        NSLog(@"%@",[info getInfo].name);
        if ([info getInfo].name!=NULL&&self.num>=4000) {
    
            NSString *str = [NSString stringWithFormat:@"恭喜%@获得%d的高分上榜了",[info getInfo].name,self.num];
            self.lblShow.text = str;
            CGSize size = [self.lblShow.text sizeWithFont:self.lblShow.font];
            CGRect frame = CGRectMake(self.lblShow.frame.origin.x, self.lblShow.frame.origin.y, size.width, self.lblShow.frame.size.height);
            self.lblShow.frame = frame;
            NSLog(@"恭喜获得4000以上的高分");
            [self.array addObject:[NSString stringWithFormat:@"%@                %d",[info getInfo].name,self.num]];
            NSLog(@"%@",self.array);
            NSString *path = @"Users/zl201/Desktop/array.xml";
            [self.array writeToFile:path atomically:YES];
            NSLog(@"文件写入成功");
        }
        else if ([info getInfo].name!=NULL&&self.num<4000)
        {
            NSString *str = [NSString stringWithFormat:@"%@,很遗憾只有%d分,不足4000,加油",[info getInfo].name,self.num];
            self.lblShow.text = str;
            CGSize size = [self.lblShow.text sizeWithFont:self.lblShow.font];
            CGRect frame = CGRectMake(self.lblShow.frame.origin.x, self.lblShow.frame.origin.y, size.width, self.lblShow.frame.size.height);
            self.lblShow.frame = frame;
        }
    }
    
    -(void)playMusic:(NSString*)s
    {
        //通过NSBundle来获得音频文件的url地址
        NSURL *url = [[NSBundle mainBundle] URLForResource:s withExtension:@"wav"];
        SystemSoundID winSound;//整形类型的id
        //用音频服务,为音频文件绑定soundID
        AudioServicesCreateSystemSoundID((CFURLRef)url, &winSound);
        //通过绑定的soundId来播放音乐
        AudioServicesPlayAlertSound(winSound);
    }@end
    


    排行榜View


    ShowViewController.h:

    #import <UIKit/UIKit.h>
    @class SecondViewController;
    @interface ShowViewController : UIViewController<UITableViewDataSource, UITableViewDelegate>
    @property (retain, nonatomic) IBOutlet UITableView *tableView;
    @property(nonatomic,retain)NSMutableArray *array;//加上头行显示给tableView
    @property(nonatomic,retain)NSMutableArray *array1;//记录分数
    @property(nonatomic,retain)SecondViewController *secView;
    @end
    


    ShowViewController.m:

    #import "ShowViewController.h"
    #import "SecondViewController.h"
    @interface ShowViewController ()
    
    @end
    
    @implementation ShowViewController
    
    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
    {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
            // Custom initialization
        }
        return self;
    }
    
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        NSString *path = @"Users/zl201/Desktop/array.xml";
        self.array1 = [NSArray arrayWithContentsOfFile:path];
        NSLog(@"文件读入成功");
        NSLog(@"%@",self.array1);
        [self.array1 sortUsingSelector:@selector(compare:options:)];   //如何倒序
        NSLog(@"%@",self.array1);
        self.array = [NSMutableArray arrayWithObject:@"积分排行榜(>=4000):"];
        [self.array addObjectsFromArray:self.array1];
        
    }
    
    - (void)didReceiveMemoryWarning
    {
        [super didReceiveMemoryWarning];
        // Dispose of any resources that can be recreated.
    }
    
    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
    {
        return 1;
    }
    
    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
    {
        return [self.array count];
    }
    
    - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        NSString *MyIdentifier = @"MyIdentifier";
        
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
        if (cell == nil) {
            cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:MyIdentifier];
        }
        NSString  *titleStr = [self.array objectAtIndex:indexPath.row];
        
        cell.textLabel.text = titleStr;
        return cell;
    }
    
    -(void)dealloc
    {
        [_array release];
        [_tableView release];
        [super dealloc];
    }
    
    @end


  • 相关阅读:
    RegExp
    svn操作
    前端跨域请求
    UML
    excel 常用设置
    python中 cmp
    python global nonlocal
    python常见异常提示
    table边框和td的width失效
    display_css
  • 原文地址:https://www.cnblogs.com/james1207/p/3266697.html
Copyright © 2011-2022 走看看