单链表实现图书管理系统

合集下载

程序设计实践报告(2篇)

程序设计实践报告(2篇)

第1篇一、引言随着计算机技术的飞速发展,程序设计已成为现代社会中不可或缺的一部分。

为了提高自己的编程能力,我选择了一门程序设计课程进行实践学习。

本文将详细记录我在课程中的实践过程、心得体会以及遇到的问题和解决方法。

二、实践过程1. 课程背景本课程旨在培养学生的程序设计能力,让学生掌握基本的编程思想、算法和编程语言。

课程内容主要包括C语言、数据结构、算法分析等。

2. 实践内容(1)C语言编程:学习C语言的基础语法、数据类型、运算符、控制结构、函数、指针等。

(2)数据结构:掌握数组、链表、栈、队列、树、图等基本数据结构及其应用。

(3)算法分析:学习算法的基本概念、时间复杂度、空间复杂度、排序算法、查找算法等。

(4)项目实践:结合所学知识,完成一个小型项目,如制作一个简单的计算器、学生信息管理系统等。

3. 实践步骤(1)课前预习:提前阅读教材,了解课程内容,为课堂学习做好准备。

(2)课堂学习:认真听讲,做好笔记,积极回答问题,与同学交流心得。

(3)课后练习:完成课后习题,巩固所学知识。

(4)项目实践:查阅资料,设计项目方案,编写代码,调试程序,直至项目完成。

三、心得体会1. 程序设计需要良好的逻辑思维能力在程序设计过程中,需要具备良好的逻辑思维能力,以便正确地分析问题、设计算法和编写代码。

通过本课程的学习,我意识到逻辑思维能力在编程中的重要性,并在实践中不断锻炼自己的思维能力。

2. 编程需要耐心和细心编程过程中,会遇到各种问题和错误。

只有具备耐心和细心,才能及时发现并解决问题。

在课程实践中,我学会了如何耐心地调试程序,细心地检查代码,确保程序的正常运行。

3. 团队合作的重要性在项目实践中,我与同学们分工合作,共同完成项目。

通过团队合作,我学会了如何与他人沟通、协调,提高了自己的团队协作能力。

4. 持续学习的重要性程序设计领域不断发展,新技术、新算法层出不穷。

为了跟上时代的步伐,我们需要持续学习,不断提高自己的编程能力。

C语言图书管理系统实验报告

C语言图书管理系统实验报告

程序设计实践信息类 1110开辟一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等)(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询③ 按照价钱排序④按出版时间排序等等(4)图书信息的删除与修改(1)简单的权限处理 (2)报表打印功能(3)甚至根据自己情况,可以加之学生信息,并扩充为图书借阅系统。

(4) 含糊查询 (5)综合查询 (6)统计功能比如统计处某一类别的图书信息或者筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。

一、提交材料应包括: (1)系统源代码 (2)课程报告二、整个设计过程具体要求(1要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4按照要求完成系统设计和实现报告,并进行总结、答辩。

1 需求分析这是一个能简单管理图书的小型图书管理系统,其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。

通过这些信息使之提供以下功能:(1)图书信息创建功能。

其中图书信息包括:书名,作者名,书编号,分类,出版单位,出版时间,价格等。

(图书信息用文件保存)。

(2)图书信息查看功能。

用来查看各项图书信息。

(3)图书信息查找功能。

通过已知信息来查找想要的图书。

(4)图书信息的删除。

可以删除特定图书。

(5)图书信息的修改。

可以修改图书的各项信息。

(6)图书信息的排序功能。

按图书信息对录入的图书进行排序。

(7)菜单选择功能,此功能也是图书信息信息管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能2 概要设计图书管理系统中主要的数据结构包含书名、图书书号、作者名、分类、出版社、出版时间、价格等;在处理过程中各项可以作为一本图书的不同属性来进行处理。

图书管理系统流程图 (2)

图书管理系统流程图 (2)

图书管理系统流程图一、引言图书管理系统是一种用于管理图书馆馆藏图书和读者借阅信息的软件系统。

本文将通过流程图来展示图书管理系统的主要功能和流程。

二、流程图下面是一个基本的图书管理系统流程图:graph TDA[开始] --> B[登录]B --> C{是否登录成功?}C -- 是 --> D[显示主菜单]D --> E{用户选择的操作}E -- 借阅图书 --> F[验证读者信息和图书是否可借]F -- 可借阅 --> G[记录借书信息并更新库存]G --> H[显示借书成功提示]E -- 归还图书 --> I[验证读者信息和图书是否借阅]I -- 已借阅 --> J[更新借书信息和库存]J --> K[显示归还成功提示]E -- 查询图书 --> L[显示可借阅图书列表]E -- 查询借阅记录 --> M[显示读者借阅记录]E -- 退出 --> N[结束]C -- 否 --> O[显示登录失败提示]O --> BH --> EK --> E三、流程说明1.开始:系统启动时,进入初始状态。

2.登录:用户输入用户名和密码进行登录。

3.是否登录成功?:判断用户输入的用户名和密码是否正确。

–若登录成功,则进入显示主菜单步骤;–若登录失败,则返回登录步骤。

4.显示主菜单:展示用户可以选择的操作,如借阅图书、归还图书、查询图书、查询借阅记录、退出。

5.用户选择的操作:根据用户选择的操作,进行相应的处理。

–借阅图书:用户输入借阅的图书编号,系统验证读者信息和图书是否可借,若可借阅,则记录借书信息并更新库存,提示借书成功。

–归还图书:用户输入归还的图书编号,系统验证读者信息和图书是否已借阅,若已借阅,则更新借书信息和库存,提示归还成功。

–查询图书:显示可借阅的图书列表。

–查询借阅记录:显示读者的借阅记录。

–退出:结束系统运行。

数据结构图书管理系统

数据结构图书管理系统

数据结构课程设计说明书年月日1设计目的(小标题黑体五号字)设计一个计算机管理系统完成图书管理基本业务(数据可以存储在一个数据文件中,数据结构、具体数据自定)。

2.设计内容与要求具体功能有:1)每种书的登记内容包括书号、书名、著作者、出版单位、现存量与库存量;2)对书号建立索引表(线性表)以提高查找效率;3)采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只将库存量增加;4)借阅:如果一种书的现存量大于0,则借出一本,登记借阅者的书证号与归还期限,改变现存量;5)归还:注销对借阅者的登记,改变该书的现存量。

3.本设计所采用的数据结构所用数据结构:线性表、查找、排序链表:用一组地址任意的存储单元存放线性表中的数据元素。

以元素(数据元素的映象) + 指针(指示后继元素存储位置)= 结点(表示数据元素或数据元素的映象)以“结点的序列”表示线性表称作线性链表(单链表)单链表就是一种链式存取的结构,为找第 i 个数据元素必须先找到第 i-1 个数据元素。

因此,查找第 i 个数据元素的基本操作为:移动指针,比较 j 与 i。

(1)malloc(size)在内存的动态存储区申请一个长度为size字节的连续空间。

(2)calloc(n,size)在内存的动态存储区申请n个长度为size字节的连续空间,函数返回值为分配空间的首地址。

若此函数未被成功执行,函数返回值为0。

(3)free(p)释放由指针p所指向的存储单元,而存储单元的大小就是最近一次调用malloc()或calloc()函数时所申请的存储空间。

运用了单链表的插入、删除、排序、修改等一些操作!4.功能模块详细设计4、1 详细设计思想(一)基本思想:(二)图书信息录入、图书信息的查询、图书信息的排序、图书信息的修改、图书信息的删除、图书的借阅、图书的归还、退出图书管理系统。

(三)程序中的主要函数有:void main() //主函数int CreateListR(LinkList *L) //尾插法建表void LocateElem(LinkList *L) //查询int Sort(LinkList *L) //递增有序排序(直接插入排序法) void Display(LinkList *L) //输出排序结果ModifyList(LinkList *L) //修改int ListDelete(LinkList *L) //删除void Borrow(LinkList *L) //借阅void Return(LinkList *L) //归还4、2 核心代码#include <stdio、h>#include <string、h>#include<stdlib、h>#include<malloc、h>typedef struct {int num;char name[20];char author[20];char press[20];int count;char price[10];} ElemType;typedef struct LNode //定义单链表结点类型{ElemType data;struct LNode *next;} LinkList;void InitList(LinkList *L) //初始化线性表{L = (LinkList *) malloc(sizeof(LinkList)); //创建头结点L->next = NULL;}int CreateListR(LinkList *L) //尾插法建表{int i, n;LinkList *s, *q, *p;p = L;while (p->next != NULL )p = p->next;printf("请输入需要录入的图书信息的个数:n=");scanf("%d", &n);for (i = 1; i < n + 1; i++) {s = (LinkList *) malloc(sizeof(LinkList));printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &s->data、num, s->data、name, s->data、author,s->data、press, &s->data、count, s->data、price);q = L->next;if (q == NULL ) {p->next = s;p = s;p->next = NULL;printf("录入成功!\n");continue;}while (q != NULL ) {if (strcmp(s->data、name, q->data、name) == 0) {printf("此图书已存在!");printf("请重新输入:\n");scanf("%d%s%s%s%d%s", &p->data、num, p->data、name,p->data、author, p->data、press, &p->data、count,p->data、price);}q = q->next;}p->next = s;p = s;p->next = NULL;printf("录入成功!\n");}return 0;}void LocateElem(LinkList *L) //查询{LinkList *p = L->next; //p指向第一个数据结点int c;int x = 0;char name1[10], author1[10], press1[10];printf(" 1 按书名查询:\n");printf(" 2 按作者名查询:\n");printf(" 3 按出版社名称:\n");printf(" 4 返回\n");printf(" 请选择1--4进行操作:\n");scanf("%d", &c);if (c > 4 || c < 1) {printf("您的输入有误!\n");scanf("%d", &c);}switch (c) {case 1:printf("请输入图书书名: \n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->data、name) != 0) //查找图书书名p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data、num, p->data、name,p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 2:printf("请输入图书作者:\n");scanf("%s", author1);while (p != NULL ) {if (strcmp(author1, p->data、author) != 0) //查找图书作者p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d\t%s\t%s\t%s\t%d\t%s", p->data、num, p->data、name,p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起,不存在此图书!\n");break;case 3:printf("请输入图书的出版社名称: \n");scanf("%s", press1);while (p != NULL ) {if (strcmp(press1, p->data、press) != 0) //查找图书出版社名称p = p->next;else {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d %s %s %s %d %s",p->data、num, p->data、name, p->data、author,p->data、press, p->data、count, p->data、price);printf("\n");p = p->next;x++;}}if (p == NULL && x == 0)printf("对不起!不存在此图书\n");break;case 4:break;}}int Sort(LinkList *L) //递增有序排序(直接插入排序法){LinkList *p = L->next, *q, *r; //p指向第一个数据结点if (p != NULL ) //若原单链表中有一个或以上的数据结点{r = p->next; //r保存*p结点直接后继结点的指针p->next = NULL; //构造只含一个数据结点的有序表p = r;while (p != NULL ) {r = p->next; //r保存*p结点的直接后继结点的指针q = L;while (q->next != NULL && q->next->data、num < p->data、num) q = q->next; //在有序表中找插入*p的直接前驱结点*q的位置p->next = q->next; //将*p插入到*q之后q->next = p;p = r; //扫描原单链表余下的结点}}return 0;}void Display(LinkList *L) //输出排序结果{LinkList *p = L->next;while (p != NULL ) {printf("书号书名作者出版社名称存馆数量定价\n");printf("%d \t %s \t %s\t %s\t%d\t %s", p->data、num,p->data、name, p->data、author, p->data、press, p->data、count,p->data、price);printf("\n");p = p->next;}}int ModifyList(LinkList *L) //修改{LinkList *p = L;char name1[10];printf("请输入要修改的图书的书名:\n");scanf("%s", name1);while (p != NULL ) {if (strcmp(name1, p->data、name) == 0) //查找所要修改的书名{printf("请输入修改后的信息!\n");printf("书号书名作者出版社名称存馆数量定价\n");scanf("%d%s%s%s%d%s", &p->data、num, p->data、name, p->data、author, p->data、press, &p->data、count, p->data、price);printf("修改成功!\n");return 0;}p = p->next;}printf("不存在此图书\n");return 0;}int ListDelete(LinkList *L) //删除{LinkList *p = L->next, *q = L;char name1[10];if (p != NULL ) {printf("请输入要删除的书名:");scanf("%s", name1);}while (p->next != NULL && strcmp(p->data、name, name1) != 0) {p = p->next;q = q->next;}if (p->next != NULL ) //如果p此时不就是最后一个节点,说明此时已经找到书{q->next = p->next;printf("删除成功!\n");return 0;}if (p->next == NULL && strcmp(name1, p->data、name) != 0) //如果p此时为最后一个结点并且没有找到与之相符的书名{printf("您输入的书名不存在,请核实后重新输入!\n");} else {q->next = NULL;printf("删除成功!\n");}return 0;}void Borrow(LinkList *L) //借阅{LinkList *p = L->next;char name1[10];printf("请输入要借阅的图书的书名:\n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->data、name) != 0) p = p->next;if (p->next == NULL && strcmp(name1, p->data、name) != 0) printf("此图书不存在!\n");else if (p->data、count < 1)printf("此书已借完!\n");else if (strcmp(name1, p->data、name) == 0) {printf("借书成功!\n");p->data、count--;}}void Return(LinkList *L) //归还{LinkList *p = L->next;char name1[10];printf("输入归还书的书名: \n");scanf("%s", name1);while (p->next != NULL && strcmp(name1, p->data、name) != 0) p = p->next;if (p->next == NULL && strcmp(name1, p->data、name) != 0)printf("错误!此图书不存在!\n");else if (strcmp(name1, p->data、name) == 0) {printf("该书归还成功!\n");p->data、count++;}}void menu() { //菜单函数printf("---------------------------------------------------------- \n");printf(" 欢迎光临图书管理系统! \n");printf("----------------------------------------------------------- \n");printf("1、图书信息录入添加功能:\n");printf("2、图书信息查询功能:\n");printf("3、图书信息排序功能:\n");printf("4、图书的修改功能:\n");printf("5、图书的删除功能:\n");printf("6、图书借阅功能:\n");printf("7、图书归还功能:\n");printf("0、退出系统:\n");printf("请选择您需要的操作:\n");}int main() //主函数{int s;LinkList *L;L = (LinkList *) malloc(sizeof(LinkList));InitList(L);menu();printf("请输入编号:\n");scanf("%d", &s);while (s != 0) {switch (s) {case 1:CreateListR(L);break;case 2:LocateElem(L);break;case 3:Sort(L);Display(L);break;case 4:ModifyList(L);break;case 5:ListDelete(L);break;case 6:Borrow(L);break;case 7:Return(L);break;case 0:printf("谢谢使用\n");break;}scanf("%d", &s);}return 0; }。

c语言图书管理系统

c语言图书管理系统
rg.h.ah = 0;
int86(0x16, &rg,&rg);
return rg。h。ah;
}
int choose(int bot,int top)/*根据Y的值选择操作*/
{
int ky,y = 7;
gotoxy(30,bot);
do
{
ky = key();
switch(ky)
{
case Key_UP:
gotoxy(x + 1, y + high - 3);
for (i = 1; i < width - 1; i++)

putchar(0xc4);

gotoxy(x + width—1,y + high —1);
putchar(0xd9);
}
int key()/*读键盘*/

union REGS rg;
int halfw(int sum,bbasic binfo[100],char *find);
void sta();
void blist();
void bmoney();
int main(void)

menu();

void menu()

int y;
_window();/*显示窗口*/
words();/*显示菜单文字*/
gotoxy(30,16);
cprintf(”Book Statistic");
gotoxy(30,19);
cprintf(”Exit”);
gotoxy(35,22);
textcolor(LIGHTGRAY);

图书馆管理系统代码

图书馆管理系统代码

图书馆管理系统代码。

txt男人偷腥时的智商仅次于爱因斯坦。

美丽让男人停下,智慧让男人留下.任何东西都不能以健康做交换.#include<stdio.h〉#include<math。

h〉#include<string。

h>#include<stdlib.h>struct books_list{char author[20]; /*作者名*/char bookname[20]; /*书名*/char publisher[20]; /*出版单位*/char pbtime[15]; /*出版时间*/char loginnum[10]; /*登陆号*/float price; /*价格*/char classfy[10]; /*分类号*/struct books_list * next; /*链表的指针域*/};struct books_list * Create_Books_Doc(); /*新建链表*/void InsertDoc(struct books_list * head); /*插入*/void DeleteDoc(struct books_list * head , int num);/*删除*/void Print_Book_Doc(struct books_list * head);/*浏览*/void search_book(struct books_list * head); /*查询*/void info_change(struct books_list * head);/*修改*/void save(struct books_list * head);/*保存数据至文件*//*新建链表头节点*/struct books_list * Create_Books_Doc(){struct books_list * head;head=(struct books_list *)malloc(sizeof(struct books_list)); /*分配头节点空间*/head—>next=NULL; /*头节点指针域初始化,定为空*/return head;}/*保存数据至文件*/void save(struct books_list * head){struct books_list *p;FILE *fp;p=head;fp=fopen("data.txt","w+"); /*以写方式新建并打开 data。

数据结构项目实践报告(2篇)

数据结构项目实践报告(2篇)

第1篇一、项目背景随着计算机技术的飞速发展,数据结构作为计算机科学的基础,其重要性日益凸显。

为了更好地理解和掌握数据结构,提高自己的编程能力,我选择了一个数据结构项目进行实践。

本项目旨在实现一个基于链表的数据结构,包括单链表、双向链表和循环链表,并对这些链表进行操作,如插入、删除、查找等。

二、项目目标1. 理解并掌握链表的基本概念和操作。

2. 实现单链表、双向链表和循环链表的数据结构。

3. 编写相应的操作函数,包括插入、删除、查找等。

4. 通过项目实践,提高自己的编程能力和数据结构知识。

三、项目实施1. 环境搭建为了实现项目,我选择了Java作为编程语言,并使用IntelliJ IDEA作为开发工具。

首先,在IntelliJ IDEA中创建一个新的Java项目,命名为“数据结构项目”。

2. 数据结构设计(1)单链表单链表由节点组成,每个节点包含数据和指向下一个节点的指针。

为了实现单链表,定义一个Node类,包含数据域data和指针域next。

```javapublic class Node {public int data;public Node next;public Node(int data) {this.data = data;this.next = null;}}```(2)双向链表双向链表与单链表类似,但每个节点包含两个指针,分别指向前一个节点和后一个节点。

定义一个DoubleNode类,包含数据域data、前指针prev和后指针next。

```javapublic class DoubleNode {public int data;public DoubleNode prev;public DoubleNode next;public DoubleNode(int data) {this.data = data;this.prev = null;this.next = null;}}```(3)循环链表循环链表是一种特殊的链表,最后一个节点的指针指向头节点,形成一个环。

图书馆库存信息管理

图书馆库存信息管理

图书馆库存信息管理一、系统描述图书馆库存信息管理的基础强化训练要求学生自己设计并编制一个小型并具有一定功能的图书管理系统,该系统要求能对图书的库存信息进行一定的统计,不要求采用数据库和图形化界面,只要求在命令提示符的界面下对图书的入库、出库、修改、增加进行操作即可,对数据的存储以文件的形式存储在外存中。

二、需求分析1、功能需求(1)图书入库(一本书的各个信息,书名ISBN等)(2)图书出库(3)修改一条图书记录(4)查询图书记录2、数据物理存储结构以及逻辑存储结构(1)每本书采用一个结构体来定义其特点如struct LNode{ int sequenceNum; //图书序号string ISBN; //ISBN编号string BookName; //书名string press; //出版社string author; //作者string date_of_in; //入库时间string date_of_out; //出库时间int store_number; //库存数double price; //单价LNode * next; //指向下一个图书};在进行数据处理的时候,每本书的消息记录存储在一个文本文档中,以便对大量外存中的数据进行操作(2)逻辑结构采用一个单链表来对每本书进行索引,单链表的节点为书本信息的结构体,当对一个节点进行操作是,若是打印节点的信息,则从文件中首先取出信息写到内存中,然后再在命令提示符中打印出来;若是进行图书出库或者图书信息的修改,则是先写到节点中,然后在保存到文件中。

三、详细设计#include<windows.h>//获取系统日期#include<fstream>#include<iostream>#include<string>#include<sstream>//istringstream#include<cstdlib>#include<stdio.h>using namespace std;enum query_form {BookName,press,author,ISBN};template <class T>bool from_string(T& t, const string& s, ios_base& (*f)(ios_base&))//字符串类型转换{istringstream iss(s);return !(iss >> f >> t).fail();}/*函数声明*/void menu(); //主菜单void sub_menu_Query(); //查询记录菜单void ADD(); //增加记录void Modify(); //修改记录void Delete(); //删除记录void query(int choice_of_query,string query_keyword); //查询记录string get_date()//获取当前系统日期并转换成yyyy-mm-dd格式{string str;char s[10];SYSTEMTIME st;GetSystemTime(&st);sprintf(s,"%d",st.wYear); str= s;str+="-";sprintf(s,"%d",st.wMonth); str+=s; str+="-";sprintf(s,"%d",st.wDay);str+=s;return str;}/*类型定义*/struct LNode{int sequenceNum; //图书序号string ISBN; //ISBN编号string BookName; //书名string press; //出版社string author; //作者string date_of_in; //入库时间string date_of_out; //出库时间int store_number; //库存数double price; //单价LNode * next; //指向下一个图书};/*链表基本操作*/LNode * CreateDefaultLink( )//创建以默认数据建立的链表{ifstream book("Bookmanagement.txt");if(!book){cerr<<"打开文件失败!"<<endl;char * s="Bookmanagement.txt";cout<<"请重新输入完整文件路径及文件名(盘符:\\路径\\文件名.txt):"<<endl;cin>>s;book.open(s);}LNode *p1,*p2,*head=NULL;p1=p2=new LNode;p1->next =NULL;int i=0,j=1;string read,r[11]; //read用来读取每一行关键字,r[1]-r[9]依次用来保存每个结点的关键字getline(book,read);read.append(1,'\n');while(j<10){string temp;while( read[i]!= '\n'&& read[i++]!='\t'){temp.append(1,read[i-1]);//依次分离一个单词,每个单词之间用垂直制表符分割}r[j]=temp;j++;}from_string<in、t>(p1->sequenceNum, r[1], dec);p1->ISBN = r[2];p1->BookName = r[3];p1->author = r[4];p1->press = r[5];from_string<int>(p1->store_number, r[6], dec);from_string<double>(p1->price, r[7], dec);p1->date_of_in=r[8];p1->date_of_out=r[9];while(!book.eof()){if(head==NULL)head=p1;else p2->next=p1;p2=p1;p1=new LNode;p1->next=NULL;getline(book,read);read.append(1,'\n');i=0,j=1;while(j<10){string temp;while(read[i]!='\n' && read[i++]!='\t'){temp.append(1,read[i-1]);//依次将一个单词}r[j]=temp;j++;}from_string<int>(p1->sequenceNum, r[1], dec);//将r[1]转换成int型,序号p1->ISBN = r[2];p1->BookName = r[3];p1->author = r[4];p1->press = r[5];from_string<int>(p1->store_number, r[6], dec);//将r[6]转换成int型,库存数from_string<double>(p1->price, r[7], dec);//将r[7]转换成double型,单价p1->date_of_in=r[8];p1->date_of_out=r[9];}return head;book.close();}void main(){system("color f1"); //改变当前控制台窗口的背景颜色为F(白色),字体颜色为1(蓝色) menu();system("pause");}/*函数实现*/void menu(){cout<<"******************************************************************** ************"<<endl;cout<<"* "<<endl;cout<<"* 图书库存管理系统"<<endl;cout<<"* 选择一个操作:*"<<endl;cout<<"* <1> 图书入库*"<<endl;cout<<"* <2> 修改一条图书记录*"<<endl;cout<<"* <3> 图书出库*"<<endl;cout<<"* <4> 查询图书记录*"<<endl;cout<<"* <5> 清屏*"<<endl;cout<<"* <6> 退出系统*"<<endl;cout<<"******************************************************************** ************"<<endl;cout<<endl;int choice=6;cout<<" 请输入您的选择(1-6):"<<endl;cin>>choice;while (choice<1 || choice>6){cout<<" 输入不正确!请重新再输入一个1至6之间的整数:"<<endl;cin>>choice;cout<<"\n\n\n\n";}switch(choice){case 1:cout<<"\n\n\n\n";ADD();break;case 2:cout<<"\n\n\n\n";Modify();break;case 3:cout<<"\n\n\n\n";Delete();break;case 4:cout<<"\n\n\n\n";sub_menu_Query();break;case 5:system("cls");menu();break;case 6:exit(0);}}void ADD(){cout<<"请依次按照顺序输入图书的信息: ISBN编号书名作者出版社单价"<<endl;LNode *new_book=new LNode;char t[60];cin>>new_book->ISBN;cin>>new_book->BookName;cin.get();gets(t); new_book->author=t;cin>>new_book->press;cin.get();gets(t);new_book->price=atof(t);new_book->date_of_in=get_date();new_book->sequenceNum=0;//初始化图书的序号,后面再修改。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实用文档 单链表:typedef struct {

char num[20]; char name[50]; float pri;

}Book; typedef struct LNode{ //线性表的单链表存储 Book book; //数据域 struct LNode *next; //指针域 }LNode,*LinkList;

void Input(LinkList &L){ //前插法创建图书链表 LinkList p; L=new LNode; L->next=NULL;//初始化单链表

ifstream inFile("book.txt"); if(!inFile){ cerr<<"Cannot open this file!">book_head1>>book_head2>>book_head3;//读取文件中的标题

while(!inFile.eof()){//到达文件尾部前逐行依次读取所有图书数据 p=new LNode; //生成新结点 inFile>>p->book.num>>p->book.name>>p->book.pri; p->next=L->next; //插入到表头 L->next=p;h } inFile.close(); cout<<"读取完毕!"<} void Output(LinkList &L){//输出 LinkList p; p=L->next; while(p){

coutnext; } cout<<"\n信息显示完毕\n"<实用文档 } void Searchname(LinkList &L){ LinkList p; p=L->next; char name1[20]; cout<<"请输入要查找的书名:"; cin>>name1; while(p){ if(strcmp(name1,p->book.name)==0){

coutnext; } } void Searchnum(LinkList &L){ int i; int j=0; LinkList p; p=L->next; //p指向第一个结点 cout<<"请输入要查找的书籍的位置"; cin>>i; while(p&&j

j++; p=p->next; } if(!p||j>i){ //第i个元素不存在 cout<<"错误!"< } cout<<"第"<

cout

void Max(LinkList &L){ LinkList pmax,p; pmax=L->next; p=L->next->next; while(p){ if(p->book.pri>pmax->book.pri) pmax=p; 实用文档 p=p->next; }

cout

void Sort(LinkList L){ cout<<"此功能还未实现,研究中"<}

void Inverse(LinkList &L){ LinkList p; //待插入到链表的节点 LinkList q; p = L->next; L->next = NULL; //初始化链表 ofstream outFile("bookinverse.txt"); //每一次将p插入到L(头结点)与L->next(链表的第一个结点之间) while (p){ q = p->next; p->next = L->next; L->next = p; p = q; } p=L->next;//循环完后,p指向的是链表末尾,需要重置回首元结点,否则无法写入文件 while(p){

cout

outFilenext; } cout<<"信息已写入bookinverse.txt中!"<} void Count(LinkList L){ int i=0; LinkList p; p=L->next; while(p){ i++; p=p->next; 实用文档 } cout<<"当前的图书总数为:"<}

void Insert(LinkList L){ Book bk; LinkList p=L; //初始化 LinkList s=new LNode; //新结点s int i; int j=0; cout<<"请输入待插入书籍的位置"< cin>>i; cout<<"请输入待插入的书籍的信息"< cout<<"书号: "< cin>>bk.num; cout<<"书名: "< cin>>bk.name; cout<<"价格: "< cin>>bk.pri; while(p&&j j++; p=p->next; } if(!p||j>i-1){ cout<<"错误!"< } s->book=bk; //将结点s的数据域置为bk s->next=p->next; //将结点s插入L中 p->next=s;

//重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p){

outFilenext; } cout<<"插入新的书籍后的书籍信息已重新写入book.txt文件"<} void Delete(LinkList L){ Book bk1; LinkList p=L; //初始化 实用文档 LinkList q; //临时保存被删除结点的地址以备释放 int i; int j=0; cout<<"请输入待删除书籍的位置"< cin>>i; while(p->next&&j j++; p=p->next; } if(!(p->next)||j>i-1){ cout<<"错误!"< } q=p->next; p->next=q->next; bk1=q->book; delete q;

//重新写入book.txt文件 ofstream outFile("book.txt"); p=L->next; while(p){

outFilenext; } cout<<"删除所选书籍后的书籍信息已重新写入book.txt文件"<}

顺序表 typedef struct{ Book *book; int length;//图书表的图书记录个数 }SqList;

void Input(SqList &L){ int i=0; char book_head1[10],book_head2[10],book_head3[10]; //定义文件中标题 L.book=new Book[MAXSIZE];

ifstream inFile("book.txt"); //打开文件 if(!inFile) {

相关文档
最新文档