一、实验名称:线性顺序表的应用——图书管理系统
二、实验目的
熟练掌握线性表的顺序存储方法,实现顺序表的基本操作,能够使用顺序表的基本操作完成图书管理的基本功能。
三、实验要求
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
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; } 文章链接
发表评论