目录
1. 功能模块
1)初始化列表
/初始化线性表
status init_list(SqList& L)
{
L.elem = new Book[MAXSIZE];
if(!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
return OK;
}
2)销毁列表
//销毁列表
void destory_list(SqList& L)
{
if(L.elem)
{
delete []L.elem;
}
}
3)清空列表
//清空列表
void clear_list(SqList& L)
{
L.length = 0;
}
4)获取元素
//根据位置i获取元素
Book get_elem(SqList& L,int i)
{
if(!L.elem)
{
exit(ERROR);
}
if(L.length >= i + 1)
{
return L.elem[i];
}
}
5)查找
//查找
status search_list(SqList& L,float num,Book& tmp)
{
if(!L.elem)
{
return ERROR;
}
for(int j = 0;j < L.length;++j)
{
if(L.elem[j].price == num)
{
tmp = L.elem[j];
}
}
return ERROR;
}
6)插入
//插入(插入到第i个节点之前)
status insert_list(SqList& L,int i,Book tmp)
{
if(!L.elem)
{
return ERROR;
}
if(L.length==MAXSIZE || L.length < i || i < 1)
{
return ERROR;
}
for(int j = L.length;j > i - 1;--j)
{
L.elem[j] = L.elem[j - 1];
}
L.elem[i] = tmp;
L.length++;
return OK;
}
7)删除
//删除(删除第i个元素)
status delete_list(SqList& L,int i)
{
if(!L.elem)
{
return ERROR;
}
if(L.length==MAXSIZE || L.length < i || i < 1)
{
return ERROR;
}
for(int j = i - 1;j < L.length - 1;++j)
{
L.elem[j] = L.elem[j + 1];
}
L.length--;
return OK;
}
8)遍历
void print_list(SqList& L)
{
if(!L.elem)
{
exit(ERROR);
}
cout << "ID" << "\t" << "书名" << "\t" << "价格" << endl;
for (int i = 0; i < L.length; i++)
{
cout << left << setw(15) << L.elem[i].id;
cout << left << setw(40) << L.elem[i].name;
cout << left << setw(10) << L.elem[i].price << endl;
}
return;
}
2.相关文件操作
case 2:
{
int i = 0;
L.elem = new Book[MAXSIZE];
if(!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
fstream file_ptr;
file_ptr.open("book.txt");
if(!file_ptr)
{
cout << "文件读取失败" << endl;
exit(OVERFLOW);
}
file_ptr >> hand_1 >> hand_2 >> hand_3;
while(!file_ptr.eof())
{
file_ptr >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price;
++i;
}
cout << "书籍信息导入成功" << endl;
L.length = i;
file_ptr.close();
break;
}
book.txt文件
ISBN 书名 定价
9787302257646 程序设计基础 25
9787302219972 单片机技术及应用 32
9787302203513 编译原理 46
9787811234923 汇编语言程序设计教程 21
9787512100831 计算机操作系统 17
9787302265436 计算机导论实验指导 18
9787302180630 实用数据结构 29
9787302225065 数据结构(C语言版) 38
9787302171676 C#面向对象程序设计 39
9787302250692 C语言程序设计 42
9787302150664 数据库原理 35
9787302260806 Java编程与实践 56
9787302252887 Java程序设计与应用教程 39
9787302198505 嵌入式操作系统及编程 25
9787302169666 软件测试 24
9787811231557 Eclipse基础与应用 35
3.全局代码
/*图书表的顺序存储结构类型定义*/
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
#define MAXSIZE 1000
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int status; //返回值的状态
typedef int ElemType; //返回值的状态
typedef struct
{
string id;//图书ISBN
string name;
float price;
}Book;
typedef struct
{
Book* elem;
int length;
}SqList;
//初始化线性表
status init_list(SqList& L)
{
L.elem = new Book[MAXSIZE];
if(!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
return OK;
}
//销毁列表
void destory_list(SqList& L)
{
if(L.elem)
{
delete []L.elem;
}
}
//清空列表
void clear_list(SqList& L)
{
L.length = 0;
}
//根据位置i获取元素
Book get_elem(SqList& L,int i)
{
if(!L.elem)
{
exit(ERROR);
}
if(L.length >= i + 1)
{
return L.elem[i];
}
}
//查找
status search_list(SqList& L,float num,Book& tmp)
{
if(!L.elem)
{
return ERROR;
}
for(int j = 0;j < L.length;++j)
{
if(L.elem[j].price == num)
{
tmp = L.elem[j];
}
}
return ERROR;
}
//插入(插入到第i个节点之前)
status insert_list(SqList& L,int i,Book tmp)
{
if(!L.elem)
{
return ERROR;
}
if(L.length==MAXSIZE || L.length < i || i < 1)
{
return ERROR;
}
for(int j = L.length;j > i - 1;--j)
{
L.elem[j] = L.elem[j - 1];
}
L.elem[i] = tmp;
L.length++;
return OK;
}
//删除(删除第i个元素)
status delete_list(SqList& L,int i)
{
if(!L.elem)
{
return ERROR;
}
if(L.length==MAXSIZE || L.length < i || i < 1)
{
return ERROR;
}
for(int j = i - 1;j < L.length - 1;++j)
{
L.elem[j] = L.elem[j + 1];
}
L.length--;
return OK;
}
void print_list(SqList& L)
{
if(!L.elem)
{
exit(ERROR);
}
cout << "ID" << "\t" << "书名" << "\t" << "价格" << endl;
for (int i = 0; i < L.length; i++)
{
cout << left << setw(15) << L.elem[i].id;
cout << left << setw(40) << L.elem[i].name;
cout << left << setw(10) << L.elem[i].price << endl;
}
return;
}
int main()
{
cout <<"1.建立\t2.输入\t3.取值\t4.查找\t"<<endl;
cout <<"5.插入\t6.删除\t7.输出\t0.退出\t"<<endl;
int tmp;
int c;
SqList L;
string hand_1,hand_2,hand_3;
while(1)
{
cout << "请输入操作指令 " << endl;
cin >> tmp;
switch (tmp)
{
case 1:
if(init_list(L))
{
cout << "列表创建成功" << endl;
}
else
{
cout << "列表创建失败" << endl;
}
break;
case 2:
{
int i = 0;
L.elem = new Book[MAXSIZE];
if(!L.elem)
{
exit(OVERFLOW);
}
L.length = 0;
fstream file_ptr;
file_ptr.open("book.txt");
if(!file_ptr)
{
cout << "文件读取失败" << endl;
exit(OVERFLOW);
}
file_ptr >> hand_1 >> hand_2 >> hand_3;
while(!file_ptr.eof())
{
file_ptr >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price;
++i;
}
cout << "书籍信息导入成功" << endl;
L.length = i;
file_ptr.close();
break;
}
case 6:
cout << "请输入要删除的图书位置:" << endl;
cin >> c;
if (delete_list(L,c))
{
cout << "删除成功!" << endl;
}
else
{
cout << "删除失败!" << endl;
}
break;
case 7: // 输出顺序表
cout << "当前图书信息管理系统输出数据如下:" << endl;
print_list(L);
break;
case 0:
exit(OVERFLOW);
}
}
return 0;
}