/*Student.h*/
#pragma once
#include<string.h>
using namespace std;
#include<string> class Student
{
public:
//ID age name math english sport 专业 是子类都具有的 所以就在基类中声明
int ID;
int age;
string major = "";
char name[];
float math, english, sport;
Student *next; //链表指针
//一下get函数 因为子类的专业不同 所以实现的方式不同 声明虚函数 在子类中实现
virtual float get_shi_bian_fun();
virtual float get_fan_han_fen_xi() ;
virtual float get_wei_fen_jihe();
virtual float get_zonghe_english();
virtual float get_spoken_english();
virtual float get_zu_cheng_yuanli();
virtual float get_ti_xi_jie_gou();
virtual float get_hui_bian();
virtual string get_major();
//因为每个子类遍历的东西也不同 所以遍历函数也要为虚函数 在子类中以不同的方式来实现
virtual void traverse(Student *t);
virtual float get_main_average();//取平均数也一样,返回平均成绩
virtual float get_average_score();
virtual void change(); //每个成员的科目不一样,需要修改的东西也不一样
Student();
virtual ~Student();
};
/*Student.cpp
/*Math_Student.h*/
#pragma once
#include "Student.h"
#include <string>
class Math_Student :
public Student
{
public:
//特有的科目成员 都声明为float
float shi_bian_fun;
float fan_han_fen_xi;
float wei_fen_jihe;
string major = "Math_Student";//专业直接初始化
Math_Student();
~Math_Student();
//get函数 方便在manage类里面拿到数据信息
float get_shi_bian_fun();
float get_fan_han_fen_xi() ;
float get_wei_fen_jihe() ;
float get_main_average();
float get_average_score();
string get_major();
//遍历信息
void traverse(Student *t);
void change(); //修改信息 };
/*Math_Student.cpp*/
#include "Math_Student.h" #include<iostream>
#include"string.h"
using namespace std; Math_Student::Math_Student()
{ cout << "请输入学生信息:" << endl;
cout << "age:" << endl;
cin >> age;
getchar();
cout << "name:";
cin >> name;
getchar();
cout << "ID:" << endl;
cin >> ID;
getchar();
cout << "sport_score:" << endl;
cin >>sport;
getchar();
cout << "math_score:" << endl;
cin >> math;
getchar();
cout << "english_score" << endl;
cin >> english;
getchar();
cout << "shi_bian_fun_score" << endl;
cin >>shi_bian_fun;
getchar();
cout << "fan_han_fen_xi_score" << endl;
cin >>fan_han_fen_xi;
getchar();
cout << "wei_fen_jihe_score" << endl;
cin >>wei_fen_jihe;
getchar(); cout << "录入成功!" << endl;
} Math_Student::~Math_Student()
{
} void Math_Student::change() {
cout << " 实变函数:" << endl;
cin >> shi_bian_fun;
getchar();
cout << " 泛函分析:" << endl;
cin >> fan_han_fen_xi;
getchar();
cout << " 微分几何:" << endl;
cin >> wei_fen_jihe;
getchar(); } void Math_Student::traverse(Student *t) {
//公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
cout << "学生信息为:" << endl
<< " 学号:" << t->ID << " 姓名:" <<name << " 年龄:" <<age << " 专业:" <<major << endl
<<"公共课成绩:"<<endl
<< " 数学:" <<math << " 英语:" <<english << " 体育:" << sport << endl
<< "专业课成绩:"<<endl
<<" 实变函数:"<<t->get_shi_bian_fun()<<" 泛函分析:"<<t->get_fan_han_fen_xi()<<" 微分几何:"<<t->get_wei_fen_jihe()<<endl
<<endl;
} float Math_Student::get_main_average() { return ((math + english + sport) / 3.0);
} float Math_Student::get_average_score() {
float av = ;
av += math; av += sport; av += english, av += shi_bian_fun, av += fan_han_fen_xi, av += wei_fen_jihe;
return (av / 6.0); } float Math_Student:: get_shi_bian_fun() {
return shi_bian_fun;
} float Math_Student ::get_fan_han_fen_xi() {
return fan_han_fen_xi;
} float Math_Student::get_wei_fen_jihe() {
return wei_fen_jihe;
} string Math_Student::get_major() {
return major;
}
;
/*English_Student.h*/
#pragma once
#include "Student.h"
#include <string>
class English_Student :
public Student
{
public:
//特有成员变量
float zonghe_english;
float spoken_english;
string major = "English_Student"; English_Student();
~English_Student();
float get_zonghe_english();
float get_spoken_english();
string get_major();
float get_main_average();
void change();
void traverse(Student *t);
float get_average_score();
};
/*English_Student.cpp*/
#include "English_Student.h" #include<iostream>
#include"string.h"
using namespace std; English_Student::English_Student()
{ cout << "age:" << endl;
cin >> age;
getchar();
cout << "name:";
cin >> name;
getchar();
cout << "ID:" << endl;
cin >> ID;
getchar();
cout << "sport_score:" << endl;
cin >> sport;
getchar();
cout << "math_score:" << endl;
cin >> math;
getchar();
cout << "english_score" << endl;
cin >> english;
cout << "zonghe_english_score" << endl;
cin >> zonghe_english;
cout << "spoken_english_score" << endl;
cin >> spoken_english;
getchar();
cout << "录入成功!" << endl;
} English_Student::~English_Student()
{
} void English_Student::change() {
//公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
cout << " 综合英语:" << endl;
cin >> zonghe_english;
cout << " 口语英语:" << endl;
cin >> spoken_english;
getchar();
} void English_Student:: traverse(Student *t) {
//因为实在 类里面 可以直接访问到数据
//输出的信息 分了 几行 便于好看
cout << "学生信息为:" << endl
<< " 学号:" << ID << " 姓名:" << name << " 年龄:" << age << " 专业:" << major << endl
<<"公共课成绩:"<<endl
<< " 数学:" << math << " 英语:" << english << " 体育:" << sport << endl
<< "专业课成绩:" <<endl
<<" 综合英语:"<< t->get_zonghe_english() << " 口语英语:" << t->get_spoken_english() <<endl
<<endl;
} float English_Student::get_average_score() {
float av = 0.0; //来求和 在类里面 可以访问到数据
av += math; av += sport; av += english;
av += zonghe_english; av += spoken_english;
return (av / 5.0) ; //返回平均分 /5.0 为float } float English_Student::get_main_average() {
//直接返回 公共课平均分 为float
return ((math + english + sport) / 3.0);
} float English_Student::get_zonghe_english() {
return zonghe_english; //返回综合英语的分
} float English_Student::get_spoken_english() {
return spoken_english;//返回口语英语的分
} string English_Student::get_major() {
return major; //返回专业 为string
}
;
/*IT_Student.h*/
#pragma once
#include "Student.h"
#include <string>
class IT_Student :
public Student
{
public:
//特有科目成员变量
float zu_cheng_yuanli;
float ti_xi_jie_gou;
float hui_bian;
string major = "IT_Student";
//一系列get函数 返回float
float get_zu_cheng_yuanli();
float get_ti_xi_jie_gou();
float get_hui_bian();
float get_average_score();
float get_main_average();
string get_major();
IT_Student();
~IT_Student();
void traverse(Student *t);
void change(); };
/*IT_Student.cpp*/
#include "IT_Student.h" #include<iostream>
#include"string.h"
using namespace std; IT_Student::IT_Student()
{
cout << "age:" << endl;
cin >> age;
getchar();
cout << "name:";
cin >> name;
getchar();
cout << "ID:" << endl;
cin >> ID;
getchar();
cout << "sport_score:" << endl;
cin >> sport;
getchar();
cout << "math_score:" << endl;
cin >> math;
getchar();
cout << "english_score" << endl;
cin >> english;
cout << "zu_cheng_yuanli_score" << endl;
cin >> zu_cheng_yuanli;
cout << "ti_xi_jie_gou_score" << endl;
cin >> ti_xi_jie_gou;
cout << "hui_bian_score" << endl;
cin >> hui_bian;
getchar();
cout << "录入成功!" << endl;
} IT_Student::~IT_Student()
{
} void IT_Student::change() {
//公共的信息修改 在 manage 里面 这里来到类里面来修改特有的信息
cout << " 组成原理:" << endl;
cin >> zu_cheng_yuanli;
cout << " 体系结构:" << endl;
cin >> ti_xi_jie_gou;
cout << " 汇编语言:" << endl;
cin >> hui_bian;
getchar();
} float IT_Student::get_main_average() {
return ((math + english + sport) / 3.0);
} void IT_Student::traverse(Student *t) {
//因为实在 类里面 可以直接访问到数据
//输出的信息 分了 几行 便于好看
cout << "学生信息为:" << endl
<< " 学号:" << ID << " 姓名:" << name << " 年龄:" << age << " 专业:" << major << endl
<<"公共课成绩:"<<endl
<< " 数学:" <<math << " 英语:" << english << " 体育" << sport << endl
<< "专业课成绩: "<<endl
<<" 组成原理:"<< t->get_zu_cheng_yuanli() << " 体系结构:" << t->get_ti_xi_jie_gou() <<" 汇编语言:"<<t->get_hui_bian()<< endl
<<endl;
} float IT_Student::get_average_score() {
float av = ;
av += math; av += sport; av += english;
av += zu_cheng_yuanli; av += ti_xi_jie_gou; av += hui_bian;
return (av / 6.0); } float IT_Student::get_zu_cheng_yuanli() {
return zu_cheng_yuanli;
}
/*main.cpp*/
**#include "manage_student.h"
#include "Student.h"
#include<iostream>
#include "Math_Student.h"
#include "IT_Student.h"
#include "English_Student.h"
using namespace std; /*void traverse(Student *head) {
int index = 1; // 用于计数第几个学生
Student *temp = head;
while (temp != NULL) { //同样一直到后面没有地址结束
cout << temp->math;
temp = temp->next;
}
}*/ void menu(Student *head,manage_student Chead) {
int m = ;
int ID = ;
int conter = ;
while () {
cout << " ***************请选择您需要的操作:****************" << endl;
cout << " * 1. 增加学生信息 *" << endl;
cout << " * 2. 删除学生信息 *" << endl;
cout << " * 3. 修改学生信息 *" << endl;
cout << " * 4. 按学号ID查询 *" << endl;
cout << " * 5. 查询某位学生的平均分 *" << endl;
cout << " * 6. 某个学生的三科平均成绩 *" << endl;
cout << " * 7. 按公共课平均分从高到低排序 *" << endl;
cout << " * 8. 遍历学生信息 *" << endl;
cout << " * 9. 结束功能并把信息写入文件中 *" << endl;
cout << " * 0. 退出程序 *" << endl;
cout << " ***************************************************" << endl;
rewind(stdin);
cin >> m;
if (m >= && m < ) {
switch (m) {
case : Chead.append_student(head); break;
case : {cout << "要删除学生信息的学号:";
cin >> ID;
head = Chead.delete_student(head, ID, Chead.getlength(head)); }break;
case : {cout << "需要修改学生信息的同学ID:";
cin >> ID;
Chead.change_message(head, ID); }break;
case : {cout << "按学号查询 请输入需要查询的同学的ID为:";
cin >> ID;
Chead.search(head, ID); }break;
case : {
cout << "请输入您需要查询学生的平均成绩的ID:";
cin >> ID;
Chead.get_average_score(head,Chead.getlength(head),ID );
}break;
case : {
cout << "请输入您需要查询学生的平均成绩的ID:";
cin >> ID;
Student *t = head;
while (t != NULL) {
if (t->ID == ID) {
cout << "该同学的公共课平均成绩为:" << t->get_main_average() << endl;
}t = t->next;
}
break;
} case : {
Chead.rank_average_score(head, Chead.getlength(head));
cout << "排序成功!"; break;
}
case : {
Student *t = head;
while (t != NULL) {
t->traverse(t);
t=t->next;
}break;
}
case : {
Chead.openfile(head, Chead.getlength(head));
cout << "写入文件成功!"; break;
}
case : {
Chead.release(head);//结束之前free掉链表
return; }
}
}
else cout << "输入有错误 请输入0-9的整数"; continue;
}
/*manage_student.h*/
#pragma once
#include<iostream>
#include "Student.h" class manage_student
{
public:
//存入文件 传入头指针和长度
void openfile(Student *head, int len);
//成绩排序 传入头指针和长度
void rank_average_score(Student *head,int len);
//修改信息 指定ID找到学生信息 修改 传入头 和 ID
void change_message(Student *head, int ID);
//增加信息 传入头就可以
void append_student(Student *head);
//删除学生信息 传入头 需要删除学生信息的ID 链表长度
Student * delete_student(Student *head,int ID,int len);
//创建链表
Student * create();
//搜索查询学生信息 根据ID搜索
void search(Student *head, int ID);
//得到链表的长度 传入头 返回链表长度
int getlength(Student *head);
//得到平均分 显示平均分
void get_average_score(Student *head, int len,int ID);
void release(Student *head); manage_student();
~manage_student();
};

/*manage_student.cpp*/
#include "manage_student.h"
#include "Student.h"
#include<iostream>
#include "Math_Student.h"
#include "IT_Student.h"
#include "English_Student.h"
#include<string.h>
using namespace std; #include<fstream>
#include<iomanip> manage_student::manage_student()
{
} manage_student::~manage_student()
{ } Student * manage_student:: create() {
int num = ; //来计数 输入的第几个学生
int temp; //用来输入选择初始化的学生的专业
int len = ; //表示链表的长度
cin >> len; //也就是初始输入需要添加的学生数目
Student stu;//用来初始化指针
Student *pre = &stu;
Student *c = &stu;
Student *Head = &stu; //最后要返回的头指针
while (num < len) {
cout << "************您需要添加此学生的专业是? 1:数学系 2:英语系 3:计算机系" << endl;
cin >> temp;
if (temp == ) {
c = new Math_Student; //一定要new一个**********不然会覆盖之前的
if (num == ) { // 千万不能 Math_Student c 这个错误调了几天!!!!!!
Head = c; // 头指针的地址
Head->next = NULL; //第一个的尾给空
pre = Head; //pre指向 前一个 也就是头
}
if (num) {
pre->next = c; //前一个的尾接到下一个的地址
pre = pre->next; //pre 指向next指针
pre->next = NULL; //next指针指向的 弄为空
}
++num;
continue;
}
else if (temp == ) {
c = new English_Student;
if (num == ) {
Head = c; // 头指针的地址
Head->next = NULL; //第一个的尾给空
pre = Head; //pre指向 前一个 也就是头
}
if (num) {
pre->next = c; //前一个的尾接到下一个的地址
pre = pre->next; //pre 指向next指针
pre->next = NULL; //next指针指向的 弄为空
}
++num;
continue;
}
else if (temp == ) {
c = new IT_Student;
if (num == ) {
Head = c; // 头指针的地址
Head->next = NULL; //第一个的尾给空
pre = Head; //pre指向 前一个 也就是头
}
if (num) {
pre->next = c; //前一个的尾接到下一个的地址
pre = pre->next; //pre 指向next指针
pre->next = NULL; //next指针指向的 弄为空
}
++num;
continue;
}
else {
cout << "输入有误!请重新输入" << endl; continue;
}
}
return Head; //把头指针返回到main里 便于取用
} int manage_student::getlength(Student * head)
{
int num = ; //=0 或者 =1 取决于while的判断条件
Student *t=head;
while (t->next != ) { //当head指向后面没有了 它就是NULL 结束
++num;
t = t->next; //如果head 不是NULL ++num后要把head指针指向最后
}
return num; //返回int长度
} void manage_student::search(Student *head,int ID) {
Student *t = head; //用*t来遍历
while (t != NULL) { //只要t不是空 就进入
if (t->ID == ID) { //如果匹配到 ID
t->traverse(t); //用基类的指针调用子类的遍历方法
}t = t->next;
}
}
void manage_student::release(Student *head) {
Student *n; //需要一个指针存着下一个地址
while (head != NULL) {
n = head->next; //把n指向下一块要释放的地址
free(head);
head = n; //然后再把head从前一个地址移到下一个地址
}
}
void manage_student::append_student(Student *head) {
Student *c = head; //都用基类的指针来操作
Student *t = head;
int temp;
while (t->next != NULL) {
t = t->next; //把t移动到最后一块链表
}
cout << "************您需要添加此学生的专业是? 1:数学系 2:英语系 3:计算机系" << endl;
cin >> temp;
if (temp == ) {
c = new Math_Student; //一定要new一个
t->next = c; //前一个的尾接到下一个的地址
t = t->next; //pre 指向next指针
t->next = NULL; //next指针指向的 弄为空
}
else if (temp == ) {
c = new English_Student; //一定要new一个
t->next = c; //前一个的尾接到下一个的地址
t = t->next; //pre 指向next指针
t->next = NULL; //next指针指向的 弄为空
}
else if (temp == ) {
c = new IT_Student; //一定要new一个
t->next = c; //前一个的尾接到下一个的地址
t = t->next; //pre 指向next指针
t->next = NULL; //next指针指向的 弄为空
}
else {
cout << "输入有误!请重新输入" << endl;
}
} Student * manage_student::delete_student(Student *head, int ID,int len)
{
//用*t来遍历
Student *t = head;
Student *temp;//临时指针
for (int i = ; i < (len - ); ++i) {
if (i == ) { //如果就是第一块链表 需要特殊处理 因为头Head会变
if (head->ID == ID) { head = head->next; delete t; return head; } //一定要返回一个新的头Head
if ((t->next)->ID == ID) { //如果是第二块链表匹配
temp = t->next; //把第一块跟第三块连接起来
t->next = (t->next)->next;
delete temp; return head; //delete调 第二块 返回头Head
}
}
if (i != ) {
if ((t->next)->ID == ID) { //如果遍历的不是第一块了,操作都一样
temp = t->next; //前一块的next
t->next = (t->next)->next; //前后连接
delete temp; return head; //删掉中间
}t = t->next;
}
}cout << "删除成功!" << endl; return head; //返回头指针
} void manage_student::change_message(Student *head, int ID) {
Student *t = head;
while (t!= NULL) {
if (t->ID == ID) {//ID匹配 进入
// 匹配属于数学系
if (t->get_major() == "Math_Student") {
//在此处修改公共的信息
cout << "*******请输入要修改的学生信息:" << endl;
cout << " ID:" << endl;
cin >> t->ID;
cout << " 姓名:" << endl;
cin >> t->name;
cout << " 年龄:" << endl;
cin >> t->age;
cout << " 数学:" << endl;
cin >> t->math;
cout << " 英语:" << endl;
cin >> t->english;
cout << " 体育:" << endl;
cin >> t->sport;
t->change(); //然后再去子类里面调用change修改特有的成员变量
}
if (t->get_major() == "English_Student") {
cout << "*******请输入要修改的学生信息:" << endl;
cout << " ID:" << endl;
cin >> t->ID;
cout << " 姓名:" << endl;
cin >> t->name;
cout << " 年龄:" << endl;
cin >> t->age;
cout << " 数学:" << endl;
cin >> t->math;
cout << " 英语:" << endl;
cin >> t->english;
cout << " 体育:" << endl;
cin >> t->sport;
t->change();
}
if (t->get_major() == "IT_Student") {
cout << "*******请输入要修改的学生信息:" << endl;
cout << " ID:" << endl;
cin >> t->ID;
cout << " 姓名:" << endl;
cin >> t->name;
cout << " 年龄:" << endl;
cin >> t->age;
cout << " 数学:" << endl;
cin >> t->math;
cout << " 英语:" << endl;
cin >> t->english;
cout << " 体育:" << endl;
cin >> t->sport;
t->change();
} cout << "信息修改完成!"<<endl; return;
} t = t->next;
}
cout << "对不起!查无此人,请重新确认学号是否输入正确,谢谢!"<<endl;
} void manage_student::rank_average_score(Student *head,int len) {
Student *t = head; //用*t来 遍历
Student *pre = head;//把前面的存着 来跟后面的比较
t = t->next; //t往后移动一个
int ID;
char name[];
float math, english, sport;
for (int i = ; i < (len - ); ++i) {
while (t != NULL) {
//如果后面的平均分比前面的平均分高 就进入
if ( t->get_average_score() >pre->get_average_score() ){
strcpy_s(name, t->name); strcpy_s(t->name, pre->name); strcpy_s(pre->name, name);
ID = t->ID; t->ID = pre->ID; pre->ID = ID;
math = t->math; t->math = pre->math; pre->math = math;
sport = t->sport; t->sport = pre->sport; pre->sport = sport;
english = t->english; t->english = pre->english; pre->english = english;
}
t = t->next;
//t每次循环完了之后 就把pre后移一个 t接在pre的后面
}pre = pre->next; t = pre->next;
}
} void manage_student::openfile(Student *head, int len) {
//同样用t遍历
Student *t = head;
ofstream ofile; //定义输出文件
ofile.open("D:\\学生信息"); //作为输出文件打开
//for循环把链表 里面的信息写入文件
for (int i = ; i < len; ++i) {
//判断系别 因为每个专业的成员不一样
if (t->get_major() == "Math_Student") {
ofile << "录入的各学生的信息如下: " << endl;
ofile << " 基本信息:" << " 学号" << t->ID << " 姓名:" << t->name << " 年龄:" << t->age << " 专业:" << t->get_major() << endl
<< " 公共课成绩:" << " 数学:" << t->math << " 英语:" << t->english << " 体育:" << t->sport << endl
<< " 专业课成绩:" << " 实变函数" << t->get_shi_bian_fun() << " 泛函分析:" << t->get_fan_han_fen_xi() << " 微分几何" << t->get_wei_fen_jihe() << endl;
t = t->next; continue;
}
if (t->get_major() == "English_Student") {
ofile << "录入的各学生的信息如下: " << endl;
ofile << " 基本信息:" << " 学号" << t->ID << " 姓名:" << t->name << " 年龄:" << t->age << " 专业:" << t->get_major() << endl
<< " 公共课成绩:" << " 数学:" << t->math << " 英语:" << t->english << " 体育:" << t->sport << endl
<< " 专业课成绩:" << " 综合英语:" << t->get_zonghe_english() << " 口语英语:" << t->get_spoken_english() << endl;
t = t->next; continue;
}
if (t->get_major() == "IT_Student") {
ofile << "录入的各学生的信息如下: " << endl;
ofile << " 基本信息:" << " 学号" << t->ID << " 姓名:" << t->name << " 年龄:" << t->age << " 专业:" << t->get_major() << endl
<< " 公共课成绩:" << " 数学:" << t->math << " 英语:" << t->english << " 体育:" << t->sport << endl
<< " 专业课成绩:" << " 组成原理:" << t->get_zu_cheng_yuanli() << " 体系结构:" << t->get_ti_xi_jie_gou() << " 汇编语言:" << t->get_hui_bian() << endl;
t = t->next; continue;
}
}
ofile.close();
return ;
} void manage_student::get_average_score(Student *head, int len,int ID) {
Student *t = head; //用t遍历
for (int i = ; i < len; ++i) {
if (t->ID == ID) {
//用基类的指针调用子类的函数 返回平均分 输出
cout << "该学生的平均成绩为:" << t->get_average_score() << endl; return;
}
t = t->next;
}
cout << "请确认您输入的ID是否有误" << endl;
}
;
}

void main() {
cout << "欢迎进入学生管理系统!请输入需要添加的学生数: "<<endl;
Student temp; //用来初始化指针
Student *Head=&temp;
Student *t=&temp;
int len;
manage_student Chead;
Head=Chead.create();//把头地址传回来给Head 指向的是第一个类stu menu(Head, Chead); //调用菜单函数 system("pause");
return;
}

float IT_Student::get_ti_xi_jie_gou() {
return ti_xi_jie_gou;
} float IT_Student::get_hui_bian() {
return hui_bian;
} string IT_Student::get_major() {
return major;
}
;
*/
#include "Student.h"
#include<iostream> Student::Student()
{
} Student::~Student()
{
} //这些函数都是假的 真正实现在子类里面
float Student::get_average_score() {
return ;
} float Student::get_main_average() {
return ;
} void Student::traverse(Student *t) {
cout << "我在Student 里面" << endl;
} float Student:: get_shi_bian_fun() {
return ;
} float Student::get_fan_han_fen_xi() {
return ;
} float Student::get_wei_fen_jihe() {
return ;
} float Student::get_zonghe_english() {
return ;
} float Student::get_spoken_english() {
return ;
} float Student::get_zu_cheng_yuanli() {
return ;
} float Student::get_ti_xi_jie_gou() {
return ;
} float Student::get_hui_bian() {
return ;
} string Student::get_major() {
return ;
} void Student::change() { }
;

最新文章

  1. Laravel-lumen 配置JWT
  2. dreamweaver cs6 mac破解版
  3. shell编程之正则表达式
  4. laravel记录
  5. 【题解】【BST】【Leetcode】Validate Binary Search Tree
  6. 根据当前IP获取当时所在信息
  7. 动态创建DataTable总结
  8. 1033. To Fill or Not to Fill (25) -贪心算法
  9. 深入Go的底层,带你走近一群有追求的人
  10. springboot秒杀课程学习整理1-1
  11. 5. Failed to configure a DataSource: &#39;url&#39; attribute is not specified and no embedded datasource could be configured.
  12. 基数估算HyperLogLog
  13. sql 更新多条记录
  14. [POI2013]Łuk triumfalny
  15. linux Git版本控制学习与Git服务器搭建
  16. 【centOS7】centOS7上普通用户切换root用户,相互切换
  17. iOS Emoji
  18. ThinkPhp3.2.3 多项目 后台 APP接口设计 框架设计
  19. 剑指 offer set 13 把数组排成最小的数
  20. windows通过ssh连接虚拟机中的ubuntu步骤

热门文章

  1. LeetCode 234. Palindrome Linked List (回文链表)
  2. svg 虚线
  3. # [libx264 @ 00000275eb57fec0] height not divisible by 2 (520x325)
  4. P1491 集合位置 次短路
  5. [python基础] csv.wirterow()报错UnicodeEncodeError
  6. openstack instance resize
  7. IDEA Spark Streaming Kafka数据源-Consumer
  8. oracle数据库简单操作
  9. Android中有四大组件的简单总结
  10. Windows键盘驱动结构与消息机制--转