数据结构课程设计---图书管理系统
一、圖書信息管理系統的設計與實現
(一)實驗內容
設計并實現一個圖書信息管理系統。根據實驗要求設計該系統的菜單和交互邏輯,并編碼實現增刪改查的各項功能。?該系統至少包含以下功能:
(二)實驗目的
? ?( 三 )? 實驗要求
1.基于順序存儲/鏈式存儲結構的圖書信息表的創建和輸出
定義一個包含圖書信息(書號、書名、價格)的順序表。讀入相應的圖書數據來完成圖書信息表的創建,然后統計圖書表中的圖書個數,同時逐行輸出每本圖書的信息。
輸入
輸入?n+1?行,其中前?n?行是?n?本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,價格之后沒有空格。最后第?n+1?行是輸入結束標志:0?0 0(空格分隔的三個?0)。其中書號和書名為字符串類型,價格為浮點數類型。
輸出
總計 n+1 行,第 1 行是所創建的圖書表中的圖書個數,后 n 行是 n 本圖書的信息(書號、
書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩
位小數。
輸入樣例:
9787302257646 程序設計基礎 25.00
9787302164340 程序設計基礎(第 2 版) 20.00
9787302219972 單片機技術及應用 32.00
9787302203513 單片機原理與應用技術 26.00
9787810827430 工業計算機控制技術——原理與應用 29.00
9787811234923 匯編語言程序設計教程 32.00
0 0 0
2.基于順序存儲/鏈式存儲結構的圖書信息表的修改
讀入圖書信息表,然后計算所有圖書的平均價格,將所有低于平均價格的圖書價格提高20%,所有高于或等于平均價格的圖書價格提高10%,最后逐行輸出價格修改后的圖書信息。
輸入
輸入?n+1?行,其中前?n?行是?n?本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,價格之后沒有空格。最后第?n+1?行是輸入結束標志:0?0 0(空格分隔的三個?0)。其中書號和書名為字符串類型,價格為浮點數類型。
輸出
總計 n+1 行,第 1 行是修改前所有圖書的平均價格,后 n 行是價格修改后 n 本圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數。
輸入樣例:
9787302257646 程序設計基礎 25.00
9787302164340 程序設計基礎(第 2 版) 20.00
9787302219972 數據挖掘與機器學習 32.00
9787302203513 模式識別與智能計算 26.00
9787810827430 工業計算機控制技術——原理與應用 29.00
9787811234923 操作系統教程 32.00
0 0 0
輸出樣例:
9787302257646 程序設計基礎 30.00
9787302164340 程序設計基礎(第 2 版) 24.00
9787302219972 數據挖掘與機器學習 35.20
9787302203513 模式識別與智能計算 28.60
9787810827430 工業計算機控制技術——原理與應用 31.90
9787811234923 操作系統教程 35.20
3.基于順序存儲/鏈式存儲結構的圖書信息表的最貴圖書查找
讀入相應的圖書信息表,然后查找價格最高的圖書,輸出相應圖書的信息。
輸出
總計 m+1 行,其中,第 1 行是最貴的圖書數目,(價格最高的圖書可能有多本),后m行是最貴圖書的信息,每本圖書信息占一行,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數。
輸出樣例:
2
9787302219972 數據挖掘與機器學習 35.20
9787811234923 操作系統教程 35.20
4.基于順序存儲/鏈式存儲結構的圖書信息表的最愛圖書的查找
讀入相應的圖書信息表,然后根據指定的最愛圖書的名字,輸出相應圖書的信息。
輸入
輸入1行,為每次待查找的最愛圖書名字。
輸出
若查找成功,輸出k+1行,對于每次查找,第一行是最愛圖書數目,同一書名的圖書可能有多本,后K行是最愛圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,其中價格輸出保留兩位小數。若查找失敗:只輸出以下提示:抱歉,沒有你的最愛!
輸出樣例
2
9787302257646 程序設計基礎 30.00
9787302164340 程序設計基礎(第 2 版) 24.00
5.基于順序存儲/鏈式存儲結構的圖書信息表的新書入庫
讀入指定的待入庫的新圖書的位置和信息,將新圖書插入到圖書表中指定的位置上,最后輸出新圖書入庫后所有圖書的信息。
輸入
總計n+1行,首先輸入第1行,內容僅為一個整數,代表待入庫的新圖書的位置序號,然后輸入n行,內容為新圖書的信息,書號、書名、價格用空格分隔。
輸出
若插入成功,輸出新圖書入庫后所有圖書的信息(書號、書名、價格),總計n+1行,每行是一本圖書的信息,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數。
若插入失敗,只輸出以下提示:抱歉,入庫位置非法!
輸入樣例:
2
9787302265436 ?計算機導論實驗指導 18.00
輸出樣例:
9787302257646 程序設計基礎 30.00
9787302265436 計算機導論實驗指導 18.00
9787302164340 程序設計基礎(第 2 版) 24.00
9787302219972 數據挖掘與機器學習 35.20
9787302203513 模式識別與智能計算 28.60
9787810827430 工業計算機控制技術——原理與應用 31.90
9787811234923 操作系統教程 35.20
6.基于順序存儲/鏈式存儲結構的圖書信息表的舊書出庫
讀入指定的待出庫的舊圖書的書號,將該圖書從圖書表中刪除,最后輸出舊圖書出庫后所有圖書的信息。
輸入
輸入待出庫的舊圖書的書號;
輸出
若刪除成功,輸出舊圖書出庫后所有圖書的信息(書號、書名、價格),每行是一本圖書的信息,書號、書名、價格用空格分隔。其中價格輸出保留兩位小數。
若刪除失敗,只輸出以下提示:出庫失敗,未找到該圖書!
7.基于順序存儲/鏈式存儲結構的圖書信息表的圖書去重
出版社出版的任何一本圖書的書號(ISBN)都是唯一的,即圖書表中不允許包含書號重復的圖書。讀入相應的圖書信息表(事先加入書號重復的記錄),然后進行圖書的去重,即刪除書號重復的圖書(只留第一本),最后輸出去重后所有圖書的信息。
輸出
總計輸出m+1行(m<=n),其中,第一行是去重后的圖書數目,后m行是去重后圖書的信息(書號、書名、價格),每本圖書信息占一行,書號、書名、價格用空格分隔,其中價格輸出保留兩位小數。
(四)實驗思路
圖書信息、順序表、鏈表的定義
圖書信息的定義:typedef struct {char no[8]; ??//8位書號char?name[20];?//書名int price; ????//價格}Book;順序表的定義:typedef ?struct {Book??*elem; ????//指向數據元素的基地址int ?length; ??????//線性表的當前長度???????????????????????????????????????????????????????????}SqList;鏈表的定義:typedef struct LNode{Book???data; ??????//數據域struct LNode ?*next; ??//指針域}LNode,*LinkList; ?? class bookSystem { private:book Book[100];int length; public:bookSystem();~bookSystem(); void input(int book_num);//輸入圖書信息void print_all();//顯示圖書的相關信息 int getlength()//統計表中圖數個數void insert(book a);//指定位置插入void bookDelete(int pos);//刪除圖書信息void bookDeletethesame();//去重void downSort(int left,int right);//降序排序void findFavorite(string Name);//查找最愛書籍void findmostExpensive();//查找最貴書籍 }1.輸入圖書信息
void bookSystem::input(int book_num){for (int i = 0; i < book_num; i++){cout << "請輸入書號:";cin >> Book[length + i].no; cout << endl;cout << "請輸入書名:";cin >> Book[length + i].name; cout << endl;cout << "請輸入書的價格:";cin >> Book[length + i].price; cout << endl; }length = length + book_num; }2.插入圖書信息
void bookSystem::insert(int pos){int Pos = pos - 1;if (Pos<0 || pos>100)cout << "位置錯誤" << endl;else{if (length >= 100)cout << "溢出" << endl;else{if (pos >= length){cout << "請輸入書號:";cin >> Book[length].no; cout << endl;cout << "請輸入書名:";cin >> Book[length].name; cout << endl;cout << "請輸入價格:";cin >> Book[length].price; cout << endl;length++;}else{for (int i = length; i >= Pos; i--){Book[i] = Book[i - 1];}cout << "請輸入書號:";cin >> Book[Pos].no; cout << endl;cout << "請輸入書名:";cin >> Book[Pos].name; cout << endl;cout << "請輸入價格:";cin >> Book[Pos].price; cout << endl;length++;}}} }3.刪除圖書
void bookSystem::bookDelete(int pos){ if (length == 0)cout << "沒有圖書可以刪除" << endl;else{if (pos <= 0 || pos >= length)cout << "該圖書不存在" << endl;else{cout << "刪除:" << Book[pos - 1].no << " " << Book[pos - 1].name << " " << fixed << setprecision(2) << Book[pos - 1].price << endl;for (int i = pos - 1; i < length - 1; i++){Book[i] = Book[i + 1];}length--;}} }4.去重
void bookSystem::bookDeletethesame(){book temp[100];int a = length;int temp_len = 0;for (int x = 0; x < length; x++){bool flag=0;for (int y = 0; y < temp_len + 1; y++){if (Book[x].no == temp[y].no){flag = 1;break;}else{flag = 0;continue;}}if (flag == 1){cout << Book[x].no << " " << Book[x].name << " " << fixed << setprecision(2) << Book[x].price << endl;continue;}else{temp[temp_len] = Book[x];++temp_len;}}length = temp_len;for (int i = 0; i < length; i++){Book[i] = temp[i];}for (int i = length; i < a; i++){bookDelete(i); }5.尋找最愛書籍
void bookSystem::findFavorite(string Name){int count=0;//最愛書籍的數目book temp[100];for (int i = 0; i < length; i++){if (Book[i].name == Name){temp[i] = Book[i];++count;}}if (count == 0)cout << "抱歉,沒有找到你的最愛書籍" << endl;else{cout << "找到" << count << "本" << endl;for (int i = 0; i < count; i++){cout << temp[i].no << " " << temp[i].name << " " << fixed << setprecision(2) << temp[i].price << endl;}}}6.按價格降序排序
void bookSystem::downSort(int left,int right){if (left >= right)return;book base = Book[left];book temp;int i = left, j = right;while (i<j){while (Book[j].price >= base.price&&i<j)j--;while (Book[i].price <= base.price&&i<j)i++;if (i<j){temp = Book[j];Book[j] = Book[i];Book[i] = temp;}}Book[left] = Book[i];Book[i] = base; downSort( left, i - 1);downSort( i + 1, right); }7.查找最貴書籍
void bookSystem::findmostExpensive(){book findmostExpensive() = Book[0];for (int i = 1; i < length; i++){if (Book[i].price >= findmostExpensive().price)findmostExpensive() = Book[i];elsecontinue;}cout << "最貴:" << findmostExpensive().no << " " << findmostExpensive().name << " " << fixed << setprecision(2) << findmostExpensive().price << endl; }總結
以上是生活随笔為你收集整理的数据结构课程设计---图书管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 工作132:页面布局
- 下一篇: java信息管理系统总结_java实现科