图书检索系统C版本
原创,转载请注明出处!
程序具有一下功能
窗口界面
1,Input输入(读入文件,所有的文件都读入)
2,Output输出(检验是否读取正确,从结构体数组读入)
3,Length统计(此文件里有110本图书)
4,Locate查找(根据图书的名字查找,可根据输入的图书名称查找该图书所在的位置从1开始,满足该名称的图书有多本,都要输出,输出满足条件图书的所有信息)
5,Get(该查找有个位置i,找出该列表中第i本书的信息,结果唯一)
6,Insert(i,插入新的图书,在指定位置i插入图书,总数+1,反映到文件中,要回写入文件,验证过程,重新调用1,2)
7,Delete(删除,总数减1,反映到文件中,要写回源文件,验证过程)
8,Sort(排序,按价格排序,升序,快速排序,堆排序,用不同的方法尝试)
9.Max(价格最高的图书,打印出一条记录,或多条记录)要求时间复杂度为一次即O(n)
10.Inverse(逆转存储)
注释时间、空间复杂度
PS:T(n)=O(n^2)/ S(n)=O(1)
代码如下
#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <string.h>
#include <math.h>
#include <cstring>
using namespace std; struct BookList //定义结构体数组
{
char ISBN[];
string name;
double price;
}; //定义全局变量
const int N = ;
const double eps = 1.0e-6; //比较两个浮点数的大小,绝对误差
int BookNum = ;
char TXT1[];
char TXT2[];
BookList book[N]; //函数
void Input() //从文件读入 时间复杂度:O(n);空间复杂度:O(1);
{
int i = ; fstream infile("book.txt",ios::in);//打开文件 if(!infile) //测试文件是否打开成功
{
cerr << "Open errors!\a" <<endl;
exit();
} infile.getline(TXT1,sizeof(TXT1));
infile.getline(TXT2,sizeof(TXT2)); while(!infile.eof()) //向结构体数组内读入数据
{
infile>>book[i].ISBN>>book[i].name>>book[i].price;
i++;
BookNum++;
} infile.close();//关闭文件
getchar();
cout<<"已完成读入!\a"<<endl;
getchar();
system("cls");
} void Output() //输出数组已读入的数据 时间复杂度:O(n);空间复杂度:O(1);
{
cout << "ISBN\t\t" <<"书名\t\t" <<"定价"<<endl; //打印表头 for (int i = ; i < BookNum; i++) //循环打印结构体数组
{
cout << book[i].ISBN <<"\t"<< book[i].name <<"\t"<<book[i].price<<endl;
}
getchar();
cout<<"已完成输出!\a"<<endl;
getchar();
system("cls");
} int Length() //显示书单长度 时间复杂度:O(1);空间复杂度:O(1);
{
cout<<"数量:"<<BookNum<<endl;
getchar();
cout<<"已完成显示长度!\a"<<endl;
getchar();
system("cls");
} void Locate() //按书名检索 时间复杂度:O(n);空间复杂度:O(1);
{
int b = ; //用于标识,多次检索
do{
char BookName[];
int position[]; //位置数组,记录书所在位置 (即书的编号)
int k = ; //用于计数
int a = ; //用于标识,输入校验 do{ //输入检验循环
cout<<"请输入要检索的书名:";
cin>>BookName;
for(int i = ; i < BookNum; i++){ //在书单中查找
if(book[i].name.compare(BookName)==){//
position[k] = i; //找到后记录书所在的位置
k++;
}
}
if(k == ){
cout<<"未找到此书!请确认书名是否输入正确!\a\n重新输入按1,结束请输入任意值(非1):";
cin>>a;
}
else{
cout<<"本次查找到"<<k<<"本图书,具体信息如下:"<<endl; //检索完成提示
cout<<"序号"<<"\t"<<"编号"<<"\t"<<"图书信息:ISBN\t书名\t\t定价\t"<<endl;//打印表头 for(int i = ; i<k;i++) //打印符合条件的书目
{
cout<<i+<<"\t"<<position[i]+<<"\t"
<< book[position[i]].ISBN <<"\t"<< book[position[i]].name <<"\t"
<<book[position[i]].price<<endl;
}
a = ;//重置a
}
} while(a == ); cout<<"继续搜索请输入1,结束请输入任意值(非1):";
cin>>b;
} while(b == );
getchar();
cout<<"已完成检索!\a"<<endl;
getchar();
system("cls");
} void Get() //按书目编号检索 时间复杂度:O(1);空间复杂度:O(1);
{
int b = ; //用于标识,多次检索
do{
int k; //用于标识,输入校验
do{
cout<<"请输入想要查询的书目编号(1~"<<BookNum<<"):";
cin>>k;
if(k<=||k>BookNum){
cout<<"您输入的书目编号不正确!\a请输入1~"<<BookNum<<"之间的数字:"<<endl;
}
else{
cout<<"已查找到编号为"<<k<<"的图书,具体信息如下:"<<endl; //检索完成提示
cout<<"编号"<<"\t"<<"图书信息:ISBN\t书名\t\t定价\t"<<endl;//打印表头
cout<<k<<"\t"<< book[k-].ISBN <<"\t"<< book[k-].name <<"\t"<<book[k-].price<<endl;
}
} while(k<=||k>BookNum);
cout<<"继续搜索请输入1,结束请输入任意值(非1):";
cin>>b;
} while(b == );
getchar();
cout<<"已完成检索!\a"<<endl;
getchar();
system("cls");
} void Insert() //插入操作 时间复杂度:O(n);空间复杂度:O(1);
{
int b = ; //用于标识,多次检索
do{
BookList a;
int i; //位置 、用于标识,输入校验
do{
cout<<"请输入要插入的书目的位置(0~"<<BookNum<<"):";
cin>>i;
if(i<||i>BookNum){
cout<<"您输入的书目位置超出范围!\a请输入0~"<<BookNum<<"之间的数字:"<<endl;
}
else{
cout<<"您要插入的书目的位置为"<<i<<"。"<<endl;
cout<<"请输入要插入的书目信息(按照一下格式):"<<endl;//输入提示
cout << "ISBN\t\t" <<"书名\t\t" <<"定价"<<endl;; //打印表头
cin>>a.ISBN>>a.name>>a.price; //数据输入
while(strlen(a.ISBN)<){
cout<<"您输入的ISBN不正确!\a请输入正确的ISBN(ISBN由13位数字组成):";
cin>>a.ISBN;
} for(int j = BookNum; j > i; j--) //存入数组
{
strcpy(book[j].ISBN,book[j-].ISBN);
book[j].name = book[j-].name;
book[j].price = book[j-].price;
} strcpy(book[i].ISBN,a.ISBN);
book[i].name = a.name;
book[i].price = a.price; BookNum++;//统计 fstream outfile;
outfile.open("book.txt",ios::out);//打开文件 (写入权限) if(!outfile) //测试文件是否打开成功
{
cerr << "Open errors!" <<endl;
exit();
} outfile<<TXT1<<endl<<TXT2<<endl; for(int i = ; i < BookNum-; i++)
{
outfile<<book[i].ISBN<<"\t"<<book[i].name<<"\t"<<book[i].price<<endl;
} outfile<<book[BookNum-].ISBN<<"\t"<<book[BookNum-].name<<"\t"<<book[BookNum-].price; outfile.close();//关闭文件 cout<<"插入成功!"<<endl;//输入提示 }
} while(i<||i>BookNum); cout<<"继续插入请输入1,结束请输入任意值(非1):";
cin>>b;
} while(b == );
getchar();
cout<<"已完成插入!\a"<<endl;
getchar();
system("cls");
} void Delete() //删除操作 时间复杂度:O(n);空间复杂度:O(1);
{
int b = ; //用于标识,多次检索
do{
BookList a;
int i; //位置 、用于标识,输入校验
do{
cout<<"请输入要删除的书目的编号(1~"<<BookNum<<"):";
cin>>i;
if(i<=||i>BookNum){
cout<<"您输入的书目的编号不存在!\a请输入1~"<<BookNum<<"之间的数字:"<<endl;
}
else{
cout<<"您要删除的书目信息为:"<<endl;//输入提示
cout << "ISBN\t\t" <<"书名\t\t" <<"定价"<<endl;; //打印表头
cout << book[i-].ISBN <<"\t"<< book[i-].name <<"\t"<<book[i-].price<<endl;
cout<<"正在删除..."<<endl;//输入提示 for(int j = (i-); j < (BookNum - ); j++) //数组覆盖
{
strcpy(book[j].ISBN,book[j+].ISBN);
book[j].name = book[j+].name;
book[j].price = book[j+].price;
} BookNum--;//统计 fstream outfile;
outfile.open("book.txt",ios::out);//打开文件 (写入权限) if(!outfile) //测试文件是否打开成功
{
cerr << "Open errors!" <<endl;
exit();
} outfile<<TXT1<<endl<<TXT2<<endl; for(int i = ; i < BookNum; i++)
{
outfile<<book[i].ISBN<<"\t"<<book[i].name<<"\t"<<book[i].price<<endl;
} outfile<<book[BookNum-].ISBN<<"\t"<<book[BookNum-].name<<"\t"<<book[BookNum-].price; outfile.close();//关闭文件 cout<<"删除成功!\a"<<endl;//输入提示 }
} while(i<=||i>BookNum);
cout<<"继续删除请输入1,结束请输入任意值(非1):";
cin>>b;
} while(b == );
getchar();
cout<<"已完成删除!\a"<<endl;
getchar();
system("cls");
} void Sort() //冒泡排序 时间复杂度:O(n^2);空间复杂度:O(1);
{
BookList temp;
for(int i = ; i < BookNum - ; i++){
for(int j = ;j < (BookNum - - i);j++){
if(book[j].price>book[j+].price)
{
temp = book[j+];
book[j+] = book[j];
book[j] = temp;
}
}
}
getchar();
cout<<"已完成排序!\a"<<endl;
getchar();
system("cls");
} void Max() //找出价格最高的图书 时间复杂度:O(n);空间复杂度:O(1);
{
cout<<"正在搜索中..."<<endl;
double price = book[].price;
for(int i = ; i < N; i++)
if(book[i].price > price)
price = book[i].price; cout<<"已查找到价格最高的图书,具体信息如下:"<<endl; //搜索完成提示
cout<<"ISBN\t书名\t\t定价\t"<<endl;//打印表头
// cout<<price<<endl<<temp; //测试行
for(int i = ; i < N; i++)
if(fabs(book[i].price - price)<=eps)
cout<< book[i].ISBN <<"\t"<< book[i].name <<"\t"<<book[i].price<<endl; getchar();
cout<<"已完成打印!\a"<<endl;
getchar();
system("cls");
} void Inverse() //数组中实现逆序存储(未写入文件) 时间复杂度:O(n);空间复杂度:O(1);
{
int temp = ,
index = BookNum -,
k = BookNum/;
BookList p;
for(int i = ; i < k; i++,index--){
p = book[i];
book[i] = book[index];
book[index] = p;
} getchar();
cout<<"已完成逆序!\a"<<endl;
getchar();
system("cls");
} void mainjiemian() //主界面 时间复杂度:O(1);空间复杂度:O(1);
{
cout << "***********************************************" << endl;
cout << "* 图 书 管 理 系 统 *" << endl;
cout << "* *" << endl;
cout << "* (1) 读入书单 *" << endl;
cout << "* *" << endl;
cout << "* (2) 打印书单 *" << endl;
cout << "* *" << endl;
cout << "* (3) 显示总数 *" << endl;
cout << "* *" << endl;
cout << "* (4) 按照书名查找 *" << endl;
cout << "* *" << endl;
cout << "* (5) 按照编号查找 *" << endl;
cout << "* *" << endl;
cout << "* (6) 插入新书 *" << endl;
cout << "* *" << endl;
cout << "* (7) 删除书目 *" << endl;
cout << "* *" << endl;
cout << "* (8) 按价格排序 *" << endl;
cout << "* *" << endl;
cout << "* (9) 打印价格最高的图书 *" << endl;
cout << "* *" << endl;
cout << "* (A) 逆序存储 *" << endl;
cout << "* *" << endl;
cout << "* (0) 退出系统 *" << endl;
cout << "* *" << endl;
cout << "***********************************************" << endl;
cout << "请输入操作序号(按回车返回):";
} void exit() //退出系统 时间复杂度:O(1);空间复杂度:O(1);
{
exit();
} int main() //时间复杂度:O(1);空间复杂度:O(1);
{
do{
char in;
mainjiemian();
cin >> in;
switch (in)
{
case '': Input(); break;
case '': Output(); break;
case '': Length(); break;
case '': Locate(); break;
case '': Get(); break;
case '': Insert(); break;
case '': Delete(); break;
case '': Sort(); break;
case '': Max(); break;
case 'A': Inverse(); break;
case '': exit(); break;
default:cout << "输入错误,请从新输入。" << endl;
}
}while( ); return ;
}
"book.txt"文件如下:
北京**大学图书馆计算机类图书采购列表
ISBN 书名 定价
9787302257646 程序设计基础 25
9787302164340 程序设计基础(第2版) 20
9787302219972 单片机技术及应用 32
9787302203513 单片机原理与应用技术 26
9787810827430 工业计算机控制技术——原理与应用 29
9787811234923 汇编语言程序设计教程 21
9787512100831 计算机操作系统 17
9787302202844 计算机操作系统基础与应用(第二版) 30
9787302265436 计算机导论实验指导 18
9787302131304 计算机数学 20
9787302162834 计算机数学 30
9787302221630 计算机数学(第二版) 25
9787811235388 计算机网络基础 32
9787302137849 计算机维护与维修 26
9787302188308 计算机系统组装与维护 26
9787512101517 计算机应用基础与信息处理案例教程 25
9787811239447 计算机英语 29
9787302257448 计算机硬件与维护 29.8
9787302125679 计算机专业英语 25
9787302235682 计算机专业英语 28
9787302149286 计算机专业英语(第2版) 25
9787302211860 计算机组成原理(第2版) 29.5
9787302215530 计算机组装与维护 27
9787302232629 计算机组装与维护 24
9787302180630 实用数据结构 29
9787302225065 数据结构(C/C#语言版) 28
9787302135180 数据结构 21
9787302228141 数据结构 28
9787302163282 数据结构实验与实训教程(第2版) 23
9787302194934 微机原理与汇编语言实用教程 32
9787302133841 微机原理与接口技术 31
9787302223771 微型计算机原理及应用技术 29
9787302171973 微型计算机原理与结构(第二版) 28
9787302184898 微型计算机原理与结构习题解答与实验指导 21
9787302162988 ARM9嵌入式系统设计与开发应用 35
9787302197850 ARM体系结构与程序设计 30
9787302222705 EDA技术与VerilogHDL 38
9787302250708 基于ARM的嵌入式系统接口技术 43
9787302225515 嵌入式LinuxC语言应用程序设计与实践 36
9787302250753 嵌入式Linux实时操作系统及应用编程 48
9787302253402 ARM9嵌入式系统设计与应用 39
9787302188667 ASP.NET&IIS7高级编程 79.8
9787302259596 ASP.NET程序设计实训教程 26
9787302195252 ASP.NET程序设计与软件项目实训 34
9787302220763 ASP.NET实践教程 29
9787302258117 ASP.NET网站开发案例教程 36
9787302197867 ASP案例汇编 25
9787302212850 ASP语言程序设计 33
9787302198499 Authorware7.0实用教程 28
9787811230710 C#程序设计易懂易会教程 32
9787302219583 C#程序设计与开发 27
9787302171676 C#面向对象程序设计 39.5
9787302266341 C#面向对象程序设计(第2版) 58
9787302250692 C语言程序设计 42
9787302201090 C语言程序设计(第2版) 35
9787302137634 C语言程序设计基础与实训教程 25
9787810824125 C语言程序设计教程(修订本) 22
9787302127970 C语言程序设计与应用开发 29
9787302202646 C语言简明教程 26
9787302254454 C语言课程设计案例精编(第二版) 52
9787302150664 J2ME无线开发实训教程 25
9787302176091 Java2程序设计基础 27
9787302246909 Java高级程序设计 29
9787302260806 Java编程与实践 36
9787302210542 Java程序设计 29
9787302170037 Java程序设计教程(第2版) 29.5
9787302252887 Java程序设计与应用教程 39
9787302129226 Java高级编程实用教程 28
9787302214953 Java应用案例教程 33
9787302266211 Java语言程序设计实用教程 39
9787302202059 JSP动态网站开发实用教程 35
9787302256502 MATLAB程序设计与应用基础教程 24
9787302127956 UML基础与应用(高等学校规划教材) 22
9787302179306 VB.NET程序设计实用教程 31
9787302195696 VB.NET程序设计与软件项目实训 29
9787302220381 VB程序设计案例汇编 22
9787302229070 VC++程序设计基础教程 28
9787302214489 VC++程序设计项目实践 26
9787302176909 VisualBasic.NET程序设计 24
9787302172246 VisualBasic程序设计实用教程 30
9787302176060 VisualBasic程序设计与应用 30
9787302255604 VisualBasic项目化教程同步训练题 28
9787302254461 VisualC#2008程序设计与应用教程 38
9787302241522 VisualC#程序设计与项目实践 35
9787302218753 Web应用程序设计技术——ASP.NET(C#) 29
9787302231660 Web应用程序设计技术——ASP.NET(第2版) 30
9787811232554 XML基础教程 25
9787302179832 XML实用教程 20
9787302165156 基于C#的WindowsCE程序开发实例教程 23
9787302215356 基于工作过程的Java程序设计 27
9787302198505 嵌入式操作系统及编程 25
9787302169666 软件测试 24
9787811232301 软件测试 17
9787302167884 软件测试教程 22
9787302204862 软件工程 23
9787302186137 软件开发生命周期 23
9787302198697 软件开发与管理 28
9787302226024 软件项目综合实训(.NET篇) 29
9787811231991 实用Java程序设计 25
9787811235890 实用软件工程 26
9787302195863 实用软件工程与实训 25
9787302199519 新编Java实用教程 48
9787811231557 Eclipse基础与应用 35
图书检索系统C版本的更多相关文章
- “无法从节点xx检索exectask的版本” 原因分析
客户有一套部署在Window 2008 R2 sp环境下的12.1.0.2 RAC环境,该RAC基于策略管理.因为业务需要,现在需要更换部分设备——踢出两台2路的服务器(节点名称分别为racnode2 ...
- sci,ei,istp三大科技文献检索系统
印刷版(SCI) 双月刊 ,500种 联机版(SciSearch) 周更新 ,600种 光盘版(带文摘)(SCICDE) 月更新 ,500种(同印刷版) 网络版(SCIExpanded) 周更新 ,6 ...
- SSM开发基于Java EE在线图书销售系统
SSM(Spring+Spring MVC+MyBatis)开发基于Java EE在线图书销售系统 网站成功建立和运行很大部分取决于网站开发前的规划,因此为了在网站建立过程中避免一些不 ...
- 如何查看当前Ubuntu系统的版本
如何查看当前Ubuntu系统的版本 说来也惭愧,用Ubuntu差不多快1个月了,双系统是让朋友安的,只知道自己使用的是什么12版本的,具体怎么看还不知道,下面写一下查看当前Linux系统的版本的方法 ...
- Linux下怎么查看当前系统的版本
Linux下怎么查看当前系统的版本: uname -r 功能说明:uname用来获取电脑和操作系统的相关信息. 语 法:uname [-amnrsvpio][--help][--version] ...
- Linux - 查看系统的版本信息
在 Linux 中,有多种方法可以查看系统的版本信息. uname 命令 huey@huey-K42JE:~$ uname -a Linux huey-K42JE 3.5.0-43-generic # ...
- 如何判断Android系统的版本
随着Android版本的增多,在不同的版本中使用不同的设计是必须的,根据程序运行的版本来提供不同的功能.这涉及到如何在程序中判断Android系统的版本. 在Android api中的android. ...
- Linux下载_Linux系统各种版本ISO镜像下载(redhat,centos,oracle,ubuntu,openSUSE)
以下是风哥收集的Linux系统各种版本ISO镜像下载,包括redhat,centos,oracle,ubuntu等linux操作系统. Linux下载1:红帽RedHat Linux(RHEL5.RH ...
- 系统windows版本修改
系统基本信息修改 系统windows版本修改 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313134555 @qq.com ...
随机推荐
- Go调用Delphi编写的DLL
参数整数没有问题,但是如果是字符串,要注意几个细节. 记录如下: 1.Delphi定义函数的时候,字符串参数需要使用PChar类型 2.Go传递参数的时候要将字符串转成UTF16的指针,接收的时候采用 ...
- epoll原理
系统调用说明 epoll_create:在内核中创建epoll结构 epoll_ctl:add 1. 调用监听的文件的poll方法,设置callback 2. 设备就绪时唤醒等待队列上的进程,此时会调 ...
- CentOS 7 配置本地 YUM源
以VMware中使用ISO光盘为例配置本地Yum源 配置步骤:1.安装好CentOS 7后,使用root账户登陆系统#将安装CentOS所使用的iso光盘挂载到/mnt目录下 mount -t iso ...
- C# vb .net实现旋转特效滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的旋转特效呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一步 ...
- React 语法
1.JavaScript XML JSX = JavaScript XML,是一个看起来很像 XML 的 JavaScript 语法扩展.JSX 不是模板,是JS语法本身,有更多的扩展.JSX 组件一 ...
- jquery获取form表单中的数据
$(function() { $('#submit').click(function() { var d = {}; var t = $('form').serializeArray(); //t的值 ...
- React-Native中使用到的一些JS特性
React Native - 调试技巧及调试菜单说明(模拟器调试.真机调试) https://www.hangge.com/blog/cache/detail_1480.html 1,解构赋值——de ...
- k8s基础操作命令
K8s重新加入节点 1.重置node节点环境在slave节点上执行 [root@node2 ~]# kubeadm reset [reset] WARNING: changes made to thi ...
- Github强制找回管理员账号密码
步骤: 1. 登录Github所在的服务器,切换用户为git:su git 2. 进入Github的Rails控制台:gitlab-rails console production 3. 查看超级管理 ...
- sql 语句中关于 not in 和 null 的问题简单解析
理解这个问题,只需要记住一个逻辑: null 和任何值比较运算都返回的 false Ex: SQL01: SELECT * FROM userinfo WHERE age NOT IN() SQL01 ...