6.23 图书期刊信息管理系统
【问题详述】
阅览室对所收藏的图书与期刊信息实现计算机管理,为用户提供图书信息的查询。阅览室陈列若干工具书、期刊和其他书籍供读者在阅览室内查阅。同一刊物可以有去年和当年的多期同时放在书架上。阅览室的图书信息使用文件保存,按照书名排序。有新书刊到达时,工作人员将新书的信息添加到文件中。书籍的信息包括书刊编号、书名、出版单位、出版时间、价格、书籍分类号等,其中,期刊的书名包括刊物名称与年份期数,例如:读者-2014-21。每年的7月份开始,上一年的期刊将陆续从书架上撒走,装订成册,变成合订本上架,同时, 9避 图书信息文件中要删去这些已经撤走的过期期刊的信息,添加合订本期刊的信息,例如,书
名为读者-2014-合。
【程序要求】
图书期刊信息管理系统提供对书籍信息的录入与删除功能,提供图书信息的浏览与查询功能。其中,查询可以是对书名、出版单位、书籍分类号的模糊查询。例如,按书名查询时,输 用入“计算”,可以查到书名中含有“计算”字样的书刊,如计算方法(书籍)、微型计算机(期刊)、计
算机工程(期刊)、英汉计算技术词典(工具书)等,这些都是符合条件的查询结果。再如,按照出版单位查询时,输入“大学”进行查询,则将阅览室收藏的所有大学出版社出版的书刊名称一一列出。按书籍分类号查询时,只要分类号前几位与所提供的相符即是符合条件。
次
代码如下,有帮助的话采纳一下哦!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define filename "file.txt"
typedef struct book {
int num;//书刊编号
char name[50];//书名
char chuban[50];//出版单位
int year;//出版时间年
int month;//出版时间月
int price;//价格
char fenlei[10];//书籍分类号
struct book *next;
}Book;
Book *creat1();//读取文件中的信息存入到链表中
Book *creat2();//手动增加信息创建链表
void output(Book *head);//显示所有结点信息
Book *Delete(Book *head);//删除链表中的一个结点信息
Book *Add(Book *head);//增加结点信息
Book *Sort(Book *head);//排序
void Refer1(Book *head);//输入书名查询结点信息
void Refer2(Book *head);//输入出版单位查询结点信息
void Refer3(Book *head);//输入书籍分类号查询结点信息
//Book *Update(Book *head);//更新结点信息
void Save(Book *head);//将链表中的信息保存至文件中
int main()
{
Book *head;
int a, b, w = 1;
while (w)
{
printf("*****************************************\n");
printf("* 图书期刊信息管理系统 *\n");
printf("* 1.书籍信息录入(从文件中读取). *\n");
printf("* 2.书籍信息录入(手动增加). *\n");
printf("*****************************************\n");
scanf("%d", &a);
if (a == 1)
{
head = creat1(); w = 0;
}
else if (a == 2)
{
head = creat2();
head=Sort(head);
w = 0;
}
else break;
}
while (1)
{
system("cls");
printf("*****************************************\n");
printf("* 图书期刊信息管理系统 *\n");
printf("* 1.书籍信息增加. *\n");
printf("* 2.书籍信息删除. *\n");
printf("* 3.书籍信息的浏览. *\n");
printf("* 4.书籍信息的查询(按书名) *\n");
printf("* 5.书籍信息的查询(按出版单位) *\n");
printf("* 6.书籍信息的查询(按书籍分类号 *\n");
printf("* 7.退出. *\n");
printf("*****************************************\n");
scanf("%d", &b);
switch (b)
{
case 1:
head = Add(head);
head = Sort(head);
system("pause");
break;
case 2:
head = Delete(head);
system("pause");
break;
case 3:
output(head);
system("pause");
break;
case 4:
Refer1(head);
system("pause");
break;
case 5:
Refer2(head);
system("pause");
break;
case 6:
Refer3(head);
system("pause");
break;
case 7:
Save(head);
return 0;
default:
printf("输入的信息错误,请重新输入!\n");
break;
}
}
return 0;
}
Book *creat1()//读取文件中的信息存入到链表中
{
FILE *fp;
int k = 0; Book st, *p, *p0 = NULL, *head = NULL;
fp = fopen(filename, "r");
if (fp == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while (!feof(fp))
{
fscanf(fp, "%d%s%s%d%d%d%s", &st.num, st.name, st.chuban, &st.year, &st.month, &st.price, st.fenlei);
p = (Book *)malloc(sizeof(Book));
*p = st;
(*p).next = NULL;
if (p0 == NULL)
{
head = p; p0 = p;
}
else {
(*p0).next = p; p0 = p;
}
}
fclose(fp);
printf("录入成功!\n");
system("pause");
return head;
}
Book *creat2()//手动增加信息创建链表
{
Book *p, *head = NULL, *p0 = NULL;
Book pnew;
Book *q = head;
char ch;
int w = 1;
while (w)
{
printf("请输入增加的书籍信息\n");
printf("书刊编号:");
scanf("%d", &pnew.num);
printf("书名:");
scanf("%s", pnew.name);
printf("出版单位:");
scanf("%s", pnew.chuban);
printf("出版时间:");
scanf("%d%d", &pnew.year, &pnew.month);
printf("价格:");
scanf("%d", &pnew.price);
printf("书籍分类:");
scanf("%s", pnew.fenlei);
while (q!= NULL)//
{
if ((*q).num == pnew.num)
{
printf("您输入的书籍信息已经存在!请重新输入\n");
system("pause");
break;
}
q = (*q).next;
}
if (q != NULL)continue;
else{
p = (Book *)malloc(sizeof(Book));
*p = pnew;
(*p).next = NULL;
if (p0 == NULL)
{
head = p; p0 = p;
}
else {
(*p0).next = p; p0 = p;
}
printf("插入成功!\n");
printf("是否继续插入(Y/N)");
scanf("\n%c", &ch);
if (ch =='N' || ch == 'n')
w = 0;
}
}
return head;
}
void Save(Book *head)//将链表中的信息保存至文件中
{
Book *p = head;
FILE *fp;
fp = fopen(filename, "w");
if (fp == NULL)
{
printf("打开文件失败!\n");
exit(0);
}
while ((*p).next != NULL)
{
fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%s\n", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
p = (*p).next;
}
fprintf(fp, "%d\t%s\t%s\t%d\t%d\t%d\t%s", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
fclose(fp);
}
void output(Book *head)
{
Book *p = head;
if (p != NULL)
{
printf("所有图书信息如下:\n");
printf("编号\t书名\t出版单位\t出版时间\t价格\t书籍分类\n");
do {
printf("%d\t%10s\t%10s\t%d-%d\t%d\t%s\n", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
p = (*p).next;
} while (p != NULL);
printf("\n");
}
else printf("书籍信息为空!\n");
}
Book* Delete(Book *head)//删除链表中的一个结点信息
{
Book *p = head, *p0 = NULL;
int n;
printf("请输入要删除的书刊编号:");
scanf("%d", &n);
while (p)
{
if ((*p).num == n)
{
if (p == head)head = (*p).next;
else if ((*p).next == NULL)(*p0).next = NULL;
else (*p0).next = (*p).next;
free(p);
break;
}
else
{
p0 = p;
p = (*p).next;
}
}
if (p == NULL)printf("找不到信息!\n");
else printf("删除成功!\n");
return head;
}
//
Book* Add(Book *head)//增加结点信息
{
Book *p = head;
Book *pnew;
Book *q= head;
int w = 1;
while (w)
{
pnew = (Book*)malloc(sizeof(Book));
printf("请输入增加的书籍信息\n");
printf("书刊编号:");
scanf("%d", &(*pnew).num);
printf("书名:");
scanf("%s", (*pnew).name);
printf("出版单位:");
scanf("%s", (*pnew).chuban);
printf("出版时间:");
scanf("%d%d", &(*pnew).year, &(*pnew).month);
printf("价格:");
scanf("%d", &(*pnew).price);
printf("书籍分类:");
scanf("%s", (*pnew).fenlei);
while (q != NULL)//遍历链表,若插入的信息已经存在,则退出
{
if ((*q).num == (*pnew).num)
{
printf("您输入的书籍信息已经存在!");
system("pause");
return head;
}
q = (*q).next;
}
if ((*p).next != NULL){
while ((*p).next != NULL)//让尾指针循环直到最后一个结点
p = (*p).next;
}
p->next = pnew;
p = pnew;
p->next = NULL;
printf("插入成功!\n");
w = 0;
}
return head;
}
//选择排序,交换结点
Book* Sort(Book *head)//排序
{
Book *begin = NULL, *end = NULL;//链表的首尾结点指针
Book *p;
Book *min, *premin;//最小结点及其前一个结点
if (!head)return NULL;
while (head) {
//循环找出链表中的最小结点
p = head;
min = p;
while ((*p).next != NULL) {
if (strcmp((*min).name, (*(*p).next).name) > 0) {
premin = p;
min = (*p).next;
}
p = p->next;
}
//将min放进有序链表
if (begin == NULL)
{
begin = end = min;
}
else {
(*end).next = min;
end = min;
}
//在无序链表中删除min
if (min == head) {
head = (*min).next;
}
else {
(*premin).next = (*min).next;
}
}
(*end).next = NULL;
return begin;
}
void Refer1(Book *head)
{
Book *p = head;
char ch[10];
int flag = 0;
printf("请输入待查询的内容:");
scanf("%s", ch);
printf("查询到的信息如下;\n");
printf("编号\t书名\t出版单位\t出版时间\t价格\t书籍分类\n");
while (p != NULL)
{
char *res; int a;
res = (char*)memchr((*p).name, ch[0], strlen((*p).name)); //根据要查找的字符串第一个字符,切割源字符串
if (res != NULL)
{
a = memcmp(res, ch, strlen(ch)); //比较
if (a == 0)
{
printf("%d\t%10s\t%10s\t%d-%d\t%d\t%s\n", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
flag++;
}
}
p = (*p).next;
}
if (flag > 0) printf("共有%d条记录!\n", flag);
else printf("无任何结果!\n");
}
void Refer2(Book *head)
{
Book *p = head;
char ch[10];
int flag = 0;
printf("请输入待查询的内容:");
scanf("%s", ch);
printf("查询到的信息如下;\n");
printf("编号\t书名\t出版单位\t出版时间\t价格\t书籍分类\n");
while (p != NULL)
{
char *res; int a;
res = (char*)memchr((*p).chuban, ch[0], strlen((*p).chuban)); //根据要查找的字符串第一个字符,切割源字符串
if (res != NULL)
{
a = memcmp(res, ch, strlen(ch)); //比较
if (a == 0)
{
printf("%d\t%10s\t%10s\t%d-%d\t%d\t%s\n", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
flag++;
}
}
p = (*p).next;
}
if (flag > 0) printf("共有%d条记录!\n", flag);
else printf("无任何结果!\n");
}
void Refer3(Book *head)
{
Book *p = head;
char ch[10];
int flag = 0;
printf("请输入待查询的内容:");
scanf("%s", ch);
printf("查询到的信息如下;\n");
printf("编号\t书名\t出版单位\t出版时间\t价格\t书籍分类\n");
while (p != NULL)
{
char *res; int a;
res = (char*)memchr((*p).fenlei, ch[0], strlen((*p).fenlei)); //根据要查找的字符串第一个字符,切割源字符串
if (res != NULL)
{
a = memcmp(res, ch, strlen(ch)); //比较
if (a == 0)
{
printf("%d\t%10s\t%10s\t%d-%d\t%d\t%s\n", (*p).num, (*p).name, (*p).chuban, (*p).year, (*p).month, (*p).price, (*p).fenlei);
flag++;
}
}
p = (*p).next;
}
if (flag > 0) printf("共有%d条记录!\n", flag);
else printf("无任何结果!\n");
}
本系统有两种录入数据的方式,第一种就是这个图片里的读文件,你自己创建个文件,输入信息就行,另一种就是直接手动输入信息。
具体列一下要实现的功能要求吧,这样比较含糊啊
按照《程序要求》的意思,需要实现书籍的增加,删除,查询功能。查询支持模糊查询,对书名、出版单位、分类号查询。浏览是显示所有书籍信息,就这些么???
这是该代码的实现功能:
添加书籍:向图书管理系统中添加新书,信息包括(书名、书的价格、书的编号)最多记录1000本
显示书籍:显示图书的所有书籍信息
书籍删除:按照书名进行删除指定书籍
查找书籍:按照姓名查看指定书籍信息
修改书籍:按照姓名重新修改指定书籍
清空书架:清空书架中所有信息
退出图书管理系统:退出当前使用的系统
参考代码:
#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;
}
可以参考一下:
https://blog.csdn.net/chandfy/article/details/124572534
你这个图书期刊管理系统和一般的进销存系统架构都是一样的,无非就是管理内容的不同,底层是统一的数据增、删、改、查,实现方法很多,看你的喜欢了,python,c,java都可以实现,另外,用不用数据库,数据量大小等等,都要有个提前预估。
C++图书管理系统
功能如下
添加书籍:向图书管理系统中添加新书,信息包括(书名、书的价格、书的编号)最多记录1000本
显示书籍:显示图书的所有书籍信息
书籍删除:按照书名进行删除指定书籍
查找书籍:按照姓名查看指定书籍信息
修改书籍:按照姓名重新修改指定书籍
清空书架:清空书架中所有信息
退出图书管理系统:退出当前使用的系统
代码如下
#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;
}