我的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#的道路上会更加饱含热情的勇往直前!