预习:图书信息管理系统的设计与实现
(一)實驗內容
設計并實現(xiàn)一個圖書信息管理系統(tǒng)。根據(jù)實驗要求設計該系統(tǒng)的菜單和交互邏輯,并編碼實現(xiàn)增刪改查的各項功能。?該系統(tǒng)至少包含以下功能:
(二)實現(xiàn)方案
1.基于順序存儲/鏈式存儲結構的圖書信息表的創(chuàng)建和輸出
定義一個包含圖書信息(書號、書名、價格)的順序表。讀入相應的圖書數(shù)據(jù)來完成圖書信息表的創(chuàng)建,然后統(tǒng)計圖書表中的圖書個數(shù),同時逐行輸出每本圖書的信息。
輸入
輸入?n+1?行,其中前?n?行是?n?本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,價格之后沒有空格。最后第?n+1?行是輸入結束標志:0?0 0(空格分隔的三個?0)。其中書號和書名為字符串類型,價格為浮點數(shù)類型。
輸出
總計 n+1 行,第 1 行是所創(chuàng)建的圖書表中的圖書個數(shù),后 n 行是 n 本圖書的信息(書號、
書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩
位小數(shù)。
輸入樣例:
9787302257646 程序設計基礎 25.00
9787302164340 程序設計基礎(第 2 版) 20.00
9787302219972 單片機技術及應用 32.00
9787302203513 單片機原理與應用技術 26.00
9787810827430 工業(yè)計算機控制技術——原理與應用 29.00
9787811234923 匯編語言程序設計教程 32.00
0 0 0
2.基于順序存儲/鏈式存儲結構的圖書信息表的修改
讀入圖書信息表,然后計算所有圖書的平均價格,將所有低于平均價格的圖書價格提高20%,所有高于或等于平均價格的圖書價格提高10%,最后逐行輸出價格修改后的圖書信息。
輸入
輸入?n+1?行,其中前?n?行是?n?本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,價格之后沒有空格。最后第?n+1?行是輸入結束標志:0?0 0(空格分隔的三個?0)。其中書號和書名為字符串類型,價格為浮點數(shù)類型。
輸出
總計 n+1 行,第 1 行是修改前所有圖書的平均價格,后 n 行是價格修改后 n 本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數(shù)。
輸入樣例:
9787302257646 程序設計基礎 25.00
9787302164340 程序設計基礎(第 2 版) 20.00
9787302219972 數(shù)據(jù)挖掘與機器學習 32.00
9787302203513 模式識別與智能計算 26.00
9787810827430 工業(yè)計算機控制技術——原理與應用 29.00
9787811234923 操作系統(tǒng)教程 32.00
0 0 0
輸出樣例:
9787302257646 程序設計基礎 30.00
9787302164340 程序設計基礎(第 2 版) 24.00
9787302219972 數(shù)據(jù)挖掘與機器學習 35.20
9787302203513 模式識別與智能計算 28.60
9787810827430 工業(yè)計算機控制技術——原理與應用 31.90
9787811234923 操作系統(tǒng)教程 35.20
3.基于順序存儲/鏈式存儲結構的圖書信息表的最貴圖書查找
讀入相應的圖書信息表,然后查找價格最高的圖書,輸出相應圖書的信息。
輸出
總計 m+1 行,其中,第 1 行是最貴的圖書數(shù)目,(價格最高的圖書可能有多本),后m行是最貴圖書的信息,每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數(shù)。
輸出樣例:
2
9787302219972 數(shù)據(jù)挖掘與機器學習 35.20
9787811234923 操作系統(tǒng)教程 35.20
4.基于順序存儲/鏈式存儲結構的圖書信息表的最愛圖書的查找
讀入相應的圖書信息表,然后根據(jù)指定的最愛圖書的名字,輸出相應圖書的信息。
輸入
輸入1行,為每次待查找的最愛圖書名字。
輸出
若查找成功,輸出k+1行,對于每次查找,第一行是最愛圖書數(shù)目,同一書名的圖書可能有多本,后K行是最愛圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,其中價格輸出保留兩位小數(shù)。若查找失敗:只輸出以下提示:抱歉,沒有你的最愛!
輸出樣例
2
9787302257646 程序設計基礎 30.00
9787302164340 程序設計基礎(第 2 版) 24.00
5.基于順序存儲/鏈式存儲結構的圖書信息表的新書入庫
讀入指定的待入庫的新圖書的位置和信息,將新圖書插入到圖書表中指定的位置上,最后輸出新圖書入庫后所有圖書的信息。
輸入
總計n+1行,首先輸入第1行,內容僅為一個整數(shù),代表待入庫的新圖書的位置序號,然后輸入n行,內容為新圖書的信息,書號、書名、價格用空格分隔。
輸出
若插入成功,輸出新圖書入庫后所有圖書的信息(書號、書名、價格),總計n+1行,每行是一本圖書的信息,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數(shù)。
若插入失敗,只輸出以下提示:抱歉,入庫位置非法!
輸入樣例:
2
9787302265436 ?計算機導論實驗指導 18.00
輸出樣例:
9787302257646 程序設計基礎 30.00
9787302265436 計算機導論實驗指導 18.00
9787302164340 程序設計基礎(第 2 版) 24.00
9787302219972 數(shù)據(jù)挖掘與機器學習 35.20
9787302203513 模式識別與智能計算 28.60
9787810827430 工業(yè)計算機控制技術——原理與應用 31.90
9787811234923 操作系統(tǒng)教程 35.20
6.基于順序存儲/鏈式存儲結構的圖書信息表的舊書出庫
讀入指定的待出庫的舊圖書的書號,將該圖書從圖書表中刪除,最后輸出舊圖書出庫后所有圖書的信息。
輸入
輸入待出庫的舊圖書的書號;
輸出
若刪除成功,輸出舊圖書出庫后所有圖書的信息(書號、書名、價格),每行是一本圖書的信息,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數(shù)。
若刪除失敗,只輸出以下提示:出庫失敗,未找到該圖書!
7.基于順序存儲/鏈式存儲結構的圖書信息表的圖書去重
出版社出版的任何一本圖書的書號(ISBN)都是唯一的,即圖書表中不允許包含書號重復的圖書。讀入相應的圖書信息表(事先加入書號重復的記錄),然后進行圖書的去重,即刪除書號重復的圖書(只留第一本),最后輸出去重后所有圖書的信息。
輸出
總計輸出m+1行(m<=n),其中,第一行是去重后的圖書數(shù)目,后m行是去重后圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,其中價格輸出保留兩位小數(shù)。
(三)源碼(基于順序存儲):
?BookList.h
#pragma once #include<iostream> #include<iomanip> #include<string.h> #include<vector> #include<algorithm>using namespace std;const int MaxSize = 1000;struct book {char no[8]; //8位書號char name[20]; //書名float price; //價格 };class BookList { private:book list[MaxSize];int length; public:BookList(); //默認構造函數(shù)~BookList(); //析構函數(shù)int getLength(); //獲取長度void printList(); //打印圖書信息表void getExpensive(); //獲取最貴圖書信息void findFavourite(); //最愛圖書查詢void insertBooks(); //新書入庫void deleteBook(); //舊書出庫void deleteBook(int loc); //刪除指定位置圖書void bookDeWeight(); //圖書去重void priceChanged(); //修改價格void fastSort(int l,int r); //按照價格降序排序 };BookList.cpp
#include "BookList.h"BookList::BookList() {cout << "當前圖書為空,新建一個圖書信息表..." << endl << endl;cout << "依次輸入書號、書名、價格,空格隔開,(0,0,0)視為退出" << endl;int flag = 1, index = 0;length = 1;char exit[] = "0";while (flag && index < MaxSize){//依次輸入圖書信息cin >> list[index].no;cin >> list[index].name;cin >> list[index].price;//檢測到(0,0,0)時退出if (!strcmp(list[index].no, exit) && !strcmp(list[index].name, exit) && list[index].price == 0){ cout << "輸入完成" << endl;flag = 0;}else{index++;length++;}}}BookList::~BookList() { }void BookList::printList() {cout << "輸出圖書信息表如下:" << endl;cout << "長度:" << length - 1 << endl;for (int i = 0; i < length - 1; i++)cout << list[i].no << " " << list[i].name << " " << fixed << setprecision(2) << list[i].price << endl; }void BookList::getExpensive() {int max = 0;vector<int> ExpensiveLoc;ExpensiveLoc.push_back(max);for (int i = 1; i < length - 1; i++){if (list[i].price == list[max].price)ExpensiveLoc.push_back(i);//檢測到相同的最大值則存放其位置if (list[i].price > list[max].price){//檢測到更大值,則清空最大位置數(shù)組,重新存放max = i;ExpensiveLoc.clear();ExpensiveLoc.push_back(max);}}//輸出最貴圖書信息cout << "最貴圖書數(shù)量為" << ExpensiveLoc.size() << ",具體信息如下:" << endl;int index = 0;for (int i = 0; i < ExpensiveLoc.size(); i++){cout << list[ExpensiveLoc[index]].no << " " << list[ExpensiveLoc[index]].name << " " << fixed << setprecision(2) << list[ExpensiveLoc[index]].price << endl;index++;} }int BookList::getLength() {return length; }void BookList::findFavourite() {char favBookName[20];cout << "請輸入最愛圖書名:";cin >> favBookName;vector<int> favLoc;for(int i=0;i<length;i++){if (strcmp(list[i].name, favBookName) == 0)favLoc.push_back(i);//找到最愛圖書則存放其位置}int count = favLoc.size();//記錄最愛圖書數(shù)量if (count == 0)cout << "抱歉,沒有你的最愛!" << endl;else{cout << "已找到,展示如下:" << endl;cout << count << endl;int index = 0;for (int i = 0; i < count; i++){cout << list[favLoc[index]].no << " " << list[favLoc[index]].name << " " << fixed << setprecision(2) << list[favLoc[index]].price << endl;index++;}} }void BookList::insertBooks() {cout << "請輸入插入頂點位置:";int loc;cin >> loc;loc--;cout << "請輸入插入圖書的信息:";char new_no[8], new_name[20];float new_price;cin >> new_no;cin >> new_name;cin >> new_price;if (length == MaxSize)cout << "抱歉,入庫位置非法!" << endl;else{for (int i = length - 1; i >= loc; i--){strcpy_s(list[i + 1].no,list[i].no);strcpy_s(list[i + 1].name, list[i].name);list[i + 1].price = list[i].price;}strcpy_s(list[loc].no, new_no);strcpy_s(list[loc].name, new_name);list[loc].price = new_price;}length++;cout << "插入完成" << endl;printList(); }void BookList::deleteBook() {cout << "請輸入刪除圖書的書號:";char del_no[8];cin >> del_no;for (int i = 0; i < length; i++){if (!strcmp(list[i].no, del_no)){for (int j = i; j < length; j++){strcpy_s(list[i].no, list[i + 1].no);strcpy_s(list[i].name, list[i + 1].name);list[i].price = list[i + 1].price;}length--;break;}if (i == length - 1)cout << "出庫失敗,未找到該圖書!" << endl;}cout << "刪除完成" << endl;printList(); }void BookList::deleteBook(int loc)//用于去重函數(shù) {for (int i = loc; i < length - 1; i++){strcpy_s(list[i].no, list[i + 1].no);strcpy_s(list[i].name, list[i + 1].name);list[i].price = list[i + 1].price;}length--; }void BookList::priceChanged() {float sumPrice = 0;for (int i = 0; i < length; i++)sumPrice += list[i].price;float ave = sumPrice / (length - 1);for (int i = 0; i < length; i++){if (list[i].price < ave)list[i].price += list[i].price / 10;elselist[i].price += list[i].price / 5;}cout << "價格已修改" << endl;printList(); }void BookList::fastSort(int l,int r) {if (l < r){int i = l, j = r;float temp_price = list[l].price;char temp_no[8], temp_name[20];strcpy_s(temp_no, list[l].no);strcpy_s(temp_name, list[l].name);while (i < j){//從右向左找第一個價格大于temp_price的數(shù)while (i < j && list[j].price <= temp_price)j--;if (i < j){list[i].price = list[j].price;strcpy_s(list[i].no, list[j].no);strcpy_s(list[i].name, list[j].name);i++;}//從左向右找第一個價格小于temp_price的數(shù)while (i<j && list[i].price > temp_price)i++;if (i < j){list[j].price = list[i].price;strcpy_s(list[j].no, list[i].no);strcpy_s(list[j].name, list[i].name);j--;}}list[i].price = temp_price;strcpy_s(list[i].no, temp_no);strcpy_s(list[i].name, temp_name);fastSort(l, i - 1);fastSort(i + 1, r);} }void BookList::bookDeWeight() {for (int i = 0; i < length - 1; i++)for (int j = i + 1; j < length; j++)if (strcmp(list[i].no, list[j].no) == 0)deleteBook(j);cout << endl << "去重已完成" << endl;printList(); }BookInf_Management.cpp
#include "BookList.h"//用戶交互界面 void userWindow() {BookList demo;int flag = 1,choose;cout << endl;cout << "1.輸出圖書信息表" << endl;cout << "2.修改圖書價格" << endl;cout << "3.最貴圖書查找" << endl;cout << "4.最愛圖書查找" << endl;cout << "5.新書入庫" << endl;cout << "6.舊書出庫" << endl;cout << "7.圖書去重" << endl;cout << "8.按價格降序排序" << endl;cout << "9.退出" << endl;while (flag){cout << endl;cout << "請輸入序號選擇操作:";cin >> choose;cout << endl;switch (choose){case 1:demo.printList(); break;case 2:demo.priceChanged(); break;case 3:demo.getExpensive(); break;case 4:demo.findFavourite(); break;case 5:demo.insertBooks(); break;case 6:demo.deleteBook(); break;case 7:demo.bookDeWeight(); break;case 8:{int len = demo.getLength();demo.fastSort(0, len - 2);demo.printList();break;}case 9:flag = 0; break;default:break;}} }int main() {userWindow();return 0; }?
總結
以上是生活随笔為你收集整理的预习:图书信息管理系统的设计与实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python列表生成器二维筛选_如何加速
- 下一篇: 安防监控如何存储?