iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++课程设计之图书馆管理系统
  • 269
分享到

C++课程设计之图书馆管理系统

2024-04-02 19:04:59 269人浏览 安东尼
摘要

本文实例为大家分享了c++课程设计之图书馆管理系统的具体代码,供大家参考,具体内容如下 一.代码 #include<bits/stdc++.h> using namesp

本文实例为大家分享了c++课程设计之图书馆管理系统的具体代码,供大家参考,具体内容如下

一.代码

#include<bits/stdc++.h>
using namespace std;
class Date
{
    int year,month,day;
public:
    Date(int x,int y,int z):year(x),month(y),day(z){}
    Date(){year=month=day=0;}
    void setDate(int x,int y,int z){year=x;month=y;day=z;}
    void setYear(int x){year=x;}
    void setMonth(int x){month=x;}
    void setDay(int x){day=x;}
 
 
    int getYear(){return year;}
    int getMonth(){return month;}
    int getDay(){return day;}
    friend ostream& operator<<(ostream &out,Date &t );
    friend istream& operator>>(istream &in,Date &t);
    bool operator<(const Date &t);
};
ostream& operator<<(ostream &out,Date &t )
{
    out<<t.year<<" ";
    out<<t.month<<" ";
    out<<t.day;
    return out;
}
istream& operator>>(istream &in,Date &t)
{
    in>>t.year>>t.month>>t.day;
    return in;
}
bool Date::operator<(const Date &t)
{
    return year!=t.year?year<t.year:month!=t.month?month<t.month:day<t.day;
}
class Record
{
    int uid;
    int bid;
    Date start;
    Date end;//默认end为应该还书的时间
    int xj;//1表示已经续借过,0时还未续借
    int sy;//1时已经还书,0时未还书
public:
    Record(int a,int b,Date c):uid(a),bid(b),start(c)
    {
       int i,j,k;
       i=start.getYear();
       j=start.getMonth();
       k=start.getDay();
       if(j+2<=12)
       {
           end.setDate(i,j+2,k);
       }
       else  end.setDate(i+1,j+2-12,k);
       xj=0;sy=0;
    }
    Record(){}
    int getUid(){return uid;}
    int getBid(){return bid;}
    Date getS(){return start;}
 
 
    Date getE(){return end;}
    int getxj(){return xj;}
    int getsy(){return sy;}
 
 
    void setE();//用于续借时修改应该还书的时间,即将end再加两个月
    void setxj(int x){xj=x;}
    void setsy(int x){sy=x;}
 
 
    friend ostream& operator<<(ostream &out,Record &r );
    friend istream& operator>>(istream &in,Record &r);
    void display();
};
void Record::setE()
{
    int i,j,k;
    i=end.getYear();
    j=end.getMonth();
    k=end.getDay();
    if(j+2<=12)
    {
        end.setDate(i,j+2,k);
    }
    else  end.setDate(i+1,j+2-12,k);
}
ostream& operator<<(ostream &out,Record &r)
{
    out<<r.uid<<" ";
    out<<r.bid<<" ";
    out<<r.start<<" ";
    out<<r.end<<" ";
    out<<r.xj<<" ";
    out<<r.sy<<" ";
    return out;
}
istream& operator>>(istream &in,Record &r)
{
    in>>r.uid>>r.bid>>r.start>>r.end>>r.xj>>r.sy;
    return in;
}
void Record::display()
{
    cout<<"借阅人:"<<uid<<" "<<"书号:"<<bid<<" "<<"借书日期:"<<start<<" "<<"应还书日期:"<<end<<" "<<"是否续借过:"<<xj<<" "<<"是否已还书:"<<sy<<endl;
}
class Book
{
    int id;//书号
    string name;//书名
    string press;//出版社
    Date pd;//出版日期
    int sum,ln;//总册数,已借出
    int i;
public:
    vector<Record>v1;
    vector<Record>::iterator it1;
    multimap<int,int>m1;//根据借阅人的学号建立
    multimap<int,int>::iterator mit1;
    Book(int a,string b,string c,Date d,int e,int f):id(a),name(b),press(c),pd(d),sum(e),ln(f){i=v1.size();}
    Book(){}
    int getId(){return id;}
    string getName(){return name;}
    string getPress(){return press;}
    Date getPd(){return pd;}
 
 
    int getSum(){return sum;}
    int getLn(){return ln;}
 
 
    void setSum(int x){sum=x;}
    void setLn(int x){ln=x;}
 
 
    void addRecord(Record r);
    void dispRecord();
    int search(int x);//根据借阅人的学号查询
    void display();
    void display1();
    friend istream& operator>>(istream &in,Book &b);
    friend ostream& operator<<(ostream &out,Book &b);
};
istream& operator>>(istream &in,Book &b)
{
    in>>b.id>>b.name>>b.press>>b.pd>>b.sum>>b.ln>>b.i;
    int s=0;
    if(b.i!=0)
    {
        while(s!=b.i)
        {
            in>>b.v1[s];s++;
        }
    }
    return in;
}
ostream& operator<<(ostream &out,Book &b)
{
    out<<b.id<<" "<<b.name<<" "<<b.press<<" "<<b.pd<<" "<<b.sum<<" "<<b.ln<<" "<<endl;
    if(b.v1.size()!=0)
    {
       out<<b.v1.size()<<endl;
       for(int i=0;i<b.v1.size();i++)
       {
           out<<b.v1[i];
           if(i!=b.v1.size()-1)
              out<<endl;
       }
    }
    else
        out<<b.v1.size();
    return out;
}
void Book::addRecord(Record r)
{
    int i;
    v1.push_back(r);
    i=v1.size();
    m1.insert(make_pair(r.getUid(),i-1));
}
void Book::dispRecord()
{
    for(int i=0;i<v1.size();i++)
        v1[i].display();
}
int Book::search(int x)
{
    mit1=m1.find(x);
    if(mit1!=m1.end())
    {
        return mit1->second;//返回的是这本书存储的关于借阅人x的借阅记录的下标值
    }
    else return -1;
}
void Book::display()
{
    cout<<"书号:"<<id<<" "<<"书名:"<<name<<" "<<"出版社:"<<press<<" "<<"出版日期:"<<pd<<" "<<"总册数:"<<sum<<" "<<"已借出:"<<ln<<endl;
    if(v1.size()!=0)
    {
        dispRecord();
    }
}
void Book::display1()
{
    cout<<"书号:"<<id<<" "<<"书名:"<<name<<" "<<"出版社:"<<press<<" "<<"出版日期:"<<pd<<" "<<"总册数:"<<sum<<" "<<"已借出:"<<ln<<endl;
}
class User
{
    int id;
    string name;
    string major;
    int mb,nb;//mb为最大借阅量,nb为当前借阅量
    int wj;//1为违纪过,此时无法借书;
    int i;
public:
    vector<Record>v2;
    vector<Record>::iterator it2;
    multimap<int,int>m2;//根据所借书的书号建立
    multimap<int,int>::iterator mit2;
    User(int a,string b,string c):id(a),name(b),major(c)
    {
        mb=10;nb=0;wj=0;i=v2.size();
    }
    User(){i=v2.size();}
    int getId(){return id;}
    string getName(){return name;}
    string getMajor(){return major;}
 
 
    int getmb(){return mb;}
    int getnb(){return nb;}
    int getwj(){return wj;}
 
 
    void setmb(int x){mb=x;}
    void setnb(int x){nb=x;}
    void setwj(){wj=1;mb=0;}
 
 
    void addRecord(Record r);
    void dispRecord();
    int search(int no);//通过书号查找
    void display();
 
 
    bool operator ==( User &u)
    {
        if(this->id==u.getId())
        return 1;
        else return 0;
    }
    User & operator =(User &u)
    {
        id=u.id;
        name=u.name;
        major=u.major;
        mb=u.mb;
        nb=u.nb;
        wj=u.wj;
        v2=u.v2;
        m2=u.m2;
    }
    friend ostream& operator<<(ostream &out,User &u);
    friend istream& operator>>(istream &in,User &u);
};
ostream& operator<<(ostream &out,User &u)
{
    out<<u.id<<" "<<u.name<<" "<<u.major<<" "<<u.mb<<" "<<u.nb<<" "<<u.wj<<" "<<endl;
    if(u.v2.size()!=0)
    {
        out<<u.v2.size()<<endl;
        for(int i=0;i<u.v2.size();++i)
        {
            out<<u.v2[i];
            if(i!=u.v2.size()-1)
               out<<endl;
        }
    }
    else
        out<<u.v2.size();
    return out;
}
istream& operator>>(istream &in,User &u)
{
 
 
    in>>u.id>>u.name>>u.major>>u.mb>>u.nb>>u.wj>>u.i;
    int s=0;
    if(u.i!=0)
    {
        while(s!=u.i)
        {
            in>>u.v2[s];s++;
        }
    }
    return in;
}
void User::addRecord(Record r)
{
    int i;
    v2.push_back(r);
    i=v2.size();
    m2.insert(make_pair(r.getBid(),i-1));
}
void User::dispRecord()
{
    for(int i=0;i<v2.size();i++)
    {
        v2[i].display();
    }
}
int User::search(int no)
{
    mit2=m2.find(no);
    if(mit2!=m2.end())
    {
        return mit2->second;
    }
    else return -1;
}
void User::display()
{
    cout<<"学号:"<<id<<" "<<"姓名:"<<name<<" "<<"专业班级:"<<major<<" "<<"最大借阅量:"<<mb<<" "<<"当前借阅量:"<<nb<<" "<<"有无违纪:"<<wj<<endl;
    if(v2.size()!=0)
    {
        dispRecord();
    }
}
class Client
{
    User u;
    vector<Book>v3;
    vector<Book>::iterator it3;
    multimap<int,int>m3;
    multimap<int,int>::iterator mit3;
 
 
    vector<User>v;
    vector<User>::iterator it;
    multimap<int,int>m;
    multimap<int,int>::iterator mit;
public:
    Client(int x)
    {
        load1();
         load2(x);
    }
    ~Client()
    {
        save1();
         save2();
    }
    void load1();
    void save1();
    void load2(int x);
    void save2();
    void queryBook(int x);
    void borrow(int x,Date t);
    void back(int x);
    void displayu(){u.display();}
    void displayb(int x){mit3=m3.find(x); v3[mit3->second].display();}
};
void Client::load1()
{
    Book b;
    int i;
    ifstream infile("d:\\20171750book.txt",iOS::in);
    if(!infile) return;
    while(infile>>b)
    {
        v3.push_back(b);
        i=v3.size();
        m3.insert(make_pair(b.getId(),i-1));
    }
    infile.close();
}
void Client::save1()
{
    ofstream outfile("d:\\20171750book.txt",ios::out);
    if(!outfile) return;
    for(int i=0;i<v3.size();i++)
    {
        outfile<<v3[i];
        outfile<<endl;
    }
    outfile.close();
}
void Client::load2(int x)
{
    User u;
    int i;
    ifstream infile("d:\\20171750stu.txt",ios::in);
    if(!infile) return;
    while(infile>>u)
    {
        v.push_back(u);
        i=v.size();
        m.insert(make_pair(u.getId(),i-1));
        if(x==u.getId())
        {
            this->u=u;
        }
    }
    infile.close();
}
void Client::save2()
{
    ofstream outfile("d:\\20171750stu.txt",ios::out);
    if(!outfile) return ;
    for(it=v.begin();it!=v.end();it++)
    {
        outfile<<*it;
        outfile<<endl;
    }
    outfile.close();
}
void Client::queryBook(int x)
{
    mit3=m3.find(x);
    if(mit3!=m3.end())
    {
        v3[mit3->second].display1();
    }
    else
        cout<<"未找到该书!"<<endl;
}
void Client::borrow(int x,Date t)
{
    mit3=m3.find(x);
    int i,j,k;
    i=mit3->second;
    j=v3[i].getLn();
    k=v3[i].getSum();
    if(u.getwj()==0&&j<k&&u.getnb()<u.getmb()&&mit3!=m3.end())
    {
        cout<<"借书成功!"<<endl;
        Record r(u.getId(),v3[i].getId(),t);
        u.addRecord(r);      mit=m.find(u.getId()); v[mit->second].addRecord(r);
        v3[i].addRecord(r);
        u.setnb(u.getnb()+1);                       v[mit->second].setnb(u.getnb());
        v3[i].setLn(j+1);
    }
    else
       cout<<"借书失败!"<<endl;
}
void Client::back(int x)
{
    mit3=m3.find(x);
    int s=u.v2.size();
    int flag=0;
    int i=mit3->second;
    int j=v3[i].getLn();
    if(s!=0)
    {
        for(int i=0;i<s;++i)
        {
            if(x==u.v2[i].getBid())
              flag=1;
        }
    }
    if(mit3!=m3.end()&&flag==1)
    {
        cout<<"还书成功!"<<endl;//用户的nb-1√   书的ln-1√  用户和书的借阅记录的sy变为1
        u.setnb(u.getnb()-1);   mit=m.find(u.getId());  v[mit->second].setnb(u.getnb());
        v3[i].setLn(j-1);
        v3[i].mit1=v3[i].m1.find(u.getId());  v3[i].v1[v3[i].mit1->second].setsy(1);
        u.mit2=u.m2.find(x);                  u.v2[u.mit2->second].setsy(1);
        int k=mit->second;
        v[k].mit2=v[k].m2.find(x);  v[k].v2[v[k].mit2->second].setsy(1);
    }
    else
        cout<<"还书失败!"<<endl;
}
class Manger
{
   vector<User>v4;
   vector<User>::iterator it4;
   multimap<int,int>m4;
   multimap<int,int>::iterator mit4;
 
 
   vector<Book>v5;
   vector<Book>::iterator it5;
   multimap<int,int>m5;
   multimap<int,int>::iterator mit5;
public:
   Manger()
   {
       load1();
       load2();
   }
   ~Manger()
   {
       save1();
       save2();
   }
   void load1();
   void load2();
   void save1();
   void save2();
   void addUser(User u);
   void addBook(Book b);
   void displayU(int x);
   void displayB(int x);
};
void Manger::load1()
{
    User u;
    int i;
    ifstream infile("d:\\20171750stu.txt",ios::in);
    if(!infile) return;
    v4.clear(); m4.clear();
    i=0;
    while(infile>>u)
    {
        v4.push_back(u);
        m4.insert(make_pair(u.getId(),i));
        i++;
    }
    infile.close();
}
void Manger::load2()
{
    Book b;
    int i;
    ifstream infile("d:\\20171750book.txt",ios::in);
    if(!infile)  return;
    v5.clear();m5.clear();
    i=0;
    while(infile>>b)
    {
        v5.push_back(b);
        m5.insert(make_pair(b.getId(),i));
        i++;
    }
    infile.close();
}
void Manger::save1()
{
    ofstream outfile("d:\\20171750stu.txt",ios::out);
    if(!outfile)  return;
    for(it4=v4.begin();it4!=v4.end();it4++)
    {
        outfile<<*it4;
        outfile<<endl;
    }
    outfile.close();
}
void Manger::save2()
{
    ofstream outfile("d:\\20171750book.txt",ios::out);
    if(!outfile)  return;
    for(it5=v5.begin();it5!=v5.end();it5++)
    {
        outfile<<*it5;
        outfile<<endl;
    }
    outfile.close();
}
void Manger::addUser(User u)
{
    int x;
    x=u.getId();
    mit4=m4.find(x);
    if(mit4!=m4.end())
    {
        cout<<"添加用户失败,该用户已存在!"<<endl;
    }
    else
    {
        cout<<"添加用户成功!"<<endl;
        int i;
        v4.push_back(u);
        i=v4.size();
        m4.insert(make_pair(u.getId(),i-1));
    }
}
void Manger::addBook(Book b)
{
    int x;
    x=b.getId();
    mit5=m5.find(x);
    if(mit5!=m5.end())
    {
        cout<<"添加图书失败,该图书已存在!"<<endl;
    }
    else
    {
        cout<<"添加图书成功!"<<endl;
        int i;
        v5.push_back(b);
        i=v5.size();
        m5.insert(make_pair(b.getId(),i-1));
    }
}
void Manger::displayU(int x)
{
    mit4=m4.find(x);
    v4[mit4->second].display();
}
void Manger::displayB(int x)
{
    mit5=m5.find(x);
    v5[mit5->second].display();
}
int main()
{
  //时间类测试

  //记录类测试

  //图书类测试
 
 
  
  //管理端测试
 
 
  
 
 
  
 
 
  
 
 
  Client c(20171750);
  Date t(2018,6,14);
  c.borrow(1,t);    //借书
  c.back(1);   //还书
}

二.总结

经过了三周的探索与尝试,通过对重载运算符和STL模板库的实际应用,完成了第一个面对设计对象的程序设计,当然在接下来的完善中,还需使用“继承”“多态”进行修改。总之,作为一个完善的图书馆管理系统,如今已经实现了完整的四个功能:增加用户,增加书籍,借书和还书以及相应的完整的数据记录与变化,可以说基本具备了一个图书馆管理系统应该具有的功能。

当然,在试验设计的过程中,出现了诸多问题。例如读入用户信息后无法进行操作,借书还书前后的图书数据没有变化,这些问题的出现大多都是对于重载的认知不够导致的,于是我参考了各类书籍,其中对我帮助最大的是C++ Premer Plus ,某些例子的使用使我找到了灵感。总之,解决问题的过程是辛苦的但也是快乐的,试验设计使我深深地体会到了这一点。

在接下来的学习中,有更多更深入的设计等待着我,最终的目的便是应用程序APP之类的,我相信通过自己的努力,在不久的将来会更加优秀。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C++课程设计之图书馆管理系统

本文链接: https://www.lsjlt.com/news/142256.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++课程设计之图书馆管理系统
    本文实例为大家分享了C++课程设计之图书馆管理系统的具体代码,供大家参考,具体内容如下 一.代码 #include<bits/stdc++.h> using namesp...
    99+
    2022-11-13
  • C++实现图书管理系统课程设计
    本文实例为大家分享了C++实现图书管理系统的具体代码,供大家参考,具体内容如下 大一 C++课设,没有用分文件的形式,只是把菜单页面单独分开了。用的是链表,都是一些基础的东西。另外采...
    99+
    2022-11-13
  • Java图书管理系统课程设计
    本文实例为大家分享了Java图书管理系统的具体代码,供大家参考,具体内容如下 大二上学期做的一个Java课程设计,总分为四个Java文件,AllBook,AllBorrow,AllS...
    99+
    2022-11-13
  • C语言实现图书管理系统课程设计
    目录设计要求实现代码运行结果本文实例为大家分享了C语言实现图书管理系统的具体代码,供大家参考,具体内容如下 设计要求 设计图书管理系统 要求如下: 1.对书名,作者,编号,出版单位,...
    99+
    2022-11-13
  • C语言实现宾馆管理系统课程设计
    本文实例为大家分享了C语言实现宾馆管理系统的具体代码,供大家参考,具体内容如下 课程设计题目: 宾馆管理系统 一、需求分析 近年来,科技进步不仅促进了全球旅游企业的快速增长,而且指导...
    99+
    2022-11-13
  • C++实现图书馆管理系统
    本文实例为大家分享了C++实现图书馆管理系统的具体代码,供大家参考,具体内容如下 一、实验名称 图书馆管理系统 二、实验目的 利用C++语言设计开发一个小型的图书馆管理系统模拟程序,...
    99+
    2022-11-13
  • C++实现图书管理系统课程设计(面向对象)
    本文实例为大家分享了C++实现图书管理系统课程设计,供大家参考,具体内容如下 1.题目: 【1】:工作人员登录后,可以进行的操作 添加学生的信息(学号,姓名,院系,最大借阅的图书数量...
    99+
    2022-11-13
  • 数据库课程设计-图书馆管理系统(2.数据库实现-基于mysql)
    如果对你有帮助,可以给卑微的博主留个赞、关注、收藏   (不是)  (骗一下数据,说不定以后面试就过了,拜谢) 好像有读者说现在不要积分的资源也要vip才能下,如果下不了可以留邮箱到评论区或者私聊,我也把资源放到github了,地址如下: ...
    99+
    2023-09-10
    数据库 mysql 课程设计
  • C语言实现图书馆管理系统
    本文实例为大家分享了C语言实现图书馆管理系统的具体代码,供大家参考,具体内容如下 全部代码如下: #include <stdio.h> #include<str...
    99+
    2022-11-12
  • 【C#项目】图书馆管理系统-WinForm+MySQL
    文章目录 前言一、业务梳理与需求分析1.功能描述2.实现步骤3.功能逻辑图 二、数据库设计1.实体-关系(E-R图)概念模型设计2.数据表设计 三、WinForm界面交互设...
    99+
    2023-10-20
    python 开发语言
  • C++实现简单图书馆管理系统
    本文实例为大家分享了C++实现简单图书馆管理系统的具体代码,供大家参考,具体内容如下 写了一个小项目,图书馆系统,功能如下: 1,添加书籍2,删除书籍(可删除还没外借的书籍)3,读者...
    99+
    2022-11-13
  • C++实现简易图书馆管理系统
    本文实例为大家分享了C++实现简易图书馆管理系统的具体代码,供大家参考,具体内容如下 思路 在本程序中共有四个类: book类:此类有书的基本信息:书名,编号,作者,价格等,和基本的...
    99+
    2022-11-13
  • C++实现图书馆管理系统源码
    本文实例为大家分享了C++实现图书馆管理系统的具体代码,供大家参考,具体内容如下 总体思想 用C++开发图书馆管理系统需要对学生和图书分别建立class,调用class中的方法实现学...
    99+
    2022-11-13
  • 基于JAVA图书馆管理系统设计与实现
    【后台管理员功能】 广告管理:设置小程序首页轮播图广告和链接 留言列表:所有用户留言信息列表,支持删除 会员列表:查看所有注册会员信息,支持删除 资讯分类:录入、修改、查看、删除资讯分类 录入资讯:录入资讯标题、内容等信息 管理资讯:查看已...
    99+
    2023-09-03
    java 前端 小程序
  • 课程设计之学生选课管理系统
    一、课程设计任务 完成学生选课管理系统的开发 二、需求描述 本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所...
    99+
    2023-10-03
    java mysql 数据库
  • 宾馆客房管理系统Mysql数据库课程设计
    引 言 随着全球经济一体化使酒店业客源更加丰富多样化,市场更加广阔多渠道的同时,酒店业更面临着日趋激烈的竞争环境和不断攀升的客户期望,迫使业内人士不断进一步寻求扩大酒店销售、改进服务质量、降低管理成本和提升客户满意度的新法宝来增强酒店的核心...
    99+
    2023-09-11
    数据库 mysql 数据库开发 navicat
  • Java图书管理系统,课程设计必用(源码+文档)
    目录设计准备一、系统开发目的和意义二、系统总体设计主页:系统主界面:图书添加页面:图书表单操作页面:搜索页面:维护界面三、数据库四、重要源码改变系统默认字体:重置事件处理:搜索事件处...
    99+
    2022-11-12
  • C语言如何实现图书馆管理系统
    这篇文章主要介绍了C语言如何实现图书馆管理系统,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。全部代码如下:#include <stdio.h>#incl...
    99+
    2023-06-20
  • php图书馆管理系统的设计与实现毕业设计-附源码
    摘 要 大数据时代下,数据呈爆炸式地增长。为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势。在图书馆的要求下,开发一款整体式结构的图书馆管理系统,将复杂的系统进行拆分,能够实...
    99+
    2023-09-14
    php java spring boot idea myeclipse
  • 如何用C++实现简单图书馆管理系统
    这篇文章主要介绍“如何用C++实现简单图书馆管理系统”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“如何用C++实现简单图书馆管理系统”文章能帮助大家解决问题。功能如下:1,添加书籍2,删除书籍(可删...
    99+
    2023-06-29
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作