用c语言写一个图书信息管理系统包含书号书名和价格

时间: 2023-04-01 14:00:48 浏览: 148
好的,我可以回答这个问题。以下是一个简单的图书信息管理系统的 C 语言代码示例: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_BOOKS 100 struct Book { char number[20]; char title[100]; float price; }; struct Book books[MAX_BOOKS]; int num_books = ; void add_book() { if (num_books >= MAX_BOOKS) { printf("Error: too many books.\n"); return; } struct Book book; printf("Enter book number: "); scanf("%s", book.number); printf("Enter book title: "); scanf("%s", book.title); printf("Enter book price: "); scanf("%f", &book.price); books[num_books++] = book; printf("Book added successfully.\n"); } void list_books() { if (num_books == ) { printf("No books in the system.\n"); return; } printf("Number\tTitle\tPrice\n"); for (int i = ; i < num_books; i++) { printf("%s\t%s\t%.2f\n", books[i].number, books[i].title, books[i].price); } } int main() { while (1) { printf("1. Add book\n"); printf("2. List books\n"); printf("3. Quit\n"); printf("Enter your choice: "); int choice; scanf("%d", &choice); switch (choice) { case 1: add_book(); break; case 2: list_books(); break; case 3: printf("Goodbye!\n"); exit(); default: printf("Invalid choice.\n"); } } return ; }
阅读全文

相关推荐

doc
C语言源代码的图书管理系统 #include<iostream.h> #include<fstream.H> #include<stdlib.h> #include<string.h> struct bookData { int booknumber; char bookname[30]; int store; }; struct Person { char name[20]; char studynumber[10]; int count; bookData Rbook[2]; //bookData Rbook; }; class History { public: History(fstream& a){readerbook=a;} void writehistory(); void readhistory(fstream&); private: fstream readerbook; }; class Liberian; void Find(fstream&); void CreateTxt(fstream&); class Reader { friend Liberian; public: Reader(fstream&); void print(); void handlebook(fstream&); void change(); bool findreader(); void Addreader(); void deletereader(); private: fstream file; Person person; }; class Liberian { public: Liberian(char *,char *); void changeReader(Reader&); void selfprint(); void Append(fstream&); private: char workname[20]; char worknumber[20]; }; int main() { fstream bookRecord(" book.dat",ios::in| ios::out); if(!bookRecord) { cerr<<" Can't open,try again!"<<endl; exit(1); } fstream readerRecord("reader.dat",ios::in|ios::out); if(!readerRecord) { cerr<<" Can't open,try again!"<<endl; exit(1); } int choice; int key; Reader reader(readerRecord);//读者管理系统 Liberian liberian("李天","123456");//图书管理员 History rec(readerRecord);//声明显示历史记录类 while(1) { cout<<" 请输入您的选择:\n\n" <<"1--图书管理员\n" <<"2--读者系统\n" <<"0--结束程序\n"; cin>>choice; switch(choice) { case 1: { cout<<" Hello,图书管理员:\n"; liberian.selfprint();cout<<endl; cout<<"1-- 增加新图书\n" <<"2-- 改变读者的属性\n" <<"3-- 显示历史记录\n" <<"0-- 返回\n"; cin>>key; switch(key) { case 1: liberian.Append(bookRecord); break; case 2: liberian.changeReader(reader); break; case 3: rec.readhistory(readerRecord); case 0: break ; } } break; case 2: { cout<<"学生读者\n"; int iflag=1; //reader.findreader(); cout<<"1-- 借书与还书信息\n" <<"2-- 修改个人信息\n" <<"0-- 返回\n"; cin>>key; switch(key) { case 1: reader.handlebook(bookRecord); break; case 2: reader.change(); break; case 0: break; } } break; default: return 0; } } return 0; } //增加书籍 void Liberian::Append(fstream& storef) { bookData book; int choice; int key; int num; storef.seekp(0,ios::end); int posEnd=storef.tellp(); cout<<"*************书籍入库***************"<<endl; while(1) { cout<<" Please enter your choice:"<<endl; cout<<"1--添加新书\n"<<"2--已有书籍\n"<<"0--返回\n"; cin>>choice; switch(choice) { case 1: cout<<" 书号, 书名, 数量?"<<endl; cin>>book.booknumber>>book.bookname>>book.store; storef.write(reinterpret_cast<char*>(&book),sizeof(bookData)); break; case 2: storef.seekg(0,ios::beg); cout<<"Booknumber?\n"; cin>>key; do{ storef.read(reinterpret_cast<char*>(&book),sizeof(bookData)); }while(book.booknumber!=key&&storef.tellg()!=posEnd); if(book.booknumber==key) { cout<<book.booknumber<<"----"<<book.bookname<<"----"<<book.store<<endl; cout<<" 输入已有书增加的数量:"<<endl; cin>>num; if(num>0) book.store+=num; else { cout<<" Invalid input"<<endl; } storef.seekp(-long(sizeof(bookData)),ios::cur);//////////////////// storef.write(reinterpret_cast<char*>(&book),sizeof(bookData)); cout<<"现在书籍: "<<book.bookname<<" 余量为: "<<book.store<<endl; } else cout<<"找不到此书,请重新查阅书号是否正确!"<<endl; break; case 0: return ; } } } //书籍查询 void Find(fstream & f) { bookData book; int key; int choice; f.seekg(0,ios::end); int posEnd=f.tellp(); cout<<"*************书籍查询***************"<<endl; while(1) { cout<<" 请输入您的选择\n" <<" 1-- 检索一本书\n" <<"2-- 显示全部书籍\n" <<"0-- 返回\n"; cin>>choice; switch(choice) { case 1: f.seekg(0,ios::beg); cout<<"输入你想检索书的书号"<<endl; cin>>key; do{ f.read(reinterpret_cast<char*>(&book),sizeof(bookData)); }while(book.booknumber!=key&&f.tellg()!=posEnd); if(book.booknumber==key) cout<<book.booknumber<<"---"<<book.bookname<<"---"<<book.store<<endl; else cout<<"找不到此书,请重新确认!"<<endl; break; case 2: f.seekg(0,ios::beg); do{ f.read(reinterpret_cast<char*>(&book),sizeof(bookData)); cout<<book.booknumber<<"---"<<book.bookname<<"--"<<book.store<<endl; }while(f.tellg()!=posEnd); break; case 0: return ; } } } Reader::Reader(fstream& c) { file=c; Person person={"0","0",0,{{0,"0",0}, {0,"0",0}}}; } void Reader::print() { cout<<"Name"<<"---"<=3) return; } //cout<>choice; switch(choice) { case 1: { filee.seekp(0,ios::end); int posEnd=filee.tellp(); if(person.count<=1) { cout<<" 输入你要借阅图书的书号:"<<endl; cin>>key; filee.seekg(0); do{ filee.read(reinterpret_cast<char*>(&book),sizeof(bookData)); }while(book.booknumber!=key&&filee.tellp()!=posEnd); //cout<<book.booknumber<<endl; if(book.booknumber==key) { //cout<<" 找到你想借阅的图书,成功借阅!"<<endl; if(book.store>0) { person.Rbook[person.count]=book; person.count+=1; book.store-=1; filee.seekp(-long(sizeof(bookData)),ios::cur); filee.write(reinterpret_cast<char*>(&book),sizeof(bookData)); cout<<" 找到你想借阅的图书,成功借阅!"<<endl; cout<<"书籍 :"<<book.bookname<<"剩余的本数为:"<<book.store<<endl; } else cout<<" 现在此图书已经被借完了,请耐心等待几天!"<<endl; } else cout<<" 找不到你想要的图书"<<endl; } else cout<<"你最多只能借2本\n\n"; } break; case 2: { bookData blankbook={0,"0",0}; //if(person.count>0) //{ int iflag=0; filee.seekg(0); cout<<" 输入你想要还的书的书号:"<<endl; cin>>key; for(int i=0;i<2;i++) { if(key==person.Rbook[i].booknumber) { person.Rbook[i]=blankbook; cout<<"成功归还此书!"; iflag=1; person.count--; do{ filee.read(reinterpret_cast<char*>(&book),sizeof(bookData)); }while(book.booknumber!=key&&filee.tellp()!=posEnd); if(book.booknumber==key) { book.store+=1; filee.seekp(-long(sizeof(bookData)),ios::cur); filee.write(reinterpret_cast<char*>(&book),sizeof(bookData)); cout<<"书籍 :"<<book.bookname<<"余本量为: "<<book.store<<endl; } } } if(!iflag) { cout<<" 你没有借阅那本书,请确认!"<<endl; } // } // else // cout<<"你没有借书,请重新确认!\n\n"; } break; case 3: Find(filee); break; case 0: return; } } } void Reader::change() { char newname[20]; char newnumber[10]; int choice; file.seekp(0,ios::cur); int Posend=file.tellp(); bool iflag;int num=0; while(!(iflag=findreader())) { num++; if(num>=3) return; } cout<<" 请输入你的选择!"<<endl; cout<<"1--改变名字!\n" <<"2--修改学号r\n" <<"0--返回\n"; cin>>choice; switch(choice) { case 1: cout<<"输入你的新名字!\n"; cin>>newname; strcpy(person.name,newname); break; case 2: cout<<"输入你的信学号?\n"; cin>>newnumber; strcpy(person.studynumber,newnumber); break; default: break;; } file.seekp(-long(sizeof(Person)),ios::cur); file.write(reinterpret_cast<char*>(&person),sizeof(Person)); cout<<"信息修改成功!"<<endl; } void Liberian::selfprint() { cout<<" 图书管理员 :\n" <<worknumber<<"---"<<workname<<" 为您服务!\n"; } Liberian::Liberian(char *a,char*b) { strcpy(workname,a); strcpy(worknumber,b); } void Liberian::changeReader(Reader& a) { int choice; char newname[20];char newnumber[10]; cout<<"修改读者的数据信息!\n"; cout<<"1-- 增加一个读者\n" <<"2-- 删除一个读者\n" <<"0-- 结束程序\n"; cin>>choice; switch(choice) { case 1: a.Addreader(); break; case 2: a.deletereader(); break; case 0: return; } } void Reader::Addreader() { Person temp;bookData book={0,"0",0}; file.seekp(0,ios::end); int Posend=file.tellp(); cout<<"输入你想要增加的读者的名字"<<endl; cin>>temp.name; cout<<"新读者的学号:"<<endl; cin>>temp.studynumber; temp.Rbook[1]=book; temp.Rbook[0]=book; temp.count=0; file.write(reinterpret_cast<char*>(&temp),sizeof(Person)); cout<<" 成功添加!"<<temp.name<<endl; } void Reader::deletereader() { file.seekp(0,ios::end); int Posend=file.tellp(); Person person; char name[20]; cout<<"输入要删除的读者的名字!"<<endl; cin>>name; file.seekg(0); do{ file.read(reinterpret_cast<char*>(&person),sizeof(Person)); }while(strcmp(name,person.name)&&file.tellp()!=Posend); if(!strcmp(name,person.name)) { bookData blankbook={0,"0",0}; Person guest={"0","0",0,{{0,"0",0},{0,"0",0}}}; file.seekp(-long(sizeof(Person)),ios::cur); file.write(reinterpret_cast<char*>(&guest),sizeof(Person)); cout<<"成功删除!"<>name; file.seekg(0); do{ file.read(reinterpret_cast<char*>(&person),sizeof(Person)); }while(strcmp(name,person.name)&&file.tellp()!=Posend); if(!strcmp(name,person.name)) { cout<<"查到此人:"<(&guest),sizeof(Person)); if(strcmp(guest.Rbook[1].bookname,name) || strcmp(guest.Rbook[1].bookname,name)) { cout<<guest.name<<" "<<guest.studynumber<<" "<<guest.count<<" "; for(int i=0;i<2;i++) if(strcmp(guest.Rbook[i].bookname,name)) cout<<guest.Rbook[i].bookname; iflag=0; } }while(readerbook.tellp()!=Posend); if(iflag) cout<<"没有读者借阅图书!"<<endl; }

最新推荐

recommend-type

中南大学C语言课程设计图书管理系统

《中南大学C语言课程设计图书管理系统》是一个实践性项目,旨在通过C语言编程实现一个图书管理系统的功能,包括图书的编号管理、信息查询、修改、增删、文件保存和打开,以及统计等功能。这个系统设计的目标是让学生...
recommend-type

c语言课程设计_图书管理系统_高校教师人事管理系统.doc

图书管理系统是利用编程技术实现图书馆日常管理的一个软件工具,本系统采用C语言进行设计,旨在实现图书信息和学生信息的管理,以及图书的查询与借阅功能。系统的设计主要包括数据结构设计、功能模块设计和实际操作...
recommend-type

postgresql-16.6.tar.gz

postgresql-16.6.tar.gz,PostgreSQL 安装包。 PostgreSQL是一种特性非常齐全的自由软件的对象-关系型数据库管理系统(ORDBMS),是以加州大学计算机系开发的POSTGRES,4.2版本为基础的对象关系型数据库管理系统。POSTGRES的许多领先概念只是在比较迟的时候才出现在商业网站数据库中。PostgreSQL支持大部分的SQL标准并且提供了很多其他现代特性,如复杂查询、外键、触发器、视图、事务完整性、多版本并发控制等。同样,PostgreSQL也可以用许多方法扩展,例如通过增加新的数据类型、函数、操作符、聚集函数、索引方法、过程语言等。另外,因为许可证的灵活,任何人都可以以任何目的免费使用、修改和分发PostgreSQL。
recommend-type

机械设计传感器真空灌胶机_step非常好的设计图纸100%好用.zip

机械设计传感器真空灌胶机_step非常好的设计图纸100%好用.zip
recommend-type

HRNet的onnx格式转rknn格式的工程

HRNet的onnx格式转rknn格式的工程
recommend-type

GitHub Classroom 创建的C语言双链表实验项目解析

资源摘要信息: "list_lab2-AquilesDiosT"是一个由GitHub Classroom创建的实验项目,该项目涉及到数据结构中链表的实现,特别是双链表(doble lista)的编程练习。实验的目标是通过编写C语言代码,实现一个双链表的数据结构,并通过编写对应的测试代码来验证实现的正确性。下面将详细介绍标题和描述中提及的知识点以及相关的C语言编程概念。 ### 知识点一:GitHub Classroom的使用 - **GitHub Classroom** 是一个教育工具,旨在帮助教师和学生通过GitHub管理作业和项目。它允许教师创建作业模板,自动为学生创建仓库,并提供了一个清晰的结构来提交和批改学生作业。在这个实验中,"list_lab2-AquilesDiosT"是由GitHub Classroom创建的项目。 ### 知识点二:实验室参数解析器和代码清单 - 实验参数解析器可能是指实验室中用于管理不同实验配置和参数设置的工具或脚本。 - "Antes de Comenzar"(在开始之前)可能是一个实验指南或说明,指示了实验的前提条件或准备工作。 - "实验室实务清单"可能是指实施实验所需遵循的步骤或注意事项列表。 ### 知识点三:C语言编程基础 - **C语言** 作为编程语言,是实验项目的核心,因此在描述中出现了"C"标签。 - **文件操作**:实验要求只可以操作`list.c`和`main.c`文件,这涉及到C语言对文件的操作和管理。 - **函数的调用**:`test`函数的使用意味着需要编写测试代码来验证实验结果。 - **调试技巧**:允许使用`printf`来调试代码,这是C语言程序员常用的一种简单而有效的调试方法。 ### 知识点四:数据结构的实现与应用 - **链表**:在C语言中实现链表需要对结构体(struct)和指针(pointer)有深刻的理解。链表是一种常见的数据结构,链表中的每个节点包含数据部分和指向下一个节点的指针。实验中要求实现的双链表,每个节点除了包含指向下一个节点的指针外,还包含一个指向前一个节点的指针,允许双向遍历。 ### 知识点五:程序结构设计 - **typedef struct Node Node;**:这是一个C语言中定义类型别名的语法,可以使得链表节点的声明更加清晰和简洁。 - **数据结构定义**:在`Node`结构体中,`void * data;`用来存储节点中的数据,而`Node * next;`用来指向下一个节点的地址。`void *`表示可以指向任何类型的数据,这提供了灵活性来存储不同类型的数据。 ### 知识点六:版本控制系统Git的使用 - **不允许使用git**:这是实验的特别要求,可能是为了让学生专注于学习数据结构的实现,而不涉及版本控制系统的使用。在实际工作中,使用Git等版本控制系统是非常重要的技能,它帮助开发者管理项目版本,协作开发等。 ### 知识点七:项目文件结构 - **文件命名**:`list_lab2-AquilesDiosT-main`表明这是实验项目中的主文件。在实际的文件系统中,通常会有多个文件来共同构成一个项目,如源代码文件、头文件和测试文件等。 总结而言,"list_lab2-AquilesDiosT"实验项目要求学生运用C语言编程知识,实现双链表的数据结构,并通过编写测试代码来验证实现的正确性。这个过程不仅考察了学生对C语言和数据结构的掌握程度,同时也涉及了软件开发中的基本调试方法和文件操作技能。虽然实验中禁止了Git的使用,但在现实中,版本控制的技能同样重要。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

【三态RS锁存器CD4043的秘密】:从入门到精通的电路设计指南(附实际应用案例)

# 摘要 三态RS锁存器CD4043是一种具有三态逻辑工作模式的数字电子元件,广泛应用于信号缓冲、存储以及多路数据选择等场合。本文首先介绍了CD4043的基础知识和基本特性,然后深入探讨其工作原理和逻辑行为,紧接着阐述了如何在电路设计中实践运用CD4043,并提供了高级应用技巧和性能优化策略。最后,针对CD4043的故障诊断与排错进行了详细讨论,并通过综合案例分析,指出了设计挑战和未来发展趋势。本文旨在为电子工程师提供全面的CD4043应用指南,同时为相关领域的研究提供参考。 # 关键字 三态RS锁存器;CD4043;电路设计;信号缓冲;故障诊断;微控制器接口 参考资源链接:[CD4043
recommend-type

霍夫曼四元编码matlab

霍夫曼四元码(Huffman Coding)是一种基于频率最优的编码算法,常用于数据压缩中。在MATLAB中,你可以利用内置函数来生成霍夫曼树并创建对应的编码表。以下是简单的步骤: 1. **收集数据**:首先,你需要一个数据集,其中包含每个字符及其出现的频率。 2. **构建霍夫曼树**:使用`huffmandict`函数,输入字符数组和它们的频率,MATLAB会自动构建一棵霍夫曼树。例如: ```matlab char_freq = [freq1, freq2, ...]; % 字符频率向量 huffTree = huffmandict(char_freq);
recommend-type

MATLAB在AWS上的自动化部署与运行指南

资源摘要信息:"AWS上的MATLAB是MathWorks官方提供的参考架构,旨在简化用户在Amazon Web Services (AWS) 上部署和运行MATLAB的流程。该架构能够让用户自动执行创建和配置AWS基础设施的任务,并确保可以在AWS实例上顺利运行MATLAB软件。为了使用这个参考架构,用户需要拥有有效的MATLAB许可证,并且已经在AWS中建立了自己的账户。 具体的参考架构包括了分步指导,架构示意图以及一系列可以在AWS环境中执行的模板和脚本。这些资源为用户提供了详细的步骤说明,指导用户如何一步步设置和配置AWS环境,以便兼容和利用MATLAB的各种功能。这些模板和脚本是自动化的,减少了手动配置的复杂性和出错概率。 MathWorks公司是MATLAB软件的开发者,该公司提供了广泛的技术支持和咨询服务,致力于帮助用户解决在云端使用MATLAB时可能遇到的问题。除了MATLAB,MathWorks还开发了Simulink等其他科学计算软件,与MATLAB紧密集成,提供了模型设计、仿真和分析的功能。 MathWorks对云环境的支持不仅限于AWS,还包括其他公共云平台。用户可以通过访问MathWorks的官方网站了解更多信息,链接为www.mathworks.com/cloud.html#PublicClouds。在这个页面上,MathWorks提供了关于如何在不同云平台上使用MATLAB的详细信息和指导。 在AWS环境中,用户可以通过参考架构自动化的模板和脚本,快速完成以下任务: 1. 创建AWS资源:如EC2实例、EBS存储卷、VPC(虚拟私有云)和子网等。 2. 配置安全组和网络访问控制列表(ACLs),以确保符合安全最佳实践。 3. 安装和配置MATLAB及其相关产品,包括Parallel Computing Toolbox、MATLAB Parallel Server等,以便利用多核处理和集群计算。 4. 集成AWS服务,如Amazon S3用于存储,AWS Batch用于大规模批量处理,Amazon EC2 Spot Instances用于成本效益更高的计算任务。 此外,AWS上的MATLAB架构还包括了监控和日志记录的功能,让用户能够跟踪和分析运行状况,确保应用程序稳定运行。用户还可以根据自己的需求自定义和扩展这些模板和脚本。 在使用AWS上的MATLAB之前,用户需要了解MathWorks的许可协议,明确自己的许可证是否允许在云环境中使用MATLAB,并确保遵守相关法律法规。MathWorks提供了广泛的资源和支持,帮助用户快速上手,有效利用AWS资源,以及在云端部署和扩展MATLAB应用程序。 综上所述,AWS上的MATLAB参考架构是为希望在AWS云平台上部署MATLAB的用户提供的一种快速、简便的解决方案。它不仅减少了手动配置的复杂性,还为用户提供了广泛的资源和指导,以确保用户能够在云环境中高效、安全地使用MATLAB。"