我的C#第三次实验:粉丝订阅系统

我的C#第三次实验:粉丝订阅系统

一、前言

本篇开发环境?
1、操作系统: Windows 10 X64
2、SDK:Visual Studio 2019

二、项目需求

在这里插入图片描述

三、制作项目

1、创建Fan与Star的类

Fan这个对象它有姓名Name属性,判断回复类型的Flag属性,对大V的订阅属性以及自己收到大V消息时的负面情绪Nagetive,同时也具有对大V消息进行回复的方法Answer

class Fan
    {
        public string Name;
        public int  []Flag=new int [6];
        public int []Subscribe = new int[6];
        public int []Negative = new int[6];  
        public  string Answer(int Flag)
        {
           
            string a=null;
           
            switch (Flag)
            {
                case 1: a=":消息收到,非常愉悦"; break;
                case 2: a = ":收到,我很不高兴"; break;
                case 3: a =":收到,打酱油"; break;
            }
            return a;
        }


    }

Star类类似于Fan,只是在它之上多了自己的粉丝数Num和人气值Popular,用继承即可

 class Star : Fan
    {
        public int Popular;
        public int Num;
    }

2、创建自定义的窗体

通过上次图形化界面的设计,完成图示界面的创建
在这里插入图片描述
说明:
开始:创造一批粉丝们
创建账号: 创造一个大V的账号
切换账号: 查看另一个大V的情况,并对其进行操作
已关注:旁边的数字表示该大V关注其他大V的数量,点击该按钮表示查看关注其他大V的具体名字
粉丝数:旁边的数字表示该大V的粉丝数量,点击该按钮表示显示该这些粉丝的具体名字
发布消息:大V给自己的粉丝发布随机消息
查看消息列表:可查看粉丝们对于大V发布的消息进行的回复

3、创建Fan和Star的实例

a、创建Fan的实例

为“开始”增加单击的事件,并调用Form2中的方法

public void Start()
        {
            int i;
            for (i = 0; i <= 19; i++)
            {
                Fan a = new Fan();
                a.Name = GenerateSurname();
                fans[i] = a;
             
                Thread.Sleep(10);
            }
        }//创建一个粉丝群体

他们的名字采用随机英文名,调用下面方法

private static string GenerateSurname()
        {
            string name = string.Empty;
            string[] currentConsonant;
            string[] vowels = "a,a,a,a,a,e,e,e,e,e,e,e,e,e,e,e,i,i,i,o,o,o,u,y,ee,ee,ea,ea,ey,eau,eigh,oa,oo,ou,ough,ay".Split(',');
            string[] commonConsonants = "s,s,s,s,t,t,t,t,t,n,n,r,l,d,sm,sl,sh,sh,th,th,th".Split(',');
            string[] averageConsonants = "sh,sh,st,st,b,c,f,g,h,k,l,m,p,p,ph,wh".Split(',');
            string[] middleConsonants = "x,ss,ss,ch,ch,ck,ck,dd,kn,rt,gh,mm,nd,nd,nn,pp,ps,tt,ff,rr,rk,mp,ll".Split(',');
            string[] rareConsonants = "j,j,j,v,v,w,w,w,z,qu,qu".Split(',');
            Random rng = new Random(Guid.NewGuid().GetHashCode()); 
            int[] lengthArray = new int[] { 2, 2, 2, 2, 2, 2, 3, 3, 3, 4 }; 
            int length = lengthArray[rng.Next(lengthArray.Length)];
            for (int i = 0; i < length; i++)
            {
                int letterType = rng.Next(1000);
                if (letterType < 775) currentConsonant = commonConsonants;
                else if (letterType < 875 && i > 0) currentConsonant = middleConsonants;
                else if (letterType < 985) currentConsonant = averageConsonants;
                else currentConsonant = rareConsonants;

                name += currentConsonant[rng.Next(currentConsonant.Length)];
                name += vowels[rng.Next(vowels.Length)];
                if (name.Length > 4 && rng.Next(1000) < 800) break; 
                if (name.Length > 6 && rng.Next(1000) < 950) break;
                if (name.Length > 7) break;
            }
            int endingType = rng.Next(1000);
            if (name.Length > 6)
                endingType -= (name.Length * 25);
            else
                endingType += (name.Length * 10); 
            if (endingType < 400) { } 
            else if (endingType < 775) name += commonConsonants[rng.Next(commonConsonants.Length)];
            else if (endingType < 825) name += averageConsonants[rng.Next(averageConsonants.Length)];
            else if (endingType < 840) name += "ski";
            else if (endingType < 860) name += "son";
            else if (Regex.IsMatch(name, "(.+)(ay|e|ee|ea|oo)$") || name.Length < 5)
            {
                name = "Mc" + name.Substring(0, 1).ToUpper() + name.Substring(1);
                return name;
            }
            else name += "ez";
            name = name.Substring(0, 1).ToUpper() + name.Substring(1);
            return name;
        }
b、创建Star的实例

在Form1中,创建一个静态变量Order,用来判断这是第几个大V。

 public static int Order=0;

同理,为“创建账号”添加它的事件,调用Form中的方法
(注意:这里需判断这个账号是否已创建大V,若创建,则不再重新创建)
每次创建大V,所有粉丝都对其随机关注

public void Init(int Order)
        {
            if (stars[Order] != null && fans[Order] != null) MessageBox.Show("账号不可重复创建!", "通知", MessageBoxButtons.OK);
            if (stars[Order] == null&&fans[Order]!=null)
            {
                int i;
                Star x = new Star();
                x.Num = 0;
                x.Name =  GenerateSurname();
                stars[Order] = x;
                Random rd = new Random();
               
                for (i = 0; i <= 19; i++)
                {

                    fans[i].Negative[Order] = 0;
                    fans[i].Subscribe[Order] = rd.Next(0, 2);
                }
                for(i=0;i<=5;i++)
                {
                    if(i!=Order)
                    if (stars[i] != null)
                    {
                        stars[i].Negative[Order] = 0;
                        stars[i].Subscribe[Order] = rd.Next(0, 2);
                    }
                }
                 for (i = 0; i <= 5; i++)
                {
                    if (i != Order)
                        if (stars[i] != null)
                        {
                            stars[Order].Negative[i] = 0;
                            stars[Order].Subscribe[i] = rd.Next(0, 2);
                        }
                }
                MessageBox.Show("欢迎你的加入,账号已创建!", "通知", MessageBoxButtons.OK);
            }
        
          
             if (fans[Order] == null) MessageBox.Show("无粉丝不可创建!", "通知", MessageBoxButtons.OK);
        }

4、大V发布消息以及收到粉丝的回复(难点)

双击“发布消息”为其添加一个事件,在发布消息之前,也要判断该账号是否已创建大V,若没创建,是不能发布消息的。

a、首先由该账号的大V发布消息

创建一个随机数的实例,并调用它的方法Next(a,b):在大于等于a以及小于b中随机一个整数,对其随机的数做出发布什么消息的判断

 Random rd = new Random();
                int i;
                stars[Order].Popular = 0;//每次都将发布消息的人气设置为0,是大V增加粉丝的依据
                int suiji = rd.Next(1, 4);
                switch (suiji)
                {
                    case 1:
                        textBox1.Text += Environment.NewLine + "V:" + stars[Order].Name + ":" + "才考99分,我要被骂了"; break;
                    case 2:
                        textBox1.Text += Environment.NewLine + "V:" + stars[Order].Name + ":" + "一顿饭花了9999元,好划算"; break;
                    case 3: 
                        textBox1.Text += Environment.NewLine + "V:" + stars[Order].Name + ":" + "我C#实验做完了,真开心!"; break;
                }
b、其次粉丝对大V发的微博做出反应

首先,只有关注了该大V的博主的粉丝才能收到大V的消息,才能对其进行回复。并根据其消息的内容,进行随机回复。
若粉丝感到不适,则回复消极内容,并将自己对该大V的不满度上升;相反,若粉丝感到开心,则回复积极内容,大V的人气值将上升。

fans[i].Flag[Order] = rd.Next(1, 4);

                    if (fans[i].Subscribe[Order] == 1)
                    {
                        textBox1.Text += Environment.NewLine + fans[i].Name + fans[i].Answer(fans[i].Flag[Order]);
                        if (fans[i].Flag[Order] == 2)
                            fans[i].Negative[Order]++;
                        if (fans[i].Flag[Order] == 1)
                            stars[Order].Popular++;

                    }

大V级别的粉丝反应也相同:

 for (i = 0; i <= 5; i++)
                {

                    if (stars[i] != null && i != Order)
                    {

                        stars[i].Flag[Order] = rd.Next(1, 4);
                        stars[i].Subscribe[Order] = rd.Next(0,2);
                        if (stars[i].Subscribe[Order] == 1)
                        {
                            textBox1.Text += Environment.NewLine + "V:" + stars[i].Name + stars[i].Answer(stars[i].Flag[Order]);
                            if (stars[i].Flag[Order] == 2)
                                stars[i].Negative[Order]++;
                            if (stars[i].Flag[Order] == 1)
                                stars[Order].Popular++;

                        }
                        if (stars[i].Negative[Order] >= 3)
                        {
                            stars[i].Subscribe[Order] = 0;
                            stars[i].Negative[Order] = 0;

                        }
                    }


                }
c、粉丝数量的演化过程

在每个粉丝进行回复的过程中,若有粉丝的不满意度达到一定程度,则取消对改大V的关注。

                   if (fans[i].Negative[Order] >= 3)
                    {
                        fans[i].Subscribe[Order] = 0;
                        fans[i].Negative[Order] = 0;
                        
                    }

在所有粉丝都回复完毕之后,若大V的人气值到达一定程度,则他的粉丝们会为其宣传,带动身边的人也关注该大V。(若该粉丝已经是该大V的粉丝,则不予操作)

int k=0;
                if (stars[Order].Popular >= 3)
                    while (k <= 2)
                    {
                        i = rd.Next(0, 20);
                        if (fans[i].Subscribe[Order] == 0)
                        {
                            fans[i].Subscribe[Order] = 1;
                            k++;
                            stars[Order].Popular= 0;
                            break;

                        }

                        i = rd.Next(0,6);
                        if (stars[i] != null && stars[i].Subscribe[Order] == 0)
                        {
                            stars[i].Subscribe[Order] = 1;
                            k++;
                            stars[Order].Popular = 0;
                            break;

                        }

                    }

5、反馈该大V的所有信息

每轮结束后,统计该大V的粉丝数(包括普通粉丝以及大V粉丝)

stars[Order].Num = 0;
                for (i = 0; i <= 19; i++)
                {
                    if (fans[i].Subscribe[Order] == 1)
                        stars[Order].Num++;
                }
                for(i=0;i<=5;i++)
                {
                    if (i != Order)
                        if (stars[i] != null && stars[i].Subscribe[Order] == 1)
                            stars[Order].Num++;
                }

在Form1中调用方法,将该大V的微博名称、已关注大V数、粉丝数展示在Form1中的文本框上

textBox2.Text =   myform2.FansNum(Order).ToString();
textBox3.Text = myform2.VName(Order);
textBox1.Text = myform2.SubscribeNum(Order).ToString();

相关的方法:

 public int FansNum(int Order)
        {
            if (stars[Order] != null)
                return stars[Order].Num;
            else return 0;
        }
 public int SubscribeNum(int Order)//大V的关注数
        {
           int  sum = 0;
            int i;

            if (stars[Order] != null)
            {
                for(i=0;i<=5;i++)
                {
                   if (Order!=i&&stars[Order].Subscribe[i] == 1)
                        sum++;
                }
                return sum;
            }
            else return 0;
        }

  public string VName(int Order)//显示大V姓名
        {
            if (stars[Order] != null)
                return stars[Order].Name;
            else return "无";
        }

6、显示该大V关注的其他大V的姓名以及自己粉丝的姓名

a、显示该大V关注的其他大V的姓名

在Form1中,双击“已关注”,为其创造事件,调用方法,将其名字显示在Form3中

       int i;
            Form3 myform3 = new Form3();
            
            for(i=0;i<=5;i++)
            {
                if (myform2.SubscribeName(Order, i) != null)
               myform3.shuchu(myform2.SubscribeName(Order, i));
            }

            myform3.ShowDialog();

相关方法:

public string SubscribeName(int Order,int i)//订阅的大V们
        {
            if (stars[Order].Subscribe[i] == 1)
                return "V:"+stars[i].Name;
            else return null;
        }
b、显示自己粉丝的名字

同理,也创建“粉丝数”的事件,调用方法,将其名字显示在Form3中

 Form3 myform3 = new Form3();
            int i;
           for (i = 0; i <= 5; i++)
            {
                if (myform2.VFansName(Order, i) != null)
                    myform3.shuchu(myform2.VFansName(Order, i));
            }

            for (i = 0; i <= 19; i++)
            {
                if (myform2.FansName(Order, i) != null)
                    myform3.shuchu(myform2.FansName(Order, i));
            }

            
            myform3.ShowDialog();

相关方法:

public string FansName(int Order, int i)//每个粉丝的名字
        {
            if (fans[i].Subscribe[Order] == 1)
                return fans[i].Name;
            else return null;
        }
        public string VFansName(int Order, int i)
        {

            if (stars[i]!=null&&stars[i].Subscribe[Order] == 1)
                return "V:"+stars[i].Name;
            else return null;
        }

7、显示多个微博账号

为”切换账号“添加事件,将改变Order的值,即改变账号的登陆情况。
如果所有的账号都已浏览完,再点击,则切换到第一个账号的微博。

 if (Order < 5)
            {
                Order++;
                MessageBox.Show("已更换到下一个博主!", "通知", MessageBoxButtons.OK);
            }

            else { 
                Order = 0;
                MessageBox.Show("已回到第一个博主!", "通知", MessageBoxButtons.OK);
            }

四、项目测试

点击”开始“,然后”创建账号“,发布消息就能获得当前微博账号的所有信息在这里插入图片描述

点击”已关注“获得关注的大V的列表
在这里插入图片描述
点击”粉丝数“查看自己的粉丝的姓名在这里插入图片描述
点击”消息列表“,了解粉丝对于自己消息的回复情况
在这里插入图片描述

五、项目总结

本次实验结合用户图形化界面设计的知识,结合当代生活需要,我们使用C#语言设计了一款粉丝订阅程序,让我们初步了解到,其实我们自己动手就能编辑一些身边的小程序,激发了我们的兴趣,我们将在学习C#的道路上会更加饱含热情的勇往直前!

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值