吉林大学大三学生 东北师范大学附属中学OJ jinxi20111 2019.08.28

首先第一点,如果你是来学习和提问的,直走请进,如果你还没有仔细阅读完并感受到难度,我的建议是多阅读两遍,或者先动手写一点,有助于理解。

但如果是想来抄现成的代码,手机左上↖,电脑右上↗不送,因为这里么得代码,只有少数伪代码用来改进你的程序


课设目的:面向对象,C++编程思想,类层次,继承,多态,结构清晰&风格良好

咱一个一个解决

面向对象,和面向过程相对应。一个比较经典的例子是两个人围棋对弈,一个面向过程的程序,主要分析两个人下棋时下在哪里,借此来进行分析。而面向对象则是对下棋的双方,下棋的环境进行分析。而我们在使用面向对象思想的时候,不可避免的要使用类这个概念。但是在面向过程的程序当中,我们更喜欢使用结构体多一些。

C++编程思想,因为学弟学妹接触的语言不多,就算是接触过JAVA和html5的,也会发现他们的历史当中都有C语言的身影,所以我们现在所谓的编程思想,都是建立在使用C语言的基础上的。现在我们接触的C++并没有跳出这个坑,所以这里不必在意。

类的层次,即我们不能将所有的类都单独用一个Class列出来。我想举一个例子,我们在看小说/剧/番的时候(尤其是美剧日漫),我们并不会清晰的记得每个人的名字,但是却能很清楚的记得大多数人之间的关系。这就是类的层次。如:这个人是李现在剧里面的女友。我们可能不会记得她叫什么,但只要有这层关系在,你只需要记住李现,就能轻易地拽出和他有关系的人。所谓层次,其实就是上下级的关系,也是关系的一种。不必畏难怕麻烦,回头去找之前是怎么写的,还有回头DEBUG,比你多写一句话困难多了。

继承,这里的继承,就是(你想笑死我好继承我的蚂蚁花呗 )的继承。但我觉得继承不准确,应该叫遗传。即子类拥有父类的特征,但是子类并不是和父类完全一致。

多态,一个类函数,有多种不同用法,有不同的参数和不同的返回值。你家扫帚就是多态的,扫地的时候参数是你和地板,返回值是地的状态由dirty变成了clean,但是用来打你的时候参数就是你和你妈了,返回值是你的状态A从naughty变成了docile(温顺的),状态B由fearless变成了闹太套 (笑)

结构清晰&风格良好
结构清晰:类按顺序和关系写
风格良好:程序前后有逻辑,程序本身有缩进,变量名规范。

变量名的问题我在另一篇博客里说过,我稍微写一下。
循环变量 i,j,k,l
数组名称:a,b,具有实际意义的缩写
字符:c
临时变量:t 或者在t的后面加上类型变量名,如tc1,代表第一个临时字符变量
布尔值 flag
字符串 s
数字中间值 num ans h h代表总和,

——
经历了上面这些之后,我建议你去接一杯水,休息一下。

我也去泡杯茶。我女票在茶博会上给我买的~茶博会就在长春农博园旁边,有兴趣可以(翘课)去看看。(课是真特么多

休息好了就继续吧

设计题目还是很有意思的,很贴近生活:模拟即时通信系统

看完题目描述,唔,高端

再看用户基本信息,好嘛,傻了

共享ID???独立ID???绑定???咋实现啊?

这里我先跟大家聊聊这个共享ID的事情。

共享ID我是头一批感受到的人。那个时候还是人人网先开通的这个功能吧,就是可以用QQ号登录人人网。那个时候感觉特别神奇,QQ是把人人网收购了么?后来有越来越多的网站都开通了QQ账号直接登录的功能之后,我才意识到这其实只是一个所谓的绿色通道,它在后台其实还是给你注册了一个账号。只不过这个账号的登录权限放在了QQ验证中了。

所以共享ID怎么写呢? 我的建议是写一个人类。不是人类,是“”类。这个人呢,可以有QQ+微信,微信+微博,或只有QQ,不关键。关键在于,只要不相互关联,你不把QQ,微博,微信关联起来,你就是三个独立的用户,腾讯认为这是三个不同的人。

现在定义一个人的类,它会具有:QQ的ID,微信的ID,三个产品是否开通的flag值。QQ昵称,QQ出生日期,Q龄,微信昵称,微信出生日期,微龄。

为啥QQ和微信的出生日期要分开写,因为如果你只有QQ的话,就应该把出生日期存在QQ的类里面,而不该去动微信里面的。那为什么不写一个公用的?因为怕老师查……查那种注册QQ和微信然后绑定,结果出生日期不一致那种恶心的需要判断情况……当然你觉得还ok的话可以自己尝试写一写,其实不难,就是多了跳出条件这件事我有•难受就不写了。

QQ和微信相互独立,所以我的类会改成:QQID,微信ID,flag,继承类QQ,继承类微信。
这样,层次!层次就出来了!微信下的用户,QQ下的用户,一下就体现出来了。

ID为啥还写在外面?我喜欢用结构体存信息,用ID可以直接找到我想要的。就这么简单。
student[ID].flagQQ,我一下就知道了ID对应用户是否开通了QQ,方便吧!

用户基本信息就这些,好友管理有丶意思。好友的解决方式有很多,我就简单说一下我的做法。因为课设本身数据量很小,我使用的方式是建立矩阵,用(1,3)=True的方式代表1的好友中有3。反向的(3,1)=True代表的是1是3的好友。这种方式相比较于直接记录数对,查找简单,使用方便,最大的问题是统计关系数量的时候需要遍历时间代价很大,存储的空间代价也很大。但就是一个大二的课设而已,有100个数据就不错了,所以矩阵是最好的几种方法之一。建立矩阵的方式是用二维布尔数组,初始化为False,数字对应ID,就完成了。

添加删除就是改bool值,没啥难的

单向好友就检查(i,j),(j,i)是否一致就完事了

共同好友的话,可以把二维bool数组变成二维的结构体数组
或者直接用两个数组判断就ok了。当然,这里建议新开一个程序写个函数单独测试。毕竟难度还是有的。

好友管理完事了,群管理咋整?

建一个类?NONONO,我推荐二维数组。为什么还是二维数组?怎么存?

第i行第j列,代表ID为j的人在群ID为i的群中。

这里是群ID,不是群名称。这个ID如果你想有前缀什么的,比如551709XX之类的,就把XX那里作为数组行数,如55170913(我),如果我在1001群里,那么就把13,1这一点改成true就ok了

那挨T的操作怎么办呢?我的建议是用返回值为T人者和被T者的二元组(结构体)的函数来解决。难度不大,挨T就是删除嘛。

查询,就是遍历一遍,谁在群里一目了然。

加入退出就是添加删除。想存储时间,就单独存一个事务表。这个事务表为什么存在?我们想要把每个人的加入删除存给每一个人自己的话,势必会有空间受限的问题。C++并不能动态分配内存,所以固定长度和无限的事务一定会发生冲突。解决方法1,用一个总体的事务表来表示。存储如(1001群3号退出,2019年8月28日12点)这样完整的一条消息,所有人的消息都按时间顺序存在一个表里面。这样的话查询操作就会变得特别简单。解决方法2,不管。

对,不管。

你自己定的数据,自己不超标就完事了呗。一个人给他留10个存事件的数组,就完事了。最好的办法是用循环队列的方式来存,有兴趣的,我下几篇博客可能会写,可以关注下。

申请加入?事务表

推荐加入?事务表

临时讨论组?约等于新群,

群主?每个人的类下面记录一下有特权的群,特权是什么等级就ok了。

特权等级?用一维数组存,a[i]=x,代表在ID为I的群里,你的特权为x。x=1平民,x=2管理员,x=3创建者就完事了。

群类型转变就是一个int标识的问题。注意在修改的过程中,如果是微信变QQ还好,但QQ变微信就得去掉所有管理员。

那么展示功能的时候有什么技巧?

注意用循环的嵌套来进行菜单的跳出。switch—case语句也比较合理。跳出用break也好,用flag+while循环也好,用着舒服就行。个人推荐flag+while循环,逻辑清楚不易出错。

关于事务表的写法,我个人喜欢用结构体去存,事务类型,事务相关人物A,相关人物B,事务时间。这个也有人直接用一个01数列去存,然后换算成对应的int,也算是一个比较装逼 的办法

剩下是一些悄悄话

多个功能的展示,要事先想好顺序和测试数据,尽量别让老师插手。展示的过程也要想好,是展示你的矩阵,你的结果都没问题,千万不要就显示一个“修改成功”,这个超傻。直接输出修改后的结果可以大量的避免麻烦,减少debug时间和BUG数量。

写程序,别傻乎乎的在一个程序里测试。分开板块,分别测试,通过了再放到一起!!!

多个人写程序,最忌讳的就是你负责输入,我负责处理,他负责输出。因为这些都有严格的先后顺序,非常耽误时间。你周一有事,于是周二写完给我了,但我周二有事,周三给他,他又没时间,拖到周五。效率低下,容易引起矛盾。

比较好的办法是,在一起实验课的时候,先决定好main函数中的变量,避免在自己的函数中发生冲突。剩下的分成所谓好友功能,群功能,展示功能这样平行的分块,各司其职,容易管理,效率卓越。

C++是后面学习不可或缺的一部分,多联系代码肯定有益无害。有不会的题和概念请私信,评论几乎不看。thx,See U.

吉林大学大三学生 东北师范大学附属中学OJ jinxi20111 2019.08.28

2019吉大软件C++课设——模拟即时通信系统相关推荐

  1. imut 51单片机课设 模拟室内温度检测器 *秋昊

    写在前面的话: 本文主要讲述了一下IMUT的单片机课设报告. 下面的百度云链接中包括了:ICL7109手册,ICL7109自检_标度转换(excel),课设报告(word版),演示视频,程序源码. 链 ...

  2. 20吉林大学计算机软件人工考研上岸分享--挂科重修过的我如何一年逆袭上岸吉大软件

    本人双非一战吉大上岸,大学时逃过课,包过宿,挂过科,重修过,前三年啥都干了,唯独没有好好学习过.最后一年冲刺了一把,努力一把,也给大学画上了一个圆满的句号.在此和大家分享下学习历程以及经验,供学弟学妹 ...

  3. 计网课设 模拟实验拓扑

    一:前言 幸福的是考完两科了,抽出时间赶紧赶赶课设,两周遇到了好多事,开心的,烦心的,一堆堆的压过来,但庆幸自己迷失不太久,又能继续学习了 二:实验概览 1:实验拓扑图 2:实验要求 要求:route ...

  4. 双非跨考985吉大软件专硕初试第一名428分,专业课147分经验贴

    2021年又是计算机考研爆炸的一年,科软复试线388,初试分数400+的几百人,再加上各种营销号的宣传,肯定不少跨考的同学(甚至包括一部分科班)都非常慌,但其实地处东北地区的吉林大学并没有爆炸,甚至接 ...

  5. 大数据毕设/课设 - 水质情况实时监测预警可视化设计与实现

    文章目录 0 前言 1 介绍 2 实现效果 3 部分关键代码 4 项目源码获取方式 0 前言 Hi,大家好,今天给大家介绍一个大数据可视化项目,大家可以用于自己的课设或毕设,可以灵活耦合任意数据,为自 ...

  6. 大数据毕设/课设 - 数据大屏监控可视化设计与实现

    文章目录 0 前言 1 介绍 2 实现效果 3 部分关键代码 4 项目源码获取方式 0 前言 Hi,大家好,今天给大家介绍一个大数据可视化项目,大家可以用于自己的课设或毕设,可以灵活耦合任意数据,为自 ...

  7. 51单片机课设——模拟电梯控制系统

    基于51单片机的模拟电梯控制系统 利用51单片机模拟5层电梯控制系统,还原真实生活场景.当某层被按下呼梯按键(电梯厢外)时,电梯将运行到该楼层,同时步进电机模拟电梯运转,液晶显示屏实时显示楼层数及电梯 ...

  8. 2022unity超简单课设-模拟太阳系的Unity小游戏

    模拟太阳系的Unity小游戏(附下载链接) 下载链接 unity课程实践做的一个模拟太阳系的Unity小游戏,你可以使用飞船移动来查看太阳系中的各个星球. 飞船拥有两种驾驶模式,一种更加真实,是通过给 ...

  9. 大三计算机课设体会,2019-大三学生计算机实训总结与体会-范文模板 (2页)

    2019-大三学生计算机实训总结与体会-范文模板 本文部分内容来自网络,本司不为其真实性负责,如有异议或侵权请及时联系,本司将予以删除! == 本文为word格式,下载后可随意编辑修改! == 大三学 ...

最新文章

  1. SQL语句恢复数据库时一直显示“正在还原”
  2. 区块链核心技术:委任权益证明算法DPoS
  3. cef谷歌内核浏览器获取cookie值并保存
  4. 程序崩溃 分析工具_程序分析工具| 软件工程
  5. 事态升级是什么意思_俗语“头不顶桑脚不踩槐;生不睡柳死不睡杨”啥意思 有道理吗...
  6. 扒一扒微信后台架构.....
  7. 毕设题目:Matlab无人机飞行作业
  8. 企业微信需不需要养号
  9. ATEN CS22DP 2端口USB DisplayPort带线式KVM多电脑切换器 (外接式切换按键)
  10. win7 x64环境python2.7下装配sulley的注意点-对于Windows Installation原文的几点补充说明
  11. 第2章第27节:英文排版技巧:大间距与大行距的应用 [PowerPoint精美幻灯片实战教程]
  12. 应变片信号采集--串口程序--借助python和tkinter
  13. MPLS TE CSPF
  14. (子)罗尔定理的证明
  15. C语言的历史和常见的标准
  16. Ubuntu上安装NVIDIA VideoProcessingFramework (VPF)
  17. 联想Y510p笔记本台达电版电源型号和参数
  18. 夜雨数竞笔记-不定积分-思维导图
  19. 软件测试(一篇就够了!)
  20. 深陷“中年危机”?谷歌的忧思与焦虑

热门文章

  1. 华为日历怎么显示一月_华为P20使用感受
  2. IP协议/地址(IPv4IPv6)概要
  3. FFmpeg编译出来的库太大?试试这几招
  4. Sasha and a Bit of Relax K倍区间 (前缀和异或 前缀和计数 思维)
  5. 微信公众号关注页、微信关注链接 微信7.0 IOS 安卓
  6. linux改mac地址目录,Linux下如何修改网卡MAC地址
  7. appstore上架助手
  8. 假如从餐饮店的角度来看架构…
  9. 冰蝎加密 WebShell 过杀软
  10. clicktorun 离线_Project 2016 和 Visio 2016 的 Office Click-to-Run 永久(C2R P)版本