一、实验名称:线性顺序表的应用——图书管理系统

二、实验目的

熟练掌握线性表的顺序存储方法,实现顺序表的基本操作,能够使用顺序表的基本操作完成图书管理的基本功能。

三、实验要求

1、建立头文件SqList.h,包含数据类型定义和基本操作。

2、建立程序文件SqListApp.cpp,通过调用头文件中的操作实现以下功能. (1)从数据文件中读入数据到顺序表 (2)遍历 (3)查找 (4)插入(5)删除(6)修改。

四、实验环境

(1) 硬件环境:微机一台;

(2) 软件环境:windows7+VC++ 2010/6.0集成开发环境。

五、实验内容(测试数据可以更改,根据自己实现的题目改写下面的内容)

1 创建:创建顺序表list,将数据文件book.txt文件中的数据读入顺序表,然后遍历顺序表

2 查找:读取第idx个元素的值(idx=4)

3 修改(按价格查找):查找价格是price的图书信息(price=38),把38修改成30.

4 修改(按书号查找):查找书号是id的图书信息(id=9787302252887),把价格修改成30.

5 插入(在第i个元素前):在第idx个元素前插入元素elem_ins4 然后遍历顺序表(idx=3,elem_ins4=(9787302180632  数据结构实用教程 35)

6 插入(在元素e 前):在元素elem_ins4 前插入元素elem_ins5,然后遍历顺序表(elem_ins5=9787302180633   算法与数据结构   30)

7 删除(第i个元素):删除第idx个元素,把被删元素存入元素elem_dele6,  然后输出elem_dele6,  遍历顺序表(idx=5)

8 删除(删除元素e):删除元素elem_ins5,把被删元素存入元素elem_dele7,  然后然后输出elem_dele7

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

SqList.h

#include #include #include #include #include using namespace std; #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; //Status 是函数返回值类型,其值是函数结果状态代码。 #define MAXSIZE 100            //顺序表可能达到的最大长度 struct Book {     string id;//ISBN     string name;//书名     double price;//定价 }; typedef Book ElemType; typedef struct {     ElemType *elem; //存储空间的基地址     int length; //当前长度 } SqList;

Status InitList_Sq(SqList &L) { //算法2.1 顺序表的初始化     //构造一个空的顺序表L     L.elem = new ElemType[MAXSIZE]; //为顺序表分配一个大小为MAXSIZE的数组空间     if (!L.elem)         exit(OVERFLOW); //存储分配失败退出     L.length = 0; //空表长度为0     return OK; }

         

void InputFromFile_Sq(SqList &L,string fn)      {//顺序表信息输入,从book.txt文件中读入数据到线性表         string head_1,head_2,head_3;     int i=L.length;     fstream infile;     infile.open("book.txt");     if (!infile) {         cout << "错误!未找到文件!" << endl;         exit(ERROR);         }     infile >> head_1 >> head_2 >> head_3;     while (!infile.eof()) {     infile >> L.elem[i].id >> L.elem[i].name >> L.elem[i].price;     i++;     }     L.length = i;     infile.close();    }

Status GetElem(SqList L, int i, ElemType &e) {//算法2.2 顺序表的取值     if (i < 1 || i > L.length)         return ERROR; //判断i值是否合理,若不合理,返回ERROR     e = L.elem[i - 1]; //elem[i-1]单元存储第i个数据元素     return OK; }

int LocateElem_Sq(SqList L, double e) { //算法2.3 顺序表的查找     //顺序表的查找     for (int i = 0; i < L.length; i++)         if (L.elem[i].price == e)             return i + 1;//查找成功,返回序号i+1     return 0;//查找失败,返回0 }

Status ListInsert_Sq(SqList &L, int i, ElemType e) { //算法2.4 顺序表的插入     //在顺序表L中第i个位置之前插入新的元素e     //i值的合法范围是1<=i<=L.length+1     if ((i < 1) || (i > L.length + 1))         return ERROR; //i值不合法     if (L.length == MAXSIZE)         return ERROR; //当前存储空间已满     for (int j = L.length - 1; j >= i - 1; j--)         L.elem[j + 1] = L.elem[j]; //插入位置及之后的元素后移     L.elem[i - 1] = e; //将新元素e放入第i个位置     ++L.length; //表长增1     return OK; }

Status ListDelete_Sq(SqList &L, int i,ElemType &e) { //算法2.5 顺序表的删除     //在顺序表L中删除第i个元素,并用e返回其值     //i值的合法范围是1<=i<=L.length     if ((i < 1) || (i > L.length))         return ERROR; //i值不合法     e=L.elem[i-1];     for (int j = i; j <= L.length; j++)         L.elem[j - 1] = L.elem[j]; //被删除元素之后的元素前移     --L.length; //表长减1     return OK; }  void ListModify_Sq(SqList &L,double p1,double p2) {//将顺序表中的元素价格为p1修改成p2     //调用方法LocateElem_Sq找到price=p1元素的位序index,然后修改其price为p2     int index=LocateElem_Sq(L,p1);     if(index)        L.elem[index-1].price=p2;     else         cout<<"no element price is "<

void Traverse_Sq(SqList L) {//顺序表的输出     cout << "当前图书系统信息(顺序表)读出:\n";     for (int i = 0; i < L.length; i++)        cout << left <<"No " <

}

void VisitElement(SqList L,int i) {//输出顺序表中的第i个元素        cout << left <<"VisitElement算法实现: No " <

int LocateElemid_Sq(SqList L, string e) {      //顺序表的查找     for (int i = 0; i < L.length; i++)         if (L.elem[i].id == e)             return i + 1;//查找成功,返回序号i+1     return 0;//查找失败,返回0 }

void ListModifyById_Sq(SqList &L,string id,int p) {//将顺序表中书号是id的元素价格修改成p     //调用方法LocateElemById_Sq找到id元素的位序index,然后修改其price为p     int index=LocateElemid_Sq(L,id); if(index)        L.elem[index-1].price=p;     else         cout<<"no element price "<

     }

SqListApp.cpp

/* //1 创建:创建顺序表list,将数据文件book.txt文件中的数据读入顺序表,然后遍历顺序表 //2 查找:读取第idx个元素的值(idx=4) //3 修改(按价格查找):查找价格是price的图书信息(price=38),把38修改成30. //4 修改(按书号查找):查找书号是id的图书信息(id=9787302252887),把价格修改成30. //5 插入(在第i个元素前):在第idx个元素前插入元素elem_ins4 然后遍历顺序表(idx=3,elem_ins4=(9787302180632  数据结构实用教程    35) //6 插入(在元素e 前):在元素elem_ins4 前插入元素elem_ins5,然后遍历顺序表(elem_ins5=9787302180633   算法与数据结构   30) //7 删除(第i个元素):删除第idx个元素,把被删元素存入元素elem_dele6,  然后输出elem_dele6,  遍历顺序表(idx=5) //8 删除(删除元素e):删除元素elem_ins5,把被删元素存入元素elem_dele7,  然后然后输出elem_dele7,遍历顺序表 (elem=9787302180633   算法与数据结构   30)   */ #include"Sqlist.h" int main() {     system("title 1111张三");     system("date /T");                                                                    //显示当前日期     system("TIME /T");     system("color E4");                                                                   //改变运行界面的背景颜色和字体颜色

    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);      SMALL_RECT rc;     rc.Left = 0;     rc.Top = 0;      rc.Right = 80;     rc.Bottom = 30;      SetConsoleWindowInfo(hOut, TRUE, &rc);     

         SqList list;     string filename="book.txt";     ElemType e;     int idx=0;     ElemType elem_ins4;     elem_ins4.id="9787302180632";     elem_ins4.name="数据结构实用教程";     elem_ins4.price=35;     ElemType elem_ins5;     elem_ins5.id="9787302180633";     elem_ins5.name="算法与数据结构";     elem_ins5.price=40;     ElemType elem_dele6,elem_dele7;     int choose=-1;     while(choose!=0)     {           showAuthor();         cin>>choose;         switch(choose)         {

            case 1:    //1 创建:创建顺序表list,将数据文件book.txt文件中的数据读入顺序表,然后遍历顺序表                                      cout<<"---将数据文件book.txt文件中的数据读入顺序表---"<

                    InputFromFile_Sq(list,filename);                         cout<<"将数据读入顺序表"<

            case 3://3 修改:查找价格是price的图书信息(price=38),把38修改成30.                               idx=LocateElem_Sq(list,38);                         cout<<"---befor modify:---"<

            case 4:     //4 修改(按书号查找):查找书号是id的图书信息(id=9787302252887),把价格修改成30.                                                  idx=LocateElemid_Sq(list,"9787302252887");                         cout<<"---befor modify:---"<

            case 5://5 插入(在第i个元素前):在第idx个元素前插入元素elem_ins4                             idx=3;                            cout<<"---5 插入(在第i个元素前)---"<

            case 6: //6 插入(在元素e 前):在元素elem_ins4 前插入元素elem_ins5                      //(1)调用方法LocateElem_Sq找到elem_ins4所在的位序idx                      //(2)调用方法ListInsert_Sq在第idx个元素前插入元素elem_ins5                              cout<<"---6 插入(在元素e 前)---"<

                     break;

            case 7:         //7 删除(第i个元素):删除第idx个元素,把被删元素存入元素elem_dele6,  然后输出elem_dele6,  遍历顺序表(idx=5)                         idx=5;                         cout<<"---7 删除(第i个元素)---\n";                         VisitElement(list,5);                         ListDelete_Sq(list,idx,elem_dele6);                         Traverse_Sq(list);                         system("pause");                         system("cls");

                    break;

            case 8:         //8 删除(删除元素e):删除元素elem_ins5,把被删元素存入元素elem_dele7,         //    然后然后输出elem_dele7,遍历顺序表 (elem=9787302180633   算法与数据结构   30)                         cout<<"---8 删除(删除元素e)---\n";                         idx=LocateElem_Sq(list,elem_ins5.price);                          VisitElement(list,idx);                         ListDelete_Sq(list,idx,elem_dele7);                         Traverse_Sq(list);                         system("pause");                         system("cls");                     break;             case 0:break;         }     }     return 0; }

文章链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。