21xrx.com
2024-12-22 22:25:54 Sunday
登录
文章检索 我的文章 写文章
C++课程设计:题目及代码
2023-07-01 00:20:40 深夜i     --     --
C++ 课程设计 题目 代码

C++是一门功能强大的编程语言,被广泛用于各种软件开发领域。在学习C++过程中,课程设计是一个非常重要的环节,可以帮助学生深入理解语言的使用方法和实践技巧。在本篇文章中,我们将介绍一些C++课程设计的题目和代码,供大家参考。

1. 图书馆管理系统

这是一个常见的C++课程设计题目,要求学生设计一个图书馆管理系统。该系统可以实现图书的借阅、归还、续借等功能,同时还需要支持读者的注册和登录。此外,该系统还需要支持管理员的登录和对图书信息进行管理。

代码示例:

#include

#include

#include

#include

using namespace std;

struct Book

  string name;

  string author;

  string publisher;

  string ISBN;

  int amount;

  int borrowed;

;

struct User

  string name;

  string password;

  bool isAdmin;

  vector borrowedBooks;

;

// 读取用户信息文件

void loadUserFile(vector & users) {

  ifstream fin("users.txt");

  string line;

  while(getline(fin,line)) {

    User user;

    int begin=0,end;

    end=line.find(",");

    user.name=line.substr(begin,end-begin);

    begin=end+1;

    end=line.find(",",begin);

    user.password=line.substr(begin,end-begin);

    begin=end+1;

    end=line.find(",",begin);

    user.isAdmin=stoi(line.substr(begin,end-begin));

    while(true) {

      begin=end+1;

      end=line.find(",",begin);

      if(end==string::npos) break;

      Book book;

      book.ISBN=line.substr(begin,end-begin);

      begin=end+1;

      end=line.find(",",begin);

      book.amount=stoi(line.substr(begin,end-begin));

      begin=end+1;

      end=line.find(",",begin);

      book.borrowed=stoi(line.substr(begin,end-begin));

      begin=end+1;

      end=line.find(",",begin);

      book.name=line.substr(begin,end-begin);

      begin=end+1;

      end=line.find(",",begin);

      book.author=line.substr(begin,end-begin);

      begin=end+1;

      end=line.find(",",begin);

      book.publisher=line.substr(begin,end-begin);

      user.borrowedBooks.push_back(book);

    }

    users.push_back(user);

  }

  fin.close();

}

// 保存用户信息到文件

void saveUserFile(vector & users) {

  ofstream fout("users.txt");

  for(int i=0;i

    fout< <<","< <<","< <<",";

    for(int j=0;j

      fout< <<","

        < <<","

        < <<","

        < <<","

        < <<","

        < <<",";

    }

    fout<

  }

  fout.close();

}

// 根据ISBN查找图书

Book* findBookByISBN(vector & books,string ISBN) {

  for(int i=0;i

    if(books[i].ISBN==ISBN) {

      return &books[i];

    }

  }

  return nullptr;

}

// 用户注册

void registerUser(vector & users) {

  string name,password;

  cout<<"请输入用户名:";

  cin>>name;

  for(int i=0;i

    if(users[i].name==name) {

      cout<<"该用户名已被注册,请重新输入!"<

      return;

    }

  }

  cout<<"请输入密码:";

  cin>>password;

  User user={

    name,

    password,

    false

  };

  users.push_back(user);

  saveUserFile(users);

  cout<<"注册成功!"<

}

// 用户登录

User* loginUser(vector & users) {

  string name,password;

  cout<<"请输入用户名:";

  cin>>name;

  for(int i=0;i

    if(users[i].name==name) {

      cout<<"请输入密码:";

      cin>>password;

      if(users[i].password==password) {

        cout<<"登录成功!"<

        return &users[i];

      }

      else {

        cout<<"密码错误!"<

        return nullptr;

      }

    }

  }

  cout<<"该用户名不存在!"<

  return nullptr;

}

// 图书借阅

void borrowBook(vector & books,User* user) {

  string ISBN;

  cout<<"请输入要借阅的图书ISBN号:";

  cin>>ISBN;

  Book* p=findBookByISBN(books,ISBN);

  if(p==nullptr) {

    cout<<"该图书不存在!"<

    return;

  }

  if(p->borrowed>=p->amount) {

    cout<<"该图书已全部借出!"<

    return;

  }

  if(user->borrowedBooks.size()>=3) {

    cout<<"您已经借阅了3本图书,请先归还图书!"<

    return;

  }

  p->borrowed++;

  Book book={

    p->name,

    p->author,

    p->publisher,

    p->ISBN,

    p->amount,

    1

  };

  user->borrowedBooks.push_back(book);

  saveUserFile(users);

  cout<<"借阅成功!"<

}

// 图书归还

void returnBook(vector & books,User* user) {

  string ISBN;

  cout<<"请输入要归还的图书ISBN号:";

  cin>>ISBN;

  for(int i=0;i borrowedBooks.size();i++) {

    if(user->borrowedBooks[i].ISBN==ISBN) {

      Book* p=findBookByISBN(books,ISBN);

      if(p==nullptr) {

        cout<<"归还失败,该图书不存在!"<

        return;

      }

      p->borrowed--;

      user->borrowedBooks.erase(user->borrowedBooks.begin()+i);

      saveUserFile(users);

      cout<<"归还成功!"<

      return;

    }

  }

  cout<<"该图书未被借阅!"<

}

// 管理员登录

User* loginAdmin(vector & users) {

  string name,password;

  cout<<"请输入管理员用户名:";

  cin>>name;

  for(int i=0;i

    if(users[i].name==name) {

      cout<<"请输入密码:";

      cin>>password;

      if(users[i].password==password && users[i].isAdmin) {

        cout<<"登录成功!"<

        return &users[i];

      }

      else {

        cout<<"密码错误或非管理员账户!"<

        return nullptr;

      }

    }

  }

  cout<<"该管理员账户不存在!"<

  return nullptr;

}

// 添加图书

void addBook(vector & books) {

  string name,author,publisher,ISBN;

  int amount;

  cout<<"请输入图书名:";

  cin>>name;

  cout<<"请输入作者:";

  cin>>author;

  cout<<"请输入出版社:";

  cin>>publisher;

  cout<<"请输入ISBN号:";

  cin>>ISBN;

  cout<<"请输入数量:";

  cin>>amount;

  Book book={

    name,

    author,

    publisher,

    ISBN,

    amount,

    0

  };

  books.push_back(book);

  saveBooksFile(books);

  cout<<"添加成功!"<

}

// 删除图书

void deleteBook(vector & books) {

  string ISBN;

  cout<<"请输入要删除的图书ISBN号:";

  cin>>ISBN;

  for(int i=0;i

    if(books[i].ISBN==ISBN) {

      books.erase(books.begin()+i);

      saveBooksFile(books);

      cout<<"删除成功!"<

      return;

    }

  }

  cout<<"该图书不存在!"<

}

// 修改图书信息

void modifyBook(vector & books) {

  string ISBN,name,author,publisher;

  int amount;

  cout<<"请输入要修改的图书ISBN号:";

  cin>>ISBN;

  Book* p=findBookByISBN(books,ISBN);

  if(p==nullptr) {

    cout<<"该图书不存在!"<

    return;

  }

  cout<<"请输入新的图书名:";

  cin>>name;

  cout<<"请输入新的作者:";

  cin>>author;

  cout<<"请输入新的出版社:";

  cin>>publisher;

  cout<<"请输入新的数量:";

  cin>>amount;

  p->name=name;

  p->author=author;

  p->publisher=publisher;

  p->amount=amount;

  saveBooksFile(books);

  cout<<"修改成功!"<

}

int main() {

  vector books;

  loadBooksFile(books);

  vector users;

  loadUserFile(users);

  while(true) {

    cout<<"欢迎使用图书馆管理系统!"<

    cout<<"1. 注册"<

    cout<<"2. 登录"<

    cout<<"3. 借阅图书"<

    cout<<"4. 归还图书"<

    cout<<"5. 管理员登录"<

    cout<<"6. 退出"<

    int choice;

    cin>>choice;

    switch(choice) {

      case 1:

        registerUser(users);

        break;

      case 2:

        loginUser(users);

        break;

      case 3:

        borrowBook(books,loginUser(users));

        break;

      case 4:

        returnBook(books,loginUser(users));

        break;

      case 5:

        User* admin=loginAdmin(users);

        if(admin==nullptr) break;

        cout<<"1. 添加图书"<

        cout<<"2. 删除图书"<

        cout<<"3. 修改图书信息"<

        int choice2;

        cin>>choice2;

        switch(choice2) {

          case 1:

            addBook(books);

            break;

          case 2:

            deleteBook(books);

            break;

          case 3:

            modifyBook(books);

            break;

          default:

            break;

        }

        break;

      case 6:

        return 0;

      default:

        break;

    }

  }

  return 0;

}

2. 数独游戏

数独游戏是一个经典的益智游戏,C++课程设计中也是一个比较有挑战性和趣味性的项目。该游戏要求填写一个9x9的数字矩阵,其中每行、每列和每个3x3的小矩形内的数字都不能重复。

代码示例:

#include

#include

#include

using namespace std;

int board[9][9]={

  {0, 0, 0, 2, 6, 0, 7, 0, 1},

  {6, 8, 0, 0, 7, 0, 0, 9, 0},

  {1, 9, 0, 0, 0, 4, 5, 0, 0},

  {8, 2, 0, 1, 0, 0, 0, 4, 0},

  {0, 0, 4, 6, 0, 2, 9, 0, 0},

  {0, 5, 0, 0, 0, 3, 0, 2, 8},

  {0, 0, 9, 3, 0, 0, 0, 7, 4},

  {0, 4, 0, 0, 5, 0, 0, 3, 6},

  {7, 0, 3, 0, 1, 8, 0, 0, 0}

};

// 检查指定行中是否有重复数字

bool checkRow(int row,int num) {

  for(int i=0;i<9;i++) {

    if(board[row][i]==num) return false;

  }

  return true;

}

// 检查指定列中是否有重复数字

bool checkCol(int col,int num) {

  for(int i=0;i<9;i++) {

    if(board[i][col]==num) return false;

  }

  return true;

}

// 检查指定3x3的小矩形中是否有重复数字

bool checkSquare(int row,int col,int num) {

  int r=row/3*3,c=col/3*3;

  for(int i=r;i

    for(int j=c;j

      if(board[i][j]==num) return false;

    }

  }

  return true;

}

// 检查填写数字的合法性

bool checkValidity(int row,int col,int num) {

  return checkRow(row,num) && checkCol(col,num) && checkSquare(row,col,num);

}

// 随机生成数独矩阵

void generateBoard() {

  srand(time(nullptr));

  for(int i=0;i<81;i++) {

    int row=i/9,col=i%9;

    if(board[row][col]==0) {

      int num=rand()%9+1;

      while(!checkValidity(row,col,num)) num=rand()%9+1;

      board[row][col]=num;

    }

  }

}

// 打印数独矩阵

void printBoard() {

  cout<<"┏━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┳━━━┓"<

  for(int i=0;i<9;i++) {

    cout<<"┃";

    for(int j=0;j<9;j++) {

      if(board[i][j]==0) cout<<"  ┃";

      else cout<<" "< <<" ┃";

    }

    cout<

    if(i<8) cout<<"┣━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━╋━━━┫"<

  }

  cout<<"┗━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┻━━━┛"<

}

// 游戏结束检查

bool checkGameOver() {

  for(int i=0;i<9;i++) {

    for(int j=0;j<9;j++) {

      if(board[i][j]==0) return false;

    }

  }

  return true;

}

int main() {

  generateBoard();

  while(true) {

    printBoard();

    if(checkGameOver()) {

      cout<<"Congratulations! You win!"<

      break;

    }

    int row,col,num;

    cout<<"请输入要填写数字的行、列和数字,用空格隔开:";

    cin>>row>>col>>num;

    row--;

    col--;

    if(!checkValidity(row,col,num)) {

      cout<<"填写错误!"<

    }

    else {

      board[row][col]=num;

    }

  }

  return 0;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复