实验要求:
实验代码;
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <fstream>
#include <iomanip>
#include <ctype.h>
using namespace std;
//图书结构体
struct Book {
double price;
char name[50];
char Locate[15];
}book[200];
int sum = 0;
int flag = 0;
string path = "book.txt";
//写入文件函数 将更新后的数据写入指定文件
void Out_to_File()
{
int n = 0;
ofstream file;
file.open(path, ios::out | ios::trunc);
if (!file.is_open())
{
cout << "You have failed to open the file!" << endl;
exit(1);
}
while (n < sum)
{
file << book[n].Locate << "\t" << book[n].name << "\t" << book[n].price << endl;
n++;
}
file.close();
}
//读取文件函数 将txt文件中的数据导入结构体
void Read_File()
{
int n = 0;
char first_line[200];
char second_line[200];
ifstream myfile(path, ios::in);
if (!myfile.is_open())
{
cout << "Sorry You Have Failed to Open the File!" << endl;
exit(1);
}
else
{
myfile.getline(first_line, 200);
myfile.getline(second_line, 200);
while (!myfile.eof())
{
myfile >> book[n].Locate >> book[n].name >> book[n].price;
n++;
}
}
sum = n;
cout << "一共有" << sum << "个图书的信息" << endl;
myfile.close();
flag = 1;
cout << "You have read the file successfully!" << endl;
}
//显示函数 将图书信息打印在显示屏上
void Display_Information() {
if (!flag) {
cout << "\t\t当前未录入图书信息,请先录入。\n" << endl;
exit(0);
}
else {
cout << "\t书号\t\t\t\t书名\t\t\t\t价格" << endl;
for (int i = 0; i < sum; i++)
{
cout << book[i].Locate << "\t\t\t" << book[i].name << "\t\t\t" << book[i].price << endl;
}
cout << "\t\t***************************ENDING***************************\n" << endl;
}
}
//根据书名查找图书信息 并将信息打印在显示在屏幕上
void Find_by_Name() {
char Book_Name[20];
int flag = 0;
cout << "请输入书名: " << endl;
cin >> Book_Name;
cout << "\t书号\t\t\t\t书名\t\t\t\t价格" << endl;
for (int i = 0; i < sum; ++i)
{
if (strcmp(Book_Name, book[i].name) == 0) {
cout << book[i].Locate << "\t\t\t" << book[i].name << "\t\t\t" << book[i].price << endl;
flag = 1;
}
}
if (!flag)
{
cout << "Sorry! I don't find this book!\n" << endl;
}
else {
cout << "查找结束,请继续输入指令" << endl;
}
}
//根据位置查找图书信息 并将查找到的图书信息显示在屏幕上
void Find_by_Locate() {
int Locate_;
cout << "请输入书的位置: ";
cin >> Locate_;
if (Locate_ >= sum)
{
cout << "该位置不存在图书!请检查后重试\n";
exit(0);
}
cout << "\t书号\t\t\t\t书名\t\t\t\t价格" << endl;
cout << book[Locate_].Locate << "\t\t\t" << book[Locate_].name << "\t\t\t" << book[Locate_].price << endl;
cout << "查找结束,请继续输入指令" << endl;
}
//在指定位置插入图书
void Insert() {
int locality;
path = "book.txt";
struct Book newbook;
cout << "请输入您要插入的图书的位置:";
cin >> locality; cout << endl;
cout << "请输入该图书的ISBN号:";
cin >> newbook.Locate; cout << endl;
cout << "请输入该图书的书名:";
cin >> newbook.name; cout << endl;
cout << "请输入该图书的单价:";
cin >> newbook.price; cout << endl;
sum++;
//先把后面的图书向后挪一位
for (int i = sum - 1; i >= locality - 1; i--)
{
struct Book temp;
temp = book[i];
book[i + 1] = temp;
}
//插入新图书
book[locality - 1] = newbook;
Out_to_File();
cout << "插入成功!请继续输入指令。" << endl;
}
//指定位置删除图书信息
void Delete() {
int n = 0;
int locality;
path = "book.txt";
cout << "请输入您要删除的图书的位置:";
cin >> locality;
cout << endl;
for (int i = locality; i < sum; i++)
{
book[i - 1] = book[i];
}
sum--;
Out_to_File();
cout << "删除成功!\n请继续输入指令。" << endl;
}
//修改价格
void Modify_Price()
{
int i;
path = "book_Newprice.txt";
for (i = 0; i < sum; i++)
{
if (book[i].price < 25)
book[i].price = (1 + 0.25) * book[i].price;
else
book[i].price = (1 + 0.1) * book[i].price;
}
Out_to_File();
cout << "修改成功!\n请继续输入执行指令" << endl;
}
//排序
void Sort()
{
int temp;
path = "book_Newsort.txt";
for (int i = 0; i < sum; i++)
{
for (int j = 0; j < sum - i - 1; j++)
{
if (book[j].price > book[j + 1].price)
{
temp = book[j].price;
book[j].price = book[j + 1].price;
book[j + 1].price = temp;
}
}
}
Out_to_File();
cout << "文件写入成功!";
}
//清空缓存区函数,放置因非法输入造成死循环
void Clear()
{
cin.clear();
cin.ignore(1, EOF);
cout << endl;
system("cls");//清屏函数
}
void Index()
{
int Chioce;
int flag = 1;
while (flag) {
cout << "\n***************************************Welcome to the Books Management System (BMS)*************************************\n";
cout << "1.读取所有图书信息\n2.输出所有图书信息\n3.插入图书\n4.根据位置删除图书信息\n5.根据书名查找图书\n6.根据位置查找图书\n7.修改价格信息并将生成的信息导入新文件\n8.排序并将排序后的信息导入新的文件\n9.退出\n" << endl;
cout << "请选择" << endl;
cin >> Chioce;
Clear();
switch (Chioce) {
case 1:Read_File(); flag = 0; break;//读取文件数据
case 2:Display_Information(); flag = 0; break;//输出所有图书信息
case 3:Insert(); flag = 0; break;//插入图书信息
case 4:Delete(); flag = 0; break;//删除图书信息
case 5:Find_by_Name(); flag = 0; break;//根据书名查找图书
case 6:Find_by_Locate(); flag = 0; break;//根据位置查找图书
case 7:Modify_Price(); flag = 0; break;//修改图书价格
case 8:Sort(); flag = 0; break;//冒泡排序
case 9:cout << "\t成功退出,谢谢使用!"; exit(0);
default:
printf("输错啦! 请输入1 ~ 9之间的整数\n");
break;
}
}
}
void Instruct()
{
int Choice;
while (1)
{
cout << "请选择:\n1.查看指令\n2.退出程序\n请输入..." << endl;
cin >> Choice;
Clear();
switch (Choice)
{
case 1:Index(); break;
case 2:cout << "退出成功!再见~~" << endl; exit(0); break;
default:
printf("输错啦!请看清楚,再重新输入1或2哦\n请输入...\n");
}
}
}
int main()
{
Instruct();
return 0;
}
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
2021/9/16