.h文件
#include <iostream>
using namespace std;
//初始化
void InitList(List &L)
{
L.size = 0;
}
//删除所有元素
void ClearList(List &L)
{
L.size = 0;
}
//求表长
int ListSize(const List L)
{
return L.size;
}
//检查线性表是否为空
int ListEmpty(const List L)
{
return (L.size == 0);
}
//得到指定序号的元素
ElemType GetElem(const List L,int pos)
{
if(pos < 1 || pos > L.size)
{
cerr<<"pos is out of range!"<<endl;
exit(1);
}
return L.list[pos - 1];
}
//遍历线性表并打印
void TraverseList(const List L)
{
int i = 1;
while(i <= L.size)
{
cout<<GetElem(L,i)<<" ";
i++;
}
cout<<endl;
}
//是否从线性表中查找具有定值的第一个元素
int Find(const List L, ElemType &item)
{
for(int i = 0; i < L.size; i++)
{
if(L.list[i] == item) //有时‘==’需要重载
{
item = L.list[i];
return 1;
}
}
return 0;
}
//更新线性表中具有定值的第一个元素
int Update(List &L, const ElemType &item)
{
for(int i = 0; i < L.size; i++)
{
if(L.list[i] == item) //有时‘==’需要重载
{
L.list[i] = item;
return 1;
}
}
return 0;
}
//向线性表的末尾添加一个元素
void InsertRear(List &L, const ElemType &item)
{
if(L.size == MaxSize)
{
cerr<<"List overflow!"<<endl;
exit(1);
}
L.list[L.size] = item;
L.size++;
}
//向线性表的表头插入一个元素
void InsertFront(List &L, const ElemType &item)
{
if(L.size == MaxSize)
{
cerr<<"List overflow!"<<endl;
exit(1);
}
for(int i = L.size - 1; i >= 0; i--)
L.list[i+1] == L.list[i];
L.list[0] = item;
L.size++;
}
//向线性表中满足条件的位置插入一个元素
void Insert(List &L, const ElemType &item)
{
if(L.size == MaxSize)
{
cerr<<"List overflow!"<<endl;
exit(1);
}
int i = 0;
for(int i = 0; i < L.size; i++)
{
if(item < L.list[i])
break;
}
for(int j = L.size; j >= i; j--)
L.list[j+1] == L.list[j];
L.list[i] = item;
L.size++;
}
//从线性表中删除表头元素
ElemType DeleteFront(List &L)
{
if(L.size == 0)
{
cerr<<"Deleting from an empty list!"<<endl;
exit(1);
}
ElemType temp = L.list[0];
for(int i = 1; i < L.size; i++)
L.list[i-1] = L.list[i];
L.size--;
return temp;
}
//从线性表中删除等于给定值的第一个元素
int Delete(List &L, const ElemType &item)
{
if(L.size == 0)
{
cerr<<"L is an empty list!"<<endl;
return 0;
}
int i;
for(i = 0; i < L.size; i++)
{
if(item == L.list[i])
break;
}
if(i == L.size)
{
cerr<<"Deleted element is not exist!"<<endl;
return 0;
}
for(int j = i+1; j < L.size; j++)
L.list[j-1] = L.list[j];
L.size--;
return 1;
}
//对线性表进行排序(插入排序)
void Sort(List &L)
{
ElemType x;
for(int i = 1; i < L.size; i++)
{
x = L.list[i];
int j;
for(j = i - 1; j >= 0; j--)
{
if(x < L.list[j])
L.list[j + 1] = L.list[j];
else
break;
}
L.list[j + 1] = x;
}
}
.cpp文件
#include <iostream>
#include <stdlib.h>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
struct goods
{
char code[5];
char name[15];
int minq;
int curq;
};
typedef goods ElemType;
const int MaxSize = 10;
struct List
{
ElemType list[MaxSize];
int size;
};
//运算符重载操作
int operator == (const ElemType &e1, const ElemType &e2)
{
return (strcmp(e1.code,e2.code) == 0);
}
int operator < (const ElemType &e1, const ElemType &e2)
{
return (strcmp(e1.code,e2.code) == -1);
}
ostream& operator << (ostream &ostr, const ElemType &x)
{
ostr<<x.code<<setw(12)<<x.name<<setw(4)<<x.minq<<setw(4)<<x.curq<<endl;
return ostr;
}
#include "LinearList.h"
void SetupDoodsList(List &L, char *fname)
{
ifstream ifstr(fname,ios::in|ios::_Nocreate);
if(!ifstr)
{
cerr<<"File 'goods' not found!"<<endl;
exit(1);
}
goods g;
while(ifstr>>g.code)
{
ifstr>>g.name>>g.minq>>g.curq;
InsertRear(L,g);
}
ifstr.close();
}
void WriteGoodsFile(char *fname, List &L)
{
ofstream ofstr(fname);
if(!ofstr)
{
cerr<<"File 'goods' no create!"<<endl;
}
goods g;
int n = ListSize(L);
for(int i = 1; i <= n; i++)
{
g = GetElem(L, i);
ofstr<<g.code<<" "<<g.name<<" "<<g.minq<<" "<<g.curq<<endl;
}
ofstr.close();
}
int main()
{
List L2;
InitList(L2);
SetupDoodsList(L2,"goods.dat");
int i,flag = 1;
while(flag)
{
cout<<"1 打印整个库存表"<<endl;
cout<<"2 修改库存表中的记录"<<endl;
cout<<"3 删除库存表中的记录"<<endl;
cout<<"4 对库存表排序"<<endl;
cout<<"5 结束处理过程"<<endl;
cout<<"输入你的选择:";
cin>>i;
while(i < 1 || i > 5)
{
cout<<"请重新输入选择(1~5):";
cin>>i;
}
cout<<endl;
switch(i)
{
case 1: //打印
TraverseList(L2);
break;
case 2: //修改
goods g;
int x;
cout<<"输入待修改的商品代号:";
cin>>g.code;
if(Find(L2,g))
{
cout<<"输入该商品的修正量:";
cin>>x;
g.curq += x;
Update(L2, g);
}
else
{
cout<<"输入新商品记录的其他字段的内容:"<<endl;
cin>>g.name>>g.minq>>g.curq;
InsertRear(L2,g);
}
break;
case 3: //删除
cout<<"输入待删除商品的商品代号:";
cin>>g.code;
Delete(L2, g);
break;
case 4:
Sort(L2);
break;
case 5: //结束
cout<<"本次处理结束,再见!"<<endl;
flag = 0;
break;
}
}
WriteGoodsFile("goods.dat",L2);
return 0;
}