课程设计能很好的检验个人程序基础知识掌握程度。某种程度上来说,这一个课程设计也算入门级的小项目了,今天简单总结一下自己在面对课设时的思路。

一.设计要求

本次课程设计的主题是通讯录管理系统。其目的是通过面向对象的方法进行整体功能设计。本次课设要求设置两个储存空间,分别命名为手机与手机卡。手机与手机卡内部联系人所含的信息也不同,便以区分,要求各位置储存人数小于等于1000人。本次课设高度重视基础知识的使用,同时需要联系各知识点。其具体要求有:

  1. .创建文本文件,记录联系人的信息(因为有两个储存空间,因此需分别创建两个文件)
  2. .以菜单方式工作(提供菜单以便用户选择并使用功能,字符页面即可)
  3. .存储在手机上的联系人的信息包括:姓名和电话号码;存储在手机卡上的联系人的信息包括姓名,籍贯,电话号码,QQ号等信息。
  4. 管理系统的功能有:
    1. 新建联系人:添加新的联系人
    2. 删除:删除一个联系人(两个位置都要删)
    3. 修改:修改某个联系人的信息
    4. 查询:根据名字查询联系人信息
    5. 浏览:显示所有联系人的信息
    6. 将联系人的信息从手机转存到手机卡上
    7. 将联系人的信息从手机卡上准存到手机上
  5. 包含继承,重载,多态等面向对象的特点

完成上述功能后,要保证程序的正常使用。

二.各部分分解解析

一.手机联系人

手机联系人负责储存联系人的信息,因为分为手机联系人和手机卡联系人,所以需要建两个类,而对两个类包含的成员及功能分析,发现二者功能相同,成员相似,只是手机卡数据成员更多。因此可以以手机联系人为基类,手机卡联系人为派生类进行设计,可简便操作。

类声明:

//手机联系人
class phone_contacts {
protected:string name;string pho_num;
public:friend class phone_address;virtual void set();//为数据成员赋值virtual void modify();//修改数据成员friend istream& operator>>(istream& in, phone_contacts& a);//重载输入输出friend ostream& operator<<(ostream& out, phone_contacts& a);};//手机卡联系人
class card_contacts :public phone_contacts {
protected:string hometown;string qq_num;
public:void set();//为数据成员赋值void modify();//修改数据成员friend istream& operator>>(istream& in, card_contacts& a);friend ostream& operator<<(ostream& out, card_contacts& a);friend class card_address;
};
istream& operator>>(istream& in, phone_contacts& a);
ostream& operator<<(ostream& out, phone_contacts& a);
istream& operator>>(istream& in, card_contacts& a);
ostream& operator<<(ostream& out, card_contacts& a);

二.通讯簿

手机联系人作为单个个体,要储存很多联系人,那么就需要通讯簿。通讯簿根据其实完全可以用一个类解决,但为了使用多态,选择了抽象类衍生两个派生类的方法(便于统计两个通讯簿不同的静态成员人数),通讯录的功能就是我们要对手机联系人实现的操作(也就是题目的要求)

类声明:

//抽象类
class address {
public:static int sum_peo;virtual void add() = 0;virtual void del(string) = 0;virtual void display() = 0;virtual void rev(string) = 0;virtual int find(string) = 0;static void putout() {}friend class user;
};//手机通讯录
class phone_address :public address {
protected:static int sum_peo;phone_contacts num1[1001];fstream newfile;
public:phone_address();~phone_address();void add();void del(string);void display();void rev(string);int find(string);friend class user;
};//手机卡通讯录
class card_address :public address {
protected:static int sum_peo;card_contacts  num2[1001];fstream newfile;
public:card_address();~card_address();void add();void del(string);void display();void rev(string);int find(string);friend class user;
};

三.用户类

直接由用户操作的类,实际就是连接主函数的if语句(或者switch语句)和两个通讯簿的衔接。根据不同的情况与选择进行不同的通讯簿类函数调用。

类声明:

//用户类
class user {
protected:address* p;//多态的使用phone_address a;card_address b;
public:void add();//增加联系人void del();//删除联系人void display();//显示所有联系人void rev();//修改void find();//寻找联系人void move1();//卡向手机移动void move2();//手机向卡移动void copy1();//卡向手机复制void copy2();//手机向卡复制bool check1(string);//查手机bool check2(string);//查手机卡
};

四.菜单类

菜单类就是一个简单的输出函数,输出一个页面让用户进行功能选择。

类声明:

//菜单类
class menu {
public:void Display();//显示菜单void visit();//询问功能
};//手机联系人
class phone_contacts {
protected:string name;string pho_num;
public:friend class phone_address;virtual void set();//为数据成员赋值virtual void modify();//修改数据成员friend istream& operator>>(istream& in, phone_contacts& a);//重载输入输出friend ostream& operator<<(ostream& out, phone_contacts& a);};

三.代码

源代码:

tips:为保证界面多次使用而不乱,利用了清屏操作:

system("pause");

system("cls");

#include <iostream>
#include <fstream>
using namespace std;class menu {
public:void Display() {cout << "             *** 通讯录管理系统 ***              " << endl;cout << "-------------------------------------------------" << endl;cout << "                  1.增加联系人                  " << endl;cout << "                  2.删除联系人                  " << endl;cout << "                  3.修改联系人                  " << endl;cout << "                  4.查询联系人                  " << endl;cout << "                  5.浏览通讯录                  " << endl;cout << "                  6.转存联系人                  " << endl;cout << "                  7.复制联系人                  " << endl;cout << "                  0.退出系统                  " << endl;}void visit() {cout << "请选择您要使用的功能:";return;}};
class phone_contacts {
protected:string name;string pho_num;
public:friend class phone_address;friend class user;virtual void set()//为数据成员赋值{cout << "请输入联系人姓名:";cin >> name;cout << "请输入联系人手机号码:";cin >> pho_num;}//为数据成员赋值virtual void modify()//修改数据成员{cout << "请选择要修改的信息:(仅修改联系人姓名输入1,仅修改联系人电话号码输入2,二者都修改输入0)" << endl;int temp;cin >> temp;if (temp == 1 || temp == 0){cout << "请修改联系人姓名:";cin >> name;}if (temp == 2 || temp == 0){cout << "请修改联系人手机号码:";cin >> pho_num;}if (temp != 1 && temp != 2 && temp != 0){cout << "输入错误,请重试。" << endl; return;}cout << "修改完成." << endl;}//修改数据成员//*********************friend istream& operator>>(istream& in, phone_contacts& a);friend ostream& operator<<(ostream& out, phone_contacts& a);};
istream& operator>>(istream& in, phone_contacts& a)
{cout << "请输入联系人的姓名与手机号码:" << endl;in >> a.name >> a.pho_num;return in;
}
ostream& operator<<(ostream& out, phone_contacts& a)
{out << a.name << a.pho_num << endl;return out;
}class card_contacts :public phone_contacts {
protected:string hometown;string qq_num;
public:void set()//为数据成员赋值{cout << "请输入联系人姓名:";cin >> name;cout << "请输入联系人手机号码:";cin >> pho_num;cout << "请输入联系人籍贯:";cin >> hometown;cout << "请输入QQ号码:";cin >> qq_num;}//为数据成员赋值void modify()//修改数据成员{cout << "请选择要修改的信息" << endl;cout << "(仅修改联系人姓名输入1,仅修改联系人电话号码输入2,仅修改籍贯输入3,仅修改QQ号输入4,修改多项修改输入0)" << endl;int temp;cin >> temp;if (temp == 1 || temp == 0){cout << "请修改联系人姓名:";cin >> name;}if (temp == 2 || temp == 0){cout << "请修改联系人手机号码:";cin >> pho_num;}if (temp == 3 || temp == 0){cout << "请修改联系人籍贯:";cin >> hometown;}if (temp == 4 || temp == 0){cout << "请修改QQ号码:";cin >> qq_num;}if (temp < 0 || temp>4){cout << "输入错误,请重试。" << endl; return;}cout << "修改完成." << endl;}//修改数据成员friend istream& operator>>(istream& in, card_contacts& a);friend ostream& operator<<(ostream& out, card_contacts& a);friend class card_address;friend class user;
};
istream& operator>>(istream& in, card_contacts& a)
{cout << "请输入联系人的姓名,手机号码,籍贯与QQ号:" << endl;in >> a.name >> a.pho_num >> a.hometown >> a.qq_num;return in;
}
ostream& operator<<(ostream& out, card_contacts& a)
{out << a.name << " " << a.pho_num << " " << a.hometown << " " << a.qq_num << endl;return out;
}class address {
public:
//    static int sum_peo;virtual void add() = 0;virtual void del(string) = 0;virtual void display() = 0;virtual void rev(string) = 0;virtual int find(string) = 0;
//  static void putout() {}friend class user;
};
//int address::sum_peo = 0;class phone_address :public address {
protected:phone_contacts num1[1001];fstream newfile;
public:static int sum_peo;phone_address() {newfile.open("E:\\课设-通讯录管理系统\\phone_address.txt", ios::in);if (!newfile){cout << "文件打开失败,请重试" << endl;return;}while (!newfile.eof())//未到文件尾时,不断增加人数个数。{newfile >> num1[sum_peo].name >> num1[sum_peo].pho_num;sum_peo++;}newfile.close();}~phone_address() {newfile.open("E:\\课设-通讯录管理系统\\phone_address.txt", ios::out);if (!newfile){cout << "文件打开失败,请重试" << endl;return;}int ci = sum_peo + 1;int pi = 0;while (ci--){newfile << num1[pi].name << " " << num1[pi].pho_num << endl;pi++;}sum_peo = 0;newfile.close();}void add()//功能:添加{cin >> num1[sum_peo];sum_peo++;cout << "手机输入完成。" << endl;}void del(string name2) {//功能:删除int key = 0;for (int i = 0; i <= sum_peo; i++){if (num1[i].name == name2){key = i;break;}if (i == sum_peo){cout << "手机中查无此人" << endl;return;}}for (int i = key; i < sum_peo; i++){num1[i].name = num1[i + 1].name;num1[i].pho_num = num1[i + 1].pho_num;}sum_peo--;cout << "操作完成" << endl;}void display(){for (int i = 0; i < sum_peo-1; i++){cout << i + 1 << ".  ";cout << "姓名:" << num1[i].name << "  ";cout << "电话号码:" << num1[i].pho_num << endl;}cout << "查询新加入联系人请重启系统。" << endl;}void rev(string name3) {int p1[1100] = {0};int key = 0;for (int i = 0; i <= sum_peo; i++){if (num1[i].name == name3){p1[key] = i; key++;}if (i == sum_peo && key == 0){cout << "查无此人" << endl;return;}}for (int i = 0; i <= key; i++){cout << num1[p1[i]] << endl;cout << "是否修改此人?(是1否0)" << endl;int temp;cin >> temp;if (temp == 1){num1[p1[i]].modify(); break;}}}int find(string name1) {for (int i = 0; i < sum_peo; i++){if (num1[i].name == name1){cout << "姓名:" << num1[i].name << "  手机号码:" << num1[i].pho_num << endl;return 1;}}cout << "查无此人,请重新输入;" << endl;return 0;}friend class user;
};
int phone_address::sum_peo = 0;//
class card_address :public address {
protected:card_contacts num0[1001];fstream newfile;
public:static int sum_peo;card_address() {newfile.open("E:\\课设-通讯录管理系统\\card_address.txt", ios::in);if (!newfile){cout << "文件打开失败,请重试" << endl;return;}while (!newfile.eof())//未到文件尾时,不断增加人数个数。{newfile >> num0[sum_peo].name >> num0[sum_peo].pho_num >> num0[sum_peo].hometown >> num0[sum_peo].qq_num;sum_peo++;}newfile.close();}~card_address() {newfile.open("E:\\课设-通讯录管理系统\\card_address.txt", ios::out);if (!newfile){cout << "文件打开失败,请重试" << endl;return;}int ci = sum_peo + 1;int pi = 0;while (ci--){newfile << num0[pi].name << " " << num0[pi].pho_num << " " << num0[pi].hometown << " " << num0[pi].qq_num << endl;pi++;}sum_peo = 0;newfile.close();}void add(){cin >> num0[sum_peo];sum_peo++;cout << "手机卡输入完成。" << endl;}void del(string  name2) {int key = 0;for (int i = 0; i <= sum_peo; i++){if (num0[i].name == name2){key = i;break;}if (i == sum_peo){cout << "手机卡中查无此人" << endl;return;}}for (int i = key; i < sum_peo; i++){num0[i].name = num0[i + 1].name;num0[i].pho_num = num0[i + 1].pho_num;num0[i].hometown = num0[i + 1].hometown;num0[i].qq_num = num0[i].qq_num;}sum_peo--;cout << "操作完成" << endl;}void display() {for (int i = 0; i < sum_peo-1; i++){cout << i + 1 << ".  ";cout << "姓名:" << num0[i].name << "  ";cout << "电话号码:" << num0[i].pho_num << endl;cout << "籍贯:" << num0[i].hometown << endl;cout << "QQ号:" << num0[i].qq_num << endl;}cout << "查询新加入联系人请重启系统。" << endl;}void rev(string name3) {int  p2[1001] = {0};int key = 0;for (int i = 0; i <= sum_peo; i++){if (num0[i].name == name3){p2[key] = i;}if (i == sum_peo && key == 0){cout << "查无此人" << endl;return;}}for (int i = 0; i <= key; i++){cout << num0[p2[i]] << endl;cout << "是否修改此人?(是1否0)" << endl;int temp;cin >> temp;if (temp == 1)num0[p2[i]].modify();}}int find(string name1) {for (int i = 0; i < sum_peo; i++){if (num0[i].name == name1){cout << "姓名:" << num0[i].name << "  手机号码:" << num0[i].pho_num <<"  籍贯:" << num0[i].hometown << "  QQ号:" << num0[i].qq_num << endl;return 1;}}cout << "查无此人,请重新输入;" << endl;return 0;}
//  static void putout();friend class user;
};int card_address::sum_peo = 0;class user {
protected:address *p;//多态的使用phone_address a;card_address b;
public:void add() {cout << "请选择联系人储存位置(手机为1,手机卡为2,都存为0)" << endl;int x;cin >> x;if (x == 1 || x == 0){cout << "请在手机中输入信息:" << endl;p = &a;p->add();}if (x == 2 || x == 0){cout << "请在手机卡中输入信息:" << endl;p = &b;p->add();}if(x!=1&&x!=2&&x!=0)cout << "输入错误。" << endl;system("pause");system("cls");
}void del() {cout << "请输入你要删除的联系人姓名:" << endl;string name2;cin >> name2;p = &a;p->del(name2);p = &b;p->del(name2);system("pause");system("cls");}void display() {cout << "请输入你要浏览的储存空间:(手机1手机卡2)" << endl;int temp;cin >> temp;if (temp == 1){p = &a;cout << "手机中共有" << phone_address ::sum_peo-1 << "个联系人。" << endl;p->display();}else if (temp == 2){p = &b;cout << "手机中共有" << card_address::sum_peo-1 << "个联系人。" << endl;p->display();}system("pause");system("cls");}void rev() {cout << "请输入你要修改的联系人姓名:" << endl;string name3;cin >> name3;cout << "手机联系人:" ;p = &a;p->rev(name3);cout << "手机卡联系人:";p = &b;p->rev(name3);system("pause");system("cls");}//修改void find(){cout << "请输入你要寻找的联系人姓名:" << endl;string name1;cin >> name1;bool fi;p = &a;fi = p->find(name1);cout << "是否查询手机卡内的联系人?(是1否0)" << endl;cin >> fi;if (fi){p = &b;p->find(name1);}elsecout << "查询完成" << endl;system("pause");system("cls");}void move1() {cout << "请输入你要移动的联系人的姓名:" << endl;string name0;int m1, n1, n2;cin >> name0;n1 = check1(name0);n2 = check2(name0);if (!n2)cout << "查无此人,请重新输入。" << endl;else{if (n1)cout << "手机中已有此人,无需移动。" << endl;else{for (int i = 0; i < card_address::sum_peo; i++){if (b.num0[i].name == name0){m1 = i; break;}}a.num1[phone_address::sum_peo].name = b.num0[m1].name;a.num1[phone_address::sum_peo].pho_num = b.num0[m1].pho_num;a.del(name0);card_address::sum_peo--;phone_address::sum_peo++;}}}//卡向手机传void move2() {cout << "请输入你要移动的联系人的姓名:" << endl;string name0;int m1, n1, n2;cin >> name0;n1 = check1(name0);n2 = check2(name0);if (!n1)cout << "查无此人,请重新输入。" << endl;else{if (n2)cout << "手机卡已有此人,无需移动。" << endl;else{for (int i = 0; i < phone_address::sum_peo; i++){if (a.num1[i].name == name0){m1 = i; break;}}b.num0[card_address::sum_peo-1].name = a.num1[m1].name;b.num0[card_address::sum_peo-1].pho_num = a.num1[m1].pho_num;cout << "请补充籍贯与QQ号" << endl;cin >> b.num0[card_address::sum_peo-1].hometown;cin >> b.num0[card_address::sum_peo-1].qq_num;a.del(name0);phone_address::sum_peo--;card_address::sum_peo++;}}}//手机向卡传void copy1() {cout << "请输入你要复制的联系人的姓名:" << endl;string name0;int m1, n1, n2;cin >> name0;n1 = check1(name0);n2 = check2(name0);if (!n2)cout << "查无此人,请重新输入。" << endl;else{if (n1)cout << "手机中已有此人,无需复制。" << endl;else{for (int i = 0; i < card_address::sum_peo; i++){if (b.num0[i].name == name0){m1 = i; break;}}a.num1[phone_address::sum_peo-1].name = b.num0[m1].name;a.num1[phone_address::sum_peo-1].pho_num = b.num0[m1].pho_num;phone_address::sum_peo++;}}
}//卡向手机复制void copy2() {cout << "请输入你要复制的联系人的姓名:" << endl;string name0;int m1, n1, n2;cin >> name0;n1 = check1(name0);n2 = check2(name0);if (!n1)cout << "查无此人,请重新输入。" << endl;else{if (n2)cout << "手机卡中已有此人,无需复制。" << endl;else{for (int i = 0; i < card_address::sum_peo; i++){if (b.num0[i].name == name0){m1 = i; break;}}a.num1[phone_address::sum_peo-1].name = b.num0[m1].name;a.num1[phone_address::sum_peo-1].pho_num = b.num0[m1].pho_num;phone_address::sum_peo++;}}
}//手机向卡复制bool check1(string name0) {//查手机for (int i = 0; i < phone_address::sum_peo; i++){if (a.num1[i].name == name0)return 1;}return 0;
}//查手机bool check2(string name0) {//查手机卡for (int i = 0; i < card_address::sum_peo; i++){if (b.num0[i].name == name0)return 1;}return 0;
}//查手机卡
};
int main()
{user host;menu page;int pointer;
F:page.Display();page.visit();cin >> pointer;if (pointer == 1){host.add(); goto F;}else if (pointer == 2){host.del(); goto F;}else if (pointer == 3){host.rev(); goto F;}else if (pointer == 4){host.find(); goto F;}else if (pointer == 5){host.display(); goto F;}else if (pointer == 6){cout << "请选择您的转移方向:" << endl;cout << "(手机转手机卡选1,手机卡转手机选2)" << endl;int temp;cin >> temp;if (temp == 1)host.move2();else if (temp == 2)host.move1();elsecout << "输入错误。" << endl;system("pause");system("cls");goto F;}else if (pointer == 7){cout << "请选择您的复制方向:" << endl;cout << "(手机到手机卡选1,手机卡到手机选2)" << endl;int temp;cin >> temp;if (temp == 1)host.copy2();else if (temp == 2)host.copy1();elsecout << "输入错误。" << endl;system("pause");system("cls");goto F;}if (pointer == 0){return 0;}
}

四.感想

这个课程设计所应用的知识十分全面,不论是构造函数、析构函数,还是静态数据成员、对象数组,抑或重载运算符、友元、继承,还有抽象类、(纯)虚函数,更包括基类指针、多态。文件(输入输出流)等等都有涉及。

坦诚而言,课设涉及的面虽广,但难度却不大,而且还有深复制构造函数,访问声明等等知识未涉及,所以更多的当一个练手即可。

我原本的思路是先做好所有功能储存于头文件中再统一组装至大体的菜单框架中。但所有功能没问题时,却在组装时出现了错误,本是“.”和“->”选择失误,却导致连锁反应,从而蹦出了100多个bug。这是一次警示。先做功能再组装固然可以,但却容易让人忽略各个函数之间适配性的关系,从而在权限,选择,跳转等等地方出现问题,最终因一而三,连锁反应导致bug太多不知从何处下手修改。或者说,一个功能一个功能的试是更稳妥的选择。

而且现在这个代码还是有一些问题,由于析构函数返回文件时末尾的输入会增加一个换行,导致第二次打开系统进行增加联系人后直接显示会隔几个空格,也就是无法显示。我的解决方法是,要么使用转移功能,在增加联系人后换至另一个通讯簿,要么退出系统,再次进入即可显示完成。如果有更好的思路想法,欢迎与我讨论。

学疏才浅,这次的课设确实不完美,希望今后能多多改进吧。

课程设计:通讯录管理系统相关推荐

  1. java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统

    浊贤平鲁冠城美华道钉.内急顺美兴华品红缺点清屏!车组悬吊嗉囊沥胆情愿,城东兴荣规划管涌铺板?轻奏便装壳菜蓝坛卵石数据结构课程设计-通讯录管理系统.缪斯朝圣美金放下隆暑路权. 当年绸巾登封轮滑殴伤调理电 ...

  2. C++课程设计 通讯录管理系统 原码及解析

    设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理.(一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时, ...

  3. python通讯录管理系统设计_数据结构课程设计-通讯录管理系统(C语言版)

    ##数据结构课程设计-通讯录管理系统 一,前言 自从上次C语言课设写完后,这次数据结构课设就写的游刃有余了,很快啊,不足三天就写完了它(年轻人不讲武德),如果你认真看过我之前写的C语言课程设计-球队管 ...

  4. 数据结构课程设计——通讯录管理系统

    [问题描述] 建立一个手机通讯录系统.手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上.存储在手机卡的联系人的信息只包含用户名和电话号码两项信息.存储在手 ...

  5. C++课程设计------通讯录管理系统

    一. 任务描述 通讯录管理系统 手机通讯录中的联系人的信息既可以存储在手机中,也可以存储在手机卡中,也可以同时存储在两个位置上(每个位置上的存储容量为1000,即手机卡中或手机上最多只能存储1000个 ...

  6. RFID课程设计-图书管理系统用户端设计

    RFID课程设计-图书管理系统用户端设计课程设计题目课程设计任务内容题目设计基本原理NFC开发概述标签调度系统如何将 NFC 标签映射到 MIME 类型和 URI如何将 NFC 标签分发到应用在 An ...

  7. 销售管理c语言程序设计,C语言课程设计销售管理系统

    C语言课程设计销售管理系统 C语言课程设计 题 目 商品销售系统 指导教师 曹东燕 学生姓名 刘伟 张新星 马国文 学 号 200900804072 200901802005 200900804051 ...

  8. 网吧管理系统C语言作业,C语言课程设计-网吧管理系统.doc

    C语言课程设计-网吧管理系统 <通信工程专业C语言课程设计> 报 告 专 业: 通信工程 班 级: 0802 姓 名: 赵 松 指导教师: 丁 雄 二00九 年 十二 月 二十五 日 目 ...

  9. 教职工员工管理MySQL实训_数据库课程设计---教职工管理系统

    数据库课程设计---教职工管理系统 第 1 页目 录一.需求与功能分析 2二.系统总体框架 3三.功能设计 3四.类的设计与分析 4五.数据库表结构设计 4六.特色算法分析 5七.功能测试 6-10八 ...

  10. c语言程序设计书店销售管理系统,C语言课程设计-书店管理系统

    <C语言课程设计-书店管理系统>由会员分享,可在线阅读,更多相关<C语言课程设计-书店管理系统(25页珍藏版)>请在人人文库网上搜索. 1.计算机程序设计计算机程序设计(C(C ...

最新文章

  1. 附加 集合数据_浩辰3D软件新手教程:三维建模设计中如何重用CAD模型数据?
  2. MySQL--5子查询与连接小结
  3. taskkill无法终止进程 拒绝访问_进程的基本概念
  4. JavaScript:JavaScript中常见获取对象元素的方法
  5. MoCoV3:何恺明团队新作!解决Transformer自监督训练不稳定问题!
  6. Git 分支管理 Feature分支 强行删除分支
  7. java语言复制数组的四种方法
  8. Linux(Ubuntu18.04)安装SEAL-python
  9. 拼多多api接口php算法,PHP 调用 拼多多 API 模板
  10. java 构造 super_Java中的构造方法this、super的用法详解
  11. 项目人力资源管理重点梳理
  12. UVA12555 Baby Me【水题】
  13. spring实现mqtt服务端_SpringBoot--实战开发--MQTT消息推送(六十)
  14. zblog模板php免费三栏,天兴工作室三栏布局zblog模板 自定义配色
  15. 详解win7升级win10原来的软件还能用吗
  16. 软件脱壳常见的几种方法
  17. c#控制台实现计算器二目运算功能
  18. 红外成像光电探测器的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  19. 微服务项目后台技术栈
  20. 分享 | NB-IoT智能井盖传感器

热门文章

  1. zz国外接活网站Elance, Freelancer和ScriptLance的介绍和对比
  2. Excel函数公式大全—HLOOKUP函数
  3. 史上最全软件测试工程师常见的面试题总结(百度、oppo、中软国际、华为)备战金三银四
  4. vb外部调用autocad_利用VB与AutoCAD链接进行CAD二次开发
  5. Matlab GUI编程技巧(一):如何使gui编的界面一运行就居中
  6. Linux实现文件定期本地备份/异地备份/删除备份的脚本
  7. 防撤回神器,免ROOT查看撤回消息!再也不用担心错过劲爆消息!
  8. 洛谷【入门3】循环结构
  9. 一次聊个透彻:满二叉树、完全二叉树、二叉搜索树,二叉平衡树
  10. Android初学 抖音短视频无水印下载APP的实现