如何用qt实现学生信息管理系统_用qtcreater做一个学生信息管理系统-程序员宅基地

技术标签: qt  qt程序作品区  学生信息管理系统  

最新消息:很久没有没有写qt了,qt也不是我的工作方向,看到本篇博文日积月累的点击量很不错,本人决定将该简易系统进行升级改造,提升的内容和方向远超本篇设计的系统,本篇系统其实是一个非常入门的操作,对于基础差的可以快速的理解一些操作,非常简单。升级后的系统内容比当前的这个系统扩展了非常多,也更复杂,所以要想理解,可以先把本篇博文这个先理解,对于基础不错的,则可以移步到我的新的开发的信息系统,本来那个系统我在一年前就已经完成,就想着弄得更完善,但是限于平时时间有限,可以先开放出来,供大家参考学习。后续有时间再继续升级,新的系统功能更强大,设计更合理,如果理解了的话,对于工作上的开发也会是一个不错的参考,新系统不采用任何第三方库,包括日志系统,也是纯手工打造。

新系统源码地址:https://gitee.com/dxl96/StdMsgSystem

信息系统博客新地址:https://blog.csdn.net/IT_CREATE/article/details/131612076

本系统源码资源:学生信息管理系统.zip · itcreat/qt资源 - Gitee.com

以下是效果图

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QtWidgets>
#include <QTimer>
#include "insertdialog.h"
#include "updatedialog.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    // 刷新表格
    void tableReflash(QString selectSql = QString());
    ~MainWindow();

private slots:
    //-----------------------------------界面转到槽函数----------------
    void on_add_pushButton_clicked();

    void on_change_pushButton_clicked();

    void on_delete_pushButton_clicked();

    void on_refer_pushButton_clicked();

    //-----------------------------------自定义槽函数----------------
    void changeBackground(); // 更改背景
private:
    Ui::MainWindow *ui;
    QSqlDatabase db;
    // 背景色集合
    QList<QString> backgrounds;
    // 当前指向景色集合的索引
    int backgroundIndex;

    // 初始化背景色集合
    void initBackgrounds();
    // 单元格设置
    void cellSetting(int row, int column, QString text);
    // 删除学生信息
    void deleteStudent();
    // 查询学生信息
    void selectStudent();
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    setWindowTitle("学生信息管理系统");

    // 设置输入框提示信息
    ui->select_param_edit->setToolTip("查询支持模糊查询,输入姓名或者学号关键词即可");

    // 设置列表第一列宽度100
    ui->information_tableWidget->setColumnWidth(0,100);
    // 设置列表自动填充满窗口
    ui->information_tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    // 设置列表列头
    ui->information_tableWidget->setColumnCount(7);
    ui->information_tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("*选择栏"));
    ui->information_tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("主键(id)"));
    ui->information_tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("学生姓名"));
    ui->information_tableWidget->setHorizontalHeaderItem(3, new QTableWidgetItem("学生学号"));
    ui->information_tableWidget->setHorizontalHeaderItem(4, new QTableWidgetItem("学生专业"));
    ui->information_tableWidget->setHorizontalHeaderItem(5, new QTableWidgetItem("学生年龄"));
    ui->information_tableWidget->setHorizontalHeaderItem(6, new QTableWidgetItem("学生性别"));

    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("my.db");
    if(db.open())
    {
        qDebug()<<"打开成功";
    }
    QString createSql = "create table student(id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,studentName VARCHAR(30),studentNumber VARCHAR(30),"
                        "studentCollege VARCHAR(30),studentAge VARCHAR(30),studentSex VARCHAR(30))";
    qDebug()<<createSql;
    QSqlQuery query;
    if(query.exec(createSql))
    {
        qDebug()<<"创建成功";
    } else {
        qDebug()<<"创建失败,表或已存在";
    }
    // 刷新表格数据
    tableReflash();

    // 初始化背景色集合数据
    initBackgrounds();

    // 定时改变背景,20秒切换一次
    QTimer* backgroundTimer = new QTimer(this);
    backgroundTimer->start(20000);
    connect(backgroundTimer,SIGNAL(timeout()),this,SLOT(changeBackground()));

    // 隐藏工具栏和状态栏
    this->statusBar()->hide();
    ui->mainToolBar->setVisible (false);
}

MainWindow::~MainWindow()
{
    delete ui;
}

// 初始化背景色集合
void MainWindow::initBackgrounds()
{
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 white,stop:1 white);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #79F1A4,stop:1 #0E5CAD);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #97ABFF,stop:1 #123597);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #90F7EC,stop:1 #32CCBC);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #43CBFF,stop:1 #9708CC);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #5EFCE8,stop:1 #736EFE);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #FFD26F,stop:1 #3677FF);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #92FFC0,stop:1 #002661);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #C2FFD8,stop:1 #465EFB);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #81FFEF,stop:1 #F067B4);");
    this->backgrounds.append("background:qlineargradient(spread:pad,x1:0,y1:0,x2:0,y2:1,stop:0 #FFF886,stop:1 #F072B6);");
}

// 更改背景
void MainWindow::changeBackground()
{
    if(backgroundIndex < backgrounds.size()) {
        this->setStyleSheet(backgrounds.at(backgroundIndex));
        backgroundIndex++;
    } else {
        backgroundIndex = 0;
    }
}

// 添加按钮点击事件
void MainWindow::on_add_pushButton_clicked()
{
    insertDialog* student_insert = new insertDialog(this);
    student_insert->setAttribute(Qt::WA_DeleteOnClose); // 关闭时销毁对象
    student_insert->setModal(true); // 设置为模态窗口,即窗口打开后只能该修改界面操作,不能在其他窗口进行操作,保证操作时的唯一性
    student_insert->show();
}

// 修改按钮点击事件
void MainWindow::on_change_pushButton_clicked()
{
    int rowCount = ui->information_tableWidget->rowCount();
    QList<int> ids;
    for(int row = 0;row<rowCount;row++) {
        QTableWidgetItem * item = ui->information_tableWidget->item(row,0);
        Qt::CheckState status = item->checkState();
        if(status == Qt::CheckState::Checked) {
            QLineEdit* idItem = (QLineEdit*) ui->information_tableWidget->cellWidget(row, 1);
            ids.append(idItem->text().toInt());
        }
    }
    if(ids.isEmpty()) {
        QMessageBox::information(this,"提示","请先勾选要修改的行");
        return;
    }
    if(ids.size() > 1) {
        QMessageBox::information(this,"提示","修改时只能勾选单行数据");
        return;
    }
    updateDialog* student_update = new updateDialog(this);
    student_update->setAttribute(Qt::WA_DeleteOnClose); // 关闭时销毁对象
    student_update->setModal(true); // 设置为模态窗口,即窗口打开后只能该修改界面操作,不能在其他窗口进行操作,保证操作时的唯一性
    student_update->load(ids.at(0));
    student_update->show();
}

// 删除按钮点击事件
void MainWindow::on_delete_pushButton_clicked()
{
    deleteStudent();
}

// 查询按钮点击事件
void MainWindow::on_refer_pushButton_clicked()
{
    selectStudent();
}

// 设置单元格信息
void MainWindow::cellSetting(int row, int column, QString text)
{
    QLineEdit* lineEdit = new QLineEdit(text);
    lineEdit->setStyleSheet("border: 0px;color:black"); // 设置该输入框无边框,黑色字体
    // 设置只读
    lineEdit->setReadOnly(true);
    ui->information_tableWidget->setCellWidget(row, column, lineEdit);
}

// 删除学生信息
void MainWindow::deleteStudent()
{
    int rowCount = ui->information_tableWidget->rowCount();
    QList<int> ids;
    for(int row = 0;row<rowCount;row++) {
        QTableWidgetItem * item = ui->information_tableWidget->item(row,0);
        Qt::CheckState status = item->checkState();
        if(status == Qt::CheckState::Checked) {
            QLineEdit* idItem = (QLineEdit*) ui->information_tableWidget->cellWidget(row, 1);
            ids.append(idItem->text().toInt());
        }
    }
    if(ids.isEmpty()) {
        QMessageBox::information(this,"提示","请先勾选要删除的行");
        return;
    }
    qDebug()<<"删除数据ids: "<<ids;
    QString idsStr = "";
    for(int i = 0;i< ids.size();i++) {
        if(i == 0) {
            idsStr = idsStr + QString::number(ids.at(i));
        } else {
            idsStr = idsStr + ","+QString::number(ids.at(i));
        }
    }
    QString sql = "delete from student where id in(" + idsStr + ")";
    qDebug()<<sql;
    QSqlQuery query;
    if(query.exec(sql)) {
        // 刷新表格
        tableReflash();
        QMessageBox::information(this,"成功","删除成功");
    } else {
        QMessageBox::information(this,"失败","删除失败");
    }
}

// 查询学生信息
void MainWindow::selectStudent()
{
    QString searchParam = ui->select_param_edit->text().trimmed();
    if(searchParam.isEmpty()) {
        tableReflash();
        return;
    }
    tableReflash(QString("select id,studentName,studentNumber,studentCollege,studentAge,studentSex from student where studentName like \"%1%2\" or studentNumber like \"%3%4\"")
                 .arg(searchParam,"%",searchParam,"%"));
}

// 刷新表格数据
void MainWindow::tableReflash(QString selectSql)
{
    // 先移除表格所有行
    for(int row = ui->information_tableWidget->rowCount() - 1;row >= 0; row--)
    {
        ui->information_tableWidget->removeRow(row);
    }
    // 查询数据添加到表格
    QSqlQuery query;
    if(selectSql.isEmpty()) {
        QString sql = "select id,studentName,studentNumber,studentCollege,studentAge,studentSex from student order by id desc";
        qDebug()<<sql;
        query.exec(sql);
    } else {
        qDebug()<<selectSql;
        query.exec(selectSql);
    }
    int row =0;
    while(query.next())
    {
        int index_row =ui->information_tableWidget->rowCount();
        ui->information_tableWidget->setRowCount(index_row+1);
        // 第一列插入复选框
        QTableWidgetItem *check = new QTableWidgetItem();
        check->setCheckState(Qt::Unchecked);
        check->setFlags(check->flags() ^ Qt::ItemIsEditable);
        ui->information_tableWidget->setItem(row,0,check); //插入复选框
        cellSetting(row,1, query.value(0).toString());
        cellSetting(row,2, query.value(1).toString());
        cellSetting(row,3, query.value(2).toString());
        cellSetting(row,4, query.value(3).toString());
        cellSetting(row,5, query.value(4).toString());
        cellSetting(row,6, query.value(5).toString());
        qDebug()<<query.value(0).toString()<<","<<query.value(1).toString()<<","<<query.value(2).toString()<<
                  ","<<query.value(3).toString()<<","<<query.value(4).toString()<<","<<query.value(5).toString();
        row++;
    }
}

insertdialog.h

#ifndef INSERTDIALOG_H
#define INSERTDIALOG_H

#include <QMainWindow>
#include <QDialog>

namespace Ui {
class insertDialog;
}

class insertDialog : public QDialog
{
    Q_OBJECT

public:
    explicit insertDialog(QWidget *parent = 0);
    ~insertDialog();

private slots:
    void on_insert_pushButton_clicked();

private:
    Ui::insertDialog *ui;
};

#endif // INSERTDIALOG_H

insertdialog.cpp

#include "insertdialog.h"
#include "ui_insertdialog.h"
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include <QSqlQuery>

insertDialog::insertDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::insertDialog)
{
    ui->setupUi(this);
    setWindowTitle("新增学生信息");
}

insertDialog::~insertDialog()
{
    delete ui;
}

void insertDialog::on_insert_pushButton_clicked()
{
    QString student_name = ui->studentname_lineEdit->text().trimmed();
    QString student_number = ui->studentnumber_ineEdit->text().trimmed();
    QString student_college = ui->studentcollege_lineEdit->text().trimmed();
    QString student_age =ui->studentage_lineEdit->text().trimmed();
    QString student_sex =ui->studentsex_lineEdit->text().trimmed();
    if(student_name.isEmpty() || student_number.isEmpty() ||
            student_college.isEmpty() || student_age.isEmpty() ||
            student_sex.isEmpty())
    {
        QMessageBox::information(this,"提示","请输入完整");
        return;
    }

    QSqlQuery query;
    QString sql = QString("select count(1) from student where studentNumber = \"%1\"").arg(student_number);
    qDebug()<<sql;
    query.exec(sql);
    while(query.next())
    {
        int count = query.value(0).toInt();
        if(count > 0) {
            QMessageBox::information(this,"提示","学号已存在");
            return;
        }
    }

    QString insertSql = QString("insert into student (studentName,studentNumber,studentCollege,studentAge,studentSex) values (\"%1\",\"%2\",\"%3\",\"%4\",\"%5\")").arg(
                student_name,student_number,student_college,student_age,student_sex);
    qDebug()<<insertSql;
    if(query.exec(insertSql))
    {
        // 关闭窗口
        close();

        // 刷新列表
        MainWindow* mainWidget = (MainWindow*) parentWidget();
        mainWidget->tableReflash();
        QMessageBox::information(this,"成功","插入成功");

    }
    else
        QMessageBox::information(this,"失败","插入失败");

}

updatedialog.h

#ifndef UPDATEDIALOG_H
#define UPDATEDIALOG_H

#include <QDialog>

namespace Ui {
class updateDialog;
}

class updateDialog : public QDialog
{
    Q_OBJECT

public:
    explicit updateDialog(QWidget *parent = 0);
    // 通过学生表id字段值加载数据到修改界面
    void load(int id);
    ~updateDialog();

private slots:
    void on_update_pushButton_clicked();

private:
    Ui::updateDialog *ui;
    // id,学生信息的id字段值
    int id;
};

#endif // UPDATEDIALOG_H

updatedialog.cpp

#include "updatedialog.h"
#include "ui_updatedialog.h"
#include "mainwindow.h"
#include <QSqlQuery>
updateDialog::updateDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::updateDialog)
{
    ui->setupUi(this);
    setWindowTitle("修改学生信息");
}

void updateDialog::load(int id)
{
    this->id = id;
    QSqlQuery query;
    query.exec(QString("select studentName,studentNumber,studentCollege,studentAge,studentSex from student where id = %1").arg(QString::number(id)));
    QString studentName;
    QString studentNumber;
    QString studentCollege;
    QString studentAge;
    QString studentSex;
    while(query.next())
    {
        studentName = query.value(0).toString();
        studentNumber = query.value(1).toString();
        studentCollege = query.value(2).toString();
        studentAge = query.value(3).toString();
        studentSex = query.value(4).toString();
    }
    ui->number_lineEdit->setText(studentNumber);
    ui->number_lineEdit->setReadOnly(true);
    ui->namechange_lineEdit->setText(studentName);
    ui->numberchange_lineEdit->setText(studentNumber);
    ui->collegechange_lineEdit->setText(studentCollege);
    ui->agechange_lineEdit->setText(studentAge);
    ui->sexchange_lineEdit->setText(studentSex);
}

updateDialog::~updateDialog()
{
    delete ui;
}

void updateDialog::on_update_pushButton_clicked()
{
    QString number = ui->number_lineEdit->text().trimmed();
    QString namechange =ui->namechange_lineEdit->text().trimmed();
    QString numberchange = ui->numberchange_lineEdit->text().trimmed();
    QString collegechange = ui->collegechange_lineEdit->text().trimmed();
    QString agechange =ui->agechange_lineEdit->text().trimmed();
    QString sexchange =ui->sexchange_lineEdit->text().trimmed();
    if(number.isEmpty() || namechange.isEmpty() ||
            collegechange.isEmpty() || numberchange.isEmpty() ||
            agechange.isEmpty() || sexchange.isEmpty())
    {
        QMessageBox::information(this,"提示","请输入完整内容");
        return;
    }

    QString  countSql = QString("select count(1) from student where studentNumber = \"%1\" and id != %2").arg(numberchange, QString::number(id));
    qDebug()<<countSql;
    QSqlQuery query;
    query.exec(countSql);
    while(query.next())
    {
        int count = query.value(0).toInt();
        if(count > 0) {
            QMessageBox::information(this,"提示","已经存在相同的学号");
            return;
        }
    }

    QString sql = QString("update student set studentName=\"%1\" ,studentNumber = \"%2\","
                                     "studentCollege =\"%3\" ,studentAge =\"%4\",studentSex  =\"%5\" where id =%6")
            .arg(namechange,numberchange,collegechange,agechange,sexchange,QString::number(id));
    qDebug()<<sql;
    if(query.exec(sql))
    {
        // 关闭窗口
        close();

        // 刷新表格数据
        MainWindow* mainWindow = (MainWindow*) parentWidget();
        mainWindow->tableReflash();
        QMessageBox::information(this,"成功","修改成功");
    }
    else
        QMessageBox::information(this,"失败","修改失败");
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IT_CREATE/article/details/82027462

智能推荐

ServletContextListener的用法和HttpSessionListener 的用法-程序员宅基地

文章浏览阅读397次。这个J2EE小提示阐述了ServletContextListener的用法。这个事件类作为Web应用服务的一部分,处理Web应用的 servlet上下文 (context)的变化的通知。这可以解释为,好像有个人在服务器旁不断地通知我们服务器在发生什么事件。那当然需要监听者了。 因 此,在通知上下文(context)初始化和销毁的时候,ServletContextListner非常有用。 impor...

C#多线程编程系列(五)- 使用任务并行库_c#多任务框架-程序员宅基地

文章浏览阅读266次。目录1.1 简介1.2 创建任务1.3 使用任务执行基本的操作1.4 组合任务1.5 将APM模式转换为任务1.6 将EAP模式转换为任务1.7 实现取消选项1.8 处理任务中的异常1.9 并行运行任务1.10 使用TaskScheduler配置任务执行参考书籍本系列首页链接:[C#多线程编程系列(一)- 简介 ]1.1 简介在之前的几个章节..._c#多任务框架

webwork_ibm解读webwork-程序员宅基地

文章浏览阅读192次。点击打开链接_ibm解读webwork

云服务器公有私有ip_一分钟快速了解什么是公有云和私有云,究竟存在什么样的差异?...-程序员宅基地

文章浏览阅读273次。随着云计算的逐步兴起,云计算最基本的产品-云主机非常流行。云主机分为公有云、私有云和混合云。许多企业已经准备好将数据迁移到云。他们不知道该选择哪种类型的云主机。接下来,我们将讨论什么是公共云,什么是私有云。我希望它能帮助你。什么是公共云?公有云是由云服务提供商为云服务用户和资源控制的云部署模式。云服务提供商构建基础设施、集成资源、构建云虚拟资源池,并根据需要将它们分配给多个租户。我们经常听到或使用..._如何查看ip是私有云还是公有云

黑马程序员-JAVA基础学习日志——通篇大总结及学习方法思想_黑马java学习思路-程序员宅基地

文章浏览阅读5.4k次,点赞2次,收藏4次。------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- Java基础知识总结 回首是为了更好向前,天空没有翅膀的痕迹,而我已飞过,人总是这样,害怕回首,又时常回首,看看走过的路是直是弯,踩下的脚印是深是浅,回首昨天的风雨,眺望远方的灿烂。几多感慨,几多愁,放下包袱,轻装前行...写代码:1,明确需求。我要做什么?_黑马java学习思路

Vue动态控制按钮显示与隐藏_vue用函数显示按钮-程序员宅基地

文章浏览阅读1.7w次,点赞2次,收藏17次。工作中有一个需求就是,对未收货的订单可以进行收货确认;但是已经确认收货的订单如果继续收货确认后台会报错;为了解决这个问题,可以在列表选择时,如果勾选了已经收货确认的订单把收货确认按钮隐藏起来;前端代码如下:<div v-if="isShow" class="fr of p10" > <button class="mr10 main_btn" @click="confirm">收货确认</button> </_vue用函数显示按钮

随便推点

Oracle数据库的管理_按创建一个用户bs,并给该用户授权。-程序员宅基地

文章浏览阅读448次。如果丢失了数据库的管理员账户密码的情况_按创建一个用户bs,并给该用户授权。

Uoj #188. 【UR #13】Sanrd(min_25筛)-程序员宅基地

文章浏览阅读236次。Uoj #188. 【UR #13】Sanrd(min_25筛)题目大意现在有一函数f(x)f(x)f(x)其函数值为x的次大素因数,如为素数则为0,现求∑i=lrf(i)\sum_{i=l}^rf(i)∑i=lr​f(i)解题思路注意到min_25筛的更新中有一步为g(n,m)=∑m&lt;p≤n,pe≤n,e≥1,p∈Pf(pe)([e&gt;1]+g(⌊npe,p⌋..._uoj #188. 【ur #13】sanrd

java调用jasper_Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表-程序员宅基地

文章浏览阅读501次。在接下来的教程中,我们将实现一个简单的JasperReports示例,展现其基本的开发、使用流程。文章很长,不过是以图片居多,文字并不多。实例中使用最新的Jasper Studio5.2进行报表设计(下载地址:http://sourceforge.net/projects/jasperstudio/files/JaspersoftStudio-5.1.0/),数据源使用了mysql自带的示例数据库..._jasper studio设计多行表格

C++ 哈希表-程序员宅基地

文章浏览阅读6.2k次。哈希表哈希表(hash table):根据关键字(Key)而直接进行访问值(Value)的数据结构。一般我们可以用哈希表来快速判断一个元素是否出现在集合里。以数组为例,数组也是哈希表——哈希表关键码即数组的索引,这样我们可以通过下标直接访问数组元素。哈希函数哈希函数(hash function):把函数值(Value)直接映射为哈希表的索引(Key),然后我们就可以通过查询索引下标快速直到某值是否存在于集合中。..._c++ 哈希表

鸿蒙系统公测第一期,幸福来得太突然!鸿蒙系统 2.0 第二轮公测开启,内附申请方法...-程序员宅基地

文章浏览阅读478次。距离华为鸿蒙系统第一次公测已过去一段时间,小伙伴们升级后纷纷表示「很香」。全新系统带来的崭新体验,让没能升级的教授跃跃欲试。就在昨晚,HarmonyOS 2.0 开发者 Bata 公测招募第二期开启啦~终于等到你!公测新增机型第二期公测新增了七款机型:华为 nova 6、华为 nova 6 5G 、华为 nova 7 5G、华为 nova 7 Pro 5G、华为 nova 8、华为 nova 8 ..._naiyou001.tk/华为鸿蒙安装谷歌框架/

我,一个在互联网苟且着的高龄程序员,终究迎来了我的“35”_高龄程序员对互联网的-程序员宅基地

文章浏览阅读192次。似乎上了点年纪的人,正遭遇非常严重的危机,很多人难以自持的忧虑起来:难道软件和互联网,真的容不下我们这些大龄青年?难道35岁,真的就是我们的绝命杀?有点遗憾的告诉大家,35岁这个年龄,是大约75%互联网人的绝命杀。为什么这么说?因为对于像程序员这样的IT从业者来讲,35岁会面临3个大坎:精力坎时间坎性价比坎精力坎所谓精力坎,说的是,人到了奔四这个阶段,精力自然而然开始下降,不如二十郎当岁的小伙子。二十来岁的小伙子,熬一夜第二天照样可以再战,而三十五六的伪中年,一个通宵休息三五天过不来。._高龄程序员对互联网的