【功能要求】
1、系统以菜单方式工作,
2、图书信息录入功能(图书信息用文件保存)--输入。
3、图书信息浏览功能-—输出。
4、图书信息查询功能(查询方式)有:按书名查询 和按作者名查询两种方式。
5、图书信息的删除与修改(可选项)。
【难点与提示】
根据题目要求,应当把图书信息用结构体形式输入,再定义一个全局变量和文件指针进行整个程序的运行,然后把图书信息送到文件中,所以应该提供一个结构体和文件的输入输出等操作;在程序中需实现图书信息输入,浏览,查询,删除和修改等功能的操作,建立相应的子函数来实现;另外还需提供键盘式选择菜单实现功能,在运行时达到所要目的。
设计了一个图书信息文件,输入新图书信息,浏览图书,修改,删除图书等一些操作时
在图书信息文件上运行。运用C语言的文件功能,此文件也是整个程序的主线。
图32.1 给出了图书信息系统主菜单,图32.2给出了图书查询界面。
我可以写
https://blog.csdn.net/wangmeng0804/article/details/127655704?spm=1001.2014.3001.5502
可参考我博客内容 大同小异
仅供参考:
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
stringstream ss; //全局变量,后面用来将int类型数据转换成字符串类型
class Reader {
private:
string readerName; //读者姓名
int readerAge; //读者年龄
string readerGender;//读者性别
string readerCode; //读者编号
public:
Reader() {}//默认构造函数
Reader(string name, int age, string gender, string code):readerName(name), readerAge(age), readerGender(gender), readerCode(code) {}//构造函数
string getName() {//获取读者姓名
return readerName;
}
int getAge() {//获取读者年龄
return readerAge;
}
string getGender() {//获取读者性别
return readerGender;
}
string getCode() {//获取读者编号
return readerCode;
}
void setCode(string code) {//设置读者编号
readerCode = code;
}
void setName(string name) {//设置读者姓名
readerName = name;
}
void setAge(int age) {//设置读者年龄
readerAge = age;
}
void setGender(string gender) {//设置读者性别
while (true) { //用来判断性别的属性值是否输入正确,不正确则重新输入到正确为止
if (gender == "男" || gender == "女") {
readerGender = gender;
break;//
} else {
cout<<"性别属性值不对,请重新输入:"<<endl;
cin>>gender;
}
}
}
};
class Books {
private:
string booksName; //书名
string booksID; //图书id
int booksCount; //图书数量
public:
Books() {}//默认构造函数
Books(string name, string id, int count):booksName(name), booksID(id), booksCount(count) {}//构造函数
string getName() {//获取图书名字
return booksName;
}
string getID() {//获取图书编号
return booksID;
}
int getCount() {//获取图书数量
return booksCount;
}
void setID(string id) {//设置图书id
booksID = id;
}
void addBooksCount(int count) {//添加图书数量
int bCount = getCount();//获取修改前图书的数量
bCount += count;
booksCount = bCount;
}
void deleteBooksCount(int count) {//减少图书数量
int bCount = getCount();//获取修改前图书的数量
bCount -= count;
booksCount = bCount;
}
void showBooksMessage() {//展示图书信息
int count = getCount();//获取图书数量
//下面两步操作将int类型转换为字符串类型
ss<<count;
string s = ss.str();
cout<<"该图书名字是:" + getName() + "---编号是:" + getID() + "---数量为:" + s + "本。"<<endl;
}
};
class Library {
private:
string libraryName; //图书馆名字
void initLibrary() {//初始化图书馆
int i;
for (i = 0; i < 100; i++) {
books[i].setID(" ");//初始化图书馆所有图书id为“ ”,初始值统一,方便后续数组增删操作
}
for (i = 0; i < 100; i++) {
readers[i].setCode(" ");//初始化图书馆所有读者编号为“ ” ,初始值统一,方便后续数组增删操作
}
libraryName = "我的图书馆";
}
public:
static Reader readers[100]; //用来存储读者对象
static Books books [100]; //用来存储图书对象
Library() {//构造函数
initLibrary();
}
void bringBooksCome(Books books) {//图书馆引入图书
int i;
for (i = 0; i < 100; i++) {
if (books.getID() == Library::books[i].getID()) {//根据图书id值判断,存在则说明有该图书,直接在原来数量的基础上增加数量
Library::books[i].addBooksCount(books.getCount());
//以下两步将int转换为string
ss<<Library::books[i].getCount();
string s = ss.str();
cout<<"该图书已经存在,数量增加"+ s +"本。"<<endl;
} else if (books.getID() != Library::books[i].getID() && Library::books[i].getID() != " ") {//引入的图书的id值和图书馆内不一样
continue;// 并且当前图书馆内的图书id值不是“”,说明这个索引处有图书,直接跳过本次循环
} else if (books.getID() != Library::books[i].getID() && Library::books[i].getID() == " ") {//引入的图书的id值和图书馆内不一样
// 但是当前图书馆内的图书id值是“”,说明这个索引处没有图书,将引入的图书添加至这个索引处
Library::books[i] = books;//直接传图书对象
//以下两步将int转换为string
ss<<Library::books[i].getCount();
string s = ss.str();
cout<<"该图书不存在,现已经添加该图书到图书馆中,数量增加"+ s +"本。"<<endl;
}
}
}
void takeBooksGo(Reader reader) {//读者借走图书
int i;
for (i = 0; i < 100; i++) {
if (reader.getCode() == readers[i].getCode()) {//根据读者编号判断,相等则说明已注册该读者,可以借阅图书
cout<<"该读者已经注册账号,可以借阅图书。"<<endl;
cout<<"下面给出您图书编号对应的图书以及图书的存储数量"<<endl;
int j;
for (j = 0; j < 100; j++) {//将图书馆图书信息提供给读者,指导读者选择图书
//将int转换为string
ss<<Library::books[i].getCount();
string s = ss.str();
cout<<books[j].getID() + "---" + books[j].getName() + "---" + s + "本。"<<endl;
}
cout<<"请输入您想要借阅的图书编号:"<<endl;
string booksTakeByReader;//读者想要借的图书的编号
cin>>booksTakeByReader;
int k;
for (k = 0; k < 100; k++) {//根据图书编号判断,编号存在且图书数量大于0则可以借阅
if (booksTakeByReader == books[k].getID() && books[k].getCount() > 0) {
books[k].deleteBooksCount(1);//借阅成功,库存数量减1
} else if (booksTakeByReader == books[k].getID() && books[k].getCount() == 0) {//编号存在且图书数量等于0,不可以借阅
cout<<"该图书已经没有库存,借阅失败!"<<endl;
}
}
}
}
}
void booksBackFromReader(Reader reader) {//读者归还图书
int i;
for (i = 0; i < 100; i++) {
cout<<"请输入您想要归还的图书名:"<<endl;
string name;
cin>>name;
if (name == Library::books[i].getName()) {//根据书名来判断,存在则读者可以归还,数量加1
Library::books[i].addBooksCount(1);
cout<<"感谢您归还图书,欢迎再次使用"<<endl;
} else if (name != Library::books[i].getName()) {//不存在说明图书编号被删除,或者没有这类书籍,总之已经不存在
cout<<"您归还的图书不存在或者已经被图书管理员删除!"<<endl;
break;
}
}
}
};
Reader Library::readers[100] = {}; //用来存储读者对象
Books Library::books [100] = {}; //用来存储图书对象
int main() {
Library library; //创建图书馆对象,构造函数内调用了初始化函数
while (true) {
cout<<"欢迎进入图书馆系统,进入读者管理界面请输入1,进入图书管理界面请输入2,退出请输入其他数字"<<endl;
int comeNum;//进入其他系统或者退出图书馆系统的选项
cin>>comeNum;
if (comeNum == 1) {//读者管理界面
while (true) {
cout<<"欢迎进入读者管理界面"<<endl;
int readerCode;//操作读者信息的选项
cout<<"添加读者信息请输入1,删除读者信息请输入2,修改读者信息请输入3,退出读者管理界面请输入其他数字"<<endl;
cin>>readerCode;
if (readerCode == 1) {//添加读者信息
cout<<"请输入读者姓名:"<<endl;
string name;
cin>>name;
cout<<"请输入读者年龄:"<<endl;
int age;
cin>>age;
cout<<"请输入读者性别:"<<endl;
string gender;
cin>>gender;
cout<<"请输入读者编号:"<<endl;
string code;
cin>>code;
//创建读者对象
Reader reader(name, age, gender, code);
int i;
for (i = 0; i < 100; i++) {
if (reader.getCode() == Library::readers[i].getCode()) {//根据读者编号判断,若存在则退出添加读者操作的循环
cout<<"该读者已经存在!"<<endl;
break;
} else if (reader.getCode() != Library::readers[i].getCode() && Library::readers[i].getCode() != " ") {//想要添加的读者编号和图书馆的存储的读者编号不一致
// 并且该索引处读者编号不为“”,说明此索引已经有读者,则跳出本次循环
continue;
} else {//想要添加的读者编号和图书馆的存储的读者编号不一致,并且该索引处读者编号为“”,说明此索引没有读者,且可以说明该数组内也没有该读者,可以进行添加
Library::readers[i] = reader;
cout<<"成功添加该读者,欢迎再次使用"<<endl;
break;
}
}
} else if (readerCode == 2) {//删除读者信息
cout<<"请输入读者编号:"<<endl;
string code;
cin>>code;
int i;
for (i = 0; i < 100; i++) {
if (Library::readers[i].getCode() == code) {//根据读者编号判断,若存在则删除读者
int j;
for (j = i; j < 100; j++) {//将下一个索引处的读者对象添加到该索引处,并且循环此操作
Library::readers[j] = Library::readers[j + 1];
}
cout<<"添加成功!"<<endl;
break;// //添加成功退出for循环 (删除操作)
} else if (Library::readers[i].getCode() != code && Library::readers[i].getCode() != " ") { //编号不一致,并且该索引处存储的编号不为“”,则跳出本次循环
continue;
} else {//编号不一致,并且该索引处存储的编号为“”,可以说明本数组中不存在该读者,
cout<<"该读者不存在!"<<endl;
break; //退出for循环(删除操作)
}
}
} else if (readerCode == 3) {//修改读者信息-1
cout<<"请输入读者编号:"<<endl;
string code;
cin>>code;
int i;
for (i = 0; i < 100; i++) {
if (Library::readers[i].getCode() == code) {//根据读者编号判断,若存在则进入修改读者信息页面
cout<<"如果您想修改读者姓名请输入1,修改读者年龄请输入2,修改读者性别请输入3,退出请输入其他数字"<<endl;
int flushNum;//修改读者信息选项
while (true) {
cin>>flushNum;
if (flushNum == 1) {//修改读者姓名
cout<<"请输入您想要修改的名字"<<endl;
string flushName;
cin>>flushName;
Library::readers[i].setName(flushName);
} else if (flushNum == 2) {//修改读者年龄
cout<<"请输入您想要修改的年龄"<<endl;
string flushAge;
cin>>flushAge;
Library::readers[i].setName(flushAge);
} else if (flushNum == 3) {//修改读者性别
cout<<"请输入您想要修改的性别,男或女"<<endl;
string flushGender;
cin>>flushGender;
Library::readers[i].setName(flushGender);
} else {//退出修改操作
cout<<"修改成功!"<<endl;
break;// //修改成功,退出可修改页面(死循环)
}
}
} else if (Library::readers[i].getCode() != code && Library::readers[i].getCode() != " ") {//编号不一致并且该索引处编号不为“”,
// 说明该索引处有其他读者,则跳过本次循环
continue;
} else {//编号不一致并且该索引处为“” 说明本数组中没有该读者信息
cout<<"该读者不存在!"<<endl;
break;// //退出修改页面(for循环)
}
}
} else {//退出读者管理界面
cout<<"成功退出读者管理界面,欢迎再次使用"<<endl;
break;//
}
}
} else if (comeNum == 2) {//图书管理界面
cout<<"欢迎进入图书管理界面"<<endl;
while (true) {
int booksCode;
cout<<"添加图书信息请输入1,删除图书信息请输入2,退出图书管理界面请输入其他数字"<<endl;
cin>>booksCode;
if (booksCode == 1) {//添加图书信息-1
cout<<"请输入图书名字"<<endl;
string name;
cin>>name;
cout<<"请输入图书编号"<<endl;
string id;
cin>>id;
cout<<"请输入图书数量"<<endl;
int count;
cin>>count;
int i;
for (i = 0; i < 100; i++) {
if (Library::books[i].getID() == id && Library::books[i].getName() == name) {//根据图书id值判断。若id相等并且书名一致则可以进行添加图书操作
Library::books[i].addBooksCount(count);
cout<<"添加成功!"<<endl;
break;// //则退出添加图书页面
} else if (Library::books[i].getID() == id && Library::books[i].getName() != " " && Library::books[i].getName() != name) {//若id相等但是书名不一致
// 说明该id被占用,则退出添加图书页面
cout<<"该id值已经被占用!"<<endl;
break;//
} else if (Library::books[i].getID() != id && Library::books[i].getID() != " " ) {//id不相等,并且该索引处不为“”说明该索引出有图书,则跳过本次循环
continue;
}
}
} else if (booksCode == 2) {//删除图书信息
cout<<"请输入图书编号"<<endl;
string id;
cin>>id;
int i;
for (i = 0; i < 100; i++) {
if (Library::books[i].getID() == id) {//根据图书id进行判断,存在则进行删除操作
int j;
for (j = i; j < 100; j++) {
Library::books[j] = Library::books[j + 1];//将下一索引处的图书信息存储到当前索引处,并且循环操作此步骤
}
cout<<"删除成功!"<<endl;
break;// //删除成功,退出删除图书界面
} else {//id不一致,跳出本次循环
cout<<"图书id值可能不存在!"<<endl;
continue;
}
}
} else {//退出图书管理界面-1
cout<<"成功退出图书管理界面,欢迎再次使用"<<endl;
break;//
}
}
} else break;//
}
}
#include <iostream>
#include <string>
using namespace std;
#define MAX 1000
struct Person {
string name;
int price;
string number;
};
struct Arraybooks {
struct Person book[MAX];
int length;
};
void mean();
int outSystem();
void addBooks(Arraybooks* abs);
void dalateBooks(Arraybooks* abs);
int isExist(Arraybooks* abs, string name);
void CheckBook(Arraybooks* abs);
void cleanbooks(Arraybooks* abs);
void showbooks(Arraybooks* abs);
void changebooks(Arraybooks* abs);
int main() {
int x;
Arraybooks abs;
abs.length = 0;
while (true) {
mean();
cin >> x;
switch (x) {
case 1:
addBooks(&abs);
break;
case 2:
dalateBooks(&abs);
break;
case 3:
CheckBook(&abs);
break;
case 4:
cleanbooks(&abs);
break;
case 5:
changebooks(&abs);
break;
case 6:
showbooks(&abs);
break;
case 0:
outSystem();
break;
}
}
return 0;
}
void addBooks(Arraybooks* abs) {
if (abs->length >= MAX) {
cout << "书籍已满" << endl;
}
else {
string name;
cout << "请输入书籍的名字: " << endl;
cin >> name;
abs->book[abs->length].name = name;
int price;
cout << "请输入书的价格: " << endl;
cin >> price;
abs->book[abs->length].price = price;
string num;
cout << "请输入书的编号: " << endl;
cin >> num;
abs->book[abs->length].number = num;
abs->length++;
cout << "添加成功" << endl;
}
}
int isExist(Arraybooks* abs, string name) {
for (int i = 0; i < abs->length; ++i) {
if (abs->book[i].name == name) {
return i;
}
}
return -1;
}
void dalateBooks(Arraybooks* abs) {
cout << "请输入你要删除的书籍" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1 && ret != abs->length - 1) {
abs->book[ret].name = abs->book[ret + 1].name;
abs->book[ret].number = abs->book[ret + 1].number;
abs->book[ret].price = abs->book[ret + 1].price;
for (int i = ret + 2; i < abs->length; ++i) {
abs->book[i - 1].name = abs->book[i].name;
abs->book[i - 1].number = abs->book[i].number;
abs->book[i - 1].price = abs->book[i].price;
abs->length--;
}
cout << "删除成功" << endl;
}
else if(ret != 1 && ret == abs->length - 1) {
abs->length--;
}
else {
cout << "查无此书" << endl;
}
}
void CheckBook(Arraybooks* abs) {
cout << "输入你要查找的书籍" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) {
cout << "书名为:" << abs->book[ret].name << "\t";
cout << "书价格为:" << abs->book[ret].price << "\t";
cout << "书编号为:" << abs->book[ret].number << endl;
}
else {
cout << "查无此书" << endl;
}
}
void cleanbooks(Arraybooks* abs) {
abs->length = 0;
cout << "清理完成" << endl;
}
void changebooks(Arraybooks* abs) {
cout << "输入你要修改的图书" << endl;
string name;
cin >> name;
int ret = isExist(abs, name);
if (ret != -1) {
cout << "请输入名字: " << endl;
string name;
cin >> name;
abs->book[ret].name = name;
cout << "请输入价格: " << endl;
int price;
cin >> price;
abs->book[ret].price = price;
cout << "请输入编号: " << endl;
string num;
cin >> num;
abs->book[ret].number = num;
}
else {
cout << "查无此书" << endl;
}
}
void showbooks(Arraybooks* abs) {
if (abs->length == 0) {
cout << "书架为空" << endl;
}
else {
for (int i = 0; i < abs->length; ++i) {
cout << "书籍名字 : " << abs->book[i].name << "\t";
cout << "书籍价格 : " << abs->book[i].price << "\t";
cout << "书籍编号 : " << abs->book[i].number << endl;
}
}
}
int outSystem() {
cout << "欢迎下次使用" << endl;
return 0;
}
void mean() {
cout << "*************************" << endl;
cout << "*******1、加入图书********" << endl; //OK
cout << "*******2、按名删除图书*****" << endl;//OK
cout << "*******3、按名查找图书*****" << endl;//OK
cout << "*******4、清空图书架*******" << endl;//OK
cout << "*******5、修改图书名*******" << endl;
cout << "*******6、显示图书架*******" << endl;//OK
cout << "*******0、退出系统*********" << endl; //OK
cout << "**************************" << endl;
}